diff --git a/AppleBatch_June.AppleWebServace/AppleManageWeb.cs b/AppleBatch_June.AppleWebServace/AppleManageWeb.cs new file mode 100644 index 0000000..9312d75 --- /dev/null +++ b/AppleBatch_June.AppleWebServace/AppleManageWeb.cs @@ -0,0 +1,3022 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Web; +using AppleBatch_June.Domain; +using AppleBatch_June.ExecuteTasks; +using AppleBatch_June.Model; +using AppleBatch_June.Utils; +using DotNet.Utilities; + +namespace AppleBatch_June.AppleWebServace +{ + public class AppleManageWeb : AppleWebBase + { + private string redirectURI = "https://appleid.apple.com"; + + private static string homeLanguage = "zh_CN"; + + protected string Apple_Widget_Key = "af1139274f266b22b68c2a3e7ad932cb3c0bbe854e13a79af78dcc73136882c3"; + + public string widgKey = string.Empty; + + public AppleChangeItem _changeItem; + + private Func getCodeAct_; + + private string appleHomeUrl = "https://appleid.apple.com/account/manage"; + + private static readonly object lockSendMsmObj = new object(); + + private readonly Dictionary objSendMsmS = new Dictionary(); + + public HttpResult LoginloginReust; + + private string authUrl => "https://idmsa.apple.com/appleauth/auth/signin?widgetKey=" + Apple_Widget_Key + "&language=" + homeLanguage; + + protected string iframeId { get; set; } + + public string appleId { get; set; } + + public bool openHsa2 { get; set; } + + private AvailableSecurityQuestions securityQuestions { get; set; } + + public AppleAcount acount { get; set; } + + public bool isVieyBirthday { get; set; } + + public bool isViey { get; set; } + + public bool AuthenDoubleOpenState { get; set; } + + public bool isChangAppleId { get; set; } + + public bool isPwdViey { get; set; } + + private AuthsigninConfig authsigninConfig { get; set; } + + private string accountFirstName { get; set; } + + private string accountLastName { get; set; } + + private LoginAppleInfo loginAppleInfo { get; set; } + + private string XAppleIDAccountCountry { get; set; } = ""; + + + private string XAppleIDAccountCountry_SOUSUO { get; set; } = ""; + + + public string authSupportpin { get; set; } = ""; + + + private bool incompatibleDevice { get; set; } + + public AppleManageWeb(bool _openVpn, Action _action, Action _applyAtion, ITaskRunState _taskState) + : base(_action, _applyAtion, _taskState) + { + taskState = _taskState ?? throw new Exception("任务运行状态不能是空的"); + base.openVpn = _openVpn; + iframeId = APPLEHCHelp.getIframeId(); + } + + public bool applyChangeAcount(AppleAcount _acount, AppleChangeItem changeItem, bool errorGoint, string _notifiKey, ref string accountName) + { + acount = _acount; + appleId = _acount.appleId; + base.noticeKey = _notifiKey; + _changeItem = changeItem; + listCookie.Add(new CookieItem + { + Key = "geo", + Value = "CN" + }); + initUserAgent(); + authsigninConfig = new AuthsigninConfig + { + Apple_Widget_Key = Apple_Widget_Key, + authUrl = authUrl, + homeLanguage = homeLanguage, + iframeId = iframeId, + redirectURI = redirectURI, + refererUrl = "https://idmsa.apple.com/" + }; + try + { + if (changeItem.CreatePin) + { + base.fristGetProxy = true; + } + if (LoginWeb() && appleauthAuth(acount)) + { + if (isPwdViey && isPwdViey && isChangAppleId && isVieyBirthday) + { + ProxyAccountCache.addwebProxyIp(acount.appleId, base.ProxyIp, base.userAgent, iframeId); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "账号修改完成"); + return true; + } + GetGsWsToken(); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "登录成功"); + if (intoHome()) + { + ProxyAccountCache.addwebProxyIp(acount.appleId, base.ProxyIp, base.userAgent, iframeId); + string apple_Widget_Key = (base.apiKey = "cbf64fd6843ee630b463f358ea0b707b"); + Apple_Widget_Key = apple_Widget_Key; + bool flag = true; + if (_changeItem.isDeleteDevice) + { + getSecuritydevices(); + } + if (changeItem.CreatePin) + { + if (string.IsNullOrEmpty(authSupportpin)) + { + flag = CreateSupportpin(appleHomeUrl); + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, authSupportpin); + flag = true; + } + } + if (!string.IsNullOrEmpty(changeItem.newQt1)) + { + if (!(flag = changQuestions(changeItem.newQt1, changeItem.newQt2, changeItem.newQt3))) + { + flag = false; + } + if (!flag && !errorGoint) + { + return false; + } + } + if (!string.IsNullOrEmpty(changeItem.newPwd)) + { + if (!(flag = changePwd(acount.applePwd, changeItem.newPwd))) + { + flag = false; + } + if (!flag && !errorGoint) + { + return false; + } + } + if (loginAppleInfo != null && !string.IsNullOrEmpty(loginAppleInfo?.security?.rescueEmail) && changeItem.isRemoveRescueEmail) + { + flag = RemoveRescueEmail(); + } + if (!string.IsNullOrEmpty(changeItem.newshengri) && !isVieyBirthday) + { + if (!(flag = changeBirthDate(changeItem.newshengri))) + { + flag = false; + } + if (!flag && !errorGoint) + { + return false; + } + } + if (!string.IsNullOrEmpty(changeItem.editAddrs)) + { + flag = editAddrs(changeItem.editAddrs, changeItem.ckShippingAddress); + } + if (!string.IsNullOrEmpty(acount.newAppleId) && !isChangAppleId) + { + bool num = setAccnount(acount.newAppleId, acount.newApplePopPwd, "cbf64fd6843ee630b463f358ea0b707b"); + if (!num && flag) + { + int num2 = Tools.ToNetWorkInt(ConfigUtlis.getConfigValue("comNetworkConfig"), 0); + if (base.openVpn && num2 == 0) + { + APIUtlis.ApiApplyAct(45, "新邮箱验证异常"); + } + } + flag = num; + } + if (changeItem.pay != null) + { + flag = changenPayment(changeItem.pay); + } + if (changeItem.isUnlinkFamily) + { + bool family = getFamily(); + if (!flag) + { + flag = family; + } + } + return flag; + } + } + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + action?.Invoke(base.noticeKey, DisplyType.xinxi, ex.Message); + } + finally + { + accountName = appleId; + } + return false; + } + + public bool CreateSupportpin(string appleHomeUrl) + { + string postData = "{}"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-I-TimeZone", "Asia/Shanghai"); + webHeaderCollection.Add("X-Apple-I-Request-Context", "ca"); + if (handelDic.ContainsKey("scnt")) + { + webHeaderCollection.Add("scnt", handelDic["scnt"]); + } + webHeaderCollection.Add("X-Apple-Api-Key", base.apiKey.Trim()); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + HttpResult httpResult = postWebContent("https://appleid.apple.com/account/manage/supportpin", postData, "https://appleid.apple.com/account/manage", webHeaderCollection); + if (httpResult.StatusCode == HttpStatusCode.BadRequest || httpResult.StatusCode == HttpStatusCode.Unauthorized) + { + ServiceErrorsModel serviceErrorsModel = Tools.Todejosn(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "PIN失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "PIN失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "PIN失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + } + if (httpResult.StatusCode == HttpStatusCode.OK) + { + Dictionary dataSource = Tools.Todejosn>(httpResult.Html); + string dicVal = dataSource.getDicVal("pin", ""); + string dicVal2 = dataSource.getDicVal("localizedDate", ""); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "支持 PIN:" + dicVal + ",有效期:" + dicVal2); + string[] allKeys = httpResult.Header.AllKeys; + foreach (string text in allKeys) + { + if (!handelDic.ContainsKey(text)) + { + handelDic.TryAddDic(text, httpResult.Header[text]); + } + else + { + handelDic[text] = httpResult.Header[text]; + } + } + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "获取PIN码失败,未知异常"); + return false; + } + + private bool RemoveRescueEmail() + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在移除救援邮箱"); + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + if (handelDic.ContainsKey("scnt")) + { + webHeaderCollection.AddWebHander("scnt", handelDic["scnt"]); + } + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-I-Request-Context", "ca"); + webHeaderCollection.AddWebHander("X-Apple-I-TimeZone", "Asia/Shanghai"); + webHeaderCollection.AddWebHander("X-Apple-Api-Key", base.apiKey); + webHeaderCollection.AddWebHander("Origin", "https://appleid.apple.com"); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + HttpResult httpResult = DeleteWebContent("https://appleid.apple.com/account/manage/security/email/rescue", "", "https://appleid.apple.com/", webHeaderCollection); + if (httpResult.StatusCode != HttpStatusCode.OK && httpResult.StatusCode != HttpStatusCode.NoContent) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "除救援邮箱移除失败"); + return false; + } + action?.Invoke(base.noticeKey, DisplyType.balance, "已移除"); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "除救援邮箱移除成功"); + return true; + } + + private bool changePwd(string oldPwd, string newPwd, int retry = 0) + { + string putData = "{\"currentPassword\":\"" + oldPwd + "\",\"newPassword\":\"" + newPwd + "\"}"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-Domain-Id", "1"); + if (handelDic.ContainsKey("scnt")) + { + webHeaderCollection.AddWebHander("scnt", handelDic["scnt"]); + } + webHeaderCollection.AddWebHander("X-Apple-Api-Key", base.apiKey.Trim()); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/manage/security/password", putData, appleHomeUrl, webHeaderCollection); + UpdateScnt(httpResult.Header); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.OK) + { + acount.applePwd = newPwd; + applyAtion?.Invoke(base.noticeKey, DisplyType.mima, newPwd); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密码修改成功"); + string[] allKeys = httpResult.Header.AllKeys; + foreach (string text in allKeys) + { + if (!handelDic.ContainsKey(text)) + { + handelDic.TryAddDic(text, httpResult.Header[text]); + } + else + { + handelDic[text] = httpResult.Header[text]; + } + } + return true; + } + _ = httpResult.StatusCode; + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密码修改失败,未知异常"); + return false; + } + ServiceErrorsModel serviceErrorsModel = Tools.Todejosn(httpResult.Html); + if (serviceErrorsModel != null) + { + string serviceError = getServiceError(serviceErrorsModel); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密码修改失败:" + serviceError); + if ((serviceError.Contains("发生未知错误") || serviceError.Contains("无法处理你的请求")) && retry < base.MaxRetryCount) + { + Thread.Sleep(3000); + if (retry != 0) + { + base.ProxyIp = ""; + } + return changePwd(oldPwd, newPwd, retry + 1); + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密码修改失败,未知异常"); + } + return false; + } + + private bool changQuestions(string newqt1, string newqt2, string newqt3, int retry = 0) + { + string text = ""; + try + { + if (securityQuestions != null) + { + AothQuestions obj = new AothQuestions + { + questions = new AothQuestions.Question[3] + }; + obj.questions[0] = new AothQuestions.Question + { + id = 130, + answer = newqt1, + number = 1, + question = securityQuestions.availableSecurityQuestions[0][0].question + }; + obj.questions[1] = new AothQuestions.Question + { + id = 136, + answer = newqt2, + number = 2, + question = securityQuestions.availableSecurityQuestions[1][0].question + }; + obj.questions[2] = new AothQuestions.Question + { + id = 142, + answer = newqt3, + number = 3, + question = securityQuestions.availableSecurityQuestions[2][0].question + }; + text = Tools.Toenjson(obj); + } + else + { + text = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes("{\"questions\":[{\"id\":130,\"question\":\"你少年时代最好的朋友叫什么名字?\",\"number\":1,\"answer\":\"" + newqt1 + "\"},{\"id\":136,\"question\":\"你的理想工作是什么?\",\"number\":2,\"answer\":\"" + newqt2 + "\"},{\"id\":142,\"question\":\"你的父母是在哪里认识的?\",\"number\":3,\"answer\":\"" + newqt3 + "\"}]}")); + } + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + text = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes("{\"questions\":[{\"id\":130,\"question\":\"你少年时代最好的朋友叫什么名字?\",\"number\":1,\"answer\":\"" + newqt1 + "\"},{\"id\":136,\"question\":\"你的理想工作是什么?\",\"number\":2,\"answer\":\"" + newqt2 + "\"},{\"id\":142,\"question\":\"你的父母是在哪里认识的?\",\"number\":3,\"answer\":\"" + newqt3 + "\"}]}")); + } + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-Domain-Id", "1"); + if (handelDic.ContainsKey("scnt")) + { + webHeaderCollection.AddWebHander("scnt", handelDic["scnt"]); + } + webHeaderCollection.AddWebHander("X-Apple-Api-Key", base.apiKey.Trim()); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/manage/security/questions", text, appleHomeUrl, webHeaderCollection, "application/json"); + UpdateScnt(httpResult.Header); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.OK) + { + applyAtion?.Invoke(base.noticeKey, DisplyType.qt1, newqt1); + applyAtion?.Invoke(base.noticeKey, DisplyType.qt2, newqt2); + applyAtion?.Invoke(base.noticeKey, DisplyType.qt3, newqt3); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密保修改成功"); + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密保修改失败,未知异常"); + return false; + } + ServiceErrorsModel serviceErrorsModel = Tools.Todejosn(httpResult.Html); + if (serviceErrorsModel != null) + { + string serviceError = getServiceError(serviceErrorsModel); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密保修改失败:" + serviceError); + if ((serviceError.Contains("发生未知错误") || serviceError.Contains("无法处理你的请求")) && retry < base.MaxRetryCount) + { + Thread.Sleep(3000); + if (retry != 0) + { + base.ProxyIp = ""; + } + return changQuestions(newqt1, newqt2, newqt3, retry + 1); + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密保修改失败"); + } + return false; + } + + private bool changeBirthDate(string fullBirthDate, int retry = 0) + { + string putData = "{\"fullBirthDate\":\"" + fullBirthDate + "\"}"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-Domain-Id", "1"); + if (handelDic.ContainsKey("scnt")) + { + webHeaderCollection.AddWebHander("scnt", handelDic["scnt"]); + } + webHeaderCollection.AddWebHander("X-Apple-Api-Key", base.apiKey.Trim()); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/manage/security/birthday", putData, appleHomeUrl, webHeaderCollection); + UpdateScnt(httpResult.Header); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.OK) + { + applyAtion?.Invoke(base.noticeKey, DisplyType.shengri, fullBirthDate); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "生日修改完成"); + return true; + } + if (httpResult.StatusCode == HttpStatusCode.Forbidden && retry == 0 && GetGsWsToken()) + { + return changeBirthDate(fullBirthDate, retry + 1); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "生日修改失败,未知异常"); + return false; + } + if (httpResult.StatusCode == HttpStatusCode.Unauthorized) + { + GetGsWsToken(); + } + ServiceErrorsModel serviceErrorsModel = Tools.Todejosn(httpResult.Html); + if (serviceErrorsModel != null) + { + string serviceError = getServiceError(serviceErrorsModel); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "生日修改失败:" + serviceError); + if ((serviceError.Contains("发生未知错误") || serviceError.Contains("无法处理你的请求")) && retry < base.MaxRetryCount) + { + Thread.Sleep(3000); + if (retry != 0) + { + base.ProxyIp = ""; + } + return changeBirthDate(fullBirthDate, retry + 1); + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "生日修改失败"); + } + return false; + } + + public StackablePaymentInfos getAddressInfo(bool isAgent = false) + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-Api-Key", base.apiKey); + webHeaderCollection.AddWebHander("x-apple-store-front", "143465-19,8"); + webHeaderCollection.AddWebHander("Origin", "https://apps.apple.com"); + HttpResult webJsonContent = getWebJsonContent("https://buy.apps.apple.com/account/stackable/paymentInfos?context=CWA&isVideoEverywhere=true", "https://apps.apple.com/", webHeaderCollection, "application/json"); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + return Tools.Todejosn(webJsonContent.Html); + } + if (webJsonContent.StatusCode == HttpStatusCode.Unauthorized) + { + if (!authV1Gs()) + { + GetGsWsToken(); + authV1Gs(); + } + if (!isAgent) + { + return getAddressInfo(isAgent: true); + } + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "地址信息获取异常"); + return null; + } + + public bool getAccountPaymentOptions(int retryCount = 0) + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-Api-Key", base.apiKey); + webHeaderCollection.AddWebHander("x-apple-store-front", "143465-19,8"); + webHeaderCollection.AddWebHander("Origin", "https://apps.apple.com"); + HttpResult webJsonContent = getWebJsonContent("https://buy.apps.apple.com/account/paymentOptions", "https://apps.apple.com/", webHeaderCollection, "application/json"); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + return true; + } + if (webJsonContent.StatusCode == HttpStatusCode.Unauthorized) + { + string text = "."; + for (int i = 0; i < retryCount; i++) + { + text += "."; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "获取账号支付方式" + text); + if (!authV1Gs()) + { + GetGsWsToken(); + authV1Gs(); + } + if (retryCount <= 3) + { + return getAccountPaymentOptions(retryCount + 1); + } + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "设备获取异常"); + return false; + } + + public bool getAccountPaymentOptionsContext() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("x-apple-store-front", "143465-19,8"); + webHeaderCollection.AddWebHander("Origin", "https://apps.apple.com"); + if (getWebJsonContent("https://buy.apps.apple.com/account/stackable/paymentInfos?context=CWA&isVideoEverywhere=true", "https://apps.apple.com/", webHeaderCollection, "application/json").StatusCode == HttpStatusCode.OK) + { + return true; + } + return false; + } + + public bool authV1Gs() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("x-apple-store-front", "143465-19,8"); + webHeaderCollection.AddWebHander("Origin", "https://apps.apple.com"); + HttpResult httpResult = postWebContent("https://auth.apps.apple.com/auth/v1/gs", "", "https://apps.apple.com/", webHeaderCollection, "*/*"); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + return true; + } + if (httpResult.StatusCode == HttpStatusCode.Unauthorized) + { + return false; + } + return true; + } + + private bool changenPayment(PaymentInfo pay, int retry = 0) + { + string text = "{\"ownerName\":{\"firstName\":\"" + pay.ownerName.firstName + "\",\"lastName\":\"" + pay.ownerName.lastName + "\"},\"phoneNumber\":{\"areaCode\":\"" + pay.phoneNumber.areaCode + "\",\"number\":\"" + pay.phoneNumber.number + "\",\"countryCode\":\"" + pay.phoneNumber.countryCode + "\"},\"billingAddress\":{\"line1\":\"" + pay.billingAddress.line1 + "\",\"line2\":\"" + pay.billingAddress.line2 + "\",\"line3\":\"" + pay.billingAddress.line3 + "\",\"suburb\":\"" + pay.billingAddress.suburb + "\",\"county\":\"" + pay.billingAddress.county + "\",\"city\":\"" + pay.billingAddress.city + "\",\"countryCode\":\"" + pay.billingAddress.countryCode + "\",\"postalCode\":\"" + pay.billingAddress.postalCode + "\",\"stateProvinceName\":\"" + pay.billingAddress.stateProvinceName + "\"},{0}\"id\":1}"; + string webAppend = pay.webAppend; + if (!string.IsNullOrEmpty(webAppend)) + { + string text2 = ""; + string[] array = webAppend.Split('&'); + for (int i = 0; i < array.Length; i++) + { + string[] array2 = array[i].Split('='); + if (array2.Length == 2) + { + string text3 = array2[0]; + string text4 = array2[1]; + text2 = text2 + "\"" + text3 + "\":\"" + text4 + "\","; + } + } + text = text.Replace("{0}", text2); + } + else + { + text = text.Replace("{0}", ""); + } + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-Domain-Id", "1"); + if (handelDic.ContainsKey("scnt")) + { + webHeaderCollection.AddWebHander("scnt", handelDic["scnt"]); + } + webHeaderCollection.AddWebHander("X-Apple-Api-Key", base.apiKey.Trim()); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/manage/payment/method/none/1", text, appleHomeUrl, webHeaderCollection); + UpdateScnt(httpResult.Header); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.OK) + { + applyAtion?.Invoke(base.noticeKey, DisplyType.guojia, pay.billingAddress.countryCode); + AppleItunesLogin loginIdUserInfo = iTunesAccountLoginCache.getLoginIdUserInfo(acount.appleId, acount.applePwd); + if (loginIdUserInfo != null) + { + loginIdUserInfo.Area = AppleUtlis.GetAreaCodeByCode(pay.billingAddress.countryCode); + loginIdUserInfo.software = AppleUtlis.GetStoreIdByCode(pay.billingAddress.countryCode); + iTunesAccountLoginCache.removeReddemUserInfo(loginIdUserInfo.account, loginIdUserInfo.StdndbyKeyGuid); + } + iCloudAccountLoginCache.removeUserInfoByAppleId(acount.appleId, acount.applePwd); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "国家修改完成"); + return true; + } + if (httpResult.StatusCode == HttpStatusCode.Forbidden) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "国家修改失败,请求错误"); + } + if (retry == 0) + { + getAccountPaymentOptions(); + GetGsWsToken(); + return changenPayment(pay, retry + 1); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "国家修改失败,未知异常:" + (int)httpResult.StatusCode); + return false; + } + ServiceErrorsModel serviceErrorsModel = Tools.Todejosn(httpResult.Html); + if (serviceErrorsModel != null) + { + string serviceError = getServiceError(serviceErrorsModel); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "国家修改失败:" + serviceError); + if (serviceError.Contains("发生未知错误") && retry < base.MaxRetryCount) + { + Thread.Sleep(3000); + if (retry != 0) + { + base.ProxyIp = ""; + } + return changenPayment(pay, retry + 1); + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "国家修改失败,未知异常"); + } + return false; + } + + public bool editAddrs(string addres, bool ckShippingAddress) + { + Dictionary dictionary = new Dictionary(); + Dictionary dictionary2 = new Dictionary(); + string[] array = addres.Split('|'); + foreach (string text in array) + { + if (string.IsNullOrEmpty(text)) + { + continue; + } + string[] array2 = text.Split(':'); + if (array2.Length != 2) + { + continue; + } + string text2 = array2[0]; + if (!(text2 == "姓氏")) + { + if (!(text2 == "名字")) + { + dictionary2.Add(ConverUTF8(array2[0].Trim()), ConverUTF8(array2[1].Trim())); + } + else + { + dictionary.Add("firstName", ConverUTF8(array2[1].Trim())); + } + } + else + { + dictionary.Add("lastName", ConverUTF8(array2[1].Trim())); + } + } + if (dictionary.Count > 0) + { + if (dictionary.Count == 1) + { + if (dictionary.ContainsKey("firstName")) + { + dictionary.Add("lastName", accountLastName); + } + else + { + dictionary.Add("firstName", accountFirstName); + } + } + dictionary.Add("middleName", ""); + EditMangName(Tools.Toenjson(dictionary)); + } + if (!ckShippingAddress) + { + return EditAddres(dictionary2); + } + return ShippingAddres(dictionary2); + } + + public bool ShippingAddres(Dictionary pairs, int retry = 0) + { + StackablePaymentInfos addressInfo = getAddressInfo(); + if (addressInfo != null && addressInfo.data != null && addressInfo.data.attributes != null) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在修改配送地址"); + string text = getDicValue(pairs, "公司", ""); + string text2 = ""; + string text3 = ""; + string text4 = ""; + string text5 = ""; + string text6 = ""; + string text7 = ""; + string text8 = ""; + string text9 = ""; + if (addressInfo.data.attributes.shippingAddressInfo != null) + { + StackablePaymentInfos.ShippingaddressinfoModel shippingAddressInfo = addressInfo.data.attributes.shippingAddressInfo.shippingAddressInfo; + text2 = shippingAddressInfo.addressShippingCountryCode; + text3 = getDicValue(pairs, "城市", shippingAddressInfo.addressShippingCity); + text4 = getDicValue(pairs, "邮编", shippingAddressInfo.addressShippingPostalCode); + text5 = getDicValue(pairs, "街道地址", shippingAddressInfo.addressShippingLineFirst); + text6 = getDicValue(pairs, "账单名字", shippingAddressInfo.shippingFirstName); + text7 = getDicValue(pairs, "省/市", shippingAddressInfo.addressShippingStateProvince); + text8 = getDicValue(pairs, "楼号单元", shippingAddressInfo.addressShippingLineSecond); + text9 = getDicValue(pairs, "账单姓氏", shippingAddressInfo.shippingLastName); + } + else if (addressInfo.data.attributes.paymentInfos != null && addressInfo.data.attributes.paymentInfos.Length != 0) + { + StackablePaymentInfos.Billingaddress billingAddress = addressInfo.data.attributes.paymentInfos[0].billingAddress; + text2 = billingAddress.addressOfficialCountryCode; + text3 = getDicValue(pairs, "城市", billingAddress.addressOfficialCity); + text4 = getDicValue(pairs, "邮编", billingAddress.addressOfficialPostalCode); + text5 = getDicValue(pairs, "街道地址", billingAddress.addressOfficialLineFirst); + text6 = getDicValue(pairs, "账单名字", billingAddress.billingFirstName); + text7 = getDicValue(pairs, "省/市", billingAddress.addressOfficialStateProvince); + text8 = getDicValue(pairs, "楼号单元", billingAddress.addressOfficialLineSecond); + text9 = getDicValue(pairs, "账单姓氏", billingAddress.billingLastName); + } + if (string.IsNullOrEmpty(text2)) + { + text2 = XAppleIDAccountCountry_SOUSUO; + } + if (!string.IsNullOrEmpty(text)) + { + text = ",\"addressShippingCompanyName\":\"" + text + "\""; + } + string postData = "{\"addressShippingCountryCode\":\"" + text2 + "\",\"addressShippingCity\":\"" + text3 + "\",\"shippingLastName\":\"" + text9 + "\",\"addressShippingPostalCode\":\"" + text4 + "\",\"addressShippingLineFirst\":\"" + text5 + "\",\"shippingFirstName\":\"" + text6 + "\",\"addressShippingStateProvince\":\"" + text7 + "\",\"addressShippingLineSecond\":\"" + text8 + "\"" + text + "}"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-Api-Key", base.apiKey); + webHeaderCollection.AddWebHander("x-apple-store-front", "143465-19,8"); + webHeaderCollection.AddWebHander("Origin", "https://apps.apple.com"); + HttpResult httpResult = postWebContent("https://buy.apps.apple.com/account/shippingAddress/edit", postData, "https://apps.apple.com/", webHeaderCollection); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.OK) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "配送地址修改完成"); + action?.Invoke(base.noticeKey, DisplyType.reddemLose, ""); + return true; + } + if (httpResult.StatusCode == HttpStatusCode.Forbidden) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "配送地址修改失败,请求错误"); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "信息修改失败,未知异常:" + httpResult.StatusCode); + return false; + } + ServiceErrorsModel serviceErrorsModel = Tools.Todejosn(httpResult.Html); + if (serviceErrorsModel != null) + { + string serviceError = getServiceError(serviceErrorsModel); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "配送地址修改失败:" + serviceError); + if (serviceError.Contains("发生未知错误") && retry < base.MaxRetryCount) + { + Thread.Sleep(3000); + if (retry != 0) + { + base.ProxyIp = ""; + } + return EditAddres(pairs, retry + 1); + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "配送地址修改失败"); + } + return false; + } + return false; + } + + public bool EditMangName(string putJson, int retry = 0) + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-Domain-Id", "1"); + if (handelDic.ContainsKey("scnt")) + { + webHeaderCollection.AddWebHander("scnt", handelDic["scnt"]); + } + webHeaderCollection.AddWebHander("X-Apple-Api-Key", base.apiKey.Trim()); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/manage/name", putJson, appleHomeUrl, webHeaderCollection); + UpdateScnt(httpResult.Header); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.OK) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "名称修改完成"); + return true; + } + if (httpResult.StatusCode == HttpStatusCode.Forbidden) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "名称修改失败,请求错误"); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "名称修改失败,未知异常"); + return false; + } + ServiceErrorsModel serviceErrorsModel = Tools.Todejosn(httpResult.Html); + if (serviceErrorsModel != null) + { + string serviceError = getServiceError(serviceErrorsModel); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "名称修改失败失败:" + serviceError); + if (serviceError.Contains("发生未知错误") && retry < base.MaxRetryCount) + { + Thread.Sleep(3000); + if (retry != 0) + { + base.ProxyIp = ""; + } + return EditMangName(putJson, retry + 1); + } + } + return false; + } + + public bool EditAddres(Dictionary pairs, int retry = 0) + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-Domain-Id", "1"); + webHeaderCollection.AddWebHander("X-Apple-Api-Key", base.apiKey.Trim()); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + HttpResult webJsonContent = getWebJsonContent("https://appleid.apple.com/account/manage/payment", "https://appleid.apple.com/account/manage", webHeaderCollection); + UpdateScnt(webJsonContent.Header); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在修改内容"); + string text = "ownerName"; + ManagePayment payment = Tools.Todejosn(webJsonContent.Html); + string text2 = ""; + if (pairs.ContainsKey("税号")) + { + text2 = "\"taxId\":\"" + getDicValue(pairs, "税号", "") + "\","; + } + else if (payment.primaryPaymentMethod.taxId != null) + { + text2 = "\"taxId\":\"" + payment.primaryPaymentMethod.taxId + "\","; + } + string text3 = ""; + if (pairs.ContainsKey("卡号")) + { + text3 = text3 + "\"number\":\"" + getDicValue(pairs, "卡号", "") + "\","; + text = "nameOnCard"; + } + else if (payment.primaryPaymentMethod.number != null) + { + text3 = text3 + "\"number\":\"" + payment.primaryPaymentMethod.number + "\","; + } + if (pairs.ContainsKey("有效期限年")) + { + text3 = text3 + "\"expirationYear\":\"" + getDicValue(pairs, "有效期限年", "") + "\","; + } + else if (payment.primaryPaymentMethod.expirationYear.HasValue) + { + text3 = text3 + "\"expirationYear\":\"" + payment.primaryPaymentMethod.expirationYear + "\","; + } + if (pairs.ContainsKey("有效期限月")) + { + text3 = text3 + "\"expirationMonth\":\"" + getDicValue(pairs, "有效期限月", "") + "\","; + } + else if (payment.primaryPaymentMethod.expirationMonth.HasValue) + { + text3 = text3 + "\"expirationMonth\":\"" + payment.primaryPaymentMethod.expirationMonth + "\","; + } + if (pairs.ContainsKey("安全码")) + { + text3 = text3 + "\"cvv\":\"" + getDicValue(pairs, "安全码", "") + "\","; + } + if (payment.primaryPaymentMethod.nameOnCard != null) + { + text = "nameOnCard"; + } + string text4 = ""; + if (payment.primaryPaymentMethod.phoneNumber != null && payment.primaryPaymentMethod.phoneNumber.number != null && payment.primaryPaymentMethod.phoneNumber.areaCode != null && payment.primaryPaymentMethod.phoneNumber.countryCode != null) + { + text4 = "\"phoneNumber\":{\"areaCode\":\"" + (getDicValue(pairs, "电话", payment.primaryPaymentMethod.phoneNumber.number).Contains(getDicValue(pairs, "区号", payment.primaryPaymentMethod.phoneNumber.areaCode)) ? "" : getDicValue(pairs, "区号", payment.primaryPaymentMethod.phoneNumber.areaCode)) + "\",\"number\":\"" + getDicValue(pairs, "电话", payment.primaryPaymentMethod.phoneNumber.number).Replace("(", "").Replace(")", "").Replace("-", "") + .Replace(" ", "") + "\",\"countryCode\":\"" + payment.primaryPaymentMethod.phoneNumber.countryCode + "\"},"; + } + else + { + string text5 = ""; + string text6 = ""; + NationalList nationalList = (from c in new NationalData().getMation() + where c.payment.billingAddress.countryCode.ToUpper() == payment.primaryPaymentMethod.paymentAccountCountryCode.ToUpper() + select c).FirstOrDefault(); + if (nationalList != null) + { + if (nationalList.payment.phoneNumber.number.StartsWith("410")) + { + text5 = nationalList.payment.phoneNumber.number.Replace("410", ""); + text6 = "410"; + } + else + { + text5 = nationalList.payment.phoneNumber.number; + text6 = nationalList.payment.phoneNumber.areaCode; + } + text4 = "\"phoneNumber\":{\"areaCode\":\"" + text6 + "\",\"number\":\"" + text5 + "\",\"countryCode\":\"" + payment.primaryPaymentMethod.phoneNumber.countryCode + "\"},"; + } + } + string putData = string.Concat("{\"" + text + "\":{\"firstName\":\"" + getDicValue(pairs, "账单名字", payment.primaryPaymentMethod.ownerName.firstName) + "\",\"lastName\":\"" + getDicValue(pairs, "账单姓氏", payment.primaryPaymentMethod.ownerName.lastName) + "\"}," + text4 + "\"billingAddress\":{\"line1\":\"" + getDicValue(pairs, "街道地址", payment.primaryPaymentMethod.billingAddress.line1) + "\",\"line2\":\"" + getDicValue(pairs, "楼号单元", payment.primaryPaymentMethod.billingAddress.line2) + "\",\"line3\":\"", "\",\"suburb\":\"", getDicValue(pairs, "区", payment.primaryPaymentMethod.billingAddress.suburb), "\",\"county\":\"", getDicValue(pairs, "县", payment.primaryPaymentMethod.billingAddress.county), "\",\"city\":\"", getDicValue(pairs, "城市", payment.primaryPaymentMethod.billingAddress.city), "\",\"countryCode\":\"", payment.primaryPaymentMethod.billingAddress.countryCode, "\",\"postalCode\":\"", getDicValue(pairs, "邮编", payment.primaryPaymentMethod.billingAddress.postalCode), "\",\"stateProvinceName\":\"", getDicValue(pairs, "省/市", payment.primaryPaymentMethod.billingAddress.stateProvinceCode), "\"},", text2, text3, "\"id\":1}"); + WebHeaderCollection webHeaderCollection2 = new WebHeaderCollection(); + webHeaderCollection2.AddWebHander("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection2.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection2.AddWebHander("X-Apple-Domain-Id", "1"); + if (handelDic.ContainsKey("scnt")) + { + webHeaderCollection2.AddWebHander("scnt", handelDic["scnt"]); + } + webHeaderCollection2.AddWebHander("X-Apple-Api-Key", base.apiKey.Trim()); + appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection2.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/manage/payment/method/" + ((text == "nameOnCard") ? "card" : "none") + "/1", putData, appleHomeUrl, webHeaderCollection2); + UpdateScnt(httpResult.Header); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.OK) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "信息修改完成"); + action?.Invoke(base.noticeKey, DisplyType.reddemLose, ""); + return true; + } + if (httpResult.StatusCode == HttpStatusCode.Forbidden) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "账单信息修改失败,请求错误"); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "信息修改失败,未知异常:" + httpResult.StatusCode); + return false; + } + ServiceErrorsModel serviceErrorsModel = Tools.Todejosn(httpResult.Html); + if (serviceErrorsModel != null) + { + string serviceError = getServiceError(serviceErrorsModel); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "账单信息修改失败:" + serviceError); + if (serviceError.Contains("发生未知错误") && retry < base.MaxRetryCount) + { + Thread.Sleep(3000); + if (retry != 0) + { + base.ProxyIp = ""; + } + return EditAddres(pairs, retry + 1); + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "账单信息修改失败"); + } + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "网络异常,修改失败"); + return false; + } + + public string getDicValue(Dictionary suos, string key, string dfValue) + { + if (suos.ContainsKey(key)) + { + return suos[key].Trim(); + } + return dfValue; + } + + private string ConverUTF8(string value) + { + return Encoding.UTF8.GetString(Encoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(value))); + } + + public bool getSecuritydevices() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-Api-Key", base.apiKey); + webHeaderCollection.AddWebHander("Origin", "https://appleid.apple.com"); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + HttpResult webJsonContent = getWebJsonContent("https://appleid.apple.com/account/manage/security/devices", "https://appleid.apple.com/account/manage", webHeaderCollection); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + UpdateScnt(webJsonContent.Header); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "设备获取成功"); + string[] allKeys = webJsonContent.Header.AllKeys; + foreach (string text in allKeys) + { + if (!handelDic.ContainsKey(text)) + { + handelDic.TryAddDic(text, webJsonContent.Header[text]); + } + else + { + handelDic[text] = webJsonContent.Header[text]; + } + } + if (_changeItem.isDeleteDevice) + { + Securitydevices securitydevices = Tools.Todejosn(webJsonContent.Html); + int num = 1; + Securitydevices.Device[] array = securitydevices?.devices; + foreach (Securitydevices.Device device in array) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在删除第" + num + "个设备"); + deleteDevice(device.id); + num++; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "设备删除完成"); + } + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "设备获取异常"); + return false; + } + + public bool getFamily() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + string text = APPLEHCHelp.getIframeId().Replace("auth-", ""); + HttpResult webJsonContent = getWebJsonContent("https://familyws.icloud.apple.com/api/family-members", "https://familyws.icloud.apple.com/members?wid=" + text + "&env=idms_prod&locale=zh_CN", webHeaderCollection); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "家庭信息获取成功"); + FamilyMembers familyMembers = Tools.Todejosn(webJsonContent.Html); + if (familyMembers != null && familyMembers.isLinkedToFamily && !familyMembers.isMemberOfFamily && familyMembers.family != null) + { + return unlinkFamily(familyMembers.currentDsid, familyMembers.family.familyId, familyMembers.currentUserAppleId); + } + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "家庭信息获取异常"); + return false; + } + + public bool GetGsWsToken() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Apple-I-Request-Context", "ca"); + webHeaderCollection.AddWebHander("scnt", handelDic.getDicVal("scnt", "")); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + HttpResult webContent = getWebContent("https://appleid.apple.com/account/manage/gs/ws/token", "https://appleid.apple.com/", webHeaderCollection, "application/json, text/plain", "application/json"); + if (webContent.StatusCode == HttpStatusCode.OK) + { + UpdateScnt(webContent.Header); + return true; + } + return false; + } + + private bool intoHome() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Apple-I-Request-Context", "ca"); + webHeaderCollection.AddWebHander("scnt", handelDic.getDicVal("scnt", "")); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + HttpResult webContent = getWebContent(appleHomeUrl, "https://appleid.apple.com/", webHeaderCollection, "application/json, text/plain", "application/json"); + if (webContent.StatusCode == HttpStatusCode.OK) + { + string[] allKeys = webContent.Header.AllKeys; + foreach (string text in allKeys) + { + if (!handelDic.ContainsKey(text)) + { + handelDic.TryAddDic(text, webContent.Header[text]); + } + else + { + handelDic[text] = webContent.Header[text]; + } + } + string text2 = new Regex(AppSysConfig.getConfig("Regex_intoHome_jsonData")).Match(webContent.Html).Groups[1].Value.Trim().TrimEnd(','); + if (!string.IsNullOrEmpty(text2)) + { + loginAppleInfo = Tools.Todejosn(text2); + if (loginAppleInfo != null) + { + action?.Invoke(base.noticeKey, DisplyType.shengri, loginAppleInfo.security.birthday); + if (!string.IsNullOrEmpty(loginAppleInfo.security.birthday) && loginAppleInfo.security.birthday.Split('-').Length == 3 && (string.IsNullOrEmpty(acount.birthday) || acount.birthday != loginAppleInfo.security.birthday)) + { + acount.birthday = loginAppleInfo.security.birthday; + } + if (loginAppleInfo.person.primaryAddress != null && loginAppleInfo.person.primaryAddress.countryName != null) + { + action?.Invoke(base.noticeKey, DisplyType.guojia, loginAppleInfo.person.primaryAddress.countryName); + } + accountFirstName = loginAppleInfo.person.name.firstName; + accountLastName = loginAppleInfo.person.name.lastName; + if (loginAppleInfo.person.name.middleName != null) + { + accountLastName = accountLastName + " " + loginAppleInfo.person.name.middleName; + } + decimal? num = loginAppleInfo.person.reachableAtOptions.primaryEmailAddress.createdDate as decimal?; + if (num.HasValue) + { + string arg = Tools.GetTimeByTimeStamp((long)num.Value).ToString("yyyy-MM-dd HH:mm:ss"); + action?.Invoke(base.noticeKey, DisplyType.lostBillNo, arg); + } + action?.Invoke(base.noticeKey, DisplyType.xiaofeiriqiNow, accountLastName + " " + accountFirstName); + if (!string.IsNullOrEmpty(loginAppleInfo.security.rescueEmail)) + { + action?.Invoke(base.noticeKey, DisplyType.balance, loginAppleInfo.security.rescueEmail); + } + else + { + action?.Invoke(base.noticeKey, DisplyType.balance, "无"); + } + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "账号获取完成"); + } + string value = new Regex(AppSysConfig.getConfig("Regex_intoHome_jsonDataQuestions")).Match(webContent.Html).Groups[0].Value; + if (!string.IsNullOrEmpty(value)) + { + text2 = "{" + value.TrimEnd('"').TrimEnd(',') + "}"; + securityQuestions = Tools.Todejosn(text2); + } + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "获取账号信息网络异常"); + return false; + } + + private DevicesInfo GetDevices(string id) + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-Api-Key", base.apiKey); + webHeaderCollection.AddWebHander("Origin", "https://appleid.apple.com"); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + HttpResult webJsonContent = getWebJsonContent("https://appleid.apple.com/account/manage/security/devices/" + id, "https://appleid.apple.com/account/manage", webHeaderCollection); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + string[] allKeys = webJsonContent.Header.AllKeys; + foreach (string text in allKeys) + { + if (!handelDic.ContainsKey(text)) + { + handelDic.TryAddDic(text, webJsonContent.Header[text]); + } + else + { + handelDic[text] = webJsonContent.Header[text]; + } + } + return Tools.Todejosn(webJsonContent.Html); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "设备信息获取失败"); + return null; + } + + public bool unlinkFamily(string currentDsid, string familyId, string currentUserAppleId) + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + string text = APPLEHCHelp.getIframeId().Replace("auth-", ""); + string postData = "{\"currentDsid\":\"" + currentDsid + "\",\"familyId\":\"" + familyId + "\",\"currentUserAppleId\":\"" + currentUserAppleId + "\"}"; + string referer = "https://familyws.icloud.apple.com/confirm-unlink?wid=" + text + "&env=idms_prod&locale=zh_CN"; + HttpResult httpResult = postWebContent("https://familyws.icloud.apple.com/api/unlink-family", postData, referer, webHeaderCollection); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + FamilyMembers familyMembers = Tools.Todejosn(httpResult.Html); + if (familyMembers != null && !familyMembers.isLinkedToFamily && !familyMembers.isMemberOfFamily) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "断开家庭账户连接成功"); + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "家庭连接断开失败"); + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "家庭连接断开失败"); + } + return false; + } + + public bool deleteDevice(string id) + { + bool flag = true; + DevicesInfo devices = GetDevices(id); + if (devices != null) + { + flag = devices.allowRemoval; + } + if (flag) + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + if (handelDic.ContainsKey("scnt")) + { + webHeaderCollection.AddWebHander("scnt", handelDic["scnt"]); + } + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-Api-Key", base.apiKey); + webHeaderCollection.AddWebHander("Origin", "https://appleid.apple.com"); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + HttpResult httpResult = DeleteWebContent("https://appleid.apple.com/account/manage/security/devices/" + id, "", "https://appleid.apple.com/account/manage", webHeaderCollection); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + string[] allKeys = httpResult.Header.AllKeys; + foreach (string text in allKeys) + { + if (!handelDic.ContainsKey(text)) + { + handelDic.TryAddDic(text, httpResult.Header[text]); + } + else + { + handelDic[text] = httpResult.Header[text]; + } + } + if (Tools.Todejosn(httpResult.Html)?.removedDevice.id == id) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "设备删除成功"); + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "设备删除失败"); + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "设备删除失败"); + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "改设备无法删除"); + } + return false; + } + + public void UpdateScnt(WebHeaderCollection webHeader) + { + if (webHeader == null) + { + return; + } + string[] allKeys = webHeader.AllKeys; + foreach (string text in allKeys) + { + if (text == "scnt") + { + handelDic.TryAddDic(text, webHeader[text]); + } + } + } + + private void manageFamily() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-Domain-Id", "1"); + webHeaderCollection.AddWebHander("X-Apple-Api-Key", base.apiKey.Trim()); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + HttpResult webJsonContent = getWebJsonContent("https://appleid.apple.com/account/manage/family", "https://appleid.apple.com/account/manage", webHeaderCollection); + UpdateScnt(webJsonContent.Header); + } + + public bool LoginWeb() + { + HttpResult result = null; + string errMsg = "未知错误"; + acount.isAccountException = false; + if (authsignin(acount.appleId, acount.applePwd, authsigninConfig, ref errMsg, out result)) + { + if (result != null) + { + if (result.StatusCode == HttpStatusCode.Conflict || result.StatusCode == HttpStatusCode.OK) + { + LoginloginReust = result; + if (result.Html.Contains("hsa2")) + { + acount.isHsa2 = true; + if (openHsa2) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "双重已存在,无需开启"); + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "双重验证账号暂不支持更改"); + } + return false; + } + return true; + } + if (result.StatusCode == HttpStatusCode.PreconditionFailed) + { + string[] allKeys = result.Header.AllKeys; + foreach (string text in allKeys) + { + switch (text) + { + case "X-Apple-Auth-Attributes": + case "X-Apple-Repair-Session-Token": + case "X-Apple-ID-Session-Id": + case "scnt": + case "X-Apple-OAuth-Context": + handelDic.TryAddDic(text, result.Header[text]); + break; + } + if (text == "scnt") + { + handelDic.TryAddDic("scnt2", result.Header[text]); + } + } + return repair(); + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "登录异常了"); + } + } + return false; + } + + private bool appleauthAuth(AppleAcount acount) + { + if (isViey) + { + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证密保问题"); + new WebHeaderCollection(); + string url = "https://idmsa.apple.com/appleauth/auth"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-Auth-Attributes", handelDic.getDicVal("X-Apple-Auth-Attributes", "")); + webHeaderCollection.AddWebHander("scnt", handelDic.getDicVal("scnt", "")); + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic.getDicVal("X-Apple-ID-Session-Id", "")); + addOAuthHanede(webHeaderCollection, authsigninConfig); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + HttpResult webContent = getWebContent(url, authUrl, webHeaderCollection, "text/html", "application/json"); + if (webContent.StatusCode == HttpStatusCode.OK) + { + string[] allKeys = webContent.Header.AllKeys; + foreach (string text in allKeys) + { + if (text == "scnt" || text == "X-Apple-Auth-Attributes") + { + handelDic.TryAddDic(text, webContent.Header[text]); + } + } + string text2 = new Regex(AppSysConfig.getConfig("Regex_appleauthAuth")).Match(webContent.Html).Groups[1].Value.Trim() + "}"; + if (string.IsNullOrEmpty(text2)) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密保获取失败..请重试"); + return false; + } + AothQuestions questions = Tools.Todejosn(text2); + string config = AppSysConfig.getConfig("supportPinInSACRChallenge"); + if (webContent.Html.Contains(config) && _changeItem.CreatePin) + { + CreateAuthSupportpin(); + } + return verifyAuthQuestions(questions, new string[3] { acount.appleQt1, acount.appleQt2, acount.appleQt3 }); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密保获取失败"); + return false; + } + + public bool CreateAuthSupportpin() + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在获取PIN码"); + new WebHeaderCollection(); + string url = "https://idmsa.apple.com/appleauth/auth/supportpin"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.AddWebHander("X-Apple-App-Id", Apple_Widget_Key); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-Auth-Attributes", handelDic.getDicVal("X-Apple-Auth-Attributes", "")); + webHeaderCollection.AddWebHander("scnt", handelDic.getDicVal("scnt", "")); + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic.getDicVal("X-Apple-ID-Session-Id", "")); + addOAuthHanede(webHeaderCollection, authsigninConfig); + HttpResult webContent = getWebContent(url, "https://idmsa.apple.com/", webHeaderCollection, "application/json", "application/json"); + if (webContent.StatusCode == HttpStatusCode.BadRequest || webContent.StatusCode == HttpStatusCode.Unauthorized) + { + ServiceErrorsModel serviceErrorsModel = Tools.Todejosn(webContent.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "PIN失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "PIN失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "PIN失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + } + if (webContent.StatusCode == HttpStatusCode.OK) + { + Dictionary dataSource = Tools.Todejosn>(webContent.Html); + string dicVal = dataSource.getDicVal("pin", ""); + string dicVal2 = dataSource.getDicVal("localizedDate", ""); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "PIN码获取成功"); + authSupportpin = "支持 PIN:" + dicVal + ",有效期:" + dicVal2; + action?.Invoke(base.noticeKey, DisplyType.xiaofeiriqiNow, authSupportpin); + string[] allKeys = webContent.Header.AllKeys; + foreach (string text in allKeys) + { + if (text == "scnt") + { + handelDic.TryAddDic(text, webContent.Header[text]); + } + } + return true; + } + return false; + } + + private bool verifyAuthQuestions(AothQuestions questions, string[] question, int retry = 0) + { + AothQuestions.Question[] questions2 = questions.questions; + int num = 0; + while (true) + { + if (num < questions2.Length) + { + AothQuestions.Question question2 = questions2[num]; + int anwerId_Index = Tools.getAnwerId_Index(question2.id); + if (anwerId_Index == 0) + { + break; + } + question2.answer = question[anwerId_Index - 1]; + num++; + continue; + } + string postData = Tools.Toenjson(questions); + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.AddWebHander("X-Apple-App-Id", Apple_Widget_Key); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-Domain-Id", "1"); + webHeaderCollection.AddWebHander("scnt", handelDic["scnt"]); + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic["X-Apple-ID-Session-Id"]); + webHeaderCollection.AddWebHander("X-Apple-Auth-Attributes", handelDic.getDicVal("X-Apple-Auth-Attributes", "")); + addOAuthHanede(webHeaderCollection, authsigninConfig); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + string url = "https://idmsa.apple.com/appleauth/auth/verify/questions"; + HttpResult httpResult = postWebContent(url, postData, authUrl, webHeaderCollection); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.NoContent) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密保验证成功"); + return true; + } + if (httpResult.StatusCode == HttpStatusCode.PreconditionFailed) + { + string[] allKeys = httpResult.Header.AllKeys; + foreach (string text in allKeys) + { + switch (text) + { + case "X-Apple-Repair-Session-Token": + case "X-Apple-ID-Session-Id": + case "scnt": + case "X-Apple-OAuth-Context": + handelDic.TryAddDic(text, httpResult.Header[text]); + break; + } + } + if (httpResult.Header.AllKeys.Contains("X-Apple-ID-Account-Country")) + { + XAppleIDAccountCountry_SOUSUO = httpResult.Header["X-Apple-ID-Account-Country"].ToString(); + XAppleIDAccountCountry = AppleUtlis.GetAreaByCode(httpResult.Header["X-Apple-ID-Account-Country"].ToString()); + action?.Invoke(base.noticeKey, DisplyType.area, XAppleIDAccountCountry); + } + return repair(); + } + return false; + } + acount.isAccountException = true; + ServiceErrorsModel serviceErrorsModel = Tools.Todejosn(httpResult.Html); + if (serviceErrorsModel != null) + { + string serviceError = getServiceError(serviceErrorsModel); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密保验证失败:" + serviceError); + if (serviceError.Contains("发生未知错误") && retry < base.MaxRetryCount) + { + Thread.Sleep(3000); + if (retry != 0) + { + base.ProxyIp = ""; + } + return verifyAuthQuestions(questions, question, retry + 1); + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "未知异常或者密保错误"); + } + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "非正常密保问题,无法识别"); + return false; + } + + private bool repair() + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "获取阅读协议"); + string text = "zh_CN_CHN"; + if (handelDic.ContainsKey("X-Apple-Locale")) + { + text = handelDic["X-Apple-Locale"]; + } + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("Upgrade-Insecure-Requests", "1"); + string apple_Widget_Key = Apple_Widget_Key; + if (widgKey != string.Empty) + { + apple_Widget_Key = widgKey; + } + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", apple_Widget_Key); + string uRL = "https://appleid.apple.com/widget/account/repair?widgetKey=" + apple_Widget_Key + "&rv=1&language=" + text; + HttpItem httpItem = new HttpItem + { + URL = uRL, + Method = "get", + Timeout = 120000, + ReadWriteTimeout = 30000, + UserAgent = base.userAgent, + Cookie = listCookie.toFonmtCookie(), + ContentType = "text/html;charset=UTF-8", + Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", + Referer = "https://idmsa.apple.com/", + ResultType = ResultType.String, + ProtocolVersion = HttpVersion.Version11, + WebProxy = WebRequest.DefaultWebProxy + }; + httpItem.Header = webHeaderCollection; + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + if (httpReuslt.StatusCode == HttpStatusCode.OK) + { + try + { + string text2 = ""; + string value = new Regex(AppSysConfig.getConfig("Regex_repair_jsonDataQuestions")).Match(httpReuslt.Html).Groups[0].Value; + if (!string.IsNullOrEmpty(value)) + { + text2 = "{" + value.TrimEnd('"').TrimEnd(',') + "}"; + securityQuestions = Tools.Todejosn(text2); + } + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + } + string value2 = new Regex(AppSysConfig.getConfig("Regex_repair_sessionId")).Match(httpReuslt.Html).Groups[1].Value.Trim().Replace("\n", "").Replace("\r", "") + .Replace("\"", "") + .TrimStart(':') + .Trim(); + string key = "repairSessionId"; + if (!handelDic.ContainsKey(key)) + { + handelDic.TryAddDic(key, value2); + } + else + { + handelDic[key] = value2; + } + string[] allKeys = httpReuslt.Header.AllKeys; + foreach (string text3 in allKeys) + { + if (text3 == "scnt") + { + if (!handelDic.ContainsKey(text3)) + { + handelDic.TryAddDic(text3, httpReuslt.Header[text3]); + } + else + { + handelDic[text3] = httpReuslt.Header[text3]; + } + } + if (text3 == "X-Apple-Repair-Session-Token") + { + if (!handelDic.ContainsKey(text3)) + { + handelDic.TryAddDic(text3, httpReuslt.Header[text3]); + } + else + { + handelDic[text3] = httpReuslt.Header[text3]; + } + } + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "协议获取成功"); + return options(); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "协议获取失败"); + return false; + } + + private bool options(bool skieprderPrivacy = false) + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("scnt", handelDic["scnt"]); + if (openHsa2) + { + webHeaderCollection.AddWebHander("X-Apple-Skip-Repair-Attributes", "[]"); + } + else + { + webHeaderCollection.AddWebHander("X-Apple-Skip-Repair-Attributes", "[\"hsa2_enrollment\"]"); + } + webHeaderCollection.AddWebHander("X-Apple-OAuth-Context", handelDic.getDicVal("X-Apple-OAuth-Context", "")); + string dicVal = handelDic.getDicVal("X-Apple-Session-Token", ""); + if (string.IsNullOrEmpty(dicVal)) + { + dicVal = handelDic.getDicVal("X-Apple-Repair-Session-Token", ""); + } + webHeaderCollection.AddWebHander("X-Apple-Session-Token", dicVal); + string apple_Widget_Key = Apple_Widget_Key; + if (widgKey != string.Empty) + { + webHeaderCollection.AddWebHander("X-Apple-Repair-App-Id", "1879"); + apple_Widget_Key = widgKey; + } + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic.getDicVal("repairSessionId", "")); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", apple_Widget_Key); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + string text = "https://appleid.apple.com/account/manage/repair/options"; + if (acount?.appleQt3 == "changAccount" && !string.IsNullOrEmpty(_changeItem.newPwd)) + { + text += "?passwordRepairType=w"; + } + HttpItem httpItem = new HttpItem + { + URL = text, + Method = "get", + Timeout = 120000, + ReadWriteTimeout = 30000, + UserAgent = base.userAgent, + Cookie = listCookie.toFonmtCookie(), + ContentType = "application/json; charset=utf-8", + Accept = "application/json, text/javascript, */*; q=0.01", + Referer = "https://appleid.apple.com/widget/account/repair?widgetKey=" + apple_Widget_Key + "&rv=1&language=zh_CN_CHN", + ResultType = ResultType.String, + ProtocolVersion = HttpVersion.Version11, + WebProxy = WebRequest.DefaultWebProxy + }; + httpItem.Header = webHeaderCollection; + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + if (httpReuslt.StatusCode == HttpStatusCode.OK) + { + string[] allKeys = httpReuslt.Header.AllKeys; + foreach (string text2 in allKeys) + { + if (text2 == "X-Apple-Session-Token" || text2 == "scnt") + { + handelDic.TryAddDic(text2, httpReuslt.Header[text2]); + } + } + Dictionary dictionary = Tools.Todejosn>(httpReuslt.Html); + if (httpReuslt.Html.Contains("requiredSteps")) + { + foreach (object item in (dynamic)dictionary["requiredSteps"]) + { + string text3 = (string)(dynamic)item; + if (!(text3 == "hsa2_enrollment") || !openHsa2) + { + if (text3 == "account_name") + { + if (_changeItem == null) + { + int num = Tools.ToNetWorkInt(ConfigUtlis.getConfigValue("comNetworkConfig"), 0); + if (AppSysConfig.getConfig("oldAccountApply") == "1" && base.openVpn && num == 0) + { + APIUtlis.ApiApplyAct(38, "查询老帐号"); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "需要设置账号#1"); + return false; + } + if (string.IsNullOrEmpty(acount.newAppleId) || string.IsNullOrEmpty(acount.newApplePopPwd)) + { + int num2 = Tools.ToNetWorkInt(ConfigUtlis.getConfigValue("comNetworkConfig"), 0); + if (AppSysConfig.getConfig("oldAccountApply") == "1" && base.openVpn && num2 == 0) + { + APIUtlis.ApiApplyAct(38, "查询老帐号"); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "需要设置账号#2"); + return false; + } + if (!setAccnount(acount.newAppleId, acount.newApplePopPwd, Apple_Widget_Key)) + { + return false; + } + } + if (text3 == "weak_password") + { + if (_changeItem == null) + { + int num3 = Tools.ToNetWorkInt(ConfigUtlis.getConfigValue("comNetworkConfig"), 0); + if (AppSysConfig.getConfig("oldAccountApply") == "1" && base.openVpn && num3 == 0) + { + APIUtlis.ApiApplyAct(38, "查询老帐号"); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "需要设置新密码#2"); + return false; + } + if (string.IsNullOrEmpty(_changeItem.newPwd)) + { + int num4 = Tools.ToNetWorkInt(ConfigUtlis.getConfigValue("comNetworkConfig"), 0); + if (AppSysConfig.getConfig("oldAccountApply") == "1" && base.openVpn && num4 == 0) + { + APIUtlis.ApiApplyAct(38, "查询老帐号"); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "需要设置新密码#2"); + return false; + } + if (!setWeakPassword(_changeItem.newPwd)) + { + return false; + } + } + if (text3 == "missing_data") + { + if (_changeItem == null) + { + int num5 = Tools.ToNetWorkInt(ConfigUtlis.getConfigValue("comNetworkConfig"), 0); + if (AppSysConfig.getConfig("oldAccountApply") == "1" && base.openVpn && num5 == 0) + { + APIUtlis.ApiApplyAct(38, "查询老帐号"); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "需要设置生日#1"); + return false; + } + if (string.IsNullOrEmpty(_changeItem.newshengri)) + { + int num6 = Tools.ToNetWorkInt(ConfigUtlis.getConfigValue("comNetworkConfig"), 0); + if (AppSysConfig.getConfig("oldAccountApply") == "1" && base.openVpn && num6 == 0) + { + APIUtlis.ApiApplyAct(38, "查询老帐号"); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "需要设置生日#2"); + return false; + } + if (!setBirthday(_changeItem.newshengri)) + { + return false; + } + isVieyBirthday = true; + } + if (text3 == "challenge_response") + { + if (_changeItem == null) + { + int num7 = Tools.ToNetWorkInt(ConfigUtlis.getConfigValue("comNetworkConfig"), 0); + if (AppSysConfig.getConfig("oldAccountApply") == "1" && base.openVpn && num7 == 0) + { + APIUtlis.ApiApplyAct(38, "查询老帐号"); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "需要设置密保#1"); + return false; + } + if (string.IsNullOrEmpty(_changeItem.newQt1)) + { + int num8 = Tools.ToNetWorkInt(ConfigUtlis.getConfigValue("comNetworkConfig"), 0); + if (AppSysConfig.getConfig("oldAccountApply") == "1" && base.openVpn && num8 == 0) + { + APIUtlis.ApiApplyAct(38, "查询老帐号"); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "需要设置密保#2"); + return false; + } + if (!setQuestions(_changeItem.newQt1, _changeItem.newQt2, _changeItem.newQt3)) + { + return false; + } + isViey = true; + } + if (!(text3 == "phoneNumber") || SkipPhoneNumber()) + { + if (!(text3 == "crossBorderPrivacyConsent") || skieprderPrivacy) + { + if (text3 == "privacy_consent" && !accept()) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "协议阅读失败#2"); + return false; + } + continue; + } + bool gcbdCrossBorderPrivacyConsentRequired = false; + bool appleCrossBorderPrivacyConsentRequired = false; + try + { + dynamic val = dictionary["repairContext"]; + gcbdCrossBorderPrivacyConsentRequired = val["privacyConsentRequirement"]["gcbdCrossBorderPrivacyConsentRequired"]; + appleCrossBorderPrivacyConsentRequired = val["privacyConsentRequirement"]["appleCrossBorderPrivacyConsentRequired"]; + } + catch (Exception) + { + } + CrossBorderPrivacyConsent(gcbdCrossBorderPrivacyConsentRequired, appleCrossBorderPrivacyConsentRequired); + return options(skieprderPrivacy: true); + } + return false; + } + if (string.IsNullOrEmpty(acount.moblie)) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "请先导入手机号码"); + return false; + } + getSecurityUpgrade(); + return OpenHsa2Act(_changeItem.mode, _changeItem.countryCode, Apple_Widget_Key); + } + } + return complete(); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "协议获取失败#2(" + (int)httpReuslt.StatusCode + ")"); + return false; + } + + public bool OpenHsa2Act(string mode, string countryCode, string widgetWey, int attemptCout = 0, int retry = 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "发送验证码中.." + attemptCout); + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", widgetWey); + webHeaderCollection.AddWebHander("scnt", handelDic["scnt"]); + webHeaderCollection.AddWebHander("X-Apple-Skip-Repair-Attributes", "[]"); + webHeaderCollection.AddWebHander("X-Apple-OAuth-Context", handelDic.getDicVal("X-Apple-OAuth-Context", "")); + if (handelDic.ContainsKey("X-Apple-Session-Token")) + { + webHeaderCollection.AddWebHander("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + } + if (handelDic.ContainsKey("repairSessionId")) + { + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + } + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + string moblie = acount.moblie; + if (acount.moblie == "18888888888") + { + lock (lockSendMsmObj) + { + string text = getCodeAct_?.Invoke(acount.appleId, 9); + if (string.IsNullOrEmpty(text)) + { + return false; + } + acount.moblie = text; + action?.Invoke(base.noticeKey, DisplyType.bindMoblie, text); + } + } + string text2 = string.Empty; + int msmId = 0; + lock (lockSendMsmObj) + { + if (!objSendMsmS.ContainsKey(acount.moblie)) + { + objSendMsmS.Add(acount.moblie, new object()); + } + } + if (moblie != "18888888888") + { + objSendMsmS[acount.moblie] = lockSendMsmObj; + } + lock (objSendMsmS[acount.moblie]) + { + string text3 = "https://appleid.apple.com/account/security/upgrade/verify/phone"; + string text4 = "{\"phoneNumberVerification\":{\"phoneNumber\":{\"number\":\"" + acount.moblie + "\",\"countryCode\":\"" + countryCode + "\"},\"mode\":\"" + mode + "\"}}"; + if (incompatibleDevice) + { + text3 += "?warnings=incompatible_device"; + text4 = text4.Substring(0, text4.Length - 1) + ",\"acceptedWarnings\":[\"incompatible_device\"]}"; + } + HttpResult httpResult = putWebContent(text3, text4, "https://appleid.apple.com/widget/account/repair?widgetKey=af1139274f266b22b68c2a3e7ad932cb3c0bbe854e13a79af78dcc73136882c3&rv=1&language=zh_CN_CHN", webHeaderCollection); + if (httpResult.StatusCode == (HttpStatusCode)423) + { + dynamic val = Tools.Todejosn(httpResult.Html); + string text5 = val["phoneNumberVerification"]?["serviceErrors"]?[0]["message"]; + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + text5); + if (moblie == "18888888888" && attemptCout < 3) + { + if (text5.Contains("发送验证码的次数过多")) + { + return false; + } + getCodeAct_?.Invoke(acount.moblie, 10); + acount.moblie = "18888888888"; + Thread.Sleep(2000); + return OpenHsa2Act(mode, countryCode, widgetWey, attemptCout + 1); + } + return false; + } + if (httpResult.StatusCode == HttpStatusCode.BadRequest || httpResult.StatusCode == HttpStatusCode.Unauthorized) + { + ServiceErrorsModel serviceErrorsModel = Tools.Todejosn(httpResult.Html); + if (httpResult.Html.Contains("电话号码的使用次数过多") && moblie == "18888888888" && attemptCout < 5) + { + acount.moblie = "18888888888"; + getCodeAct_?.Invoke(acount.moblie, 10); + Thread.Sleep(2000); + return OpenHsa2Act(mode, countryCode, widgetWey, attemptCout + 1); + } + if (serviceErrorsModel != null) + { + string serviceError = getServiceError(serviceErrorsModel); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "发送验证码失败:" + serviceError); + if (serviceError.Contains("发生未知错误") && retry < base.MaxRetryCount) + { + Thread.Sleep(3000); + if (retry != 0) + { + base.ProxyIp = ""; + } + return OpenHsa2Act(mode, countryCode, widgetWey, attemptCout + 1, retry + 1); + } + } + return false; + } + if (httpResult.StatusCode != HttpStatusCode.OK) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "发送验证码失败,未知异常"); + return false; + } + string[] allKeys = httpResult.Header.AllKeys; + foreach (string text6 in allKeys) + { + if (text6 == "X-Apple-Session-Token" || text6 == "scnt") + { + handelDic.TryAddDic(text6, httpResult.Header[text6]); + } + } + dynamic val2 = Tools.Todejosn(httpResult.Html); + msmId = val2["phoneNumberVerification"]?["phoneNumber"]?["id"]; + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证码发送成功"); + text2 = getCodeAct_?.Invoke("请输入账号:" + acount.appleId + ",\n发送至 <" + acount.moblie + "> 的验证码", 1); + if (text2 == null || string.IsNullOrEmpty(text2)) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证码未输入"); + return false; + } + if (text2.Trim().Length != 6) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证码输入不正确"); + return false; + } + } + return verifyCode(msmId, text2, acount.moblie, countryCode, mode, widgetWey); + } + + public bool verifyCode(int msmId, string code, string moblie, string countryCode, string mode, string widgetWey, int retry = 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在验证"); + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + if (widgKey != string.Empty) + { + webHeaderCollection.AddWebHander("X-Apple-Repair-App-Id", "1879"); + } + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", widgetWey); + webHeaderCollection.AddWebHander("scnt", handelDic["scnt"]); + webHeaderCollection.AddWebHander("X-Apple-Skip-Repair-Attributes", "[]"); + if (handelDic.ContainsKey("X-Apple-Session-Token")) + { + webHeaderCollection.AddWebHander("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + } + webHeaderCollection.AddWebHander("X-Apple-OAuth-Context", handelDic.getDicVal("X-Apple-OAuth-Context", "")); + if (handelDic.ContainsKey("repairSessionId")) + { + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + } + webHeaderCollection.AddWebHander("X-Apple-I-Request-Context", "ca"); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + string text = "{\"phoneNumberVerification\":{\"phoneNumber\":{\"id\":" + msmId + ",\"number\":\"" + moblie + "\",\"countryCode\":\"" + countryCode + "\",\"nonFTEU\":true},\"securityCode\":{\"code\":\"" + code + "\"},\"mode\":\"" + mode + "\"}}"; + string text2 = "https://appleid.apple.com/account/security/upgrade"; + if (incompatibleDevice) + { + text2 += "?warnings=incompatible_device"; + text = text.Substring(0, text.Length - 1) + ",\"acceptedWarnings\":[\"incompatible_device\"]}"; + } + HttpResult httpResult = postWebContent(text2, text, "https://appleid.apple.com/widget/account/repair?widgetKey=af1139274f266b22b68c2a3e7ad932cb3c0bbe854e13a79af78dcc73136882c3&rv=1&language=zh_CN_CHN", webHeaderCollection); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.OK) + { + string[] allKeys = httpResult.Header.AllKeys; + foreach (string text3 in allKeys) + { + if (text3 == "X-Apple-Session-Token" || text3 == "scnt") + { + handelDic.TryAddDic(text3, httpResult.Header[text3]); + } + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "双重开启成功"); + AuthenDoubleOpenState = true; + acount.isHsa2 = true; + acount.moblie = moblie; + action?.Invoke(base.noticeKey, DisplyType.bindMoblie, moblie); + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证失败,未知异常"); + return false; + } + ServiceErrorsModel serviceErrorsModel = Tools.Todejosn(httpResult.Html); + if (serviceErrorsModel != null) + { + string serviceError = getServiceError(serviceErrorsModel); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "开启失败:" + serviceError); + if (serviceError.Contains("发生未知错误") && retry < base.MaxRetryCount) + { + Thread.Sleep(3000); + if (retry != 0) + { + base.ProxyIp = ""; + } + return verifyCode(msmId, code, moblie, countryCode, mode, widgetWey, retry + 1); + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "开启失败,未知异常"); + } + return false; + } + + public bool setAccnount(string newAccount, string popPwd, string newwidgKey, int retry = 0) + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + if (widgKey != string.Empty) + { + webHeaderCollection.AddWebHander("X-Apple-Repair-App-Id", "1879"); + newwidgKey = widgKey; + } + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", newwidgKey); + webHeaderCollection.AddWebHander("scnt", handelDic.getDicVal("scnt", "")); + webHeaderCollection.AddWebHander("X-Apple-Skip-Repair-Attributes", "[]"); + if (handelDic.ContainsKey("X-Apple-Session-Token")) + { + webHeaderCollection.AddWebHander("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + } + webHeaderCollection.AddWebHander("X-Apple-OAuth-Context", handelDic.getDicVal("X-Apple-OAuth-Context", "")); + if (handelDic.ContainsKey("repairSessionId")) + { + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + } + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + HttpResult httpResult = postWebContent("https://appleid.apple.com/account/manage/appleid/verification", "\"" + newAccount + "\"", "https://appleid.apple.com/widget/account/repair?widgetKey=af1139274f266b22b68c2a3e7ad932cb3c0bbe854e13a79af78dcc73136882c3&rv=1&language=zh_CN_CHN", webHeaderCollection); + UpdateScnt(httpResult.Header); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.OK) + { + string[] allKeys = httpResult.Header.AllKeys; + foreach (string text in allKeys) + { + if (text == "X-Apple-Session-Token" || text == "scnt") + { + handelDic.TryAddDic(text, httpResult.Header[text]); + } + } + string text2 = ""; + Verification verification = Tools.Todejosn(httpResult.Html); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "邮件验证码发送成功"); + Thread.Sleep(new Random().Next(AppSysConfig.CheckCodeDelay * 1000, AppSysConfig.CheckCodeDelay * 1000 + 1000)); + int num = 0; + do + { + if (taskState.isRun) + { + num++; + using HttpHelper httpHelper = new HttpHelper(); + HttpItem item = new HttpItem + { + URL = "http://localhost:47513/?email=" + HttpUtility.UrlEncode(acount.newAppleId) + "&popPwd=" + HttpUtility.UrlEncode(acount.newApplePopPwd), + Method = "GET", + Timeout = 100000, + ReadWriteTimeout = 30000, + ResultType = ResultType.String + }; + HttpResult html = httpHelper.GetHtml(item); + if (html.StatusCode == HttpStatusCode.OK) + { + Dictionary dictionary = Tools.Todejosn>(html.Html); + if (dictionary["code"] == "1") + { + text2 = dictionary["vieyCode"]; + if (!string.IsNullOrEmpty(text2)) + { + break; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证码获取第" + num + "次,失败"); + goto IL_03e1; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证码获取第" + num + "次,失败"); + goto IL_03e1; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证码获取第" + num + "次,失败"); + goto IL_03e1; + } + throw new Exception("停止执行"); + IL_03e1: + Thread.Sleep(5000); + } + while (num < 5); + if (!string.IsNullOrEmpty(text2)) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证码获取成功"); + return setAccountName(newAccount, verification?.verificationId, text2); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "获取验证码失败超过最大次数"); + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "发送邮件验证码失败,未知异常"); + return false; + } + ServiceErrorsModel serviceErrorsModel = Tools.Todejosn(httpResult.Html); + if (serviceErrorsModel != null) + { + string serviceError = getServiceError(serviceErrorsModel); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "发送验证码异常:" + serviceError); + if (serviceError.Contains("发生未知错误") && retry < base.MaxRetryCount) + { + Thread.Sleep(3000); + if (retry != 0) + { + base.ProxyIp = ""; + } + return setAccnount(newAccount, popPwd, newwidgKey, retry + 1); + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "发送邮件验证码失败,未知异常"); + } + return false; + } + + public bool setAccountName(string accountName, string verificationId, string answer, int retry = 0) + { + string putData = "{\"name\":\"" + accountName + "\",\"verificationInfo\":{\"id\":\"" + verificationId + "\",\"answer\":\"" + answer + "\"}}"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + string apple_Widget_Key = Apple_Widget_Key; + if (widgKey != string.Empty) + { + webHeaderCollection.AddWebHander("X-Apple-Repair-App-Id", "1879"); + apple_Widget_Key = widgKey; + } + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", apple_Widget_Key); + webHeaderCollection.AddWebHander("scnt", handelDic["scnt"]); + webHeaderCollection.AddWebHander("X-Apple-Skip-Repair-Attributes", "[]"); + if (handelDic.ContainsKey("X-Apple-Session-Token")) + { + webHeaderCollection.AddWebHander("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + } + if (handelDic.ContainsKey("repairSessionId")) + { + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + } + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/manage/appleid/verification", putData, "https://appleid.apple.com/widget/account/repair?widgetKey=af1139274f266b22b68c2a3e7ad932cb3c0bbe854e13a79af78dcc73136882c3&rv=1&language=zh_CN_CHN", webHeaderCollection); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.OK) + { + string[] allKeys = httpResult.Header.AllKeys; + foreach (string text in allKeys) + { + if (text == "X-Apple-Session-Token" || text == "scnt") + { + handelDic.TryAddDic(text, httpResult.Header[text]); + } + } + applyAtion?.Invoke(base.noticeKey, DisplyType.newAccount, accountName); + appleId = accountName; + acount.appleId = accountName; + action?.Invoke(base.noticeKey, DisplyType.xinxi, "新账号设置成功"); + isChangAppleId = true; + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "新账号设置失败,未知异常:" + (int)httpResult.StatusCode); + return false; + } + ServiceErrorsModel serviceErrorsModel = Tools.Todejosn(httpResult.Html); + if (serviceErrorsModel != null) + { + string serviceError = getServiceError(serviceErrorsModel); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "新账号设置异常:" + serviceError); + if (serviceError.Contains("发生未知错误") && retry < base.MaxRetryCount) + { + Thread.Sleep(3000); + if (retry != 0) + { + base.ProxyIp = ""; + } + return setAccountName(accountName, verificationId, answer, retry + 1); + } + } + return false; + } + + public bool setBirthday(string newBirthday, int retry = 0) + { + string putData = "{\"security\":{\"birthday\":\"" + newBirthday + "\"}}"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + string apple_Widget_Key = Apple_Widget_Key; + if (widgKey != string.Empty) + { + webHeaderCollection.AddWebHander("X-Apple-Repair-App-Id", "1879"); + apple_Widget_Key = widgKey; + } + webHeaderCollection.AddWebHander("X-Apple-OAuth-Context", handelDic.getDicVal("X-Apple-OAuth-Context", "")); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", apple_Widget_Key); + webHeaderCollection.AddWebHander("scnt", handelDic["scnt"]); + webHeaderCollection.AddWebHander("X-Apple-Skip-Repair-Attributes", "[]"); + webHeaderCollection.AddWebHander("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/manage/repair", putData, "https://appleid.apple.com/widget/account/repair?widgetKey=af1139274f266b22b68c2a3e7ad932cb3c0bbe854e13a79af78dcc73136882c3&rv=1&language=zh_CN_CHN", webHeaderCollection); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.OK) + { + string[] allKeys = httpResult.Header.AllKeys; + foreach (string text in allKeys) + { + if (text == "X-Apple-Session-Token" || text == "scnt") + { + handelDic.TryAddDic(text, httpResult.Header[text]); + } + } + applyAtion?.Invoke(base.noticeKey, DisplyType.shengri, newBirthday); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "生日设置成功"); + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "生日修改设置失败,未知异常"); + return false; + } + ServiceErrorsModel serviceErrorsModel = Tools.Todejosn(httpResult.Html); + if (serviceErrorsModel != null) + { + string serviceError = getServiceError(serviceErrorsModel); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "生日修改设置异常:" + serviceError); + if (serviceError.Contains("发生未知错误") && retry < base.MaxRetryCount) + { + Thread.Sleep(3000); + if (retry != 0) + { + base.ProxyIp = ""; + } + return setBirthday(newBirthday, retry + 1); + } + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "生日修改设置失败"); + return false; + } + + public bool setWeakPassword(string newPwd, int retry = 0) + { + string putData = "{\"currentPassword\":\"" + acount.applePwd + "\",\"newPassword\":\"" + newPwd + "\"}"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + string apple_Widget_Key = Apple_Widget_Key; + if (widgKey != string.Empty) + { + webHeaderCollection.AddWebHander("X-Apple-Repair-App-Id", "1879"); + apple_Widget_Key = widgKey; + } + webHeaderCollection.AddWebHander("X-Apple-OAuth-Context", handelDic.getDicVal("X-Apple-OAuth-Context", "")); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", apple_Widget_Key); + webHeaderCollection.AddWebHander("scnt", handelDic["scnt"]); + webHeaderCollection.AddWebHander("X-Apple-Skip-Repair-Attributes", "[]"); + webHeaderCollection.AddWebHander("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/manage/security/password", putData, "https://appleid.apple.com/widget/account/repair?widgetKey=af1139274f266b22b68c2a3e7ad932cb3c0bbe854e13a79af78dcc73136882c3&rv=1&language=zh_CN_CHN", webHeaderCollection); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.OK) + { + string[] allKeys = httpResult.Header.AllKeys; + foreach (string text in allKeys) + { + if (text == "X-Apple-Session-Token" || text == "scnt") + { + handelDic.TryAddDic(text, httpResult.Header[text]); + } + } + acount.applePwd = newPwd; + isPwdViey = true; + _changeItem.newPwd = ""; + applyAtion?.Invoke(base.noticeKey, DisplyType.mima, newPwd); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "新密码设置成功"); + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "新密码设置失败,未知异常"); + return false; + } + ServiceErrorsModel serviceErrorsModel = Tools.Todejosn(httpResult.Html); + if (serviceErrorsModel != null) + { + string serviceError = getServiceError(serviceErrorsModel); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "新密码设置异常:" + serviceError); + if (serviceError.Contains("发生未知错误") && retry < base.MaxRetryCount) + { + Thread.Sleep(3000); + if (retry != 0) + { + base.ProxyIp = ""; + } + return setWeakPassword(newPwd, retry + 1); + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "新密码设置失败,未知异常"); + } + return false; + } + + private bool accept() + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在同意协议"); + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + string apple_Widget_Key = Apple_Widget_Key; + if (widgKey != string.Empty) + { + webHeaderCollection.AddWebHander("X-Apple-Repair-App-Id", "1879"); + apple_Widget_Key = widgKey; + } + webHeaderCollection.AddWebHander("X-Apple-OAuth-Context", handelDic.getDicVal("X-Apple-OAuth-Context", "")); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", apple_Widget_Key); + webHeaderCollection.AddWebHander("scnt", handelDic["scnt"]); + webHeaderCollection.AddWebHander("X-Apple-Skip-Repair-Attributes", "[]"); + webHeaderCollection.AddWebHander("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + string uRL = "https://appleid.apple.com/account/manage/privacy/accept"; + HttpItem httpItem = new HttpItem + { + URL = uRL, + Method = "put", + UserAgent = base.userAgent, + Cookie = listCookie.toFonmtCookie(), + ContentType = "application/json; charset=utf-8", + Accept = "application/json, text/javascript, */*; q=0.01", + Referer = "https://appleid.apple.com/widget/account/repair?widgetKey=" + apple_Widget_Key + "&rv=1&language=zh_CN_CHN", + ProtocolVersion = HttpVersion.Version11, + WebProxy = WebRequest.DefaultWebProxy + }; + httpItem.Header = webHeaderCollection; + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + if (httpReuslt.StatusCode != HttpStatusCode.OK && httpReuslt.StatusCode != HttpStatusCode.MethodNotAllowed) + { + return false; + } + string[] allKeys = httpReuslt.Header.AllKeys; + foreach (string text in allKeys) + { + if (text == "X-Apple-Session-Token" || text == "scnt") + { + handelDic.TryAddDic(text, httpReuslt.Header[text]); + } + } + return true; + } + + private bool setQuestions(string newqt1, string newqt2, string newqt3, int retry = 0) + { + string text = ""; + if (securityQuestions != null) + { + AothQuestions aothQuestions = new AothQuestions(); + aothQuestions.questions = new AothQuestions.Question[3]; + aothQuestions.questions[0] = new AothQuestions.Question + { + id = 130, + answer = newqt1, + number = 1, + question = securityQuestions.availableSecurityQuestions[0][0].question + }; + aothQuestions.questions[1] = new AothQuestions.Question + { + id = 136, + answer = newqt2, + number = 2, + question = securityQuestions.availableSecurityQuestions[1][0].question + }; + aothQuestions.questions[2] = new AothQuestions.Question + { + id = 142, + answer = newqt3, + number = 3, + question = securityQuestions.availableSecurityQuestions[2][0].question + }; + text = Tools.Toenjson(new Dictionary { { "security", aothQuestions } }); + } + else + { + text = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes("{\"questions\":[{\"id\":130,\"question\":\"你少年时代最好的朋友叫什么名字?\",\"number\":1,\"answer\":\"" + newqt1 + "\"},{\"id\":136,\"question\":\"你的理想工作是什么?\",\"number\":2,\"answer\":\"" + newqt2 + "\"},{\"id\":142,\"question\":\"你的父母是在哪里认识的?\",\"number\":3,\"answer\":\"" + newqt3 + "\"}]}")); + } + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + string apple_Widget_Key = Apple_Widget_Key; + if (widgKey != string.Empty) + { + webHeaderCollection.AddWebHander("X-Apple-Repair-App-Id", "1879"); + apple_Widget_Key = widgKey; + } + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", apple_Widget_Key); + webHeaderCollection.AddWebHander("scnt", handelDic["scnt"]); + webHeaderCollection.AddWebHander("X-Apple-Skip-Repair-Attributes", "[]"); + webHeaderCollection.AddWebHander("X-Apple-OAuth-Context", handelDic.getDicVal("X-Apple-OAuth-Context", "")); + webHeaderCollection.AddWebHander("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/manage/repair/questions", text, "https://appleid.apple.com/widget/account/repair?widgetKey=af1139274f266b22b68c2a3e7ad932cb3c0bbe854e13a79af78dcc73136882c3&rv=1&language=zh_CN_CHN", webHeaderCollection); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.OK) + { + string[] allKeys = httpResult.Header.AllKeys; + foreach (string text2 in allKeys) + { + if (text2 == "X-Apple-Session-Token" || text2 == "scnt") + { + handelDic.TryAddDic(text2, httpResult.Header[text2]); + } + } + applyAtion?.Invoke(base.noticeKey, DisplyType.qt1, newqt1); + applyAtion?.Invoke(base.noticeKey, DisplyType.qt2, newqt2); + applyAtion?.Invoke(base.noticeKey, DisplyType.qt3, newqt3); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密保修改成功"); + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密保修改失败,未知异常"); + return false; + } + ServiceErrorsModel serviceErrorsModel = Tools.Todejosn(httpResult.Html); + if (serviceErrorsModel != null) + { + string serviceError = getServiceError(serviceErrorsModel); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密保修改异常:" + serviceError); + if (serviceError.Contains("发生未知错误") && retry < base.MaxRetryCount) + { + Thread.Sleep(3000); + if (retry != 0) + { + base.ProxyIp = ""; + } + return setQuestions(newqt1, newqt2, newqt3, retry + 1); + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密保修改失败"); + } + return false; + } + + public bool CrossBorderPrivacyConsent(bool gcbdCrossBorderPrivacyConsentRequired, bool appleCrossBorderPrivacyConsentRequired, int retry = 0) + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + string apple_Widget_Key = Apple_Widget_Key; + if (widgKey != string.Empty) + { + webHeaderCollection.AddWebHander("X-Apple-Repair-App-Id", "1879"); + apple_Widget_Key = widgKey; + } + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", apple_Widget_Key); + webHeaderCollection.AddWebHander("scnt", handelDic["scnt"]); + webHeaderCollection.AddWebHander("X-Apple-Skip-Repair-Attributes", "[]"); + if (handelDic.ContainsKey("X-Apple-Session-Token")) + { + webHeaderCollection.AddWebHander("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + } + if (handelDic.ContainsKey("repairSessionId")) + { + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + } + webHeaderCollection.AddWebHander("X-Apple-OAuth-Context", handelDic.getDicVal("X-Apple-OAuth-Context", "")); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + string postData = "{\"account\":{\"preferences\":{\"privacyPreferences\":{\"appleCrossBorderPrivacyNoticeAccepted\":true}}},\"completedSteps\":[],\"requiredSteps\":[\"crossBorderPrivacyConsent\"],\"repairContext\":{\"repairType\":\"crossBorderPrivacyConsent\",\"repairItems\":[\"crossBorderPrivacyConsent\"]}}"; + if (gcbdCrossBorderPrivacyConsentRequired) + { + postData = "{\"account\":{\"preferences\":{\"privacyPreferences\":{\"gcbdCrossBorderPrivacyNoticeAccepted\":true}}},\"completedSteps\":[],\"requiredSteps\":[\"crossBorderPrivacyConsent\"],\"repairContext\":{\"repairType\":\"crossBorderPrivacyConsent\",\"repairItems\":[\"crossBorderPrivacyConsent\"]}}"; + } + if (gcbdCrossBorderPrivacyConsentRequired && appleCrossBorderPrivacyConsentRequired) + { + postData = "{\"account\":{\"preferences\":{\"privacyPreferences\":{\"appleCrossBorderPrivacyNoticeAccepted\":true,\"gcbdCrossBorderPrivacyNoticeAccepted\":true}}},\"completedSteps\":[],\"requiredSteps\":[\"crossBorderPrivacyConsent\"],\"repairContext\":{\"repairType\":\"crossBorderPrivacyConsent\",\"repairItems\":[\"crossBorderPrivacyConsent\"]}}"; + } + if (postWebContent("https://appleid.apple.com/account/manage/repair/privacy/consent", postData, "https://appleid.apple.com/", webHeaderCollection).StatusCode == HttpStatusCode.OK) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "同意数据隐私协议"); + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "跳过隐私协议失败"); + if (retry == 0) + { + return CrossBorderPrivacyConsent(gcbdCrossBorderPrivacyConsentRequired, appleCrossBorderPrivacyConsentRequired, retry + 1); + } + return false; + } + + public bool SkipPhoneNumber() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + string apple_Widget_Key = Apple_Widget_Key; + if (widgKey != string.Empty) + { + webHeaderCollection.AddWebHander("X-Apple-Repair-App-Id", "1879"); + apple_Widget_Key = widgKey; + } + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", apple_Widget_Key); + webHeaderCollection.AddWebHander("scnt", handelDic["scnt"]); + webHeaderCollection.AddWebHander("X-Apple-Skip-Repair-Attributes", "[\"phoneNumber\"]"); + if (handelDic.ContainsKey("X-Apple-Session-Token")) + { + webHeaderCollection.AddWebHander("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + } + if (handelDic.ContainsKey("repairSessionId")) + { + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + } + webHeaderCollection.AddWebHander("X-Apple-OAuth-Context", handelDic.getDicVal("X-Apple-OAuth-Context", "")); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + if (getWebJsonContent("https://appleid.apple.com/account/manage/repair/options", "https://appleid.apple.com/widget/account/repair?widgetKey=af1139274f266b22b68c2a3e7ad932cb3c0bbe854e13a79af78dcc73136882c3&rv=1&language=zh_CN_CHN", webHeaderCollection).StatusCode == HttpStatusCode.OK) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "跳过手机号码成功"); + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "跳过手机号码失败"); + return false; + } + + private bool complete() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + string text = ""; + if (handelDic.ContainsKey("scnt2")) + { + text = handelDic["scnt2"]; + } + webHeaderCollection.AddWebHander("X-Apple-Domain-Id", "1"); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + if (string.IsNullOrEmpty(text) && handelDic.ContainsKey("scnt")) + { + text = handelDic["scnt"]; + } + webHeaderCollection.AddWebHander("scnt", text); + if (handelDic.ContainsKey("X-Apple-ID-Session-Id")) + { + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic.getDicVal("X-Apple-ID-Session-Id", "")); + } + else if (handelDic.ContainsKey("repairSessionId")) + { + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic.getDicVal("repairSessionId", "")); + } + string apple_Widget_Key = Apple_Widget_Key; + if (widgKey != string.Empty) + { + webHeaderCollection.AddWebHander("X-Apple-Repair-App-Id", "1879"); + apple_Widget_Key = widgKey; + } + webHeaderCollection.AddWebHander("X-Apple-Repair-Session-Token", handelDic["X-Apple-Session-Token"]); + webHeaderCollection.AddWebHander("Origin", "https://idmsa.apple.com"); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", apple_Widget_Key); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + webHeaderCollection.AddWebHander("X-Apple-Auth-Attributes", handelDic.getDicVal("X-Apple-Auth-Attributes", "")); + addOAuthHanede(webHeaderCollection, authsigninConfig); + string uRL = "https://idmsa.apple.com/appleauth/auth/repair/complete"; + HttpItem httpItem = new HttpItem + { + URL = uRL, + Method = "post", + UserAgent = base.userAgent, + Cookie = listCookie.toFonmtCookie(), + ContentType = "application/json; charset=utf-8", + Accept = "application/json, text/javascript, */*; q=0.01", + Referer = "https://idmsa.apple.com/", + ResultType = ResultType.String, + Postdata = "", + ProtocolVersion = HttpVersion.Version11, + WebProxy = WebRequest.DefaultWebProxy + }; + httpItem.Header = webHeaderCollection; + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + if (httpReuslt.StatusCode != HttpStatusCode.OK && httpReuslt.StatusCode != HttpStatusCode.NoContent) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "协议阅读失败"); + return false; + } + string[] allKeys = httpReuslt.Header.AllKeys; + foreach (string text2 in allKeys) + { + if (text2 == "X-Apple-OAuth-Grant-Code") + { + if (!handelDic.ContainsKey(text2)) + { + handelDic.TryAddDic(text2, httpReuslt.Header[text2]); + } + else + { + handelDic[text2] = httpReuslt.Header[text2]; + } + } + } + if (httpReuslt.Header.AllKeys.Contains("X-Apple-ID-Account-Country")) + { + action?.Invoke(base.noticeKey, DisplyType.area, AppleUtlis.GetAreaByCode(httpReuslt.Header["X-Apple-ID-Account-Country"].ToString())); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "协议阅读成功"); + return true; + } + + public void getSecurityUpgrade() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-Domain-Id", "1"); + webHeaderCollection.AddWebHander("scnt", handelDic["scnt"]); + webHeaderCollection.AddWebHander("X-Apple-Skip-Repair-Attributes", "[]"); + webHeaderCollection.AddWebHander("X-Apple-Session-Token", handelDic["X-Apple-Repair-Session-Token"]); + webHeaderCollection.AddWebHander("X-Apple-OAuth-Context", handelDic.getDicVal("X-Apple-OAuth-Context", "")); + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic["X-Apple-ID-Session-Id"]); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + HttpResult webJsonContent = getWebJsonContent("https://appleid.apple.com/account/security/upgrade", "https://appleid.apple.com/", webHeaderCollection); + if (webJsonContent.StatusCode != HttpStatusCode.OK) + { + return; + } + try + { + string html = webJsonContent.Html; + if (!string.IsNullOrEmpty(html)) + { + SecurityUpgradeModel securityUpgradeModel = Tools.Todejosn(html); + action?.Invoke(base.noticeKey, DisplyType.shengri, securityUpgradeModel.account.security.birthday); + if (!string.IsNullOrEmpty(securityUpgradeModel.account.security.birthday) && securityUpgradeModel.account.security.birthday.Split('-').Length == 3 && (string.IsNullOrEmpty(acount.birthday) || acount.birthday != securityUpgradeModel.account.security.birthday)) + { + acount.birthday = securityUpgradeModel.account.security.birthday; + } + action?.Invoke(base.noticeKey, DisplyType.guojia, securityUpgradeModel.account.person.primaryAddress.countryName); + } + if (webJsonContent.Html.Contains("incompatible_device")) + { + incompatibleDevice = true; + } + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + } + } + + private bool authenticatePassword(string pwd) + { + string url = "https://appleid.apple.com/authenticate/password"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Apple-Api-Key", base.apiKey); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-Domain-Id", "1"); + webHeaderCollection.AddWebHander("scnt", handelDic["scnt"]); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + HttpResult httpResult = postWebContent(url, "{\"password\":\"" + pwd + "\"}", appleHomeUrl, webHeaderCollection); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.NoContent) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密码验证成功"); + return true; + } + if (httpResult.StatusCode == HttpStatusCode.PreconditionFailed) + { + string[] allKeys = httpResult.Header.AllKeys; + foreach (string text in allKeys) + { + if (text == "X-Apple-Repair-Session-Token") + { + if (!handelDic.ContainsKey(text)) + { + handelDic.TryAddDic(text, httpResult.Header[text]); + } + else + { + handelDic[text] = httpResult.Header[text]; + } + } + if (text == "scnt") + { + if (!handelDic.ContainsKey(text)) + { + handelDic.TryAddDic(text, httpResult.Header[text]); + } + else + { + handelDic[text] = httpResult.Header[text]; + } + } + } + if (httpResult.Header.AllKeys.Contains("X-Apple-ID-Account-Country")) + { + XAppleIDAccountCountry = AppleUtlis.GetAreaByCode(httpResult.Header["X-Apple-ID-Account-Country"].ToString()); + XAppleIDAccountCountry_SOUSUO = httpResult.Header["X-Apple-ID-Account-Country"].ToString(); + action?.Invoke(base.noticeKey, DisplyType.area, XAppleIDAccountCountry); + } + } + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密码错误"); + return false; + } + + public bool OpenAuthen(AppleAcount _acount, AppleChangeItem changeItem, Func getCodeAct, string _noticeKey) + { + if (string.IsNullOrEmpty(base.ProxyIp)) + { + base.ProxyIp = ProxyAccountCache.getProxyAccountIP(_acount.appleId); + } + acount = _acount; + base.noticeKey = _noticeKey; + appleId = _acount.appleId; + _changeItem = changeItem; + initUserAgent(); + authsigninConfig = new AuthsigninConfig + { + Apple_Widget_Key = Apple_Widget_Key, + authUrl = authUrl, + homeLanguage = homeLanguage, + iframeId = iframeId, + redirectURI = redirectURI + }; + listCookie.Add(new CookieItem + { + Key = "idclient", + Value = "web" + }); + appleId = acount.appleId; + _changeItem = changeItem; + getCodeAct_ = getCodeAct; + openHsa2 = true; + try + { + bool flag; + if (LoginWeb() && (flag = appleauthAuth(acount))) + { + if (flag && !AuthenDoubleOpenState) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "登录成功"); + ProxyAccountCache.addProxyIp(acount.appleId, base.ProxyIp); + if (intoHome()) + { + if (string.IsNullOrEmpty(acount.moblie)) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "请先导入手机号码"); + return false; + } + getSecuritydevices(); + AuthenDoubleOpenState = OpenHsa2Act(_changeItem.mode, _changeItem.countryCode, base.apiKey); + } + } + return AuthenDoubleOpenState; + } + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + action?.Invoke(base.noticeKey, DisplyType.xinxi, ex.Message); + } + return false; + } + + protected new HttpResult putWebContent(string url, string putData, string referer, WebHeaderCollection webHeader = null, string accept = "") + { + byte[] bytes = Encoding.UTF8.GetBytes(putData); + HttpItem httpItem = new HttpItem + { + URL = url, + Method = "PUT", + UserAgent = base.userAgent, + Cookie = listCookie.toFonmtCookie(), + Accept = ((accept.Length == 0) ? "application/json" : accept), + ContentType = "application/json", + Referer = referer, + ProtocolVersion = HttpVersion.Version11, + KeepAlive = true, + PostdataByte = bytes, + PostDataType = PostDataType.Byte, + ResultType = ResultType.String, + WebProxy = WebRequest.DefaultWebProxy + }; + if (webHeader != null) + { + httpItem.Header = webHeader; + } + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + if (httpReuslt.StatusCode == (HttpStatusCode)451 && authenticatePassword(acount.applePwd)) + { + return putWebContent(url, putData, referer, webHeader, accept); + } + Array.Clear(bytes, 0, bytes.Length); + return httpReuslt; + } + + protected new HttpResult DeleteWebContent(string url, string putData, string referer, WebHeaderCollection webHeader = null, string accept = "") + { + byte[] bytes = Encoding.UTF8.GetBytes(putData); + HttpItem httpItem = new HttpItem + { + URL = url, + Method = "DELETE", + UserAgent = base.userAgent, + Cookie = listCookie.toFonmtCookie(), + Accept = ((accept.Length == 0) ? "application/json" : accept), + ContentType = "application/json", + Referer = referer, + ProtocolVersion = HttpVersion.Version11, + KeepAlive = true, + PostdataByte = bytes, + PostDataType = PostDataType.Byte, + ResultType = ResultType.String, + WebProxy = WebRequest.DefaultWebProxy + }; + if (webHeader != null) + { + httpItem.Header = webHeader; + } + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + if (httpReuslt.StatusCode == (HttpStatusCode)451 && authenticatePassword(acount.applePwd)) + { + return DeleteWebContent(url, putData, referer, webHeader, accept); + } + Array.Clear(bytes, 0, bytes.Length); + return httpReuslt; + } + + public new HttpResult postWebContent(string url, string postData, string referer, WebHeaderCollection webHeader = null, string accept = "application/json, text/javascript, */*; q=0.01", string contentType = "application/json", int RetryTimes = 0) + { + byte[] bytes = Encoding.UTF8.GetBytes(postData); + HttpItem httpItem = new HttpItem + { + URL = url, + Method = "POST", + UserAgent = base.userAgent, + Cookie = listCookie.toFonmtCookie(), + Accept = accept, + ContentType = contentType, + Referer = referer, + ProtocolVersion = HttpVersion.Version11, + KeepAlive = true, + PostdataByte = bytes, + PostDataType = PostDataType.Byte, + ResultType = ResultType.String, + WebProxy = WebRequest.DefaultWebProxy + }; + if (webHeader != null) + { + httpItem.Header = webHeader; + } + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + if (httpReuslt.StatusCode == (HttpStatusCode)451 && authenticatePassword(acount.applePwd)) + { + return postWebContent(url, postData, referer, webHeader, accept); + } + if (httpReuslt.StatusCode == HttpStatusCode.BadRequest && RetryTimes < 2 && string.IsNullOrEmpty(httpReuslt.Html)) + { + if (RetryTimes == 1) + { + base.ProxyIp = ""; + } + Thread.Sleep(3000 * (RetryTimes + 1)); + return postWebContent(url, postData, referer, webHeader, accept, contentType, RetryTimes + 1); + } + Array.Clear(bytes, 0, bytes.Length); + return httpReuslt; + } + + public void initUserAgent() + { + if (!string.IsNullOrEmpty(base.ProxyIp)) + { + return; + } + ProxyAccountModel proxyAccountInfo = ProxyAccountCache.getProxyAccountInfo(acount.appleId); + if (proxyAccountInfo != null) + { + base.ProxyIp = proxyAccountInfo.ProxyIp; + if (string.IsNullOrEmpty(proxyAccountInfo.accountWebUserAgent)) + { + proxyAccountInfo.accountWebUserAgent = base.userAgent; + } + else + { + base.userAgent = proxyAccountInfo.accountWebUserAgent; + } + } + } + } +} diff --git a/AppleBatch_June.AppleWebServace/ApplePrivacytWeb.cs b/AppleBatch_June.AppleWebServace/ApplePrivacytWeb.cs new file mode 100644 index 0000000..cf2ddef --- /dev/null +++ b/AppleBatch_June.AppleWebServace/ApplePrivacytWeb.cs @@ -0,0 +1,543 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text; +using System.Text.RegularExpressions; +using AppleBatch_June.ExecuteTasks; +using AppleBatch_June.Model; +using AppleBatch_June.Utils; +using DotNet.Utilities; + +namespace AppleBatch_June.AppleWebServace +{ + public class ApplePrivacytWeb : AppleWebBase + { + private AppleAcount acount = new AppleAcount(); + + protected string Apple_Widget_Key = "04659e25236376d440c224638c1cdd6a001abdd7f186cdcfa120abf35417efab"; + + public string authUrl = "https://privacy.apple.com"; + + public string redirectURI = "https://idmsa.apple.com/"; + + private static string homeLanguage = "zh_CN"; + + public string appleId { get; set; } + + private AuthsigninConfig authsigninConfig { get; set; } + + public string XAppleIDAccountCountry { get; set; } + + protected string iframeId { get; set; } + + public ApplePrivacytWeb(bool _openVpn, Action _action, Action _applyAtion, ITaskRunState _taskState) + : base(_action, _applyAtion, _taskState) + { + taskState = _taskState ?? throw new Exception("任务运行状态不能是空的"); + base.openVpn = _openVpn; + iframeId = APPLEHCHelp.getIframeId(); + } + + public bool applyQueryAuthBalance(AppleAcount _acount, string _noticeKey) + { + acount = _acount; + if (string.IsNullOrEmpty(base.ProxyIp)) + { + base.ProxyIp = ProxyAccountCache.getProxyAccountIP(acount.appleId); + } + appleId = acount.appleId; + base.noticeKey = _noticeKey; + authsigninConfig = new AuthsigninConfig + { + Apple_Widget_Key = Apple_Widget_Key, + authUrl = authUrl, + homeLanguage = homeLanguage, + iframeId = iframeId, + redirectURI = redirectURI + }; + try + { + HttpResult webContent = getWebContent("https://privacy.apple.com/account", ""); + if (webContent.StatusCode != HttpStatusCode.OK) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "页面加载失败"); + return false; + } + string value = new Regex(AppSysConfig.getConfig("Regex_apply_CsrfToken")).Match(webContent.Html).Groups[1].Value.Trim(); + if (LoginWeb() && appleauthAuth(acount)) + { + string value2 = ""; + handelDic.TryGetValue("X-Apple-OAuth-Grant-Code", out value2); + string value3 = Tools.EncodeBase64(Encoding.UTF8.GetBytes(Apple_Widget_Key + ":" + value2)); + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("x-csrf-token", value); + webHeaderCollection.Add("x-apple-authentication", value3); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在获取余额"); + HttpResult webJsonContent = getWebJsonContent("https://privacy.apple.com/session/create", "https://privacy.apple.com/", webHeaderCollection); + if (webJsonContent.StatusCode == HttpStatusCode.OK || webJsonContent.StatusCode == HttpStatusCode.Created) + { + WebHeaderCollection webHeaderCollection2 = new WebHeaderCollection(); + webHeaderCollection2.Add("x-csrf-token", value); + HttpResult webJsonContent2 = getWebJsonContent("https://privacy.apple.com/section/delete-account", "https://privacy.apple.com/account", webHeaderCollection2); + if (webJsonContent2.Html.Contains("store_balance")) + { + string text = new Regex(AppSysConfig.getConfig("Regex_applyQueryAuthBalance")).Match(webJsonContent2.Html).Groups[1].Value.Trim().TrimEnd(','); + if (string.IsNullOrEmpty(text)) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "余额解析失败"); + return false; + } + Dictionary dictionary = Tools.Todejosn>("{" + text + "}"); + decimal num = (dynamic)dictionary["balance"]; + string text2 = (dynamic)dictionary["currency"]; + action?.Invoke(base.noticeKey, DisplyType.balance, num + " " + text2); + } + else + { + action?.Invoke(base.noticeKey, DisplyType.balance, "0"); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "查询完成"); + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在重新获取余额"); + webJsonContent = getWebJsonContent("https://privacy.apple.com/session/create", "https://privacy.apple.com/", webHeaderCollection); + if (webJsonContent.StatusCode == HttpStatusCode.OK || webJsonContent.StatusCode == HttpStatusCode.Created) + { + WebHeaderCollection webHeaderCollection3 = new WebHeaderCollection(); + webHeaderCollection3.Add("x-csrf-token", value); + HttpResult webJsonContent3 = getWebJsonContent("https://privacy.apple.com/section/delete-account", "https://privacy.apple.com/account", webHeaderCollection3); + if (webJsonContent3.Html.Contains("store_balance")) + { + string text3 = new Regex(AppSysConfig.getConfig("Regex_applyQueryAuthBalance")).Match(webJsonContent3.Html).Groups[1].Value.Trim().TrimEnd(','); + if (string.IsNullOrEmpty(text3)) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "余额解析失败"); + return false; + } + Dictionary dictionary2 = Tools.Todejosn>("{" + text3 + "}"); + decimal num2 = (dynamic)dictionary2["balance"]; + string text4 = (dynamic)dictionary2["currency"]; + action?.Invoke(base.noticeKey, DisplyType.balance, num2 + " " + text4); + } + else + { + action?.Invoke(base.noticeKey, DisplyType.balance, "0"); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "查询完成"); + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "余额获取失败"); + } + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + action?.Invoke(base.noticeKey, DisplyType.xinxi, ex.Message); + } + return false; + } + + public bool LoginWeb() + { + HttpResult result = null; + string errMsg = "未知错误"; + if (authsignin(acount.appleId, acount.applePwd, authsigninConfig, ref errMsg, out result)) + { + if (result != null) + { + if (result.StatusCode == HttpStatusCode.Conflict || result.StatusCode == HttpStatusCode.OK) + { + if (result.Html.Contains("hsa2")) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "双重验证账号暂不支持更改"); + return false; + } + return true; + } + if (result.StatusCode == HttpStatusCode.PreconditionFailed) + { + string[] allKeys = result.Header.AllKeys; + foreach (string text in allKeys) + { + switch (text) + { + case "X-Apple-Auth-Attributes": + case "X-Apple-Repair-Session-Token": + case "X-Apple-ID-Session-Id": + case "scnt": + case "X-Apple-OAuth-Context": + handelDic.TryAddDic(text, result.Header[text]); + break; + } + if (text == "scnt") + { + handelDic.TryAddDic("scnt2", result.Header[text]); + } + } + return repair(); + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "登录异常了"); + } + } + return false; + } + + private bool appleauthAuth(AppleAcount acount) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证密保问题"); + new WebHeaderCollection(); + string url = "https://idmsa.apple.com/appleauth/auth"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-Locale", homeLanguage); + webHeaderCollection.AddWebHander("X-Apple-Auth-Attributes", handelDic.getDicVal("X-Apple-Auth-Attributes", "")); + webHeaderCollection.AddWebHander("scnt", handelDic.getDicVal("scnt", "")); + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic.getDicVal("X-Apple-ID-Session-Id", "")); + addOAuthHanede(webHeaderCollection, authsigninConfig); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + HttpResult webContent = getWebContent(url, authUrl, webHeaderCollection, "text/html", "application/json"); + if (webContent.StatusCode == HttpStatusCode.OK) + { + AothQuestions questions = Tools.Todejosn(new Regex(AppSysConfig.getConfig("Regex_appleauthAuth")).Match(webContent.Html).Groups[1].Value.Trim() + "}"); + return verifyAuthQuestions(questions, new string[3] { acount.appleQt1, acount.appleQt2, acount.appleQt3 }); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密保获取失败"); + return false; + } + + private bool verifyAuthQuestions(AothQuestions questions, string[] question) + { + AothQuestions.Question[] questions2 = questions.questions; + int num = 0; + while (true) + { + if (num < questions2.Length) + { + AothQuestions.Question question2 = questions2[num]; + int anwerId_Index = Tools.getAnwerId_Index(question2.id); + if (anwerId_Index == 0) + { + break; + } + question2.answer = question[anwerId_Index - 1]; + num++; + continue; + } + string postData = Tools.Toenjson(questions); + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.AddWebHander("X-Apple-App-Id", Apple_Widget_Key); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-Domain-Id", "1"); + webHeaderCollection.AddWebHander("scnt", handelDic["scnt"]); + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic["X-Apple-ID-Session-Id"]); + webHeaderCollection.AddWebHander("X-Apple-Locale", homeLanguage); + webHeaderCollection.AddWebHander("X-Apple-Auth-Attributes", handelDic.getDicVal("X-Apple-Auth-Attributes", "")); + webHeaderCollection.Add("X-Apple-OAuth-Require-Grant-Code", "true"); + addOAuthHanede(webHeaderCollection, authsigninConfig); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + string url = "https://idmsa.apple.com/appleauth/auth/verify/questions"; + HttpResult httpResult = postWebContent(url, postData, authUrl, webHeaderCollection); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.NoContent) + { + string[] allKeys = httpResult.Header.AllKeys; + foreach (string text in allKeys) + { + if (text == "X-Apple-OAuth-Grant-Code" || text == "scnt") + { + handelDic.TryAddDic(text, httpResult.Header[text]); + } + if (text == "scnt") + { + handelDic.TryAddDic("idmsa_scnt", httpResult.Header[text]); + } + } + if (httpResult.Header.AllKeys.Contains("X-Apple-ID-Account-Country")) + { + XAppleIDAccountCountry = AppleUtlis.GetAreaByCode(httpResult.Header["X-Apple-ID-Account-Country"].ToString()); + action?.Invoke(base.noticeKey, DisplyType.area, XAppleIDAccountCountry); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密保验证成功"); + return true; + } + if (httpResult.StatusCode == HttpStatusCode.PreconditionFailed) + { + string[] allKeys = httpResult.Header.AllKeys; + foreach (string text2 in allKeys) + { + switch (text2) + { + case "X-Apple-Repair-Session-Token": + case "X-Apple-ID-Session-Id": + case "scnt": + case "X-Apple-OAuth-Context": + handelDic.TryAddDic(text2, httpResult.Header[text2]); + break; + } + if (text2 == "scnt") + { + handelDic.TryAddDic("idmsa_scnt", httpResult.Header[text2]); + } + } + if (httpResult.Header.AllKeys.Contains("X-Apple-ID-Account-Country")) + { + XAppleIDAccountCountry = AppleUtlis.GetAreaByCode(httpResult.Header["X-Apple-ID-Account-Country"].ToString()); + action?.Invoke(base.noticeKey, DisplyType.area, XAppleIDAccountCountry); + } + return repair(); + } + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密保错误"); + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "非正常密保问题,无法识别"); + return false; + } + + private bool repair() + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "获取阅读协议"); + string text = "zh_CN_CHN"; + if (handelDic.ContainsKey("X-Apple-Locale")) + { + text = handelDic["X-Apple-Locale"]; + } + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("Upgrade-Insecure-Requests", "1"); + string apple_Widget_Key = Apple_Widget_Key; + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", apple_Widget_Key); + string uRL = "https://appleid.apple.com/widget/account/repair?trustedWidgetDomain=https%3A%2F%2Fidmsa.apple.com&widgetKey=" + apple_Widget_Key + "&rv=1&language=" + text; + HttpItem httpItem = new HttpItem + { + URL = uRL, + Method = "get", + Timeout = 120000, + ReadWriteTimeout = 30000, + UserAgent = base.userAgent, + Cookie = listCookie.toFonmtCookie(), + ContentType = "text/html;charset=UTF-8", + Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", + Referer = "https://idmsa.apple.com/appleauth/auth/signin?widgetKey=" + apple_Widget_Key + "&language=zh_CN&rv=1", + ResultType = ResultType.String, + ProtocolVersion = HttpVersion.Version11, + WebProxy = WebRequest.DefaultWebProxy + }; + httpItem.Header = webHeaderCollection; + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + if (httpReuslt.StatusCode == HttpStatusCode.OK) + { + string value = new Regex(AppSysConfig.getConfig("Regex_repair_sessionId")).Match(httpReuslt.Html).Groups[1].Value.Trim().Replace("\n", "").Replace("\r", "") + .Replace("\"", "") + .TrimStart(':') + .Trim(); + string key = "repairSessionId"; + if (!handelDic.ContainsKey(key)) + { + handelDic.TryAddDic(key, value); + } + else + { + handelDic[key] = value; + } + string[] allKeys = httpReuslt.Header.AllKeys; + foreach (string text2 in allKeys) + { + if (text2 == "X-Apple-Repair-Session-Token" || text2 == "scnt") + { + handelDic.TryAddDic(text2, httpReuslt.Header[text2]); + } + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "协议获取成功"); + return options(); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "协议获取失败"); + return false; + } + + private bool options() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("scnt", handelDic.getDicVal("scnt", "")); + webHeaderCollection.AddWebHander("X-Apple-Skip-Repair-Attributes", "[\"hsa2_enrollment\"]"); + webHeaderCollection.AddWebHander("X-Apple-OAuth-Context", handelDic.getDicVal("X-Apple-OAuth-Context", "")); + string dicVal = handelDic.getDicVal("X-Apple-Session-Token", ""); + if (string.IsNullOrEmpty(dicVal)) + { + dicVal = handelDic.getDicVal("X-Apple-Repair-Session-Token", ""); + } + webHeaderCollection.AddWebHander("X-Apple-Session-Token", dicVal); + webHeaderCollection.AddWebHander("X-Apple-I-TimeZone", "Asia/Shanghai"); + webHeaderCollection.AddWebHander("X-Apple-Repair-App-Id", "1879"); + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic.getDicVal("repairSessionId", "")); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", Apple_Widget_Key); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + string uRL = "https://appleid.apple.com/account/manage/repair/options"; + HttpItem httpItem = new HttpItem + { + URL = uRL, + Method = "get", + Timeout = 120000, + ReadWriteTimeout = 30000, + UserAgent = base.userAgent, + Cookie = listCookie.toFonmtCookie(), + ContentType = "application/json; charset=utf-8", + Accept = "application/json, text/javascript, */*; q=0.01", + Referer = "https://appleid.apple.com/", + ResultType = ResultType.String, + ProtocolVersion = HttpVersion.Version11, + WebProxy = WebRequest.DefaultWebProxy + }; + httpItem.Header = webHeaderCollection; + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + if (httpReuslt.StatusCode == HttpStatusCode.OK) + { + string[] allKeys = httpReuslt.Header.AllKeys; + foreach (string text in allKeys) + { + if (text == "X-Apple-Session-Token" || text == "scnt") + { + handelDic.TryAddDic(text, httpReuslt.Header[text]); + } + } + Dictionary dictionary = Tools.Todejosn>(httpReuslt.Html); + if (httpReuslt.Html.Contains("requiredSteps")) + { + foreach (object item in (dynamic)dictionary["requiredSteps"]) + { + if ((string)(dynamic)item == "privacy_consent" && !accept()) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "协议阅读失败#2"); + return false; + } + } + } + return complete(); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "协议获取失败#2"); + return false; + } + + private bool accept() + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在同意协议"); + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-Repair-App-Id", "1879"); + webHeaderCollection.AddWebHander("X-Apple-OAuth-Context", handelDic.getDicVal("X-Apple-OAuth-Context", "")); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.AddWebHander("scnt", handelDic["scnt"]); + webHeaderCollection.AddWebHander("X-Apple-Skip-Repair-Attributes", "[]"); + webHeaderCollection.AddWebHander("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + webHeaderCollection.AddWebHander("X-Apple-I-TimeZone", "Asia/Shanghai"); + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + string uRL = "https://appleid.apple.com/account/manage/privacy/accept"; + HttpItem httpItem = new HttpItem + { + URL = uRL, + Method = "put", + UserAgent = base.userAgent, + Cookie = listCookie.toFonmtCookie(), + ContentType = "application/json; charset=utf-8", + Accept = "application/json, text/javascript, */*; q=0.01", + Referer = "https://appleid.apple.com/", + ProtocolVersion = HttpVersion.Version11, + WebProxy = WebRequest.DefaultWebProxy + }; + httpItem.Header = webHeaderCollection; + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + if (httpReuslt.StatusCode != HttpStatusCode.OK && httpReuslt.StatusCode != HttpStatusCode.MethodNotAllowed) + { + return false; + } + string[] allKeys = httpReuslt.Header.AllKeys; + foreach (string text in allKeys) + { + if (text == "X-Apple-Session-Token" || text == "scnt") + { + handelDic.TryAddDic(text, httpReuslt.Header[text]); + } + } + return true; + } + + private bool complete() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-Locale", homeLanguage); + webHeaderCollection.AddWebHander("scnt", handelDic.getDicVal("idmsa_scnt", "")); + if (handelDic.ContainsKey("X-Apple-ID-Session-Id")) + { + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic.getDicVal("X-Apple-ID-Session-Id", "")); + } + else if (handelDic.ContainsKey("repairSessionId")) + { + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic.getDicVal("repairSessionId", "")); + } + webHeaderCollection.AddWebHander("X-Apple-Domain-Id", "2"); + webHeaderCollection.AddWebHander("X-Apple-Trusted-Domain", " https://idmsa.apple.com"); + webHeaderCollection.AddWebHander("X-Apple-Repair-Session-Token", handelDic["X-Apple-Session-Token"]); + webHeaderCollection.AddWebHander("Origin", "https://idmsa.apple.com"); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", Apple_Widget_Key); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + webHeaderCollection.AddWebHander("X-Apple-Auth-Attributes", handelDic.getDicVal("X-Apple-Auth-Attributes", "")); + webHeaderCollection.Add("X-Apple-OAuth-Require-Grant-Code", "true"); + addOAuthHanede(webHeaderCollection, authsigninConfig); + string uRL = "https://idmsa.apple.com/appleauth/auth/repair/complete"; + HttpItem httpItem = new HttpItem + { + URL = uRL, + Method = "post", + UserAgent = base.userAgent, + Cookie = listCookie.toFonmtCookie(), + ContentType = "application/json; charset=utf-8", + Accept = "application/json, text/javascript, */*; q=0.01", + Referer = "https://idmsa.apple.com/", + ResultType = ResultType.String, + Postdata = "", + ProtocolVersion = HttpVersion.Version11, + WebProxy = WebRequest.DefaultWebProxy + }; + httpItem.Header = webHeaderCollection; + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + if (httpReuslt.StatusCode != HttpStatusCode.OK && httpReuslt.StatusCode != HttpStatusCode.NoContent) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "协议阅读失败"); + return false; + } + string[] allKeys = httpReuslt.Header.AllKeys; + foreach (string text in allKeys) + { + if (text == "X-Apple-OAuth-Grant-Code" || text == "scnt") + { + handelDic.TryAddDic(text, httpReuslt.Header[text]); + } + } + if (httpReuslt.Header.AllKeys.Contains("X-Apple-ID-Account-Country")) + { + action?.Invoke(base.noticeKey, DisplyType.area, AppleUtlis.GetAreaByCode(httpReuslt.Header["X-Apple-ID-Account-Country"].ToString())); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "协议阅读成功"); + return true; + } + } +} diff --git a/AppleBatch_June.AppleWebServace/AppleReportaproblemWeb.cs b/AppleBatch_June.AppleWebServace/AppleReportaproblemWeb.cs new file mode 100644 index 0000000..0cc160e --- /dev/null +++ b/AppleBatch_June.AppleWebServace/AppleReportaproblemWeb.cs @@ -0,0 +1,461 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text.RegularExpressions; +using AppleBatch_June.ExecuteTasks; +using AppleBatch_June.Model; +using AppleBatch_June.Utils; +using DotNet.Utilities; + +namespace AppleBatch_June.AppleWebServace +{ + public class AppleReportaproblemWeb : AppleWebBase + { + private static string homeLanguage = "zh_CN"; + + public string Apple_Widget_Key = "6f59402f11d3e2234be5b88bf1c96e1e453a875aec205272add55157582a9f61"; + + public string authUrl = "https://idmsa.apple.com"; + + public string redirectURI = "https://idmsa.apple.com"; + + private string dataR = ""; + + protected string iframeId { get; set; } + + private AuthsigninConfig authsigninConfig { get; set; } + + public bool idIsNormal { get; set; } + + public string appleId { get; set; } + + public AppleReportaproblemWeb(bool _openVpn, Action _action, Action _applyAtion, ITaskRunState _taskState) + : base(_action, _applyAtion, _taskState) + { + taskState = _taskState ?? throw new Exception("任务运行状态不能是空的"); + base.openVpn = _openVpn; + iframeId = APPLEHCHelp.getIframeId().Replace("auth-", "daw-"); + } + + public bool checkDisable(string _appleId, string applePwd, string _notityKey) + { + listCookie.Add(new CookieItem + { + Key = "geo", + Value = "CN" + }); + homeLanguage = "CN-ZH"; + authsigninConfig = new AuthsigninConfig + { + Apple_Widget_Key = Apple_Widget_Key, + authUrl = authUrl, + homeLanguage = homeLanguage, + iframeId = iframeId, + redirectURI = authUrl, + refererUrl = redirectURI + }; + HttpResult result = null; + appleId = _appleId; + base.noticeKey = _notityKey; + new Dictionary().Add("X-Apple-App-Id", "1879"); + HttpResult webContent = getWebContent("https://idmsa.apple.com/IDMSWebAuth/signin?appIdKey=" + Apple_Widget_Key + "&language=" + homeLanguage, ""); + if (webContent.StatusCode == HttpStatusCode.OK) + { + string text = new Regex("iframeId\":\"([\\s\\S]*?)\"").Match(webContent.Html).Groups[1].Value.Trim().TrimEnd(','); + if (!string.IsNullOrEmpty(text)) + { + AuthsigninConfig obj = authsigninConfig; + string text3 = (iframeId = text); + obj.iframeId = text3; + } + if (webContent.Header.AllKeys.Contains("scnt")) + { + handelDic.Add("login_scnt", webContent.Header["scnt"]); + } + } + string errMsg = "未知错误"; + if (authsignin(appleId, applePwd, authsigninConfig, ref errMsg, out result)) + { + if (result != null) + { + if (result.StatusCode == HttpStatusCode.Unauthorized) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "ID 或密码不正确"); + return true; + } + if (result.StatusCode == HttpStatusCode.Forbidden) + { + RespErrorJson respErrorJson = Tools.Todejosn(result.Html); + if (respErrorJson != null && respErrorJson.serviceErrors != null && respErrorJson.serviceErrors.Length != 0) + { + string message = respErrorJson.serviceErrors[0].message; + action?.Invoke(base.noticeKey, DisplyType.xinxi, message); + return false; + } + return false; + } + if (result.StatusCode == HttpStatusCode.OK) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密码验证成功"); + string[] allKeys = result.Header.AllKeys; + foreach (string text4 in allKeys) + { + switch (text4) + { + case "X-Apple-ID-Session-Id": + case "X-Apple-ID-Account-Country": + case "scnt": + case "X-Apple-OAuth-Context": + handelDic.TryAddDic(text4, result.Header[text4]); + if (text4 == "X-Apple-ID-Account-Country") + { + action?.Invoke(base.noticeKey, DisplyType.area, AppleUtlis.GetAreaByCode(result.Header["X-Apple-ID-Account-Country"].ToString())); + } + break; + } + } + return reportaproblem(appleId); + } + if (result.StatusCode == HttpStatusCode.PreconditionFailed) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "阅读协议"); + string[] allKeys = result.Header.AllKeys; + foreach (string text5 in allKeys) + { + switch (text5) + { + case "X-Apple-Auth-Attributes": + case "X-Apple-Repair-Session-Token": + case "X-Apple-ID-Session-Id": + case "scnt": + case "X-Apple-OAuth-Context": + handelDic.TryAddDic(text5, result.Header[text5]); + if (text5 == "X-Apple-ID-Account-Country") + { + action?.Invoke(base.noticeKey, DisplyType.area, AppleUtlis.GetAreaByCode(result.Header["X-Apple-ID-Account-Country"].ToString())); + } + if (text5 == "scnt") + { + handelDic.TryAddDic("idmsa_scnt", result.Header[text5]); + } + break; + } + } + if (repair() && toDMSWebAuthSignin()) + { + return reportaproblem(appleId); + } + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "登录异常了"); + } + } + return false; + } + + private bool toDMSWebAuthSignin() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + string dicVal = handelDic.getDicVal("login_scnt", ""); + string postData = "rememberMe=false&grantCode=&iframeId=" + iframeId + "&requestUri=%2Fsignin&appIdKey=" + Apple_Widget_Key + "&language=CN-ZH&scnt=" + dicVal; + HttpResult httpResult = postWebContent("https://idmsa.apple.com/IDMSWebAuth/signin", postData, "https://idmsa.apple.com/", webHeaderCollection, "text/html,application/xhtml+xml", "application/x-www-form-urlencoded"); + if (httpResult.StatusCode != HttpStatusCode.OK && httpResult.StatusCode != HttpStatusCode.Found && httpResult.StatusCode != HttpStatusCode.SeeOther) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "登录失败:网页授权失败.."); + return false; + } + return true; + } + + private bool repair() + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "获取阅读协议"); + string text = "zh_CN_CHN"; + if (handelDic.ContainsKey("X-Apple-Locale")) + { + text = handelDic["X-Apple-Locale"]; + } + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("Upgrade-Insecure-Requests", "1"); + string apple_Widget_Key = Apple_Widget_Key; + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", apple_Widget_Key); + string uRL = "https://appleid.apple.com/widget/account/repair?trustedWidgetDomain=https%3A%2F%2Fidmsa.apple.com&widgetKey=" + apple_Widget_Key + "&rv=1&language=" + text; + HttpItem httpItem = new HttpItem + { + URL = uRL, + Method = "get", + Timeout = 120000, + ReadWriteTimeout = 30000, + UserAgent = base.userAgent, + Cookie = listCookie.toFonmtCookie(), + ContentType = "text/html;charset=UTF-8", + Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", + Referer = "https://idmsa.apple.com/appleauth/auth/signin?widgetKey=" + apple_Widget_Key + "&language=zh_CN&rv=1", + ResultType = ResultType.String, + ProtocolVersion = HttpVersion.Version11, + WebProxy = WebRequest.DefaultWebProxy + }; + httpItem.Header = webHeaderCollection; + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + if (httpReuslt.StatusCode == HttpStatusCode.OK) + { + string value = new Regex(AppSysConfig.getConfig("Regex_repair_sessionId")).Match(httpReuslt.Html).Groups[1].Value.Trim().Replace("\n", "").Replace("\r", "") + .Replace("\"", "") + .TrimStart(':') + .Trim(); + string key = "repairSessionId"; + if (!handelDic.ContainsKey(key)) + { + handelDic.TryAddDic(key, value); + } + else + { + handelDic[key] = value; + } + string[] allKeys = httpReuslt.Header.AllKeys; + foreach (string text2 in allKeys) + { + if (text2 == "X-Apple-Repair-Session-Token" || text2 == "scnt") + { + handelDic.TryAddDic(text2, httpReuslt.Header[text2]); + } + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "协议获取成功"); + return options(); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "协议获取失败"); + return false; + } + + private bool options() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("scnt", handelDic.getDicVal("scnt", "")); + webHeaderCollection.AddWebHander("X-Apple-Skip-Repair-Attributes", "[\"hsa2_enrollment\"]"); + webHeaderCollection.AddWebHander("X-Apple-OAuth-Context", handelDic.getDicVal("X-Apple-OAuth-Context", "")); + string dicVal = handelDic.getDicVal("X-Apple-Session-Token", ""); + if (string.IsNullOrEmpty(dicVal)) + { + dicVal = handelDic.getDicVal("X-Apple-Repair-Session-Token", ""); + } + webHeaderCollection.AddWebHander("X-Apple-Session-Token", dicVal); + webHeaderCollection.AddWebHander("X-Apple-I-TimeZone", "Asia/Shanghai"); + webHeaderCollection.AddWebHander("X-Apple-Repair-App-Id", "1879"); + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic.getDicVal("repairSessionId", "")); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", Apple_Widget_Key); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + string uRL = "https://appleid.apple.com/account/manage/repair/options"; + HttpItem httpItem = new HttpItem + { + URL = uRL, + Method = "get", + Timeout = 120000, + ReadWriteTimeout = 30000, + UserAgent = base.userAgent, + Cookie = listCookie.toFonmtCookie(), + ContentType = "application/json; charset=utf-8", + Accept = "application/json, text/javascript, */*; q=0.01", + Referer = "https://appleid.apple.com/", + ResultType = ResultType.String, + ProtocolVersion = HttpVersion.Version11, + WebProxy = WebRequest.DefaultWebProxy + }; + httpItem.Header = webHeaderCollection; + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + if (httpReuslt.StatusCode == HttpStatusCode.OK) + { + string[] allKeys = httpReuslt.Header.AllKeys; + foreach (string text in allKeys) + { + if (text == "X-Apple-Session-Token" || text == "scnt") + { + handelDic.TryAddDic(text, httpReuslt.Header[text]); + } + } + Dictionary dictionary = Tools.Todejosn>(httpReuslt.Html); + if (httpReuslt.Html.Contains("requiredSteps")) + { + foreach (object item in (dynamic)dictionary["requiredSteps"]) + { + if ((string)(dynamic)item == "privacy_consent" && !accept()) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "协议阅读失败#2"); + return false; + } + } + } + return complete(); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "协议获取失败#2"); + return false; + } + + private bool accept() + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在同意协议"); + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-Repair-App-Id", "1879"); + webHeaderCollection.AddWebHander("X-Apple-OAuth-Context", handelDic.getDicVal("X-Apple-OAuth-Context", "")); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.AddWebHander("scnt", handelDic["scnt"]); + webHeaderCollection.AddWebHander("X-Apple-Skip-Repair-Attributes", "[]"); + webHeaderCollection.AddWebHander("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + webHeaderCollection.AddWebHander("X-Apple-I-TimeZone", "Asia/Shanghai"); + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + string uRL = "https://appleid.apple.com/account/manage/privacy/accept"; + HttpItem httpItem = new HttpItem + { + URL = uRL, + Method = "put", + UserAgent = base.userAgent, + Cookie = listCookie.toFonmtCookie(), + ContentType = "application/json; charset=utf-8", + Accept = "application/json, text/javascript, */*; q=0.01", + Referer = "https://appleid.apple.com/", + ProtocolVersion = HttpVersion.Version11, + WebProxy = WebRequest.DefaultWebProxy + }; + httpItem.Header = webHeaderCollection; + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + if (httpReuslt.StatusCode != HttpStatusCode.OK && httpReuslt.StatusCode != HttpStatusCode.MethodNotAllowed) + { + return false; + } + string[] allKeys = httpReuslt.Header.AllKeys; + foreach (string text in allKeys) + { + if (text == "X-Apple-Session-Token" || text == "scnt") + { + handelDic.TryAddDic(text, httpReuslt.Header[text]); + } + } + return true; + } + + private bool complete() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-Locale", homeLanguage); + webHeaderCollection.AddWebHander("scnt", handelDic.getDicVal("idmsa_scnt", "")); + if (handelDic.ContainsKey("X-Apple-ID-Session-Id")) + { + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic.getDicVal("X-Apple-ID-Session-Id", "")); + } + else if (handelDic.ContainsKey("repairSessionId")) + { + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic.getDicVal("repairSessionId", "")); + } + webHeaderCollection.AddWebHander("X-Apple-App-Id", "1879"); + webHeaderCollection.AddWebHander("X-Apple-Trusted-Domain", " https://idmsa.apple.com"); + webHeaderCollection.AddWebHander("X-Apple-Repair-Session-Token", handelDic["X-Apple-Session-Token"]); + webHeaderCollection.AddWebHander("Origin", "https://idmsa.apple.com"); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", Apple_Widget_Key); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + webHeaderCollection.AddWebHander("X-Apple-Auth-Attributes", handelDic.getDicVal("X-Apple-Auth-Attributes", "")); + addOAuthHanede(webHeaderCollection, authsigninConfig); + string uRL = "https://idmsa.apple.com/appleauth/auth/repair/complete"; + HttpItem httpItem = new HttpItem + { + URL = uRL, + Method = "post", + UserAgent = base.userAgent, + Cookie = listCookie.toFonmtCookie(), + ContentType = "application/json; charset=utf-8", + Accept = "application/json, text/javascript, */*; q=0.01", + Referer = "https://idmsa.apple.com/", + ResultType = ResultType.String, + Postdata = "", + ProtocolVersion = HttpVersion.Version11, + WebProxy = WebRequest.DefaultWebProxy + }; + httpItem.Header = webHeaderCollection; + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + if (httpReuslt.StatusCode != HttpStatusCode.OK && httpReuslt.StatusCode != HttpStatusCode.NoContent) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "协议阅读失败"); + return false; + } + string[] allKeys = httpReuslt.Header.AllKeys; + foreach (string text in allKeys) + { + if (text == "X-Apple-OAuth-Grant-Code" || text == "scnt") + { + handelDic.TryAddDic(text, httpReuslt.Header[text]); + } + } + if (httpReuslt.Header.AllKeys.Contains("X-Apple-ID-Account-Country")) + { + action?.Invoke(base.noticeKey, DisplyType.area, AppleUtlis.GetAreaByCode(httpReuslt.Header["X-Apple-ID-Account-Country"].ToString())); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "协议阅读成功"); + return true; + } + + public bool reportaproblem(string appleId) + { + HttpResult webContent = getWebContent("https://reportaproblem.apple.com", "https://idmsa.apple.com/IDMSWebAuth/signin?appIdKey=6f59402f11d3e2234be5b88bf1c96e1e453a875aec205272add55157582a9f61&language=US-EN"); + if (webContent.StatusCode == HttpStatusCode.OK) + { + HttpResult webJsonContent = getWebJsonContent("https://reportaproblem.apple.com/api/login", webContent.ResponseUri); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + applyAtion?.Invoke(base.noticeKey, DisplyType.normal, "正常"); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "查询完成"); + string.IsNullOrEmpty(base.ProxyIp); + idIsNormal = true; + dataR = new Regex(AppSysConfig.getConfig("Regex_reportaproblem")).Match(webContent.Html).Groups[1].Value; + return true; + } + string token = AppleNetworkBase.GetToken(webJsonContent.Html, "messageBodyLocKey\":\"", "\""); + if (!string.IsNullOrEmpty(token)) + { + if (AppSysConfig.getConfig("MessageBodyLocKey").Split(',').Contains(token)) + { + applyAtion?.Invoke(base.noticeKey, DisplyType.forbidden, "禁用"); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "查询完成"); + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,错误码:" + token); + return false; + } + applyAtion?.Invoke(base.noticeKey, DisplyType.normal, "正常"); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "查询完成"); + return true; + } + if (webContent.StatusCode != HttpStatusCode.Found && webContent.StatusCode != HttpStatusCode.MovedPermanently) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "未知异常,请重新检测"); + return false; + } + if (webContent.RedirectUrl.ToLower().Contains("accountdisabled")) + { + applyAtion?.Invoke(base.noticeKey, DisplyType.forbidden, "禁用"); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "查询完成"); + return true; + } + if (webContent.RedirectUrl.ToLower().Contains("https://reportaproblem.apple.com")) + { + applyAtion?.Invoke(base.noticeKey, DisplyType.normal, "正常"); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "查询完成"); + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "未知异常,请重新检测"); + return false; + } + } +} diff --git a/AppleBatch_June.AppleWebServace/AppleShopWeb.cs b/AppleBatch_June.AppleWebServace/AppleShopWeb.cs new file mode 100644 index 0000000..0199be2 --- /dev/null +++ b/AppleBatch_June.AppleWebServace/AppleShopWeb.cs @@ -0,0 +1,1206 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Reflection; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Web; +using AppleBatch_June.Domain; +using AppleBatch_June.ExecuteTasks; +using AppleBatch_June.Model; +using AppleBatch_June.Utils; +using DotNet.Utilities; + +namespace AppleBatch_June.AppleWebServace +{ + public class AppleShopWeb : AppleWebBase + { + protected string Apple_Widget_Key = "a797929d224abb1cc663bb187bbcd02f7172ca3a84df470380522a7c6092118b"; + + private AppleAcount acount; + + public string homeLanguage = "zh_CN"; + + private AuthsigninConfig authsigninConfig; + + private string initAreaCode = ""; + + private static readonly object lockHas2hObj = new object(); + + protected string iframeId { get; set; } + + public string DomainId { get; set; } = "21"; + + + public string appleId { get; set; } + + public string redirectURI { get; set; } = ""; + + + public string authUrl { get; set; } = "https://www.apple.com/"; + + + public string Apple_ID_Account_Country { get; set; } = ""; + + + public string signInURL { get; set; } = string.Empty; + + + public AppleShopWeb(bool _openVpn, string _notifiKey, Action _action, Action _applyAtion, ITaskRunState _taskState) + : base(_action, _applyAtion, _taskState) + { + base.noticeKey = _notifiKey; + taskState = _taskState ?? throw new Exception("任务运行状态不能是空的"); + base.openVpn = _openVpn; + iframeId = APPLEHCHelp.getIframeId(); + authsigninConfig = new AuthsigninConfig + { + Apple_Widget_Key = Apple_Widget_Key, + authUrl = authUrl, + homeLanguage = homeLanguage, + iframeId = iframeId, + redirectURI = authUrl, + refererUrl = "https://idmsa.apple.com/" + }; + } + + public bool InitAreaCode(AppleAcount _acount) + { + if (string.IsNullOrEmpty(base.ProxyIp)) + { + base.ProxyIp = ProxyAccountCache.getProxyAccountIP(acount.appleId); + } + if (string.IsNullOrEmpty(initAreaCode)) + { + listCookie.Add(new CookieItem + { + Key = "geo", + Value = "CN" + }); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在获取ID国家...."); + string errMsg = ""; + HttpResult result = null; + if (authsignin(acount.appleId, acount.applePwd, authsigninConfig, ref errMsg, out result)) + { + string[] allKeys; + if (result.StatusCode == HttpStatusCode.PreconditionFailed) + { + allKeys = result.Header.AllKeys; + foreach (string text in allKeys) + { + switch (text) + { + case "X-Apple-Auth-Attributes": + case "X-Apple-Repair-Session-Token": + case "X-Apple-ID-Session-Id": + case "scnt": + case "X-Apple-OAuth-Context": + handelDic.TryAddDic(text, result.Header[text]); + break; + } + if (text == "scnt") + { + handelDic.TryAddDic("scnt2", result.Header[text]); + } + } + baseRepair(acount.appleId, authsigninConfig); + } + if ((result.StatusCode == HttpStatusCode.PreconditionFailed || result.StatusCode == HttpStatusCode.Conflict || result.StatusCode == HttpStatusCode.OK) && result.Header.AllKeys.Contains("X-Apple-ID-Account-Country")) + { + Apple_ID_Account_Country = result.Header["X-Apple-ID-Account-Country"].ToString(); + action?.Invoke(base.noticeKey, DisplyType.area, AppleUtlis.GetAreaByCode(Apple_ID_Account_Country)); + } + string apple_ID_Account_Country = Apple_ID_Account_Country; + initAreaCode = AppleUtlis.GetAreaCodeByCode(apple_ID_Account_Country); + allKeys = AppSysConfig.getConfig("ShopInitAreaCodeConver").Split(','); + for (int i = 0; i < allKeys.Length; i++) + { + string[] array = allKeys[i].Split('='); + if (array.Length >= 2 && initAreaCode.ToLower().Trim() == array[0].ToLower().Trim()) + { + initAreaCode = array[1].Trim(); + } + } + if (AppSysConfig.getConfig("ShopBanalNotSupportedCountries").Split(',').Contains(apple_ID_Account_Country)) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "该 ID 国家不支持"); + return false; + } + if (result.Html.Contains("hsa2")) + { + _acount.isHsa2 = true; + } + return true; + } + return false; + } + return true; + } + + private string NowUCTFormat() + { + return DateTime.Now.ToString("yyyy/MM/dd ttHH:mm:ss"); + } + + public string getDate() + { + return ((DateTime.Now.ToUniversalTime().Ticks - 621355968000000000L) / 10000L).ToString(); + } + + public bool WebOrderQuery(string urlLink, bool agent = false) + { + try + { + HttpItem item = new HttpItem + { + URL = urlLink, + Method = "GET", + UserAgent = base.userAgent, + Cookie = listCookie.toFonmtCookie(), + Accept = "text/html", + ProtocolVersion = HttpVersion.Version11, + KeepAlive = true, + ResultType = ResultType.String, + WebProxy = WebRequest.DefaultWebProxy, + Allowautoredirect = true + }; + addHander(item); + HttpResult httpReuslt = GetHttpReuslt(item); + if (httpReuslt.StatusCode == HttpStatusCode.OK) + { + string value = new Regex(AppSysConfig.getConfig("WebOrderScriptRegex")).Match(httpReuslt.Html).Groups[1].Value; + if (!string.IsNullOrEmpty(value)) + { + signInURL = new Regex("signInURL\":\"([\\s\\S]*?)\"").Match(value).Groups[1].Value; + string config = AppSysConfig.getConfig("WebOrderInfoRegexs"); + string value2 = ""; + string value3 = ""; + string value4 = ""; + string value5 = ""; + string value6 = ""; + string text = ""; + string text2 = ""; + string text3 = ""; + string value7 = ""; + string value8 = ""; + string[] array = config.Split('|'); + for (int i = 0; i < array.Length; i++) + { + string[] array2 = array[i].Split('='); + if (array2.Length != 2) + { + continue; + } + string text4 = array2[0]; + string pattern = array2[1]; + string input = value; + if ((text4 == "firstName" || text4 == "lastName") && value.IndexOf("/abs.Shipping-address") > 0) + { + input = value.Substring(value.IndexOf("/abs.Shipping-address")); + } + string value9 = new Regex(pattern).Match(input).Groups[1].Value; + if (!string.IsNullOrEmpty(value9)) + { + switch (text4) + { + case "trackingURLMap": + text3 = value9; + break; + case "currentStatus": + value2 = value9; + break; + case "lastName": + text2 = value9; + break; + case "orderPlacedDate": + value6 = value9; + break; + case "signInURL": + signInURL = value9; + break; + case "firstName": + text = value9; + break; + case "orderNumber": + value3 = value9; + break; + case "trackingType": + value7 = value9; + break; + case "deliveryDate": + value5 = value9; + break; + case "trackingOrder": + value8 = value9; + break; + case "productName": + value4 = value9; + break; + } + } + } + if (string.IsNullOrEmpty(value8) && !string.IsNullOrEmpty(text3)) + { + string[] array3 = text3.Split(':'); + value8 = array3[0].Replace("\"", ""); + if (array3.Length >= 2 && text3.Contains("http")) + { + string input2 = text3.Substring(text3.IndexOf("http")).Replace("\"", ""); + value7 = new Regex("\\.([\\s\\S]*?)\\.").Match(input2).Groups[1].Value.ToUpper(); + } + } + Dictionary dictionary = new Dictionary(); + dictionary.Add("currentStatus", value2); + dictionary.Add("orderNumber", value3); + dictionary.Add("productName", value4); + dictionary.Add("deliveryDate", value5); + dictionary.Add("orderPlacedDate", value6); + dictionary.Add("billName", text + " " + text2); + dictionary.Add("trackingType", value7); + dictionary.Add("trackingOrder", value8); + action?.Invoke(base.noticeKey, DisplyType.area, Tools.Toenjson(dictionary)); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "查询完成"); + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败:数据获取失败,请确认链接是否正确。"); + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败:订单信息获取失败[" + httpReuslt.StatusCode.ToString() + "]."); + return false; + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + action?.Invoke(base.noticeKey, DisplyType.xinxi, ex.Message); + } + return false; + } + + public bool LoginWebOrderQuery(AppleAcount _acount, string refererUrl) + { + HttpResult webContent = getWebContent(signInURL, refererUrl); + HttpResult loginResult; + if (webContent.StatusCode != HttpStatusCode.Found && webContent.StatusCode != HttpStatusCode.SeeOther) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "登录加载失败#2."); + } + else if (ShopLogin(_acount, webContent.RedirectUrl, refererUrl, out loginResult)) + { + dynamic val = Tools.Todejosn(loginResult.Html); + string url = val["head"]["data"]["url"]; + HttpResult webContent2 = getWebContent(url, webContent.RedirectUrl); + if (webContent2.StatusCode == HttpStatusCode.OK) + { + string value = new Regex(AppSysConfig.getConfig("LoginWebOrderScriptRegex")).Match(webContent2.Html).Groups[1].Value; + if (!string.IsNullOrEmpty(value)) + { + string config = AppSysConfig.getConfig("LoginWebOrderInfoRegexs"); + string text = ""; + string[] array = config.Split('|'); + for (int i = 0; i < array.Length; i++) + { + string[] array2 = array[i].Split('='); + if (array2.Length != 2) + { + continue; + } + string text2 = array2[0]; + string pattern = array2[1]; + string input = value; + string value2 = new Regex(pattern).Match(input).Groups[1].Value; + if (string.IsNullOrEmpty(value2)) + { + continue; + } + if (text2.Contains("_getUrl") && value2.ToLower().StartsWith("http")) + { + HttpResult webContent3 = getWebContent(value2, webContent.RedirectUrl); + if (webContent3.StatusCode != HttpStatusCode.OK) + { + continue; + } + string[] array3 = AppSysConfig.getConfig("LoginWebOrderInfoGetUrlRegexs_" + text2).Split('|'); + for (int j = 0; j < array3.Length; j++) + { + string[] array4 = array3[j].Split('='); + if (array4.Length == 2) + { + string text3 = array4[0]; + string value3 = new Regex(array4[1]).Match(webContent3.Html).Groups[1].Value; + if (!string.IsNullOrEmpty(value3)) + { + text = text + text3 + ":" + value3 + " | "; + } + } + } + } + else if (!string.IsNullOrEmpty(value2)) + { + text = text + text2 + ":" + value2 + " | "; + } + } + text = text.Trim().TrimEnd('|'); + action?.Invoke(base.noticeKey, DisplyType.xiaofeiriqiNow, text); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "查询完成"); + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败:订单数据获取失败。"); + return false; + } + if (webContent2.StatusCode == HttpStatusCode.SeeOther) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败:这个Apple id与订单不匹配。"); + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "未知异常:" + (int)webContent2.StatusCode); + } + return false; + } + + public bool ShopLogin(AppleAcount _acount, string locationUrl, string refererUrl, out HttpResult loginResult, bool agent = false) + { + loginResult = null; + try + { + string text = locationUrl; + HttpResult webContent = getWebContent(locationUrl, refererUrl); + if (webContent.StatusCode == HttpStatusCode.Found || webContent.StatusCode == HttpStatusCode.SeeOther) + { + getWebContent(webContent.RedirectUrl, text); + text = webContent.RedirectUrl; + } + string value = new Regex("x-aos-stk\":\"([\\s\\S]*?)\"").Match(webContent.Html).Groups[1].Value; + if (string.IsNullOrEmpty(value)) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "登录加载失败."); + return false; + } + string refererUrl2 = text.Substring(0, text.IndexOf("/shop/")); + new Regex("apple.com/([\\s\\S]*?)shop").Match(text).Groups[1].Value.Trim(); + authsigninConfig.redirectURI = refererUrl2; + string errMsg = ""; + if (authsignin(_acount.appleId, _acount.applePwd, authsigninConfig, ref errMsg, out var _)) + { + if (_acount.isHsa2) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败:需要双重验证码."); + return false; + } + string postData = "deviceID=TF1%3B015%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3BMozilla%3BNetscape%3B5.0%2520%2528Windows%2520NT%252010.0%253B%2520Win64%253B%2520x64%2529%2520AppleWebKit%2F537.36%2520%2528KHTML%252C%2520like%2520Gecko%2529%2520Chrome%2F86.0.4240.183%2520Safari%2F537.36%3B20030107%3Bundefined%3Btrue%3B%3Btrue%3BWin32%3Bundefined%3BMozilla%2F5.0%2520%2528Windows%2520NT%252010.0%253B%2520Win64%253B%2520x64%2529%2520AppleWebKit%2F537.36%2520%2528KHTML%252C%2520like%2520Gecko%2529%2520Chrome%2F86.0.4240.183%2520Safari%2F537.36%3Bzh-CN%3Bundefined%3Bsecure2.store.apple.com%3Bundefined%3Bundefined%3Bundefined%3Bundefined%3Bfalse%3Bfalse%3B" + getDate() + "%3B8%3B2005%2F6%2F7%2520%25u4E0B%25u53489%253A33%253A44%3B1920%3B1080%3B%3B%3B%3B%3B%3B%3B%3B-480%3B-480%3B" + HttpUtility.UrlEncode(HttpUtility.UrlEncode(NowUCTFormat())) + "%3B24%3B1920%3B1040%3B0%3B0%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B25%3B&&grantCode="; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection + { + { "syntax", "graviton" }, + { "X-Requested-With", "Fetch" }, + { "modelVersion", "v2" } + }; + webHeaderCollection.Add("x-aos-stk", value); + webHeaderCollection.Add("x-aos-model-page", "signInPage"); + string text2 = text.Replace("signIn", "signIn/idms/authx"); + if (text.Contains("signIn")) + { + Uri uri = new Uri(text); + string oldValue = uri.AbsolutePath.Substring(uri.AbsolutePath.IndexOf("signIn")); + text2 = text.Replace(oldValue, "signIn/idms/authx"); + } + HttpResult httpResult = postWebContent(text2 + "&up=true", postData, text, webHeaderCollection, "application/json, text/javascript, */*; q=0.01", "application/x-www-form-urlencoded"); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + if (httpResult.Html.Contains("shop/signIn")) + { + if (!agent) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "商城登录失败..重新登录"); + return ShopLogin(acount, locationUrl, refererUrl2, out loginResult, agent: true); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "商城登录失败..请重试"); + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "登录成功"); + loginResult = httpResult; + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "商城页面登录失败"); + if (!agent) + { + return ShopLogin(acount, locationUrl, refererUrl2, out loginResult, agent: true); + } + } + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + action?.Invoke(base.noticeKey, DisplyType.xinxi, ex.Message); + } + return false; + } + + public bool AppleQueryStoreBalance(AppleAcount _acount, Func actGetCode, bool agent = false) + { + acount = _acount; + appleId = acount.appleId; + string errMsg = ""; + HttpResult result = null; + if (!InitAreaCode(_acount)) + { + return false; + } + if (actGetCode == null && _acount.isHsa2) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败:需要双重验证码."); + return false; + } + string text = initAreaCode; + if (string.IsNullOrEmpty(base.ProxyIp)) + { + base.ProxyIp = ProxyAccountCache.getProxyAccountIP(acount.appleId); + } + listCookie.Clear(); + handelDic.Clear(); + iframeId = APPLEHCHelp.getIframeId(); + authsigninConfig.iframeId = iframeId; + listCookie.Clear(); + handelDic.Clear(); + try + { + text = ((!(text == "us")) ? (text + "/") : ""); + string text2 = "https://www.apple.com/" + text + "shop/"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection + { + { "Sec-Fetch-Site", "same-origin" }, + { "Sec-Fetch-Mode", "navigate" }, + { "Sec-Fetch-Dest", "document" }, + { "Sec-Fetch-User", "?1" } + }; + webHeaderCollection.Add("X-Apple-Frame-Id", iframeId); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + HttpResult webContent = getWebContent(text2 + "watch/bands", text2 + "watch/bands", webHeaderCollection); + if (webContent.StatusCode == HttpStatusCode.MovedPermanently) + { + text = new Regex("apple.com/([\\s\\S]*?)shop").Match(webContent.RedirectUrl).Groups[1].Value.Trim(); + text2 = "https://www.apple.com/" + text + "shop/"; + webContent = getWebContent(webContent.RedirectUrl, text2 + "watch/bands", webHeaderCollection); + } + if (webContent.Html.Contains("document.cookie")) + { + string cookies = new Regex("document.cookie([\\s\\S]*?)path=").Match(webContent.Html).Groups[1].Value.Trim().TrimStart('=').Trim() + .TrimStart('"') + .TrimEnd(';'); + addCookle(cookies); + } + AppSysConfig.getConfig("partNumberRegex"); + string pattern = "\"partNumber\":\"([\\s\\S]*?)\""; + int num = Tools.ToInt(AppSysConfig.getConfig("partNumberStartIndex"), 3); + int num2 = 0; + string text3 = ""; + string text4 = ""; + string text5 = ""; + do + { + if (new Regex(pattern).Matches(webContent.Html).Count > num) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "加载商品信息..." + (num2 + 1) + ".."); + text4 = new Regex(pattern).Matches(webContent.Html)[num].Groups[1].Value.Trim(); + AppSysConfig.getConfig("partNumberRegex"); + text3 = new Regex("product/" + text4 + "([\\s\\S]*?)\"").Match(webContent.Html).Groups[0].Value.TrimEnd('"'); + if (!string.IsNullOrEmpty(text3)) + { + webHeaderCollection["X-Apple-I-FD-Client-Info"] = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + HttpResult webContent2 = getWebContent(text2 + text3, text2 + "watch/bands", webHeaderCollection); + text5 = new Regex("fnode\",\"attrValue\":\"([\\s\\S]*?)\"").Match(webContent2.Html).Groups[1].Value.Trim(); + if (!webContent2.Html.Contains("add-to-cart\",\"disabled\":true")) + { + break; + } + } + num += 3; + num2++; + continue; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "加载商品失败."); + return false; + } + while (num2 < 3); + num2 = 0; + do + { + HttpResult webContent3 = getWebContent(text2 + "beacon/atb", text2 + text3, webHeaderCollection); + if (webContent3.StatusCode != HttpStatusCode.MovedPermanently) + { + if (listCookie.Where((CookieItem c) => c.Key == "as_atb").FirstOrDefault() != null) + { + break; + } + } + else + { + text2 = webContent3.RedirectUrl.Replace("beacon/atb", ""); + } + num2++; + } + while (num2 <= 3); + string text6 = Tools.ToUrlEncode(text4); + CookieItem cookieItem = listCookie.Where((CookieItem c) => c.Key == "as_atb").FirstOrDefault(); + string text7 = ((cookieItem != null) ? cookieItem.Value.Split('|')[2] : null); + string postData = "product=" + text6 + "&fnode=" + text5 + "&atbtoken=" + text7; + webHeaderCollection["X-Apple-I-FD-Client-Info"] = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + _ = postWebContent(text2 + "pdpAddToBag/" + text4, postData, text2 + text3, webHeaderCollection, "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", "application/x-www-form-urlencoded").StatusCode; + action?.Invoke(base.noticeKey, DisplyType.xinxi, "加载登录页面."); + HttpResult webContent4 = getWebContent(text2 + "bag", text2 + "bag"); + bool flag2; + object obj4; + if (webContent4.StatusCode == HttpStatusCode.OK) + { + string value = new Regex("x-aos-stk\":\"([\\s\\S]*?)\"").Match(webContent4.Html).Groups[1].Value; + string value2 = new Regex("cart-items-item-([\\s\\S]*?)\"").Match(webContent4.Html).Groups[1].Value; + WebHeaderCollection webHeaderCollection2 = new WebHeaderCollection + { + { "syntax", "graviton" }, + { "X-Requested-With", "Fetch" }, + { "modelVersion", "v2" } + }; + webHeaderCollection2.Add("x-aos-stk", value); + webHeaderCollection2.Add("x-aos-model-page", "cart"); + string postData2 = "shoppingCart.recommendations.recommendedItem.part=&shoppingCart.items.item-" + value2 + ".isIntentToGift=false&shoppingCart.items.item-" + value2 + ".itemQuantity.quantity=1&shoppingCart.locationConsent.locationConsent=false&shoppingCart.summary.promoCode.promoCode=&shoppingCart.actions.fcscounter=&shoppingCart.actions.fcsdata="; + HttpResult httpResult = postWebContent(text2 + "bagx/checkout_now?_a=checkout&_m=shoppingCart.actions", postData2, text2 + "bag", webHeaderCollection2, "application/json, text/javascript, */*; q=0.01", "application/x-www-form-urlencoded"); + string text8 = new Regex("url\":\"([\\s\\S]*?)\"").Match(httpResult.Html).Groups[1].Value; + if (!text8.StartsWith("http")) + { + text8 = new Regex("signInUrl\":\"([\\s\\S]*?)\"").Match(httpResult.Html).Groups[1].Value; + } + HttpResult webContent5 = getWebContent(text8, text2 + "bag"); + if (webContent5.StatusCode == HttpStatusCode.Found || webContent5.StatusCode == HttpStatusCode.SeeOther) + { + getWebContent(webContent5.RedirectUrl, text8); + text8 = webContent5.RedirectUrl; + } + redirectURI = text8.Substring(0, text8.IndexOf("/shop/")); + string.IsNullOrEmpty(redirectURI); + text = new Regex("apple.com/([\\s\\S]*?)shop").Match(text8).Groups[1].Value.Trim(); + authsigninConfig.redirectURI = redirectURI; + if (authsignin(acount.appleId, acount.applePwd, authsigninConfig, ref errMsg, out result)) + { + if (_acount.isHsa2) + { + if (actGetCode == null) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败:需要输入双重验证码."); + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "等待发送验证码..."); + if (!appleauthHashAuth(acount, actGetCode)) + { + return false; + } + } + string postData3 = "deviceID=TF1%3B015%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3BMozilla%3BNetscape%3B5.0%2520%2528Windows%2520NT%252010.0%253B%2520Win64%253B%2520x64%2529%2520AppleWebKit%2F537.36%2520%2528KHTML%252C%2520like%2520Gecko%2529%2520Chrome%2F86.0.4240.183%2520Safari%2F537.36%3B20030107%3Bundefined%3Btrue%3B%3Btrue%3BWin32%3Bundefined%3BMozilla%2F5.0%2520%2528Windows%2520NT%252010.0%253B%2520Win64%253B%2520x64%2529%2520AppleWebKit%2F537.36%2520%2528KHTML%252C%2520like%2520Gecko%2529%2520Chrome%2F86.0.4240.183%2520Safari%2F537.36%3Bzh-CN%3Bundefined%3Bsecure2.store.apple.com%3Bundefined%3Bundefined%3Bundefined%3Bundefined%3Bfalse%3Bfalse%3B" + getDate() + "%3B8%3B2005%2F6%2F7%2520%25u4E0B%25u53489%253A33%253A44%3B1920%3B1080%3B%3B%3B%3B%3B%3B%3B%3B-480%3B-480%3B" + HttpUtility.UrlEncode(HttpUtility.UrlEncode(NowUCTFormat())) + "%3B24%3B1920%3B1040%3B0%3B0%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B%3B25%3B&&grantCode="; + WebHeaderCollection webHeaderCollection3 = new WebHeaderCollection + { + { "syntax", "graviton" }, + { "X-Requested-With", "Fetch" }, + { "modelVersion", "v2" } + }; + webHeaderCollection3.Add("x-aos-stk", value); + webHeaderCollection3.Add("x-aos-model-page", "signInPage"); + string text9 = text8.Replace("signIn", "signIn/idms/authx"); + HttpResult httpResult2 = postWebContent(text9 + "&up=true", postData3, text8, webHeaderCollection3, "application/json, text/javascript, */*; q=0.01", "application/x-www-form-urlencoded"); + if (httpResult2.StatusCode == HttpStatusCode.OK) + { + if (httpResult2.Html.Contains("shop/signIn")) + { + if (!agent) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "商城登录失败..重新登录"); + return AppleQueryStoreBalance(acount, actGetCode, agent: true); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "商城登录失败..请重试"); + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "登录成功"); + dynamic val = Tools.Todejosn(httpResult2.Html); + string url = val["head"]["data"]["url"]; + try + { + string text10 = val["head"]["data"]["args"]["pltn"]; + postData2 = "pltn=" + text10; + } + catch (Exception) + { + postData2 = "{}"; + } + WebHeaderCollection webHeader = new WebHeaderCollection + { + { "Sec-Fetch-Site", "same-origin" }, + { "Upgrade-Insecure-Requests", "1" }, + { "Sec-Fetch-Mode", "navigate" }, + { "Sec-Fetch-Dest", "document" }, + { "Sec-Fetch-User", "?1" } + }; + HttpResult httpResult3 = postWebContent(url, postData2, text8, webHeader, "application/json, text/javascript, */*; q=0.01", "application/x-www-form-urlencoded"); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在查询余额"); + if (httpResult3.StatusCode != HttpStatusCode.Found && webContent5.StatusCode != HttpStatusCode.SeeOther) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "查询失败"); + if (!agent) + { + return AppleQueryStoreBalance(acount, actGetCode, agent: true); + } + } + else + { + HttpResult webContent6 = getWebContent(httpResult3.RedirectUrl, text8); + if (webContent6.StatusCode == HttpStatusCode.OK) + { + string text11 = webContent6.Html; + value = new Regex("x-aos-stk\":\"([\\s\\S]*?)\"").Match(webContent6.Html).Groups[1].Value; + WebHeaderCollection webHeaderCollection4 = new WebHeaderCollection + { + { "Sec-Fetch-Site", "same-origin" }, + { "Upgrade-Insecure-Requests", "1" }, + { "Sec-Fetch-Mode", "cors" }, + { "Sec-Fetch-Dest", "empty" }, + { "syntax", "graviton" }, + { "X-Requested-With", "Fetch" }, + { "modelVersion", "v2" } + }; + webHeaderCollection4.Add("x-aos-stk", value); + webHeaderCollection4.Add("x-aos-model-page", "checkoutPage"); + string value3 = new Regex("\"selectShippingOption\":\"([\\s\\S]*?)\"").Match(text11).Groups[1].Value.Trim(); + NationalList nationalList = (from c in new NationalData().getMation() + where c.payment?.billingAddress?.countryCode == Apple_ID_Account_Country + select c).FirstOrDefault(); + if (string.IsNullOrEmpty(value3)) + { + text11 = SelectShippingOptionNullData(text11, nationalList, redirectURI, webHeaderCollection4); + } + value3 = new Regex("\"selectShippingOption\":\"([\\s\\S]*?)\"").Match(text11).Groups[1].Value.Trim(); + if (string.IsNullOrEmpty(value3)) + { + value3 = "E2"; + } + postData2 = "checkout.fulfillment.deliveryTab.delivery.shipmentGroups.shipmentGroup-1.shipmentOptionsGroups.shipmentOptionsGroup-1.shippingOptions.selectShippingOption=" + value3 + "&checkout.fulfillment.fulfillmentOptions.selectFulfillmentLocation=HOME"; + HttpResult httpResult4 = postWebContent(redirectURI + "/shop/checkoutx?_a=continueFromFulfillmentToShipping&_m=checkout.fulfillment", postData2, redirectURI + "/shop/checkout?_s=Shipping-init", webHeaderCollection4, "application/json, text/javascript, *; q=0.01", "application/x-www-form-urlencoded"); + if (nationalList != null) + { + postData2 = "checkout.shipping.addressContactEmail.address.emailAddress=" + Tools.ToUrlEncode(acount.appleId) + "&checkout.shipping.addressContactPhone.address.fullDaytimePhone=(334)%20334-4334&checkout.shipping.addressNotification.address.emailAddress=&checkout.shipping.addressSelector.selectAddress=newAddr&checkout.shipping.addressSelector.newAddress.saveToAddressBook=true&checkout.shipping.addressSelector.newAddress.address.street2=&checkout.shipping.addressSelector.newAddress.address.lastName=wu&checkout.shipping.addressSelector.newAddress.address.firstName=wang&checkout.shipping.addressSelector.newAddress.address.companyName=&checkout.shipping.addressSelector.newAddress.address.street=109%23&checkout.shipping.addressSelector.newAddress.address.isBusinessAddress=false&checkout.shipping.addressSelector.newAddress.address.zipLookup.postalCode=70068-2260&checkout.shipping.addressSelector.newAddress.address.zipLookup.zipLookupCityState=La%20Place%2C%20LA&checkout.shipping.addressSelector.newAddress.address.zipLookup.countryCode=US"; + string value4 = new Regex("/abs.Address([\\s\\S]*?)}}}},").Match(httpResult4.Html).Groups[1].Value; + List list = new List(); + string text12 = "checkout.shipping.addressSelector.newAddress.address"; + if (!string.IsNullOrEmpty(value4)) + { + foreach (Match item in new Regex("\"name\":\"([\\s\\S]*?)\"").Matches(value4)) + { + string value5 = item.Groups[1].Value; + if (!string.IsNullOrEmpty(value5)) + { + list.Add(value5); + } + if (list.Count > 15) + { + break; + } + } + string value6 = new Regex("\"id\":\"([\\s\\S]*?)\"").Match(value4).Groups[1].Value; + if (!string.IsNullOrEmpty(value6)) + { + text12 = value6.Replace("-", ".") + ".address"; + } + } + if (string.IsNullOrEmpty(nationalList.payment.billingAddress.line2)) + { + nationalList.payment.billingAddress.line2 = "aabbcc"; + } + StringBuilder stringBuilder = new StringBuilder(); + if (string.IsNullOrEmpty(nationalList.payment.phoneNumber.areaCode)) + { + stringBuilder.Append("checkout.shipping.addressContactPhone.address.fullDaytimePhone=" + Tools.ToUrlEncode(nationalList.payment.phoneNumber.number)); + } + else + { + stringBuilder.Append("checkout.shipping.addressContactPhone.address.daytimePhoneAreaCode=" + Tools.ToUrlEncode(nationalList.payment.phoneNumber.areaCode)); + stringBuilder.Append("&checkout.shipping.addressContactPhone.address.daytimePhone=" + Tools.ToUrlEncode(nationalList.payment.phoneNumber.number)); + stringBuilder.Append("&checkout.shipping.addressContactPhone.address.isDaytimePhoneSelected=true"); + } + stringBuilder.Append("&checkout.shipping.addressNotification.address.emailAddress="); + stringBuilder.Append("&checkout.shipping.addressSelector.selectAddress=newAddr"); + stringBuilder.Append("&checkout.shipping.addressSelector.newAddress.address.street2=" + Tools.ToUrlEncode(nationalList.payment.billingAddress.line2)); + stringBuilder.Append("&checkout.shipping.addressSelector.newAddress.address.lastName=" + Tools.ToUrlEncode(nationalList.payment.ownerName.lastName)); + stringBuilder.Append("&checkout.shipping.addressSelector.newAddress.address.firstName=" + Tools.ToUrlEncode(nationalList.payment.ownerName.firstName)); + stringBuilder.Append("&checkout.shipping.addressSelector.newAddress.address.companyName="); + stringBuilder.Append("&checkout.shipping.addressSelector.newAddress.address.street=" + Tools.ToUrlEncode(nationalList.payment.billingAddress.line1)); + stringBuilder.Append("&checkout.shipping.addressSelector.newAddress.address.isBusinessAddress=false"); + if (list.Contains("state")) + { + stringBuilder.Append("&" + text12 + ".state=" + Tools.ToUrlEncode(nationalList.payment.billingAddress.stateProvinceName)); + } + if (list.Contains("postalCode")) + { + stringBuilder.Append("&" + text12 + ".postalCode=" + Tools.ToUrlEncode(nationalList.payment.billingAddress.postalCode)); + } + if (list.Contains("city")) + { + stringBuilder.Append("&" + text12 + ".city=" + Tools.ToUrlEncode(nationalList.payment.billingAddress.city)); + } + if (httpResult4.Html.Contains("checkout-shipping-addressSelector-newAddress-cityTypeAhead")) + { + stringBuilder.Append("&checkout.shipping.addressSelector.newAddress.address.cityTypeAhead.city=" + Tools.ToUrlEncode(nationalList.payment.billingAddress.stateProvinceName)); + } + if (httpResult4.Html.Contains("zipLookup")) + { + if (Apple_ID_Account_Country == "USA") + { + text = "US"; + } + stringBuilder.Append("&checkout.shipping.addressSelector.newAddress.address.zipLookup.city=" + Tools.ToUrlEncode(nationalList.payment.billingAddress.stateProvinceName)); + stringBuilder.Append("&checkout.shipping.addressSelector.newAddress.address.zipLookup.state=" + Tools.ToUrlEncode(nationalList.payment.billingAddress.stateProvinceName)); + stringBuilder.Append("&checkout.shipping.addressSelector.newAddress.address.zipLookup.postalCode=" + Tools.ToUrlEncode(nationalList.payment.billingAddress.postalCode)); + stringBuilder.Append("&checkout.shipping.addressSelector.newAddress.address.zipLookup.countryCode=" + text.TrimEnd('/').ToUpper()); + } + string[] array = GetAdditionaFieldsn(Apple_ID_Account_Country).Split('&'); + foreach (string text13 in array) + { + if (string.IsNullOrEmpty(text13)) + { + continue; + } + string value7 = "&" + text13; + bool flag = false; + string[] array2 = stringBuilder.ToString().Split('&'); + foreach (string text14 in array2) + { + if (text14.StartsWith(text13.Split('=')[0])) + { + stringBuilder.Replace(text14, text13); + flag = true; + break; + } + } + if (!flag) + { + stringBuilder.Append(value7); + } + } + postData2 = stringBuilder.ToString(); + } + HttpResult httpResult5 = postWebContent(redirectURI + "/shop/checkoutx?_a=continueFromShippingToBilling&_m=checkout.shipping", postData2, redirectURI + "/shop/checkout?_s=Shipping-init", webHeaderCollection4, "application/json, text/javascript, *; q=0.01", "application/x-www-form-urlencoded"); + string config = AppSysConfig.getConfig("ContinueWithSelectedAddressKeyWord"); + if (!httpResult5.Html.Contains(config) && !httpResult5.Html.Contains("availableAppleBalance")) + { + postData2 = "checkout.shipping.addressContactPhone.address.isDaytimePhoneSelected=true&checkout.shipping.addressNotification.address.emailAddress=&checkout.shipping.addressSelector.selectAddress=address-0"; + string additionaFieldsn = GetAdditionaFieldsn(Apple_ID_Account_Country); + if (!string.IsNullOrEmpty(additionaFieldsn)) + { + string[] array = additionaFieldsn.Split('&'); + foreach (string text15 in array) + { + postData2 = postData2 + "&" + text15; + } + } + httpResult5 = postWebContent(redirectURI + "/shop/checkoutx?_a=continueFromShippingToBilling&_m=checkout.shipping", postData2, redirectURI + "/shop/checkout?_s=Shipping-init", webHeaderCollection4, "application/json, text/javascript, *; q=0.01", "application/x-www-form-urlencoded"); + } + postData2 = ""; + string text16 = new Regex(AppSysConfig.getConfig("ContinueWithSelectedAddressRegex")).Match(httpResult5.Html).Groups[1].Value.Trim(); + HttpResult httpResult6 = postWebContent(string.Concat(str1: (!string.IsNullOrEmpty(text16)) ? text16.Replace(text, "") : "/shop/checkoutx?_a=continueWithSelected&_m=checkout.shipping.addressVerification.selectedAddress", str0: redirectURI), postData2, redirectURI + "/shop/checkout?_s=Shipping-init", webHeaderCollection4, "application/json, text/javascript, */*; q=0.01", "application/x-www-form-urlencoded"); + if (httpResult6.StatusCode == HttpStatusCode.OK) + { + flag2 = false; + ShopBillModel shopBillModel = Tools.Todejosn(httpResult6.Html); + string text17 = shopBillModel?.body?.checkout?.billing?.billingOptions?.selectedBillingOptions?.appleBalance?.appleBalanceInput?.d?.availableAppleBalance; + if (!string.IsNullOrEmpty(text17)) + { + Action obj2 = action; + if (obj2 == null) + { + if (shopBillModel == null) + { + goto IL_1877; + } + } + else + { + obj2(base.noticeKey, DisplyType.balance, text17); + if (shopBillModel == null) + { + goto IL_1877; + } + } + } + else + { + Action obj3 = action; + if (obj3 == null) + { + if (shopBillModel == null) + { + goto IL_1877; + } + } + else + { + obj3(base.noticeKey, DisplyType.balance, ""); + if (shopBillModel == null) + { + goto IL_1877; + } + } + } + obj4 = shopBillModel.body?.checkout?.billing?.billingOptions?.d?.options; + goto IL_18bc; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "余额获取失败"); + if (!agent) + { + return AppleQueryStoreBalance(acount, actGetCode, agent: true); + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "查询失败#2"); + if (!agent) + { + return AppleQueryStoreBalance(acount, actGetCode, agent: true); + } + } + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "商城页面登录失败"); + if (!agent) + { + return AppleQueryStoreBalance(acount, actGetCode, agent: true); + } + } + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "页面加载失败"); + if (!agent) + { + return AppleQueryStoreBalance(acount, actGetCode, agent: true); + } + } + goto end_IL_00ca; + IL_1877: + obj4 = null; + goto IL_18bc; + IL_18bc: + ShopBillModel.Option[] array3 = (ShopBillModel.Option[])obj4; + if (array3 != null) + { + ShopBillModel.Option[] array4 = array3; + foreach (ShopBillModel.Option option in array4) + { + if (!(option.value.ToUpper() == "APPLE_BALANCE".ToUpper())) + { + continue; + } + if (option.disabled) + { + action?.Invoke(base.noticeKey, DisplyType.error, "不可用"); + flag2 = true; + } + else if (option.disabledMessage != null) + { + bool flag3 = false; + string[] array = AppSysConfig.getConfig("ShopBanaldisabledMessage").Split(','); + foreach (string value8 in array) + { + if (option.disabledMessage.Contains(value8)) + { + action?.Invoke(base.noticeKey, DisplyType.error, "不可用"); + flag3 = true; + flag2 = true; + break; + } + } + if (!flag3) + { + action?.Invoke(base.noticeKey, DisplyType.forbidden, "正常"); + flag2 = true; + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.forbidden, "正常"); + flag2 = true; + } + break; + } + if (!flag2) + { + action?.Invoke(base.noticeKey, DisplyType.reddemUNlock, "未知"); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "没有查询到余额."); + return true; + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.reddemUNlock, "未知"); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "查询完成"); + return true; + end_IL_00ca:; + } + catch (Exception ex2) + { + APIUtlis.ApiSeriveError(ex2); + action?.Invoke(base.noticeKey, DisplyType.xinxi, ex2.Message); + } + return false; + } + + private bool appleauthHashAuth(AppleAcount acount, Func actGetCode) + { + new WebHeaderCollection(); + string url = "https://idmsa.apple.com/appleauth/auth"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", authsigninConfig.Apple_Widget_Key); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-Locale", homeLanguage); + webHeaderCollection.AddWebHander("X-Apple-Auth-Attributes", handelDic.getDicVal("X-Apple-Auth-Attributes", "")); + webHeaderCollection.AddWebHander("scnt", handelDic.getDicVal("scnt", "")); + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic.getDicVal("X-Apple-ID-Session-Id", "")); + addOAuthHanede(webHeaderCollection, authsigninConfig); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + string text = ""; + lock (lockHas2hObj) + { + HttpResult webContent = getWebContent(url, "https://idmsa.apple.com/", webHeaderCollection, "text/html", "application/json"); + if (webContent.StatusCode != HttpStatusCode.OK) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "双重验证码获取失败"); + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "等待输入双重验证码."); + string[] allKeys = webContent.Header.AllKeys; + foreach (string text2 in allKeys) + { + if (text2 == "scnt" || text2 == "X-Apple-Auth-Attributes") + { + handelDic.TryAddDic(text2, webContent.Header[text2]); + } + } + string text3 = new Regex("numberWithDialCode\":\"([\\s\\S]*?)\"").Match(webContent.Html).Groups[1].Value.Trim(); + if (actGetCode != null) + { + text = actGetCode?.Invoke("请输入账号:" + acount.appleId + ",\n发送至 <" + text3 + "> 的验证码", 1); + if (text == null || string.IsNullOrEmpty(text)) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证码未输入"); + return false; + } + if (text.Trim().Length != 6) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证码输入不正确"); + return false; + } + } + } + if (text.Trim().Length == 6) + { + return verifyCode(text); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证码输入不正确"); + return false; + } + + public bool verifyCode(string code, int retry = 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在验证"); + string url = "https://idmsa.apple.com/appleauth/auth/verify/phone/securitycode"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", authsigninConfig.Apple_Widget_Key); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-Locale", homeLanguage); + webHeaderCollection.AddWebHander("X-Apple-Auth-Attributes", handelDic.getDicVal("X-Apple-Auth-Attributes", "")); + webHeaderCollection.AddWebHander("scnt", handelDic.getDicVal("scnt", "")); + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic.getDicVal("X-Apple-ID-Session-Id", "")); + addOAuthHanede(webHeaderCollection, authsigninConfig); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + string postData = "{\"phoneNumber\":{\"id\":1},\"securityCode\":{\"code\":\"" + code + "\"},\"mode\":\"sms\"}"; + HttpResult httpResult = postWebContent(url, postData, "https://idmsa.apple.com", webHeaderCollection); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.OK) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证码验证成功"); + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证失败,未知异常"); + return false; + } + ServiceErrorsModel serviceErrorsModel = Tools.Todejosn(httpResult.Html); + if (serviceErrorsModel != null) + { + string serviceError = getServiceError(serviceErrorsModel); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证失败:" + serviceError); + if (serviceError.Contains("发生未知错误") && retry < base.MaxRetryCount) + { + Thread.Sleep(3000); + if (retry != 0) + { + base.ProxyIp = ""; + } + return verifyCode(code, retry + 1); + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证失败,未知异常"); + } + return false; + } + + public string SelectShippingOptionNullData(string rreustHtml, NationalList payment, string redirectURI, WebHeaderCollection webHeader) + { + try + { + string text = ""; + string result = ""; + string selectShippingOption = new SelectShippingOptionNullData().getSelectShippingOption(); + foreach (Match item in new Regex("#st([\\s\\S]*?)#end").Matches(selectShippingOption)) + { + string value = item.Groups[1].Value; + if (string.IsNullOrEmpty(value)) + { + continue; + } + string value2 = ""; + string text2 = ""; + string text3 = ""; + string text4 = ""; + string text5 = ""; + string text6 = ""; + string[] array = value.Split(';'); + for (int i = 0; i < array.Length; i++) + { + string[] array2 = array[i].Split('!'); + if (array2.Length == 2) + { + string text7 = array2[1].Trim(); + switch (array2[0].Trim()) + { + case "r": + text6 = text7; + break; + case "value": + text5 = text7; + break; + case "param": + text4 = text7; + break; + case "post": + text3 = text7; + break; + case "url": + text2 = text7; + break; + case "key": + value2 = text7; + break; + } + } + } + if (string.IsNullOrEmpty(value2) || !rreustHtml.Contains(value2) || payment == null) + { + continue; + } + text = text3; + PropertyInfo[] properties = payment.payment.billingAddress.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public); + int num = 0; + string[] array3 = text5.Split(','); + array = text4.Split(','); + foreach (string text8 in array) + { + string valueItem = array3[num]; + string value3 = ""; + if (valueItem.Contains("p.")) + { + PropertyInfo propertyInfo = properties.Where((PropertyInfo c) => c.Name == valueItem.Replace("p.", "")).FirstOrDefault(); + if (propertyInfo != null) + { + value3 = propertyInfo.GetValue(payment.payment.billingAddress, null) as string; + } + } + if (valueItem.Contains("r.") && int.TryParse(valueItem.Replace("r.", ""), out var result2)) + { + string[] array4 = text6.Split('|')[result2].Split('-'); + if (array4.Length == 1) + { + string value4 = new Regex(array4[0]).Match(rreustHtml).Groups[1].Value; + if (!string.IsNullOrEmpty(value4)) + { + value3 = value4; + } + } + if (array4.Length == 2) + { + string value5 = new Regex(array4[0]).Match(rreustHtml).Groups[1].Value; + if (!string.IsNullOrEmpty(value5)) + { + foreach (Match item2 in new Regex(array4[1]).Matches(value5)) + { + string value6 = item2.Groups[1].Value; + if (!string.IsNullOrEmpty(value6)) + { + value3 = value6; + break; + } + } + } + } + } + if (!string.IsNullOrEmpty(value3)) + { + text = text.Replace("{" + text8 + "}", Tools.ToUrlEncode(value3)); + } + num++; + } + if (!text.Contains("{")) + { + result = postWebContent(redirectURI + text2, text, redirectURI + "/shop/checkout?_s=Shipping-init", webHeader, "application/json, text/javascript, */*; q=0.01", "application/x-www-form-urlencoded").Html; + break; + } + } + return result; + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + Console.WriteLine(ex.Message); + return rreustHtml; + } + } + + public string GetAdditionaFieldsn(string Account_Country) + { + string[] array = new SelectShippingOptionNullData().getSelectShippingAdditionaFieldsn().Split('\n'); + int num = 0; + string[] array2; + while (true) + { + if (num < array.Length) + { + string text = array[num]; + if (!string.IsNullOrEmpty(text)) + { + array2 = text.Split(':'); + if (array2.Length == 2 && array2[0].Trim() == Account_Country) + { + break; + } + } + num++; + continue; + } + return ""; + } + return array2[1].Trim(); + } + } +} diff --git a/AppleBatch_June.AppleWebServace/AppleWebBase.cs b/AppleBatch_June.AppleWebServace/AppleWebBase.cs new file mode 100644 index 0000000..ebcd281 --- /dev/null +++ b/AppleBatch_June.AppleWebServace/AppleWebBase.cs @@ -0,0 +1,1127 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using AppleBatch_June.ExecuteTasks; +using AppleBatch_June.Model; +using AppleBatch_June.Utils; +using DotNet.Utilities; + +namespace AppleBatch_June.AppleWebServace +{ + public class AppleWebBase + { + public List listCookie = new List(); + + protected Dictionary handelDic = new Dictionary(); + + public Action action; + + protected Action applyAtion; + + public ITaskRunState taskState; + + protected string loginDomainId = ""; + + protected string apiKey { get; set; } = "cbf64fd6843ee630b463f358ea0b707b"; + + + protected string userAgent { get; set; } + + public bool openVpn { get; set; } + + public string ProxyIp { get; set; } = ""; + + + public string noticeKey { get; set; } = ""; + + + protected int MaxRetryCount { get; set; } = 5; + + + public bool isUpProxyAccountCache { get; set; } = true; + + + protected bool fristGetProxy { get; set; } + + public AppleWebBase(Action _action, Action _applyAtion, ITaskRunState _taskState) + { + taskState = _taskState ?? throw new Exception("任务运行状态不能是空的"); + action = _action; + applyAtion = _applyAtion; + userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"; + userAgent = Tools.GetRandomUserAgent(); + } + + public void logout(AuthsigninConfig authsignin) + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("Upgrade-Insecure-Requests", "1"); + string postData = ""; + string url = "https://buy.apps.apple.com/account/web/logout"; + postWebContent(url, postData, authsignin.refererUrl, webHeaderCollection); + } + + protected bool authsignin(string appleId, string applePwd, AuthsigninConfig authsignin, ref string errMsg, out HttpResult result, Dictionary addHanders = null) + { + errMsg = "未知错误"; + string url = "https://idmsa.apple.com/appleauth/auth/authorize/signin?frame_id=" + Tools.ToUrlEncode(authsignin.iframeId) + "&skVersion=7&iframeId=" + Tools.ToUrlEncode(authsignin.iframeId) + "&client_id=" + authsignin.Apple_Widget_Key + "&redirect_uri=" + authsignin.redirectURI + "&response_type=code&response_mode=web_message&state=" + Tools.ToUrlEncode(authsignin.iframeId) + "&authVersion=latest"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("Upgrade-Insecure-Requests", "1"); + HttpResult webContent = getWebContent(url, "https://appleid.apple.com/", webHeaderCollection, "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3", "application/x-www-form-urlencoded"); + if (webContent.StatusCode == HttpStatusCode.OK) + { + string text = new Regex("domainId\":([\\s\\S]*?),").Match(webContent.Html).Groups[1].Value.Trim(); + loginDomainId = text; + string text2 = ""; + string[] allKeys = webContent.Header.AllKeys; + foreach (string text3 in allKeys) + { + if (text3 == "X-Apple-Auth-Attributes" || text3 == "scnt") + { + handelDic.TryAddDic(text3, webContent.Header[text3]); + } + } + if (webContent.Header.AllKeys.Contains("X-Apple-HC-Bits") && webContent.Header.AllKeys.Contains("X-Apple-HC-Challenge")) + { + string text4 = webContent.Header["X-Apple-HC-Bits"]; + string text5 = webContent.Header["X-Apple-HC-Challenge"]; + string text6 = "1:" + text4 + ":" + DateTime.UtcNow.ToString("yyyyMMddHHmmss") + ":" + text5 + "::"; + string text7 = APIUtlis.ApiGetCodeHC(text6); + if (!string.IsNullOrEmpty(text7)) + { + text2 = text6 + text7; + } + } + if (!string.IsNullOrEmpty(text2)) + { + string refM = ""; + string refM2 = ""; + string token = ""; + bool flag = false; + while (true) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "正在登录."); + if (!signinInit(appleId, applePwd, authsignin, ref refM, ref refM2, ref token, addHanders)) + { + break; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "验证登录密码"); + string postData = "{\"accountName\":\"" + appleId + "\",\"rememberMe\":false,\"m1\":\"" + refM + "\",\"c\":\"" + token + "\",\"m2\":\"" + refM2 + "\"}"; + WebHeaderCollection webHeaderCollection2 = new WebHeaderCollection(); + if (handelDic.ContainsKey("scnt")) + { + webHeaderCollection2.AddWebHander("scnt", handelDic["scnt"]); + } + webHeaderCollection2.AddWebHander("X-Apple-Auth-Attributes", handelDic.getDicVal("X-Apple-Auth-Attributes", "")); + webHeaderCollection2.AddWebHander("X-Apple-Widget-Key", authsignin.Apple_Widget_Key); + webHeaderCollection2.AddWebHander("X-Requested-With", "XMLHttpRequest"); + addOAuthHanede(webHeaderCollection2, authsignin); + if (addHanders != null) + { + foreach (KeyValuePair addHander in addHanders) + { + webHeaderCollection2.AddWebHander(addHander.Key, addHander.Value); + } + } + webHeaderCollection2.AddWebHander("X-APPLE-HC", text2); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(userAgent); + webHeaderCollection2.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + string url2 = "https://idmsa.apple.com/appleauth/auth/signin/complete?isRememberMeEnabled=true"; + HttpResult httpResult = postWebContent(url2, postData, authsignin.refererUrl, webHeaderCollection2); + if (httpResult.StatusCode != HttpStatusCode.BadGateway) + { + if (httpResult.StatusCode == HttpStatusCode.Unauthorized || httpResult.StatusCode == HttpStatusCode.Forbidden) + { + result = httpResult; + LoginErrorModel loginErrorModel = Tools.Todejosn(httpResult.Html); + if (loginErrorModel.serviceErrors != null) + { + if (loginErrorModel.serviceErrors.Length != 0) + { + errMsg = loginErrorModel.serviceErrors[0].message; + action?.Invoke(noticeKey, DisplyType.xinxi, loginErrorModel.serviceErrors[0].message); + if (errMsg.Contains("密码不正确") && !flag) + { + flag = true; + continue; + } + flag = false; + } + else + { + action?.Invoke(noticeKey, DisplyType.xinxi, errMsg); + } + } + else + { + action?.Invoke(noticeKey, DisplyType.xinxi, errMsg); + } + return false; + } + if (httpResult.StatusCode != HttpStatusCode.Conflict && httpResult.StatusCode != HttpStatusCode.OK) + { + if (httpResult.StatusCode == HttpStatusCode.PreconditionFailed) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "密码验证成功"); + result = httpResult; + return true; + } + action?.Invoke(noticeKey, DisplyType.xinxi, errMsg + "(" + (int)httpResult.StatusCode + ")"); + result = null; + return false; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "密码验证成功"); + allKeys = httpResult.Header.AllKeys; + foreach (string text8 in allKeys) + { + switch (text8) + { + case "X-Apple-Auth-Attributes": + case "X-Apple-Repair-Session-Token": + case "X-Apple-ID-Session-Id": + case "scnt": + case "X-Apple-OAuth-Context": + case "X-Apple-ID-Account-Country": + if (text8 == "scnt") + { + handelDic.TryAddDic("scnt2", httpResult.Header[text8]); + } + handelDic.TryAddDic(text8, httpResult.Header[text8]); + break; + } + } + result = httpResult; + return true; + } + errMsg = "服务器拒绝,请使用代理,IP可能已被拉黑"; + action?.Invoke(noticeKey, DisplyType.xinxi, errMsg); + result = httpResult; + return false; + } + result = null; + return false; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "登录失败#Hc:AppleService返回:" + (int)webContent.StatusCode); + result = null; + return false; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "登录失败:AppleService返回:" + (int)webContent.StatusCode); + result = null; + return false; + } + + protected string getServiceError(ServiceErrorsModel serviceErrors) + { + if (serviceErrors != null) + { + if (serviceErrors.validationErrors != null && serviceErrors.validationErrors.Length != 0) + { + return serviceErrors.validationErrors[0].message; + } + if (serviceErrors.service_errors != null && serviceErrors.service_errors.Length != 0) + { + return serviceErrors.service_errors[0].message; + } + if (serviceErrors.serviceErrors != null && serviceErrors.serviceErrors.Length != 0) + { + return serviceErrors.serviceErrors[0].message; + } + } + return ""; + } + + protected bool baseRepair(string appleId, AuthsigninConfig authsigninConfig) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "获取阅读协议"); + string text = "zh_CN_CHN"; + if (handelDic.ContainsKey("X-Apple-Locale")) + { + text = handelDic["X-Apple-Locale"]; + } + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("Upgrade-Insecure-Requests", "1"); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", authsigninConfig.Apple_Widget_Key); + string uRL = "https://appleid.apple.com/widget/account/repair?widgetKey=" + authsigninConfig.Apple_Widget_Key + "&rv=1&language=" + text; + HttpItem httpItem = new HttpItem + { + URL = uRL, + Method = "get", + Timeout = 120000, + ReadWriteTimeout = 30000, + UserAgent = userAgent, + Cookie = listCookie.toFonmtCookie(), + ContentType = "text/html;charset=UTF-8", + Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", + Referer = "https://idmsa.apple.com/", + ResultType = ResultType.String, + ProtocolVersion = HttpVersion.Version11, + WebProxy = WebRequest.DefaultWebProxy + }; + httpItem.Header = webHeaderCollection; + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + if (httpReuslt.StatusCode == HttpStatusCode.OK) + { + string value = new Regex(AppSysConfig.getConfig("Regex_repair_sessionId")).Match(httpReuslt.Html).Groups[1].Value.Trim().Replace("\n", "").Replace("\r", "") + .Replace("\"", "") + .TrimStart(':') + .Trim(); + string key = "repairSessionId"; + if (!handelDic.ContainsKey(key)) + { + handelDic.TryAddDic(key, value); + } + else + { + handelDic[key] = value; + } + string[] allKeys = httpReuslt.Header.AllKeys; + foreach (string text2 in allKeys) + { + if (text2 == "scnt") + { + if (!handelDic.ContainsKey(text2)) + { + handelDic.TryAddDic(text2, httpReuslt.Header[text2]); + } + else + { + handelDic[text2] = httpReuslt.Header[text2]; + } + } + if (text2 == "X-Apple-Repair-Session-Token") + { + if (!handelDic.ContainsKey(text2)) + { + handelDic.TryAddDic(text2, httpReuslt.Header[text2]); + } + else + { + handelDic[text2] = httpReuslt.Header[text2]; + } + } + } + action?.Invoke(noticeKey, DisplyType.xinxi, "协议获取成功"); + return baseOptions(appleId, authsigninConfig); + } + action?.Invoke(noticeKey, DisplyType.xinxi, "协议获取失败"); + return false; + } + + private bool baseOptions(string appleId, AuthsigninConfig authsigninConfig, bool skieprderPrivacy = false) + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("scnt", handelDic["scnt"]); + webHeaderCollection.AddWebHander("X-Apple-Skip-Repair-Attributes", "[]"); + webHeaderCollection.AddWebHander("X-Apple-OAuth-Context", handelDic.getDicVal("X-Apple-OAuth-Context", "")); + string dicVal = handelDic.getDicVal("X-Apple-Session-Token", ""); + if (string.IsNullOrEmpty(dicVal)) + { + dicVal = handelDic.getDicVal("X-Apple-Repair-Session-Token", ""); + } + webHeaderCollection.AddWebHander("X-Apple-Session-Token", dicVal); + webHeaderCollection.AddWebHander("X-Apple-Locale", authsigninConfig.homeLanguage); + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic.getDicVal("X-Apple-ID-Session-Id", "")); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", authsigninConfig.Apple_Widget_Key); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + string uRL = "https://appleid.apple.com/account/manage/repair/options"; + HttpItem httpItem = new HttpItem + { + URL = uRL, + Method = "get", + Timeout = 120000, + ReadWriteTimeout = 30000, + UserAgent = userAgent, + Cookie = listCookie.toFonmtCookie(), + ContentType = "application/json; charset=utf-8", + Accept = "application/json, text/javascript, */*; q=0.01", + Referer = "https://appleid.apple.com/widget/account/repair?widgetKey=" + authsigninConfig.Apple_Widget_Key + "&rv=1&language=zh_CN_CHN", + ResultType = ResultType.String, + ProtocolVersion = HttpVersion.Version11, + WebProxy = WebRequest.DefaultWebProxy + }; + httpItem.Header = webHeaderCollection; + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + if (httpReuslt.StatusCode == HttpStatusCode.OK) + { + string[] allKeys = httpReuslt.Header.AllKeys; + foreach (string text in allKeys) + { + if (text == "X-Apple-Session-Token" || text == "scnt") + { + handelDic.TryAddDic(text, httpReuslt.Header[text]); + } + } + Dictionary dictionary = Tools.Todejosn>(httpReuslt.Html); + if (httpReuslt.Html.Contains("requiredSteps")) + { + foreach (object item in (dynamic)dictionary["requiredSteps"]) + { + string text2 = (string)(dynamic)item; + if (!(text2 == "privacy_consent") || baseAccept(appleId, authsigninConfig.Apple_Widget_Key, authsigninConfig.homeLanguage)) + { + if (text2 == "crossBorderPrivacyConsent") + { + bool gcbdCrossBorderPrivacyConsentRequired = false; + bool appleCrossBorderPrivacyConsentRequired = false; + try + { + dynamic val = dictionary["repairContext"]; + gcbdCrossBorderPrivacyConsentRequired = val["privacyConsentRequirement"]["gcbdCrossBorderPrivacyConsentRequired"]; + appleCrossBorderPrivacyConsentRequired = val["privacyConsentRequirement"]["appleCrossBorderPrivacyConsentRequired"]; + } + catch (Exception) + { + } + if (CrossBorderPrivacyConsent(appleId, authsigninConfig.Apple_Widget_Key, authsigninConfig.homeLanguage, gcbdCrossBorderPrivacyConsentRequired, appleCrossBorderPrivacyConsentRequired)) + { + return false; + } + return baseOptions(appleId, authsigninConfig, skieprderPrivacy: true); + } + continue; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "协议阅读失败#2"); + return false; + } + } + return baseComplete(appleId, authsigninConfig.Apple_Widget_Key, authsigninConfig.homeLanguage, authsigninConfig); + } + action?.Invoke(noticeKey, DisplyType.xinxi, "协议获取失败#2"); + return false; + } + + public bool CrossBorderPrivacyConsent(string appleId, string Apple_Widget_Key, string homeLanguage, bool gcbdCrossBorderPrivacyConsentRequired, bool appleCrossBorderPrivacyConsentRequired, bool retry = false) + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.AddWebHander("scnt", handelDic["scnt"]); + webHeaderCollection.AddWebHander("X-Apple-Skip-Repair-Attributes", "[]"); + if (handelDic.ContainsKey("X-Apple-Session-Token")) + { + webHeaderCollection.AddWebHander("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + } + webHeaderCollection.AddWebHander("X-Apple-Locale", homeLanguage); + if (handelDic.ContainsKey("repairSessionId")) + { + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + } + webHeaderCollection.AddWebHander("X-Apple-OAuth-Context", handelDic.getDicVal("X-Apple-OAuth-Context", "")); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + string postData = "{\"account\":{\"preferences\":{\"privacyPreferences\":{\"appleCrossBorderPrivacyNoticeAccepted\":true}}},\"completedSteps\":[],\"requiredSteps\":[\"crossBorderPrivacyConsent\"],\"repairContext\":{\"repairType\":\"crossBorderPrivacyConsent\",\"repairItems\":[\"crossBorderPrivacyConsent\"]}}"; + if (gcbdCrossBorderPrivacyConsentRequired) + { + postData = "{\"account\":{\"preferences\":{\"privacyPreferences\":{\"gcbdCrossBorderPrivacyNoticeAccepted\":true}}},\"completedSteps\":[],\"requiredSteps\":[\"crossBorderPrivacyConsent\"],\"repairContext\":{\"repairType\":\"crossBorderPrivacyConsent\",\"repairItems\":[\"crossBorderPrivacyConsent\"]}}"; + } + if (gcbdCrossBorderPrivacyConsentRequired && appleCrossBorderPrivacyConsentRequired) + { + postData = "{\"account\":{\"preferences\":{\"privacyPreferences\":{\"appleCrossBorderPrivacyNoticeAccepted\":true,\"gcbdCrossBorderPrivacyNoticeAccepted\":true}}},\"completedSteps\":[],\"requiredSteps\":[\"crossBorderPrivacyConsent\"],\"repairContext\":{\"repairType\":\"crossBorderPrivacyConsent\",\"repairItems\":[\"crossBorderPrivacyConsent\"]}}"; + } + if (postWebContent("https://appleid.apple.com/account/manage/repair/privacy/consent", postData, "https://appleid.apple.com/", webHeaderCollection).StatusCode == HttpStatusCode.OK) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "同意数据隐私协议"); + return true; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "跳过隐私协议失败"); + if (!retry) + { + return CrossBorderPrivacyConsent(appleId, Apple_Widget_Key, homeLanguage, gcbdCrossBorderPrivacyConsentRequired, appleCrossBorderPrivacyConsentRequired, retry: true); + } + return false; + } + + private bool baseComplete(string appleId, string newwidgKey, string homeLanguage, AuthsigninConfig authsigninConfig) + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + string text = ""; + if (handelDic.ContainsKey("scnt2")) + { + text = handelDic["scnt2"]; + } + webHeaderCollection.AddWebHander("X-Apple-Domain-Id", "1"); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-Locale", homeLanguage); + if (string.IsNullOrEmpty(text) && handelDic.ContainsKey("scnt")) + { + text = handelDic["scnt"]; + } + webHeaderCollection.AddWebHander("scnt", text); + if (handelDic.ContainsKey("X-Apple-ID-Session-Id")) + { + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic.getDicVal("X-Apple-ID-Session-Id", "")); + } + else if (handelDic.ContainsKey("repairSessionId")) + { + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic.getDicVal("repairSessionId", "")); + } + webHeaderCollection.AddWebHander("X-Apple-Repair-Session-Token", handelDic["X-Apple-Session-Token"]); + webHeaderCollection.AddWebHander("Origin", "https://idmsa.apple.com"); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", newwidgKey); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + webHeaderCollection.AddWebHander("X-Apple-Auth-Attributes", handelDic.getDicVal("X-Apple-Auth-Attributes", "")); + addOAuthHanede(webHeaderCollection, authsigninConfig); + string uRL = "https://idmsa.apple.com/appleauth/auth/repair/complete"; + HttpItem httpItem = new HttpItem + { + URL = uRL, + Method = "post", + UserAgent = userAgent, + Cookie = listCookie.toFonmtCookie(), + ContentType = "application/json; charset=utf-8", + Accept = "application/json, text/javascript, */*; q=0.01", + Referer = "https://idmsa.apple.com/", + ResultType = ResultType.String, + Postdata = "", + ProtocolVersion = HttpVersion.Version11, + WebProxy = WebRequest.DefaultWebProxy + }; + httpItem.Header = webHeaderCollection; + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + if (httpReuslt.StatusCode != HttpStatusCode.OK && httpReuslt.StatusCode != HttpStatusCode.NoContent) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "协议阅读失败"); + return false; + } + string[] allKeys = httpReuslt.Header.AllKeys; + foreach (string text2 in allKeys) + { + if (text2 == "X-Apple-OAuth-Grant-Code") + { + if (!handelDic.ContainsKey(text2)) + { + handelDic.TryAddDic(text2, httpReuslt.Header[text2]); + } + else + { + handelDic[text2] = httpReuslt.Header[text2]; + } + } + } + if (httpReuslt.Header.AllKeys.Contains("X-Apple-ID-Account-Country")) + { + action?.Invoke(noticeKey, DisplyType.area, AppleUtlis.GetAreaByCode(httpReuslt.Header["X-Apple-ID-Account-Country"].ToString())); + } + action?.Invoke(noticeKey, DisplyType.xinxi, "协议阅读成功"); + return true; + } + + private bool baseAccept(string appleId, string newwidgKey, string homeLanguage) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "正在同意协议"); + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-OAuth-Context", handelDic.getDicVal("X-Apple-OAuth-Context", "")); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", newwidgKey); + webHeaderCollection.AddWebHander("scnt", handelDic["scnt"]); + webHeaderCollection.AddWebHander("X-Apple-Skip-Repair-Attributes", "[]"); + webHeaderCollection.AddWebHander("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + webHeaderCollection.AddWebHander("X-Apple-Locale", homeLanguage); + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + string uRL = "https://appleid.apple.com/account/manage/privacy/accept"; + HttpItem httpItem = new HttpItem + { + URL = uRL, + Method = "put", + UserAgent = userAgent, + Cookie = listCookie.toFonmtCookie(), + ContentType = "application/json; charset=utf-8", + Accept = "application/json, text/javascript, */*; q=0.01", + Referer = "https://appleid.apple.com/widget/account/repair?widgetKey=" + newwidgKey + "&rv=1&language=zh_CN_CHN", + ProtocolVersion = HttpVersion.Version11, + WebProxy = WebRequest.DefaultWebProxy + }; + httpItem.Header = webHeaderCollection; + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + if (httpReuslt.StatusCode != HttpStatusCode.OK && httpReuslt.StatusCode != HttpStatusCode.MethodNotAllowed) + { + return false; + } + string[] allKeys = httpReuslt.Header.AllKeys; + foreach (string text in allKeys) + { + if (text == "X-Apple-Session-Token" || text == "scnt") + { + handelDic.TryAddDic(text, httpReuslt.Header[text]); + } + } + return true; + } + + public bool signinFederate(string account, AuthsigninConfig authsignin, Dictionary addHanders = null) + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Apple-Auth-Attributes", handelDic.getDicVal("X-Apple-Auth-Attributes", "")); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", authsignin.Apple_Widget_Key); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + if (addHanders != null) + { + foreach (KeyValuePair addHander in addHanders) + { + webHeaderCollection.AddWebHander(addHander.Key, addHander.Value); + } + } + webHeaderCollection.AddWebHander("X-Apple-Locale", authsignin.homeLanguage); + addOAuthHanede(webHeaderCollection, authsignin); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + string postData = "{\"accountName\":\"" + account + "\",\"rememberMe\":false}"; + string url = "https://idmsa.apple.com/appleauth/auth/federate?isRememberMeEnabled=true"; + HttpResult httpResult = postWebContent(url, postData, authsignin.refererUrl, webHeaderCollection); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + string[] allKeys = httpResult.Header.AllKeys; + foreach (string text in allKeys) + { + if (text == "scnt") + { + handelDic.TryAddDic(text, httpResult.Header[text]); + } + } + return true; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "登录失败#Federate:AppleService返回:" + (int)httpResult.StatusCode); + return false; + } + + public bool signinInit(string account, string accountPwd, AuthsigninConfig authsignin, ref string refM1, ref string refM2, ref string token, Dictionary addHanders = null) + { + string arg = "服务器拒绝,请使用代理,IP可能已被拉黑"; + Dictionary dataSource = APIUtlis.ApiGetInitLoginPwd("init", "", "", "", "", "", "", ""); + string dicVal = dataSource.getDicVal("initData", ""); + string dicVal2 = dataSource.getDicVal("privateData", ""); + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + if (handelDic.ContainsKey("scnt")) + { + webHeaderCollection.AddWebHander("scnt", handelDic["scnt"]); + } + webHeaderCollection.AddWebHander("X-Apple-Auth-Attributes", handelDic.getDicVal("X-Apple-Auth-Attributes", "")); + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", authsignin.Apple_Widget_Key); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + if (addHanders != null) + { + foreach (KeyValuePair addHander in addHanders) + { + webHeaderCollection.AddWebHander(addHander.Key, addHander.Value); + } + } + addOAuthHanede(webHeaderCollection, authsignin); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + if (!string.IsNullOrEmpty(dicVal)) + { + string postData = "{\"a\":\"" + dicVal + "\",\"accountName\":\"" + account + "\",\"protocols\":[\"s2k\",\"s2k_fo\"]}"; + string url = "https://idmsa.apple.com/appleauth/auth/signin/init"; + HttpResult httpResult = postWebContent(url, postData, authsignin.refererUrl, webHeaderCollection); + if (httpResult.StatusCode == HttpStatusCode.BadGateway) + { + action?.Invoke(noticeKey, DisplyType.xinxi, arg); + return false; + } + if (httpResult.StatusCode != HttpStatusCode.Unauthorized && httpResult.StatusCode != HttpStatusCode.Forbidden) + { + if (httpResult.StatusCode != HttpStatusCode.Conflict && httpResult.StatusCode != HttpStatusCode.OK) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "登录失败#Init:AppleService返回:" + (int)httpResult.StatusCode); + return false; + } + string[] allKeys = httpResult.Header.AllKeys; + foreach (string text in allKeys) + { + if (text == "scnt") + { + handelDic.TryAddDic(text, httpResult.Header[text]); + } + } + WebLoginInitRespon webLoginInitRespon = Tools.Todejosn(httpResult.Html); + if (webLoginInitRespon != null) + { + int num = 0; + string dicVal3; + string dicVal4; + while (true) + { + if (num < 3) + { + Dictionary dataSource2 = APIUtlis.ApiGetInitLoginPwd("EncPwd", dicVal2, webLoginInitRespon.salt, webLoginInitRespon.b, account, accountPwd, webLoginInitRespon.iteration.ToString(), webLoginInitRespon.protocol); + dicVal3 = dataSource2.getDicVal("M1", ""); + dicVal4 = dataSource2.getDicVal("M2", ""); + if (!string.IsNullOrEmpty(dicVal3) && !string.IsNullOrEmpty(dicVal4)) + { + break; + } + num++; + continue; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "登录失败#encPwd"); + return false; + } + token = webLoginInitRespon.c; + refM1 = dicVal3; + refM2 = dicVal4; + return true; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "登录失败#Init2:AppleService返回:" + (int)httpResult.StatusCode); + return false; + } + LoginErrorModel loginErrorModel = Tools.Todejosn(httpResult.Html); + if (loginErrorModel.serviceErrors != null) + { + if (loginErrorModel.serviceErrors.Length != 0) + { + arg = loginErrorModel.serviceErrors[0].message; + action?.Invoke(noticeKey, DisplyType.xinxi, loginErrorModel.serviceErrors[0].message); + } + else + { + action?.Invoke(noticeKey, DisplyType.xinxi, arg); + } + } + else + { + action?.Invoke(noticeKey, DisplyType.xinxi, arg); + } + return false; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "登录加载失败#init"); + return false; + } + + protected void addOAuthHanede(WebHeaderCollection hander, AuthsigninConfig authsignin) + { + addOAuthHanede(hander, authsignin.redirectURI, authsignin.Apple_Widget_Key, authsignin.iframeId, authsignin.domainId); + } + + protected void addOAuthHanede(WebHeaderCollection hander, string redirectURI, string Apple_Widget_Key, string iframeId, string domainId) + { + if (!hander.AllKeys.Contains("X-Apple-OAuth-Redirect-URI")) + { + hander.AddWebHander("X-Apple-OAuth-Redirect-URI", redirectURI); + } + if (!hander.AllKeys.Contains("X-Apple-OAuth-Client-Id")) + { + hander.AddWebHander("X-Apple-OAuth-Client-Id", Apple_Widget_Key); + } + if (!hander.AllKeys.Contains("X-Apple-OAuth-Client-Type")) + { + hander.AddWebHander("X-Apple-OAuth-Client-Type", "firstPartyAuth"); + } + if (!hander.AllKeys.Contains("X-Apple-OAuth-Response-Type")) + { + hander.AddWebHander("X-Apple-OAuth-Response-Type", "code"); + } + if (!hander.AllKeys.Contains("X-Apple-OAuth-Response-Mode")) + { + hander.AddWebHander("X-Apple-OAuth-Response-Mode", "web_message"); + } + if (!hander.AllKeys.Contains("X-Apple-OAuth-State")) + { + hander.AddWebHander("X-Apple-OAuth-State", iframeId); + } + if (!hander.AllKeys.Contains("X-Apple-Domain-Id")) + { + if (string.IsNullOrEmpty(domainId)) + { + if (!string.IsNullOrEmpty(loginDomainId)) + { + hander.AddWebHander("X-Apple-Domain-Id", loginDomainId); + } + else + { + hander.AddWebHander("X-Apple-Domain-Id", "1"); + } + } + else + { + hander.AddWebHander("X-Apple-Domain-Id", domainId); + } + } + if (!hander.AllKeys.Contains("X-Apple-Frame-Id")) + { + hander.AddWebHander("X-Apple-Frame-Id", iframeId); + } + } + + protected virtual HttpResult DeleteWebContent(string url, string putData, string referer, WebHeaderCollection webHeader = null, string accept = "") + { + byte[] bytes = Encoding.UTF8.GetBytes(putData); + HttpItem httpItem = new HttpItem + { + URL = url, + Method = "DELETE", + UserAgent = userAgent, + Cookie = listCookie.toFonmtCookie(), + Accept = ((accept.Length == 0) ? "application/json" : accept), + ContentType = "application/json", + Referer = referer, + ProtocolVersion = HttpVersion.Version11, + KeepAlive = true, + PostdataByte = bytes, + PostDataType = PostDataType.Byte, + ResultType = ResultType.String, + WebProxy = WebRequest.DefaultWebProxy + }; + if (webHeader != null) + { + httpItem.Header = webHeader; + } + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + Array.Clear(bytes, 0, bytes.Length); + return httpReuslt; + } + + protected virtual HttpResult putWebContent(string url, string putData, string referer, WebHeaderCollection webHeader = null, string accept = "") + { + byte[] bytes = Encoding.UTF8.GetBytes(putData); + HttpItem httpItem = new HttpItem + { + URL = url, + Method = "PUT", + UserAgent = userAgent, + Cookie = listCookie.toFonmtCookie(), + Accept = ((accept.Length == 0) ? "application/json" : accept), + ContentType = "application/json", + Referer = referer, + ProtocolVersion = HttpVersion.Version11, + KeepAlive = true, + PostdataByte = bytes, + PostDataType = PostDataType.Byte, + ResultType = ResultType.String, + WebProxy = WebRequest.DefaultWebProxy + }; + if (webHeader != null) + { + httpItem.Header = webHeader; + } + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + Array.Clear(bytes, 0, bytes.Length); + return httpReuslt; + } + + public virtual HttpResult postWebContent(string url, string postData, string referer, WebHeaderCollection webHeader = null, string accept = "application/json, text/javascript, */*; q=0.01", string contentType = "application/json", int RetryTimes = 0) + { + byte[] bytes = Encoding.UTF8.GetBytes(postData); + HttpItem httpItem = new HttpItem + { + URL = url, + Method = "POST", + UserAgent = userAgent, + Cookie = listCookie.toFonmtCookie(), + Accept = accept, + ContentType = contentType, + Referer = referer, + ProtocolVersion = HttpVersion.Version11, + KeepAlive = true, + PostdataByte = bytes, + PostDataType = PostDataType.Byte, + ResultType = ResultType.String, + WebProxy = WebRequest.DefaultWebProxy + }; + if (webHeader != null) + { + httpItem.Header = webHeader; + } + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + if (httpReuslt.StatusCode == HttpStatusCode.Found && !httpReuslt.ResponseUri.Contains("/captcha") && httpReuslt.RedirectUrl.Contains("https://iforgot.apple.com/error") && RetryTimes < 3) + { + if (RetryTimes == 1) + { + ProxyIp = ""; + } + Thread.Sleep(3000 * (RetryTimes + 1)); + return postWebContent(url, postData, referer, webHeader, accept, contentType, RetryTimes + 1); + } + if (httpReuslt.StatusCode == HttpStatusCode.BadRequest && RetryTimes < 2 && string.IsNullOrEmpty(httpReuslt.Html)) + { + if (RetryTimes == 1) + { + ProxyIp = ""; + } + Thread.Sleep(3000 * (RetryTimes + 1)); + return postWebContent(url, postData, referer, webHeader, accept, contentType, RetryTimes + 1); + } + if (httpReuslt.StatusCode == HttpStatusCode.NoContent && RetryTimes < 2 && httpReuslt.Html == "giftcardRetry") + { + if (RetryTimes == 1) + { + ProxyIp = ""; + } + Thread.Sleep(1000 * (RetryTimes + 1)); + return postWebContent(url, postData, referer, webHeader, accept, contentType, RetryTimes + 1); + } + Array.Clear(bytes, 0, bytes.Length); + return httpReuslt; + } + + protected virtual HttpResult getWebContentNoCookie(string url, string referer, WebHeaderCollection webHeader = null, string accept = "", string ContentType = "") + { + HttpItem httpItem = new HttpItem + { + URL = url, + Method = "GET", + UserAgent = userAgent, + Accept = ((accept.Length == 0) ? "*" : accept), + Referer = referer, + ProtocolVersion = HttpVersion.Version11, + KeepAlive = true, + ContentType = ((ContentType.Length == 0) ? null : ContentType), + ResultType = ResultType.String, + WebProxy = WebRequest.DefaultWebProxy + }; + if (webHeader != null) + { + httpItem.Header = webHeader; + } + addHander(httpItem); + return GetHttpReuslt(httpItem); + } + + protected virtual HttpResult getWebJsonContent(string url, string referer, WebHeaderCollection webHeader = null, string accept = "") + { + HttpItem httpItem = new HttpItem + { + URL = url, + Method = "GET", + UserAgent = userAgent, + Cookie = listCookie.toFonmtCookie(), + Accept = ((accept.Length == 0) ? "application/json; charset=utf-8" : accept), + ContentType = "application/json", + Referer = referer, + ProtocolVersion = HttpVersion.Version11, + KeepAlive = true, + ResultType = ResultType.String, + WebProxy = WebRequest.DefaultWebProxy + }; + if (webHeader != null) + { + httpItem.Header = webHeader; + } + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + addCookle(httpReuslt.Cookie); + return httpReuslt; + } + + public virtual HttpResult getWebContent(string url, string referer, WebHeaderCollection webHeader = null, string accept = "", string ContentType = "") + { + HttpItem httpItem = new HttpItem + { + URL = url, + Method = "GET", + UserAgent = userAgent, + Cookie = listCookie.toFonmtCookie(), + Accept = ((accept.Length == 0) ? "*" : accept), + Referer = referer, + ProtocolVersion = HttpVersion.Version11, + KeepAlive = true, + ContentType = ((ContentType.Length == 0) ? null : ContentType), + ResultType = ResultType.String, + WebProxy = WebRequest.DefaultWebProxy + }; + if (webHeader != null) + { + httpItem.Header = webHeader; + } + addHander(httpItem); + return GetHttpReuslt(httpItem); + } + + protected HttpResult GetHttpReuslt(HttpItem item) + { + item.URL.Contains("session/timeout"); + string text = "noticeActKey"; + string arg = noticeKey; + if (item.Header.AllKeys.Contains(text)) + { + arg = item.Header[text]; + lock (item) + { + item.Header.Remove(text); + } + } + if (!taskState.isRun) + { + throw new Exception("停止执行"); + } + using HttpHelper httpHelper = new HttpHelper(); + HttpResult httpResult = null; + int num = Tools.ToNetWorkInt(ConfigUtlis.getConfigValue("comNetworkConfig"), 0); + if (openVpn && num < 3) + { + bool flag = false; + int num2 = 1; + List proxyAccountModel = ProxyAccountCache.GetProxyAccountModel(ProxyIp); + do + { + flag = false; + if (num == 0 || num == 1) + { + if (!string.IsNullOrEmpty(ProxyIp) && !ProxyRunService.CheckIpAlive(ProxyIp)) + { + ProxyIp = ""; + } + if (string.IsNullOrEmpty(ProxyIp)) + { + action?.Invoke(arg, DisplyType.xinxi, "正在获取代理IP..." + num2); + ProxyIp = ProxyRunService.getProxyIp(taskState, num2, fristGetProxy); + if (string.IsNullOrEmpty(ProxyIp)) + { + if (taskState.isRun) + { + break; + } + throw new Exception("停止执行"); + } + foreach (ProxyAccountModel item2 in proxyAccountModel) + { + item2.ProxyIp = ProxyIp; + } + action?.Invoke(arg, DisplyType.xinxi, "代理IP获取成功..." + num2); + } + if (ProxyIp.Split('|').Length == 4) + { + string[] array = ProxyIp.Split('|'); + WebProxy webProxy = new WebProxy(); + webProxy.Address = new Uri($"http://{array[0].Trim()}:{array[1].Trim()}"); + webProxy.Credentials = new NetworkCredential(array[2].Trim(), array[3].Trim()); + item.WebProxy = webProxy; + item.KeepAlive = false; + } + else if (!string.IsNullOrEmpty(ProxyIp)) + { + item.WebProxy = new WebProxy(ProxyIp); + } + } + else if (num == 2) + { + WebProxy webProxy2 = new WebProxy(); + webProxy2.Address = new Uri(string.Format("http://{0}:{1}", ConfigUtlis.getConfigValue("txtTpsHost"), ConfigUtlis.getConfigValue("txtTpsPort"))); + webProxy2.Credentials = new NetworkCredential(ConfigUtlis.getConfigValue("txtTpsUserName"), ConfigUtlis.getConfigValue("txtTpsPwd")); + item.WebProxy = webProxy2; + } + if (item.URL.Contains("/password/reset")) + { + item.Timeout = 60000; + item.ReadWriteTimeout = 60000; + } + else + { + item.Timeout = 35000; + item.ReadWriteTimeout = 30000; + } + if (num2 >= 2) + { + item.KeepAlive = false; + } + httpResult = httpHelper.GetHtml(item); + if (httpResult.StatusCode != 0 && httpResult.StatusCode != (HttpStatusCode)441 && httpResult.StatusCode != HttpStatusCode.BadGateway && httpResult.StatusCode != HttpStatusCode.RequestTimeout && httpResult.StatusCode != HttpStatusCode.ServiceUnavailable && !(httpResult.Html == "操作已超时。")) + { + if (item.Method == "POST" || item.Method == "PUT") + { + if (httpResult.Html.Contains("发生未知错误")) + { + ProxyIp = string.Empty; + } + if (httpResult.Html.Contains("如需帮助")) + { + flag = true; + ProxyRunService.removeIp(ProxyIp); + ProxyIp = string.Empty; + } + } + } + else + { + ProxyRunService.removeIp(ProxyIp); + if (httpResult.StatusCode == HttpStatusCode.ServiceUnavailable && httpResult.Html.Contains("securemetrics.apple.com")) + { + flag = false; + httpResult.StatusCode = HttpStatusCode.NoContent; + return httpResult; + } + flag = true; + ProxyIp = string.Empty; + } + _ = httpResult.StatusCode; + num2++; + if (num2 > 50) + { + httpResult = null; + break; + } + } + while (flag && taskState.isRun); + } + else + { + item.Timeout = 30000; + item.ReadWriteTimeout = 30000; + item.WebProxy = WebRequest.DefaultWebProxy; + httpResult = httpHelper.GetHtml(item); + } + if (httpResult == null) + { + item.Timeout = 30000; + item.ReadWriteTimeout = 30000; + item.WebProxy = WebRequest.DefaultWebProxy; + httpResult = httpHelper.GetHtml(item); + } + addCookle(httpResult.Cookie); + if (!string.IsNullOrEmpty(httpResult.Html)) + { + APIUtlis.AppRequestHtml(httpResult.Html); + APIUtlis.requestUrl = item.URL; + } + return httpResult; + } + + protected void addHander(HttpItem item) + { + item.Header.AddWebHander("Accept-Encoding", "gzip, deflate"); + item.Header.AddWebHander("Accept-Language", "zh-CN,zh;q=0.9"); + } + + protected void addCookle(string cookies) + { + if (cookies == null || string.IsNullOrEmpty(cookies.Trim())) + { + return; + } + foreach (CookieItem item in HttpCookieHelper.GetCookieList(cookies)) + { + if (item.Key == "Max-Age" || item.Key == "Path" || item.Key == "Expires" || item.Key == "domain" || item.Key == "Domain" || item.Key == "path") + { + continue; + } + CookieItem cookieItem = listCookie.Where((CookieItem c) => c.Key == item.Key).FirstOrDefault(); + if (cookieItem == null) + { + if (!string.IsNullOrEmpty(item.Value.Trim())) + { + listCookie.Add(item); + } + } + else if (!string.IsNullOrEmpty(item.Value.Trim())) + { + cookieItem.Value = item.Value.Trim(); + } + } + } + } +} diff --git a/AppleBatch_June.AppleWebServace/AppleiForgotWeb.cs b/AppleBatch_June.AppleWebServace/AppleiForgotWeb.cs new file mode 100644 index 0000000..f50dcf3 --- /dev/null +++ b/AppleBatch_June.AppleWebServace/AppleiForgotWeb.cs @@ -0,0 +1,793 @@ +using System; +using System.Linq; +using System.Net; +using System.Text.RegularExpressions; +using System.Threading; +using System.Web; +using AppleBatch_June.ExecuteTasks; +using AppleBatch_June.Model; +using AppleBatch_June.Utils; +using DotNet.Utilities; + +namespace AppleBatch_June.AppleWebServace +{ + public class AppleiForgotWeb : AppleWebBase + { + private class CaptchaModel + { + public class Payload + { + public string contentType { get; set; } + + public string content { get; set; } + } + + public Payload payload { get; set; } + + public string token { get; set; } + + public string type { get; set; } + + public int id { get; set; } + + public string reust { get; set; } = ""; + + } + + private string language = "zh_CN"; + + private AppleAcount acount = new AppleAcount(); + + public string appleId { get; set; } + + public bool CheckAppleId { get; set; } + + public AppleiForgotWeb(bool _openVpn, Action _action, Action _applyAtion, ITaskRunState _taskState) + : base(_action, _applyAtion, _taskState) + { + taskState = _taskState ?? throw new Exception("任务运行状态不能是空的"); + base.openVpn = _openVpn; + } + + public bool RetrievePassword(AppleAcount _acount, string newPwd, string _noticeKey, bool isCloseAuthen = false, bool ckTailNumber = false) + { + acount = _acount; + if (string.IsNullOrEmpty(base.ProxyIp)) + { + base.ProxyIp = ProxyAccountCache.getProxyAccountIP(acount.appleId); + } + appleId = acount.appleId; + base.noticeKey = _noticeKey; + string url = "https://iforgot.apple.com/password/verify/appleid?language=" + language; + string[] array = acount.birthday.Split('-'); + if (array.Length != 3) + { + acount.birthday = acount.birthday.Replace('/', '-'); + array = acount.birthday.Split('-'); + } + if (!(array.Length == 3 || ckTailNumber) && !CheckAppleId) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "生日未导入或者格式错误"); + } + else + { + HttpResult webContent = getWebContent(url, ""); + if (webContent.StatusCode == HttpStatusCode.OK) + { + string text = new Regex(AppSysConfig.getConfig("Regex_RetrievePassword")).Match(AppleNetworkBase.GetToken(webContent.Html, "boot_args", "script")).Groups[1].Value.Replace("\"", "").Replace(":", "").Replace(" ", "") + .Trim(); + if (!string.IsNullOrEmpty(text)) + { + text = HttpUtility.UrlEncode(text); + bool num = verifyAppleid(text, acount, newPwd, isCloseAuthen, 0, ckTailNumber); + if (num) + { + ProxyAccountCache.addProxyIp(appleId, base.ProxyIp); + } + return num; + } + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "未知错误"); + } + return false; + } + + private bool verifyAppleid(string sstt, AppleAcount acount, string newPwd, bool isCloseAuthen, int RetryCount = 0, bool ckTailNumber = false) + { + if (RetryCount >= 5) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证码获取失败,#3"); + return false; + } + int num = 0; + CaptchaModel captchaModel = null; + bool flag = false; + do + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "获取验证码.." + (num + 1)); + captchaModel = getCaptcha(sstt); + if (captchaModel == null) + { + Thread.Sleep(500); + } + else if (!string.IsNullOrEmpty(captchaModel.payload.content)) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "获取验证码..." + (num + 1)); + HttpResult captcha = APIUtlis.getCaptcha(1, captchaModel.payload.content, flag); + if (captcha.StatusCode == HttpStatusCode.OK) + { + dynamic val = Tools.Todejosn(captcha.Html); + if (val["Code"] == "0000") + { + string reust = val["Data"]; + captchaModel.reust = reust; + break; + } + flag = !flag; + } + Thread.Sleep(500); + } + num++; + } + while (num <= 5); + if (captchaModel != null) + { + if (!string.IsNullOrEmpty(captchaModel.reust)) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在验证账号"); + string postData = "{\"id\":\"" + acount.appleId + "\",\"captcha\":{\"id\":" + captchaModel.id + ",\"answer\":\"" + captchaModel.reust + "\",\"token\":\"" + captchaModel.token + "\"}}"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + webHeaderCollection.Add("sstt", sstt); + HttpResult httpResult = postWebContent("https://iforgot.apple.com/password/verify/appleid", postData, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + APIUtlis.getCaptcha(3, captchaModel.payload.content); + ServiceErrorsModel serviceErrorsModel = Tools.Todejosn(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + string message = serviceErrorsModel.serviceErrors[0].message; + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + if (CheckAppleId && !message.Contains("未知") && !message.Contains("错误")) + { + return true; + } + return false; + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "不是有效的AppleId"); + } + AppSysConfig.proxyModels.Push(new ProxyModel2 + { + prixyIp = base.ProxyIp, + applyDate = DateTime.Now + }); + return false; + } + if (httpResult.StatusCode == HttpStatusCode.Found) + { + httpResult.Header.AllKeys.Contains("sstt"); + APIUtlis.getCaptcha(3, captchaModel.payload.content); + string redirectUrl = httpResult.RedirectUrl; + webHeaderCollection["X-Apple-I-FD-Client-Info"] = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + HttpResult webJsonContent = getWebJsonContent(redirectUrl, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + if (isCloseAuthen) + { + if (redirectUrl.ToLower().StartsWith("https://iforgot.apple.com/password/verify/phone")) + { + if (ckTailNumber) + { + if (webJsonContent.Html.Contains("trustedPhones")) + { + IforgotVerifyPhoneModel iforgotVerifyPhoneModel = Tools.Todejosn(webJsonContent.Html); + if (iforgotVerifyPhoneModel != null) + { + string text = ""; + IforgotVerifyPhoneModel.Trustedphone[] array = iforgotVerifyPhoneModel?.trustedPhones; + foreach (IforgotVerifyPhoneModel.Trustedphone trustedphone in array) + { + if (trustedphone != null) + { + text = text + "," + trustedphone.number; + } + } + text = ((!iforgotVerifyPhoneModel.recoverable) ? (text.TrimStart(',') + ", 无法关闭") : (text.TrimStart(',') + ", 可以关闭")); + APIUtlis.ApiApplyAct(44, "尾号查询"); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "查询到号码:" + text); + return false; + } + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "手机号码获取失败"); + return false; + } + sstt = webJsonContent.Header["sstt"]; + bool num2 = unenrollment(sstt, acount, newPwd); + if (num2) + { + AppSysConfig.proxyModels.Push(new ProxyModel2 + { + prixyIp = base.ProxyIp, + applyDate = DateTime.Now + }); + } + return num2; + } + acount.notAuthen = true; + action?.Invoke(base.noticeKey, DisplyType.xinxi, "没有双重认证"); + AppSysConfig.proxyModels.Push(new ProxyModel2 + { + prixyIp = base.ProxyIp, + applyDate = DateTime.Now + }); + return false; + } + if (CheckAppleId) + { + string[] array2 = AppSysConfig.getConfig("CheckAppleIdReust").Split(','); + string text2 = ""; + string[] array3 = array2; + for (int i = 0; i < array3.Length; i++) + { + string[] array4 = array3[i].Split('|'); + if (webJsonContent.Html.Contains(array4[0])) + { + text2 = array4[1] + ","; + } + } + text2 = text2.TrimEnd(','); + if (string.IsNullOrEmpty(text2)) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正常账号"); + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, text2); + } + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在获取重设方式"); + if (webJsonContent.Html.Contains("reset_password") && webJsonContent.Header.AllKeys.Contains("sstt")) + { + sstt = webJsonContent.Header["sstt"]; + webHeaderCollection["sstt"] = sstt; + webHeaderCollection["X-Apple-I-FD-Client-Info"] = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + HttpResult httpResult2 = postWebContent("https://iforgot.apple.com/recovery/options", "{\"recoveryOption\":\"reset_password\"}", "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (httpResult2.StatusCode == HttpStatusCode.Found) + { + webJsonContent = getWebJsonContent(httpResult2.RedirectUrl, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (webJsonContent.StatusCode == HttpStatusCode.OK && !webJsonContent.Html.Contains("questions") && !webJsonContent.RedirectUrl.ToLower().StartsWith("https://iforgot.apple.com/password/verify/birthday")) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "没有重设密码的方式"); + return false; + } + } + } + if (!webJsonContent.Html.Contains("questions") && !webJsonContent.RedirectUrl.ToLower().StartsWith("https://iforgot.apple.com/password/verify/birthday")) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "没有重设密码的方式"); + return false; + } + sstt = webJsonContent.Header["sstt"]; + webHeaderCollection["sstt"] = sstt; + webHeaderCollection["X-Apple-I-FD-Client-Info"] = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + if (!webJsonContent.Html.Contains("questions")) + { + return VerifyBirthday(webJsonContent.RedirectUrl, acount, newPwd, webHeaderCollection); + } + string postData2 = "{\"type\":\"questions\"}"; + HttpResult httpResult3 = postWebContent("https://iforgot.apple.com/password/authenticationmethod", postData2, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (httpResult3.StatusCode == HttpStatusCode.Found && httpResult3.RedirectUrl.Contains("https://iforgot.apple.com/error")) + { + int num3 = new Random(Guid.NewGuid().GetHashCode()).Next(1, 5); + Thread.Sleep(1000 * num3); + httpResult3 = postWebContent("https://iforgot.apple.com/password/authenticationmethod", postData2, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + } + if (httpResult3.StatusCode == HttpStatusCode.Found) + { + if (httpResult3.RedirectUrl.Contains("https://iforgot.apple.com/error")) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密保选择加载失败."); + return false; + } + return VerifyBirthday(httpResult3.RedirectUrl, acount, newPwd, webHeaderCollection); + } + } + } + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "未知错误#2"); + return false; + } + if (httpResult.Html.Contains("captchaAnswer.Invalid")) + { + APIUtlis.getCaptcha(2, captchaModel.payload.content); + return verifyAppleid(sstt, acount, newPwd, isCloseAuthen, RetryCount + 1, ckTailNumber); + } + ServiceErrorsModel serviceErrorsModel2 = Tools.Todejosn(httpResult.Html); + if (serviceErrorsModel2 != null) + { + if (serviceErrorsModel2.validationErrors != null && serviceErrorsModel2.validationErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel2.validationErrors[0].message); + return false; + } + if (serviceErrorsModel2.service_errors != null && serviceErrorsModel2.service_errors.Length != 0) + { + string message2 = serviceErrorsModel2.service_errors[0].message; + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel2.service_errors[0].message); + if (CheckAppleId && !message2.Contains("未知") && !message2.Contains("错误")) + { + return true; + } + return false; + } + if (serviceErrorsModel2.serviceErrors != null && serviceErrorsModel2.serviceErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel2.serviceErrors[0].message); + return false; + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "请求失败"); + } + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证码获取失败#2"); + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证码获取失败"); + return false; + } + + private bool VerifyBirthday(string RedirectUrl, AppleAcount acount, string newPwd, WebHeaderCollection webHeader) + { + string text = ""; + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在验证生日"); + HttpResult webJsonContent = getWebJsonContent(RedirectUrl, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + text = webJsonContent.Header["sstt"]; + webHeader["sstt"] = text; + string[] array = acount.birthday.Split('-'); + string postData = "{\"monthOfYear\":\"" + array[1] + "\",\"dayOfMonth\":\"" + array[2] + "\",\"year\":\"" + array[0] + "\"}"; + HttpResult httpResult = postWebContent("https://iforgot.apple.com/password/verify/birthday", postData, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (httpResult.StatusCode != HttpStatusCode.Found) + { + if (httpResult.StatusCode == HttpStatusCode.BadRequest) + { + ServiceErrorsModel serviceErrors = Tools.Todejosn(httpResult.Html); + string serviceError = getServiceError(serviceErrors); + if (!string.IsNullOrEmpty(serviceError)) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "生日验证失败:" + serviceError); + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证生日出现未知错误"); + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "网络异常...#Birthday," + (int)httpResult.StatusCode); + return false; + } + if (!httpResult.RedirectUrl.ToLower().StartsWith("https://iforgot.apple.com/password/authenticationmethod")) + { + return VerifyQuestions(httpResult.RedirectUrl, acount, newPwd, webHeader); + } + webHeader["X-Apple-I-FD-Client-Info"] = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + HttpResult webJsonContent2 = getWebJsonContent(httpResult.RedirectUrl, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (webJsonContent2.StatusCode != HttpStatusCode.OK) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密保获取失败2"); + return false; + } + if (!webJsonContent2.Html.Contains("questions")) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "没有重设密码的方式#2"); + return false; + } + text = webJsonContent2.Header["sstt"]; + webHeader["sstt"] = text; + HttpResult httpResult2 = postWebContent("https://iforgot.apple.com/password/authenticationmethod", "{\"type\":\"questions\"}", "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (httpResult2.StatusCode == HttpStatusCode.Found) + { + return VerifyQuestions(httpResult2.RedirectUrl, acount, newPwd, webHeader); + } + } + return false; + } + + public bool VerifyQuestions(string RedirectUrl, AppleAcount acount, string newPwd, WebHeaderCollection webHeader) + { + string text = ""; + HttpResult webJsonContent = getWebJsonContent(RedirectUrl, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + int num = 0; + HttpResult httpResult; + while (true) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在验证密保"); + text = webJsonContent.Header["sstt"]; + webHeader["sstt"] = text; + AothQuestions aothQuestions = Tools.Todejosn(webJsonContent.Html); + string[] array = new string[3] { acount.appleQt1, acount.appleQt2, acount.appleQt3 }; + AothQuestions aothQuestions2 = new AothQuestions(); + aothQuestions2.questions = new AothQuestions.Question[2]; + int num2 = 0; + AothQuestions.Question[] questions = aothQuestions.questions; + foreach (AothQuestions.Question question in questions) + { + string answer = array[Tools.getAnwerId_Index(question.id) - 1]; + aothQuestions2.questions[num2] = new AothQuestions.Question + { + id = question.id, + answer = answer, + number = question.number, + question = question.question + }; + num2++; + } + string postData = Tools.Toenjson(aothQuestions2); + httpResult = postWebContent("https://iforgot.apple.com/password/verify/questions", postData, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (httpResult.StatusCode == HttpStatusCode.Found) + { + HttpResult webJsonContent2 = getWebJsonContent(httpResult.RedirectUrl, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (webJsonContent2.StatusCode == HttpStatusCode.Found) + { + text = httpResult.Header["sstt"]; + webHeader["sstt"] = text; + return restPwd(webJsonContent2.RedirectUrl, newPwd, webHeader); + } + if (webJsonContent2.StatusCode == HttpStatusCode.OK && webJsonContent2.Html.Contains("unlock_account")) + { + text = webJsonContent2.Header["sstt"]; + webHeader["sstt"] = text; + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在解锁密码"); + HttpResult httpResult2 = postWebContent("https://iforgot.apple.com/password/reset/options", "{\"type\":\"unlock_account\"}", "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (httpResult2.StatusCode == HttpStatusCode.Found) + { + HttpResult webJsonContent3 = getWebJsonContent(httpResult2.RedirectUrl, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (webJsonContent3.StatusCode == HttpStatusCode.OK) + { + text = webJsonContent3.Header["sstt"]; + webHeader["sstt"] = text; + HttpResult httpResult3 = postWebContent("https://iforgot.apple.com/password/unlock/forgot", "{}", "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (httpResult3.StatusCode == HttpStatusCode.Found) + { + return restPwd(httpResult3.RedirectUrl, newPwd, webHeader); + } + } + } + } + } + else + { + if (httpResult.StatusCode != HttpStatusCode.BadRequest) + { + break; + } + ServiceErrorsModel serviceErrors = Tools.Todejosn(httpResult.Html); + string serviceError = getServiceError(serviceErrors); + if (string.IsNullOrEmpty(serviceError)) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证密保出现未知错误"); + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证密保失败:" + serviceError); + if (!serviceError.Contains("发生未知错误") || num >= base.MaxRetryCount) + { + return false; + } + Thread.Sleep(3000); + if (num != 0) + { + base.ProxyIp = ""; + } + num++; + } + if (num >= base.MaxRetryCount) + { + return false; + } + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, string.Concat("验证密保出现未知错误#1(", httpResult.StatusCode, ")")); + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证密保获取失败"); + return false; + } + + private bool restPwd(string RedirectUrl, string newPwd, WebHeaderCollection webHeader, int retry = 0) + { + HttpResult webJsonContent = getWebJsonContent(RedirectUrl, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + string value = webJsonContent.Header["sstt"]; + webHeader["sstt"] = value; + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在设置新密码"); + HttpResult httpResult = postWebContent("https://iforgot.apple.com/password/reset", "{\"password\":\"" + newPwd + "\"}", "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (httpResult.StatusCode == HttpStatusCode.BadRequest || httpResult.StatusCode == HttpStatusCode.Unauthorized) + { + ServiceErrorsModel serviceErrorsModel = Tools.Todejosn(httpResult.Html); + if (serviceErrorsModel != null) + { + string serviceError = getServiceError(serviceErrorsModel); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "设置密码异常:" + serviceError); + if (serviceError.Contains("不能包含") || serviceError.Contains("未使用过的密码")) + { + acount.notRepeatPwd = true; + } + if (serviceError.Contains("发生未知错误") && retry < base.MaxRetryCount) + { + Thread.Sleep(3000); + if (retry != 0) + { + base.ProxyIp = ""; + } + return restPwd(RedirectUrl, newPwd, webHeader, retry + 1); + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "请求失败"); + } + return false; + } + if (httpResult.StatusCode == (HttpStatusCode)260) + { + action?.Invoke(base.noticeKey, DisplyType.mima, newPwd); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密码重置完成"); + AppSysConfig.proxyModels.Push(new ProxyModel2 + { + prixyIp = base.ProxyIp, + applyDate = DateTime.Now + }); + return true; + } + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "未知错误"); + return false; + } + + public bool unenrollment(string sstt, AppleAcount acount, string newPwd) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在关闭双重认证"); + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + webHeaderCollection.Add("sstt", sstt); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + HttpResult webContent = getWebContent("https://iforgot.apple.com/password/verify/phone", "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (webContent.StatusCode == HttpStatusCode.OK) + { + sstt = new Regex(AppSysConfig.getConfig("Regex_unenrollment")).Match(AppleNetworkBase.GetToken(webContent.Html, "boot_args", "script")).Groups[1].Value.Replace("\"", "").Replace(":", "").Replace(" ", "") + .Trim(); + webContent.Html.Contains("forgotPasswordFlow\":true}"); + if (!string.IsNullOrEmpty(sstt)) + { + sstt = HttpUtility.UrlEncode(sstt); + webHeaderCollection["sstt"] = sstt; + webHeaderCollection["X-Apple-I-FD-Client-Info"] = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + HttpResult httpResult = postWebContent("https://iforgot.apple.com/password/verify/phone/unenrollment", "", "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (httpResult.StatusCode == HttpStatusCode.NotFound) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "该账户双重无法关闭"); + return false; + } + if (httpResult.StatusCode == HttpStatusCode.Found) + { + HttpResult webJsonContent = getWebJsonContent(httpResult.RedirectUrl, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + sstt = webJsonContent.Header["sstt"]; + webHeaderCollection["sstt"] = sstt; + webHeaderCollection["X-Apple-I-FD-Client-Info"] = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在验证生日信息"); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + sstt = webJsonContent.Header["sstt"]; + webHeaderCollection["sstt"] = sstt; + string[] array = acount.birthday.Split('-'); + string postData = "{\"monthOfYear\":\"" + array[1].PadLeft(2, '0') + "\",\"dayOfMonth\":\"" + array[2].PadLeft(2, '0') + "\",\"year\":\"" + array[0] + "\"}"; + HttpResult httpResult2 = postWebContent("https://iforgot.apple.com/unenrollment/verify/birthday", postData, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (httpResult2.StatusCode == HttpStatusCode.Found) + { + HttpResult webJsonContent2 = getWebJsonContent(httpResult2.RedirectUrl, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (webJsonContent2.StatusCode == HttpStatusCode.OK) + { + int num = 0; + HttpResult httpResult3; + while (true) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在验证密保"); + sstt = webJsonContent2.Header["sstt"]; + webHeaderCollection["sstt"] = sstt; + AothQuestions aothQuestions = Tools.Todejosn(webJsonContent2.Html); + string[] array2 = new string[3] { acount.appleQt1, acount.appleQt2, acount.appleQt3 }; + AothQuestions aothQuestions2 = new AothQuestions(); + aothQuestions2.questions = new AothQuestions.Question[2]; + int num2 = 0; + AothQuestions.Question[] questions = aothQuestions.questions; + foreach (AothQuestions.Question question in questions) + { + string answer = array2[Tools.getAnwerId_Index(question.id) - 1]; + aothQuestions2.questions[num2] = new AothQuestions.Question + { + id = question.id, + answer = answer, + number = question.number, + question = question.question + }; + num2++; + } + string postData2 = Tools.Toenjson(aothQuestions2); + httpResult3 = postWebContent("https://iforgot.apple.com/unenrollment/verify/questions", postData2, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (httpResult3.StatusCode == HttpStatusCode.Found && httpResult3.RedirectUrl.Contains("/error")) + { + Thread.Sleep(2000); + httpResult3 = postWebContent("https://iforgot.apple.com/unenrollment/verify/questions", postData2, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + } + if (httpResult3.StatusCode != HttpStatusCode.Found) + { + if (httpResult3.StatusCode != HttpStatusCode.BadRequest) + { + break; + } + ServiceErrorsModel serviceErrors = Tools.Todejosn(httpResult3.Html); + string serviceError = getServiceError(serviceErrors); + if (!string.IsNullOrEmpty(serviceError)) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证密保失败:" + serviceError); + if (serviceError.Contains("发生未知错误") && num < base.MaxRetryCount) + { + Thread.Sleep(3000); + if (num != 0) + { + base.ProxyIp = ""; + } + num++; + if (num >= base.MaxRetryCount) + { + return false; + } + continue; + } + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证密保出现未知错误"); + return false; + } + if (httpResult3.RedirectUrl == "https://iforgot.apple.com/error") + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密保验证返回错误。"); + return false; + } + return unenrollmentRestPwd(httpResult3.RedirectUrl, newPwd, webHeaderCollection); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, string.Concat("验证密保出现未知错误#1(", httpResult3.StatusCode, ")")); + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证密保获取失败"); + return false; + } + if (httpResult2.StatusCode == HttpStatusCode.BadRequest) + { + ServiceErrorsModel serviceErrors2 = Tools.Todejosn(httpResult2.Html); + string serviceError2 = getServiceError(serviceErrors2); + if (!string.IsNullOrEmpty(serviceError2)) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "生日验证失败:" + serviceError2); + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证生日出现未知错误"); + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "网络异常...2#Birthday," + (int)httpResult2.StatusCode); + return false; + } + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "网络异常"); + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "网络异常"); + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "双重手机号码认证失败"); + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "双重手机号码获取失败"); + } + return false; + } + + private bool unenrollmentRestPwd(string RedirectUrl, string newPwd, WebHeaderCollection webHeader, int retry = 0) + { + HttpResult webJsonContent = getWebJsonContent(RedirectUrl, "https://iforgot.apple.com/unenrollment/verify/appleid?language=" + language, webHeader); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + string value = webJsonContent.Header["sstt"]; + webHeader["sstt"] = value; + webHeader["X-Apple-I-FD-Client-Info"] = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + HttpResult httpResult = postWebContent("https://iforgot.apple.com/unenrollment", "", "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (httpResult.StatusCode == HttpStatusCode.Found) + { + value = httpResult.Header["sstt"]; + webHeader["sstt"] = value; + webHeader["X-Apple-I-FD-Client-Info"] = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在设置新密码"); + HttpResult httpResult2 = postWebContent("https://iforgot.apple.com/unenrollment/reset", "{\"password\":\"" + newPwd + "\"}", "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader, "application/json, text/javascript, *; q=0.01"); + if (httpResult2.StatusCode == HttpStatusCode.BadRequest || httpResult2.StatusCode == HttpStatusCode.Unauthorized) + { + ServiceErrorsModel serviceErrorsModel = Tools.Todejosn(httpResult2.Html); + if (serviceErrorsModel != null) + { + string serviceError = getServiceError(serviceErrorsModel); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "设置新密码异常:" + serviceError); + if (serviceError.Contains("不能包含") || serviceError.Contains("未使用过的密码")) + { + acount.notRepeatPwd = true; + } + if (serviceError.Contains("发生未知错误") && retry < base.MaxRetryCount) + { + Thread.Sleep(3000); + if (retry != 0) + { + base.ProxyIp = ""; + } + return unenrollmentRestPwd(RedirectUrl, newPwd, webHeader, retry + 1); + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "请求失败"); + } + return false; + } + if (httpResult2.StatusCode == (HttpStatusCode)260) + { + acount.applePwd = newPwd; + action?.Invoke(base.noticeKey, DisplyType.mima, newPwd); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "双重关闭成功,密码重置完成"); + return true; + } + } + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "未知错误"); + return false; + } + + private CaptchaModel getCaptcha(string sstt) + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + webHeaderCollection.Add("sstt", sstt); + HttpResult httpResult = postWebContent("https://iforgot.apple.com/captcha", "{\"type\":\"IMAGE\"}", "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + return Tools.Todejosn(httpResult.Html); + } + return null; + } + } +} diff --git a/AppleBatch_June.AppleWebServace/AuthsigninConfig.cs b/AppleBatch_June.AppleWebServace/AuthsigninConfig.cs new file mode 100644 index 0000000..b3e7370 --- /dev/null +++ b/AppleBatch_June.AppleWebServace/AuthsigninConfig.cs @@ -0,0 +1,26 @@ +namespace AppleBatch_June.AppleWebServace +{ + public class AuthsigninConfig + { + public string Apple_Widget_Key { get; set; } = ""; + + + public string iframeId { get; set; } = ""; + + + public string redirectURI { get; set; } = ""; + + + public string homeLanguage { get; set; } = ""; + + + public string authUrl { get; set; } = ""; + + + public string refererUrl { get; set; } = "https://appleid.apple.com"; + + + public string domainId { get; set; } = ""; + + } +} diff --git a/AppleBatch_June.Domain/CountryCodeData.cs b/AppleBatch_June.Domain/CountryCodeData.cs new file mode 100644 index 0000000..66e9f08 --- /dev/null +++ b/AppleBatch_June.Domain/CountryCodeData.cs @@ -0,0 +1,95 @@ +using System.Collections.Generic; +using System.Data; +using System.Net; +using System.Web.Script.Serialization; +using AppleBatch_June.Model; +using DotNet.Utilities; + +namespace AppleBatch_June.Domain +{ + public class CountryCodeData + { + private static string countryJson = string.Empty; + + private static string countryBriefJson = string.Empty; + + public DataTable getDataBriefTable() + { + if (countryBriefJson == string.Empty) + { + HttpResult html = new HttpHelper().GetHtml(new HttpItem + { + URL = ApiNetReq.host + "/js/cuntryBriefData.json", + Timeout = 8000 + }); + if (html.StatusCode == HttpStatusCode.OK) + { + countryBriefJson = html.Html; + } + if (string.IsNullOrEmpty(countryBriefJson)) + { + countryBriefJson = "[{\"id\":\"143465\",\"area\":\"cn\",\"description\":\"143465-19,12\"},{\"id\":\"143465\",\"area\":\"cn\",\"description\":\"143465-19,17\"},{\"id\":\"143470\",\"area\":\"tw\",\"description\":\"143470-18,12\"},{\"id\":\"143463\",\"area\":\"hk\",\"description\":\"143463-18,12\"},{\"id\":\"1434515\",\"area\":\"mo\",\"description\":\"1434515-18,12\"},{\"id\":\"143441\",\"area\":\"us\",\"description\":\"143441-1,12\"},{\"id\":\"143455\",\"area\":\"ca\",\"description\":\"143455-6,12\"},{\"id\":\"143466\",\"area\":\"kr\",\"description\":\"143466,12\"},{\"id\":\"143462\",\"area\":\"jp\",\"description\":\"143462-9,12\"},{\"id\":\"143464\",\"area\":\"sg\",\"description\":\"143464-1,12\"},{\"id\":\"143460\",\"area\":\"au\",\"description\":\"143460-27,17\"},{\"id\":\"143560\",\"area\":\"bn\",\"description\":\"143560,12\"},{\"id\":\"143476\",\"area\":\"id\",\"description\":\"143476-2,12\"},{\"id\":\"143517\",\"area\":\"kz\",\"description\":\"143517,12\"},{\"id\":\"143473\",\"area\":\"my\",\"description\":\"143473-2,12\"},{\"id\":\"143461\",\"area\":\"nz\",\"description\":\"143461,12\"},{\"id\":\"143477\",\"area\":\"pk\",\"description\":\"143477,12\"},{\"id\":\"143474\",\"area\":\"ph\",\"description\":\"143474,12\"},{\"id\":\"143486\",\"area\":\"lk\",\"description\":\"143486,12\"},{\"id\":\"143475\",\"area\":\"th\",\"description\":\"143475,12\"},{\"id\":\"143566\",\"area\":\"uz\",\"description\":\"143566,12\"},{\"id\":\"143471\",\"area\":\"vn\",\"description\":\"143471-2,12\"},{\"id\":\"143565\",\"area\":\"by\",\"description\":\"143565,12\"},{\"id\":\"143446\",\"area\":\"be\",\"description\":\"143446-2,12\"},{\"id\":\"143526\",\"area\":\"bg\",\"description\":\"143526,12\"},{\"id\":\"143494\",\"area\":\"hr\",\"description\":\"143494,12\"},{\"id\":\"143557\",\"area\":\"cy\",\"description\":\"143557,12\"},{\"id\":\"143489\",\"area\":\"cz\",\"description\":\"143489,12\"},{\"id\":\"143458\",\"area\":\"dk\",\"description\":\"143458-2,12\"},{\"id\":\"143443\",\"area\":\"de\",\"description\":\"143443,12\"},{\"id\":\"143454\",\"area\":\"es\",\"description\":\"143454-8,12\"},{\"id\":\"143518\",\"area\":\"ee\",\"description\":\"143518,12\"},{\"id\":\"143447\",\"area\":\"fi\",\"description\":\"143447-2,12\"},{\"id\":\"143442\",\"area\":\"fr\",\"description\":\"143442,12\"},{\"id\":\"143448\",\"area\":\"gr\",\"description\":\"143448,12\"},{\"id\":\"143482\",\"area\":\"hu\",\"description\":\"143482,12\"},{\"id\":\"143558\",\"area\":\"is\",\"description\":\"143558,12\"},{\"id\":\"143449\",\"area\":\"ie\",\"description\":\"143449,12\"},{\"id\":\"143450\",\"area\":\"it\",\"description\":\"143450,12\"},{\"id\":\"143519\",\"area\":\"lv\",\"description\":\"143519,12\"},{\"id\":\"143520\",\"area\":\"lt\",\"description\":\"143520,12\"},{\"id\":\"143451\",\"area\":\"lu\",\"description\":\"143451-2,12\"},{\"id\":\"143530\",\"area\":\"mk\",\"description\":\"143530,12\"},{\"id\":\"143521\",\"area\":\"mt\",\"description\":\"143521,12\"},{\"id\":\"143523\",\"area\":\"md\",\"description\":\"143523,12\"},{\"id\":\"143452\",\"area\":\"nl\",\"description\":\"143452,12\"},{\"id\":\"143457\",\"area\":\"no\",\"description\":\"143457-2,12\"},{\"id\":\"143445\",\"area\":\"at\",\"description\":\"143445,12\"},{\"id\":\"143478\",\"area\":\"pl\",\"description\":\"143478,12\"},{\"id\":\"143453\",\"area\":\"pt\",\"description\":\"143453-2,12\"},{\"id\":\"143487\",\"area\":\"ro\",\"description\":\"143487,12\"},{\"id\":\"143496\",\"area\":\"sk\",\"description\":\"143496,12\"},{\"id\":\"143499\",\"area\":\"si\",\"description\":\"143499,12\"},{\"id\":\"143456\",\"area\":\"se\",\"description\":\"143456-2,12\"},{\"id\":\"143459\",\"area\":\"ch\",\"description\":\"143459-2,12\"},{\"id\":\"143480\",\"area\":\"tr\",\"description\":\"143480-2,12\"},{\"id\":\"143444\",\"area\":\"gb\",\"description\":\"143444,12\"},{\"id\":\"143469\",\"area\":\"ru\",\"description\":\"143469,12\"},{\"id\":\"143563\",\"area\":\"dz\",\"description\":\"143563,12\"},{\"id\":\"143564\",\"area\":\"ao\",\"description\":\"143564,12\"},{\"id\":\"143524\",\"area\":\"am\",\"description\":\"143524,12\"},{\"id\":\"143568\",\"area\":\"az\",\"description\":\"143568,12\"},{\"id\":\"143559\",\"area\":\"bh\",\"description\":\"143559,12\"},{\"id\":\"143525\",\"area\":\"bw\",\"description\":\"143525,12\"},{\"id\":\"143516\",\"area\":\"eg\",\"description\":\"143516,12\"},{\"id\":\"143573\",\"area\":\"gh\",\"description\":\"143573,12\"},{\"id\":\"143467\",\"area\":\"in\",\"description\":\"143467,12\"},{\"id\":\"143491\",\"area\":\"il\",\"description\":\"143491,12\"},{\"id\":\"143528\",\"area\":\"jo\",\"description\":\"143528,12\"},{\"id\":\"143529\",\"area\":\"ke\",\"description\":\"143529,12\"},{\"id\":\"143493\",\"area\":\"kw\",\"description\":\"143493,12\"},{\"id\":\"143497\",\"area\":\"lb\",\"description\":\"143497,12\"},{\"id\":\"143531\",\"area\":\"mg\",\"description\":\"143531,12\"},{\"id\":\"143532\",\"area\":\"ml\",\"description\":\"143532,12\"},{\"id\":\"143533\",\"area\":\"mu\",\"description\":\"143533,12\"},{\"id\":\"143534\",\"area\":\"ne\",\"description\":\"143534,12\"},{\"id\":\"143561\",\"area\":\"ng\",\"description\":\"143561,12\"},{\"id\":\"143562\",\"area\":\"om\",\"description\":\"143562,12\"},{\"id\":\"143498\",\"area\":\"qa\",\"description\":\"143498,12\"},{\"id\":\"143479\",\"area\":\"sa\",\"description\":\"143479,12\"},{\"id\":\"143535\",\"area\":\"sn\",\"description\":\"143535,12\"},{\"id\":\"143472\",\"area\":\"za\",\"description\":\"143472,12\"},{\"id\":\"143572\",\"area\":\"tz\",\"description\":\"143572,12\"},{\"id\":\"143536\",\"area\":\"tn\",\"description\":\"143536,12\"},{\"id\":\"143481\",\"area\":\"ae\",\"description\":\"143481,12\"},{\"id\":\"143537\",\"area\":\"ug\",\"description\":\"143537,12\"},{\"id\":\"143571\",\"area\":\"ye\",\"description\":\"143571,12\"},{\"id\":\"143538\",\"area\":\"ai\",\"description\":\"143538,12\"},{\"id\":\"143540\",\"area\":\"ag\",\"description\":\"143540,12\"},{\"id\":\"143505\",\"area\":\"ar\",\"description\":\"143505-2,12\"},{\"id\":\"143539\",\"area\":\"bs\",\"description\":\"143539,12\"},{\"id\":\"143541\",\"area\":\"bb\",\"description\":\"143541,12\"},{\"id\":\"143555\",\"area\":\"bz\",\"description\":\"143555-2,12\"},{\"id\":\"143542\",\"area\":\"bm\",\"description\":\"143542,12\"},{\"id\":\"143556\",\"area\":\"bo\",\"description\":\"143556-2,12\"},{\"id\":\"143503\",\"area\":\"br\",\"description\":\"143503,12\"},{\"id\":\"143543\",\"area\":\"vg\",\"description\":\"143543,12\"},{\"id\":\"143544\",\"area\":\"ky\",\"description\":\"143544,12\"},{\"id\":\"143483\",\"area\":\"cl\",\"description\":\"143483-2,12\"},{\"id\":\"143501\",\"area\":\"co\",\"description\":\"143501-2,12\"},{\"id\":\"143495\",\"area\":\"cr\",\"description\":\"143495-2,12\"},{\"id\":\"143545\",\"area\":\"dm\",\"description\":\"143545,12\"},{\"id\":\"143508\",\"area\":\"do\",\"description\":\"143508-2,12\"},{\"id\":\"143509\",\"area\":\"ec\",\"description\":\"143509-2,12\"},{\"id\":\"143506\",\"area\":\"sv\",\"description\":\"143506-2,12\"},{\"id\":\"143546\",\"area\":\"gd\",\"description\":\"143546,12\"},{\"id\":\"143504\",\"area\":\"gt\",\"description\":\"143504-2,12\"},{\"id\":\"143553\",\"area\":\"gy\",\"description\":\"143553,12\"},{\"id\":\"143510\",\"area\":\"hn\",\"description\":\"143510-2,12\"},{\"id\":\"143511\",\"area\":\"jm\",\"description\":\"143511,12\"},{\"id\":\"143468\",\"area\":\"mx\",\"description\":\"143468,12\"},{\"id\":\"143547\",\"area\":\"ms\",\"description\":\"143547,12\"},{\"id\":\"143512\",\"area\":\"ni\",\"description\":\"143512-2,12\"},{\"id\":\"143485\",\"area\":\"pa\",\"description\":\"143485-2,12\"},{\"id\":\"143513\",\"area\":\"py\",\"description\":\"143513-2,12\"},{\"id\":\"143507\",\"area\":\"pe\",\"description\":\"143507-2,12\"},{\"id\":\"143548\",\"area\":\"kn\",\"description\":\"143548,12\"},{\"id\":\"143549\",\"area\":\"lc\",\"description\":\"143549,12\"},{\"id\":\"143550\",\"area\":\"vc\",\"description\":\"143550,12\"},{\"id\":\"143554\",\"area\":\"sr\",\"description\":\"143554-2,12\"},{\"id\":\"143551\",\"area\":\"tt\",\"description\":\"143551,12\"},{\"id\":\"143552\",\"area\":\"tc\",\"description\":\"143552,12\"},{\"id\":\"143514\",\"area\":\"uy\",\"description\":\"143514-2,12\"},{\"id\":\"143502\",\"area\":\"ve\",\"description\":\"143502-2,12\"}]"; + } + new SelectShippingOptionNullData().getSelectShippingOption(); + } + DataTable dataTable = new DataTable(); + dataTable.Columns.Clear(); + dataTable.Columns.Add("id", typeof(string)); + dataTable.Columns.Add("area", typeof(string)); + dataTable.Columns.Add("description", typeof(string)); + if (countryBriefJson != string.Empty) + { + foreach (CountryCodeModel item in new JavaScriptSerializer().Deserialize>(countryBriefJson)) + { + string id = item.id; + string area = item.area; + string description = item.description; + dataTable.Rows.Add(id, area, description); + } + return dataTable; + } + return dataTable; + } + + public DataTable getDataTable() + { + if (countryJson == string.Empty) + { + HttpResult html = new HttpHelper().GetHtml(new HttpItem + { + URL = ApiNetReq.host + "/js/countryCodeData.json", + Timeout = 8000 + }); + if (html.StatusCode == HttpStatusCode.OK) + { + countryJson = html.Html; + } + if (string.IsNullOrEmpty(countryJson)) + { + countryJson = "[{\"name\":\"中国大陆\",\"area\":\"cn\",\"description\":\"143465-19,17\",\"code\":\"CHN\",\"displayName\":\"CHINA\"},{\"name\":\"台湾\",\"area\":\"tw\",\"description\":\"143470-18,17\",\"code\":\"TWN\",\"displayName\":\"TAIWAN\"},{\"name\":\"香港\",\"area\":\"hk\",\"description\":\"143463-18,17\",\"code\":\"HKG\",\"displayName\":\"HONG_KONG\"},{\"name\":\"澳门\",\"area\":\"mo\",\"description\":\"1434515-18,17\",\"code\":\"MAC\",\"displayName\":\"MACAO\"},{\"name\":\"美国\",\"area\":\"us\",\"description\":\"143441-1,17\",\"code\":\"USA\",\"displayName\":\"UNITED_STATES\"},{\"name\":\"加拿大\",\"area\":\"ca\",\"description\":\"143455-6,17\",\"code\":\"CAN\",\"displayName\":\"CANADA\"},{\"name\":\"韩国\",\"area\":\"kr\",\"description\":\"143466,17\",\"code\":\"KOR\",\"displayName\":\"SOUTH_KOREA\"},{\"name\":\"日本\",\"area\":\"jp\",\"description\":\"143462-9,17\",\"code\":\"JPN\",\"displayName\":\"JAPAN\"},{\"name\":\"新加坡\",\"area\":\"sg\",\"description\":\"143464-19,17\",\"code\":\"SGP\",\"displayName\":\"SINGAPORE\"},{\"name\":\"澳大利亚\",\"area\":\"au\",\"description\":\"143460-27,17\",\"code\":\"AUS\",\"displayName\":\"AUSTRALIA\"},{\"name\":\"文莱\",\"area\":\"bn\",\"description\":\"143560,17\",\"code\":\"BRN\",\"displayName\":\"BRUNEI_DARUSSALAM\"},{\"name\":\"印度尼西亚\",\"area\":\"id\",\"description\":\"143476-2,17\",\"code\":\"IDN\",\"displayName\":\"INDONESIA\"},{\"name\":\"哈萨克斯坦\",\"area\":\"kz\",\"description\":\"143517,17\",\"code\":\"KAZ\",\"displayName\":\"KAZAKHSTAN\"},{\"name\":\"马来西亚\",\"area\":\"my\",\"description\":\"143473-2,17\",\"code\":\"MYS\",\"displayName\":\"MALAYSIA\"},{\"name\":\"新西兰\",\"area\":\"nz\",\"description\":\"143461,17\",\"code\":\"NZL\",\"displayName\":\"NEW_ZEALAND\"},{\"name\":\"巴基斯坦\",\"area\":\"pk\",\"description\":\"143477,17\",\"code\":\"PAK\",\"displayName\":\"PAKISTAN\"},{\"name\":\"菲律宾\",\"area\":\"ph\",\"description\":\"143474,17\",\"code\":\"PHL\",\"displayName\":\"PHILIPPINES\"},{\"name\":\"斯里兰卡\",\"area\":\"lk\",\"description\":\"143486,17\",\"code\":\"LKA\",\"displayName\":\"SRI_LANKA\"},{\"name\":\"泰国\",\"area\":\"th\",\"description\":\"143475,17\",\"code\":\"THA\",\"displayName\":\"THAILAND\"},{\"name\":\"乌兹别克斯坦\",\"area\":\"uz\",\"description\":\"143566,17\",\"code\":\"UZB\",\"displayName\":\"UZBEKISTAN\"},{\"name\":\"越南\",\"area\":\"vn\",\"description\":\"143471-2,17\",\"code\":\"VNM\",\"displayName\":\"VIETNAM\"},{\"name\":\"白俄罗斯\",\"area\":\"by\",\"description\":\"143565,17\",\"code\":\"BLR\",\"displayName\":\"BELARUS\"},{\"name\":\"比利时\",\"area\":\"be\",\"description\":\"143446-2,17\",\"code\":\"BEL\",\"displayName\":\"BELGIUM\"},{\"name\":\"保加利亚\",\"area\":\"bg\",\"description\":\"143526,17\",\"code\":\"BGR\",\"displayName\":\"BULGARIA\"},{\"name\":\"克罗地亚\",\"area\":\"hr\",\"description\":\"143494,17\",\"code\":\"HRV\",\"displayName\":\"CROATIA\"},{\"name\":\"塞浦路斯\",\"area\":\"cy\",\"description\":\"143557,17\",\"code\":\"CYP\",\"displayName\":\"CYPRUS\"},{\"name\":\"捷克\",\"area\":\"cz\",\"description\":\"143489,17\",\"code\":\"CZE\",\"displayName\":\"CZECHIA\"},{\"name\":\"丹麦\",\"area\":\"dk\",\"description\":\"143458-2,17\",\"code\":\"DNK\",\"displayName\":\"DENMARK\"},{\"name\":\"德国\",\"area\":\"de\",\"description\":\"143443,17\",\"code\":\"DEU\",\"displayName\":\"GERMANY\"},{\"name\":\"西班牙\",\"area\":\"es\",\"description\":\"143454-8,17\",\"code\":\"ESP\",\"displayName\":\"SPAIN\"},{\"name\":\"爱沙尼\",\"area\":\"ee\",\"description\":\"143518,17\",\"code\":\"EST\",\"displayName\":\"ESTONIA\"},{\"name\":\"芬兰\",\"area\":\"fi\",\"description\":\"143447-2,17\",\"code\":\"FIN\",\"displayName\":\"FINLAND\"},{\"name\":\"法国\",\"area\":\"fr\",\"description\":\"143442,17\",\"code\":\"FRA\",\"displayName\":\"FRANCE\"},{\"name\":\"希腊\",\"area\":\"gr\",\"description\":\"143448,17\",\"code\":\"GRC\",\"displayName\":\"GREECE\"},{\"name\":\"匈牙利\",\"area\":\"hu\",\"description\":\"143482,17\",\"code\":\"HUN\",\"displayName\":\"HUNGARY\"},{\"name\":\"冰岛\",\"area\":\"ic\",\"description\":\"143558,17\",\"code\":\"ISL\",\"displayName\":\"ICELAND\"},{\"name\":\"爱尔兰\",\"area\":\"ie\",\"description\":\"143449,17\",\"code\":\"IRL\",\"displayName\":\"IRELAND\"},{\"name\":\"意大利\",\"area\":\"it\",\"description\":\"143450,17\",\"code\":\"ITA\",\"displayName\":\"ITALY\"},{\"name\":\"拉脱维亚\",\"area\":\"lv\",\"description\":\"143519,17\",\"code\":\"LVA\",\"displayName\":\"LATVIA\"},{\"name\":\"立陶宛\",\"area\":\"lt\",\"description\":\"143520,17\",\"code\":\"LTU\",\"displayName\":\"LITHUANIA\"},{\"name\":\"卢森堡\",\"area\":\"lu\",\"description\":\"143451-2,17\",\"code\":\"LUX\",\"displayName\":\"LUXEMBOURG\"},{\"name\":\"马其顿\",\"area\":\"mk\",\"description\":\"143530,17\",\"code\":\"MKD\",\"displayName\":\"NORTH_MACEDONIA\"},{\"name\":\"马耳他\",\"area\":\"mt\",\"description\":\"143521,17\",\"code\":\"MLT\",\"displayName\":\"MALTA\"},{\"name\":\"摩尔多瓦\",\"area\":\"md\",\"description\":\"143523,17\",\"code\":\"MDA\",\"displayName\":\"MOLDOVA\"},{\"name\":\"荷兰\",\"area\":\"nl\",\"description\":\"143452,17\",\"code\":\"NLD\",\"displayName\":\"NETHERLANDS\"},{\"name\":\"挪威\",\"area\":\"no\",\"description\":\"143457-2,17\",\"code\":\"NOR\",\"displayName\":\"NORWAY\"},{\"name\":\"奥地利\",\"area\":\"at\",\"description\":\"143445,17\",\"code\":\"AUT\",\"displayName\":\"AUSTRIA\"},{\"name\":\"波兰\",\"area\":\"pl\",\"description\":\"143478,17\",\"code\":\"POL\",\"displayName\":\"POLAND\"},{\"name\":\"葡萄牙\",\"area\":\"pt\",\"description\":\"143453-2,17\",\"code\":\"PRT\",\"displayName\":\"PORTUGAL\"},{\"name\":\"罗马尼亚\",\"area\":\"ro\",\"description\":\"143487,17\",\"code\":\"ROU\",\"displayName\":\"ROMANIA\"},{\"name\":\"斯洛伐克\",\"area\":\"sk\",\"description\":\"143496,17\",\"code\":\"SVK\",\"displayName\":\"SLOVAKIA\"},{\"name\":\"斯洛文尼亚\",\"area\":\"si\",\"description\":\"143499,17\",\"code\":\"SVN\",\"displayName\":\"SLOVENIA\"},{\"name\":\"瑞典\",\"area\":\"se\",\"description\":\"143456-2,17\",\"code\":\"SWE\",\"displayName\":\"SWEDEN\"},{\"name\":\"瑞士\",\"area\":\"ch\",\"description\":\"143459-2,17\",\"code\":\"CHE\",\"displayName\":\"SWITZERLAND\"},{\"name\":\"土耳其\",\"area\":\"tr\",\"description\":\"143480-2,17\",\"code\":\"TUR\",\"displayName\":\"TURKEY\"},{\"name\":\"英国\",\"area\":\"gb\",\"description\":\"143444,17\",\"code\":\"GBR\",\"displayName\":\"UNITED_KINGDOM\"},{\"name\":\"俄罗斯\",\"area\":\"ru\",\"description\":\"143469,17\",\"code\":\"RUS\",\"displayName\":\"RUSSIA\"},{\"name\":\"阿尔及利亚\",\"area\":\"dz\",\"description\":\"143563,17\",\"code\":\"DZA\",\"displayName\":\"ALGERIA\"},{\"name\":\"安哥拉\",\"area\":\"ao\",\"description\":\"143564,17\",\"code\":\"AGO\",\"displayName\":\"ANGOLA\"},{\"name\":\"亚美尼亚\",\"area\":\"am\",\"description\":\"143524,17\",\"code\":\"ARM\",\"displayName\":\"ARMENIA\"},{\"name\":\"阿塞拜疆\",\"area\":\"az\",\"description\":\"143568,17\",\"code\":\"AZE\",\"displayName\":\"AZERBAIJAN\"},{\"name\":\"巴林\",\"area\":\"bh\",\"description\":\"143559,17\",\"code\":\"BHR\",\"displayName\":\"BAHRAIN\"},{\"name\":\"博茨瓦纳\",\"area\":\"bw\",\"description\":\"143525,17\",\"code\":\"BWA\",\"displayName\":\"BOTSWANA\"},{\"name\":\"埃及\",\"area\":\"eg\",\"description\":\"143516,17\",\"code\":\"EGY\",\"displayName\":\"EGYPT\"},{\"name\":\"加纳\",\"area\":\"gh\",\"description\":\"143573,17\",\"code\":\"GHA\",\"displayName\":\"GHANA\"},{\"name\":\"印度\",\"area\":\"in\",\"description\":\"143467,17\",\"code\":\"IND\",\"displayName\":\"INDIA\"},{\"name\":\"以色列\",\"area\":\"il\",\"description\":\"143491,17\",\"code\":\"ISR\",\"displayName\":\"ISRAEL\"},{\"name\":\"约旦\",\"area\":\"jo\",\"description\":\"143528,17\",\"code\":\"JOR\",\"displayName\":\"JORDAN\"},{\"name\":\"肯尼亚\",\"area\":\"ke\",\"description\":\"143529,17\",\"code\":\"KEN\",\"displayName\":\"KENYA\"},{\"name\":\"科威特\",\"area\":\"kw\",\"description\":\"143493,17\",\"code\":\"KWT\",\"displayName\":\"KUWAIT\"},{\"name\":\"黎巴嫩\",\"area\":\"lb\",\"description\":\"143497,17\",\"code\":\"LBN\",\"displayName\":\"LEBANON\"},{\"name\":\"马达加斯加\",\"area\":\"mg\",\"description\":\"143531,17\",\"code\":\"MDG\",\"displayName\":\"MADAGASCAR\"},{\"name\":\"马里\",\"area\":\"ml\",\"description\":\"143532,17\",\"code\":\"MLI\",\"displayName\":\"MALI\"},{\"name\":\"毛里求斯\",\"area\":\"mu\",\"description\":\"143533,17\",\"code\":\"MUS\",\"displayName\":\"MAURITIUS\"},{\"name\":\"尼日尔\",\"area\":\"ne\",\"description\":\"143534,17\",\"code\":\"NER\",\"displayName\":\"NIGER\"},{\"name\":\"尼日利亚\",\"area\":\"ng\",\"description\":\"143561,17\",\"code\":\"NGA\",\"displayName\":\"NIGERIA\"},{\"name\":\"阿曼\",\"area\":\"om\",\"description\":\"143562,17\",\"code\":\"OMN\",\"displayName\":\"OMAN\"},{\"name\":\"卡塔尔\",\"area\":\"qa\",\"description\":\"143498,17\",\"code\":\"QAT\",\"displayName\":\"QATAR\"},{\"name\":\"沙特阿拉伯\",\"area\":\"sa\",\"description\":\"143479,17\",\"code\":\"SAU\",\"displayName\":\"SAUDI_ARABIA\"},{\"name\":\"塞内加尔\",\"area\":\"sn\",\"description\":\"143535,17\",\"code\":\"SEN\",\"displayName\":\"SENEGAL\"},{\"name\":\"南非\",\"area\":\"za\",\"description\":\"143472,17\",\"code\":\"ZAF\",\"displayName\":\"SOUTH_AFRICA\"},{\"name\":\"坦桑尼亚\",\"area\":\"tz\",\"description\":\"143572,17\",\"code\":\"TZA\",\"displayName\":\"TANZANIA\"},{\"name\":\"突尼斯\",\"area\":\"tn\",\"description\":\"143536,17\",\"code\":\"TUN\",\"displayName\":\"TUNISIA\"},{\"name\":\"阿拉伯联合酋长国\",\"area\":\"ae\",\"description\":\"143481,17\",\"code\":\"ARE\",\"displayName\":\"UNITED_ARAB_EMIRATES\"},{\"name\":\"乌干达\",\"area\":\"ug\",\"description\":\"143537,17\",\"code\":\"UGA\",\"displayName\":\"UGANDA\"},{\"name\":\"也门\",\"area\":\"ye\",\"description\":\"143571,17\",\"code\":\"YEM\",\"displayName\":\"YEMEN\"},{\"name\":\"安圭拉岛\",\"area\":\"ai\",\"description\":\"143538,17\",\"code\":\"AIA\",\"displayName\":\"ANGUILLA\"},{\"name\":\"安提瓜和巴布达\",\"area\":\"ag\",\"description\":\"143540,17\",\"code\":\"ATG\",\"displayName\":\"ANTIGUA_AND_BARBUDA\"},{\"name\":\"阿根廷\",\"area\":\"ar\",\"description\":\"143505-2,17\",\"code\":\"ARG\",\"displayName\":\"ARGENTINA\"},{\"name\":\"巴哈马\",\"area\":\"bs\",\"description\":\"143539,17\",\"code\":\"BHS\",\"displayName\":\"BAHAMAS\"},{\"name\":\"巴巴多斯\",\"area\":\"bb\",\"description\":\"143541,17\",\"code\":\"BRB\",\"displayName\":\"BARBADOS\"},{\"name\":\"伯利兹\",\"area\":\"bz\",\"description\":\"143555-2,17\",\"code\":\"BLZ\",\"displayName\":\"BELIZE\"},{\"name\":\"百慕大\",\"area\":\"bm\",\"description\":\"143542,17\",\"code\":\"BMU\",\"displayName\":\"BERMUDA\"},{\"name\":\"玻利维亚\",\"area\":\"bo\",\"description\":\"143556-2,17\",\"code\":\"BOL\",\"displayName\":\"BOLIVIA\"},{\"name\":\"巴西\",\"area\":\"br\",\"description\":\"143503,17\",\"code\":\"BRA\",\"displayName\":\"BRAZIL\"},{\"name\":\"英属维尔京群岛\",\"area\":\"vg\",\"description\":\"143543,17\",\"code\":\"VGB\",\"displayName\":\"BRITISH_VIRGIN_ISLANDS\"},{\"name\":\"开曼群岛\",\"area\":\"ky\",\"description\":\"143544,17\",\"code\":\"CYM\",\"displayName\":\"CAYMAN_ISLANDS\"},{\"name\":\"智利\",\"area\":\"cl\",\"description\":\"143483-2,17\",\"code\":\"CHL\",\"displayName\":\"CHILE\"},{\"name\":\"哥伦比亚\",\"area\":\"co\",\"description\":\"143501-2,17\",\"code\":\"COL\",\"displayName\":\"COLOMBIA\"},{\"name\":\"哥斯达黎加\",\"area\":\"cr\",\"description\":\"143495-2,17\",\"code\":\"CRI\",\"displayName\":\"COSTA_RICA\"},{\"name\":\"多米尼克\",\"area\":\"dm\",\"description\":\"143545,17\",\"code\":\"DMA\",\"displayName\":\"DOMINICA\"},{\"name\":\"多米尼加共和国\",\"area\":\"do\",\"description\":\"143508-2,17\",\"code\":\"DOM\",\"displayName\":\"DOMINICAN_REPUBLIC\"},{\"name\":\"厄瓜多尔\",\"area\":\"ec\",\"description\":\"143509-2,17\",\"code\":\"ECU\",\"displayName\":\"ECUADOR\"},{\"name\":\"萨尔瓦多\",\"area\":\"sv\",\"description\":\"143506-2,17\",\"code\":\"SLV\",\"displayName\":\"EL_SALVADOR\"},{\"name\":\"格林纳达\",\"area\":\"gd\",\"description\":\"143546,17\",\"code\":\"GRD\",\"displayName\":\"GRENADA\"},{\"name\":\"危地马拉\",\"area\":\"gt\",\"description\":\"143504-2,17\",\"code\":\"GUY\",\"displayName\":\"GUYANA\"},{\"name\":\"圭亚那\",\"area\":\"gy\",\"description\":\"143553,17\",\"code\":\"GUY\",\"displayName\":\"GUYANA\"},{\"name\":\"洪都拉斯\",\"area\":\"hn\",\"description\":\"143510-2,17\",\"code\":\"HND\",\"displayName\":\"HONDURAS\"},{\"name\":\"牙买加\",\"area\":\"jm\",\"description\":\"143511,17\",\"code\":\"JAM\",\"displayName\":\"JAMAICA\"},{\"name\":\"墨西哥\",\"area\":\"mx\",\"description\":\"143468,17\",\"code\":\"MEX\",\"displayName\":\"MEXICO\"},{\"name\":\"蒙特塞拉特\",\"area\":\"ms\",\"description\":\"143547,17\",\"code\":\"MSR\",\"displayName\":\"MONTSERRAT\"},{\"name\":\"尼加拉瓜\",\"area\":\"ni\",\"description\":\"143512-2,17\",\"code\":\"NIC\",\"displayName\":\"NICARAGUA\"},{\"name\":\"巴拿马\",\"area\":\"pa\",\"description\":\"143485-2,17\",\"code\":\"PAN\",\"displayName\":\"PANAMA\"},{\"name\":\"巴拉圭\",\"area\":\"py\",\"description\":\"143513-2,17\",\"code\":\"PRY\",\"displayName\":\"PARAGUAY\"},{\"name\":\"秘鲁\",\"area\":\"pe\",\"description\":\"143507-2,17\",\"code\":\"PER\",\"displayName\":\"PERU\"},{\"name\":\"圣基茨和尼维斯\",\"area\":\"kn\",\"description\":\"143548,17\",\"code\":\"KNA\",\"displayName\":\"SAINT_KITTS_AND_NEVIS\"},{\"name\":\"圣卢西亚\",\"area\":\"lc\",\"description\":\"143549,17\",\"code\":\"LCA\",\"displayName\":\"SAINT_LUCIA\"},{\"name\":\"圣文森特和格林纳丁斯\",\"area\":\"vc\",\"description\":\"143550,17\",\"code\":\"VCT\",\"displayName\":\"SAINT_VINCENT_AND_THE_GRENADINES\"},{\"name\":\"苏里南\",\"area\":\"sr\",\"description\":\"143554-2,17\",\"code\":\"SUR\",\"displayName\":\"SURINAME\"},{\"name\":\"特立尼达和多巴哥\",\"area\":\"tt\",\"description\":\"143551,17\",\"code\":\"TTO\",\"displayName\":\"TRINIDAD_AND_TOBAGO\"},{\"name\":\"特克斯和凯科斯群岛\",\"area\":\"tc\",\"description\":\"143552,17\",\"code\":\"TCA\",\"displayName\":\"TURKS_AND_CAICOS_ISLANDS\"},{\"name\":\"乌拉圭\",\"area\":\"uy\",\"description\":\"143514-2,17\",\"code\":\"URY\",\"displayName\":\"URUGUAY\"},{\"name\":\"委内瑞拉\",\"area\":\"ve\",\"description\":\"143502-2,17\",\"code\":\"VEN\",\"displayName\":\"VENEZUELA\"}]"; + } + } + DataTable dataTable = new DataTable(); + dataTable.Columns.Clear(); + dataTable.Columns.Add("name", typeof(string)); + dataTable.Columns.Add("area", typeof(string)); + dataTable.Columns.Add("description", typeof(string)); + dataTable.Columns.Add("code", typeof(string)); + dataTable.Columns.Add("displayName", typeof(string)); + if (countryJson != string.Empty) + { + foreach (CountryCodeModel item in new JavaScriptSerializer().Deserialize>(countryJson)) + { + string name = item.name; + string area = item.area; + string description = item.description; + string code = item.code; + string displayName = item.displayName; + dataTable.Rows.Add(name, area, description, code, displayName); + } + return dataTable; + } + return dataTable; + } + } +} diff --git a/AppleBatch_June.Domain/FormGiftcardBalanceBackup.cs b/AppleBatch_June.Domain/FormGiftcardBalanceBackup.cs new file mode 100644 index 0000000..119410d --- /dev/null +++ b/AppleBatch_June.Domain/FormGiftcardBalanceBackup.cs @@ -0,0 +1,6 @@ +namespace AppleBatch_June.Domain +{ + public class FormGiftcardBalanceBackup + { + } +} diff --git a/AppleBatch_June.Domain/GiftcardBalanceManage.cs b/AppleBatch_June.Domain/GiftcardBalanceManage.cs new file mode 100644 index 0000000..9d7b397 --- /dev/null +++ b/AppleBatch_June.Domain/GiftcardBalanceManage.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; + +namespace AppleBatch_June.Domain +{ + public class GiftcardBalanceManage + { + public static Dictionary nationGiftcardBalance = new Dictionary(); + + public static object loginLockObj = new object(); + + public static bool AddGifStandby(string _storeAppleHostLists, string appleId, string applePwd) + { + string text = _storeAppleHostLists; + if (string.IsNullOrEmpty(text)) + { + text = "us"; + } + string text2 = text + "_" + appleId; + lock (loginLockObj) + { + if (nationGiftcardBalance.ContainsKey(text2)) + { + _ = nationGiftcardBalance[text2]; + } + List list = new List(); + foreach (KeyValuePair item in nationGiftcardBalance) + { + if (item.Key.StartsWith(text + "_") && item.Key != text2) + { + list.Add(item.Key); + } + } + foreach (string item2 in list) + { + nationGiftcardBalance.Remove(item2); + } + if (!nationGiftcardBalance.ContainsKey(text2)) + { + nationGiftcardBalance.Add(text2, new GiftcardBalanceStandby(_storeAppleHostLists, appleId, applePwd)); + } + return true; + } + } + + public static GiftcardBalanceStandby GetStandby(string nation, string appleId) + { + if (string.IsNullOrEmpty(nation)) + { + nation = "us"; + } + string key = nation + "_" + appleId; + if (nationGiftcardBalance.ContainsKey(key)) + { + GiftcardBalanceStandby giftcardBalanceStandby = nationGiftcardBalance[key]; + giftcardBalanceStandby.upTime = DateTime.Now; + return giftcardBalanceStandby; + } + return null; + } + } +} diff --git a/AppleBatch_June.Domain/GiftcardBalanceStandby.cs b/AppleBatch_June.Domain/GiftcardBalanceStandby.cs new file mode 100644 index 0000000..f9b8c35 --- /dev/null +++ b/AppleBatch_June.Domain/GiftcardBalanceStandby.cs @@ -0,0 +1,235 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using AppleBatch_June.Model; +using AppleBatch_June.StartTaskModel; + +namespace AppleBatch_June.Domain +{ + public class GiftcardBalanceStandby + { + public Dictionary GiftcardBalanceCookieItems = new Dictionary(); + + private DateTime loginTime = DateTime.Now.AddHours(-1.0); + + public int itemsMaxCount = 50; + + public Action checkAction; + + public readonly object removeLock = new object(); + + private int timeCheckCountMax = 5; + + private readonly object lockRandomGiftcard = new object(); + + private string appleId { get; set; } + + private string applePwd { get; set; } + + private string storeAppleHostLists { get; set; } = ""; + + + public bool startVpn { get; set; } + + public DateTime upTime { get; set; } = DateTime.Now; + + + public int removeChekOverdueMinute { get; set; } = 120; + + + private int GetGiftCount { get; set; } + + public DateTime addGiftcardLostTime { get; set; } = DateTime.Now; + + + public GiftcardBalanceStandby(string _storeAppleHostLists, string _appleId, string _applePwd) + { + appleId = _appleId; + applePwd = _applePwd; + storeAppleHostLists = _storeAppleHostLists; + if (_storeAppleHostLists.ToLower() == "us") + { + storeAppleHostLists = ""; + } + string config = AppSysConfig.getConfig("BalanceStandbyCout"); + removeChekOverdueMinute = Tools.ToInt(AppSysConfig.getConfig("removeChekOverdueMinute"), 120); + if (!string.IsNullOrEmpty(config) && config.Split(',').Length == 2) + { + if (int.TryParse(config.Split(',')[0], out var result)) + { + itemsMaxCount = result; + } + if (int.TryParse(config.Split(',')[1], out var result2)) + { + timeCheckCountMax = result2; + } + } + } + + public void removeChek() + { + lock (removeLock) + { + List list = new List(); + foreach (KeyValuePair giftcardBalanceCookieItem in GiftcardBalanceCookieItems) + { + string s = giftcardBalanceCookieItem.Key.Split(',')[0]; + if (DateTime.Now.AddMinutes(-removeChekOverdueMinute) > DateTime.Parse(s)) + { + list.Add(giftcardBalanceCookieItem.Key); + } + } + foreach (string item in list) + { + GiftcardBalanceCookieItems.Remove(item); + } + } + } + + public void check(bool _startVpn, Action _action) + { + checkAction = _action; + startVpn = _startVpn; + removeChek(); + if (GiftcardBalanceCookieItems.Count <= itemsMaxCount && DateTime.Now.AddSeconds(-30.0) > loginTime) + { + loginTime = DateTime.Now; + int num = ((GiftcardBalanceCookieItems.Count >= 10) ? 1 : 2); + if (timeCheckCountMax > 5) + { + num = 1; + } + for (int i = 0; i < num; i++) + { + Task.Run(() => LoginTask(storeAppleHostLists, appleId, applePwd, startVpn)); + } + } + checkAction?.Invoke("", DisplyType.mima, GiftcardBalanceCookieItems.Count.ToString()); + } + + public GiftcardBalanceWeb GetRandomGiftcard(bool _startVpn = false, bool isrunTask = true) + { + if (_startVpn) + { + startVpn = _startVpn; + } + removeChek(); + lock (lockRandomGiftcard) + { + string nowTimeCheck = DateTime.Now.ToString("yyMMddHHmm"); + List> list = GiftcardBalanceCookieItems.Where((KeyValuePair c) => ((c.Value.timeCheck == nowTimeCheck && c.Value.timeCheckCount < timeCheckCountMax) || c.Value.timeCheck != nowTimeCheck) && long.Parse(nowTimeCheck) >= long.Parse(c.Value.timeCheck)).ToList(); + if (list != null && list.Count > 0) + { + if (GetGiftCount >= 10000) + { + GetGiftCount = 0; + } + int index = GetGiftCount % list.Count; + GetGiftCount++; + GiftcardBalanceWeb value = list[index].Value; + if (value.timeCheck == nowTimeCheck) + { + value.timeCheckCount++; + } + else + { + value.timeCheckCount = 1; + value.timeCheck = DateTime.Now.AddMinutes(0.8).ToString("yyMMddHHmm"); + } + value.StdndbyKey = list[index].Key; + return value; + } + } + if (GiftcardBalanceCookieItems.Count == 0 && DateTime.Now.AddSeconds(-30.0) > loginTime && isrunTask) + { + loginTime = DateTime.Now; + Task.Run(() => LoginTask(storeAppleHostLists, appleId, applePwd, startVpn)); + } + return null; + } + + public void RunLoginTask(bool _startVpn) + { + startVpn = _startVpn; + if (GiftcardBalanceCookieItems.Count <= itemsMaxCount) + { + Task.Run(() => LoginTask(storeAppleHostLists, appleId, applePwd, startVpn)); + } + removeChek(); + } + + public void AddGiftcardBalance(GiftcardBalanceWeb giftcard) + { + if (giftcard != null && giftcard.storeAppleHostLists == storeAppleHostLists) + { + addGiftcardLostTime = DateTime.Now; + GiftcardBalanceCookieItems.Add(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "," + Guid.NewGuid().ToString("n"), giftcard); + checkAction?.Invoke("", DisplyType.mima, GiftcardBalanceCookieItems.Count.ToString()); + } + } + + public void Reset(string _storeAppleHostLists) + { + storeAppleHostLists = _storeAppleHostLists; + GiftcardBalanceCookieItems.Clear(); + } + + public GiftcardBalanceWeb LoginTask(string _storeAppleHostLists, string appleId, string applePwd, bool startVpn) + { + try + { + BaseFormTaskRunState baseFormTaskRunState = new BaseFormTaskRunState("GiftcardBalanceStandby"); + baseFormTaskRunState.isRun = true; + GiftcardBalanceWeb giftcardBalanceWeb = new GiftcardBalanceWeb(_storeAppleHostLists, null, null, baseFormTaskRunState); + giftcardBalanceWeb.isUpProxyAccountCache = false; + if (giftcardBalanceWeb.shopSignIn(appleId.Trim(), applePwd, startVpn, out var _) && giftcardBalanceWeb.storeAppleHostLists == storeAppleHostLists) + { + addGiftcardLostTime = DateTime.Now; + GiftcardBalanceCookieItems.Add(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "," + Guid.NewGuid().ToString("n"), giftcardBalanceWeb); + checkAction?.Invoke("", DisplyType.mima, GiftcardBalanceCookieItems.Count.ToString()); + return giftcardBalanceWeb; + } + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + } + return null; + } + + public void removeGiftcardBalance(string key) + { + lock (removeLock) + { + GiftcardBalanceCookieItems.Remove(key); + } + checkAction?.Invoke("", DisplyType.mima, GiftcardBalanceCookieItems.Count.ToString()); + if (GiftcardBalanceCookieItems.Count <= itemsMaxCount) + { + loginTime = DateTime.Now; + Task.Run(() => LoginTask(storeAppleHostLists, appleId, applePwd, startVpn)); + } + } + + public GiftcardBalanceWeb getGiftcardBalanceCookie() + { + if (GiftcardBalanceCookieItems.Count >= 1) + { + KeyValuePair keyValuePair = GiftcardBalanceCookieItems.First(); + if (keyValuePair.Value != null) + { + GiftcardBalanceCookieItems.Remove(keyValuePair.Key); + checkAction?.Invoke("", DisplyType.mima, GiftcardBalanceCookieItems.Count.ToString()); + if (GiftcardBalanceCookieItems.Count <= itemsMaxCount) + { + loginTime = DateTime.Now; + Task.Run(() => LoginTask(storeAppleHostLists, appleId, applePwd, startVpn)); + } + return keyValuePair.Value; + } + } + return null; + } + } +} diff --git a/AppleBatch_June.Domain/GiftcardBalanceStandbyItem.cs b/AppleBatch_June.Domain/GiftcardBalanceStandbyItem.cs new file mode 100644 index 0000000..192243c --- /dev/null +++ b/AppleBatch_June.Domain/GiftcardBalanceStandbyItem.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; +using DotNet.Utilities; + +namespace AppleBatch_June.Domain +{ + public class GiftcardBalanceStandbyItem + { + public List listCookie = new List(); + + public string storeAppleHost { get; set; } + + public string xaosstk { get; set; } + } +} diff --git a/AppleBatch_June.Domain/NationalData.cs b/AppleBatch_June.Domain/NationalData.cs new file mode 100644 index 0000000..39d6cb1 --- /dev/null +++ b/AppleBatch_June.Domain/NationalData.cs @@ -0,0 +1,34 @@ +using System.Collections.Generic; +using System.Net; +using System.Web.Script.Serialization; +using AppleBatch_June.Model; +using DotNet.Utilities; + +namespace AppleBatch_June.Domain +{ + public class NationalData + { + private static string nationJson = string.Empty; + + public List getMation() + { + if (nationJson == string.Empty) + { + HttpResult html = new HttpHelper().GetHtml(new HttpItem + { + URL = "https://teluns-api.oss-cn-shenzhen.aliyuncs.com/nation.json", + Timeout = 8000 + }); + if (html.StatusCode == HttpStatusCode.OK) + { + nationJson = html.Html; + } + } + if (nationJson != string.Empty) + { + return new JavaScriptSerializer().Deserialize>(nationJson); + } + return new List(); + } + } +} diff --git a/AppleBatch_June.Domain/SelectShippingOptionNullData.cs b/AppleBatch_June.Domain/SelectShippingOptionNullData.cs new file mode 100644 index 0000000..b6569c1 --- /dev/null +++ b/AppleBatch_June.Domain/SelectShippingOptionNullData.cs @@ -0,0 +1,55 @@ +using System.Net; +using DotNet.Utilities; + +namespace AppleBatch_June.Domain +{ + public class SelectShippingOptionNullData + { + private static string SelectShippingOptionNullJson = string.Empty; + + private static string SelectShippingOptionAdditionaFieldsJson = string.Empty; + + public string getSelectShippingOption() + { + if (SelectShippingOptionNullJson == string.Empty) + { + HttpResult html = new HttpHelper().GetHtml(new HttpItem + { + URL = ApiNetReq.host + "/js/selectShippingOptionNull.Json", + Timeout = 8000 + }); + if (html.StatusCode == HttpStatusCode.OK) + { + SelectShippingOptionNullJson = html.Html; + getSelectShippingAdditionaFieldsn(); + } + if (string.IsNullOrEmpty(SelectShippingOptionNullJson)) + { + SelectShippingOptionNullJson = "#st\r\nkey!checkout-fulfillment-deliveryTab-delivery-location-address-postalCode;\r\nurl!/shop/checkoutx?_a=calculate&_m=checkout.fulfillment.deliveryTab.delivery.deliveryLocation.address;\r\npost!checkout.fulfillment.deliveryTab.delivery.deliveryLocation.address.postalCode={postalCode};\r\nparam!postalCode;\r\nvalue!p.postalCode;\r\n#end\r\n\r\n#st\r\nkey!checkout.fulfillment.deliveryTab.delivery.deliveryLocation;\r\nurl!/shop/checkoutx?_a=Apply&_m=checkout.fulfillment.deliveryTab.delivery.deliveryLocation;\r\npost!checkout.fulfillment.deliveryTab.delivery.deliveryLocation.address.deliveryLocationSelection.state={state}&checkout.fulfillment.deliveryTab.delivery.deliveryLocation.address.deliveryLocationSelection.postalCode={postalCode}&checkout.fulfillment.deliveryTab.delivery.deliveryLocation.address.deliveryLocationSelection.cityTypeAhead.city={city};\r\nparam!state,postalCode,city;\r\nvalue!r.0,p.postalCode,p.city;\r\nr!abs.DeliveryLocationSelection([\\s\\S]*?)abstract-\"value\":\"([\\s\\S]*?)\"|;\r\n#end\r\n\r\n#st\r\nkey!checkout.fulfillment.deliveryTab.delivery.deliveryLocation.address.deliveryWarmingSubLayout;\r\nurl!/shop/checkoutx?_a=state-warm-up&_m=checkout.fulfillment.deliveryTab.delivery.deliveryLocation.address.deliveryWarmingSubLayout;\r\npost!checkout.fulfillment.deliveryTab.delivery.deliveryLocation.address.deliveryWarmingSubLayout.postalCode={postalCode}&checkout.fulfillment.deliveryTab.delivery.deliveryLocation.address.deliveryWarmingSubLayout.state={state};\r\nparam!state,postalCode;\r\nvalue!r.0,p.postalCode;\r\nr!abs.DeliveryWarmingSubLayout([\\s\\S]*?)layout-\"value\":\"([\\s\\S]*?)\"|;\r\n#end"; + } + } + return SelectShippingOptionNullJson; + } + + public string getSelectShippingAdditionaFieldsn() + { + if (SelectShippingOptionAdditionaFieldsJson == string.Empty) + { + HttpResult html = new HttpHelper().GetHtml(new HttpItem + { + URL = ApiNetReq.host + "/js/SelectShippingOptionAdditionaFieldsJson.Json", + Timeout = 8000 + }); + if (html.StatusCode == HttpStatusCode.OK) + { + SelectShippingOptionAdditionaFieldsJson = html.Html; + } + if (string.IsNullOrEmpty(SelectShippingOptionAdditionaFieldsJson)) + { + SelectShippingOptionAdditionaFieldsJson = "BRA:checkout.shipping.addressSelector.newAddress.address.zipLookup.state=Amazonas&checkout.shipping.addressSelector.newAddress.address.zipLookup.district=aaaa&checkout.shipping.taxInformation.taxIdType=CPF&checkout.shipping.taxInformation.cpf.cpf=007.408.869-67"; + } + } + return SelectShippingOptionAdditionaFieldsJson; + } + } +} diff --git a/AppleBatch_June.Domain/UserNationalData.cs b/AppleBatch_June.Domain/UserNationalData.cs new file mode 100644 index 0000000..84e5914 --- /dev/null +++ b/AppleBatch_June.Domain/UserNationalData.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Web.Script.Serialization; +using AppleBatch_June.Model; + +namespace AppleBatch_June.Domain +{ + public class UserNationalData + { + private string path => AppDomain.CurrentDomain.BaseDirectory; + + private string mvationPath => path + "userNationalData.json"; + + public List getMation() + { + if (File.Exists(mvationPath)) + { + JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); + string input = Tools.readFile(mvationPath, Encoding.UTF8); + return javaScriptSerializer.Deserialize>(input); + } + return new List(); + } + + public void saveMation(NationalList item) + { + List mation = getMation(); + mation.Add(item); + string contents = new JavaScriptSerializer().Serialize(mation); + File.WriteAllText(mvationPath, contents, Encoding.UTF8); + } + + public void removeMation(string code) + { + List mation = getMation(); + NationalList nationalList = mation.Where((NationalList c) => c.Id == code).FirstOrDefault(); + if (nationalList != null) + { + mation.Remove(nationalList); + string contents = new JavaScriptSerializer().Serialize(mation); + File.WriteAllText(mvationPath, contents, Encoding.UTF8); + } + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/AccountCheckTask.cs b/AppleBatch_June.ExecuteTasks/AccountCheckTask.cs new file mode 100644 index 0000000..a612d42 --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/AccountCheckTask.cs @@ -0,0 +1,75 @@ +using System; +using System.Net; +using System.Threading.Tasks; +using AppleBatch_June.Model; +using AppleBatch_June.StartTaskModel; +using DotNet.Utilities; + +namespace AppleBatch_June.ExecuteTasks +{ + public class AccountCheckTask : BaseTask + { + public static AccountCheckTask Instance { get; private set; } + + static AccountCheckTask() + { + Instance = new AccountCheckTask("账号检测"); + } + + public AccountCheckTask(string _taskName) + : base(_taskName) + { + } + + public async void appleAccountCheck(AppleAcount account, Action action, Action _applyAction, bool _OpenVpn) + { + base.isRun = true; + Tuple tuple = await Task.Run(delegate + { + ApiNetReq.startNowFun = 9; + base.TaskIsRun = true; + AppleItunesLogin itunesLoginRef = null; + try + { + string msg = ""; + HttpResult isLogin = APIUtlis.getIsLogin(9); + if (isLogin.StatusCode == HttpStatusCode.OK) + { + object obj = Tools.Todejosn(isLogin.Html); + if (((dynamic)obj)["Code"] == "0000") + { + if (((dynamic)obj)["Data"]["integral"] >= AppSysConfig.getTypeById(9).consNum) + { + if (new ItunesUtlis(this, account.appleId, _applyAction, _OpenVpn).getAccountStateMsg(account, ref msg, ref itunesLoginRef)) + { + APIUtlis.ApiApplyAct(9, "Apple账号检测"); + } + } + else + { + msg = "点数不足,请联系客服充值"; + } + } + else + { + msg = ((dynamic)obj)["Message"]; + } + } + else + { + msg = "网络请求失败,请重试"; + } + return new Tuple(msg, itunesLoginRef); + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + return new Tuple(ex.Message, itunesLoginRef); + } + }); + base.TaskIsRun = false; + base.isRun = false; + action?.Invoke(tuple.Item1, tuple.Item2); + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/ActivateiCloudTask.cs b/AppleBatch_June.ExecuteTasks/ActivateiCloudTask.cs new file mode 100644 index 0000000..06b1082 --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/ActivateiCloudTask.cs @@ -0,0 +1,503 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using AppleBatch_June.AppleWebServace; +using AppleBatch_June.Model; +using AppleBatch_June.SMS; +using AppleBatch_June.StartTaskModel; +using DotNet.Utilities; + +namespace AppleBatch_June.ExecuteTasks +{ + public class ActivateiCloudTask : BaseTask + { + private static readonly object lockActClientObj; + + private readonly Dictionary actClientLockObjs = new Dictionary(); + + public static ActivateiCloudTask Instance { get; private set; } + + public static ActivateiCloudTask InstanceSub { get; private set; } + + public int nasType { get; set; } = 1; + + + private ActiotiCloudConfig baseCloudConfig { get; set; } + + private Action baseAction { get; set; } + + static ActivateiCloudTask() + { + Instance = null; + InstanceSub = null; + lockActClientObj = new object(); + Instance = new ActivateiCloudTask("激活iCloud"); + InstanceSub = new ActivateiCloudTask("激活iCloudSub"); + } + + public ActivateiCloudTask(string _taskName) + : base(_taskName) + { + } + + public void ExecuteLeaveFamily(int TaskSize, bool openVpn, ActiotiCloudConfig cloudConfig, List lvItems, Action startAct, Action endTakAct, Action sucessAct, Action _action) + { + TaskSize = Tools.getTaskSize(openVpn, lvItems.Count); + if (!base.isRun) + { + AppleExecuteTask.TaskRunAppleIdCount = 0L; + AppleExecuteTask.TaskRunModels.Clear(); + startAct?.Invoke(); + base.isRun = true; + base.TaskIsRun = true; + base.baseEndTakAct = endTakAct; + Task.Run(delegate + { + ApiNetReq.startNowFun = 30; + TaskSize = 4; + Task[] array = new Task[TaskSize]; + List openAuthActionTask = new List(); + for (int i = 0; i < TaskSize; i++) + { + array[i] = Task.Run(delegate + { + string guid = Guid.NewGuid().ToString("n"); + TaskRunModel taskRunModel = new TaskRunModel + { + guid = guid, + isRuning = false + }; + AppleExecuteTask.TaskRunModels.Add(taskRunModel); + while (base.isRun) + { + AppleAcount listView = null; + try + { + lock (lvItems) + { + listView = lvItems.Where((AppleAcount c) => !c.isAct).FirstOrDefault(); + if (listView == null) + { + break; + } + listView.isAct = true; + } + if (BaseTask.startRuning(taskRunModel, _action, listView.appleId)) + { + int type = 40; + iCloundUtils icloud = new iCloundUtils(this, listView.appleId, _action, openVpn); + if (icloud.getIsLogin(40, _action)) + { + _action?.Invoke(listView.appleId, DisplyType.chongzhi, ""); + icloud.appleId = listView.appleId; + NasQualifyModel nasQualifyInfo = icloud.GetNasQualifyInfo(nasType); + bool flag = false; + if (nasQualifyInfo != null && !string.IsNullOrEmpty(nasQualifyInfo.nasQualify) && !string.IsNullOrEmpty(nasQualifyInfo.clientInfo) && !string.IsNullOrEmpty(nasQualifyInfo.userAgent)) + { + string text = icloud.GetKeyValue("client-id", "", "", nasQualifyInfo.postData); + if (string.IsNullOrEmpty(text)) + { + text = "9B134D07-1389-4872-A249-9DF756337B97"; + } + lock (lockActClientObj) + { + if (!actClientLockObjs.ContainsKey(text)) + { + actClientLockObjs.Add(text, new object()); + } + } + string reflocalizedError = ""; + bool flag2 = false; + lock (actClientLockObjs[text]) + { + flag2 = icloud.ActioniCloud(listView.appleId, listView.applePwd, nasQualifyInfo.nasQualify, nasQualifyInfo.clientInfo, text, ref reflocalizedError); + } + if (!flag2) + { + int num = 0; + while ((reflocalizedError == "MOBILEME_CREATE_UNAVAILABLE" || reflocalizedError == "MOBILEME_TERMS_OF_SERVICE_UPDATE" || string.IsNullOrEmpty(reflocalizedError)) && base.isRun && num <= 5) + { + num++; + nasQualifyInfo = icloud.GetNasQualifyInfo(nasType); + if (nasQualifyInfo != null && !string.IsNullOrEmpty(nasQualifyInfo.nasQualify) && !string.IsNullOrEmpty(nasQualifyInfo.clientInfo) && !string.IsNullOrEmpty(nasQualifyInfo.userAgent)) + { + if (flag2 = icloud.ActioniCloud(listView.appleId, listView.applePwd, nasQualifyInfo.nasQualify, nasQualifyInfo.clientInfo, text, ref reflocalizedError)) + { + ApiApplyAct(type, "激活iCloud"); + reflocalizedError = "Success"; + break; + } + Thread.Sleep(1000); + if (reflocalizedError == "MOBILEME_CREATE_UNAVAILABLE" || reflocalizedError == "MOBILEME_TERMS_OF_SERVICE_UPDATE" || (string.IsNullOrEmpty(reflocalizedError) && base.isRun && num <= 5)) + { + _action?.Invoke(listView.appleId, DisplyType.xinxi, "重新激活..." + num); + Thread.Sleep(1000); + } + } + } + if (reflocalizedError == "ACCOUNT_INVALID_HSA_TOKEN" || reflocalizedError == "HSA2_NEEDS_2FA_AUTH" || (reflocalizedError == "ACCOUNT_UNAVAILABLE" && cloudConfig.isOpenAuthAction)) + { + AppleManageWeb webUtlis = new AppleManageWeb(openVpn, _action, _action, this); + baseCloudConfig = cloudConfig; + baseAction = _action; + flag = true; + openAuthActionTask.Add(Task.Run(delegate + { + try + { + if (reflocalizedError == "ACCOUNT_UNAVAILABLE" && AuthActionTask(webUtlis, listView, cloudConfig)) + { + Thread.Sleep(5000); + AutoActioniCloud(icloud, listView, forgotAttempt: false, nasQualifyInfo); + } + if (reflocalizedError == "ACCOUNT_INVALID_HSA_TOKEN" || reflocalizedError == "HSA2_NEEDS_2FA_AUTH") + { + AutoActioniCloud(icloud, listView, forgotAttempt: false, nasQualifyInfo); + } + } + catch (Exception ex3) + { + APIUtlis.ApiSeriveError(ex3); + _action?.Invoke(listView.appleId, DisplyType.xinxi, ex3.Message); + } + finally + { + sucessAct?.Invoke(listView.appleId); + } + })); + } + } + } + else + { + _action?.Invoke(listView.appleId, DisplyType.xinxi, "数据加载失败.."); + } + if (!flag) + { + sucessAct?.Invoke(listView.appleId); + } + } + goto IL_07d3; + } + } + catch (Exception ex2) + { + APIUtlis.ApiSeriveError(ex2); + if (listView != null) + { + _action?.Invoke(listView.appleId, DisplyType.xinxi, "请求失败:" + ex2.Message); + } + goto IL_07d3; + } + continue; + IL_07d3: + BaseTask.endRuning(taskRunModel); + } + }); + } + Task.WaitAll(array); + Task.WaitAll(openAuthActionTask.ToArray()); + try + { + Task[] array2 = array; + foreach (Task task in array2) + { + if (task.Status == TaskStatus.RanToCompletion) + { + task.Dispose(); + } + } + array = null; + foreach (Task item in openAuthActionTask) + { + item.Dispose(); + } + openAuthActionTask = null; + } + catch (Exception) + { + } + AppleExecuteTask.TaskRunModels.Clear(); + base.TaskIsRun = false; + base.isRun = false; + endTakAct?.Invoke(); + }); + } + else + { + endTakAct?.Invoke(); + } + } + + public bool AuthActionTask(AppleManageWeb webUtlis, AppleAcount listView, ActiotiCloudConfig _cloudConfig) + { + int num = 0; + while (true) + { + if (num < _cloudConfig.openNumber) + { + if (base.isRun) + { + listView.moblie = "18888888888"; + webUtlis.listCookie.Clear(); + webUtlis.ProxyIp = ""; + listView.isAccountException = false; + if (webUtlis.OpenAuthen(listView, new AppleChangeItem + { + countryCode = _cloudConfig.smsCountry, + mode = "sms" + }, actGetCode, listView.appleId)) + { + return true; + } + if (listView.isHsa2) + { + return true; + } + if (listView.isAccountException) + { + return false; + } + if (_cloudConfig.smsService == null) + { + break; + } + } + num++; + continue; + } + return false; + } + return false; + } + + public bool AutoActioniCloud(iCloundUtils icloud, AppleAcount listView, bool forgotAttempt, NasQualifyModel nasQualifyInfo) + { + string moblie = listView.moblie; + if (!string.IsNullOrEmpty(moblie)) + { + if (nasQualifyInfo != null && !string.IsNullOrEmpty(nasQualifyInfo.nasQualify) && !string.IsNullOrEmpty(nasQualifyInfo.clientInfo) && !string.IsNullOrEmpty(nasQualifyInfo.userAgent)) + { + string text = icloud.GetKeyValue("client-id", "", "", nasQualifyInfo.postData); + if (string.IsNullOrEmpty(text)) + { + text = "9B134D07-1389-4872-A249-9DF756337B97"; + } + string localizedError = ""; + CookieItem cookieItem = icloud.listCookie.Where((CookieItem c) => c.Key == "repairSteps").FirstOrDefault(); + if (cookieItem == null) + { + if (icloud.ActioniCloud(listView.appleId, listView.applePwd, nasQualifyInfo.nasQualify, nasQualifyInfo.clientInfo, text, ref localizedError)) + { + return true; + } + if (localizedError == "MOBILEME_CREATE_UNAVAILABLE" || localizedError == "MOBILEME_UNSUPPORTED_DEVICE" || string.IsNullOrEmpty(localizedError)) + { + int num = 0; + do + { + nasQualifyInfo = icloud.GetNasQualifyInfo(nasType); + if (!icloud.ActioniCloud(listView.appleId, listView.applePwd, nasQualifyInfo.nasQualify, nasQualifyInfo.clientInfo, text, ref localizedError)) + { + Thread.Sleep(2000); + num++; + continue; + } + return true; + } + while ((localizedError == "MOBILEME_CREATE_UNAVAILABLE" || localizedError == "MOBILEME_UNSUPPORTED_DEVICE" || string.IsNullOrEmpty(localizedError)) && num < 5); + } + if (localizedError != "ACCOUNT_INVALID_HSA_TOKEN" && localizedError != "HSA2_NEEDS_2FA_AUTH") + { + return false; + } + } + string errmess = ""; + string icMsmCode = ""; + if (icloud.iCloudVerifyauthen(listView.appleId, listView.applePwd, moblie, nasQualifyInfo, actGetCode, ref errmess, ref icMsmCode)) + { + if (localizedError != "HSA2_NEEDS_2FA_AUTH") + { + icMsmCode = ""; + } + if (!icloud.ActioniCloud(listView.appleId, listView.applePwd, nasQualifyInfo.nasQualify, nasQualifyInfo.clientInfo, text, ref localizedError, isAgree: false, icMsmCode)) + { + for (int i = 0; i < 5; i++) + { + if (!(localizedError == "MOBILEME_CREATE_UNAVAILABLE") && !(localizedError == "MOBILEME_UNSUPPORTED_DEVICE") && !string.IsNullOrEmpty(localizedError)) + { + break; + } + nasQualifyInfo = icloud.GetNasQualifyInfo(nasType); + if (nasQualifyInfo != null && !string.IsNullOrEmpty(nasQualifyInfo.nasQualify) && !string.IsNullOrEmpty(nasQualifyInfo.clientInfo) && !string.IsNullOrEmpty(nasQualifyInfo.userAgent) && icloud.ActioniCloud(listView.appleId, listView.applePwd, nasQualifyInfo.nasQualify, nasQualifyInfo.clientInfo, text, ref localizedError, isAgree: false, icMsmCode)) + { + break; + } + } + } + if (!string.IsNullOrEmpty(baseCloudConfig.ActivaNewPwd)) + { + AppleiForgotWeb appleiForgotWeb = new AppleiForgotWeb(icloud.openVpn, baseAction, null, this); + bool flag = false; + int num2 = 0; + string text2 = baseCloudConfig.ActivaNewPwd; + while (!(flag = appleiForgotWeb.RetrievePassword(listView, text2, listView.appleId, isCloseAuthen: true))) + { + if (!listView.notAuthen) + { + if (listView.notRepeatPwd) + { + Thread.Sleep(2000); + baseAction?.Invoke(listView.appleId, DisplyType.xinxi, "关双失败,切换备用密码...."); + text2 = baseCloudConfig.ActivaStandbyPwd; + } + else + { + Thread.Sleep(2000); + baseAction?.Invoke(listView.appleId, DisplyType.xinxi, "关双失败,重新关闭...."); + } + Thread.Sleep(1000); + num2++; + if (flag || !base.isRun || num2 >= 5) + { + break; + } + continue; + } + baseAction?.Invoke(listView.appleId, DisplyType.xinxi, "已没有双重,请验证密码[" + text2 + "]"); + break; + } + } + } + else if (!string.IsNullOrEmpty(baseCloudConfig.ActivaStandbyPwd) && !forgotAttempt && errmess.Contains("输入的代码无效")) + { + Thread.Sleep(2000); + string text3 = baseCloudConfig.ActivaStandbyPwd; + int num3 = 0; + bool flag2 = false; + AppleiForgotWeb appleiForgotWeb2 = new AppleiForgotWeb(icloud.openVpn, baseAction, null, this); + do + { + if (!(flag2 = appleiForgotWeb2.RetrievePassword(listView, text3, listView.appleId, isCloseAuthen: true))) + { + if (listView.notRepeatPwd) + { + Thread.Sleep(2000); + baseAction?.Invoke(listView.appleId, DisplyType.xinxi, "验证不通过,关双失败,切换备用密码...."); + text3 = baseCloudConfig.ActivaNewPwd; + } + else + { + Thread.Sleep(2000); + baseAction?.Invoke(listView.appleId, DisplyType.xinxi, "验证不通过,关双失败,重新关闭...."); + } + Thread.Sleep(1000); + num3++; + continue; + } + listView.applePwd = text3; + cookieItem = icloud.listCookie.Where((CookieItem c) => c.Key == "repairSteps").FirstOrDefault(); + if (cookieItem != null) + { + try + { + icloud.listCookie.Remove(cookieItem); + } + catch (Exception) + { + } + } + return AutoActioniCloud(icloud, listView, forgotAttempt: true, nasQualifyInfo); + } + while (!flag2 && base.isRun && num3 < 5); + } + } + else + { + baseAction?.Invoke(listView.appleId, DisplyType.xinxi, "数据加载失败.."); + } + } + else + { + baseAction?.Invoke(listView.appleId, DisplyType.xinxi, "未输入手机号码"); + } + return false; + } + + public string actGetCode(string appleId, int type) + { + if (baseCloudConfig.smsService == null) + { + return baseCloudConfig.actGetCode?.Invoke(appleId, type); + } + if (type == 10) + { + baseCloudConfig.smsService.blackPhone(appleId); + } + switch (type) + { + case 11: + { + SmsRespon molieNumber = baseCloudConfig.smsService.getMolieNumber(ref appleId); + if (molieNumber.code == "0000") + { + return appleId; + } + return molieNumber.ErrMessage + "[" + baseCloudConfig.smsService.smsName + "]"; + } + case 9: + { + string phone = ""; + SmsRespon molieNumber2 = baseCloudConfig.smsService.getMolieNumber(ref phone); + if (molieNumber2.code == "0000") + { + return phone; + } + baseAction?.Invoke(appleId, DisplyType.xinxi, molieNumber2.ErrMessage + "[" + baseCloudConfig.smsService.smsName + "]"); + return ""; + } + case 1: + case 15: + case 16: + { + string value = new Regex("<([\\s\\S]*?)>").Match(appleId).Groups[1].Value; + string value2 = new Regex(":([\\s\\S]*?),").Match(appleId).Groups[1].Value; + if (string.IsNullOrEmpty(value)) + { + break; + } + int num = ((type == 15) ? 15 : baseCloudConfig.getSmsMsgMaxCount); + string text = ""; + for (int i = 0; i < num; i++) + { + if (!base.isRun) + { + continue; + } + SmsRespon sms = baseCloudConfig.smsService.getSms(value); + if (sms.code == "0000" && !string.IsNullOrEmpty(sms.Data)) + { + string value3 = new Regex("([\\d]{6})").Match(sms.Data).Groups[1].Value; + if (!string.IsNullOrEmpty(value3)) + { + return value3; + } + } + if (type == 15 || type == 16) + { + text = "ic"; + } + baseAction?.Invoke(value2, DisplyType.xinxi, text + " 获取[" + value + "]短信...." + i + "[" + baseCloudConfig.smsService.smsName + "]"); + Thread.Sleep(3000); + } + baseCloudConfig.smsService.releasePhone(value); + break; + } + } + return ""; + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/AddRemoveFamilyMemberTask.cs b/AppleBatch_June.ExecuteTasks/AddRemoveFamilyMemberTask.cs new file mode 100644 index 0000000..55b3682 --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/AddRemoveFamilyMemberTask.cs @@ -0,0 +1,155 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using AppleBatch_June.Model; +using AppleBatch_June.StartTaskModel; + +namespace AppleBatch_June.ExecuteTasks +{ + public class AddRemoveFamilyMemberTask : BaseTask + { + public static AddRemoveFamilyMemberTask Instance { get; private set; } + + static AddRemoveFamilyMemberTask() + { + Instance = new AddRemoveFamilyMemberTask("添加或移除家庭成员"); + } + + public AddRemoveFamilyMemberTask(string _taskName) + : base(_taskName) + { + } + + public void ExecuteAddRemoveFamilyMember(int TaskSize, bool openVpn, List lvItems, Action startAct, Action endTakAct, Action sucessAct, Action _action) + { + TaskSize = Tools.getTaskSize(openVpn, lvItems.Count); + if (!ShopBalanceTask.Instance.isRun) + { + AppleExecuteTask.TaskRunAppleIdCount = 0L; + AppleExecuteTask.TaskRunModels.Clear(); + startAct?.Invoke(); + Instance.isRun = true; + Instance.TaskIsRun = true; + base.baseEndTakAct = endTakAct; + Task.Run(delegate + { + ApiNetReq.startNowFun = 31; + Task[] array = new Task[1]; + for (int i = 0; i < array.Length; i++) + { + array[i] = Task.Run(delegate + { + string guid = Guid.NewGuid().ToString("n"); + TaskRunModel taskRunModel = new TaskRunModel + { + guid = guid, + isRuning = false + }; + AppleExecuteTask.TaskRunModels.Add(taskRunModel); + while (Instance.isRun) + { + AppleAcount appleAcount = null; + try + { + lock (lvItems) + { + appleAcount = lvItems.Where((AppleAcount c) => !c.isAct).FirstOrDefault(); + if (appleAcount == null) + { + break; + } + appleAcount.isAct = true; + } + if (BaseTask.startRuning(taskRunModel, _action, appleAcount.lvItemGuid)) + { + int type = 31; + iCloundUtils iCloundUtils2 = new iCloundUtils(this, appleAcount.lvItemGuid, _action, openVpn); + _action?.Invoke(appleAcount.lvItemGuid, DisplyType.chongzhi, ""); + iCloundUtils2.appleId = appleAcount.appleId; + AppleiCloundLogin appleiCloundLogin = iCloundUtils2.loginDelegates(appleAcount.appleId, appleAcount.applePwd, type); + if (appleiCloundLogin != null) + { + iCloundUtils2.getFamilyDetails(appleiCloundLogin, iCloundUtils2); + if (iCloundUtils2.parentAccount.ToLower() == appleAcount.appleId.ToLower()) + { + long result; + if (appleAcount.overflow != "del") + { + appleiCloundLogin.account = appleAcount.appleId; + iCloudVerifyCVVModel iCloudVerifyCVVModel = iCloundUtils2.getiTunesAccountPaymentInfo(appleiCloundLogin); + if (iCloudVerifyCVVModel != null) + { + iCloudVerifyCVVModel.securityCode = appleAcount.overflow; + string text = iCloundUtils2.verifyCVV(appleiCloundLogin, iCloudVerifyCVVModel); + if (!string.IsNullOrEmpty(text) && iCloundUtils2.addFamilyMember(appleiCloundLogin, appleAcount.newAppleId, appleAcount.newApplePopPwd, text)) + { + ApiApplyAct(type, "添加或删除家庭成员"); + } + } + } + else if (long.TryParse(appleAcount.newAppleId, out result)) + { + if (iCloundUtils2.removeFamilyMember(appleiCloundLogin, appleAcount.newAppleId)) + { + ApiApplyAct(type, "添加或删除家庭成员"); + } + } + else + { + _action?.Invoke(appleAcount.lvItemGuid, DisplyType.xinxi, "失败:移除请输入成员的Dsid"); + } + } + else + { + _action?.Invoke(appleAcount.lvItemGuid, DisplyType.xinxi, "失败:请使用组织者账号添加或移除成员"); + } + } + sucessAct?.Invoke(appleAcount.lvItemGuid); + goto IL_02a2; + } + } + catch (Exception ex2) + { + APIUtlis.ApiSeriveError(ex2); + if (appleAcount != null) + { + _action?.Invoke(appleAcount.lvItemGuid, DisplyType.xinxi, "请求失败:" + ex2.Message); + } + goto IL_02a2; + } + continue; + IL_02a2: + BaseTask.endRuning(taskRunModel); + } + }); + } + Task.WaitAll(array); + try + { + Task[] array2 = array; + foreach (Task task in array2) + { + if (task.Status == TaskStatus.RanToCompletion) + { + task.Dispose(); + } + } + array = null; + } + catch (Exception) + { + } + AppleExecuteTask.TaskRunModels.Clear(); + Instance.TaskIsRun = false; + Instance.isRun = false; + endTakAct?.Invoke(); + }); + } + else + { + endTakAct?.Invoke(); + } + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/AppleAccountChangeTask.cs b/AppleBatch_June.ExecuteTasks/AppleAccountChangeTask.cs new file mode 100644 index 0000000..f43666c --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/AppleAccountChangeTask.cs @@ -0,0 +1,171 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Threading.Tasks; +using AppleBatch_June.AppleWebServace; +using AppleBatch_June.Model; +using AppleBatch_June.StartTaskModel; +using DotNet.Utilities; + +namespace AppleBatch_June.ExecuteTasks +{ + public class AppleAccountChangeTask : BaseTask + { + public static AppleAccountChangeTask Instance { get; set; } + + static AppleAccountChangeTask() + { + Instance = new AppleAccountChangeTask("资料修改"); + } + + public AppleAccountChangeTask(string _taskName) + : base(_taskName) + { + } + + public void AppleChangeTask(bool openVpn, bool errorGoint, int TaskSize, List lvItems, AppleChangeItem changeItem, Action startAct, Action endTakAct, Action sucessAct, Action _action, Action _applyAtion, int intType) + { + TaskSize = Tools.getTaskSize(openVpn, lvItems.Count); + if (!openVpn) + { + TaskSize = 2; + } + if (!base.isRun) + { + AppleExecuteTask.TaskRunAppleIdCount = 0L; + AppleExecuteTask.TaskRunModels.Clear(); + startAct?.Invoke(); + base.isRun = true; + Task.Run(delegate + { + ApiNetReq.startNowFun = intType; + base.TaskIsRun = true; + base.baseEndTakAct = endTakAct; + object lockObj = new object(); + Task[] array = new Task[TaskSize]; + for (int i = 0; i < TaskSize; i++) + { + array[i] = Task.Run(delegate + { + string guid = Guid.NewGuid().ToString("n"); + TaskRunModel taskRunModel = new TaskRunModel + { + guid = guid, + isRuning = false + }; + AppleExecuteTask.TaskRunModels.Add(taskRunModel); + while (base.isRun) + { + AppleAcount appleAcount = null; + try + { + lock (lockObj) + { + appleAcount = lvItems.Where((AppleAcount c) => !c.isAct).FirstOrDefault(); + if (appleAcount == null) + { + break; + } + appleAcount.isAct = true; + } + string guidTag = appleAcount.guidTag; + if (BaseTask.startRuning(taskRunModel, _action, guidTag)) + { + _action?.Invoke(guidTag, DisplyType.xinxi, "正在处理"); + HttpResult isLogin = APIUtlis.getIsLogin(intType); + if (isLogin.StatusCode == HttpStatusCode.OK) + { + object obj = Tools.Todejosn(isLogin.Html); + if (((dynamic)obj)["Code"] == "0000") + { + if (((dynamic)obj)["Data"]["integral"] >= AppSysConfig.getTypeById(intType).consNum) + { + _action?.Invoke(guidTag, DisplyType.chongzhi, ""); + string accountName = ""; + bool flag = false; + AppleChangeItem changeItem2 = new AppleChangeItem + { + newGuojia = changeItem.newGuojia, + newPwd = changeItem.newPwd, + newQt1 = changeItem.newQt1, + newQt2 = changeItem.newQt2, + newQt3 = changeItem.newQt3, + newshengri = changeItem.newshengri, + pay = changeItem.pay, + isDeleteDevice = changeItem.isDeleteDevice, + CreatePin = changeItem.CreatePin, + isRemoveRescueEmail = changeItem.isRemoveRescueEmail, + isUnlinkFamily = changeItem.isUnlinkFamily + }; + if ((!AppSysConfig.webProtocolS2k) ? new AppleManageWebUtlis(_action, _applyAtion, this).applyChangeAcount(appleAcount, changeItem2, errorGoint, openVpn, guidTag, ref accountName) : new AppleManageWeb(openVpn, _action, _applyAtion, this).applyChangeAcount(appleAcount, changeItem2, errorGoint, guidTag, ref accountName)) + { + APIUtlis.ApiApplyAct(intType, (intType == 1) ? "修改资料" : "国家转换"); + } + else if (!errorGoint) + { + base.isRun = false; + } + sucessAct?.Invoke(guidTag); + } + else + { + _action?.Invoke(guidTag, DisplyType.xinxi, "点数不足,请联系客服充值"); + } + } + else + { + _action?.Invoke(guidTag, DisplyType.xinxi, ((dynamic)obj)["Message"]); + } + } + else + { + _action?.Invoke(guidTag, DisplyType.xinxi, "网络请求失败"); + } + goto IL_0706; + } + } + catch (Exception ex2) + { + APIUtlis.ApiSeriveError(ex2); + if (appleAcount != null) + { + _action?.Invoke(appleAcount.guidTag, DisplyType.xinxi, "请求失败:" + ex2.Message); + } + goto IL_0706; + } + continue; + IL_0706: + BaseTask.endRuning(taskRunModel); + } + }); + } + Task.WaitAll(array); + try + { + Task[] array2 = array; + foreach (Task task in array2) + { + if (task.Status == TaskStatus.RanToCompletion) + { + task.Dispose(); + } + } + array = null; + } + catch (Exception) + { + } + AppleExecuteTask.TaskRunModels.Clear(); + base.TaskIsRun = false; + base.isRun = false; + endTakAct?.Invoke(); + }); + } + else + { + endTakAct?.Invoke(); + } + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/AppleChangAccountTask.cs b/AppleBatch_June.ExecuteTasks/AppleChangAccountTask.cs new file mode 100644 index 0000000..c645185 --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/AppleChangAccountTask.cs @@ -0,0 +1,17 @@ +namespace AppleBatch_June.ExecuteTasks +{ + public class AppleChangAccountTask : AppleAccountChangeTask + { + public new static AppleChangAccountTask Instance { get; private set; } + + static AppleChangAccountTask() + { + Instance = new AppleChangAccountTask("账号更改"); + } + + public AppleChangAccountTask(string _taskName) + : base(_taskName) + { + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/AppleChangeCityTask.cs b/AppleBatch_June.ExecuteTasks/AppleChangeCityTask.cs new file mode 100644 index 0000000..e397319 --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/AppleChangeCityTask.cs @@ -0,0 +1,17 @@ +namespace AppleBatch_June.ExecuteTasks +{ + public class AppleChangeCityTask : AppleAccountChangeTask + { + public new static AppleChangeCityTask Instance { get; private set; } + + static AppleChangeCityTask() + { + Instance = new AppleChangeCityTask("白ID转国家"); + } + + public AppleChangeCityTask(string _taskName) + : base(_taskName) + { + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/AppleNetworkBase.cs b/AppleBatch_June.ExecuteTasks/AppleNetworkBase.cs new file mode 100644 index 0000000..50948b9 --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/AppleNetworkBase.cs @@ -0,0 +1,689 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Net; +using System.Text; +using AppleBatch_June.Model; +using AppleBatch_June.Utils; +using DotNet.Utilities; + +namespace AppleBatch_June.ExecuteTasks +{ + public class AppleNetworkBase + { + protected ITaskRunState taskState; + + public bool openVpn; + + protected Action action; + + private string _appleId; + + public string ProxyIp { get; set; } + + public string appleId + { + get + { + return _appleId; + } + set + { + _appleId = value; + } + } + + public string notyKey { get; set; } + + public AppleNetworkBase(ITaskRunState _taskState, string _notyKey, Action _action = null, bool _OpenVpn = false) + { + taskState = _taskState ?? throw new Exception("任务运行状态不能是空的"); + notyKey = _notyKey; + openVpn = _OpenVpn; + action = _action; + } + + public bool getIsLogin(int type, Action _action) + { + _action?.Invoke(notyKey, DisplyType.xinxi, "正在处理"); + HttpResult isLogin = APIUtlis.getIsLogin(type); + if (isLogin.StatusCode == HttpStatusCode.OK) + { + dynamic val = Tools.Todejosn(isLogin.Html); + if (val["Code"] == "0000") + { + if (val["Data"]["integral"] >= AppSysConfig.getTypeById(type).consNum) + { + return true; + } + _action?.Invoke(notyKey, DisplyType.xinxi, "点数不足,请联系客服充值"); + } + else + { + _action?.Invoke(notyKey, DisplyType.xinxi, val["Message"]); + } + } + else + { + _action?.Invoke(notyKey, DisplyType.xinxi, "网络请求失败"); + } + return false; + } + + public string GetNoticeActKey(HttpItem item) + { + string result = notyKey; + if (item != null && item.Header != null) + { + string text = "noticeActKey"; + if (item.Header.AllKeys.Contains(text)) + { + result = item.Header[text]; + lock (item) + { + item.Header.Remove(text); + return result; + } + } + } + return result; + } + + public HttpResult GetHttpReuslt(HttpItem item, bool isContityNeet = true) + { + if (!taskState.isRun) + { + throw new Exception("停止执行"); + } + using HttpHelper httpHelper = new HttpHelper(); + string noticeActKey = GetNoticeActKey(item); + HttpResult httpResult = null; + int num = Tools.ToNetWorkInt(ConfigUtlis.getConfigValue("comNetworkConfig"), 0); + if (openVpn && num < 3) + { + bool flag = false; + int num2 = 1; + List proxyAccountModel = ProxyAccountCache.GetProxyAccountModel(ProxyIp); + do + { + flag = false; + if (num == 0 || num == 1) + { + if (!string.IsNullOrEmpty(ProxyIp)) + { + int secondsTimeOut = 15; + if (item.URL.Contains("redeemCode")) + { + secondsTimeOut = item.Timeout / 1000; + } + if (!ProxyRunService.CheckIpAlive(ProxyIp, secondsTimeOut)) + { + ProxyIp = ""; + } + } + if (string.IsNullOrEmpty(ProxyIp)) + { + action?.Invoke(noticeActKey, DisplyType.xinxi, "正在获取代理IP..." + num2); + ProxyIp = ProxyRunService.getProxyIp(taskState, num2); + if (string.IsNullOrEmpty(ProxyIp)) + { + if (taskState.isRun) + { + break; + } + throw new Exception("停止执行"); + } + foreach (ProxyAccountModel item2 in proxyAccountModel) + { + item2.ProxyIp = ProxyIp; + } + action?.Invoke(noticeActKey, DisplyType.xinxi, "代理IP获取成功.." + num2); + } + if (ProxyIp.Split('|').Length == 4) + { + string[] array = ProxyIp.Split('|'); + WebProxy webProxy = new WebProxy(); + webProxy.Address = new Uri($"http://{array[0].Trim()}:{array[1].Trim()}"); + webProxy.Credentials = new NetworkCredential(array[2].Trim(), array[3].Trim()); + item.WebProxy = webProxy; + item.KeepAlive = false; + } + else if (!string.IsNullOrEmpty(ProxyIp)) + { + item.WebProxy = new WebProxy(ProxyIp); + } + } + else if (num == 2) + { + WebProxy webProxy2 = new WebProxy(); + webProxy2.Address = new Uri(string.Format("http://{0}:{1}", ConfigUtlis.getConfigValue("txtTpsHost"), ConfigUtlis.getConfigValue("txtTpsPort"))); + webProxy2.Credentials = new NetworkCredential(ConfigUtlis.getConfigValue("txtTpsUserName"), ConfigUtlis.getConfigValue("txtTpsPwd")); + item.WebProxy = webProxy2; + } + if (item.Timeout > 35000 && isContityNeet) + { + item.Timeout = 35000; + } + if (item.ReadWriteTimeout > 35000) + { + item.ReadWriteTimeout = 35000; + } + if (num2 >= 2) + { + item.KeepAlive = false; + } + Stopwatch stopwatch = new Stopwatch(); + stopwatch.Start(); + httpResult = httpHelper.GetHtml(item); + stopwatch.Stop(); + if (httpResult.StatusCode != 0 && httpResult.StatusCode != (HttpStatusCode)441 && httpResult.StatusCode != HttpStatusCode.RequestTimeout && httpResult.StatusCode != HttpStatusCode.BadGateway && httpResult.StatusCode != HttpStatusCode.ServiceUnavailable && !(httpResult.Html == "操作已超时。")) + { + if (httpResult.StatusCode == HttpStatusCode.ProxyAuthenticationRequired) + { + ProxyRunService.removeIp(ProxyIp); + flag = true; + ProxyIp = string.Empty; + } + if (httpResult.Html.Contains("407 Proxy Authentication Required")) + { + ProxyRunService.removeIp(ProxyIp); + flag = true; + ProxyIp = string.Empty; + } + if (httpResult.Html.Contains("远程主机强迫关闭了一个现有的连接")) + { + ProxyRunService.removeIp(ProxyIp); + flag = true; + ProxyIp = string.Empty; + } + if ((item.Method.ToUpper() == "POST" || item.Method.ToUpper() == "PUT") && (httpResult.Html.Contains("发生未知错误") || httpResult.Html.Contains("BuyContentDisallowedForAccountFromFraudScoringTxn"))) + { + ProxyRunService.removeIp(ProxyIp); + flag = true; + ProxyIp = string.Empty; + } + if (proxyAccountModel.Count == 0 && !string.IsNullOrEmpty(ProxyIp)) + { + ProxyAccountCache.RestAllot(ProxyIp); + } + } + else + { + ProxyRunService.removeIp(ProxyIp); + flag = true; + ProxyIp = string.Empty; + } + num2++; + if (num2 > 50) + { + httpResult = null; + break; + } + } + while (flag && taskState.isRun && isContityNeet); + } + else + { + item.WebProxy = WebRequest.DefaultWebProxy; + httpResult = httpHelper.GetHtml(item); + } + if (httpResult == null) + { + item.Timeout = 30000; + item.ReadWriteTimeout = 30000; + item.WebProxy = WebRequest.DefaultWebProxy; + httpResult = httpHelper.GetHtml(item); + } + if (!string.IsNullOrEmpty(httpResult.Html)) + { + APIUtlis.AppRequestHtml(httpResult.Html); + APIUtlis.requestUrl = item.URL; + } + return httpResult; + } + + public HttpResult getItunesWebContext(string url, string referer, AppleItunesLogin itunelogin, Dictionary hander, bool addToken, ResultType resultType = ResultType.String) + { + string text = ""; + KeyValuePair[] array = itunelogin.cookis.ToArray(); + for (int i = 0; i < array.Length; i++) + { + KeyValuePair keyValuePair = array[i]; + text = text + keyValuePair.Key + "=" + keyValuePair.Value + ";"; + } + HttpItem httpItem = new HttpItem + { + URL = url, + Method = "get", + Timeout = 180000, + ReadWriteTimeout = 60000, + UserAgent = itunelogin.UserAgent, + Cookie = text, + ContentType = "text/html", + Accept = "*/*", + Referer = referer, + ProtocolVersion = HttpVersion.Version11, + KeepAlive = true, + PostDataType = PostDataType.Byte, + ResultType = resultType, + WebProxy = WebRequest.DefaultWebProxy + }; + if (hander != null) + { + array = hander.ToArray(); + for (int i = 0; i < array.Length; i++) + { + KeyValuePair keyValuePair2 = array[i]; + httpItem.Header.Add(keyValuePair2.Key, keyValuePair2.Value); + } + } + if (addToken) + { + httpItem.Header.Add("X-Dsid", itunelogin.dsis); + httpItem.Header.Add("X-Token", itunelogin.xtoken); + } + httpItem.Header.Add("X-Apple-Client-Application", "Software"); + httpItem.Header.Add("X-Apple-Connection-Type", "WiFi"); + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + addCookle(itunelogin, httpReuslt.Cookie); + return httpReuslt; + } + + protected void addHander(HttpItem item) + { + item.Header.Add("Accept-Encoding", "gzip, deflate"); + item.Header.Add("Accept-Language", "zh-CN,zh;q=0.9,en;q=0"); + } + + protected void addCookle(AppleItunesLogin itunesLogin, string cookies) + { + if (cookies == null || string.IsNullOrEmpty(cookies.Trim())) + { + return; + } + foreach (CookieItem cookie in HttpCookieHelper.GetCookieList(cookies)) + { + if (cookie.Key.ToLower() != "path" && cookie.Key.ToLower() != "domain" && cookie.Key.ToLower() != "expires" && cookie.Key.ToLower() != "max-age") + { + if (!itunesLogin.cookis.ContainsKey(cookie.Key)) + { + itunesLogin.cookis.Add(cookie.Key, cookie.Value); + } + else if (!string.IsNullOrEmpty(cookie.Value.Trim())) + { + itunesLogin.cookis[cookie.Key] = cookie.Value; + } + } + } + } + + public HttpResult postJsonItunesWebContext(string url, string postData, string referer, AppleItunesLogin itunelogin, Dictionary hander, bool addToken) + { + string text = ""; + KeyValuePair[] array = itunelogin.cookis.ToArray(); + for (int i = 0; i < array.Length; i++) + { + KeyValuePair keyValuePair = array[i]; + text = text + keyValuePair.Key + "=" + keyValuePair.Value + ";"; + } + HttpItem httpItem = new HttpItem + { + URL = url, + Method = "post", + Timeout = 180000, + ReadWriteTimeout = 60000, + UserAgent = itunelogin.UserAgent, + Cookie = text, + ContentType = "application/json; charset=UTF-8", + Accept = "application/json, text/javascript, */*; q=0.01", + Referer = referer, + ProtocolVersion = HttpVersion.Version11, + KeepAlive = true, + PostEncoding = Encoding.UTF8, + Postdata = postData, + ResultType = ResultType.String, + WebProxy = WebRequest.DefaultWebProxy + }; + if (hander != null) + { + foreach (KeyValuePair item in hander) + { + httpItem.Header.Add(item.Key, item.Value); + } + } + if (addToken) + { + httpItem.Header.Add("X-Dsid", itunelogin.dsis); + httpItem.Header.Add("X-Token", itunelogin.xtoken); + } + httpItem.Header.Add("X-Apple-Client-Application", "Software"); + httpItem.Header.Add("X-Apple-Connection-Type", "WiFi"); + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + addCookle(itunelogin, httpReuslt.Cookie); + return httpReuslt; + } + + public HttpResult getJsonItunesWebContext(string url, string referer, AppleItunesLogin itunelogin, Dictionary hander, bool addToken) + { + string text = ""; + KeyValuePair[] array = itunelogin.cookis.ToArray(); + for (int i = 0; i < array.Length; i++) + { + KeyValuePair keyValuePair = array[i]; + text = text + keyValuePair.Key + "=" + keyValuePair.Value + ";"; + } + HttpItem httpItem = new HttpItem + { + URL = url, + Method = "get", + Timeout = 180000, + ReadWriteTimeout = 60000, + UserAgent = itunelogin.UserAgent, + Cookie = text, + ContentType = "application/json; charset=UTF-8", + Accept = "application/json, text/javascript, */*; q=0.01", + Referer = referer, + ProtocolVersion = HttpVersion.Version11, + KeepAlive = true, + PostDataType = PostDataType.Byte, + ResultType = ResultType.String, + WebProxy = WebRequest.DefaultWebProxy + }; + if (hander != null) + { + foreach (KeyValuePair item in hander) + { + httpItem.Header.Add(item.Key, item.Value); + } + } + if (addToken) + { + httpItem.Header.Add("X-Dsid", itunelogin.dsis); + httpItem.Header.Add("X-Token", itunelogin.xtoken); + } + httpItem.Header.Add("X-Apple-Client-Application", "Software"); + httpItem.Header.Add("X-Apple-Connection-Type", "WiFi"); + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + addCookle(itunelogin, httpReuslt.Cookie); + return httpReuslt; + } + + protected HttpResult postLoginWebContext(string url, byte[] postData, string referer, string userAgent, Dictionary cookis, string index, Dictionary hander) + { + string cookie = "mzf_in=072381; " + ((index != "0") ? ("itspod=" + index + ";") : "") + " s_vi=; itsMetricsR=Genre-CN-Mobile%20Software%20Applications-29099@@Mobile%20Software%20Applications-main@@@@; " + ((index != "0") ? ("pod=" + index + ";") : "") + " s_vnum_n2_us=0%7C1"; + HttpItem httpItem = new HttpItem + { + URL = url, + Method = "post", + Timeout = 13000, + ReadWriteTimeout = 13000, + UserAgent = userAgent, + Cookie = cookie, + ContentType = "application/x-apple-plist; Charset=UTF-8", + Accept = "*/*", + Referer = referer, + ProtocolVersion = HttpVersion.Version11, + KeepAlive = true, + PostdataByte = postData, + PostDataType = PostDataType.Byte, + ResultType = ResultType.String, + WebProxy = WebRequest.DefaultWebProxy + }; + if (hander != null) + { + foreach (KeyValuePair item in hander) + { + httpItem.Header.Add(item.Key, item.Value); + } + } + addHander(httpItem); + httpItem.Header.Add("X-Apple-Partner", "origin.0"); + httpItem.Header.Add("X-Apple-Client-Application", "Software"); + httpItem.Header.Add("X-Apple-Connection-Type", "WiFi"); + httpItem.Header.Add("X-Apple-Client-Versions", "GameCenter/2.0"); + httpItem.Header.Add("X-Token-T", "M"); + httpItem.Header.Add("X-Apple-Tz", "28800"); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + Array.Clear(postData, 0, postData.Length); + return httpReuslt; + } + + public string GetKeyValue(string itemKey, string valueKey1, string valueKey2, string plist) + { + string text = ""; + bool num = plist.Contains(itemKey); + int num2 = 0; + if (num) + { + try + { + num2 = plist.IndexOf(itemKey, StringComparison.InvariantCulture); + text = plist.Substring(num2 + itemKey.Length); + num2 = text.IndexOf(valueKey1, StringComparison.InvariantCulture); + text = text.Substring(num2 + valueKey1.Length); + num2 = text.IndexOf(valueKey2, StringComparison.InvariantCulture); + text = text.Substring(0, num2); + } + catch (ArgumentNullException) + { + } + } + return text.Trim(); + } + + protected Dictionary ConveCookle(string cookies) + { + Dictionary dictionary = new Dictionary(); + if (cookies != null && !string.IsNullOrEmpty(cookies.Trim())) + { + foreach (CookieItem cookie in HttpCookieHelper.GetCookieList(cookies)) + { + if (cookie.Key.ToLower() != "path" && cookie.Key.ToLower() != "domain" && cookie.Key.ToLower() != "expires" && cookie.Key.ToLower() != "max-age") + { + if (!dictionary.ContainsKey(cookie.Key)) + { + dictionary.Add(cookie.Key, cookie.Value); + } + else if (!string.IsNullOrEmpty(cookie.Value.Trim())) + { + dictionary[cookie.Key] = cookie.Value; + } + } + } + return dictionary; + } + return dictionary; + } + + public static string GetToken(string source, string string_1, string string_2) + { + int num = source.IndexOf(string_1); + if (num > -1) + { + if (string.IsNullOrEmpty(string_2)) + { + return source.Substring(num + string_1.Length, source.Length - num - string_1.Length); + } + int num2 = source.IndexOf(string_2, num + string_1.Length); + if (num2 > -1) + { + return source.Substring(num + string_1.Length, num2 - num - string_1.Length); + } + } + return string.Empty; + } + + public string strplist(string string_0) + { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.Append("\n\n\t\n"); + string[] array = string_0.Split('&'); + foreach (string source in array) + { + string token = GetToken(source, "", "="); + string token2 = GetToken(source, "=", ""); + stringBuilder.Append("\t\t"); + stringBuilder.Append(token); + stringBuilder.Append("\n"); + if (token != "kbsync") + { + if (token == "supportsGpuContentProtection") + { + stringBuilder.Append("\t\t<" + token2 + "/>\n"); + continue; + } + stringBuilder.Append("\t\t"); + stringBuilder.Append(token2); + stringBuilder.Append("\n"); + } + else + { + stringBuilder.Append("\t\t"); + stringBuilder.Append(token2); + stringBuilder.Append("\n"); + } + } + stringBuilder.Append("\t\n"); + return stringBuilder.ToString(); + } + + public HttpResult postJsoniCloudWebContext(string url, string postData, string referer, AppleiCloundLogin cloundLogin, Dictionary hander) + { + string cookie = ""; + if (cloundLogin == null) + { + throw new Exception("没有登录状态"); + } + HttpItem httpItem = new HttpItem + { + URL = url, + Method = "post", + Timeout = 30000, + ReadWriteTimeout = 30000, + UserAgent = cloundLogin.userAgent, + Cookie = cookie, + ContentType = "application/json; charset=UTF-8", + Accept = "*/*", + Referer = referer, + ProtocolVersion = HttpVersion.Version11, + KeepAlive = true, + ResultType = ResultType.String, + Postdata = postData, + WebProxy = WebRequest.DefaultWebProxy + }; + hander.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(cloundLogin.dsid + ":" + cloundLogin.mmeAuthToken))); + hander.Add("X-Mme-Client-Info", cloundLogin.clientInfo); + if (hander != null) + { + foreach (KeyValuePair item in hander) + { + httpItem.Header.Add(item.Key, item.Value); + } + } + addHander(httpItem); + return GetHttpReuslt(httpItem); + } + + public HttpResult postItunesWebContext(string url, string postData, string referer, AppleItunesLogin itunelogin, Dictionary hander, bool isContityNeet = true) + { + string text = ""; + foreach (KeyValuePair cooki in itunelogin.cookis) + { + if (!string.IsNullOrEmpty(cooki.Value) && cooki.Key != "wosid") + { + text = text + cooki.Key + "=" + cooki.Value + ";"; + } + } + HttpItem httpItem = new HttpItem + { + URL = url, + Method = "post", + Timeout = 90000, + ReadWriteTimeout = 60000, + UserAgent = itunelogin.UserAgent, + Cookie = text, + ContentType = "application/x-apple-plist; Charset=UTF-8", + Accept = "*/*", + Referer = referer, + ProtocolVersion = HttpVersion.Version11, + KeepAlive = true, + Postdata = strplist(postData), + PostDataType = PostDataType.String, + ResultType = ResultType.String, + WebProxy = WebRequest.DefaultWebProxy, + Encoding = Encoding.UTF8 + }; + if (hander != null) + { + foreach (KeyValuePair item in hander) + { + httpItem.Header.Add(item.Key, item.Value); + } + } + httpItem.Header.Add("X-Dsid", itunelogin.dsis); + httpItem.Header.Add("X-Token", itunelogin.xtoken); + httpItem.Header.Add("X-Apple-Software-Guid", itunelogin.Guid); + httpItem.Header.Add("X-Apple-Partner", "origin.0"); + httpItem.Header.Add("X-Apple-Client-Application", "Software"); + httpItem.Header.Add("X-Apple-Connection-Type", "WiFi"); + httpItem.Header.Add("X-Apple-Client-Versions", "GameCenter/2.0"); + httpItem.Header.Add("X-Token-T", "M"); + httpItem.Header.Add("X-Apple-Tz", "28800"); + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem, isContityNeet); + addCookle(itunelogin, httpReuslt.Cookie); + return httpReuslt; + } + + public HttpResult postUrlencodedItunesWebContext(string url, string postData, string referer, AppleItunesLogin itunelogin, Dictionary hander) + { + string text = ""; + foreach (KeyValuePair cooki in itunelogin.cookis) + { + text = text + cooki.Key + "=" + cooki.Value + ";"; + } + HttpItem httpItem = new HttpItem + { + URL = url, + Method = "post", + Timeout = 180000, + ReadWriteTimeout = 60000, + UserAgent = itunelogin.UserAgent, + Cookie = text, + ContentType = "application/x-www-form-urlencoded; charset=UTF-8", + Accept = "*/*", + Referer = referer, + ProtocolVersion = HttpVersion.Version11, + KeepAlive = true, + Postdata = postData, + PostDataType = PostDataType.String, + ResultType = ResultType.String, + WebProxy = WebRequest.DefaultWebProxy + }; + if (hander != null) + { + foreach (KeyValuePair item in hander) + { + httpItem.Header.Add(item.Key, item.Value); + } + } + httpItem.Header.Add("X-Dsid", itunelogin.dsis); + httpItem.Header.Add("X-Token", itunelogin.xtoken); + httpItem.Header.Add("X-Apple-Software-Guid", itunelogin.Guid); + httpItem.Header.Add("X-Apple-Partner", "origin.0"); + httpItem.Header.Add("X-Apple-Client-Application", "Software"); + httpItem.Header.Add("X-Apple-Connection-Type", "WiFi"); + httpItem.Header.Add("X-Apple-Client-Versions", "GameCenter/2.0"); + httpItem.Header.Add("X-Token-T", "M"); + httpItem.Header.Add("X-Apple-Tz", "28800"); + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + addCookle(itunelogin, httpReuslt.Cookie); + return httpReuslt; + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/AreaQueryTask.cs b/AppleBatch_June.ExecuteTasks/AreaQueryTask.cs new file mode 100644 index 0000000..5836e2c --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/AreaQueryTask.cs @@ -0,0 +1,283 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Threading.Tasks; +using AppleBatch_June.Model; +using AppleBatch_June.StartTaskModel; +using AppleBatch_June.Utils; +using DotNet.Utilities; + +namespace AppleBatch_June.ExecuteTasks +{ + public class AreaQueryTask : BaseTask + { + public static AreaQueryTask Instance { get; private set; } + + static AreaQueryTask() + { + Instance = new AreaQueryTask("区域查询"); + } + + public AreaQueryTask(string _taskName) + : base(_taskName) + { + } + + public void AreaRequestTask(int TaskSize, bool openVpn, List lvItems, Action startAct, Action endTakAct, Action resut, string type = "area") + { + TaskSize = Tools.getTaskSize(openVpn, lvItems.Count); + if (!base.isRun) + { + AppleExecuteTask.TaskRunAppleIdCount = 0L; + AppleExecuteTask.TaskRunModels.Clear(); + startAct?.Invoke(); + base.isRun = true; + Task.Run(delegate + { + base.TaskIsRun = true; + base.baseEndTakAct = endTakAct; + Task[] array = new Task[TaskSize]; + for (int i = 0; i < TaskSize; i++) + { + ApiNetReq.startNowFun = ((type == "area") ? 5 : 2); + array[i] = Task.Run(delegate + { + string guid = Guid.NewGuid().ToString("n"); + TaskRunModel taskRunModel = new TaskRunModel + { + guid = guid, + isRuning = false + }; + AppleExecuteTask.TaskRunModels.Add(taskRunModel); + while (base.isRun) + { + AppleAcount appleAcount = null; + AreaRequestModel model = new AreaRequestModel(); + model.state = 0; + try + { + lock (lvItems) + { + appleAcount = lvItems.Where((AppleAcount c) => !c.isAct).FirstOrDefault(); + if (appleAcount == null) + { + break; + } + appleAcount.isAct = true; + } + string notityKey = appleAcount.guidTag; + if (BaseTask.startRuning(taskRunModel, delegate(string appleid, DisplyType reustType, string dasReust2) + { + resut?.Invoke(notityKey, model.Init(0, dasReust2)); + }, notityKey)) + { + resut?.Invoke(notityKey, model.Init(0, "正在处理")); + if (AppSysConfig.iTunesisRemoteLogin) + { + HttpResult httpResult = APIUtlis.QueryInfo(appleAcount.appleId, appleAcount.applePwd + (appleAcount.isDoubleModl ? appleAcount.DoublePwd : ""), type); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + object obj = Tools.Todejosn(httpResult.Html); + string text = ((dynamic)obj)["Message"]; + if (string.IsNullOrEmpty(text) || text == "失败:") + { + int num = 0; + do + { + httpResult = APIUtlis.QueryInfo(appleAcount.appleId, appleAcount.applePwd + ((!appleAcount.isDoubleModl) ? "" : appleAcount.DoublePwd), type); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + obj = Tools.Todejosn(httpResult.Html); + text = ((dynamic)obj)["Message"]; + if (text == "失败:") + { + text = ""; + } + } + num++; + } + while (num < 5 && string.IsNullOrEmpty(text)); + } + if (((dynamic)obj)["Code"] == "0000") + { + Dictionary dictionary = ((dynamic)obj)["Data"] as Dictionary; + object obj2 = ((dynamic)obj)["Data"]["ServerId"]; + object obj3 = ((dynamic)obj)["Data"]["bannal"]; + string value = ((dynamic)obj)["Data"]["Area"]; + string text2 = ((dynamic)obj)["Data"]["msg"]; + if (dictionary.ContainsKey("nextServerId")) + { + int num2 = Tools.ToInt((dynamic)dictionary["nextServerId"], 0); + bool flag; + if (((!(flag = num2 > 0)) ? ((object)flag) : (flag & string.IsNullOrEmpty((dynamic)obj3))) && string.IsNullOrEmpty((dynamic)obj2) && string.IsNullOrEmpty(value)) + { + string[] array3 = AppSysConfig.getConfig("UpIdGuidKeyWork").Split('|'); + foreach (string value2 in array3) + { + if (text2.Contains(value2)) + { + AppleGuidManage.UpIdGuid(appleAcount.appleId, appleAcount.applePwd + (appleAcount.isDoubleModl ? appleAcount.DoublePwd : "")); + httpResult = APIUtlis.QueryInfo(appleAcount.appleId, appleAcount.applePwd + (appleAcount.isDoubleModl ? appleAcount.DoublePwd : ""), type); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + obj = Tools.Todejosn(httpResult.Html); + text = ((dynamic)obj)["Message"]; + if (text == "失败:") + { + text = ""; + } + } + break; + } + } + } + } + } + if (((dynamic)obj)["Code"] == "0000") + { + Dictionary dictionary2 = ((dynamic)obj)["Data"] as Dictionary; + object obj4 = ((dynamic)obj)["Data"]["ServerId"]; + object obj5 = ((dynamic)obj)["Data"]["bannal"]; + if (string.IsNullOrEmpty((dynamic)obj5)) + { + obj5 = "0"; + } + string area = ((dynamic)obj)["Data"]["Area"]; + string isDisabledAccount = ((dynamic)obj)["Data"]["isDisabledAccount"]; + if (dictionary2.ContainsKey("extend")) + { + model.extension = (dynamic)dictionary2["extend"]; + } + model.msg = ((dynamic)obj)["Data"]["msg"]; + model.ServerId = (dynamic)obj4; + model.balance = (dynamic)obj5; + model.Area = AppleUtlis.GetAreaByArea(area); + model.state = 1; + model.isDisabledAccount = isDisabledAccount; + resut?.Invoke(notityKey, model); + } + else + { + resut?.Invoke(notityKey, model.Init(1, ((dynamic)obj)["Message"])); + } + } + else + { + resut?.Invoke(notityKey, model.Init(1, "网络请求失败:" + httpResult.StatusCode)); + } + } + else + { + HttpResult isLogin = APIUtlis.getIsLogin((type == "area") ? 5 : 2); + if (isLogin.StatusCode == HttpStatusCode.OK) + { + object obj6 = Tools.Todejosn(isLogin.Html); + if (((dynamic)obj6)["Code"] == "0000") + { + if (((dynamic)obj6)["Data"]["integral"] >= AppSysConfig.getTypeById((type == "area") ? 5 : 2).consNum) + { + resut?.Invoke(notityKey, model.Init(0, "开始登录..")); + ItunesUtlis itunesUtlis = new ItunesUtlis(this, notityKey, delegate(string apple, DisplyType Dtype, string reust) + { + if (Dtype == DisplyType.xinxi) + { + resut?.Invoke(notityKey, model.Init(-1, reust)); + } + }, openVpn); + AppleItunesLogin appleItunesLogin = null; + bool isAppleSuccess = false; + string msgReust = ""; + if (string.IsNullOrEmpty(itunesUtlis.ProxyIp)) + { + itunesUtlis.ProxyIp = ProxyAccountCache.getProxyAccountIP(appleAcount.appleId); + } + appleItunesLogin = itunesUtlis.appleLogin(appleAcount.appleId, appleAcount.applePwd + (appleAcount.isDoubleModl ? appleAcount.DoublePwd : ""), 1, ref msgReust, out isAppleSuccess); + if (appleItunesLogin != null) + { + if (appleAcount.isDoubleModl) + { + appleItunesLogin.pwd = appleAcount.applePwd; + } + iTunesAccountLoginCache.addReddemUserInfo(appleAcount.appleId, appleItunesLogin); + string serverId = appleItunesLogin.ServerId.ToString(); + model.ServerId = serverId; + model.balance = appleItunesLogin.Balance; + model.Area = appleItunesLogin.Area; + model.state = 1; + model.extension = appleItunesLogin.extension; + model.isDisabledAccount = appleItunesLogin.isDisabledAccount; + resut?.Invoke(notityKey, model.Init(1, "查询完成")); + } + else + { + resut?.Invoke(notityKey, model.Init(1, msgReust)); + isAppleSuccess = false; + } + if (isAppleSuccess) + { + APIUtlis.ApiApplyAct((type == "area") ? 5 : 2, (type == "area") ? "区域查询" : "余额查询"); + } + } + else + { + resut?.Invoke(notityKey, model.Init(1, "点数不足,请联系客服充值")); + } + } + else + { + resut?.Invoke(notityKey, model.Init(1, ((dynamic)obj6)["Message"])); + } + } + else + { + resut?.Invoke(notityKey, model.Init(1, "网络请求失败")); + } + } + goto IL_1cb8; + } + } + catch (Exception ex2) + { + APIUtlis.ApiSeriveError(ex2); + if (appleAcount != null) + { + resut?.Invoke(appleAcount.guidTag, model.Init(-1, " 请求失败: " + ex2.Message)); + } + goto IL_1cb8; + } + continue; + IL_1cb8: + BaseTask.endRuning(taskRunModel); + } + }); + } + Task.WaitAll(array); + try + { + Task[] array2 = array; + foreach (Task task in array2) + { + if (task.Status == TaskStatus.RanToCompletion) + { + task.Dispose(); + } + } + array = null; + } + catch (Exception) + { + } + AppleExecuteTask.TaskRunModels.Clear(); + base.TaskIsRun = false; + base.isRun = false; + endTakAct?.Invoke(); + }); + } + else + { + endTakAct?.Invoke(); + } + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/BalanceQueryTask.cs b/AppleBatch_June.ExecuteTasks/BalanceQueryTask.cs new file mode 100644 index 0000000..ba27356 --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/BalanceQueryTask.cs @@ -0,0 +1,17 @@ +namespace AppleBatch_June.ExecuteTasks +{ + public class BalanceQueryTask : AreaQueryTask + { + public new static BalanceQueryTask Instance { get; private set; } + + static BalanceQueryTask() + { + Instance = new BalanceQueryTask("余额查询"); + } + + public BalanceQueryTask(string _taskName) + : base(_taskName) + { + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/CloseAuthenTask.cs b/AppleBatch_June.ExecuteTasks/CloseAuthenTask.cs new file mode 100644 index 0000000..eebfb69 --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/CloseAuthenTask.cs @@ -0,0 +1,147 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Threading.Tasks; +using AppleBatch_June.AppleWebServace; +using AppleBatch_June.Model; +using AppleBatch_June.StartTaskModel; +using DotNet.Utilities; + +namespace AppleBatch_June.ExecuteTasks +{ + public class CloseAuthenTask : BaseTask + { + public static CloseAuthenTask Instance { get; private set; } + + static CloseAuthenTask() + { + Instance = new CloseAuthenTask("关闭双重认证"); + } + + public CloseAuthenTask(string _taskName) + : base(_taskName) + { + } + + public void AppleCloseAuthenTask(int TaskSize, string newPassWord, bool openVpn, bool ckTailNumber, List lvItems, Action startAct, Action endTakAct, Action sucessAct, Action _action) + { + TaskSize = Tools.getTaskSize(openVpn, lvItems.Count); + if (!base.isRun) + { + AppleExecuteTask.TaskRunAppleIdCount = 0L; + AppleExecuteTask.TaskRunModels.Clear(); + startAct?.Invoke(); + base.isRun = true; + Task.Run(delegate + { + base.TaskIsRun = true; + base.baseEndTakAct = endTakAct; + Task[] array = new Task[TaskSize]; + for (int i = 0; i < TaskSize; i++) + { + ApiNetReq.startNowFun = 14; + array[i] = Task.Run(delegate + { + string guid = Guid.NewGuid().ToString("n"); + TaskRunModel taskRunModel = new TaskRunModel + { + guid = guid, + isRuning = false + }; + AppleExecuteTask.TaskRunModels.Add(taskRunModel); + while (base.isRun) + { + AppleAcount appleAcount = null; + try + { + lock (lvItems) + { + appleAcount = lvItems.Where((AppleAcount c) => !c.isAct).FirstOrDefault(); + if (appleAcount == null) + { + break; + } + appleAcount.isAct = true; + } + string guidTag = appleAcount.guidTag; + if (BaseTask.startRuning(taskRunModel, _action, guidTag)) + { + _action?.Invoke(guidTag, DisplyType.xinxi, "正在处理"); + HttpResult isLogin = APIUtlis.getIsLogin(14); + if (isLogin.StatusCode == HttpStatusCode.OK) + { + object obj = Tools.Todejosn(isLogin.Html); + if (((dynamic)obj)["Code"] == "0000") + { + if (((dynamic)obj)["Data"]["integral"] >= AppSysConfig.getTypeById(14).consNum) + { + _action?.Invoke(guidTag, DisplyType.chongzhi, ""); + bool flag = false; + if ((!AppSysConfig.webProtocolS2k) ? new AppleManageWebUtlis(_action, null, this).RetrievePassword(openVpn, appleAcount, newPassWord, guidTag, isCloseAuthen: true, ckTailNumber) : new AppleiForgotWeb(openVpn, _action, null, this).RetrievePassword(appleAcount, newPassWord, guidTag, isCloseAuthen: true, ckTailNumber)) + { + APIUtlis.ApiApplyAct(14, "关闭双重认证"); + } + sucessAct?.Invoke(guidTag); + } + else + { + _action?.Invoke(guidTag, DisplyType.xinxi, "点数不足,请联系客服充值"); + } + } + else + { + _action?.Invoke(guidTag, DisplyType.xinxi, ((dynamic)obj)["Message"]); + } + } + else + { + _action?.Invoke(guidTag, DisplyType.xinxi, "网络请求失败"); + } + goto IL_0551; + } + } + catch (Exception ex2) + { + APIUtlis.ApiSeriveError(ex2); + if (appleAcount != null) + { + _action?.Invoke(appleAcount.guidTag, DisplyType.xinxi, "请求失败:" + ex2.Message); + } + goto IL_0551; + } + continue; + IL_0551: + BaseTask.endRuning(taskRunModel); + } + }); + } + Task.WaitAll(array); + try + { + Task[] array2 = array; + foreach (Task task in array2) + { + if (task.Status == TaskStatus.RanToCompletion) + { + task.Dispose(); + } + } + array = null; + } + catch (Exception) + { + } + AppleExecuteTask.TaskRunModels.Clear(); + base.TaskIsRun = false; + base.isRun = false; + endTakAct?.Invoke(); + }); + } + else + { + endTakAct?.Invoke(); + } + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/CountryTask.cs b/AppleBatch_June.ExecuteTasks/CountryTask.cs new file mode 100644 index 0000000..da6aa14 --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/CountryTask.cs @@ -0,0 +1,130 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using AppleBatch_June.Model; +using AppleBatch_June.StartTaskModel; + +namespace AppleBatch_June.ExecuteTasks +{ + public class CountryTask : BaseTask + { + public static CountryTask Instance { get; private set; } + + static CountryTask() + { + Instance = new CountryTask("iTunes转国家"); + } + + public CountryTask(string _taskName) + : base(_taskName) + { + } + + public void AppleCountryTask(int TaskSize, PaymentInfo payment, bool openVpn, List lvItems, Action startAct, Action endTakAct, Action sucessAct, Action _action) + { + TaskSize = Tools.getTaskSize(openVpn, lvItems.Count); + if (!base.isRun) + { + AppleExecuteTask.TaskRunAppleIdCount = 0L; + AppleExecuteTask.TaskRunModels.Clear(); + startAct?.Invoke(); + base.isRun = true; + Task.Run(delegate + { + base.TaskIsRun = true; + base.baseEndTakAct = endTakAct; + Task[] array = new Task[TaskSize]; + for (int i = 0; i < TaskSize; i++) + { + ApiNetReq.startNowFun = 11; + array[i] = Task.Run(delegate + { + string guid = Guid.NewGuid().ToString("n"); + TaskRunModel taskRunModel = new TaskRunModel + { + guid = guid, + isRuning = false + }; + AppleExecuteTask.TaskRunModels.Add(taskRunModel); + while (base.isRun) + { + AppleAcount appleAcount = null; + try + { + lock (lvItems) + { + appleAcount = lvItems.Where((AppleAcount c) => !c.isAct).FirstOrDefault(); + if (appleAcount == null) + { + break; + } + appleAcount.isAct = true; + } + string guidTag = appleAcount.guidTag; + if (BaseTask.startRuning(taskRunModel, _action, guidTag)) + { + ItunesUtlis itunesUtlis = new ItunesUtlis(this, guidTag, _action, openVpn); + AppleItunesLogin itunesLogin = getItunesLogin(appleAcount, 11, _action, itunesUtlis); + if (itunesLogin != null) + { + itunesLogin.account = appleAcount.appleId; + _action?.Invoke(guidTag, DisplyType.area, itunesLogin.Area); + _action?.Invoke(guidTag, DisplyType.xinxi, "正在修改国家"); + string msg = ""; + bool num = itunesUtlis.itunesCountryChangen(itunesLogin, payment, openVpn, ref msg); + _action?.Invoke(guidTag, DisplyType.xinxi, msg); + if (num) + { + _action?.Invoke(guidTag, DisplyType.guojia, payment.billingAddress.countryCode); + APIUtlis.ApiApplyAct(11, "itunes修改国家"); + } + sucessAct?.Invoke(guidTag); + } + goto IL_01f7; + } + } + catch (Exception ex2) + { + APIUtlis.ApiSeriveError(ex2); + if (appleAcount != null) + { + _action?.Invoke(appleAcount.guidTag, DisplyType.xinxi, "请求失败:" + ex2.Message); + } + goto IL_01f7; + } + continue; + IL_01f7: + BaseTask.endRuning(taskRunModel); + } + }); + } + Task.WaitAll(array); + try + { + Task[] array2 = array; + foreach (Task task in array2) + { + if (task.Status == TaskStatus.RanToCompletion) + { + task.Dispose(); + } + } + array = null; + } + catch (Exception) + { + } + AppleExecuteTask.TaskRunModels.Clear(); + base.TaskIsRun = false; + base.isRun = false; + endTakAct?.Invoke(); + }); + } + else + { + endTakAct?.Invoke(); + } + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/CreateFamilyTask.cs b/AppleBatch_June.ExecuteTasks/CreateFamilyTask.cs new file mode 100644 index 0000000..5afa279 --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/CreateFamilyTask.cs @@ -0,0 +1,126 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using AppleBatch_June.Model; +using AppleBatch_June.StartTaskModel; + +namespace AppleBatch_June.ExecuteTasks +{ + public class CreateFamilyTask : BaseTask + { + public static CreateFamilyTask Instance { get; private set; } + + static CreateFamilyTask() + { + Instance = new CreateFamilyTask("开通家庭共享"); + } + + public CreateFamilyTask(string _taskName) + : base(_taskName) + { + } + + public void ExecuteCreateFamily(int TaskSize, bool openVpn, List lvItems, Action startAct, Action endTakAct, Action sucessAct, Action _action) + { + TaskSize = Tools.getTaskSize(openVpn, lvItems.Count); + int type = 32; + if (!ShopBalanceTask.Instance.isRun) + { + AppleExecuteTask.TaskRunAppleIdCount = 0L; + AppleExecuteTask.TaskRunModels.Clear(); + startAct?.Invoke(); + Instance.isRun = true; + Instance.TaskIsRun = true; + base.baseEndTakAct = endTakAct; + Task.Run(delegate + { + ApiNetReq.startNowFun = type; + Task[] array = new Task[TaskSize]; + for (int i = 0; i < TaskSize; i++) + { + array[i] = Task.Run(delegate + { + string guid = Guid.NewGuid().ToString("n"); + TaskRunModel taskRunModel = new TaskRunModel + { + guid = guid, + isRuning = false + }; + AppleExecuteTask.TaskRunModels.Add(taskRunModel); + while (Instance.isRun) + { + AppleAcount appleAcount = null; + try + { + lock (lvItems) + { + appleAcount = lvItems.Where((AppleAcount c) => !c.isAct).FirstOrDefault(); + if (appleAcount == null) + { + break; + } + appleAcount.isAct = true; + } + if (BaseTask.startRuning(taskRunModel, _action, appleAcount.appleId)) + { + iCloundUtils iCloundUtils2 = new iCloundUtils(this, appleAcount.appleId, _action, openVpn); + _action?.Invoke(appleAcount.appleId, DisplyType.chongzhi, ""); + iCloundUtils2.appleId = appleAcount.appleId; + AppleiCloundLogin appleiCloundLogin = iCloundUtils2.loginDelegates(appleAcount.appleId, appleAcount.applePwd, type); + if (appleiCloundLogin != null) + { + appleiCloundLogin.account = appleAcount.appleId; + if (iCloundUtils2.createFamily(appleiCloundLogin, appleAcount.newAppleId, appleAcount.newAppleId, appleAcount.newApplePopPwd)) + { + ApiApplyAct(type, "开通家庭共享"); + } + } + sucessAct?.Invoke(appleAcount.appleId); + goto IL_01b6; + } + } + catch (Exception ex2) + { + APIUtlis.ApiSeriveError(ex2); + if (appleAcount != null) + { + _action?.Invoke(appleAcount.appleId, DisplyType.xinxi, "请求失败:" + ex2.Message); + } + goto IL_01b6; + } + continue; + IL_01b6: + BaseTask.endRuning(taskRunModel); + } + }); + } + Task.WaitAll(array); + try + { + Task[] array2 = array; + foreach (Task task in array2) + { + if (task.Status == TaskStatus.RanToCompletion) + { + task.Dispose(); + } + } + array = null; + } + catch (Exception) + { + } + AppleExecuteTask.TaskRunModels.Clear(); + Instance.TaskIsRun = false; + Instance.isRun = false; + endTakAct?.Invoke(); + }); + } + else + { + endTakAct?.Invoke(); + } + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/CycleReddemTask.cs b/AppleBatch_June.ExecuteTasks/CycleReddemTask.cs new file mode 100644 index 0000000..a9e6be3 --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/CycleReddemTask.cs @@ -0,0 +1,259 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using AppleBatch_June.Model; +using AppleBatch_June.StartTaskModel; + +namespace AppleBatch_June.ExecuteTasks +{ + public class CycleReddemTask : BaseTask + { + private readonly Dictionary ReddemLogAccount = new Dictionary(); + + private readonly Dictionary objReddemLockS = new Dictionary(); + + private readonly object objReddemLock = new object(); + + public static CycleReddemTask Instance { get; private set; } + + static CycleReddemTask() + { + Instance = new CycleReddemTask("循环卡片兑换"); + } + + public CycleReddemTask(string _taskName) + : base(_taskName) + { + } + + public void AppleCycleReddemTask(int TaskSize, List lvItems, bool _OpenVpn, bool remoteReddem, bool singleProcessRedeem, Action startAct, Action endTakAct, Action sucessAct, Action _action, Action _applyAtion) + { + TaskSize = Tools.getTaskSize(_OpenVpn, lvItems.Count); + if (!base.isRun) + { + AppleExecuteTask.TaskRunAppleIdCount = 0L; + AppleExecuteTask.TaskRunModels.Clear(); + startAct?.Invoke(); + base.isRun = true; + Task.Run(delegate + { + ReddemLogAccount.Clear(); + ApiNetReq.startNowFun = 37; + base.TaskIsRun = true; + base.baseEndTakAct = endTakAct; + Task[] array = new Task[TaskSize]; + for (int i = 0; i < TaskSize; i++) + { + array[i] = Task.Run(delegate + { + string guid = Guid.NewGuid().ToString("n"); + TaskRunModel taskRunModel = new TaskRunModel + { + guid = guid, + isRuning = false + }; + AppleExecuteTask.TaskRunModels.Add(taskRunModel); + while (base.isRun) + { + AppleAcount listView = null; + try + { + lock (lvItems) + { + AppleAcount appleAcount = lvItems.Where((AppleAcount c) => !c.isAct && c.reddeemLockTaskGuid == guid).FirstOrDefault(); + if (appleAcount == null) + { + listView = lvItems.Where((AppleAcount c) => !c.isAct && string.IsNullOrEmpty(c.reddeemLockTaskGuid)).FirstOrDefault(); + if (listView == null) + { + break; + } + listView.isAct = true; + if (singleProcessRedeem) + { + foreach (AppleAcount item in lvItems.Where((AppleAcount c) => c.appleId == listView.appleId).ToList()) + { + item.reddeemLockTaskGuid = guid; + } + } + } + else + { + appleAcount.isAct = true; + listView = appleAcount; + } + } + if (BaseTask.startRuning(taskRunModel, _action, listView.reddemCode)) + { + ItunesUtlis itunesUtlis = new ItunesUtlis(this, listView.reddemCode, _action, _OpenVpn); + AppleItunesLogin appleItunesLogin = null; + lock (objReddemLock) + { + if (!objReddemLockS.ContainsKey(listView.appleId)) + { + objReddemLockS.Add(listView.appleId, new object()); + } + } + lock (objReddemLockS[listView.appleId]) + { + if (!ReddemLogAccount.ContainsKey(listView.appleId)) + { + appleItunesLogin = getItunesLogin(listView, 8, _action, itunesUtlis, 1); + if (appleItunesLogin != null) + { + ReddemLogAccount.Add(listView.appleId, appleItunesLogin); + } + } + else + { + appleItunesLogin = ReddemLogAccount[listView.appleId]; + } + } + if (appleItunesLogin != null) + { + string msg = ""; + ReddemeState reddemeState = ReddemeState.Unknown; + if (AppSysConfig.getConfig("ReddemCHNCheckRealName") == "1" && appleItunesLogin.AreaCode == "CHN" && !itunesUtlis.checkAccountRealNameState(listView.appleId)) + { + _action?.Invoke(listView.reddemCode, DisplyType.xinxi, "查询中国账号是否已实名.."); + switch (itunesUtlis.CheckNeedRealName(appleItunesLogin)) + { + case CheckRealNameType.Need: + _action?.Invoke(listView.reddemCode, DisplyType.xinxi, "ID账号未实名认证"); + goto end_IL_0055; + case CheckRealNameType.Unknown: + _action?.Invoke(listView.reddemCode, DisplyType.xinxi, "实名检查失败,请重试"); + goto end_IL_0055; + } + } + _action?.Invoke(listView.reddemCode, DisplyType.xinxi, "正在兑换"); + appleItunesLogin.reddemQts = listView.reddemQts; + string errorMessageKey = ""; + if (remoteReddem) + { + reddemeState = itunesUtlis.serverReddeme(appleItunesLogin, listView.reddemCode, ref msg, ref errorMessageKey, appleItunesLogin.serverIndex); + } + else + { + reddemeState = itunesUtlis.reddeme(appleItunesLogin, _OpenVpn, listView.reddemCode, listView.reddemCode, ref msg, ref errorMessageKey); + if (reddemeState == ReddemeState.doLogin) + { + _action?.Invoke(listView.reddemCode, DisplyType.xinxi, "正在重新登录.."); + appleItunesLogin = getItunesLogin(listView, 8, _action, itunesUtlis, 2); + if (appleItunesLogin != null) + { + if (ReddemLogAccount.ContainsKey(listView.appleId)) + { + ReddemLogAccount[listView.appleId] = appleItunesLogin; + } + else + { + ReddemLogAccount.Add(listView.appleId, appleItunesLogin); + } + _action?.Invoke(listView.reddemCode, DisplyType.xinxi, "正在兑换"); + reddemeState = itunesUtlis.reddeme(appleItunesLogin, _OpenVpn, listView.reddemCode, listView.reddemCode, ref msg, ref errorMessageKey); + } + } + } + _action?.Invoke(listView.reddemCode, DisplyType.xinxi, msg); + int num = 8; + if (reddemeState != ReddemeState.Unknown) + { + if (reddemeState == ReddemeState.lose) + { + _applyAtion?.Invoke(listView.reddemCode, DisplyType.reddemLose, "无效"); + } + else if (msg.Contains("兑换成功")) + { + _applyAtion?.Invoke(listView.reddemCode, DisplyType.reddemValid, "完成"); + num = 36; + } + else + { + _applyAtion?.Invoke(listView.reddemCode, DisplyType.reddemValid, "有效"); + } + if (int.TryParse(listView.overflow, out var result) && result > 0 && num == 8) + { + num = 37; + } + if (!msg.Contains("本商城无法获得您的账户信息")) + { + APIUtlis.ApiApplyAct(num, "Apple兑换"); + } + } + else + { + bool flag = false; + string[] array3 = AppSysConfig.getConfig("ReddemCardKeywordLoseOther").Split(','); + foreach (string value in array3) + { + if (!string.IsNullOrEmpty(value) && errorMessageKey.Contains(value)) + { + _applyAtion?.Invoke(listView.reddemCode, DisplyType.reddemLose, "无效"); + flag = true; + } + } + if (!flag) + { + _applyAtion?.Invoke(listView.reddemCode, DisplyType.reddemUNlock, "未知"); + lock (objReddemLock) + { + ReddemLogAccount.Remove(listView.appleId); + } + } + else + { + APIUtlis.ApiApplyAct(37, "循环兑换无效"); + } + } + sucessAct?.Invoke(listView.reddemCode, listView.appleId); + } + goto IL_0799; + } + end_IL_0055:; + } + catch (Exception ex2) + { + APIUtlis.ApiSeriveError(ex2); + if (listView != null) + { + _action?.Invoke(listView.reddemCode, DisplyType.xinxi, "请求失败:" + ex2.Message); + } + goto IL_0799; + } + continue; + IL_0799: + BaseTask.endRuning(taskRunModel); + } + }); + } + Task.WaitAll(array); + try + { + Task[] array2 = array; + foreach (Task task in array2) + { + if (task.Status == TaskStatus.RanToCompletion) + { + task.Dispose(); + } + } + array = null; + } + catch (Exception) + { + } + AppleExecuteTask.TaskRunModels.Clear(); + base.TaskIsRun = false; + base.isRun = false; + endTakAct?.Invoke(); + }); + } + else + { + endTakAct?.Invoke(); + } + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/DisabledTask.cs b/AppleBatch_June.ExecuteTasks/DisabledTask.cs new file mode 100644 index 0000000..96322c5 --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/DisabledTask.cs @@ -0,0 +1,148 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Threading.Tasks; +using AppleBatch_June.Interfaces; +using AppleBatch_June.Model; +using AppleBatch_June.StartTaskModel; +using DotNet.Utilities; + +namespace AppleBatch_June.ExecuteTasks +{ + public class DisabledTask : BaseTask + { + public static DisabledTask Instance { get; private set; } + + static DisabledTask() + { + Instance = new DisabledTask("禁用查询"); + } + + public DisabledTask(string _taskName) + : base(_taskName) + { + } + + public void AppleDisabledTask(bool openVpn, int TaskSize, int checkType, List lvItems, Action startAct, Action endTakAct, Action sucessAct, Action _action, Action _applyAtion) + { + TaskSize = Tools.getTaskSize(openVpn, lvItems.Count); + if (!base.isRun) + { + AppleExecuteTask.TaskRunAppleIdCount = 0L; + AppleExecuteTask.TaskRunModels.Clear(); + startAct?.Invoke(); + base.isRun = true; + Task.Run(delegate + { + base.TaskIsRun = true; + base.baseEndTakAct = endTakAct; + Task[] array = new Task[TaskSize]; + for (int i = 0; i < TaskSize; i++) + { + ApiNetReq.startNowFun = 3; + array[i] = Task.Run(delegate + { + string guid = Guid.NewGuid().ToString("n"); + TaskRunModel taskRunModel = new TaskRunModel + { + guid = guid, + isRuning = false + }; + AppleExecuteTask.TaskRunModels.Add(taskRunModel); + while (base.isRun) + { + AppleAcount appleAcount = null; + try + { + lock (lvItems) + { + appleAcount = lvItems.Where((AppleAcount c) => !c.isAct).FirstOrDefault(); + if (appleAcount == null) + { + break; + } + appleAcount.isAct = true; + } + string guidTag = appleAcount.guidTag; + if (BaseTask.startRuning(taskRunModel, _action, guidTag)) + { + _action?.Invoke(guidTag, DisplyType.xinxi, "正在处理"); + HttpResult isLogin = APIUtlis.getIsLogin(3); + if (isLogin.StatusCode == HttpStatusCode.OK) + { + object obj = Tools.Todejosn(isLogin.Html); + if (((dynamic)obj)["Code"] == "0000") + { + if (((dynamic)obj)["Data"]["integral"] >= AppSysConfig.getTypeById(3).consNum) + { + _action?.Invoke(guidTag, DisplyType.chongzhi, ""); + IAccountDisabled accountDisabled = null; + accountDisabled = ((checkType != 1) ? ((IAccountDisabled)new iTunesAccountDisabled(openVpn, _action, _applyAtion, this)) : ((IAccountDisabled)new WebAccountDisabled(openVpn, _action, _applyAtion, this))); + if (accountDisabled.accountCheck(appleAcount.appleId, appleAcount.applePwd + (appleAcount.isDoubleModl ? appleAcount.DoublePwd : ""), guidTag)) + { + APIUtlis.ApiApplyAct(3, "Apple禁用检测"); + } + sucessAct?.Invoke(guidTag); + } + else + { + _action?.Invoke(guidTag, DisplyType.xinxi, "点数不足,请联系客服充值"); + } + } + else + { + _action?.Invoke(guidTag, DisplyType.xinxi, ((dynamic)obj)["Message"]); + } + } + else + { + _action?.Invoke(guidTag, DisplyType.xinxi, "网络请求失败"); + } + goto IL_055e; + } + } + catch (Exception ex2) + { + APIUtlis.ApiSeriveError(ex2); + if (appleAcount != null) + { + _action?.Invoke(appleAcount.guidTag, DisplyType.xinxi, "请求失败:" + ex2.Message); + } + goto IL_055e; + } + continue; + IL_055e: + BaseTask.endRuning(taskRunModel); + } + }); + } + Task.WaitAll(array); + try + { + Task[] array2 = array; + foreach (Task task in array2) + { + if (task.Status == TaskStatus.RanToCompletion) + { + task.Dispose(); + } + } + array = null; + } + catch (Exception) + { + } + AppleExecuteTask.TaskRunModels.Clear(); + base.TaskIsRun = false; + base.isRun = false; + endTakAct?.Invoke(); + }); + } + else + { + endTakAct?.Invoke(); + } + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/EditAddrsTask.cs b/AppleBatch_June.ExecuteTasks/EditAddrsTask.cs new file mode 100644 index 0000000..b90109a --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/EditAddrsTask.cs @@ -0,0 +1,160 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Threading.Tasks; +using AppleBatch_June.AppleWebServace; +using AppleBatch_June.Model; +using AppleBatch_June.StartTaskModel; +using DotNet.Utilities; + +namespace AppleBatch_June.ExecuteTasks +{ + public class EditAddrsTask : BaseTask + { + public static EditAddrsTask Instance { get; private set; } + + static EditAddrsTask() + { + Instance = new EditAddrsTask("修改账单地址"); + } + + public EditAddrsTask(string _taskName) + : base(_taskName) + { + } + + public void AppleEditAddrsTask(int TaskSize, bool openVpn, bool ckShippingAddress, List lvItems, Action startAct, Action endTakAct, Action sucessAct, Action _action) + { + TaskSize = Tools.getTaskSize(openVpn, lvItems.Count); + if (!base.isRun) + { + AppleExecuteTask.TaskRunAppleIdCount = 0L; + AppleExecuteTask.TaskRunModels.Clear(); + startAct?.Invoke(); + base.isRun = true; + Task.Run(delegate + { + ApiNetReq.startNowFun = 18; + base.TaskIsRun = true; + base.baseEndTakAct = endTakAct; + Task[] array = new Task[TaskSize]; + for (int i = 0; i < TaskSize; i++) + { + array[i] = Task.Run(delegate + { + string guid = Guid.NewGuid().ToString("n"); + TaskRunModel taskRunModel = new TaskRunModel + { + guid = guid, + isRuning = false + }; + AppleExecuteTask.TaskRunModels.Add(taskRunModel); + while (base.isRun) + { + AppleAcount appleAcount = null; + try + { + lock (lvItems) + { + appleAcount = lvItems.Where((AppleAcount c) => !c.isAct).FirstOrDefault(); + if (appleAcount == null) + { + break; + } + appleAcount.isAct = true; + } + if (appleAcount != null) + { + string guidTag = appleAcount.guidTag; + if (!BaseTask.startRuning(taskRunModel, _action, guidTag)) + { + continue; + } + _action?.Invoke(guidTag, DisplyType.xinxi, "正在处理"); + HttpResult isLogin = APIUtlis.getIsLogin(18); + if (isLogin.StatusCode == HttpStatusCode.OK) + { + object obj = Tools.Todejosn(isLogin.Html); + if (((dynamic)obj)["Code"] == "0000") + { + if (((dynamic)obj)["Data"]["integral"] >= AppSysConfig.getTypeById(18).consNum) + { + _action?.Invoke(guidTag, DisplyType.chongzhi, ""); + AppleChangeItem changeItem = new AppleChangeItem + { + editAddrs = appleAcount.addres, + newGuojia = "", + newPwd = "", + newQt1 = "", + newQt2 = "", + newQt3 = "", + pay = null, + newshengri = "", + ckShippingAddress = ckShippingAddress + }; + string accountName = ""; + bool flag = false; + if ((!AppSysConfig.webProtocolS2k) ? new AppleManageWebUtlis(_action, _action, this).applyChangeAcount(appleAcount, changeItem, errorGoint: true, openVpn, guidTag, ref accountName) : new AppleManageWeb(openVpn, _action, _action, this).applyChangeAcount(appleAcount, changeItem, errorGoint: true, guidTag, ref accountName)) + { + sucessAct?.Invoke(guidTag); + APIUtlis.ApiApplyAct(18, "Apple账单地址修改"); + } + } + else + { + _action?.Invoke(guidTag, DisplyType.xinxi, "点数不足,请联系客服充值"); + } + } + else + { + _action?.Invoke(guidTag, DisplyType.xinxi, ((dynamic)obj)["Message"]); + } + } + else + { + _action?.Invoke(guidTag, DisplyType.xinxi, "网络请求失败"); + } + } + } + catch (Exception ex2) + { + APIUtlis.ApiSeriveError(ex2); + if (appleAcount != null) + { + _action?.Invoke(appleAcount.guidTag, DisplyType.xinxi, "请求失败:" + ex2.Message); + } + } + BaseTask.endRuning(taskRunModel); + } + }); + } + Task.WaitAll(array); + try + { + Task[] array2 = array; + foreach (Task task in array2) + { + if (task.Status == TaskStatus.RanToCompletion) + { + task.Dispose(); + } + } + array = null; + } + catch (Exception) + { + } + AppleExecuteTask.TaskRunModels.Clear(); + base.TaskIsRun = false; + base.isRun = false; + endTakAct?.Invoke(); + }); + } + else + { + endTakAct?.Invoke(); + } + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/FamilyInfoTask.cs b/AppleBatch_June.ExecuteTasks/FamilyInfoTask.cs new file mode 100644 index 0000000..faa6b77 --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/FamilyInfoTask.cs @@ -0,0 +1,128 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using AppleBatch_June.Model; +using AppleBatch_June.StartTaskModel; + +namespace AppleBatch_June.ExecuteTasks +{ + public class FamilyInfoTask : BaseTask + { + public static FamilyInfoTask Instance { get; private set; } + + static FamilyInfoTask() + { + Instance = new FamilyInfoTask("家庭共享详情"); + } + + public FamilyInfoTask(string _taskName) + : base(_taskName) + { + } + + public void ExecuteQueryFamilyInfo(int TaskSize, bool openVpn, List lvItems, Action startAct, Action endTakAct, Action sucessAct, Action _action) + { + TaskSize = Tools.getTaskSize(openVpn, lvItems.Count); + if (!ShopBalanceTask.Instance.isRun) + { + AppleExecuteTask.TaskRunAppleIdCount = 0L; + AppleExecuteTask.TaskRunModels.Clear(); + startAct?.Invoke(); + Instance.isRun = true; + Instance.TaskIsRun = true; + base.baseEndTakAct = endTakAct; + Task.Run(delegate + { + ApiNetReq.startNowFun = 29; + Task[] array = new Task[TaskSize]; + for (int i = 0; i < TaskSize; i++) + { + array[i] = Task.Run(delegate + { + string guid = Guid.NewGuid().ToString("n"); + TaskRunModel taskRunModel = new TaskRunModel + { + guid = guid, + isRuning = false + }; + AppleExecuteTask.TaskRunModels.Add(taskRunModel); + while (Instance.isRun) + { + AppleAcount appleAcount = null; + try + { + lock (lvItems) + { + appleAcount = lvItems.Where((AppleAcount c) => !c.isAct).FirstOrDefault(); + if (appleAcount == null) + { + break; + } + appleAcount.isAct = true; + } + if (BaseTask.startRuning(taskRunModel, _action, appleAcount.appleId)) + { + _action?.Invoke(appleAcount.appleId, DisplyType.chongzhi, ""); + iCloundUtils iCloundUtils2 = new iCloundUtils(this, appleAcount.appleId, _action, openVpn) + { + appleId = appleAcount.appleId + }; + int type = 29; + AppleiCloundLogin appleiCloundLogin = iCloundUtils2.loginDelegates(appleAcount.appleId, appleAcount.applePwd + (appleAcount.isDoubleModl ? appleAcount.DoublePwd : ""), type); + if (appleiCloundLogin != null) + { + appleiCloundLogin.account = appleAcount.appleId; + if (iCloundUtils2.getFamilyDetails(appleiCloundLogin, iCloundUtils2)) + { + ApiApplyAct(type, "家庭共享详情"); + } + } + sucessAct?.Invoke(appleAcount.appleId); + goto IL_01be; + } + } + catch (Exception ex2) + { + APIUtlis.ApiSeriveError(ex2); + if (appleAcount != null) + { + _action?.Invoke(appleAcount.appleId, DisplyType.xinxi, "请求失败:" + ex2.Message); + } + goto IL_01be; + } + continue; + IL_01be: + BaseTask.endRuning(taskRunModel); + } + }); + } + Task.WaitAll(array); + try + { + Task[] array2 = array; + foreach (Task task in array2) + { + if (task.Status == TaskStatus.RanToCompletion) + { + task.Dispose(); + } + } + array = null; + } + catch (Exception) + { + } + AppleExecuteTask.TaskRunModels.Clear(); + Instance.TaskIsRun = false; + Instance.isRun = false; + endTakAct?.Invoke(); + }); + } + else + { + endTakAct?.Invoke(); + } + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/GameTask.cs b/AppleBatch_June.ExecuteTasks/GameTask.cs new file mode 100644 index 0000000..8f35e6a --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/GameTask.cs @@ -0,0 +1,188 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Threading.Tasks; +using AppleBatch_June.Model; +using AppleBatch_June.StartTaskModel; +using AppleBatch_June.Utils; + +namespace AppleBatch_June.ExecuteTasks +{ + public class GameTask : BaseTask + { + public static GameTask Instance { get; private set; } + + static GameTask() + { + Instance = new GameTask("获取游戏"); + } + + public GameTask(string _taskName) + : base(_taskName) + { + } + + private int passGetGameByUrl(bool ckQueryMOdel, GetGameUtils itunes, string gameUrl, AppleItunesLogin itunesLogin) + { + int num = 0; + if (ckQueryMOdel) + { + return itunes.getNewGameByUrl3(gameUrl, itunesLogin); + } + return itunes.getGameByUrl(gameUrl, itunesLogin); + } + + public void AppleGameTask(int TaskSize, List gameUrls, bool openVpn, bool ckQueryMOdel, List lvItems, Action startAct, Action endTakAct, Action sucessAct, Action _action) + { + TaskSize = Tools.getTaskSize(openVpn, lvItems.Count); + if (!base.isRun) + { + AppleExecuteTask.TaskRunAppleIdCount = 0L; + AppleExecuteTask.TaskRunModels.Clear(); + startAct?.Invoke(); + base.isRun = true; + base.baseEndTakAct = endTakAct; + Task.Run(delegate + { + ApiNetReq.startNowFun = 10; + base.TaskIsRun = true; + Task[] array = new Task[TaskSize]; + for (int i = 0; i < TaskSize; i++) + { + array[i] = Task.Run(delegate + { + string guid = Guid.NewGuid().ToString("n"); + TaskRunModel taskRunModel = new TaskRunModel + { + guid = guid, + isRuning = false + }; + AppleExecuteTask.TaskRunModels.Add(taskRunModel); + while (base.isRun) + { + AppleAcount appleAcount = null; + try + { + lock (lvItems) + { + appleAcount = lvItems.Where((AppleAcount c) => !c.isAct).FirstOrDefault(); + if (appleAcount == null) + { + break; + } + appleAcount.isAct = true; + } + string guidTag = appleAcount.guidTag; + if (BaseTask.startRuning(taskRunModel, _action, guidTag)) + { + GetGameUtils getGameUtils = new GetGameUtils(this, guidTag, _action, openVpn) + { + appleId = appleAcount.appleId + }; + AppleItunesLogin itunesLogin = getItunesLogin(appleAcount, 10, _action, getGameUtils, 1); + if (itunesLogin != null) + { + _action?.Invoke(guidTag, DisplyType.area, itunesLogin.Area); + _action?.Invoke(guidTag, DisplyType.gameCount, gameUrls.Count.ToString()); + _action?.Invoke(guidTag, DisplyType.gameFire, ""); + _action?.Invoke(guidTag, DisplyType.gameSuccess, ""); + _action?.Invoke(guidTag, DisplyType.xinxi, "正在获取应用"); + int num = 1; + int num2 = 0; + int num3 = 0; + foreach (string gameUrl in gameUrls) + { + if (base.isRun) + { + _action?.Invoke(guidTag, DisplyType.xinxi, "正在获取第" + num + "个应用"); + Stopwatch stopwatch = new Stopwatch(); + stopwatch.Start(); + num3 = passGetGameByUrl(ckQueryMOdel, getGameUtils, gameUrl, itunesLogin); + stopwatch.Stop(); + if (num3 == 99) + { + itunesLogin = getItunesLogin(appleAcount, 10, _action, getGameUtils, 2); + if (itunesLogin == null) + { + _action?.Invoke(guidTag, DisplyType.gameFire, "账号登录失败"); + break; + } + _action?.Invoke(guidTag, DisplyType.xinxi, "正在获取第" + num + "个应用"); + num3 = passGetGameByUrl(ckQueryMOdel, getGameUtils, gameUrl, itunesLogin); + _action?.Invoke(guidTag, DisplyType.gameCount, gameUrls.Count.ToString()); + } + if (num3 == 1) + { + num2++; + _action?.Invoke(guidTag, DisplyType.gameSuccess, "获取成功"); + } + else + { + _action?.Invoke(guidTag, DisplyType.gameFire, "获取失败"); + } + num++; + } + } + getGameUtils.endGetGame(itunesLogin); + if (num2 > 0) + { + if (num3 != 99) + { + _action?.Invoke(guidTag, DisplyType.xinxi, "获取完成"); + ApiApplyAct(10, "Apple获取游戏"); + } + } + else + { + _action?.Invoke(guidTag, DisplyType.xinxi, "获取失败"); + } + sucessAct?.Invoke(guidTag); + } + goto IL_03f9; + } + } + catch (Exception ex2) + { + APIUtlis.ApiSeriveError(ex2); + if (appleAcount != null) + { + _action?.Invoke(appleAcount.guidTag, DisplyType.xinxi, "请求失败:" + ex2.Message); + } + goto IL_03f9; + } + continue; + IL_03f9: + BaseTask.endRuning(taskRunModel); + } + }); + } + Task.WaitAll(array); + try + { + Task[] array2 = array; + foreach (Task task in array2) + { + if (task.Status == TaskStatus.RanToCompletion) + { + task.Dispose(); + } + } + array = null; + } + catch (Exception) + { + } + AppleExecuteTask.TaskRunModels.Clear(); + base.TaskIsRun = false; + base.isRun = false; + endTakAct?.Invoke(); + }); + } + else + { + endTakAct?.Invoke(); + } + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/GiftCardBalanceCheckTask.cs b/AppleBatch_June.ExecuteTasks/GiftCardBalanceCheckTask.cs new file mode 100644 index 0000000..9259706 --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/GiftCardBalanceCheckTask.cs @@ -0,0 +1,6 @@ +namespace AppleBatch_June.ExecuteTasks +{ + public class GiftCardBalanceCheckTask + { + } +} diff --git a/AppleBatch_June.ExecuteTasks/GiftcardBalanceAotuQueryTask.cs b/AppleBatch_June.ExecuteTasks/GiftcardBalanceAotuQueryTask.cs new file mode 100644 index 0000000..8a1cf9b --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/GiftcardBalanceAotuQueryTask.cs @@ -0,0 +1,448 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using System.Web; +using AppleBatch_June.Domain; +using AppleBatch_June.Model; +using AppleBatch_June.StartTaskModel; +using AppleBatch_June.Utils; +using DotNet.Utilities; + +namespace AppleBatch_June.ExecuteTasks +{ + public class GiftcardBalanceAotuQueryTask + { + private GiftcardBalanceWeb giftcardBalance; + + public BaseFormTaskRunState taskState = new BaseFormTaskRunState("礼品卡余额定时查询"); + + private Action action; + + public static object loginLockObj = new object(); + + public DateTime loginTime = DateTime.Now.AddHours(-1.0); + + public DateTime loginCheckTime = DateTime.Now.AddHours(-1.0); + + public bool expirationExecuted { get; set; } + + public string storeAppleHostLists + { + get + { + return _storeAppleHostLists; + } + set + { + if (value != _storeAppleHostLists) + { + if (giftcardBalance != null) + { + giftcardBalance = null; + } + giftcardBalance = new GiftcardBalanceWeb(value, action, action, taskState); + } + _storeAppleHostLists = value; + } + } + + private string _storeAppleHostLists { get; set; } + + public GiftcardBalanceAotuQueryTask(Action _action, Action _applyAtion) + { + action = _action; + giftcardBalance = new GiftcardBalanceWeb(_storeAppleHostLists, _action, _applyAtion, taskState); + } + + public void QuertAppleBlance(List acounts, Action reddemAction) + { + Task.Run(delegate + { + foreach (AppleAcount acount in acounts) + { + string appleId = acount.appleId; + string applePwd = acount.applePwd; + ItunesUtlis itunesUtlis = new ItunesUtlis(taskState, appleId, reddemAction); + reddemAction?.Invoke(appleId, DisplyType.xinxi, "正在查询.."); + string msgReust = ""; + AppleItunesLogin appleItunesLogin = itunesUtlis.remoteAppleLogin(appleId.Trim(), applePwd, ref msgReust, 2); + if (appleItunesLogin != null) + { + APIUtlis.ApiApplyAct(2, "余额查询"); + string text = ((appleItunesLogin.isDisabledAccount.ToLower() == "false") ? "正常" : "禁用"); + reddemAction?.Invoke(appleId, DisplyType.xinxi, "登录完成,余额:" + appleItunesLogin.Balance + ",状态:" + text + ",国家:" + appleItunesLogin.Area); + } + else + { + reddemAction?.Invoke(appleId, DisplyType.error, "失败"); + reddemAction?.Invoke(appleId, DisplyType.xinxi, msgReust); + } + } + }); + } + + public void Reddem(string reddemCode, List acounts, Action reddemAction) + { + ItunesUtlis itunesUtlis = new ItunesUtlis(taskState, reddemCode, reddemAction); + action?.Invoke(reddemCode, DisplyType.xinxi, "正在兑换.."); + foreach (AppleAcount acount in acounts) + { + bool flag = false; + string appleId = acount.appleId; + string applePwd = acount.applePwd; + reddemAction?.Invoke(appleId, DisplyType.xinxi, "正在登录"); + string msgReust = ""; + AppleItunesLogin appleItunesLogin = itunesUtlis.remoteAppleLogin(appleId.Trim(), applePwd, ref msgReust, 1); + if (appleItunesLogin != null) + { + if (appleItunesLogin.isDisabledAccount.ToLower() == "false") + { + reddemAction?.Invoke(appleId, DisplyType.xinxi, "登录完成,国家:" + appleItunesLogin.Area); + string msg = ""; + string errorMessageKey = ""; + if (itunesUtlis.serverReddeme(appleItunesLogin, reddemCode.Trim(), ref msg, ref errorMessageKey, appleItunesLogin.serverIndex) == ReddemeState.valid && string.IsNullOrEmpty(errorMessageKey)) + { + string text = appleId + msg; + action?.Invoke(reddemCode, DisplyType.reddemValid, text); + string value = new Regex("加载金额:([\\s\\S]*?),").Match(msg).Groups[1].Value; + decimal num = Tools.ConverCurrency(value); + reddemAction?.Invoke(appleId, DisplyType.reddemValid, num.ToString()); + APIUtlis.ApiApplyAct(33, "礼品卡余额自动兑换"); + action?.Invoke(reddemCode, DisplyType.xinxi, "兑换成功,金额:" + value.ToString()); + ininserToDb(reddemCode, value, text); + break; + } + string[] array = AppSysConfig.getConfig("AotoReddemCardKeywordAccountError").Split(','); + foreach (string value2 in array) + { + if (!string.IsNullOrEmpty(value2) && errorMessageKey.Contains(value2)) + { + reddemAction?.Invoke(appleId, DisplyType.error, "失败"); + reddemAction?.Invoke(appleId, DisplyType.xinxi, msg); + flag = true; + break; + } + } + if (!flag) + { + action?.Invoke(reddemCode, DisplyType.xinxi, "卡状态未知"); + action?.Invoke(reddemCode, DisplyType.reddemLose, appleId + msg); + ininserToDb(reddemCode, "", appleId + msg); + break; + } + } + else + { + reddemAction?.Invoke(appleId, DisplyType.error, "失败"); + reddemAction?.Invoke(appleId, DisplyType.xinxi, "账户已被禁用"); + } + } + else + { + reddemAction?.Invoke(appleId, DisplyType.error, "失败"); + reddemAction?.Invoke(appleId, DisplyType.xinxi, msgReust); + } + } + } + + public void Query(List lvItems, bool startVpn, string LoginAppleId, string LoginApwd, Action endAct, bool isAgain = false) + { + Task.Run(delegate + { + expirationExecuted = true; + int taskSize = Tools.getTaskSize(startVpn, lvItems.Count); + taskState.isRun = true; + taskState.TaskIsRun = true; + AppleExecuteTask.TaskRunAppleIdCount = 0L; + AppleExecuteTask.TaskRunModels.Clear(); + string text = ""; + if (lvItems.Count > 0) + { + text = lvItems[0].reddemCode; + } + giftcardBalance.appleId = text; + int num = 0; + DateTime now = DateTime.Now; + while (giftcardBalance.state == GiftcardBalanceWeb.GiftcardBalancState.busy && DateTime.Now.AddMinutes(-1.5) < now) + { + action(text, DisplyType.xinxi, "ID登录中" + getIngStr(num, 5)); + Thread.Sleep(300); + num++; + } + if (giftcardBalance.state == GiftcardBalanceWeb.GiftcardBalancState.success && !(giftcardBalance.LoginAppleId != LoginAppleId)) + { + action(text, DisplyType.xinxi, "ID登陆完成"); + } + else + { + action(text, DisplyType.xinxi, "正在登陆ID" + getIngStr(3, 4)); + if (!giftcardBalance.shopSignIn(LoginAppleId, LoginApwd, startVpn, out var error)) + { + giftcardBalance.Reset(); + action(text, DisplyType.error, error); + action(text, DisplyType.xinxi, error); + endAct?.Invoke(); + return; + } + string arg = giftcardBalance.storeAppleHost.Replace(".store.apple.com", ""); + GiftcardBalanceStandby standby = GiftcardBalanceManage.GetStandby(_storeAppleHostLists, LoginAppleId); + if (standby == null) + { + GiftcardBalanceManage.AddGifStandby(_storeAppleHostLists, LoginAppleId, LoginApwd); + standby = GiftcardBalanceManage.GetStandby(_storeAppleHostLists, LoginAppleId); + } + if (standby != null && giftcardBalance.storeAppleHostLists == _storeAppleHostLists) + { + standby.AddGiftcardBalance(giftcardBalance); + } + ProxyAccountCache.addProxyIp(LoginAppleId.Trim() + "_Aoto", giftcardBalance.ProxyIp); + action(text, DisplyType.newAccount, arg); + action(text, DisplyType.error, "ID登陆完成"); + action(text, DisplyType.xinxi, "ID登陆完成"); + } + Task[] array = new Task[taskSize]; + for (int i = 0; i < taskSize; i++) + { + array[i] = Task.Run(delegate + { + string guid = Guid.NewGuid().ToString("n"); + TaskRunModel taskRunModel = new TaskRunModel + { + guid = guid, + isRuning = false + }; + AppleExecuteTask.TaskRunModels.Add(taskRunModel); + while (taskState.isRun) + { + AppleAcount appleAcount = null; + try + { + lock (lvItems) + { + appleAcount = lvItems.Where((AppleAcount c) => !c.isAct).FirstOrDefault(); + if (appleAcount == null) + { + break; + } + appleAcount.isAct = true; + } + if (BaseTask.startRuning(taskRunModel, action, appleAcount.reddemCode)) + { + GiftcardBalanceStandby standby2 = GiftcardBalanceManage.GetStandby(_storeAppleHostLists, LoginAppleId); + if (standby2 == null) + { + GiftcardBalanceManage.AddGifStandby(_storeAppleHostLists, LoginAppleId, LoginApwd); + standby2 = GiftcardBalanceManage.GetStandby(_storeAppleHostLists, LoginAppleId); + standby2.GetRandomGiftcard(startVpn); + } + lock (loginLockObj) + { + if (DateTime.Now.AddSeconds(-10.0) > loginCheckTime) + { + loginCheckTime = DateTime.Now; + standby2.check(startVpn, action); + } + } + action(appleAcount.reddemCode, DisplyType.xinxi, "正在处理"); + int id = 23; + HttpResult isLogin = APIUtlis.getIsLogin(23); + if (isLogin.StatusCode == HttpStatusCode.OK) + { + object obj = Tools.Todejosn(isLogin.Html); + if (!((((dynamic)obj)["Code"] == "0000") ? true : false)) + { + action(appleAcount.reddemCode, DisplyType.xinxi, ((dynamic)obj)["Message"]); + } + else if (((dynamic)obj)["Data"]["integral"] >= AppSysConfig.getTypeById(id).consNum) + { + action(appleAcount.appleId, DisplyType.chongzhi, ""); + bool flag = false; + int num2 = 0; + int num3 = 10; + do + { + flag = false; + GiftcardBalanceWeb randomGiftcard = standby2.GetRandomGiftcard(startVpn); + if (randomGiftcard == null) + { + flag = true; + action(appleAcount.reddemCode, DisplyType.xinxi, "等待重新登录中..." + (num2 + 1)); + } + else + { + randomGiftcard.ProxyIp = ProxyAccountCache.getProxyAccountIP(LoginAppleId + "_Aoto", 18); + randomGiftcard.isUpProxyAccountCache = true; + randomGiftcard.action = action; + randomGiftcard.taskState = taskState; + GiftcardBalanceModel giftcardBalanceModel = randomGiftcard.giftCardBalanceCheck(appleAcount.reddemCode, startVpn); + if (giftcardBalanceModel != null) + { + if (giftcardBalanceModel.head.status == 200 && !giftcardBalanceModel.body.giftCardBalanceCheck.d.maxAttemptReached) + { + Dictionary dictionary = new Dictionary + { + { "type", "giftcardBalance" }, + { + "addTime", + Tools.GenerateTimeStamp().ToString() + }, + { "value1", appleAcount.reddemCode } + }; + if (giftcardBalanceModel.body.giftCardBalanceCheck.d.balance != null) + { + string balance = giftcardBalanceModel.body.giftCardBalanceCheck.d.balance; + dictionary.Add("value2", balance); + dictionary.Add("value3", "查询完成"); + action(appleAcount.reddemCode, DisplyType.xinxi, "查询完成,余额:" + balance); + action(appleAcount.reddemCode, DisplyType.balance, balance); + string arg2 = HttpUtility.HtmlDecode(giftcardBalanceModel.body.giftCardBalanceCheck.d.giftCardNumber); + action(appleAcount.reddemCode, DisplyType.lostBillNo, arg2); + APIUtlis.ApiApplyAct(34, "自动礼品卡余额有效"); + SqliteHelper.ExecuteInsert("itunes_db", dictionary); + } + else if (giftcardBalanceModel.body.giftCardBalanceCheck.d.alertMessages != null) + { + string text2 = "错误:" + giftcardBalanceModel.body.giftCardBalanceCheck.d.alertMessages[0]; + dictionary.Add("value2", "无"); + dictionary.Add("value3", text2); + action(appleAcount.reddemCode, DisplyType.balance, "无"); + action(appleAcount.reddemCode, DisplyType.xinxi, text2); + if (int.TryParse(appleAcount.overflow, out var result) && result > 0) + { + APIUtlis.ApiApplyAct(35, "自动礼品卡余额无效"); + } + else + { + APIUtlis.ApiApplyAct(23, "自动礼品卡余额无效"); + } + SqliteHelper.ExecuteInsert("itunes_db", dictionary); + } + else + { + string text3 = "错误:不是有效的礼品卡"; + dictionary.Add("value2", "无"); + dictionary.Add("value3", text3); + if (int.TryParse(appleAcount.overflow, out var result2) && result2 > 0) + { + APIUtlis.ApiApplyAct(35, "自动礼品卡余额无效"); + } + else + { + APIUtlis.ApiApplyAct(23, "自动礼品卡余额无效"); + SqliteHelper.ExecuteInsert("itunes_db", dictionary); + } + action(appleAcount.reddemCode, DisplyType.balance, "无"); + action(appleAcount.reddemCode, DisplyType.xinxi, text3); + } + action(appleAcount.reddemCode, DisplyType.gameCount, "+1"); + } + else + { + bool? flag2 = giftcardBalanceModel?.body?.giftCardBalanceCheck?.d?.maxAttemptReached; + if (giftcardBalanceModel.head.status != 302 && (!flag2.HasValue || !flag2.Value)) + { + randomGiftcard.timeCheck = DateTime.Now.AddMinutes(10.5).ToString("yyMMddHHmmss"); + flag = true; + action(appleAcount.reddemCode, DisplyType.xinxi, "未知,等待重新查询.." + (num2 + 1)); + } + else + { + flag = true; + standby2.removeGiftcardBalance(randomGiftcard.StdndbyKey); + action(appleAcount.reddemCode, DisplyType.xinxi, "等待重新查询中..." + (num2 + 1)); + } + } + } + else + { + action(appleAcount.reddemCode, DisplyType.xinxi, "请求错误,请重新查询"); + } + } + if (flag) + { + if (num2 + 1 < num3) + { + Thread.Sleep(1000 * (2 * num2)); + } + else + { + action(appleAcount.reddemCode, DisplyType.xinxi, "查询失败,请重新登录"); + } + } + if (!taskState.isRun) + { + action(appleAcount.reddemCode, DisplyType.xinxi, "停止执行"); + } + num2++; + } + while (flag && num2 < num3 && taskState.isRun); + } + else + { + action(appleAcount.reddemCode, DisplyType.xinxi, "点数不足,请联系客服充值"); + } + } + else + { + action(appleAcount.reddemCode, DisplyType.xinxi, "网络请求失败"); + } + goto IL_0b3d; + } + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + if (appleAcount != null) + { + action(appleAcount.reddemCode, DisplyType.xinxi, "请求失败:" + ex.Message); + } + goto IL_0b3d; + } + continue; + IL_0b3d: + BaseTask.endRuning(taskRunModel); + } + }); + } + Task.WaitAll(array); + AppleExecuteTask.TaskRunModels.Clear(); + taskState.isRun = false; + taskState.TaskIsRun = false; + expirationExecuted = false; + endAct?.Invoke(); + }); + } + + public void ininserToDb(string reddemCode, string balance, string errmsg) + { + try + { + Dictionary dictionary = new Dictionary(); + dictionary.Add("type", "giftcardBalance"); + dictionary.Add("addTime", Tools.GenerateTimeStamp().ToString()); + dictionary.Add("value1", reddemCode); + dictionary.Add("value2", balance); + dictionary.Add("value3", errmsg); + SqliteHelper.ExecuteInsert("itunes_db", dictionary); + } + catch (Exception) + { + } + } + + public void Stop() + { + taskState.Stop(); + } + + private string getIngStr(int cont, int maxCount) + { + int totalWidth = cont % maxCount; + return ".".PadRight(totalWidth, '.'); + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/ITaskRunState.cs b/AppleBatch_June.ExecuteTasks/ITaskRunState.cs new file mode 100644 index 0000000..d308b18 --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/ITaskRunState.cs @@ -0,0 +1,11 @@ +namespace AppleBatch_June.ExecuteTasks +{ + public interface ITaskRunState + { + bool TaskIsRun { get; set; } + + bool isRun { get; set; } + + void Stop(); + } +} diff --git a/AppleBatch_June.ExecuteTasks/InfoQueryTask.cs b/AppleBatch_June.ExecuteTasks/InfoQueryTask.cs new file mode 100644 index 0000000..61c9785 --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/InfoQueryTask.cs @@ -0,0 +1,131 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using AppleBatch_June.Model; +using AppleBatch_June.StartTaskModel; + +namespace AppleBatch_June.ExecuteTasks +{ + public class InfoQueryTask : BaseTask + { + public static InfoQueryTask Instance { get; private set; } + + static InfoQueryTask() + { + Instance = new InfoQueryTask("账号信息查询"); + } + + public InfoQueryTask(string _taskName) + : base(_taskName) + { + } + + public void AppleInfoQueryTask(int TaskSize, bool openVpn, bool openOwe, List lvItems, Action startAct, Action endTakAct, Action sucessAct, Action _action) + { + TaskSize = Tools.getTaskSize(openVpn, lvItems.Count); + if (!base.isRun) + { + AppleExecuteTask.TaskRunAppleIdCount = 0L; + AppleExecuteTask.TaskRunModels.Clear(); + startAct?.Invoke(); + base.isRun = true; + Task.Run(delegate + { + ApiNetReq.startNowFun = 16; + base.baseEndTakAct = endTakAct; + base.TaskIsRun = true; + Task[] array = new Task[TaskSize]; + for (int i = 0; i < TaskSize; i++) + { + array[i] = Task.Run(delegate + { + string guid = Guid.NewGuid().ToString("n"); + TaskRunModel taskRunModel = new TaskRunModel + { + guid = guid, + isRuning = false + }; + AppleExecuteTask.TaskRunModels.Add(taskRunModel); + while (base.isRun) + { + AppleAcount appleAcount = null; + try + { + lock (lvItems) + { + appleAcount = lvItems.Where((AppleAcount c) => !c.isAct).FirstOrDefault(); + if (appleAcount == null) + { + break; + } + appleAcount.isAct = true; + } + string guidTag = appleAcount.guidTag; + if (BaseTask.startRuning(taskRunModel, _action, guidTag)) + { + ItunesUtlis itunesUtlis = new ItunesUtlis(this, guidTag, _action, openVpn); + AppleItunesLogin itunesLogin = getItunesLogin(appleAcount, 16, _action, itunesUtlis); + if (itunesLogin != null) + { + itunesLogin.account = appleAcount.appleId; + itunesUtlis.appleId = itunesLogin.account; + _action?.Invoke(guidTag, DisplyType.xinxi, "正在查询"); + bool openOweReust = false; + if (itunesUtlis.getAccountSummary(itunesLogin, openOwe, guidTag, ref openOweReust)) + { + APIUtlis.ApiApplyAct(16, "Apple账号信息查询"); + if (openOweReust) + { + APIUtlis.ApiApplyAct(20, "查询欠费"); + } + } + sucessAct?.Invoke(guidTag); + } + goto IL_01b7; + } + } + catch (Exception ex2) + { + APIUtlis.ApiSeriveError(ex2); + if (appleAcount != null) + { + _action?.Invoke(appleAcount.guidTag, DisplyType.xinxi, "请求失败:" + ex2.Message); + } + goto IL_01b7; + } + continue; + IL_01b7: + BaseTask.endRuning(taskRunModel); + } + }); + } + Task.WaitAll(array); + try + { + Task[] array2 = array; + foreach (Task task in array2) + { + if (task.Status == TaskStatus.RanToCompletion) + { + task.Dispose(); + } + } + array = null; + } + catch (Exception) + { + } + AppleExecuteTask.TaskRunModels.Clear(); + base.TaskIsRun = false; + base.isRun = false; + endTakAct?.Invoke(); + }); + } + else + { + endTakAct?.Invoke(); + } + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/LeaveFamilyTask.cs b/AppleBatch_June.ExecuteTasks/LeaveFamilyTask.cs new file mode 100644 index 0000000..843fea0 --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/LeaveFamilyTask.cs @@ -0,0 +1,126 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using AppleBatch_June.Model; +using AppleBatch_June.StartTaskModel; + +namespace AppleBatch_June.ExecuteTasks +{ + public class LeaveFamilyTask : BaseTask + { + public static LeaveFamilyTask Instance { get; private set; } + + static LeaveFamilyTask() + { + Instance = new LeaveFamilyTask("关闭家庭共享"); + } + + public LeaveFamilyTask(string _taskName) + : base(_taskName) + { + } + + public void ExecuteLeaveFamily(int TaskSize, bool openVpn, List lvItems, Action startAct, Action endTakAct, Action sucessAct, Action _action) + { + TaskSize = Tools.getTaskSize(openVpn, lvItems.Count); + if (!ShopBalanceTask.Instance.isRun) + { + AppleExecuteTask.TaskRunAppleIdCount = 0L; + AppleExecuteTask.TaskRunModels.Clear(); + startAct?.Invoke(); + Instance.isRun = true; + Instance.TaskIsRun = true; + base.baseEndTakAct = endTakAct; + Task.Run(delegate + { + ApiNetReq.startNowFun = 30; + Task[] array = new Task[TaskSize]; + for (int i = 0; i < TaskSize; i++) + { + array[i] = Task.Run(delegate + { + string guid = Guid.NewGuid().ToString("n"); + TaskRunModel taskRunModel = new TaskRunModel + { + guid = guid, + isRuning = false + }; + AppleExecuteTask.TaskRunModels.Add(taskRunModel); + while (Instance.isRun) + { + AppleAcount appleAcount = null; + try + { + lock (lvItems) + { + appleAcount = lvItems.Where((AppleAcount c) => !c.isAct).FirstOrDefault(); + if (appleAcount == null) + { + break; + } + appleAcount.isAct = true; + } + if (BaseTask.startRuning(taskRunModel, _action, appleAcount.appleId)) + { + int type = 30; + iCloundUtils iCloundUtils2 = new iCloundUtils(this, appleAcount.appleId, _action, openVpn); + _action?.Invoke(appleAcount.appleId, DisplyType.chongzhi, ""); + iCloundUtils2.appleId = appleAcount.appleId; + AppleiCloundLogin appleiCloundLogin = iCloundUtils2.loginDelegates(appleAcount.appleId, appleAcount.applePwd, type); + if (appleiCloundLogin != null) + { + appleiCloundLogin.account = appleAcount.appleId; + if (iCloundUtils2.leaveFamily(appleiCloundLogin)) + { + ApiApplyAct(type, "leaveFamily"); + } + } + sucessAct?.Invoke(appleAcount.appleId); + goto IL_01a0; + } + } + catch (Exception ex2) + { + APIUtlis.ApiSeriveError(ex2); + if (appleAcount != null) + { + _action?.Invoke(appleAcount.appleId, DisplyType.xinxi, "请求失败:" + ex2.Message); + } + goto IL_01a0; + } + continue; + IL_01a0: + BaseTask.endRuning(taskRunModel); + } + }); + } + Task.WaitAll(array); + try + { + Task[] array2 = array; + foreach (Task task in array2) + { + if (task.Status == TaskStatus.RanToCompletion) + { + task.Dispose(); + } + } + array = null; + } + catch (Exception) + { + } + AppleExecuteTask.TaskRunModels.Clear(); + Instance.TaskIsRun = false; + Instance.isRun = false; + endTakAct?.Invoke(); + }); + } + else + { + endTakAct?.Invoke(); + } + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/OpenAuthenTask.cs b/AppleBatch_June.ExecuteTasks/OpenAuthenTask.cs new file mode 100644 index 0000000..526f7d5 --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/OpenAuthenTask.cs @@ -0,0 +1,165 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Threading.Tasks; +using AppleBatch_June.AppleWebServace; +using AppleBatch_June.Model; +using AppleBatch_June.StartTaskModel; +using DotNet.Utilities; + +namespace AppleBatch_June.ExecuteTasks +{ + public class OpenAuthenTask : BaseTask + { + public static OpenAuthenTask Instance { get; private set; } + + static OpenAuthenTask() + { + Instance = new OpenAuthenTask("开通双重认证"); + } + + public OpenAuthenTask(string _taskName) + : base(_taskName) + { + } + + public void AppleOpenAuthenTask(int TaskSize, string countryCode, string countryValue, string mode, bool openVpn, List lvItems, Action startAct, Action endTakAct, Action sucessAct, Action _action, Func actGetCode) + { + TaskSize = Tools.getTaskSize(openVpn, lvItems.Count); + if (!base.isRun) + { + AppleExecuteTask.TaskRunAppleIdCount = 0L; + AppleExecuteTask.TaskRunModels.Clear(); + startAct?.Invoke(); + base.isRun = true; + Task.Run(delegate + { + ApiNetReq.startNowFun = 21; + base.TaskIsRun = true; + base.baseEndTakAct = endTakAct; + Task[] array = new Task[TaskSize]; + for (int i = 0; i < TaskSize; i++) + { + array[i] = Task.Run(delegate + { + string guid = Guid.NewGuid().ToString("n"); + TaskRunModel taskRunModel = new TaskRunModel + { + guid = guid, + isRuning = false + }; + AppleExecuteTask.TaskRunModels.Add(taskRunModel); + while (base.isRun) + { + AppleAcount appleAcount = null; + try + { + lock (lvItems) + { + appleAcount = lvItems.Where((AppleAcount c) => !c.isAct).FirstOrDefault(); + if (appleAcount == null) + { + break; + } + appleAcount.isAct = true; + } + string guidTag = appleAcount.guidTag; + if (BaseTask.startRuning(taskRunModel, _action, guidTag)) + { + _action?.Invoke(guidTag, DisplyType.xinxi, "正在处理"); + HttpResult isLogin = APIUtlis.getIsLogin(21); + if (isLogin.StatusCode == HttpStatusCode.OK) + { + object obj = Tools.Todejosn(isLogin.Html); + if (((dynamic)obj)["Code"] == "0000") + { + if (((dynamic)obj)["Data"]["integral"] >= AppSysConfig.getTypeById(21).consNum) + { + _action?.Invoke(guidTag, DisplyType.chongzhi, ""); + new AppleChangeItem + { + countryCode = countryCode, + mode = mode + }; + bool flag = false; + if ((!AppSysConfig.webProtocolS2k) ? new AppleManageWebUtlis(_action, null, this).OpenAuthen(appleAcount, new AppleChangeItem + { + countryCode = countryCode, + mode = mode + }, openVpn, actGetCode, guidTag) : new AppleManageWeb(openVpn, _action, null, this).OpenAuthen(appleAcount, new AppleChangeItem + { + countryCode = countryCode, + mode = mode + }, actGetCode, guidTag)) + { + _action?.Invoke(guidTag, DisplyType.mima, "成功"); + APIUtlis.ApiApplyAct(21, "开启双重认证"); + } + else + { + _action?.Invoke(guidTag, DisplyType.normal, "失败"); + } + sucessAct?.Invoke(guidTag); + } + else + { + _action?.Invoke(guidTag, DisplyType.xinxi, "点数不足,请联系客服充值"); + } + } + else + { + _action?.Invoke(guidTag, DisplyType.xinxi, ((dynamic)obj)["Message"]); + } + } + else + { + _action?.Invoke(guidTag, DisplyType.xinxi, "网络请求失败"); + } + goto IL_05d2; + } + } + catch (Exception ex2) + { + APIUtlis.ApiSeriveError(ex2); + if (appleAcount != null) + { + _action?.Invoke(appleAcount.guidTag, DisplyType.xinxi, "请求失败:" + ex2.Message); + } + goto IL_05d2; + } + continue; + IL_05d2: + BaseTask.endRuning(taskRunModel); + } + }); + } + Task.WaitAll(array); + try + { + Task[] array2 = array; + foreach (Task task in array2) + { + if (task.Status == TaskStatus.RanToCompletion) + { + task.Dispose(); + } + } + array = null; + } + catch (Exception) + { + } + AppleExecuteTask.TaskRunModels.Clear(); + base.TaskIsRun = false; + base.isRun = false; + endTakAct?.Invoke(); + }); + } + else + { + endTakAct?.Invoke(); + } + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/OrderQueryTask.cs b/AppleBatch_June.ExecuteTasks/OrderQueryTask.cs new file mode 100644 index 0000000..230cd59 --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/OrderQueryTask.cs @@ -0,0 +1,147 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Threading.Tasks; +using AppleBatch_June.Model; +using AppleBatch_June.StartTaskModel; +using DotNet.Utilities; + +namespace AppleBatch_June.ExecuteTasks +{ + public class OrderQueryTask : BaseTask + { + public static OrderQueryTask Instance { get; private set; } + + static OrderQueryTask() + { + Instance = new OrderQueryTask("订单查询"); + } + + public OrderQueryTask(string _taskName) + : base(_taskName) + { + } + + public void AppleOrderQueryTask(int TaskSize, bool openVpn, string amountSpik, List lvItems, Action startAct, Action endTakAct, Action sucessAct, Action _action) + { + TaskSize = Tools.getTaskSize(openVpn, lvItems.Count); + if (!base.isRun) + { + AppleExecuteTask.TaskRunAppleIdCount = 0L; + AppleExecuteTask.TaskRunModels.Clear(); + startAct?.Invoke(); + base.isRun = true; + Task.Run(delegate + { + ApiNetReq.startNowFun = 17; + base.TaskIsRun = true; + base.baseEndTakAct = endTakAct; + Task[] array = new Task[TaskSize]; + for (int i = 0; i < TaskSize; i++) + { + array[i] = Task.Run(delegate + { + string guid = Guid.NewGuid().ToString("n"); + TaskRunModel taskRunModel = new TaskRunModel + { + guid = guid, + isRuning = false + }; + AppleExecuteTask.TaskRunModels.Add(taskRunModel); + while (base.isRun) + { + AppleAcount appleAcount = null; + try + { + lock (lvItems) + { + appleAcount = lvItems.Where((AppleAcount c) => !c.isAct).FirstOrDefault(); + if (appleAcount == null) + { + break; + } + appleAcount.isAct = true; + } + if (appleAcount != null) + { + if (!BaseTask.startRuning(taskRunModel, _action, appleAcount.appleId)) + { + continue; + } + _action?.Invoke(appleAcount.appleId, DisplyType.xinxi, "正在处理"); + HttpResult isLogin = APIUtlis.getIsLogin(17); + if (isLogin.StatusCode == HttpStatusCode.OK) + { + object obj = Tools.Todejosn(isLogin.Html); + if (((dynamic)obj)["Code"] == "0000") + { + if (((dynamic)obj)["Data"]["integral"] >= AppSysConfig.getTypeById(17).consNum) + { + _action?.Invoke(appleAcount.appleId, DisplyType.chongzhi, ""); + AppleManageWebUtlis appleManageWebUtlis = new AppleManageWebUtlis(_action, _action, this); + appleManageWebUtlis.checkDisable(openVpn, appleAcount.appleId, appleAcount.applePwd, appleAcount.appleId); + if (appleManageWebUtlis.idIsNormal && appleManageWebUtlis.sponsorRefund(appleAcount.appleId, amountSpik)) + { + appleManageWebUtlis.reportSingOut(); + sucessAct?.Invoke(appleAcount.appleId); + APIUtlis.ApiApplyAct(17, "Apple订单提取"); + } + } + else + { + _action?.Invoke(appleAcount.appleId, DisplyType.xinxi, "点数不足,请联系客服充值"); + } + } + else + { + _action?.Invoke(appleAcount.appleId, DisplyType.xinxi, ((dynamic)obj)["Message"]); + } + } + else + { + _action?.Invoke(appleAcount.appleId, DisplyType.xinxi, "网络请求失败"); + } + } + } + catch (Exception ex2) + { + APIUtlis.ApiSeriveError(ex2); + if (appleAcount != null) + { + _action?.Invoke(appleAcount.appleId, DisplyType.xinxi, "请求失败:" + ex2.Message); + } + } + BaseTask.endRuning(taskRunModel); + } + }); + } + Task.WaitAll(array); + try + { + Task[] array2 = array; + foreach (Task task in array2) + { + if (task.Status == TaskStatus.RanToCompletion) + { + task.Dispose(); + } + } + array = null; + } + catch (Exception) + { + } + AppleExecuteTask.TaskRunModels.Clear(); + base.TaskIsRun = false; + base.isRun = false; + endTakAct?.Invoke(); + }); + } + else + { + endTakAct?.Invoke(); + } + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/OvercheckTask.cs b/AppleBatch_June.ExecuteTasks/OvercheckTask.cs new file mode 100644 index 0000000..fa16f55 --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/OvercheckTask.cs @@ -0,0 +1,149 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using AppleBatch_June.Model; +using AppleBatch_June.StartTaskModel; + +namespace AppleBatch_June.ExecuteTasks +{ + public class OvercheckTask : BaseTask + { + public static OvercheckTask Instance { get; private set; } + + static OvercheckTask() + { + Instance = new OvercheckTask("AppStore检查"); + } + + public OvercheckTask(string _taskName) + : base(_taskName) + { + } + + public void ExecuteLeaveFamily(int TaskSize, bool openVpn, List lvItems, PaymentInfo payment, Action startAct, Action endTakAct, Action sucessAct, Action _action) + { + TaskSize = Tools.getTaskSize(openVpn, lvItems.Count); + if (!ShopBalanceTask.Instance.isRun) + { + AppleExecuteTask.TaskRunAppleIdCount = 0L; + AppleExecuteTask.TaskRunModels.Clear(); + startAct?.Invoke(); + Instance.isRun = true; + Instance.TaskIsRun = true; + base.baseEndTakAct = endTakAct; + Task.Run(delegate + { + ApiNetReq.startNowFun = 41; + Task[] array = new Task[TaskSize]; + for (int i = 0; i < TaskSize; i++) + { + array[i] = Task.Run(delegate + { + string guid = Guid.NewGuid().ToString("n"); + TaskRunModel taskRunModel = new TaskRunModel + { + guid = guid, + isRuning = false + }; + AppleExecuteTask.TaskRunModels.Add(taskRunModel); + while (Instance.isRun) + { + AppleAcount appleAcount = null; + try + { + lock (lvItems) + { + appleAcount = lvItems.Where((AppleAcount c) => !c.isAct).FirstOrDefault(); + if (appleAcount == null) + { + break; + } + appleAcount.isAct = true; + } + if (BaseTask.startRuning(taskRunModel, _action, appleAcount.appleId)) + { + ItunesUtlis itunesUtlis = new ItunesUtlis(this, appleAcount.appleId, _action, openVpn); + if (itunesUtlis.getIsLogin(41, _action)) + { + _action?.Invoke(appleAcount.appleId, DisplyType.chongzhi, ""); + itunesUtlis.overcheckPayment = payment; + string msgReust = "Overcheck"; + AppleItunesLogin appleItunesLogin = itunesUtlis.fullAppleLogin(appleAcount.appleId, appleAcount.applePwd, appleAcount.isDoubleModl ? appleAcount.DoublePwd : "", 1, ref msgReust, out var isAppleSuccess, appleAcount.appleId); + if (appleItunesLogin != null) + { + _action?.Invoke(appleAcount.appleId, DisplyType.area, appleItunesLogin.Area); + _action?.Invoke(appleAcount.appleId, DisplyType.forbidden, "已激活"); + _action?.Invoke(appleAcount.appleId, DisplyType.xinxi, "无需过检,账号余额:" + appleItunesLogin.Balance); + ApiApplyAct(42, "无需过检"); + } + else + { + if (msgReust != "0000") + { + _action?.Invoke(appleAcount.appleId, DisplyType.xinxi, msgReust); + } + if (msgReust.Contains("账号资料未补全")) + { + ApiApplyAct(43, "过检补资料"); + } + if (msgReust.Contains("请联系 iTunes 支持")) + { + msgReust = "OvercheckAgent"; + _action?.Invoke(appleAcount.appleId, DisplyType.error, "重试中"); + appleItunesLogin = itunesUtlis.fullAppleLogin(appleAcount.appleId, appleAcount.applePwd, appleAcount.isDoubleModl ? appleAcount.DoublePwd : "", 1, ref msgReust, out isAppleSuccess, appleAcount.appleId); + } + if (msgReust == "0000") + { + ApiApplyAct(41, "过检完成"); + } + } + sucessAct?.Invoke(appleAcount.appleId); + } + goto IL_0316; + } + } + catch (Exception ex2) + { + APIUtlis.ApiSeriveError(ex2); + if (appleAcount != null) + { + _action?.Invoke(appleAcount.appleId, DisplyType.xinxi, "请求失败:" + ex2.Message); + } + goto IL_0316; + } + continue; + IL_0316: + BaseTask.endRuning(taskRunModel); + } + }); + } + Task.WaitAll(array); + try + { + Task[] array2 = array; + foreach (Task task in array2) + { + if (task.Status == TaskStatus.RanToCompletion) + { + task.Dispose(); + } + } + array = null; + } + catch (Exception) + { + } + AppleExecuteTask.TaskRunModels.Clear(); + Instance.TaskIsRun = false; + Instance.isRun = false; + endTakAct?.Invoke(); + }); + } + else + { + endTakAct?.Invoke(); + } + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/ProxyRunService.cs b/AppleBatch_June.ExecuteTasks/ProxyRunService.cs new file mode 100644 index 0000000..fca80a2 --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/ProxyRunService.cs @@ -0,0 +1,917 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Net; +using System.Net.Cache; +using System.Net.Sockets; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using AppleBatch_June.Model; +using DotNet.Utilities; + +namespace AppleBatch_June.ExecuteTasks +{ + public static class ProxyRunService + { + public class ThreadProxyReturnData + { + public ManualResetEvent mre; + + public bool result { get; set; } + + public int timeOut { get; set; } = 5000; + + + public ThreadProxyReturnData(int _timeOut) + { + timeOut = _timeOut; + } + + public void ProxyCheck(object ipInfo2) + { + ProxyIpModel proxyIpModel = ipInfo2 as ProxyIpModel; + result = getWriteTestRest(proxyIpModel.prixyIp, timeOut); + if (mre != null && !mre.SafeWaitHandle.IsClosed) + { + mre.Set(); + } + } + } + + private static readonly object lokObj; + + private static int advanceExpirationSeconds; + + private static bool isFindRun; + + private static Regex rx; + + private static DateTime getIpUpTime; + + private static bool findSucessProxy; + + private static readonly object findObj; + + public static DateTime latestLoadTime; + + private static int getIpErrCount; + + private static IpInfoModel Inifo { get; set; } + + public static List proxyModels { get; set; } + + public static List incProxyExpirationTimeModels { get; set; } + + private static int nowRouteLine { get; set; } + + private static int nowWorkConfigIndex { get; set; } + + private static ProxyIpModel tunnelProxyInfo { get; set; } + + private static string nowProxyTtpe { get; set; } + + private static int UserCount { get; set; } + + private static int ExpirationTimeMaxValue { get; set; } + + public static int nowFun { get; set; } + + private static string platformName { get; set; } + + public static DateTime getApiUrlLostTime { get; set; } + + static ProxyRunService() + { + Inifo = null; + proxyModels = new List(); + incProxyExpirationTimeModels = new List(); + tunnelProxyInfo = null; + lokObj = new object(); + nowProxyTtpe = ""; + UserCount = 2; + advanceExpirationSeconds = 20; + ExpirationTimeMaxValue = 10; + nowFun = 0; + isFindRun = false; + rx = new Regex("((?:(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d))))"); + getIpUpTime = DateTime.Now.AddMinutes(-1.0); + findSucessProxy = false; + findObj = new object(); + platformName = ""; + getApiUrlLostTime = DateTime.Now.AddHours(-1.0); + latestLoadTime = DateTime.Now.AddMinutes(-2.0); + getIpErrCount = 0; + } + + public static void resetProxyData() + { + lock (lokObj) + { + proxyModels.Clear(); + getIpErrCount = 0; + tunnelProxyInfo = null; + nowProxyTtpe = ""; + } + } + + public static string getProxyIp(ITaskRunState taskState, int nowCount, bool fistProxy = false) + { + int num = Tools.ToNetWorkInt(ConfigUtlis.getConfigValue("comNetworkConfig"), 0); + if (num == 0 && num == nowWorkConfigIndex && GetConfigRouteLine() == nowRouteLine && nowProxyTtpe == "tunnel" && tunnelProxyInfo != null && tunnelProxyInfo.tunnelProxy.Split('|').Length == 4 && tunnelProxyInfo.expirationTime > DateTime.Now.AddSeconds(advanceExpirationSeconds)) + { + tunnelProxyInfo.userCount += 1; + return tunnelProxyInfo.tunnelProxy.Replace("{guid}", Guid.NewGuid().ToString("n").Substring(16)); + } + if (num == 0 && nowProxyTtpe == "white" && nowCount >= 15) + { + proxyModels.Clear(); + getIpErrCount = Tools.ToInt(AppSysConfig.getConfig("IpGetMaxErrCount"), 10); + } + ProxyIpModel proxyIpModel = GetProxy(fistProxy, souci: true); + if (proxyIpModel == null) + { + int num2 = Tools.ToInt(AppSysConfig.getConfig("GetIpMaxTotalSeconds"), 3); + DateTime now = DateTime.Now; + if (num != 0) + { + num2 = 30; + } + while (DateTime.Now.Subtract(now).TotalSeconds <= (double)num2 && proxyIpModel == null && taskState.isRun) + { + Thread.Sleep(500); + proxyIpModel = GetProxy(fistProxy); + if (proxyIpModel == null || proxyIpModel.type != 0 || !proxyIpModel.expirationTime.HasValue) + { + continue; + } + if (proxyIpModel.expirationTime.Value.AddSeconds(-advanceExpirationSeconds) > DateTime.Now) + { + if (!TestingProxyIp(proxyIpModel)) + { + removeIp(proxyIpModel.prixyIp); + proxyIpModel = null; + } + } + else + { + removeIp(proxyIpModel.prixyIp); + proxyIpModel = null; + } + } + } + else if (!TestingProxyIp(proxyIpModel)) + { + removeIp(proxyIpModel.prixyIp); + proxyIpModel = null; + if (taskState.isRun) + { + return getProxyIp(taskState, nowCount); + } + } + if (proxyIpModel != null) + { + if (proxyIpModel.type == 0) + { + return proxyIpModel.prixyIp; + } + return proxyIpModel.tunnelProxy.Replace("{guid}", Guid.NewGuid().ToString("n").Substring(16)); + } + if (num == 0) + { + string config = AppSysConfig.getConfig("DefaultNewTtunnelTeluns"); + if (!string.IsNullOrEmpty(config)) + { + string text = DESEncrypt.Decrypt(config, "62d610TelunsFd90", "0d6db719d74f10be").Replace('\0', ' ').Trim(); + if (text.Split('|').Length >= 4) + { + return text.Replace("{guid}", Guid.NewGuid().ToString("n").Substring(16)); + } + } + } + return ""; + } + + public static bool CheckIpAlive(string ip, int secondsTimeOut = 15) + { + if (ip.Split('|').Length >= 4) + { + return true; + } + if (!ip.StartsWith("rest_ip,") && ip.Substring(ip.IndexOf('@') + 1).Split(':').Length == 2) + { + ProxyIpModel proxyIpModel = null; + lock (lokObj) + { + delInvalidProxy(checkNumberUses: false); + proxyIpModel = (from c in proxyModels.ToArray() + where c.prixyIp == ip + select c).FirstOrDefault(); + if (proxyIpModel == null) + { + proxyIpModel = (from c in incProxyExpirationTimeModels.ToArray() + where c.prixyIp == ip + select c).FirstOrDefault(); + } + } + if (proxyIpModel != null) + { + if (proxyIpModel.expirationTime.HasValue && !(proxyIpModel.expirationTime.Value.AddSeconds(-secondsTimeOut) > DateTime.Now)) + { + removeIp(ip); + return false; + } + if (TestingProxyIp(proxyIpModel)) + { + return true; + } + removeIp(ip); + } + return false; + } + return false; + } + + private static bool IsDomainAlive(string prixyIp, int aTimeoutSeconds) + { + string[] array = prixyIp.Substring(prixyIp.IndexOf('@') + 1).Split(':'); + string host = array[0].Trim(); + int port = Tools.ToInt(array[1], 80); + new Stopwatch().Start(); + try + { + using TcpClient tcpClient = new TcpClient(); + IAsyncResult asyncResult = tcpClient.BeginConnect(host, port, null, null); + if (!asyncResult.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(aTimeoutSeconds))) + { + return false; + } + tcpClient.EndConnect(asyncResult); + return true; + } + catch + { + } + return false; + } + + private static ProxyIpModel GetProxy(bool fistProxy, bool souci = false) + { + lock (lokObj) + { + delInvalidProxy(); + } + if (proxyModels.Count < 2) + { + startFindProxy(souci); + } + if (nowProxyTtpe == "tunnel" && tunnelProxyInfo != null && tunnelProxyInfo.tunnelProxy.Split('|').Length == 4 && tunnelProxyInfo.expirationTime > DateTime.Now.AddSeconds(advanceExpirationSeconds)) + { + tunnelProxyInfo.userCount += 1; + return tunnelProxyInfo; + } + lock (lokObj) + { + ProxyIpModel proxyIpModel = proxyModels.OrderBy((ProxyIpModel c) => c.userCount).FirstOrDefault(); + if (proxyIpModel != null) + { + if (fistProxy) + { + proxyModels.Remove(proxyIpModel); + } + if (proxyIpModel.userCount >= UserCount) + { + return null; + } + proxyIpModel.userCount++; + } + return proxyIpModel; + } + } + + private static void delInvalidProxy(bool checkNumberUses = true) + { + List list = new List(); + foreach (ProxyIpModel proxyModel in proxyModels) + { + if (checkNumberUses && proxyModel.userCount >= UserCount) + { + list.Add(proxyModel); + } + if (proxyModel.expirationTime.HasValue && !(proxyModel.expirationTime.Value.AddSeconds(-10.0) > DateTime.Now)) + { + list.Add(proxyModel); + } + } + foreach (ProxyIpModel item in list) + { + proxyModels.Remove(item); + } + } + + public static void removeIp(string ip) + { + try + { + lock (lokObj) + { + ProxyIpModel proxyIpModel = proxyModels.Where((ProxyIpModel c) => c.prixyIp == ip).FirstOrDefault(); + if (proxyIpModel != null) + { + proxyModels.Remove(proxyIpModel); + } + } + } + catch (Exception) + { + } + } + + private static int GetConfigRouteLine() + { + int result = 0; + string configValue = ConfigUtlis.getConfigValue("HttpAgentRouteLine"); + if (!string.IsNullOrEmpty(configValue) && int.TryParse(configValue, out var result2)) + { + result = result2; + } + return result; + } + + private static void ApiJsonParameterPase(string suore, out string[] ipParameter, out string[] proParameter, out string[] expireTimeParameter) + { + ipParameter = new string[1] { "ip" }; + proParameter = new string[1] { "port" }; + expireTimeParameter = new string[1] { "expire_time" }; + string[] array = suore.Split('|'); + foreach (string text in array) + { + if (text.StartsWith("ip=")) + { + ipParameter = text.Split('=')[1].Split(',').ToArray(); + } + if (text.StartsWith("port=")) + { + proParameter = text.Split('=')[1].Split(',').ToArray(); + } + if (text.StartsWith("expireTime=")) + { + expireTimeParameter = text.Split('=')[1].Split(',').ToArray(); + } + } + } + + private static void startFindProxy(bool souci) + { + if (isFindRun) + { + return; + } + lock (findObj) + { + if (getIpUpTime > DateTime.Now.AddSeconds(-5.0)) + { + return; + } + isFindRun = true; + getIpUpTime = DateTime.Now; + } + Task.Run(delegate + { + Console.WriteLine("开始代理:" + DateTime.Now); + try + { + if (proxyModels.Count < 2) + { + string authenUserInfo = ""; + string apiUrl = GetApiUrl(ref authenUserInfo); + if (!string.IsNullOrEmpty(apiUrl) && !apiUrl.StartsWith("tunnel")) + { + string text = apiUrl.Split('|')[0]; + if (!string.IsNullOrEmpty(text)) + { + List list = new List(); + HttpResult http = GetHttp(text, addVerifyToken: true, apiUrl); + if (http.StatusCode == HttpStatusCode.OK) + { + if (!http.Html.Contains("白名单") && !http.Html.Contains("六月账户")) + { + string value = new Regex("\\[([\\s\\S]*?)\\]").Match(http.Html).Groups[1].Value; + if (!string.IsNullOrEmpty(value)) + { + try + { + object obj = Tools.Todejosn("[" + value + "]"); + ApiJsonParameterPase(AppSysConfig.getConfig("GetApiJsonParameter"), out var ipParameter, out var proParameter, out var expireTimeParameter); + foreach (object item2 in (dynamic)obj) + { + Dictionary dictionary = (Dictionary)(dynamic)item2; + string text2 = ""; + string[] array = ipParameter; + foreach (string key in array) + { + if (dictionary.ContainsKey(key)) + { + text2 = (dynamic)dictionary[key]; + break; + } + } + int num = 0; + array = proParameter; + foreach (string key2 in array) + { + if (dictionary.ContainsKey(key2)) + { + object obj2 = dictionary[key2]; + if (obj2 is int) + { + num = (dynamic)obj2; + } + else + { + _ = (string)(dynamic)obj2; + int.TryParse((dynamic)obj2, out num); + } + break; + } + } + string text3 = ""; + array = expireTimeParameter; + foreach (string key3 in array) + { + if (dictionary.ContainsKey(key3)) + { + text3 = (dynamic)dictionary[key3]; + break; + } + } + if (string.IsNullOrEmpty(text3) && dictionary.ContainsKey("timeout")) + { + int? num2 = dictionary["timeout"] as int?; + if (num2.HasValue) + { + text3 = DateTime.Now.AddSeconds(num2.Value).ToString("yyyy-MM-dd HH:mm:ss"); + } + } + if (text3.Contains("addMinTime".ToLower())) + { + int num3 = Tools.ToInt(new Regex("\\(([\\s\\S]*?)\\)", RegexOptions.IgnoreCase).Match(text3).Groups[1].Value, 0); + if (num3 > 0) + { + text3 = DateTime.Now.AddMinutes(num3).ToString("yyyy-MM-dd HH:mm:ss"); + } + } + if (num > 0 && !text2.Contains(":")) + { + text2 = text2 + ":" + num; + } + if (!string.IsNullOrEmpty(authenUserInfo)) + { + text2 = authenUserInfo + "@" + text2; + } + if (text2.Substring(text2.IndexOf('@') + 1).Split(':').Length == 2 && rx.IsMatch(text2.Substring(text2.IndexOf('@') + 1).Split(':')[0])) + { + DateTime? expirationTime = null; + if (DateTime.TryParse(text3, out var result)) + { + expirationTime = ((!(result > DateTime.Now.AddMinutes(ExpirationTimeMaxValue))) ? new DateTime?(result) : new DateTime?(DateTime.Now.AddMinutes(ExpirationTimeMaxValue))); + } + if (!expirationTime.HasValue || expirationTime.Value.AddSeconds(-15.0) > DateTime.Now) + { + list.Add(new ProxyIpModel + { + expirationTime = expirationTime, + type = 0, + userCount = 0, + tunnelProxy = "", + prixyIp = text2 + }); + } + } + } + } + catch (Exception) + { + } + } + else + { + string[] array = http.Html.Split('\n'); + for (int i = 0; i < array.Length; i++) + { + string text4 = array[i].Replace("\r", "").Replace("\n", ""); + if (!string.IsNullOrEmpty(authenUserInfo)) + { + text4 = authenUserInfo + "@" + text4; + } + if (text4.Substring(text4.IndexOf('@') + 1).Split(':').Length == 2 && rx.IsMatch(text4.Substring(text4.IndexOf('@') + 1).Split(':')[0])) + { + list.Add(new ProxyIpModel + { + expirationTime = null, + type = 0, + userCount = 0, + tunnelProxy = "", + prixyIp = text4 + }); + } + } + } + } + else + { + IpListGetError(apiUrl); + } + } + else if (http.Html.Contains("白名单") || http.Html.Contains("六月账户") || http.StatusCode == HttpStatusCode.Unauthorized) + { + IpListGetError(apiUrl); + } + if (list.Count > 0) + { + int num4 = Tools.ToNetWorkInt(ConfigUtlis.getConfigValue("comNetworkConfig"), 0); + string config = AppSysConfig.getConfig("CheckUseIPConfig"); + findSucessProxy = false; + if (num4 == 0 && config == "1") + { + CheckUseIP(list); + } + List list2 = new List(); + DateTime now = DateTime.Now; + int millisecondsTimeout = 15000; + Action actCheckIp = CheckIp; + ThreadPool.GetMinThreads(out var workerThreads, out var _); + if (workerThreads < list.Count) + { + ThreadPool.SetMinThreads(list.Count * 2, list.Count); + } + foreach (ProxyIpModel item in list) + { + list2.Add(Task.Run(delegate + { + actCheckIp(item, millisecondsTimeout); + })); + } + Task.WaitAll(list2.ToArray(), millisecondsTimeout + 3000); + Console.WriteLine("ttt:" + (DateTime.Now - now).TotalSeconds); + foreach (Task item3 in list2) + { + if (item3.Status == TaskStatus.RanToCompletion) + { + item3.Dispose(); + } + } + if (findSucessProxy) + { + getIpErrCount = 0; + } + else + { + IpListGetError(apiUrl); + } + } + } + } + } + } + catch (Exception ex2) + { + APIUtlis.ApiSeriveError(ex2); + } + finally + { + isFindRun = false; + } + }); + } + + public static void CheckIp(ProxyIpModel item, int millisecondsTimeout) + { + if (!TestingProxyIp(item, millisecondsTimeout)) + { + return; + } + findSucessProxy = true; + lock (lokObj) + { + proxyModels.Add(item); + if (item.expirationTime.HasValue) + { + incProxyExpirationTimeModels.Add(new ProxyIpModel + { + expirationTime = item.expirationTime, + prixyIp = item.prixyIp, + type = item.type + }); + } + else + { + incProxyExpirationTimeModels.Add(new ProxyIpModel + { + expirationTime = DateTime.Now.AddMinutes(5.0), + prixyIp = item.prixyIp, + type = item.type + }); + } + } + } + + private static void CheckUseIP(List getIPList) + { + List ipLists = getIPList.Select((ProxyIpModel c) => c.prixyIp.Substring(c.prixyIp.IndexOf('@') + 1)).ToList(); + HttpResult httpResult = APIUtlis.ApiCheckUseIP(platformName, ipLists); + if (httpResult.StatusCode != HttpStatusCode.OK) + { + return; + } + dynamic val = Tools.Todejosn(httpResult.Html); + if (!((val["Code"] == "0000") ? true : false) || !(val["Data"] is object[] source)) + { + return; + } + List list = source.Select((dynamic c) => c as string).ToList(); + List list2 = new List(); + foreach (ProxyIpModel getIP in getIPList) + { + string item = getIP.prixyIp.Substring(getIP.prixyIp.IndexOf('@') + 1); + if (!list.Contains(item)) + { + list2.Add(getIP); + } + } + foreach (ProxyIpModel item2 in list2) + { + getIPList.Remove(item2); + } + } + + private static bool getWriteTestRest(string proxyIp, int timeOut) + { + try + { + HttpWebRequest httpWebRequest = WebRequest.Create(AppSysConfig.getConfig("TestingProxyIpUrl")) as HttpWebRequest; + httpWebRequest.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore); + httpWebRequest.Method = "OPTIONS"; + httpWebRequest.KeepAlive = false; + httpWebRequest.Timeout = timeOut; + httpWebRequest.ReadWriteTimeout = timeOut; + httpWebRequest.Proxy = new WebProxy(proxyIp); + if (httpWebRequest.Proxy is WebProxy) + { + WebProxy webProxy = httpWebRequest.Proxy as WebProxy; + if (!string.IsNullOrEmpty(webProxy.Address.UserInfo)) + { + Uri address = new Uri(webProxy.Address.Scheme + "://" + webProxy.Address.Authority); + string[] array = webProxy.Address.UserInfo.Split(':'); + if (array.Length >= 2) + { + NetworkCredential credentials = new NetworkCredential(array[0], array[1]); + httpWebRequest.Proxy = new WebProxy(address, BypassOnLocal: false, null, credentials); + } + } + } + httpWebRequest.ContentLength = 1L; + using (Stream stream = httpWebRequest.GetRequestStream()) + { + stream.Write(new byte[49], 0, 1); + stream.Close(); + stream.Dispose(); + } + httpWebRequest.Abort(); + httpWebRequest = null; + return true; + } + catch (WebException ex) + { + _ = ex.Message; + if (ex.Response != null) + { + ex.Response.Close(); + ex.Response.Dispose(); + } + return false; + } + catch (Exception ex2) + { + _ = ex2.Message; + return false; + } + } + + private static bool TestingProxyIp(ProxyIpModel ipInfo, int timeOut = 5000) + { + Stopwatch stopwatch = new Stopwatch(); + stopwatch.Start(); + bool result = false; + try + { + if (ipInfo != null) + { + if (timeOut > 5000 && !IsDomainAlive(ipInfo.prixyIp, 5)) + { + return false; + } + using (ManualResetEvent manualResetEvent = new ManualResetEvent(initialState: false)) + { + ThreadProxyReturnData obj = new ThreadProxyReturnData(timeOut) + { + mre = manualResetEvent + }; + ThreadPool.QueueUserWorkItem(obj.ProxyCheck, ipInfo); + manualResetEvent.WaitOne(timeOut); + result = obj.result; + } + return result; + } + return false; + } + catch (Exception) + { + return false; + } + finally + { + stopwatch.Stop(); + } + } + + public static string GetApiUrl(ref string authenUserInfo) + { + getApiUrlLostTime = DateTime.Now; + int num = Tools.ToNetWorkInt(ConfigUtlis.getConfigValue("comNetworkConfig"), 0); + string result = ""; + if (num == 0) + { + int configRouteLine = GetConfigRouteLine(); + int num2 = Tools.ToInt(AppSysConfig.getConfig("IpGetMaxErrCount"), 10); + int type = 1; + if (getIpErrCount >= num2) + { + type = 3; + getIpErrCount = 0; + } + HttpResult httpResult = APIUtlis.ApiProxyIp(Inifo, configRouteLine, type); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + dynamic val = Tools.Todejosn(httpResult.Html); + if (val["Code"] == "0000") + { + result = val["Data"]; + string text = val["extend"]; + nowWorkConfigIndex = num; + nowRouteLine = configRouteLine; + if (result.StartsWith("tunnelHttp=")) + { + string tunnelProxy = DESEncrypt.Decrypt(result.Replace("tunnelHttp=", ""), "62d6108d2cfafd90", "0d6db719d74f10be").Replace('\0', ' ').Trim(); + nowProxyTtpe = "tunnel"; + tunnelProxyInfo = new ProxyIpModel + { + type = 1, + prixyIp = "", + userCount = 0, + tunnelProxy = tunnelProxy, + expirationTime = DateTime.Now.AddMinutes(5.0) + }; + getIpErrCount = 0; + return "tunnel|" + num + "|" + text; + } + nowProxyTtpe = "white"; + tunnelProxyInfo = null; + if (val is Dictionary dictionary) + { + if (dictionary.ContainsKey("authenUserInfo")) + { + string text2 = val["authenUserInfo"]; + if (!string.IsNullOrEmpty(text2)) + { + authenUserInfo = DESEncrypt.Decrypt(text2, "62d6108d2cfafd90", "0d6db719d74f10be").Replace('\0', ' ').Trim(); + } + } + if (dictionary.ContainsKey("platformName")) + { + platformName = val["platformName"]; + } + } + result = result + "|" + num + "|" + text; + } + } + } + if (num == 1) + { + nowProxyTtpe = "white"; + result = Tools.ToUrlDecode(ConfigUtlis.getConfigValue("txtNetWordApiURL")); + result = result + "|" + num + "|0"; + string configValue = ConfigUtlis.getConfigValue("txtApiAccountName"); + string configValue2 = ConfigUtlis.getConfigValue("txtApiAccountPwd"); + if (!string.IsNullOrEmpty(configValue) && !string.IsNullOrEmpty(configValue2)) + { + authenUserInfo = configValue + ":" + configValue2; + } + } + return result; + } + + private static HttpResult GetHttp(string url, bool addVerifyToken, string ApiUrlInfo) + { + string[] array = ApiUrlInfo.Split('|'); + string value = ""; + if (array[1] == "0" && addVerifyToken && array[2].Split(',').Length == 2) + { + value = array[2].Split(',')[1]; + } + HttpItem httpItem = new HttpItem + { + URL = url, + Method = "GET", + Timeout = 15000, + ReadWriteTimeout = 15000, + UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0", + Accept = "text/html, application/xhtml+xml, */*", + ContentType = "text/html", + ResultType = ResultType.String + }; + if (!string.IsNullOrEmpty(value)) + { + httpItem.Header.Add("cuuIPnow", value); + } + if (addVerifyToken) + { + httpItem.Header.Add("liyueToken", getVerifyToken("liuyueGetIp")); + } + return new HttpHelper().GetHtml(httpItem); + } + + public static string getVerifyToken(string key) + { + string arg = ""; + if (key == "liuyueGetIp") + { + arg = AppSysConfig.userToken; + } + string arg2 = Guid.NewGuid().ToString("n"); + return DESEncrypt.Encrypt(string.Format("key=" + key + "|token={0}|guid={1}", arg, arg2), "62d6108d2cfa0000", "0d6db719d7411111"); + } + + private static void IpListGetError(string getIpListUrl) + { + loadIPInfoTask(); + string[] array = getIpListUrl.Split('|'); + if (array.Length == 3) + { + string text = array[1]; + string text2 = array[2]; + if (text == "0" && text2.Split(',')[0] == "1") + { + getIpErrCount++; + } + } + } + + public static void loadIPInfoTask() + { + if (!(DateTime.Now.AddMinutes(-1.0) > latestLoadTime)) + { + return; + } + latestLoadTime = DateTime.Now; + Task.Run(delegate + { + IpInfoModel ipinfo = Tools.GetIpinfo(); + if (ipinfo != null) + { + Inifo = ipinfo; + } + else + { + Inifo = new IpInfoModel + { + country = "中国,未知", + ip = "", + isp = "" + }; + } + }); + } + + public static IpInfoModel loadIPInfo() + { + IpInfoModel ipinfo = Tools.GetIpinfo(); + if (ipinfo != null) + { + Inifo = ipinfo; + } + else + { + Inifo = new IpInfoModel + { + country = "中国,未知", + ip = "", + isp = "" + }; + } + return Inifo; + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/PurchaseQueryTask.cs b/AppleBatch_June.ExecuteTasks/PurchaseQueryTask.cs new file mode 100644 index 0000000..78b919d --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/PurchaseQueryTask.cs @@ -0,0 +1,831 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using AppleBatch_June.Model; +using AppleBatch_June.StartTaskModel; +using DotNet.Utilities; + +namespace AppleBatch_June.ExecuteTasks +{ + public class PurchaseQueryTask : BaseTask + { + public class MethodsPayTotal + { + public string mnethods { get; set; } + + public string currency { get; set; } + + public int year { get; set; } + + public decimal money { get; set; } + } + + public string dirName = ""; + + private static readonly object wirteFileLock; + + public string mergeName = DateTime.Now.ToString("MMddHHmm"); + + public static PurchaseQueryTask Instance { get; private set; } + + static PurchaseQueryTask() + { + Instance = null; + wirteFileLock = new object(); + Instance = new PurchaseQueryTask("账单查询"); + } + + public PurchaseQueryTask(string _taskName) + : base(_taskName) + { + } + + public void ApplePurchase(int TaskSize, bool openVpn, int selectIndex, bool isExport, bool feeApp, bool CkBillMergeData, List lvItems, Action startAct, Action endTakAct, Action sucessAct, Action _action) + { + TaskSize = Tools.getTaskSize(openVpn, lvItems.Count); + if (!base.isRun) + { + AppleExecuteTask.TaskRunAppleIdCount = 0L; + AppleExecuteTask.TaskRunModels.Clear(); + startAct?.Invoke(); + base.isRun = true; + Task.Run(delegate + { + dirName = ConfigUtlis.path + "账单查询记录\\账单查询" + DateTime.Now.ToString("yyyy-MM-dd-HH点mm分"); + base.TaskIsRun = true; + base.baseEndTakAct = endTakAct; + Task[] array = new Task[TaskSize]; + ApiNetReq.startNowFun = 6; + for (int i = 0; i < TaskSize; i++) + { + array[i] = Task.Run(delegate + { + string guid = Guid.NewGuid().ToString("n"); + TaskRunModel taskRunModel = new TaskRunModel + { + guid = guid, + isRuning = false + }; + AppleExecuteTask.TaskRunModels.Add(taskRunModel); + while (base.isRun) + { + AppleAcount appleAcount = null; + try + { + lock (lvItems) + { + appleAcount = lvItems.Where((AppleAcount c) => !c.isAct).FirstOrDefault(); + if (appleAcount == null) + { + break; + } + appleAcount.isAct = true; + } + string guidTag = appleAcount.guidTag; + if (BaseTask.startRuning(taskRunModel, _action, guidTag)) + { + _action?.Invoke(guidTag, DisplyType.xinxi, "正在处理"); + ItunesUtlis itunesUtlis = new ItunesUtlis(this, guidTag, _action, openVpn); + AppleItunesLogin itunesLogin = getItunesLogin(appleAcount, 6, _action, itunesUtlis); + if (itunesLogin != null) + { + itunesLogin.account = appleAcount.appleId; + itunesUtlis.appleId = itunesLogin.account; + _action?.Invoke(guidTag, DisplyType.area, itunesLogin.Area.ToString()); + string error = ""; + DateTime gameLastDate = DateTime.Now.AddDays(2.0); + DateTime gameLatelyDate = DateTime.Parse("1990-01-01"); + Tuple puileYeas = getPuileYeas(itunesLogin, openVpn, selectIndex, isExport, feeApp, CkBillMergeData, _action, guidTag, itunesUtlis, ref error, ref gameLastDate, ref gameLatelyDate); + if (error == "0000") + { + string text = ((puileYeas.Item2.Date == DateTime.Now.AddDays(2.0).Date) ? "无" : puileYeas.Item2.ToString("yyyy-MM-dd")); + string text2 = ((puileYeas.Item3.Date == DateTime.Parse("1990-01-01").Date) ? "无" : puileYeas.Item3.ToString("yyyy-MM-dd")); + string text3 = ((gameLastDate.Date == DateTime.Now.AddDays(2.0).Date) ? "无" : gameLastDate.ToString("yyyy-MM-dd")); + string text4 = ((gameLatelyDate.Date == DateTime.Parse("1990-01-01").Date) ? "无" : gameLatelyDate.ToString("yyyy-MM-dd")); + _action?.Invoke(guidTag, DisplyType.xiaofeiriqi, (text == "无") ? text3 : text); + _action?.Invoke(guidTag, DisplyType.xiaofeiriqiNow, (text2 == "无") ? text4 : text2); + _action?.Invoke(guidTag, DisplyType.xiaofeijine, puileYeas.Item1.ToString()); + _action?.Invoke(guidTag, DisplyType.lostBillNo, puileYeas.Item4.ToString()); + APIUtlis.ApiApplyAct(6, "Apple消费日期查询"); + string text5 = ""; + if (selectIndex == 1) + { + text5 = ",最近30天消费记录"; + } + if (selectIndex == 2) + { + text5 = ",最近90天消费记录"; + } + _action?.Invoke(guidTag, DisplyType.xinxi, "账号余额:" + (string.IsNullOrEmpty(itunesLogin.Balance.Trim()) ? "0" : itunesLogin.Balance) + ",退款记录:" + puileYeas.Item5 + ",查询完成" + text5); + } + else + { + _action?.Invoke(guidTag, DisplyType.xinxi, error); + } + sucessAct?.Invoke(guidTag); + } + goto IL_0493; + } + } + catch (Exception ex2) + { + APIUtlis.ApiSeriveError(ex2); + if (appleAcount != null) + { + _action?.Invoke(appleAcount.guidTag, DisplyType.xinxi, "请求失败:" + ex2.Message); + } + goto IL_0493; + } + continue; + IL_0493: + BaseTask.endRuning(taskRunModel); + } + }); + } + Task.WaitAll(array); + try + { + Task[] array2 = array; + foreach (Task task in array2) + { + if (task.Status == TaskStatus.RanToCompletion) + { + task.Dispose(); + } + } + array = null; + } + catch (Exception) + { + } + AppleExecuteTask.TaskRunModels.Clear(); + base.TaskIsRun = false; + base.isRun = false; + endTakAct?.Invoke(); + }); + } + else + { + endTakAct?.Invoke(); + } + } + + private Tuple getPuileYeas(AppleItunesLogin itunelogin, bool openVpn, int selectIndex, bool isExport, bool feeApp, bool ckBillMergeData, Action _action, string notityKey, ItunesUtlis utlis, ref string error, ref DateTime gameLastDate, ref DateTime gameLatelyDate) + { + StringBuilder stringBuilder = new StringBuilder(); + if (isExport) + { + try + { + if (!Directory.Exists(ConfigUtlis.path + "账单查询记录\\")) + { + Directory.CreateDirectory(ConfigUtlis.path + "账单查询记录\\"); + } + if (!Directory.Exists(dirName)) + { + Directory.CreateDirectory(dirName); + } + } + catch (Exception) + { + } + if (ckBillMergeData) + { + stringBuilder.Append("账号,国家,消费总金额,订单号,账号流水号,购买时间,账单金额,支付方式,购买设备,退款金额,账单内容\n"); + } + else + { + stringBuilder.Append("订单号,账号流水号,购买时间,账单金额,支付方式,购买设备,退款金额,账单内容\n"); + } + } + Dictionary dictionary = new Dictionary(); + Dictionary dictionary2 = new Dictionary(); + List list = new List(); + Dictionary dictionary3 = new Dictionary(); + DateTime dateTime = DateTime.Now.AddDays(2.0); + DateTime dateTime2 = DateTime.Parse("1990-01-01"); + string text = ""; + string text2 = ""; + string item = ""; + HttpItem httpItem = new HttpItem + { + Method = "GET", + Timeout = 100000, + UserAgent = itunelogin.UserAgent, + Accept = "*/*", + ResultType = ResultType.String, + ProtocolVersion = HttpVersion.Version11 + }; + string referer = (httpItem.URL = "https://p" + itunelogin.ServerId + "-buy.itunes.apple.com/commerce/account/purchases/count?isJsonApiFormat=true&page=1"); + HttpResult httpResult = null; + httpItem.Header.Add("X-Dsid", itunelogin.dsis); + httpItem.Header.Add("X-Token", itunelogin.xtoken); + httpItem.Header.Add("Accept-Encoding", "gzip, deflate"); + httpItem.Header.Add("Accept-Language", "zh-CN,zh;q=0.9,en;q=0"); + for (int i = 0; i < 5; i++) + { + string text4 = ""; + foreach (KeyValuePair cooki in itunelogin.cookis) + { + text4 = text4 + cooki.Key + "=" + cooki.Value + ";"; + if (cooki.Key == "wosid-lite") + { + _ = cooki.Value; + } + } + httpItem.Cookie = text4; + httpResult = utlis.GetHttpReuslt(httpItem); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + break; + } + if (httpResult.Html.Contains("authentication")) + { + APIUtlis.serviceSend(Tools.Toenjson(new Dictionary + { + { "cookies", text4 }, + { "dsis", itunelogin.dsis }, + { "serverId", itunelogin.ServerId }, + { "xtoken", itunelogin.xtoken }, + { "userAgent", itunelogin.UserAgent }, + { "type", "IAgreeTTU" } + })); + _action?.Invoke(notityKey, DisplyType.xinxi, "账号掉线了,重新登录"); + itunelogin = getItunesLogin(new AppleAcount + { + appleId = itunelogin.account, + applePwd = itunelogin.pwd + }, 6, _action, utlis, 2); + } + else + { + utlis.ProxyIp = ""; + } + } + if (httpResult.StatusCode == HttpStatusCode.OK) + { + dynamic val = Tools.Todejosn(httpResult.Html); + httpItem.Header.Add("X-Apple-Store-Front", "143441-1,17"); + httpItem.Header.Add("X-Apple-Software-Cuid", "d33ae51e148a7245b69e0b6eeb8e48ddc5280a30"); + httpItem.Header.Add("X-Apple-Partner", "origin.0"); + httpItem.Header.Add("X-Apple-Client-Application", "Software"); + httpItem.Header.Add("X-Apple-Connection-Type", "WiFi"); + httpItem.Header.Add("X-Apple-Client-Versions", "GameCenter/2.0"); + Regex regex = new Regex("(\\p{Sc})?"); + dynamic years = AppleUtlis.getYears(val, selectIndex); + try + { + foreach (object item2 in val["data"]["attributes"]["dates"]["years"]) + { + foreach (KeyValuePair item3 in (Dictionary)(dynamic)item2) + { + if (item3.Key == "last90Days") + { + int value = ((dynamic)item3.Value)["items"]; + dictionary3.Add("90", value); + } + else + { + string key = item3.Key; + int value2 = ((dynamic)item3.Value)["months"][0]["items"]; + dictionary3.Add(key, value2); + } + } + } + } + catch (Exception ex2) + { + APIUtlis.ApiSeriveError(ex2); + } + DateTime dateTime3 = DateTime.Now.Date.AddDays(-30.0); + foreach (dynamic item4 in years) + { + int num = 1; + bool flag = false; + int num2 = 0; + do + { + flag = false; + string uRL = "https://p" + itunelogin.ServerId + "-buy.itunes.apple.com/commerce/account/purchases?isJsonApiFormat=true&page=" + num + "&range=" + item4; + httpItem.URL = uRL; + httpItem.Referer = referer; + _action?.Invoke(notityKey, DisplyType.xinxi, "查询" + item4 + "消费记录,第" + num + "页"); + httpResult = utlis.GetHttpReuslt(httpItem); + if (httpResult.StatusCode == HttpStatusCode.OK && httpResult.Html != "操作已超时。" && !string.IsNullOrEmpty(httpResult.Html)) + { + if (httpResult.Html.Contains("authentication")) + { + _action?.Invoke(notityKey, DisplyType.xinxi, "账号掉线了,重新登录"); + itunelogin = getItunesLogin(new AppleAcount + { + appleId = itunelogin.account, + applePwd = itunelogin.pwd + }, 6, _action, utlis, 2); + if (itunelogin == null) + { + error = "重新登陆失败,请重新检测"; + text = "0"; + return new Tuple(text, dateTime, dateTime2, item, text2); + } + continue; + } + num2 = 0; + num++; + dynamic val2 = Tools.Todejosn(httpResult.Html); + flag = !(bool)val2["data"]["attributes"]["is-complete"]; + foreach (object item5 in val2["data"]["attributes"]["purchases"]) + { + Dictionary dictionary4 = (Dictionary)(dynamic)item5; + bool flag2 = (dynamic)dictionary4["pending"]; + string text5 = ""; + string value3 = ""; + if (dictionary4.ContainsKey("items")) + { + { + IEnumerator enumerator5 = ((IEnumerable)(dynamic)dictionary4["items"]).GetEnumerator(); + try + { + if (enumerator5.MoveNext()) + { + Dictionary data = (Dictionary)(dynamic)enumerator5.Current; + text5 = getDicValue(data, "item-name"); + value3 = getDicValue(data, "kind"); + } + } + finally + { + IDisposable disposable = enumerator5 as IDisposable; + if (disposable != null) + { + disposable.Dispose(); + } + } + } + } + if (AppSysConfig.getConfig("BillExcludeKind").Split(',').Contains(value3) || text5 == "iTunes Gift" || text5 == "Gift Card" || text5.Contains("Add Funds to Apple\u00a0ID")) + { + continue; + } + string text6 = ""; + if (dictionary4.ContainsKey("billed-to")) + { + Dictionary dictionary5 = (dynamic)dictionary4["billed-to"]; + if (dictionary5.ContainsKey("methods")) + { + foreach (dynamic item6 in (dynamic)dictionary5["methods"]) + { + text6 = (string)(text6 + item6["name"]); + } + } + } + if (flag2) + { + foreach (object item7 in (dynamic)dictionary4["items"]) + { + Dictionary data2 = (Dictionary)(dynamic)item7; + string text7 = getDicValue(data2, "price"); + if (text7 == null) + { + text7 = "0"; + } + if (!text7.Contains(".") && !ContetCuure(text7)) + { + byte[] bytes = new byte[2] { 194, 160 }; + string @string = Encoding.GetEncoding("UTF-8").GetString(bytes); + text7 = text7.Replace(",", ".").Replace(' ', '-').Replace("-", "") + .Replace("\u00a0", "") + .Replace(@string, ""); + } + else + { + text7 = text7.Replace(",", ""); + } + string text8 = Regex.Replace(text7, "[^\\d.\\d]", ""); + text8 = text8.TrimStart('.'); + if (!Regex.IsMatch(text8, "^[+-]?\\d*[.]?\\d*$")) + { + continue; + } + string text9 = text7.Replace(text8, "").TrimStart().Trim(); + if (text9.Contains("¥")) + { + text9 = "¥"; + } + if (!decimal.TryParse(regex.Replace(text8, ""), out var result)) + { + continue; + } + DateTime dateTime4 = AppleUtlis.toDate(getDicValue(data2, "purchase-date")); + if (result > 0m || feeApp) + { + if (result > 0m) + { + list.Add(new MethodsPayTotal + { + mnethods = text6, + money = result, + year = dateTime4.Year, + currency = text9 + }); + } + string text10 = ""; + string dicValue = getDicValue(data2, "report-a-problem-url"); + if (!string.IsNullOrEmpty(dicValue)) + { + text10 = new Regex("wo=([\\s\\S]*?)&").Match(dicValue).Groups[1].Value; + } + text10 = ((!string.IsNullOrEmpty(text10)) ? (text10 + "[待处理]") : "待处理"); + string text11 = ""; + try + { + text11 = ((dynamic)getDicValue(data2, "item-id")).ToString(); + } + catch (Exception) + { + } + string text12 = dateTime4.ToString("yyyy-MM-dd"); + string text13 = getDicValue(data2, "price"); + if (text13 == null) + { + text13 = "0"; + } + text13 = ((ContetCuure(text13) || text13.Contains(".")) ? text13.Replace(",", "") : text13.Replace(",", ".")); + string dicValue2 = getDicValue(data2, "purchased-from"); + bool dicValue3 = getDicValue(data2, "refunded"); + string text14 = ""; + if (dicValue3) + { + text14 = getDicValue(data2, "refund-amount"); + try + { + string text15 = ""; + if (!text14.Contains(".") && !ContetCuure(text14)) + { + byte[] bytes2 = new byte[2] { 194, 160 }; + string string2 = Encoding.GetEncoding("UTF-8").GetString(bytes2); + text15 = text14.Replace(",", ".").Replace(' ', '-').Replace("-", "") + .Replace("\u00a0", "") + .Replace(string2, ""); + } + else + { + text15 = text14.Replace(",", ""); + } + string text16 = Regex.Replace(text15, "[^\\d.\\d]", ""); + if (Regex.IsMatch(text16, "^[+-]?\\d*[.]?\\d*$")) + { + string text17 = text15.Replace(text16, "").TrimStart(); + if (text17.Contains("¥")) + { + text17 = "¥"; + } + if (decimal.TryParse(regex.Replace(text16, ""), out var result2) && result2 > 0m) + { + if (!dictionary2.ContainsKey(text17)) + { + dictionary2.Add(text17, 0m); + } + dictionary2[text17] += result2; + } + } + } + catch (Exception ex4) + { + APIUtlis.ApiSeriveError(ex4); + } + } + string text18 = getDicValue(data2, "item-name").Replace(",", " "); + if (isExport) + { + stringBuilder.Append(text10 + "," + text11 + "," + text12 + "," + text13 + "," + text6 + "," + dicValue2 + "," + text14 + "," + text18 + "\n"); + } + if (selectIndex == 1 && dateTime4 < dateTime3) + { + continue; + } + if (!dictionary.ContainsKey(text9)) + { + dictionary.Add(text9, 0m); + } + dictionary[text9] += result; + if (dateTime4 < dateTime) + { + dateTime = dateTime4; + } + if (dateTime4 > dateTime2) + { + if (text10 != "待处理") + { + item = text10; + } + dateTime2 = dateTime4; + } + } + else + { + if (dateTime4 < gameLastDate) + { + gameLastDate = dateTime4; + } + if (dateTime4 > gameLatelyDate) + { + gameLatelyDate = dateTime4; + } + } + } + continue; + } + string text19 = (dynamic)dictionary4["total"]; + if (text19 == null) + { + text19 = "0"; + } + string text20 = ""; + if (!text19.Contains(".") && !ContetCuure(text19)) + { + byte[] bytes3 = new byte[2] { 194, 160 }; + string string3 = Encoding.GetEncoding("UTF-8").GetString(bytes3); + text20 = text19.Replace(",", ".").Replace(' ', '-').Replace("-", "") + .Replace("\u00a0", "") + .Replace(string3, ""); + } + else + { + text20 = text19.Replace(",", ""); + } + string text21 = Regex.Replace(text20, "[^\\d.\\d]", ""); + text21 = text21.TrimStart('.'); + if (!Regex.IsMatch(text21, "^[+-]?\\d*[.]?\\d*$")) + { + continue; + } + string text22 = text20.Replace(text21, "").TrimStart().Trim(); + if (!decimal.TryParse(regex.Replace(text21, ""), out var result3)) + { + continue; + } + DateTime dateTime5 = AppleUtlis.toDate(getDicValue(dictionary4, "invoice-date")); + if (result3 > 0m || feeApp) + { + if (!dictionary.ContainsKey(text22)) + { + dictionary.Add(text22, 0m); + } + if (result3 > 0m) + { + list.Add(new MethodsPayTotal + { + mnethods = text6, + money = result3, + year = dateTime5.Year, + currency = text22 + }); + } + if (selectIndex == 1 && dateTime5 < dateTime3) + { + continue; + } + dictionary[text22] += result3; + string dicValue4 = getDicValue(dictionary4, "order-id"); + if (dateTime5 < dateTime) + { + dateTime = dateTime5; + } + if (dateTime5 > dateTime2) + { + item = dicValue4; + dateTime2 = dateTime5; + } + foreach (object item8 in (dynamic)dictionary4["items"]) + { + Dictionary data3 = (Dictionary)(dynamic)item8; + string text23 = ""; + try + { + text23 = ((dynamic)getDicValue(data3, "item-id")).ToString(); + } + catch (Exception ex5) + { + APIUtlis.ApiSeriveError(ex5); + } + string text24 = dateTime5.ToString("yyyy-MM-dd"); + string dicValue5 = getDicValue(data3, "price"); + if (dicValue5 != null) + { + dicValue5 = ((ContetCuure(dicValue5) || dicValue5.Contains(".")) ? dicValue5.Replace(",", "") : dicValue5.Replace(",", ".")); + } + else + { + dicValue5 = text19; + dicValue5 = ((ContetCuure(text19) || text19.Contains(".")) ? text19.Replace(",", "") : text19.Replace(",", ".")); + } + string dicValue6 = getDicValue(data3, "purchased-from"); + bool dicValue7 = getDicValue(data3, "refunded"); + string text25 = ""; + if (dicValue7) + { + text25 = getDicValue(data3, "refund-amount"); + try + { + string text26 = ""; + if (!text25.Contains(".") && !ContetCuure(text25)) + { + byte[] bytes4 = new byte[2] { 194, 160 }; + string string4 = Encoding.GetEncoding("UTF-8").GetString(bytes4); + text26 = text25.Replace(",", ".").Replace(' ', '-').Replace("-", "") + .Replace("\u00a0", "") + .Replace(string4, ""); + } + else + { + text26 = text25.Replace(",", ""); + } + string text27 = Regex.Replace(text26, "[^\\d.\\d]", ""); + if (Regex.IsMatch(text27, "^[+-]?\\d*[.]?\\d*$")) + { + string text28 = text26.Replace(text27, "").TrimStart(); + if (text28.Contains("¥")) + { + text28 = "¥"; + } + if (decimal.TryParse(regex.Replace(text27, ""), out var result4) && result4 > 0m) + { + if (!dictionary2.ContainsKey(text28)) + { + dictionary2.Add(text28, 0m); + } + dictionary2[text28] += result4; + } + } + } + catch (Exception ex6) + { + APIUtlis.ApiSeriveError(ex6); + } + } + string text29 = getDicValue(data3, "item-name").Replace(",", " "); + if (isExport) + { + if (ckBillMergeData) + { + stringBuilder.Append(itunelogin.account + "," + itunelogin.Area + ",," + dicValue4 + "," + text23 + "," + text24 + "," + dicValue5 + "," + text6 + "," + dicValue6 + "," + text25 + "," + text29 + "\n"); + } + else + { + stringBuilder.Append(dicValue4 + "," + text23 + "," + text24 + "," + dicValue5 + "," + text6 + "," + dicValue6 + "," + text25 + "," + text29 + "\n"); + } + } + } + } + else + { + if (dateTime5 < gameLastDate) + { + gameLastDate = dateTime5; + } + if (dateTime5 > gameLatelyDate) + { + gameLatelyDate = dateTime5; + } + } + } + continue; + } + if (httpResult.StatusCode == HttpStatusCode.NoContent) + { + num++; + flag = true; + continue; + } + if (httpResult.Html.Contains("authentication")) + { + _action?.Invoke(notityKey, DisplyType.xinxi, "账号掉线了,重新登录"); + itunelogin = getItunesLogin(new AppleAcount + { + appleId = itunelogin.account, + applePwd = itunelogin.pwd + }, 6, _action, utlis, 2); + if (itunelogin == null) + { + error = "重新登陆失败,请重新检测"; + text = "0"; + return new Tuple(text, dateTime, dateTime2, item, text2); + } + } + flag = true; + num2++; + if (num2 >= 5) + { + error = "多次请求失败,请重新检测"; + text = "0"; + return new Tuple(text, dateTime, dateTime2, item, text2); + } + } + while (flag); + } + foreach (KeyValuePair item9 in dictionary) + { + if (item9.Value > 0m) + { + text = text + item9.Key + item9.Value + " - "; + } + } + text = text.TrimEnd(' ', '-'); + if (string.IsNullOrEmpty(text)) + { + text = "0"; + } + foreach (KeyValuePair item10 in dictionary2) + { + text2 = text2 + item10.Key + item10.Value + " - "; + } + text2 = text2.TrimEnd(' ', '-'); + if (string.IsNullOrEmpty(text)) + { + text2 = "无退款"; + } + error = "0000"; + if (!ckBillMergeData) + { + stringBuilder.Append("消费总金额:" + text + "\n"); + stringBuilder.Append("最早消费时间:" + dateTime.ToString("yyyy-MM-dd") + "\n"); + stringBuilder.Append("最晚消费时间:" + dateTime2.ToString("yyyy-MM-dd") + "\n\n"); + stringBuilder.Append("支付方式消费统计\n"); + foreach (IGrouping item11 in from c in list + group c by c.mnethods) + { + stringBuilder.Append($"{item11.Key},{item11.FirstOrDefault().currency} {item11.Sum((MethodsPayTotal c) => c.money)}\n"); + foreach (IGrouping item12 in from c in item11 + group c by c.year) + { + stringBuilder.Append($"{item12.Key},{item11.FirstOrDefault().currency} {item12.Sum((MethodsPayTotal c) => c.money)}\n"); + } + stringBuilder.Append("\n"); + } + stringBuilder.Append("每年的消费总次数\n"); + stringBuilder.Append("年份,消费总次数\n"); + foreach (KeyValuePair item13 in dictionary3) + { + stringBuilder.Append($"{item13.Key},{item13.Value}" + "\n"); + } + } + else + { + stringBuilder.Replace("", text); + } + if (isExport) + { + try + { + if (!ckBillMergeData) + { + File.WriteAllText(dirName + "\\" + itunelogin.account + ".csv", stringBuilder.ToString(), Encoding.UTF8); + } + else + { + lock (wirteFileLock) + { + File.AppendAllText(dirName + "\\" + mergeName + "账单查询数据合集.csv", stringBuilder.ToString(), Encoding.UTF8); + } + } + } + catch (Exception ex7) + { + APIUtlis.ApiSeriveError(ex7); + } + } + return new Tuple(text, dateTime, dateTime2, item, text2); + } + error = "请求查询账单服务器失败,请重新检测"; + text = "0"; + return new Tuple(text, dateTime, dateTime2, item, text2); + } + + private bool ContetCuure(string value) + { + string[] array = AppSysConfig.getConfig("currencySymbols").Split(','); + int num = 0; + while (true) + { + if (num < array.Length) + { + string value2 = array[num]; + if (value.Contains(value2)) + { + break; + } + num++; + continue; + } + return false; + } + return true; + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/QueryAuthBalanceTask.cs b/AppleBatch_June.ExecuteTasks/QueryAuthBalanceTask.cs new file mode 100644 index 0000000..5a5a8d4 --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/QueryAuthBalanceTask.cs @@ -0,0 +1,151 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Threading.Tasks; +using AppleBatch_June.AppleWebServace; +using AppleBatch_June.Model; +using AppleBatch_June.StartTaskModel; +using DotNet.Utilities; + +namespace AppleBatch_June.ExecuteTasks +{ + public class QueryAuthBalanceTask : BaseTask + { + public static QueryAuthBalanceTask Instance { get; private set; } + + static QueryAuthBalanceTask() + { + Instance = new QueryAuthBalanceTask("密保查询余额"); + } + + public QueryAuthBalanceTask(string _taskName) + : base(_taskName) + { + } + + public void AppleQueryAuthBalanceTask(int TaskSize, bool openVpn, List lvItems, Action startAct, Action endTakAct, Action sucessAct, Action _action) + { + TaskSize = Tools.getTaskSize(openVpn, lvItems.Count); + if (!base.isRun) + { + AppleExecuteTask.TaskRunAppleIdCount = 0L; + AppleExecuteTask.TaskRunModels.Clear(); + startAct?.Invoke(); + base.isRun = true; + Task.Run(delegate + { + ApiNetReq.startNowFun = 22; + base.TaskIsRun = true; + base.baseEndTakAct = endTakAct; + Task[] array = new Task[TaskSize]; + for (int i = 0; i < TaskSize; i++) + { + array[i] = Task.Run(delegate + { + string guid = Guid.NewGuid().ToString("n"); + TaskRunModel taskRunModel = new TaskRunModel + { + guid = guid, + isRuning = false + }; + AppleExecuteTask.TaskRunModels.Add(taskRunModel); + while (base.isRun) + { + AppleAcount appleAcount = null; + try + { + lock (lvItems) + { + appleAcount = lvItems.Where((AppleAcount c) => !c.isAct).FirstOrDefault(); + if (appleAcount == null) + { + break; + } + appleAcount.isAct = true; + } + string guidTag = appleAcount.guidTag; + if (BaseTask.startRuning(taskRunModel, _action, guidTag)) + { + _action?.Invoke(guidTag, DisplyType.xinxi, "正在处理"); + HttpResult isLogin = APIUtlis.getIsLogin(22); + if (isLogin.StatusCode == HttpStatusCode.OK) + { + object obj = Tools.Todejosn(isLogin.Html); + if (((dynamic)obj)["Code"] == "0000") + { + if (((dynamic)obj)["Data"]["integral"] >= AppSysConfig.getTypeById(22).consNum) + { + _action?.Invoke(guidTag, DisplyType.chongzhi, ""); + bool flag = false; + if ((!AppSysConfig.webProtocolS2k) ? new AppleManageWebUtlis2(_action, null, this).applyQueryAuthBalance(appleAcount, openVpn, guidTag) : new ApplePrivacytWeb(openVpn, _action, null, this).applyQueryAuthBalance(appleAcount, guidTag)) + { + APIUtlis.ApiApplyAct(22, "密保查询余额"); + } + else + { + _action?.Invoke(guidTag, DisplyType.normal, "失败"); + } + sucessAct?.Invoke(guidTag); + } + else + { + _action?.Invoke(guidTag, DisplyType.xinxi, "点数不足,请联系客服充值"); + } + } + else + { + _action?.Invoke(guidTag, DisplyType.xinxi, ((dynamic)obj)["Message"]); + } + } + else + { + _action?.Invoke(guidTag, DisplyType.xinxi, "网络请求失败"); + } + goto IL_0554; + } + } + catch (Exception ex2) + { + APIUtlis.ApiSeriveError(ex2); + if (appleAcount != null) + { + _action?.Invoke(appleAcount.guidTag, DisplyType.xinxi, "请求失败:" + ex2.Message); + } + goto IL_0554; + } + continue; + IL_0554: + BaseTask.endRuning(taskRunModel); + } + }); + } + Task.WaitAll(array); + try + { + Task[] array2 = array; + foreach (Task task in array2) + { + if (task.Status == TaskStatus.RanToCompletion) + { + task.Dispose(); + } + } + array = null; + } + catch (Exception) + { + } + AppleExecuteTask.TaskRunModels.Clear(); + base.TaskIsRun = false; + base.isRun = false; + endTakAct?.Invoke(); + }); + } + else + { + endTakAct?.Invoke(); + } + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/RecoveryTask.cs b/AppleBatch_June.ExecuteTasks/RecoveryTask.cs new file mode 100644 index 0000000..42991fa --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/RecoveryTask.cs @@ -0,0 +1,167 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Threading.Tasks; +using AppleBatch_June.AppleWebServace; +using AppleBatch_June.Model; +using AppleBatch_June.StartTaskModel; +using AppleBatch_June.Utils; +using DotNet.Utilities; + +namespace AppleBatch_June.ExecuteTasks +{ + public class RecoveryTask : BaseTask + { + public static RecoveryTask Instance { get; private set; } + + static RecoveryTask() + { + Instance = new RecoveryTask("找回和解锁密码"); + } + + public RecoveryTask(string _taskName) + : base(_taskName) + { + } + + public void AppleRecoveryTask(int TaskSize, string newPassWord, bool openVpn, bool checkApple, List lvItems, Action startAct, Action endTakAct, Action sucessAct, Action _action) + { + TaskSize = Tools.getTaskSize(openVpn, lvItems.Count); + if (!base.isRun) + { + AppleExecuteTask.TaskRunAppleIdCount = 0L; + AppleExecuteTask.TaskRunModels.Clear(); + startAct?.Invoke(); + base.isRun = true; + Task.Run(delegate + { + ApiNetReq.startNowFun = 12; + base.TaskIsRun = true; + base.baseEndTakAct = endTakAct; + Task[] array = new Task[TaskSize]; + for (int i = 0; i < TaskSize; i++) + { + array[i] = Task.Run(delegate + { + string guid = Guid.NewGuid().ToString("n"); + TaskRunModel taskRunModel = new TaskRunModel + { + guid = guid, + isRuning = false + }; + AppleExecuteTask.TaskRunModels.Add(taskRunModel); + while (base.isRun) + { + AppleAcount appleAcount = null; + try + { + lock (lvItems) + { + appleAcount = lvItems.Where((AppleAcount c) => !c.isAct).FirstOrDefault(); + if (appleAcount == null) + { + break; + } + appleAcount.isAct = true; + } + string guidTag = appleAcount.guidTag; + if (BaseTask.startRuning(taskRunModel, _action, guidTag)) + { + _action?.Invoke(guidTag, DisplyType.xinxi, "正在处理"); + HttpResult isLogin = APIUtlis.getIsLogin(12); + if (isLogin.StatusCode == HttpStatusCode.OK) + { + object obj = Tools.Todejosn(isLogin.Html); + if (((dynamic)obj)["Code"] == "0000") + { + if (((dynamic)obj)["Data"]["integral"] >= AppSysConfig.getTypeById(12).consNum) + { + _action?.Invoke(guidTag, DisplyType.chongzhi, ""); + bool flag = false; + if ((!(AppSysConfig.webProtocolS2k || checkApple)) ? new AppleManageWebUtlis(_action, null, this) + { + CheckAppleId = checkApple + }.RetrievePassword(openVpn, appleAcount, newPassWord, guidTag) : new AppleiForgotWeb(openVpn, _action, null, this) + { + CheckAppleId = checkApple + }.RetrievePassword(appleAcount, newPassWord, guidTag)) + { + AppleItunesLogin loginIdUserInfo = iTunesAccountLoginCache.getLoginIdUserInfo(appleAcount.appleId, appleAcount.applePwd); + if (loginIdUserInfo != null) + { + iTunesAccountLoginCache.removeReddemUserInfo(loginIdUserInfo.account, loginIdUserInfo.StdndbyKeyGuid); + } + iCloudAccountLoginCache.removeUserInfoByAppleId(appleAcount.appleId, appleAcount.applePwd); + if (checkApple) + { + APIUtlis.ApiApplyAct(46, "检查是否是AppleId"); + } + else + { + APIUtlis.ApiApplyAct(12, "找回和解锁密码"); + } + } + sucessAct?.Invoke(guidTag); + } + else + { + _action?.Invoke(guidTag, DisplyType.xinxi, "点数不足,请联系客服充值"); + } + } + else + { + _action?.Invoke(guidTag, DisplyType.xinxi, ((dynamic)obj)["Message"]); + } + } + else + { + _action?.Invoke(guidTag, DisplyType.xinxi, "网络请求失败"); + } + goto IL_05b8; + } + } + catch (Exception ex2) + { + APIUtlis.ApiSeriveError(ex2); + if (appleAcount != null) + { + _action?.Invoke(appleAcount.guidTag, DisplyType.xinxi, "请求失败:" + ex2.Message); + } + goto IL_05b8; + } + continue; + IL_05b8: + BaseTask.endRuning(taskRunModel); + } + }); + } + Task.WaitAll(array); + try + { + Task[] array2 = array; + foreach (Task task in array2) + { + if (task.Status == TaskStatus.RanToCompletion) + { + task.Dispose(); + } + } + array = null; + } + catch (Exception) + { + } + AppleExecuteTask.TaskRunModels.Clear(); + base.TaskIsRun = false; + base.isRun = false; + endTakAct?.Invoke(); + }); + } + else + { + endTakAct?.Invoke(); + } + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/ReddemTask.cs b/AppleBatch_June.ExecuteTasks/ReddemTask.cs new file mode 100644 index 0000000..88a8624 --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/ReddemTask.cs @@ -0,0 +1,246 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using AppleBatch_June.Model; +using AppleBatch_June.StartTaskModel; +using AppleBatch_June.Utils; + +namespace AppleBatch_June.ExecuteTasks +{ + public class ReddemTask : BaseTask + { + private readonly Dictionary ReddemAccountUtlis = new Dictionary(); + + private readonly Dictionary objReddemLockS = new Dictionary(); + + private readonly object objReddemLock = new object(); + + public static ReddemTask Instance { get; private set; } + + static ReddemTask() + { + Instance = new ReddemTask("卡片兑换"); + } + + public ReddemTask(string _taskName) + : base(_taskName) + { + } + + public void AppleReddemTask(int TaskSize, List lvItems, bool _OpenVpn, bool remoteReddem, bool singleProcessRedeem, int reddemDelay, List freezeAppleids, Action startAct, Action endTakAct, Action sucessAct, Action _action, Action _applyAtion, Func actGetCode = null) + { + TaskSize = Tools.getTaskSize(_OpenVpn, lvItems.Count); + if (!base.isRun) + { + AppleExecuteTask.TaskRunAppleIdCount = 0L; + AppleExecuteTask.TaskRunModels.Clear(); + startAct?.Invoke(); + base.isRun = true; + Task.Run(delegate + { + ApiNetReq.startNowFun = 8; + ReddemAccountUtlis.Clear(); + base.baseEndTakAct = endTakAct; + base.TaskIsRun = true; + Task[] array = new Task[TaskSize]; + ConcurrentDictionary pauseRedeemAppleIds = new ConcurrentDictionary(); + foreach (string item in freezeAppleids) + { + pauseRedeemAppleIds.AddOrUpdate(item, "111", (string c, string d) => item); + } + for (int i = 0; i < TaskSize; i++) + { + array[i] = Task.Run(delegate + { + string guid = Guid.NewGuid().ToString("n"); + TaskRunModel taskRunModel = new TaskRunModel + { + guid = guid, + isRuning = false + }; + AppleExecuteTask.TaskRunModels.Add(taskRunModel); + while (base.isRun) + { + AppleAcount listView = null; + try + { + lock (lvItems) + { + AppleAcount appleAcount = lvItems.Where((AppleAcount c) => !c.isAct && c.reddeemLockTaskGuid == guid).FirstOrDefault(); + if (appleAcount == null) + { + listView = lvItems.Where((AppleAcount c) => !c.isAct && string.IsNullOrEmpty(c.reddeemLockTaskGuid)).FirstOrDefault(); + if (listView == null) + { + break; + } + listView.isAct = true; + if (singleProcessRedeem) + { + foreach (AppleAcount item2 in lvItems.Where((AppleAcount c) => c.appleId == listView.appleId).ToList()) + { + item2.reddeemLockTaskGuid = guid; + } + } + } + else + { + appleAcount.isAct = true; + listView = appleAcount; + } + } + if (BaseTask.startRuning(taskRunModel, _action, listView.reddemCode)) + { + if (pauseRedeemAppleIds.ContainsKey(listView.appleId)) + { + break; + } + ItunesUtlis itunesUtlis = null; + AppleItunesLogin appleItunesLogin = null; + lock (objReddemLock) + { + if (!objReddemLockS.ContainsKey(listView.appleId)) + { + objReddemLockS.Add(listView.appleId, new object()); + } + if (!ReddemAccountUtlis.ContainsKey(listView.appleId.Trim())) + { + itunesUtlis = new ItunesUtlis(this, listView.guidTag, _action, _OpenVpn); + ReddemAccountUtlis.Add(listView.appleId.Trim(), itunesUtlis); + } + else + { + itunesUtlis = ReddemAccountUtlis[listView.appleId.Trim()]; + } + } + lock (objReddemLockS[listView.appleId]) + { + appleItunesLogin = getItunesLogin(listView, 8, _action, itunesUtlis, 1, listView.guidTag); + } + if (appleItunesLogin != null) + { + string msg = ""; + ReddemeState reddemeState = ReddemeState.Unknown; + if (AppSysConfig.getConfig("ReddemCHNCheckRealName") == "1" && appleItunesLogin.AreaCode == "CHN" && !itunesUtlis.checkAccountRealNameState(listView.appleId)) + { + _action?.Invoke(listView.guidTag, DisplyType.xinxi, "查询中国账号是否已实名.."); + switch (itunesUtlis.CheckNeedRealName(appleItunesLogin)) + { + case CheckRealNameType.Need: + _action?.Invoke(listView.guidTag, DisplyType.xinxi, "ID账号未实名认证"); + goto end_IL_0055; + case CheckRealNameType.Unknown: + _action?.Invoke(listView.guidTag, DisplyType.xinxi, "实名检查失败,请重试"); + goto end_IL_0055; + } + } + _action?.Invoke(listView.guidTag, DisplyType.xinxi, "正在兑换"); + appleItunesLogin.reddemQts = listView.reddemQts; + string errorMessageKey = ""; + if (remoteReddem && AppSysConfig.iTunesisRemoteLogin) + { + reddemeState = itunesUtlis.serverReddeme(appleItunesLogin, listView.reddemCode, ref msg, ref errorMessageKey, appleItunesLogin.serverIndex); + } + else + { + reddemeState = itunesUtlis.reddeme(appleItunesLogin, _OpenVpn, listView.reddemCode, listView.guidTag, ref msg, ref errorMessageKey, accepted: false, actGetCode); + if (reddemeState == ReddemeState.doLogin) + { + _action?.Invoke(listView.guidTag, DisplyType.xinxi, "正在重新登录.."); + appleItunesLogin = getItunesLogin(listView, 8, _action, itunesUtlis, 2); + if (appleItunesLogin != null) + { + iTunesAccountLoginCache.addReddemUserInfo(listView.appleId, appleItunesLogin); + _action?.Invoke(listView.guidTag, DisplyType.xinxi, "正在兑换"); + reddemeState = itunesUtlis.reddeme(appleItunesLogin, _OpenVpn, listView.reddemCode, listView.guidTag, ref msg, ref errorMessageKey); + } + } + } + _action?.Invoke(listView.guidTag, DisplyType.xinxi, msg); + if (msg.Contains("兑换暂不可用") && AppSysConfig.ckShowTime) + { + _action?.Invoke(listView.guidTag, DisplyType.xiaofeiriqiNow, "-"); + pauseRedeemAppleIds.AddOrUpdate(listView.appleId, listView.reddemCode, (string c, string d) => listView.reddemCode); + break; + } + if (reddemeState != ReddemeState.Unknown) + { + if (reddemeState == ReddemeState.lose) + { + _applyAtion?.Invoke(listView.guidTag, DisplyType.reddemLose, "无效"); + } + else + { + _applyAtion?.Invoke(listView.guidTag, DisplyType.reddemValid, "有效"); + } + if (msg.Contains("安全原因")) + { + iTunesAccountLoginCache.removeReddemUserInfo(appleItunesLogin.account, appleItunesLogin.StdndbyKeyGuid); + iCloudAccountLoginCache.removeUserInfoByAppleId(appleItunesLogin.account, appleItunesLogin.pwd); + } + if (!msg.Contains("本商城无法获得您的账户信息")) + { + APIUtlis.ApiApplyAct(8, "Apple兑换"); + } + if (singleProcessRedeem) + { + Thread.Sleep(reddemDelay); + } + } + else + { + _applyAtion?.Invoke(listView.guidTag, DisplyType.reddemUNlock, "未知"); + } + sucessAct?.Invoke(listView.guidTag, listView.appleId); + } + goto IL_07d2; + } + end_IL_0055:; + } + catch (Exception ex2) + { + APIUtlis.ApiSeriveError(ex2); + if (listView != null) + { + _action?.Invoke(listView.guidTag, DisplyType.xinxi, "请求失败:" + ex2.Message); + } + goto IL_07d2; + } + continue; + IL_07d2: + BaseTask.endRuning(taskRunModel); + } + }); + } + Task.WaitAll(array); + try + { + Task[] array2 = array; + foreach (Task task in array2) + { + if (task.Status == TaskStatus.RanToCompletion) + { + task.Dispose(); + } + } + array = null; + } + catch (Exception) + { + } + AppleExecuteTask.TaskRunModels.Clear(); + base.TaskIsRun = false; + base.isRun = false; + endTakAct?.Invoke(); + }); + } + else + { + endTakAct?.Invoke(); + } + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/ShopBalanceTask.cs b/AppleBatch_June.ExecuteTasks/ShopBalanceTask.cs new file mode 100644 index 0000000..42516fc --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/ShopBalanceTask.cs @@ -0,0 +1,150 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Threading.Tasks; +using AppleBatch_June.AppleWebServace; +using AppleBatch_June.Model; +using AppleBatch_June.StartTaskModel; +using DotNet.Utilities; + +namespace AppleBatch_June.ExecuteTasks +{ + public class ShopBalanceTask : BaseTask + { + public static ShopBalanceTask Instance { get; private set; } + + static ShopBalanceTask() + { + Instance = new ShopBalanceTask("查询商城余额"); + } + + public ShopBalanceTask(string _taskName) + : base(_taskName) + { + } + + public void RequestTask(int TaskSize, bool openVpn, List lvItems, Action startAct, Action endTakAct, Action sucessAct, Action _action, Func actGetCode) + { + TaskSize = Tools.getTaskSize(openVpn, lvItems.Count); + if (!Instance.isRun) + { + AppleExecuteTask.TaskRunAppleIdCount = 0L; + AppleExecuteTask.TaskRunModels.Clear(); + startAct?.Invoke(); + Instance.isRun = true; + Instance.TaskIsRun = true; + base.baseEndTakAct = endTakAct; + Task.Run(delegate + { + ApiNetReq.startNowFun = 27; + Task[] array = new Task[TaskSize]; + for (int i = 0; i < TaskSize; i++) + { + array[i] = Task.Run(delegate + { + string guid = Guid.NewGuid().ToString("n"); + TaskRunModel taskRunModel = new TaskRunModel + { + guid = guid, + isRuning = false + }; + AppleExecuteTask.TaskRunModels.Add(taskRunModel); + while (Instance.isRun) + { + AppleAcount appleAcount = null; + try + { + lock (lvItems) + { + appleAcount = lvItems.Where((AppleAcount c) => !c.isAct).FirstOrDefault(); + if (appleAcount == null) + { + break; + } + appleAcount.isAct = true; + } + if (BaseTask.startRuning(taskRunModel, _action, appleAcount.appleId)) + { + _action?.Invoke(appleAcount.appleId, DisplyType.xinxi, "正在处理"); + HttpResult isLogin = APIUtlis.getIsLogin(27); + if (isLogin.StatusCode == HttpStatusCode.OK) + { + object obj = Tools.Todejosn(isLogin.Html); + if (((dynamic)obj)["Code"] == "0000") + { + if (((dynamic)obj)["Data"]["integral"] >= AppSysConfig.getTypeById(22).consNum) + { + _action?.Invoke(appleAcount.appleId, DisplyType.chongzhi, ""); + bool flag = false; + if ((!AppSysConfig.webProtocolS2k) ? new AppleManageWebUtlis2(_action, null, this).AppleQueryStoreBalance(appleAcount, openVpn) : new AppleShopWeb(openVpn, appleAcount.appleId, _action, null, this).AppleQueryStoreBalance(appleAcount, actGetCode)) + { + APIUtlis.ApiApplyAct(27, "商城余额查询"); + } + else + { + _action?.Invoke(appleAcount.appleId, DisplyType.normal, "失败"); + } + sucessAct?.Invoke(appleAcount.appleId); + } + else + { + _action?.Invoke(appleAcount.appleId, DisplyType.xinxi, "点数不足,请联系客服充值"); + } + } + else + { + _action?.Invoke(appleAcount.appleId, DisplyType.xinxi, ((dynamic)obj)["Message"]); + } + } + else + { + _action?.Invoke(appleAcount.appleId, DisplyType.xinxi, "网络请求失败"); + } + goto IL_0576; + } + } + catch (Exception ex2) + { + APIUtlis.ApiSeriveError(ex2); + if (appleAcount != null) + { + _action?.Invoke(appleAcount.appleId, DisplyType.xinxi, "请求失败:" + ex2.Message); + } + goto IL_0576; + } + continue; + IL_0576: + BaseTask.endRuning(taskRunModel); + } + }); + } + Task.WaitAll(array); + try + { + Task[] array2 = array; + foreach (Task task in array2) + { + if (task.Status == TaskStatus.RanToCompletion) + { + task.Dispose(); + } + } + array = null; + } + catch (Exception) + { + } + AppleExecuteTask.TaskRunModels.Clear(); + Instance.TaskIsRun = false; + Instance.isRun = false; + endTakAct?.Invoke(); + }); + } + else + { + endTakAct?.Invoke(); + } + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/TaskSingletonObject.cs b/AppleBatch_June.ExecuteTasks/TaskSingletonObject.cs new file mode 100644 index 0000000..9f4c82d --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/TaskSingletonObject.cs @@ -0,0 +1,12 @@ +using System; + +namespace AppleBatch_June.ExecuteTasks +{ + public class TaskSingletonObject + { + public static T GetTask() + { + return Activator.CreateInstance(); + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/TiedCardTask.cs b/AppleBatch_June.ExecuteTasks/TiedCardTask.cs new file mode 100644 index 0000000..18a9ab8 --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/TiedCardTask.cs @@ -0,0 +1,202 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using AppleBatch_June.Model; +using AppleBatch_June.StartTaskModel; + +namespace AppleBatch_June.ExecuteTasks +{ + public class TiedCardTask : BaseTask + { + public static TiedCardTask Instance { get; private set; } + + static TiedCardTask() + { + Instance = new TiedCardTask("绑定支付方式"); + } + + public TiedCardTask(string _taskName) + : base(_taskName) + { + } + + public void ExecuteTiedCard(int TaskSize, bool openVpn, List lvItems, Action startAct, Action endTakAct, Action sucessAct, Action _action) + { + TaskSize = Tools.getTaskSize(openVpn, lvItems.Count); + if (!ShopBalanceTask.Instance.isRun) + { + AppleExecuteTask.TaskRunAppleIdCount = 0L; + AppleExecuteTask.TaskRunModels.Clear(); + startAct?.Invoke(); + Instance.isRun = true; + Instance.TaskIsRun = true; + base.baseEndTakAct = endTakAct; + Task.Run(delegate + { + ApiNetReq.startNowFun = 28; + Task[] array = new Task[TaskSize]; + for (int i = 0; i < TaskSize; i++) + { + array[i] = Task.Run(delegate + { + string guid = Guid.NewGuid().ToString("n"); + TaskRunModel taskRunModel = new TaskRunModel + { + guid = guid, + isRuning = false + }; + AppleExecuteTask.TaskRunModels.Add(taskRunModel); + while (Instance.isRun) + { + AppleAcount appleAcount = null; + try + { + lock (lvItems) + { + appleAcount = lvItems.Where((AppleAcount c) => !c.isAct).FirstOrDefault(); + if (appleAcount == null) + { + break; + } + appleAcount.isAct = true; + } + if (BaseTask.startRuning(taskRunModel, _action, appleAcount.appleId)) + { + _action?.Invoke(appleAcount.appleId, DisplyType.chongzhi, ""); + ItunesUtlis itunesUtlis = new ItunesUtlis(this, appleAcount.appleId, _action, openVpn) + { + appleId = appleAcount.appleId + }; + AppleItunesLogin itunesLogin = getItunesLogin(appleAcount, 28, _action, itunesUtlis); + if (itunesLogin != null) + { + itunesLogin.account = appleAcount.appleId; + itunesUtlis.appleId = itunesLogin.account; + _action?.Invoke(appleAcount.appleId, DisplyType.area, itunesLogin.Area); + if (appleAcount.addres.Contains("-")) + { + string[] array3 = appleAcount.addres.Split('-'); + if (array3.Length == 3) + { + string text = array3[1]; + if (text.Length == 6) + { + string creditCardNumber = array3[0]; + string creditCardExpirationYear = text.Substring(0, 4); + string creditCardExpirationMonth = text.Substring(4, 2); + string creditVerificationNumber = array3[2]; + if (itunesUtlis.addOrEditBillingInfoSrv(itunesLogin, creditCardNumber, creditCardExpirationYear, creditCardExpirationMonth, creditVerificationNumber)) + { + ApiApplyAct(28, "添加支付方式"); + } + } + else + { + _action?.Invoke(appleAcount.appleId, DisplyType.xinxi, "卡过期时间导入错误"); + } + } + else + { + _action?.Invoke(appleAcount.appleId, DisplyType.xinxi, "卡号信息导入错误"); + } + } + else + { + _action?.Invoke(appleAcount.appleId, DisplyType.xinxi, "激活或验证支付方式"); + PaymentList paymentInfos = itunesUtlis.getPaymentInfos(itunesLogin); + if (paymentInfos != null) + { + string text2 = appleAcount.addres.Trim(); + PaymentList.Paymentinfo[] array4 = paymentInfos?.data?.attributes?.paymentInfos; + foreach (PaymentList.Paymentinfo paymentinfo in array4) + { + if (paymentinfo != null && paymentinfo.requiresPSD2Check) + { + string text3 = "--"; + if (paymentinfo.last4CCDigits != null) + { + text3 = paymentinfo.last4CCDigits; + } + PaymentList.ValidationErrors[] validationErrors = paymentinfo.validationErrors; + if (validationErrors != null && validationErrors.Length != 0 && paymentinfo.validationErrors[0].error != null) + { + _ = paymentinfo.validationErrors[0].error; + } + if (!string.IsNullOrEmpty(text2)) + { + _action?.Invoke(appleAcount.appleId, DisplyType.xinxi, "正在激活支付方式,卡尾号:" + text3); + string paymentId = paymentinfo.paymentId; + string creditCardExpirationMonth2 = "••"; + string creditCardExpirationYear2 = "••••"; + if (paymentinfo.creditCardExpirationMonth != null) + { + creditCardExpirationMonth2 = paymentinfo.creditCardExpirationMonth; + } + if (paymentinfo.creditCardExpirationYear != null) + { + creditCardExpirationYear2 = paymentinfo.creditCardExpirationYear; + } + string msg = ""; + if (itunesUtlis.PaymentChallengeInitiate(paymentId, text2, creditCardExpirationMonth2, creditCardExpirationYear2, itunesLogin, ref msg)) + { + _action?.Invoke(appleAcount.appleId, DisplyType.xinxi, msg + ",卡尾号:" + text3); + _action?.Invoke(appleAcount.appleId, DisplyType.forbidden, "成功"); + ApiApplyAct(28, "添加支付方式"); + break; + } + _action?.Invoke(appleAcount.appleId, DisplyType.error, "失败"); + } + } + } + } + } + } + sucessAct?.Invoke(appleAcount.appleId); + goto IL_0484; + } + } + catch (Exception ex2) + { + APIUtlis.ApiSeriveError(ex2); + if (appleAcount != null) + { + _action?.Invoke(appleAcount.appleId, DisplyType.xinxi, "请求失败:" + ex2.Message); + } + goto IL_0484; + } + continue; + IL_0484: + BaseTask.endRuning(taskRunModel); + } + }); + } + Task.WaitAll(array); + try + { + Task[] array2 = array; + foreach (Task task in array2) + { + if (task.Status == TaskStatus.RanToCompletion) + { + task.Dispose(); + } + } + array = null; + } + catch (Exception) + { + } + AppleExecuteTask.TaskRunModels.Clear(); + Instance.TaskIsRun = false; + Instance.isRun = false; + endTakAct?.Invoke(); + }); + } + else + { + endTakAct?.Invoke(); + } + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/WebOrderTask.cs b/AppleBatch_June.ExecuteTasks/WebOrderTask.cs new file mode 100644 index 0000000..c8bfeff --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/WebOrderTask.cs @@ -0,0 +1,169 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Threading.Tasks; +using AppleBatch_June.AppleWebServace; +using AppleBatch_June.Model; +using AppleBatch_June.StartTaskModel; +using DotNet.Utilities; + +namespace AppleBatch_June.ExecuteTasks +{ + public class WebOrderTask : BaseTask + { + public static WebOrderTask Instance { get; private set; } + + static WebOrderTask() + { + Instance = new WebOrderTask("密保查询余额"); + } + + public WebOrderTask(string _taskName) + : base(_taskName) + { + } + + public void AppleQueryWebOrderTask(int TaskSize, bool openVpn, List lvItems, Action startAct, Action endTakAct, Action sucessAct, Action _action) + { + TaskSize = Tools.getTaskSize(openVpn, lvItems.Count); + if (!base.isRun) + { + AppleExecuteTask.TaskRunAppleIdCount = 0L; + AppleExecuteTask.TaskRunModels.Clear(); + startAct?.Invoke(); + base.isRun = true; + Task.Run(delegate + { + ApiNetReq.startNowFun = 47; + base.TaskIsRun = true; + base.baseEndTakAct = endTakAct; + Task[] array = new Task[TaskSize]; + for (int i = 0; i < TaskSize; i++) + { + array[i] = Task.Run(delegate + { + string guid = Guid.NewGuid().ToString("n"); + TaskRunModel taskRunModel = new TaskRunModel + { + guid = guid, + isRuning = false + }; + AppleExecuteTask.TaskRunModels.Add(taskRunModel); + while (base.isRun) + { + AppleAcount appleAcount = null; + try + { + lock (lvItems) + { + appleAcount = lvItems.Where((AppleAcount c) => !c.isAct).FirstOrDefault(); + if (appleAcount == null) + { + break; + } + appleAcount.isAct = true; + } + string guidTag = appleAcount.guidTag; + if (BaseTask.startRuning(taskRunModel, _action, guidTag)) + { + _action?.Invoke(guidTag, DisplyType.xinxi, "正在处理"); + int num = 47; + HttpResult isLogin = APIUtlis.getIsLogin(47); + if (isLogin.StatusCode == HttpStatusCode.OK) + { + object obj = Tools.Todejosn(isLogin.Html); + if (((dynamic)obj)["Code"] == "0000") + { + if (((dynamic)obj)["Data"]["integral"] >= AppSysConfig.getTypeById(num).consNum) + { + _action?.Invoke(guidTag, DisplyType.chongzhi, ""); + AppleShopWeb appleShopWeb = new AppleShopWeb(openVpn, guidTag, _action, null, this); + string text = appleAcount.appleId.Trim(); + if (!appleAcount.appleId.Trim().ToLower().StartsWith("http")) + { + List list = AppleUtlis.accountInput(appleAcount.appleId); + if (list.Count > 0) + { + appleAcount.appleId = list[0].appleId; + appleAcount.applePwd = list[0].applePwd; + appleAcount.isAccountException = true; + text = list[0].overflow.Trim(); + } + } + if (appleShopWeb.WebOrderQuery(text)) + { + if (appleAcount.isAccountException && !string.IsNullOrEmpty(appleShopWeb.signInURL)) + { + _action?.Invoke(guidTag, DisplyType.xinxi, "正在登录查询."); + appleShopWeb.LoginWebOrderQuery(appleAcount, text); + } + APIUtlis.ApiApplyAct(num, "网单查询"); + } + else + { + _action?.Invoke(guidTag, DisplyType.normal, "失败"); + } + sucessAct?.Invoke(guidTag); + } + else + { + _action?.Invoke(guidTag, DisplyType.xinxi, "点数不足,请联系客服充值"); + } + } + else + { + _action?.Invoke(guidTag, DisplyType.xinxi, ((dynamic)obj)["Message"]); + } + } + else + { + _action?.Invoke(guidTag, DisplyType.xinxi, "网络请求失败"); + } + goto IL_05ed; + } + } + catch (Exception ex2) + { + APIUtlis.ApiSeriveError(ex2); + if (appleAcount != null) + { + _action?.Invoke(appleAcount.guidTag, DisplyType.xinxi, "请求失败:" + ex2.Message); + } + goto IL_05ed; + } + continue; + IL_05ed: + BaseTask.endRuning(taskRunModel); + } + }); + } + Task.WaitAll(array); + try + { + Task[] array2 = array; + foreach (Task task in array2) + { + if (task.Status == TaskStatus.RanToCompletion) + { + task.Dispose(); + } + } + array = null; + } + catch (Exception) + { + } + AppleExecuteTask.TaskRunModels.Clear(); + base.TaskIsRun = false; + base.isRun = false; + endTakAct?.Invoke(); + }); + } + else + { + endTakAct?.Invoke(); + } + } + } +} diff --git a/AppleBatch_June.ExecuteTasks/iCloundUtils.cs b/AppleBatch_June.ExecuteTasks/iCloundUtils.cs new file mode 100644 index 0000000..5c27136 --- /dev/null +++ b/AppleBatch_June.ExecuteTasks/iCloundUtils.cs @@ -0,0 +1,834 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using AppleBatch_June.Model; +using AppleBatch_June.Utils; +using DotNet.Utilities; + +namespace AppleBatch_June.ExecuteTasks +{ + public class iCloundUtils : AppleNetworkBase + { + public List listCookie = new List(); + + public string parentAccount { get; set; } = ""; + + + public iCloundUtils(ITaskRunState _taskState, string _notyKey, Action _action = null, bool _OpenVpn = false) + : base(_taskState, _notyKey, _action, _OpenVpn) + { + _ = new string[2] { "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/600.1.3 (KHTML, like Gecko)", "com.apple.iCloudHelper/203 CFNetwork/708.1 Darwin/14.0.0 (x86_64)" }; + } + + public bool iCloudVerifyauthen(string appleid, string password, string autoMoblie, NasQualifyModel nasQualify, Func getCodeAct_, ref string errmess, ref string icMsmCode) + { + action?.Invoke(base.notyKey, DisplyType.xinxi, "正在获取验证码..."); + string postData = createAppleIdTermsPlist(appleid, password); + string url = "https://setup.icloud.com/setup/iosbuddy/ui/existingAppleIdTermsUI"; + Dictionary dictionary = new Dictionary(); + dictionary.Add("X-MMe-Client-Info", nasQualify.clientInfo); + string value = new Regex("OS;([\\s\\S]*?)>").Match(nasQualify.clientInfo).Groups[1].Value; + string text = "12B411"; + if (value.Split(';').Length == 2) + { + text = value.Split(';')[1]; + } + HttpResult httpResult = postiCloudWebContext(url, postData, "", "iOS iPhone " + text + " iPhone Setup Assistant", dictionary); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + string value2 = new Regex("session=\"([\\s\\S]*?)\"").Match(httpResult.Html).Groups[1].Value; + string value3 = new Regex("url=\"([\\s\\S]*?)\"").Match(httpResult.Html).Groups[1].Value; + if (!string.IsNullOrEmpty(value2)) + { + string text2 = getCodeAct_?.Invoke(autoMoblie, 11); + if (string.IsNullOrEmpty(text2) || !(autoMoblie == text2)) + { + errmess = "手机号码获取失败:" + text2; + action?.Invoke(base.notyKey, DisplyType.xinxi, errmess); + return false; + } + action?.Invoke(base.notyKey, DisplyType.bindMoblie, text2); + HttpResult httpResult2 = APIUtlis.QueryInfo(base.appleId, password, "balance"); + if (!httpResult2.Html.Contains("密码错误")) + { + httpResult2 = APIUtlis.QueryInfo(base.appleId, password, "balance"); + } + if (httpResult2.StatusCode == HttpStatusCode.OK) + { + if (httpResult2.Html.Contains("密码错误")) + { + string text3 = getCodeAct_?.Invoke("请输入账号:" + appleid + ",\n发送至 <" + autoMoblie + "> 的验证码", 15); + if (text3 == null || string.IsNullOrEmpty(text3)) + { + ItunesUtlis itunesUtlis = new ItunesUtlis(taskState, base.appleId, action, openVpn); + string msgReust = ""; + itunesUtlis.appleLogin(base.appleId, password, 1, ref msgReust, out var _); + if (msgReust.Contains("密码错误")) + { + text3 = getCodeAct_?.Invoke("请输入账号:" + appleid + ",\n发送至 <" + autoMoblie + "> 的验证码", 16); + } + if (text3 == null || string.IsNullOrEmpty(text3)) + { + errmess = "icloud的验证码未输入"; + action?.Invoke(base.notyKey, DisplyType.xinxi, errmess); + return false; + } + } + if (text3.Trim().Length != 6) + { + errmess = "验证码输入不正确"; + action?.Invoke(base.notyKey, DisplyType.xinxi, errmess); + return false; + } + string postData2 = createSmsAccountRepair(text3, value2); + string url2 = "https://setup.icloud.com" + value3; + action?.Invoke(base.notyKey, DisplyType.xinxi, "提交验证码..."); + HttpResult httpResult3 = postiCloudWebContext(url2, postData2, "", "iOS iPhone " + text + " iPhone Setup Assistant", dictionary); + if (httpResult3.StatusCode == HttpStatusCode.OK) + { + if (httpResult3.Html.Contains("session=")) + { + icMsmCode = text3; + errmess = "验证成功"; + action?.Invoke(base.notyKey, DisplyType.xinxi, "验证成功.."); + return true; + } + string value4 = new Regex("message=\"([\\s\\S]*?)\"").Match(httpResult3.Html).Groups[1].Value; + action?.Invoke(base.notyKey, DisplyType.xinxi, value4); + errmess = value4; + return false; + } + errmess = "验证失败..."; + action?.Invoke(base.notyKey, DisplyType.xinxi, errmess); + return false; + } + action?.Invoke(base.notyKey, DisplyType.xinxi, "ic登录双重发送失败:" + httpResult2.Html); + return false; + } + errmess = "验证码发送失败..."; + action?.Invoke(base.notyKey, DisplyType.xinxi, errmess); + } + } + else + { + errmess = "双重验证码加载失败."; + action?.Invoke(base.notyKey, DisplyType.xinxi, errmess); + } + return false; + } + + public bool ActioniCloud(string appleid, string password, string XMmeNasQualify, string clientInfo, string newClientid, ref string localizedError, bool isAgree = false, string icMsmCode = "") + { + action?.Invoke(base.notyKey, DisplyType.xinxi, "正在处理.."); + string url = "https://setup.icloud.com/setup/login_or_create_account"; + string referer = "https://setup.icloud.com/setup/login_or_create_account"; + Dictionary dictionary = new Dictionary(); + dictionary.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(appleid + ":" + password + icMsmCode))); + dictionary.Add("X-MMe-Client-Info", clientInfo); + dictionary.Add("X-MMe-Country", "CN"); + dictionary.Add("X-Mme-Nas-Qualify", XMmeNasQualify); + if (listCookie.Where((CookieItem c) => c.Key == "X-iCloud-HSA-Token").FirstOrDefault() != null) + { + dictionary.Add("X-Apple-MD-M", ""); + dictionary.Add("X-Apple-MD", ""); + } + string postData = createActionPlist(appleid, password, newClientid); + HttpResult httpResult = postiCloudWebContext(url, postData, referer, "%E8%AE%BE%E7%BD%AE/1.0 CFNetwork/711.3.18 Darwin/14.0.0", dictionary); + localizedError = GetKeyValue("localizedError", "", "", httpResult.Html).Trim(); + if (localizedError == "MOBILEME_CREATE_UNAVAILABLE") + { + action?.Invoke(base.notyKey, DisplyType.xinxi, "激活已到最大次数."); + return false; + } + if (localizedError == "UNAUTHORIZED") + { + action?.Invoke(base.notyKey, DisplyType.xinxi, "账号或密码错误."); + return false; + } + if (httpResult.StatusCode == HttpStatusCode.Conflict && !isAgree && localizedError == "MOBILEME_TERMS_OF_SERVICE_UPDATE") + { + action?.Invoke(base.notyKey, DisplyType.xinxi, "正在获取协议..."); + string url2 = "https://setup.icloud.com/setup/iosbuddy/ui/genericTermsUI"; + dictionary.Remove("X-Mme-Nas-Qualify"); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.Append("\n\n\n"); + stringBuilder.Append("\tformat\n\tplist/buddyml\n"); + stringBuilder.Append("\tterms\n\t\n\t\t\n\t\tname\n\t\tiCloud\n\t\t\n\t\n"); + string postData2 = stringBuilder.Append("\n").ToString(); + HttpResult httpResult2 = postiCloudWebContext(url2, postData2, referer, "%E8%AE%BE%E7%BD%AE/1.0 CFNetwork/711.1.12 Darwin/14.0.0", dictionary); + if (httpResult2.StatusCode == HttpStatusCode.OK) + { + string token = AppleNetworkBase.GetToken(httpResult2.Html, "agreeUrl=\"", "\""); + if (!string.IsNullOrEmpty(token)) + { + action?.Invoke(base.notyKey, DisplyType.xinxi, "正在同意协议..."); + if (postiCloudWebContext(token, "", referer, "%E8%AE%BE%E7%BD%AE/1.0 CFNetwork/711.1.12 Darwin/14.0.0", dictionary).StatusCode == HttpStatusCode.OK) + { + return ActioniCloud(appleid, password, XMmeNasQualify, clientInfo, newClientid, ref localizedError, isAgree: true); + } + } + } + } + if (httpResult.StatusCode == HttpStatusCode.OK) + { + action?.Invoke(base.notyKey, DisplyType.xinxi, "获取激活状态..."); + string keyValue = GetKeyValue("dsPrsID", "", "", httpResult.Html); + string keyValue2 = GetKeyValue("mmeAuthToken", "", "", httpResult.Html); + string keyValue3 = GetKeyValue("aDsID", "", "", httpResult.Html); + _ = "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(keyValue + ":" + keyValue2)); + AppleiCloundLogin cloundLogin = new AppleiCloundLogin + { + account = appleid, + pwd = password, + dsid = keyValue, + mmeAuthToken = keyValue2, + clientInfo = clientInfo, + userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/600.1.3 (KHTML, like Gecko)" + }; + Dictionary dictionary2 = new Dictionary(); + dictionary2.Add("X-Apple-ADSID", keyValue3); + HttpResult jsoniCloudWebContext = getJsoniCloudWebContext("https://setup.icloud.com/setup/icd/migrate/status", "", cloundLogin, dictionary2); + if (jsoniCloudWebContext.StatusCode == HttpStatusCode.OK && GetKeyValue("status", "", "", jsoniCloudWebContext.Html) == "SUCCEEDED") + { + action?.Invoke(base.notyKey, DisplyType.xinxi, "激活成功"); + action?.Invoke(base.notyKey, DisplyType.forbidden, "激活成功"); + APIUtlis.ApiApplyAct(40, "激活iCloud"); + return true; + } + } + string text = GetKeyValue("message", "", "", httpResult.Html); + action?.Invoke(base.notyKey, DisplyType.error, "失败"); + if (string.IsNullOrEmpty(text)) + { + text = localizedError; + } + action?.Invoke(base.notyKey, DisplyType.xinxi, text); + return false; + } + + public NasQualifyModel GetNasQualifyInfo(int nasType) + { + int num = 0; + do + { + num++; + Dictionary dictionary = APIUtlis.ApiNasQualify(nasType); + if (dictionary == null) + { + action?.Invoke(base.notyKey, DisplyType.xinxi, "数据加载中..." + num); + if (num < 50) + { + Thread.Sleep(3000); + } + else + { + Thread.Sleep(1500); + } + continue; + } + if (dictionary.Count <= 0) + { + action?.Invoke(base.notyKey, DisplyType.xinxi, "数据加载中..." + num); + if (num < 50) + { + Thread.Sleep(3000); + } + else + { + Thread.Sleep(1500); + } + continue; + } + string nasQualify = dictionary["nasQualify"]; + string userAgent = dictionary["userAgent"]; + string clientInfo = dictionary["clientInfo"]; + string postData = dictionary["postData"]; + return new NasQualifyModel + { + clientInfo = clientInfo, + nasQualify = nasQualify, + postData = postData, + userAgent = userAgent + }; + } + while (num < 120 && taskState.isRun); + return null; + } + + public AppleiCloundLogin loginDelegates(string appleid, string password, int type) + { + action?.Invoke(base.notyKey, DisplyType.xinxi, "正在处理."); + HttpResult isLogin = APIUtlis.getIsLogin(type); + if (isLogin.StatusCode == HttpStatusCode.OK) + { + dynamic val = Tools.Todejosn(isLogin.Html); + if (val["Code"] == "0000") + { + if (val["Data"]["integral"] >= AppSysConfig.getTypeById(type).consNum) + { + AppleiCloundLogin loginIdUserInfo = iCloudAccountLoginCache.getLoginIdUserInfo(appleid.Trim(), password.Trim()); + if (loginIdUserInfo != null) + { + action?.Invoke(base.notyKey, DisplyType.area, loginIdUserInfo.Area); + action?.Invoke(base.notyKey, DisplyType.lostBillNo, loginIdUserInfo.dsid); + return loginIdUserInfo; + } + if (string.IsNullOrEmpty(base.ProxyIp)) + { + base.ProxyIp = ProxyAccountCache.getProxyAccountIP(appleid); + } + string url = "https://setup.icloud.com/setup/iosbuddy/loginDelegates"; + string referer = "https://setup.icloud.com/setup/iosbuddy/loginDelegates"; + Dictionary dictionary = new Dictionary(); + dictionary.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(appleid + ":" + password))); + string config = AppSysConfig.getConfig("iCloudClientInfo"); + dictionary.Add("X-MMe-Client-Info", config); + dictionary.Add("X-MMe-Country", "CN"); + string postData = createLoginPlist(appleid, password); + action?.Invoke(base.notyKey, DisplyType.xinxi, "正在登录."); + HttpResult httpResult = postiCloudWebContext(url, postData, referer, "Accounts/113 CFNetwork/711.2.23 Darwin/14.0.0", dictionary); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + if (GetKeyValue("status", "", "", httpResult.Html) == "1") + { + string keyValue = GetKeyValue("status-message", "", "", httpResult.Html); + if (keyValue.Contains("incorrectly")) + { + action?.Invoke(base.notyKey, DisplyType.xinxi, "账号密码错误,或需要输入双重验证码"); + return null; + } + string[] array = AppSysConfig.getConfig("UnactivatedKey").Split('|'); + bool flag = false; + string[] array2 = array; + foreach (string value in array2) + { + if (keyValue.Contains(value)) + { + string keyValue2 = GetKeyValue("dsid", "", "", httpResult.Html); + string areaByArea = AppleUtlis.GetAreaByArea(GetKeyValue("region-id", "R:", "", httpResult.Html)); + action?.Invoke(base.notyKey, DisplyType.area, areaByArea); + action?.Invoke(base.notyKey, DisplyType.lostBillNo, keyValue2); + action?.Invoke(base.notyKey, DisplyType.xinxi, "未激活iCloud账户"); + APIUtlis.ApiApplyAct(39, "激活iCloud查询"); + flag = true; + } + } + if (!flag) + { + action?.Invoke(base.notyKey, DisplyType.xinxi, keyValue); + } + return null; + } + string keyValue3 = GetKeyValue("region-id", "R:", "", httpResult.Html); + string keyValue4 = GetKeyValue("dsid", "", "", httpResult.Html); + string areaByArea2 = AppleUtlis.GetAreaByArea(keyValue3); + string keyValue5 = GetKeyValue("handles", "", "", httpResult.Html); + if (!string.IsNullOrEmpty(keyValue5)) + { + int count = Regex.Matches(keyValue5, "5051").Count; + int num = Tools.ToInt(AppSysConfig.getConfig("iCloudStatus5051Count"), 1); + if (count >= num) + { + action?.Invoke(base.notyKey, DisplyType.area, areaByArea2); + action?.Invoke(base.notyKey, DisplyType.lostBillNo, keyValue4); + action?.Invoke(base.notyKey, DisplyType.xinxi, "未激活iCloud账户"); + APIUtlis.ApiApplyAct(39, "激活iCloud查询"); + return null; + } + } + string keyValue6 = GetKeyValue("mmeAuthToken", "", "", httpResult.Html); + action?.Invoke(base.notyKey, DisplyType.area, areaByArea2); + action?.Invoke(base.notyKey, DisplyType.lostBillNo, keyValue4); + action?.Invoke(base.notyKey, DisplyType.xinxi, "登录成功."); + loginIdUserInfo = new AppleiCloundLogin + { + account = appleid, + pwd = password, + dsid = keyValue4, + Area = areaByArea2, + mmeAuthToken = keyValue6, + clientInfo = " ", + userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/600.1.3 (KHTML, like Gecko)" + }; + iCloudAccountLoginCache.addReddemUserInfo(appleid, loginIdUserInfo); + ProxyAccountCache.addProxyIp(appleid, base.ProxyIp); + return loginIdUserInfo; + } + action?.Invoke(base.notyKey, DisplyType.xinxi, "登录失败..."); + } + else + { + action?.Invoke(base.notyKey, DisplyType.xinxi, val["Message"]); + } + } + else + { + action?.Invoke(base.notyKey, DisplyType.xinxi, val["Message"]); + } + } + else + { + action?.Invoke(base.notyKey, DisplyType.xinxi, "网络请求失败"); + } + return null; + } + + public bool getFamilyDetails(AppleiCloundLogin cloundLogin, iCloundUtils icloud, bool retry = false) + { + string text = "https://setup.icloud.com/setup/family/getFamilyDetails"; + Dictionary dictionary = new Dictionary(); + dictionary.Add("X-MMe-LoggedIn-AppleID", cloundLogin.account); + HttpResult jsoniCloudWebContext = getJsoniCloudWebContext(text, text, cloundLogin, dictionary); + if (jsoniCloudWebContext.StatusCode == HttpStatusCode.OK) + { + if (GetKeyValue("is-member-of-family", "<", "/>", jsoniCloudWebContext.Html).ToLower() == "false") + { + action?.Invoke(base.notyKey, DisplyType.xiaofeiriqiNow, "未加入家庭共享"); + action?.Invoke(base.notyKey, DisplyType.xinxi, "查询完成"); + } + else + { + string text2 = ""; + string keyValue = GetKeyValue("family-members", "", "", jsoniCloudWebContext.Html); + foreach (Match item in new Regex("([\\s\\S]*?)").Matches(keyValue)) + { + string value = item.Groups[1].Value; + string keyValue2 = GetKeyValue("member-display-label", "", "", value); + string keyValue3 = GetKeyValue("member-dsid", "", "", value); + string keyValue4 = GetKeyValue("member-apple-id", "", "", value); + GetKeyValue("member-last-name", "", "", value); + string text3 = keyValue2; + if (GetKeyValue("member-is-parent-account", "<", "/>", value).ToLower() == "true") + { + parentAccount = keyValue4; + } + text3 = ((!(keyValue4.ToLower() != cloundLogin.account.ToLower().Trim())) ? (text3 + "(此账号)") : (text3 + "(" + keyValue4 + "[Dsid:" + keyValue3 + "])")); + text3 += ","; + text2 += text3; + } + action?.Invoke(base.notyKey, DisplyType.xiaofeiriqiNow, text2.TrimEnd(',')); + action?.Invoke(base.notyKey, DisplyType.xinxi, "查询完成"); + } + return true; + } + if (!retry) + { + string account = cloundLogin.account; + string pwd = cloundLogin.pwd; + iCloudAccountLoginCache.removeReddemUserInfo(cloundLogin.account, cloundLogin.StdndbyKeyGuid); + cloundLogin = icloud.loginDelegates(account, pwd, 31); + if (cloundLogin != null) + { + return getFamilyDetails(cloundLogin, icloud, retry: true); + } + } + action?.Invoke(base.notyKey, DisplyType.xinxi, "查询失败,网络请求失败"); + return false; + } + + public bool createFamily(AppleiCloundLogin cloundLogin, string organizerAppleId, string AppleIdForPurchases, string AppleIdForPurchasesPassword) + { + string url = "https://setup.icloud.com/setup/mac/family/createFamily"; + string referer = "https://setup.icloud.com/setup/mac/family/setupFamilyUI"; + Dictionary dictionary = new Dictionary(); + dictionary.Add("X-MMe-LoggedIn-AppleID", cloundLogin.account); + string postData = Tools.Toenjson(new CreateFamilyPostModel + { + organizerAppleId = organizerAppleId, + organizerAppleIdForPurchases = AppleIdForPurchases, + organizerAppleIdForPurchasesPassword = AppleIdForPurchasesPassword, + organizerShareMyLocationEnabledDefault = true, + iTunesTosVersion = 284005 + }); + HttpResult httpResult = postJsoniCloudWebContext(url, postData, referer, cloundLogin, dictionary); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + dynamic val = Tools.Todejosn(httpResult.Html); + if ((int)val["status"] == 0) + { + string text = val["family"]["familyId"]; + action?.Invoke(base.notyKey, DisplyType.forbidden, "成功"); + action?.Invoke(base.notyKey, DisplyType.xinxi, " 开通成功,家庭ID=" + text); + return true; + } + string token = AppleNetworkBase.GetToken(httpResult.Html, "status-message\":\"", "\""); + action?.Invoke(base.notyKey, DisplyType.error, "失败"); + action?.Invoke(base.notyKey, DisplyType.xinxi, token); + if (token.Contains("有效的付款方式")) + { + iCloudAccountLoginCache.removeReddemUserInfo(cloundLogin.account, cloundLogin.StdndbyKeyGuid); + } + return false; + } + if (httpResult.StatusCode == (HttpStatusCode)422) + { + string text2 = Tools.Unicode2String(AppleNetworkBase.GetToken(httpResult.Html, "status-message\":\"", "\"")); + action?.Invoke(base.notyKey, DisplyType.error, "失败"); + action?.Invoke(base.notyKey, DisplyType.xinxi, text2); + if (text2.Contains("有效的付款方式")) + { + iCloudAccountLoginCache.removeReddemUserInfo(cloundLogin.account, cloundLogin.StdndbyKeyGuid); + } + return false; + } + action?.Invoke(base.notyKey, DisplyType.xinxi, " 开通失败,未知错误"); + return false; + } + + public bool leaveFamily(AppleiCloundLogin cloundLogin) + { + string url = "https://setup.icloud.com/setup/mac/family/leaveFamily"; + string referer = "https://setup.icloud.com/setup/mac/family/setupFamilyUI"; + Dictionary dictionary = new Dictionary(); + dictionary.Add("X-MMe-LoggedIn-AppleID", cloundLogin.account); + string postData = ""; + HttpResult httpResult = postJsoniCloudWebContext(url, postData, referer, cloundLogin, dictionary); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + dynamic val = Tools.Todejosn(httpResult.Html); + if ((int)val["status"] == 0) + { + action?.Invoke(base.notyKey, DisplyType.forbidden, "成功"); + action?.Invoke(base.notyKey, DisplyType.xinxi, "家庭共享,关闭成功"); + return true; + } + string token = AppleNetworkBase.GetToken(httpResult.Html, "status-message\":\"", "\""); + action?.Invoke(base.notyKey, DisplyType.error, "失败"); + action?.Invoke(base.notyKey, DisplyType.xinxi, token); + return false; + } + if (httpResult.StatusCode == (HttpStatusCode)422) + { + string token2 = AppleNetworkBase.GetToken(httpResult.Html, "status-message\":\"", "\""); + action?.Invoke(base.notyKey, DisplyType.error, "失败"); + action?.Invoke(base.notyKey, DisplyType.xinxi, token2); + return false; + } + action?.Invoke(base.notyKey, DisplyType.xinxi, " 关闭失败,未知错误"); + return false; + } + + public bool removeFamilyMember(AppleiCloundLogin cloundLogin, string Dsid) + { + action?.Invoke(base.notyKey, DisplyType.xinxi, " 正在移除.."); + HttpResult httpResult = APIUtlis.serviceSend(Tools.Toenjson(new Dictionary + { + { + "Authorization", + Convert.ToBase64String(Encoding.UTF8.GetBytes(cloundLogin.dsid + ":" + cloundLogin.mmeAuthToken)) + }, + { "Dsid", Dsid }, + { "type", "IRemoveFamilyMember" }, + { "userAgent", cloundLogin.userAgent } + })); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + dynamic val = Tools.Todejosn(httpResult.Html); + if (val["Code"] == "0000") + { + dynamic val2 = val["Data"]; + dynamic val3 = Tools.Todejosn(val2); + string text = val3["msg"]; + if (text == "0000") + { + action?.Invoke(base.notyKey, DisplyType.xinxi, " 移除成功"); + action?.Invoke(base.notyKey, DisplyType.forbidden, "成功"); + return true; + } + action?.Invoke(base.notyKey, DisplyType.error, "失败"); + action?.Invoke(base.notyKey, DisplyType.xinxi, text); + return false; + } + } + action?.Invoke(base.notyKey, DisplyType.xinxi, "请求错误"); + return false; + } + + public bool addFamilyMember(AppleiCloundLogin cloundLogin, string appleId, string password, string verificationToken) + { + string url = "https://setup.icloud.com/setup/mac/family/addFamilyMember"; + string referer = "https://setup.icloud.com/setup/mac/family/setupFamilyUI"; + Dictionary dictionary = new Dictionary(); + dictionary.Add("X-MMe-LoggedIn-AppleID", cloundLogin.account); + string postData = Tools.Toenjson(new AddFamilyMemberPostModel + { + appleId = appleId, + password = password, + appleIdForPurchases = appleId, + shareMyLocationEnabledDefault = true, + shareMyPurchasesEnabledDefault = true, + verificationToken = verificationToken, + preferredAppleId = appleId + }); + action?.Invoke(base.notyKey, DisplyType.xinxi, " 正在添加成员."); + HttpResult httpResult = postJsoniCloudWebContext(url, postData, referer, cloundLogin, dictionary); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + dynamic val = Tools.Todejosn(httpResult.Html); + if ((int)val["status"] == 0) + { + object[] obj = val["familyMembers"]; + string text = ""; + object[] array = obj; + foreach (dynamic val2 in array) + { + if (((string)val2["appleId"]).ToLower() == appleId.ToLower()) + { + text = val2["dsid"]; + break; + } + } + action?.Invoke(base.notyKey, DisplyType.forbidden, "成功"); + action?.Invoke(base.notyKey, DisplyType.xinxi, "添加成功,成员dsid:" + text); + return true; + } + string text2 = Tools.Unicode2String(AppleNetworkBase.GetToken(httpResult.Html, "status-message\":\"", "\"")); + action?.Invoke(base.notyKey, DisplyType.error, "失败"); + action?.Invoke(base.notyKey, DisplyType.xinxi, "失败:" + text2); + if (text2.Contains("有效的付款方式")) + { + iCloudAccountLoginCache.removeReddemUserInfo(cloundLogin.account, cloundLogin.StdndbyKeyGuid); + } + return false; + } + if (httpResult.StatusCode == (HttpStatusCode)422) + { + string text3 = Tools.Unicode2String(AppleNetworkBase.GetToken(httpResult.Html, "status-message\":\"", "\"")); + action?.Invoke(base.notyKey, DisplyType.xinxi, text3); + action?.Invoke(base.notyKey, DisplyType.error, "失败"); + if (text3.Contains("有效的付款方式")) + { + iCloudAccountLoginCache.removeReddemUserInfo(cloundLogin.account, cloundLogin.StdndbyKeyGuid); + } + return false; + } + action?.Invoke(base.notyKey, DisplyType.xinxi, " 添加失败,未知错误"); + return false; + } + + public iCloudVerifyCVVModel getiTunesAccountPaymentInfo(AppleiCloundLogin cloundLogin) + { + string url = "https://setup.icloud.com/setup/mac/family/getiTunesAccountPaymentInfo"; + string referer = "https://setup.icloud.com/setup/mac/family/addFamilyMemberUI"; + Dictionary dictionary = new Dictionary(); + dictionary.Add("X-MMe-LoggedIn-AppleID", cloundLogin.account); + string postData = Tools.Toenjson(new getiTunesAccountPaymentInfoPostModel + { + organizerDSID = cloundLogin.dsid, + userAction = "ADDING_FAMILY_MEMBER", + sendSMS = true + }); + action?.Invoke(base.notyKey, DisplyType.xinxi, " 查询付款信息.."); + HttpResult httpResult = postJsoniCloudWebContext(url, postData, referer, cloundLogin, dictionary); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + dynamic val = Tools.Todejosn(httpResult.Html); + if ((int)val["status"] == 0) + { + string text = val["creditCardType"]; + if (text == "无") + { + action?.Invoke(base.notyKey, DisplyType.xinxi, "账号没有支付方式"); + return null; + } + string creditCardLastFourDigits = val["creditCardLastFourDigits"]; + string verificationType = val["verificationType"]; + string billingType = val["billingType"]; + return new iCloudVerifyCVVModel + { + billingType = billingType, + creditCardId = text, + creditCardLastFourDigits = creditCardLastFourDigits, + verificationType = verificationType + }; + } + string token = AppleNetworkBase.GetToken(httpResult.Html, "title\":\"", "\""); + action?.Invoke(base.notyKey, DisplyType.xinxi, token); + return null; + } + if (httpResult.StatusCode == (HttpStatusCode)422) + { + string arg = Tools.Unicode2String(AppleNetworkBase.GetToken(httpResult.Html, "title\":\"", "\"")); + action?.Invoke(base.notyKey, DisplyType.xinxi, arg); + return null; + } + action?.Invoke(base.notyKey, DisplyType.xinxi, " 付款信息查询失败,未知错误"); + return null; + } + + public string verifyCVV(AppleiCloundLogin cloundLogin, iCloudVerifyCVVModel cVVModel) + { + string url = "https://setup.icloud.com/setup/mac/family/verifyCVV"; + string referer = "https://setup.icloud.com/setup/mac/family/setupFamilyUI"; + Dictionary dictionary = new Dictionary(); + dictionary.Add("X-MMe-LoggedIn-AppleID", cloundLogin.account); + string postData = Tools.Toenjson(cVVModel); + action?.Invoke(base.notyKey, DisplyType.xinxi, " 验证安全码.."); + HttpResult httpResult = postJsoniCloudWebContext(url, postData, referer, cloundLogin, dictionary); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + string token = AppleNetworkBase.GetToken(httpResult.Html, "verificationToken\":\"", "\""); + if (string.IsNullOrEmpty(token)) + { + Action obj = action; + if (obj == null) + { + return token; + } + obj(base.notyKey, DisplyType.xinxi, "验证付款方式失败"); + } + return token; + } + if (httpResult.StatusCode == (HttpStatusCode)422) + { + string arg = Tools.Unicode2String(AppleNetworkBase.GetToken(httpResult.Html, "title\":\"", "\"")); + action?.Invoke(base.notyKey, DisplyType.xinxi, arg); + } + return ""; + } + + private string createAppleIdTermsPlist(string appleId, string applePwd) + { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.Append("\n\n\n"); + stringBuilder.Append("\t\tapple-id\n\t\t" + appleId + "\n"); + stringBuilder.Append("\t\tpassword\n\t\t" + applePwd + "\n"); + stringBuilder.Append("\n"); + return stringBuilder.ToString(); + } + + private string createSmsAccountRepair(string securityCode, string session) + { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.Append("\n\n\n"); + stringBuilder.Append("\t\tsecurity-code\n\t\t" + securityCode + "\n"); + stringBuilder.Append("\tserverInfo\n\t\n\t\tsession\n\t\t" + session + "\n\t\n"); + stringBuilder.Append("\n"); + return stringBuilder.ToString(); + } + + private string createActionPlist(string appleId, string applePwd, string newClientid) + { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.Append("\n\n\n"); + stringBuilder.Append("\tprotocolVersion\n\t1.0\n"); + stringBuilder.Append("\tuserInfo\n\t\n\t\tclient-id\n\t\t" + newClientid + "\n\t\tlanguage\n\t\tzh-Hans\n\t\ttimezone\n\t\tAsia/Chongqing\n\t\n"); + stringBuilder.Append("\n"); + return stringBuilder.ToString(); + } + + private string createLoginPlist(string appleId, string applePwd) + { + string text = "348F2E20-CED5-41EA-BE2E-F589028EA985"; + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.Append("\n\n\t\n"); + stringBuilder.Append("\t\tapple-id\n\t\t" + appleId + "\n"); + stringBuilder.Append("\t\tclient-id\n\t\t" + text + "\n"); + stringBuilder.Append("\t\tdelegates\n\t\tcom.apple.gamecenter\n\ncom.apple.mobileme\n\ncom.apple.private.ids\n\nprotocol-version\n4\n \n"); + stringBuilder.Append("\t\tpassword\n\t\t" + applePwd + "\n"); + stringBuilder.Append("\t\n"); + return stringBuilder.ToString(); + } + + public HttpResult getJsoniCloudWebContext(string url, string referer, AppleiCloundLogin cloundLogin, Dictionary hander) + { + if (cloundLogin == null) + { + throw new Exception("没有登录状态"); + } + HttpItem httpItem = new HttpItem + { + URL = url, + Method = "get", + Timeout = 30000, + ReadWriteTimeout = 30000, + UserAgent = cloundLogin.userAgent, + Cookie = listCookie.toFonmtCookie(), + ContentType = "application/json; charset=UTF-8", + Accept = "*/*", + Referer = referer, + ProtocolVersion = HttpVersion.Version11, + KeepAlive = true, + ResultType = ResultType.String, + WebProxy = WebRequest.DefaultWebProxy + }; + hander.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(cloundLogin.dsid + ":" + cloundLogin.mmeAuthToken))); + hander.Add("X-Mme-Client-Info", cloundLogin.clientInfo); + if (hander != null) + { + foreach (KeyValuePair item in hander) + { + httpItem.Header.Add(item.Key, item.Value); + } + } + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + addCookle(httpReuslt.Cookie); + return httpReuslt; + } + + public HttpResult postiCloudWebContext(string url, string postData, string referer, string userAgent, Dictionary hander) + { + HttpItem httpItem = new HttpItem + { + URL = url, + Method = "post", + Timeout = 30000, + ReadWriteTimeout = 30000, + UserAgent = userAgent, + Cookie = listCookie.toFonmtCookie(), + ContentType = "application/x-apple-plist; Charset=UTF-8", + Accept = "*/*", + Referer = referer, + ProtocolVersion = HttpVersion.Version11, + KeepAlive = true, + Postdata = postData, + PostDataType = PostDataType.String, + ResultType = ResultType.String, + WebProxy = WebRequest.DefaultWebProxy + }; + if (hander != null) + { + foreach (KeyValuePair item in hander) + { + httpItem.Header.Add(item.Key, item.Value); + } + } + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + addCookle(httpReuslt.Cookie); + return httpReuslt; + } + + protected void addCookle(string cookies) + { + if (cookies == null || string.IsNullOrEmpty(cookies.Trim())) + { + return; + } + foreach (CookieItem item in HttpCookieHelper.GetCookieList(cookies)) + { + if (item.Key == "Max-Age" || item.Key == "Path" || item.Key == "Expires" || item.Key == "domain" || item.Key == "Domain" || item.Key == "path") + { + continue; + } + CookieItem cookieItem = listCookie.Where((CookieItem c) => c.Key == item.Key).FirstOrDefault(); + if (cookieItem == null) + { + if (!string.IsNullOrEmpty(item.Value.Trim())) + { + listCookie.Add(item); + } + } + else if (!string.IsNullOrEmpty(item.Value.Trim())) + { + cookieItem.Value = item.Value.Trim(); + } + } + } + } +} diff --git a/AppleBatch_June.FormLogin.resx b/AppleBatch_June.FormLogin.resx new file mode 100644 index 0000000..aa6c342 --- /dev/null +++ b/AppleBatch_June.FormLogin.resx @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABNTeXN0ZW0uRHJhd2luZy5JY29uAgAAAAhJY29uRGF0YQhJY29uU2l6ZQcEAhNTeXN0ZW0uRHJhd2luZy5TaXplAgAAAAIAAAAJAwAAAAX8////E1N5c3RlbS5EcmF3aW5nLlNpemUCAAAABXdpZHRoBmhlaWdodAAACAgCAAAAAAAAAAAAAAAPAwAAAD4IAQACAAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAABABILAAASCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkOAH7ZPgB+2T4Aftk+AH7ZDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2S4Aftk+AH7ZfgB+2X4Aftl+AH7ZfgB+2X4Aftk+AH7ZLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkeAH7ZbgB+2a8AftnfAH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2c8AftmfAH7ZXgB+2R4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkOAH7ZXgB+2a8AftnvAH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8AftluAH7ZHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftleAH7ZzwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8AftleAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkeAH7ZnwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZrwB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftleAH7Z3wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftnfAH7ZXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkeAH7ZnwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8AftkeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7ZzwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZvwB+2R4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZbgB+2e8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2V4Aftn/AH7Z/wB+2f8Aftn/AIvn/wCl//8AqP//AKz//wCw//8As///ALb//wC6//8Av///AMT//wDK//8Azv//ANP//wDX//8A2v//AN3//wDf//8A4v//AOT//wDl//8A5///AOj//wDp//8A6v//AOr//wDq//8A6v//AOn//wDo//8AxvP/AH7Z/wB+2f8Aftn/AH7Z/wCM5/8Apf//AKn//wCs//8AsP//ALP//wC3//8Au///AMD//wDF//8Ay///AND//wDU//8A2P//ANv//wDd//8A4P//AOP//wDl//8A5///AOj//wDp//8A6v//AOv//wDs//8A7P//AOv//wDr//8A6v//AOn//wDn//8A5f//AOP//wDh//8AqOn/AH7Z/wB+2f8Aftn/AH7Z/wCa7v8AsP//ALD//wCn9/8AlOn/AIHb/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8AftkeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZnwB+2f8Aftn/AH7Z/wB+2f8AlvD/AKf//wCr//8Arv//ALL//wC1//8Auf//AL7//wDD//8Ayf//AM7//wDT//8A1///ANv//wDe//8A4P//AOP//wDl//8A6P//AOr//wDr//8A7f//AO7//wDu//8A7///AO///wDu//8A7v//AO3//wCu6f8Aftn/AH7Z/wB+2f8Aftn/AJbw/wCn//8Aq///AK///wCy//8Atv//ALn//wC///8AxP//AMr//wDP//8A1P//ANj//wDb//8A3v//AOH//wDk//8A5v//AOn//wDr//8A7f//AO7//wDv//8A8P//APD//wDw//8A8P//AO///wDu//8A7f//AOv//wDp//8A5///AOX//wDJ9f8Aftn/AH7Z/wB+2f8Aftn/AI7k/wCy//8Asv//ALL//wCx//8Asf//AJ7w/wCL4v8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AH7ZDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftm/AH7Z/wB+2f8Aftn/AH7Z/wCj/P8Aqf//AK3//wCw//8AtP//ALj//wC8//8Awv//AMj//wDN//8A0///ANf//wDb//8A3v//AOH//wDk//8A5///AOn//wDs//8A7v//APD//wDx//8A8v//APP//wDz//8A8///APP//wDy//8A8f//AJri/wB+2f8Aftn/AH7Z/wB+2f8Aofr/AKn//wCt//8Asf//ALT//wC4//8Avf//AMP//wDI//8Azv//ANP//wDY//8A2///AN///wDi//8A5f//AOj//wDq//8A7f//AO///wDx//8A8v//APP//wD0//8A9f//APX//wD0//8A9P//APP//wDx//8A8P//AO3//wDr//8A6P//AOb//wB+2f8Aftn/AH7Z/wB+2f8AhN3/ALP//wCz//8As///ALP//wCz//8As///ALP//wCs+v8Akef/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftnfAH7ZPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8Agt3/AKf//wCr//8Ar///ALL//wC2//8Auv//AMD//wDG//8AzP//ANH//wDW//8A2v//AN7//wDh//8A5P//AOf//wDq//8A7f//APD//wDy//8A9P//APX//wD3//8A9///APj//wD4//8A+P//APf//wD2//8AjN3/AH7Z/wB+2f8Aftn/AH7Z/wCn//8Aq///AK///wCz//8Atv//ALr//wDA//8Axv//AMz//wDS//8A1///ANv//wDe//8A4v//AOX//wDo//8A6///AO7//wDx//8A8///APX//wD3//8A+P//APn//wD5//8A+f//APn//wD4//8A9///APb//wD0//8A8f//AO///wDs//8A6f//AJji/wB+2f8Aftn/AH7Z/wB+2f8Btf//AbX//wG1//8Atf//ALT//wC0//8AtP//ALT//wC0//8Arfr/AJLn/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z/wB+2f8Aftn/AH7Z/wCI4v8Aqf//AK3//wCw//8AtP//ALj//wC9//8Aw///AMn//wDP//8A1f//ANn//wDd//8A4f//AOT//wDo//8A6///AO7//wDx//8A8///APb//wD4//8A+v//APv//wD8//8A/P//APz//wD8//8A+///APr//wB+2f8Aftn/AH7Z/wB+2f8AiOL/AKn//wCt//8Asf//ALT//wC4//8Avf//AMT//wDK//8A0P//ANX//wDZ//8A3f//AOH//wDl//8A6P//AOz//wDv//8A8v//APT//wD3//8A+f//APv//wD8//8A/f//Af7//wH+//8A/f//AP3//wD7//8A+v//APj//wD1//8A8v//APD//wDs//8AmeL/AH7Z/wB+2f8Aftn/AH7Z/wG2//8Btv//Abb//wG2//8Btv//ALb//wC2//8Atv//ALX//wC1//8Atf//AK76/wCL4v8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZzwB+2R4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftn/AH7Z/wB+2f8Aftn/AIji/wCq//8Arv//ALL//wC2//8Auv//AMD//wDG//8AzP//ANP//wDY//8A3P//AN///wDj//8A5///AOv//wDu//8A8f//APT//wD3//8A+v//APz//wH+//8F/v//Cf///wz///8M////Cf///wX+//8B/v//AH7Z/wB+2f8Aftn/AH7Z/wCI4v8Aqv//AK7//wCy//8Atv//ALr//wDA//8Ax///AM3//wDT//8A2P//ANz//wDg//8A5P//AOf//wDr//8A7///APL//wD1//8A+P//APv//wD9//8E/v//Cv///xD///8T////E////xH///8M////Bv7//wH9//8A+///APn//wD2//8A8///APD//wCn5/8Aftn/AH7Z/wB+2f8Aftn/AK33/wG4//8BuP//Abj//wG4//8BuP//Abf//wC3//8At///ALf//wC2//8Atv//ALb//wCk8/8Ahd3/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z7wB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8AiOL/AKv//wCv//8As///ALf//wC8//8Aw///AMn//wDP//8A1f//ANr//wDe//8A4v//AOb//wDq//8A7f//APH//wD1//8A+P//APv//wD9//8H/v//Ef///xn///8e////If///yH///8f////Gv///xL///8Aftn/AH7Z/wB+2f8Aftn/AIji/wCr//8Ar///ALP//wC3//8AvP//AMP//wDJ//8A0P//ANb//wDa//8A3v//AOL//wDm//8A6v//AO7//wDy//8A9f//APj//wD8//8C/v//DP///xb///8e////JP///yf///8n////Jf///yD///8Z////D////wT+//8A/P//APn//wD2//8A8///AKjn/wB+2f8Aftn/AH7Z/wB+2f8Aq/X/Abr//wG6//8Buv//Abn//wG5//8Buf//Abn//wG4//8AuP//ALj//wC4//8At///ALf//wCz/P8Alun/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z/wB+2f8Aftn/AH7Z/wCJ4v8Arf//ALH//wC1//8Auf//AL///wDF//8AzP//ANL//wDY//8A3P//AOD//wDk//8A6P//AOz//wDw//8A9P//APf//wD7//8B/v//Df///xr///8k////LP///zH///80////NP///zL///8t////Jf///wB+2f8Aftn/AH7Z/wB+2f8AieL/AK3//wCx//8Atf//ALn//wC///8Axf//AMz//wDS//8A2P//ANz//wDg//8A5P//AOj//wDs//8A8P//APT//wD4//8A/P//A/7//xD///8e////KP///zH///83////Ov///zr///84////M////yv///8h////Ff///wb+//8A/f//APn//wD1//8Am+L/AH7Z/wB+2f8Aftn/AH7Z/wG8//8BvP//Abz//wG8//8BvP//Abv//wG7//8Bu///Abr//wG6//8Buv//ALn//wC5//8AuP//ALj//wC3//8AqfX/AIHb/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2W4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftn/AH7Z/wB+2f8Aftn/AIni/wCu//8Asv//ALb//wC6//8Awf//AMf//wDO//8A1P//ANn//wDe//8A4v//AOb//wDq//8A7v//APL//wD2//8A+v//Af7//w3///8d////Kv///zX///89////Q////0b///9G////Q////z7///82////A4bb/wB+2f8Aftn/AH7Z/wCA2/8Arv//ALL//wC2//8Auv//AMD//wDH//8Azv//ANT//wDZ//8A3v//AOL//wDm//8A6v//AO///wDz//8A9///APv//wL+//8Q////IP///y7///84////Qv///0j///9M////TP///0n///9E////O////zH///8k////Ff///wX+//8A/P//APj//wCc4v8Aftn/AH7Z/wB+2f8Aftn/Ab///wG///8Bv///Ab///wG+//8Bvv//Ab7//wG9//8Bvf//Abz//wG8//8Bu///Abv//wC6//8Auv//ALn//wC4//8AtPz/AIng/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2Z8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2e8Aftn/AH7Z/wB+2f8AgNv/AK///wCz//8At///ALz//wDC//8Ayf//AND//wDW//8A2///AN///wDj//8A6P//AOz//wDw//8A9f//APn//wD9//8J////G////yv///84////RP///03///9U////WP///1j///9U////Tv///0X///8PnuL/AH7Z/wB+2f8Aftn/AH7Z/wCr/P8Asv//ALf//wC7//8Awv//AMn//wDQ//8A1v//ANr//wDf//8A4///AOj//wDs//8A8P//APX//wD5//8A/f//C////x3///8t////O////0f///9R////Wf///13///9d////Wv///1T///9K////P////zH///8i////EP///wH+//8A+v//AH7Z/wB+2f8Aftn/AH7Z/wCC2/8Bwv//AcH//wHB//8Bwf//AcH//wHB//8BwP//AcD//wHA//8Bv///Ab///wG+//8Bvf//Ab3//wC8//8Au///ALr//wC6//8Auf//AJTn/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2Y8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZvwB+2f8Aftn/AH7Z/wB+2f8Aqfr/ALP//wC4//8Avf//AMT//wDL//8A0f//ANf//wDc//8A4P//AOX//wDp//8A7f//APL//wD2//8A+///Av7//xT///8m////Nv///0X///9R////XP///2P///9o////aP///2T///9d////Uv///yC26f8Aftn/AH7Z/wB+2f8Aftn/AKDz/wCz//8At///AL3//wDD//8Ayv//ANH//wDX//8A3P//AOD//wDk//8A6f//AO3//wDy//8A9v//APv//wP+//8V////J////zj///9H////VP///1////9n////bP///23///9p////Yv///1j///9L////PP///yz///8b////B/7//wDk9/8Aftn/AH7Z/wB+2f8Aftn/AI/i/wHE//8BxP//AcT//wHE//8BxP//AcP//wHD//8Bw///AcL//wHC//8Bwf//AcD//wHA//8Bv///Ab7//wG+//8Avf//ALz//wC7//8Auv//AJ/u/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftmPAH7Z/wB+2f8Aftn/AH7Z/wCe8P8AtP//ALj//wC+//8Axf//AMz//wDS//8A2P//AN3//wDh//8A5v//AOr//wDv//8A8///APf//wD8//8I////HP///y////8/////T////13///9o////cf///3b///92////cv///2n///9e////NM7w/wB+2f8Aftn/AH7Z/wB+2f8Akef/ALT//wC4//8Avv//AMT//wDL//8A0v//ANj//wDc//8A4f//AOX//wDq//8A7v//APP//wD3//8A/P//CP///x3///8v////QP///1D///9f////a////3T///96////e////3f///9u////Yv///1X///9F////NP///yL///8O////AMbu/wB+2f8Aftn/AH7Z/wB+2f8Aouz/Acf//wHH//8Bx///Acb//wHG//8Bxv//Acb//wHF//8Bxf//AcT//wHE//8Bw///AcL//wHC//8Bwf//AcD//wG///8Avv//AL3//wC8//8Au///AKTw/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2U4Aftn/AH7Z/wB+2f8Aftn/AIri/wC0//8Auf//AL///wDG//8AzP//ANP//wDZ//8A3f//AOL//wDm//8A6///AO///wD0//8A+f//AP3//w7///8i////Nf///0b///9X////Zv///3P///99////g////4P///99////dP///2f///9O7vr/AH7Z/wB+2f8Aftn/AH7Z/wCB2/8Asfz/ALj//wC+//8Axf//AMz//wDT//8A2P//AN3//wDh//8A5v//AOv//wDv//8A9P//APj//wD9//8N////Iv///zX///9G////V////2b///90////f////4b///+H////gf///3f///9q////XP///0v///86////KP///xP///8Ajt3/AH7Z/wB+2f8Aftn/AH7Z/wC29f8Byf//Acn//wHJ//8Byf//Acn//wHJ//8ByP//Acj//wHH//8Bx///Acb//wHG//8Bxf//AcT//wHE//8Bw///AcL//wHB//8AwP//AL///wC+//8Avf//AKXw/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z7wB+2S4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8Aftn/AK76/wC5//8Av///AMb//wDN//8A1P//ANn//wDe//8A4v//AOf//wDr//8A8P//APT//wD5//8A/f//Ef///yb///85////Sv///1v///9r////ef///4X///+M////jf///4X///96////bP///13///8PluD/AH7Z/wB+2f8Aftn/AH7Z/wCg8P8AuP//AL7//wDF//8AzP//ANP//wDZ//8A3f//AOL//wDm//8A6///AO///wD0//8A+f//AP3//w////8k////N////0n///9a////av///3n///+F////jv///4////+I////fP///2////9f////Tv///z3///8q////Et71/wB+2f8Aftn/AH7Z/wB+2f8Agtv/Acz//wHM//8BzP//Acz//wHM//8By///Acv//wHL//8Byv//Acr//wHJ//8Byf//Acj//wHI//8Bx///Acb//wHF//8BxP//AcP//wHC//8Awf//AMD//wC///8Avv//AKXw/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z3wB+2Q4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZnwB+2f8Aftn/AH7Z/wB+2f8Ak+f/ALn//wC///8Axv//AM3//wDU//8A2f//AN7//wDi//8A5///AOv//wDw//8A9f//APn//wH+//8S////J////zn///9L////XP///2z///97////h////5D///+Q////h////3z///9t////Xv///zLO8P8Aftn/AH7Z/wB+2f8Aftn/AIXd/wC4//8Avv//AMX//wDM//8A0///ANn//wDd//8A4v//AOb//wDr//8A7///APT//wD5//8A/f//D////yT///83////Sf///1r///9q////ef///4X///+O////j////4j///98////b////1////9O////Pf///yr///8HnuL/AH7Z/wB+2f8Aftn/AH7Z/wCh6f8Bz///Ac///wHP//8Bz///Ac7//wHO//8Bzv//Ac3//wHN//8Bzf//Acz//wHL//8By///Acr//wHJ//8Byf//Acj//wHH//8Bxv//AcX//wHE//8Aw///AMH//wDA//8Av///AJ7s/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZrwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftk+AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Arvf/AL///wDG//8Azf//ANT//wDZ//8A3v//AOL//wDn//8A6///APD//wD0//8A+f//AP3//xD///8l////OP///0n///9a////af///3f///+C////if///4r///+D////eP///2v///9b////Rvb8/wOG2/8Aftn/AH7Z/wB+2f8Aftn/AJvs/wC+//8Axf//AMz//wDT//8A2P//AN3//wDh//8A5v//AOv//wDv//8A9P//APj//wD9//8N////Iv///zT///9G////V////2b///90////f////4b///+H////gf///3f///9q////XP///0v///86////G87w/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AMf6/wHR//8B0f//AdH//wHR//8B0f//AdH//wHQ//8B0P//AdD//wHP//8Bz///Ac7//wHN//8Bzf//Acz//wHL//8Byv//Acn//wHI//8Bx///Acb//wHF//8AxP//AMP//wDB//8AwP//AJbn/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftm/AH7Z/wB+2f8Aftn/AH7Z/wCJ4P8Avv//AMX//wDM//8A0///ANn//wDd//8A4v//AOb//wDr//8A7///APT//wD4//8A/f//DP///yD///8z////RP///1T///9j////b////3n///9+////fv///3n///9w////ZP///1X///9F////HL7s/wB+2f8Aftn/AH7Z/wB+2f8Aftn/ALL3/wDE//8Ay///ANL//wDY//8A3P//AOH//wDl//8A6v//AO7//wDz//8A9///APz//wj///8d////L////0D///9Q////Xv///2v///90////ev///3v///92////bv///2L///9V////Rf///y/u+v8Chtv/AH7Z/wB+2f8Aftn/AH7Z/wCe5/8B1P//AdT//wHU//8B1P//AdT//wHU//8B0///AdP//wHT//8B0v//AdL//wHR//8B0f//AdD//wHP//8Bzv//Ac7//wHN//8BzP//Acv//wHK//8Byf//Acj//wHG//8Axf//AMT//wDC//8Avfz/AIrg/wB+2f8Aftn/AH7Z/wB+2f8AftnvAH7ZDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2T4Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCW5/8AxP//AMv//wDS//8A2P//ANz//wDh//8A5f//AOr//wDu//8A8///APf//wD7//8G/v//Gv///yz///88////S////1n///9k////bP///3H///9x////bf///2X///9a////Tf///z3///8QpuT/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aht3/AL/8/wDK//8A0f//ANf//wDc//8A4P//AOT//wDp//8A7f//APL//wD2//8A+///A/7//xX///8n////OP///0b///9U////X////2f///9s////bf///2n///9i////V////0v///859vz/CZbg/wB+2f8Aftn/AH7Z/wB+2f8Ag9v/AMv6/wHW//8B1v//Adb//wHW//8Ars//AGt//wDI7/8B1v//AdX//wHV//8B1P//AdT//wHT//8B0v//AdL//wHR//8B0P//Ac///wHO//8Bzf//Acz//wHL//8Byv//Acn//wHH//8Axv//AMX//wDD//8Atff/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftmfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2d8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCq8P8Ayv//ANH//wDX//8A2///AOD//wDk//8A6f//AO3//wDx//8A9v//APr//wH+//8Q////Iv///zL///9A////TP///1f///9e////Yv///2L///9e////V////03///9B////Fa7n/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Ai+D/AMT8/wDQ//8A1v//ANr//wDf//8A4///AOj//wDs//8A8P//APX//wD5//8A/f//C////x3///8t////Ov///0f///9R////WP///1z///9d////Wv///1P///9K////Pv///xGm5P8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCr7P8B2P//Adj//wHY//8B2P//Adj//wBRX/8AAAD/AGx//wHX//8B1///Adf//wHW//8B1v//Adb//wHV//8B1P//AdP//wHT//8B0v//AdH//wHQ//8Bz///Ac3//wHM//8By///Acr//wHJ//8Ax///AMb//wDE//8AoOz/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftkuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftk+AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCo7v8Az///ANX//wDa//8A3v//AOP//wDn//8A6///APD//wD0//8A+P//APz//wX+//8W////Jv///zP///8+////R////07///9R////Uf///07///9I////P////xWu5/8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AjOD/AMn8/wDU//8A2f//AN7//wDi//8A5v//AOr//wDv//8A8///APf//wD7//8C/v//EP///yD///8t////OP///0H///9I////S////0z///9J////Q////zj2/P8OnuL/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AleL/Adr//wHa//8B2v//Adr//wHa//8AzO//AAAA/wAAAP8AsM//Adn//wHZ//8B2f//Adj//wHY//8B1///Adf//wHW//8B1v//AdX//wHU//8B0///AdL//wHR//8B0P//Ac///wHN//8BzP//Acv//wDJ//8AyP//AMf//wDF//8Ai+D/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALgAAAB4AAAAAAAAAAAB+2b8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCc5/8Azvz/ANn//wDd//8A4f//AOX//wDq//8A7v//APL//wD1//8A+f//AP3//wj+//8X////JP///y////83////PP///z////8/////Pf///zT2/P8QpuT/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Ag9v/AL31/wDY//8A3P//AOD//wDk//8A6P//AOz//wDw//8A9P//APj//wD8//8D/v//EP///x3///8o////Mf///zb///85////Ov///zj///8q5vf/Bo7d/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AIPb/wDV/P8B2///Adv//wHc//8B3P//Adz//wBgb/8AAAD/ADY//wHb//8B2///Adv//wHa//8B2v//Adr//wHZ//8B2f//Adj//wHY//8B1///Adb//wHW//8B1f//AdP//wHS//8B0f//AdD//wHO//8Bzf//Acz//wDK//8Ayf//AMf//wC09f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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/wBmsP8ABw3/AAAA/wAKD/8AW4//AKP//wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wCc9/8Aku7/AIvn/wCH4v8AgNv/AH7Z/wB+2f8Aftn/AIPd/wCJ4v8Aj+f/AJju/wCl9/8BsP//AbH//wGz//8BtP//Abb//wG3//8ikfv/hBvw/3cV3v9hCr//TQCh/yZhz/8BxP//Acb//wHJ//8By///Ac3//wHP//8B0f//AdL//wHU//8B1v//AMz6/wDC9f8ArOz/AKzs/wCh5/8AleL/AJzk/wCu7P8Ar+z/AMLz/wDV+v8B4v//AeP//wHk//8B5f//AeX//wHm//8B5///Aef//wHo//8A2e//ADo//wBJT/8AoK//Aen//wHp//8B6f//AIOP/wAOD/8AAAD/AJKf/wHp//8B6f//Aen//wHo//8B6P//Aej//wHn//8B5///Aeb//wHl//8B5f//AeT//wHj//8B4v//AeL//wHh//8B4P//Ad///wHe//8B3f//Adz//wHb//8B2v//Adn//wHX//8B1v//ANX//wDT//8A0f//AI3g/wB+2f8Aftn/AH7Z/wB+2f8AftkuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAA/wAXKP8Adsv/AH7Z/wB2y/8AHzb/AAAA/wAAAP8AFB//AGWf/wCY7/8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpf//Aaf//wGo//8Bqv//Aav//wGt//8Brv//Aa///wGx//8Bsv//AbT//wG1//8Bt///Abj//yKS+/+EG/D/dxXe/2EKv/9NAKH/JmLP/wHG//8ByP//Acr//wHM//8Bzv//AdD//wHS//8B1P//Adb//wHX//8B2f//Adr//wHb//8B3P//Ad3//wHe//8B3///AeD//wHh//8B4v//AeP//wHk//8B5f//AeX//wHm//8B5///Aej//wHo//8B6f//Aen//wHq//8B6v//Aer//wHr//8B6///AHV//wAOD/8AAAD/ACwv/wC/z/8B6///Aev//wHr//8B6v//Aer//wHq//8B6f//Aen//wHo//8B6P//Aef//wHm//8B5v//AeX//wHk//8B4///AeL//wHh//8B4P//Ad///wHe//8B3f//Adz//wHb//8B2v//Adn//wHY//8A1v//ANX//wDT//8Ap+z/AH7Z/wB+2f8Aftn/AH7Z/wB+2W4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuAAAA/wAXKP8Adsv/AH7Z/wCH4v8AW4//AAoP/wAAAP8AAAD/AAoP/wBwr/8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGq//8BrP//Aa3//wGv//8BsP//AbL//wGz//8Btf//Abb//wG3//8Buf//IpP7/4Qb8P93Fd7/YQq//00Aof8mY8//Acj//wHK//8BzP//Ac7//wHQ//8B0v//AdT//wHW//8B1///Adn//wHa//8B2///Adz//wHd//8B3///AeD//wHh//8B4v//AeP//wHk//8B5f//AeX//wHm//8B5///Aej//wHp//8B6f//Aer//wHq//8B6///Aev//wHs//8B7P//Aez//wHt//8AWV//AEpP/wCUn/8B7f//Ae3//wHt//8B7f//Aez//wHs//8B7P//Aev//wHr//8B6v//Aer//wHp//8B6f//Aej//wHn//8B5v//Aeb//wHl//8B5P//AeP//wHi//8B4f//AeD//wHf//8B3v//Ad3//wHb//8B2v//Adn//wHY//8A1v//ANX//wC+9f8Aftn/AH7Z/wB+2f8Aftn/AH7ZrwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2V4ARnr/AAAA/wAHDf8AVpX/AJDs/wCj//8AmO//AFuP/wAUH/8AAAD/AGWf/wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpf//Aaf//wGo//8Bqv//Aav//wGt//8Brv//AbD//wGx//8Bs///AbT//wG1//8Bt///Abj//wG6//8ilPv/hBvw/3cV3v9hCr//TQCh/yZkz/8Byv//Acz//wHO//8B0P//AdL//wHU//8B1v//Adf//wHZ//8B2v//Adv//wHc//8B3v//Ad///wHg//8B4f//AeL//wHj//8B5P//AeX//wHm//8B5///Aej//wHp//8B6f//Aer//wHr//8B7P//Aez//wHt//8B7f//Ae3//wHu//8B7v//Ae7//wHv//8B7///Ae///wHv//8B7///Ae///wHu//8B7v//Ae7//wHt//8B7f//Ae3//wHs//8B7P//Aev//wHq//8B6v//Aen//wHo//8B5///Aeb//wHl//8B5P//AeP//wHi//8B4f//AeD//wHf//8B3v//Ad3//wHc//8B2v//Adn//wDY//8A1v//ANX//wB+2f8Aftn/AH7Z/wB+2f8AftnfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZfgB+2f8AVpX/AAcN/wAAAP8AHC3/AFuP/wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGr//8BrP//Aa7//wGv//8BsP//AbL//wGz//8Btf//Abb//wG4//8Buf//Abv//yKV+/+EG/D/dxXe/2EKv/9NAKH/JmXP/wHL//8Bzf//AdD//wHS//8B1P//Adb//wHX//8B2f//Adr//wHb//8B3f//Ad7//wHf//8B4P//AeH//wHj//8B5P//AeX//wHm//8B5///Aej//wHp//8B6f//Aer//wHr//8B7P//Aez//wHt//8B7v//Ae7//wHv//8B7///AfD//wHw//8B8P//AfD//wHw//8B8f//AfH//wHx//8B8P//AfD//wHw//8B8P//Ae///wHv//8B7v//Ae7//wHt//8B7f//Aez//wHr//8B6v//Aer//wHp//8B6P//Aef//wHm//8B5f//AeT//wHj//8B4v//AeD//wHf//8B3v//Ad3//wHc//8B2v//ANn//wDY//8A1v//AI7g/wB+2f8Aftn/AH7Z/wB+2f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftm/AH7Z/wB+2f8Adsv/AD9s/wAUH/8AAAD/AJjv/wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpf//Aaf//wGo//8Bqv//Aav//wGt//8Brv//AbD//wGx//8Bs///AbT//wG2//8Bt///Abn//wG6//8Bvf//Ipb7/4Qb8P93Fd7/YQq//00Aof8mZc//Ac3//wHP//8B0f//AdP//wHW//8B1///Adn//wHa//8B2///Ad3//wHe//8B3///AeD//wHi//8B4///AeT//wHl//8B5v//Aef//wHo//8B6f//Aer//wHr//8B7P//Ae3//wHt//8B7v//Ae///wHv//8B8P//AfD//wHx//8B8f//AfL//wHy//8B8v//AfL//wHy//8B8v//AfL//wHy//8B8v//AfL//wHx//8B8f//AfH//wHw//8B8P//Ae///wHu//8B7f//Ae3//wHs//8B6///Aer//wHp//8B6P//Aef//wHm//8B5f//AeT//wHj//8B4v//AeH//wHf//8B3v//Ad3//wHc//8A2v//ANn//wDX//8AmeT/AH7Z/wB+2f8Aftn/AH7Z/wB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2b8Aftn/AH7Z/wB+2f8Aftn/AKP//wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGq//8BrP//Aa7//wGv//8Bsf//AbL//wG0//8Btf//Abf//wG4//8Buv//Abz//wG+//8il/v/hBvw/3cV3v9hCr//TQCh/yZmz/8Bz///AdH//wHT//8B1f//Adf//wHY//8B2v//Adv//wHc//8B3v//Ad///wHg//8B4v//AeP//wHk//8B5f//Aeb//wHo//8B6f//Aer//wHr//8B7P//Ae3//wHt//8B7v//Ae///wHw//8B8P//AfH//wHy//8B8v//AfP//wHz//8B8///AfT//wH0//8B9P//AfT//wH0//8B9P//AfT//wH0//8B8///AfP//wHz//8B8v//AfL//wHx//8B8f//AfD//wHv//8B7v//Ae7//wHt//8B7P//Aev//wHq//8B6f//Aej//wHn//8B5f//AeT//wHj//8B4v//AeH//wHf//8B3v//Ad3//wDb//8A2v//ANn//wCr7P8Aftn/AH7Z/wB+2f8Aftn/AH7ZPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z/wB+2f8Aftn/AH7Z/wCC3f8Ao///AKP//wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bpf//Aaf//wGo//8Bqv//Aav//wGt//8Brv//AbD//wGx//8Bs///AbT//wG2//8Bt///Abn//wG7//8Bvf//AcD//yKY+/+EG/D/dxXe/2EKv/9NAKH/JmfP/wHQ//8B0v//AdX//wHW//8B2P//Adn//wHb//8B3P//Ad7//wHf//8B4P//AeL//wHj//8B5P//AeX//wHn//8B6P//Aen//wHq//8B6///Aez//wHt//8B7v//Ae///wHw//8B8f//AfH//wHy//8B8///AfP//wH0//8B9P//AfX//wH1//8B9f//Afb//wH2//8B9v//Afb//wH2//8B9v//AfX//wH1//8B9f//AfT//wH0//8B8///AfP//wHy//8B8f//AfH//wHw//8B7///Ae7//wHt//8B7P//Aev//wHq//8B6f//Aej//wHn//8B5v//AeT//wHj//8B4v//AeH//wHf//8B3v//Ad3//wDb//8A2v//ALHu/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftn/AH7Z/wB+2f8Aftn/AIfi/wCj//8Ao///AKP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGq//8BrP//Aa3//wGv//8Bsf//AbL//wG0//8Btf//Abf//wG4//8Buv//Abz//wG///8Bwf//Ipn7/4Qb8P93Fd7/YQq//00Aof8maM//AdL//wHU//8B1v//Adj//wHZ//8B2///Adz//wHd//8B3///AeD//wHi//8B4///AeT//wHm//8B5///Aej//wHp//8B6v//Aez//wHt//8B7v//Ae///wHw//8B8P//AfH//wHy//8B8///AfT//wH0//8B9f//Afb//wH2//8B9v//Aff//wH3//8B9///Aff//wH4//8B+P//Afj//wH3//8B9///Aff//wH2//8B9v//Afb//wH1//8B9P//AfT//wHz//8B8v//AfH//wHx//8B8P//Ae///wHu//8B7f//Aez//wHr//8B6f//Aej//wHn//8B5v//AeT//wHj//8B4v//AeD//wHf//8B3v//ANz//wDb//8AwvX/AH7Z/wB+2f8Aftn/AH7Z/wB+2X4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8Ah+L/AKP//wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bpf//Aab//wGo//8Bqf//Aav//wGt//8Brv//AbD//wGx//8Bs///AbT//wG2//8Bt///Abn//wG7//8Bvf//AcD//wHC//8imvv/hBvw/3cV3v9hCr//TQCh/yZoz/8B0///AdX//wHX//8B2f//Adr//wHc//8B3f//Ad///wHg//8B4f//AeP//wHk//8B5f//Aef//wHo//8B6f//Aev//wHs//8B7f//Ae7//wHv//8B8P//AfH//wHy//8B8///AfT//wH1//8B9f//Afb//wH3//8B9///Afj//wH4//8B+P//Afn//wH5//8B+f//Afn//wH5//8B+f//Afn//wH5//8B+f//Afj//wH4//8B9///Aff//wH2//8B9f//AfX//wH0//8B8///AfL//wHx//8B8P//Ae///wHu//8B7f//Aez//wHr//8B6v//Aej//wHn//8B5v//AeT//wHj//8B4v//AeD//wHf//8A3f//ANz//wDD9f8Aftn/AH7Z/wB+2f8Aftn/AH7ZfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z/wB+2f8Aftn/AH7Z/wCH4v8Ao///AKP//wAoP/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AXX//Abz//wG///8Bwf//AcT//yKb+/+EG/D/dxXe/2EKv/9NAKH/JmnP/wHV//8B1///Adj//wHa//8B2///Ad3//wHe//8B4P//AeH//wHj//8B5P//AeX//wHn//8B6P//Aen//wHr//8Asb//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wH6//8B+v//Afn//wH5//8B+P//Afj//wH3//8B9v//AfX//wH1//8B9P//AfP//wHy//8B8f//AfD//wHu//8B7f//Aez//wHr//8B6v//Aej//wHn//8B5v//AeT//wHj//8B4f//AeD//wDe//8A3f//AMT1/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftn/AH7Z/wB+2f8Aftn/AIfi/wCj//8Ao///ACg//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wBdf/8Bvf//AcD//wHC//8Bxf//Ipz7/4Qb8P93Fd7/YQq//00Aof8mas//Adb//wHY//8B2f//Adv//wHc//8B3v//Ad///wHh//8B4v//AeT//wHl//8B5///Aej//wHp//8B6///Aez//wCyv/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Afz//wH8//8B+///Afv//wH6//8B+f//Afn//wH4//8B9///Afb//wH1//8B9P//AfP//wHy//8B8f//AfD//wHv//8B7f//Aez//wHr//8B6v//Aej//wHn//8B5f//AeT//wHi//8B4f//AOD//wDe//8AxfX/AH7Z/wB+2f8Aftn/AH7Z/wB+2X4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8Ah+L/AKP//wCj//8AKD//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AF5//wG///8Bwf//AcT//wHG//8infv/hBvw/3cV3v9hCr//TQCh/yZrz/8B1///Adj//wHa//8B3P//Ad3//wHf//8B4P//AeL//wHj//8B5f//Aeb//wHo//8B6f//Aer//wHs//8B7f//ALO//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8B/v//Af3//wH9//8B/P//Afz//wH7//8B+v//Afn//wH5//8B+P//Aff//wH2//8B9f//AfT//wHy//8B8f//AfD//wHv//8B7f//Aez//wHr//8B6f//Aej//wHm//8B5f//AeT//wHi//8A4f//AN///wDG9f8Aftn/AH7Z/wB+2f8Aftn/AH7ZfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z/wB+2f8Aftn/AH7Z/wCH4v8Ao///AKP//wBln/8AUX//AFF//wBRf/8AUX//AFF//wBRf/8AUX//AFF//wBRf/8AUn//AFN//wBTf/8AVH//AFV//wBWf/8AV3//AFd//wBYf/8AWX//AFp//wBbf/8AW3//AFx//wBdf/8Ajr//AcD//wHC//8Bxf//Acf//yKe+/+EG/D/dxXe/2EKv/9NAKH/JmvP/wHY//8B2f//Adv//wHd//8B3v//AeD//wHh//8B4///AeT//wHm//8B5///Aen//wHq//8B7P//Ae3//wHu//8A0t//AHh//wB5f/8Aen//AHp//wB7f/8Ae3//AHx//wB8f/8AfX//AH1//wB+f/8Afn//AH9//wB/f/8Bf3//An9//wN/f/8Ef3//BH9//wV/f/8Ff3//BX9//wV/f/8Ff3//BH9//wX///8D////Av7//wH+//8B/f//Af3//wH8//8B+///Afr//wH5//8B+P//Aff//wH2//8B9f//AfT//wHz//8B8f//AfD//wHv//8B7f//Aez//wHq//8B6f//Aej//wHm//8B5f//AeP//wDi//8A4P//AMb1/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftn/AH7Z/wB+2f8Aftn/AIfi/wCj//8Ao///AKP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpv//Aaj//wGp//8Bq///Aaz//wGu//8BsP//AbH//wGz//8BtP//Abb//wG4//8Buf//Abz//wG+//8Bwf//AcP//wHG//8ByP//Ip/7/4Qb8P93Fd7/YQq//00Aof8ma8//Adn//wHa//8B3P//Ad3//wHf//8B4f//AeL//wHk//8B5f//Aef//wHo//8B6v//Aev//wHt//8B7v//AfD//wHx//8B8v//AfT//wH1//8B9v//Aff//wH4//8B+f//Afr//wH7//8B/P//Af3//wH+//8C/v//Bf///wj///8L////Df///w////8Q////Ef///xH///8R////Ef///xD///8P////Df///wv///8I////Bv///wP///8B/v//Af3//wH9//8B/P//Afv//wH6//8B+f//Aff//wH2//8B9f//AfT//wHz//8B8f//AfD//wHu//8B7f//Aez//wHq//8B6f//Aef//wHm//8B5P//AOP//wDh//8Ax/X/AH7Z/wB+2f8Aftn/AH7Z/wB+2X4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8Ah+L/AKP//wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaX//wGm//8BqP//Aar//wGr//8Brf//Aa///wGw//8Bsv//AbP//wG1//8Bt///Abj//wG6//8Bvf//Ab///wHC//8BxP//Acf//wHK//8ioPv/hBvw/3cV3v9hCr//TQCh/yZsz/8B2f//Adv//wHd//8B3v//AeD//wHi//8B4///AeX//wHm//8B6P//Aen//wHr//8B7P//Ae7//wHv//8B8f//AfL//wH0//8B9f//Afb//wH3//8B+f//Afr//wH7//8B/P//Af3//wH+//8C/v//Bv///wr///8N////EP///xP///8V////F////xj///8Z////Gv///xr///8Z////GP///xf///8W////FP///xH///8O////Cv///wf///8D////Af7//wH9//8B/P//Afv//wH6//8B+f//Afj//wH2//8B9f//AfT//wHy//8B8f//AfD//wHu//8B7f//Aev//wHq//8B6P//Aef//wHl//8A5P//AOL//wDI9f8Aftn/AH7Z/wB+2f8Aftn/AH7ZfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z3wB+2f8Aftn/AH7Z/wCA2/8Ao///AKP//wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpf//Aaf//wGp//8Bqv//Aaz//wGt//8Br///AbH//wGy//8BtP//Abb//wG3//8Buf//Abv//wG+//8BwP//AcP//wHF//8ByP//Acv//yKh+/+EG/D/dxXe/2EKv/9NAKH/JmzP/wHa//8B3P//Ad7//wHf//8B4f//AeP//wHk//8B5v//Aef//wHp//8B6v//Aez//wHt//8B7///AfD//wHy//8B8///AfX//wH2//8B9///Afn//wH6//8B+///Afz//wH9//8B/v//Bf///wn///8O////Ev///xX///8Y////G////x3///8f////IP///yH///8i////Iv///yH///8g////H////x3///8b////Gf///xb///8T////D////wr///8G////Av7//wH+//8B/f//Afv//wH6//8B+f//Afj//wH2//8B9f//AfT//wHy//8B8f//Ae///wHu//8B7P//Aev//wHp//8B6P//Aeb//wDk//8A4///ALbu/wB+2f8Aftn/AH7Z/wB+2f8AftleAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftm/AH7Z/wB+2f8Aftn/AH7Z/wCj//8Ao///AKP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGr//8BrP//Aa7//wGw//8Bsf//AbP//wG0//8Btv//Abj//wG5//8BvP//Ab///wHB//8BxP//Acb//wHJ//8BzP//IqH7/4Qb8P93Fd7/YQq//00Aof8mbc//Adv//wHd//8B3v//AeD//wHi//8B4///AeX//wHn//8B6P//Aer//wHr//8B7f//Ae7//wHw//8B8v//AfP//wH0//8B9v//Aff//wH5//8B+v//Afv//wH9//8B/v//Av7//wf///8M////Ef///xb///8Z////HP///yD///8i////JP///yb///8o////KP///yn///8p////Kf///yj///8m////Jf///yP///8g////Hf///xr///8W////Ev///w3///8I////A/7//wH+//8B/f//Afz//wH6//8B+f//Afj//wH2//8B9f//AfP//wHy//8B8P//Ae///wHt//8B7P//Aer//wHp//8B5///AOX//wDk//8AsOz/AH7Z/wB+2f8Aftn/AH7Z/wB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2a8Aftn/AH7Z/wB+2f8Aftn/AJz3/wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8BpP//Aab//wGo//8Bqf//Aav//wGt//8Brv//AbD//wGy//8Bs///AbX//wG3//8BuP//Abr//wG9//8Bv///AcL//wHF//8Bx///Acr//wHN//8iovv/hBvw/3cV3v9hCr//TQCh/yZtz/8B3P//Ad3//wHf//8B4f//AeP//wHk//8B5v//Aej//wHp//8B6///Aez//wHu//8B8P//AfH//wHz//8B9P//Afb//wH3//8B+P//Afr//wH7//8B/f//Af7//wP+//8I////Dv///xT///8Y////HP///yD///8k////J////yr///8s////Lv///y////8w////Mf///zH///8w////L////y7///8s////Kv///yf///8k////If///x3///8Z////FP///w////8J////BP///wH+//8B/f//Afz//wH6//8B+f//Aff//wH2//8B9P//AfP//wHx//8B8P//Ae7//wHt//8B6///Aen//wHo//8A5v//AOX//wCd5P8Aftn/AH7Z/wB+2f8Aftn/AH7ZLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZfgB+2f8Aftn/AH7Z/wB+2f8Al/P/AKP//wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGl//8Bp///Aaj//wGq//8BrP//Aa3//wGv//8BsP//AbL//wG0//8Btf//Abf//wG5//8Bu///Ab7//wHA//8Bw///Acb//wHI//8By///Ac7//yKj+/+EG/D/dxXe/2EKv/9NAKH/Jm3P/wHd//8B3v//AeD//wHi//8B4///AeX//wHn//8B6P//Aer//wHs//8B7f//Ae///wHw//8B8v//AfT//wH1//8B9///Afj//wH6//8B+///Afz//wH+//8D////Cf///w////8V////Gv///x////8j////J////yv///8u////Mf///zP///81////Nv///zf///83////N////zf///82////Nf///zP///8x////Lv///yv///8o////JP///yD///8b////Fv///xD///8K////BP///wH+//8B/f//Afv//wH6//8B+P//Aff//wH1//8B9P//AfL//wHx//8B7///Ae7//wHs//8B6v//AOn//wDn//8A5f//AJHg/wB+2f8Aftn/AH7Z/wB+2f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftlOAH7Z/wB+2f8Aftn/AH7Z/wCQ7P8Ao///AKP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8BpP//AaX//wGn//8Bqf//Aar//wGs//8Brv//Aa///wGx//8Bs///AbT//wG2//8BuP//Abn//wG8//8Bvv//AcH//wHE//8Bxv//Acn//wHM//8Bz///J7D6/5RG5f+COM//aCev/1celv9lVpT/EdLv/wHf//8B4f//AeL//wHk//8B5v//Aef//wHp//8B6///Aez//wHu//8B8P//AfH//wHz//8B9f//Afb//wH4//8B+f//Afv//wH8//8B/v//A/7//wn///8P////Fv///xv///8g////Jf///yr///8u////Mf///zX///83////Of///zv///89////Pv///z7///8+////Pv///z3///87////Of///zf///81////Mv///y////8q////Jv///yH///8c////F////xH///8K////BP///wH+//8B/P//Afv//wH5//8B+P//Afb//wH1//8B8///AfL//wHw//8B7v//Ae3//wHr//8A6f//AOj//wDm//8Aftn/AH7Z/wB+2f8Aftn/AH7ZzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2S4Aftn/AH7Z/wB+2f8Aftn/AIfi/wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpv//Aaf//wGp//8Bq///Aaz//wGu//8BsP//AbH//wGz//8Btf//Abb//wG4//8Buv//Abz//wG///8Bwv//AcX//wHH//8Byv//Ac3//wHP//861/n/0tLS/6+vr/+MjIz/dnZ2/1yTnP9LrLr/AeD//wHh//8B4///AeX//wHm//8B6P//Aer//wHs//8B7f//Ae///wHx//8B8v//AfT//wH1//8B9///Afn//wH6//8B/P//Af3//wL+//8I////D////xb///8b////If///yb///8r////MP///zT///83////Ov///z3///9A////Qv///0P///9F////Rf///0X///9F////RP///0L///9A////Pv///zv///84////Nf///zH///8s////J////yL///8c////F////xD///8J////A/7//wH+//8B/P//Afr//wH5//8B9///Afb//wH0//8B8///AfH//wHv//8B7v//Aez//wDq//8A6f//AM31/wB+2f8Aftn/AH7Z/wB+2f8AftmvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8AgNv/AKP//wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8BqP//Aan//wGr//8Brf//Aa7//wGw//8Bsv//AbP//wG1//8Bt///Abj//wG6//8Bvf//AcD//wHD//8Bxf//Acj//wHL//8Bzf//AdD//z/c/f/l5eX/w8PD/6Ghof9+fn7/O6m6/2Sbo/8B4P//AeL//wHk//8B5f//Aef//wHp//8B6///Aez//wHu//8B8P//AfH//wHz//8B9f//Afb//wH4//8B+v//Afv//wH9//8B/v//Bv///w7///8V////G////yH///8n////LP///zH///82////Of///z3///9B////RP///0f///9J////Sv///0v///9M////TP///0z///9L////Sf///0f///9E////Qf///z7///86////Nv///zL///8t////KP///yL///8c////Fv///w////8I////Av7//wH9//8B/P//Afr//wH4//8B9///AfX//wHz//8B8v//AfD//wHu//8B7f//AOv//wDp//8Aue7/AH7Z/wB+2f8Aftn/AH7Z/wB+2X4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZvwB+2f8Aftn/AH7Z/wB+2f8AnPf/AKP//wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bpf//Aab//wGo//8Bqv//Aav//wGt//8Br///AbD//wGy//8BtP//AbX//wG3//8Buf//Abv//wG+//8BwP//AcP//wHG//8Byf//Acv//wHO//8B0f//QN7///b29v/X19f/tLS0/5GRkf89q7z/ZJuj/wHh//8B4///AeT//wHm//8B6P//Aer//wHr//8B7f//Ae///wHx//8B8v//AfT//wH2//8B9///Afn//wH7//8B/P//Af7//wT///8L////E////xr///8g////Jv///yz///8y////N////zv///8/////RP///0f///9K////Tf///0////9R////Uv///1P///9T////Uv///1H///9Q////Tf///0v///9I////RP///0D///88////N////zP///8t////KP///yH///8b////Ff///w3///8F////Af7//wH8//8B+///Afn//wH4//8B9v//AfT//wHz//8B8f//Ae///wHt//8A7P//AOr//wCf5P8Aftn/AH7Z/wB+2f8Aftn/AH7ZPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftl+AH7Z/wB+2f8Aftn/AH7Z/wCS7v8Ao///AKP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGl//8Bp///Aaj//wGq//8BrP//Aa3//wGv//8Bsf//AbL//wG0//8Btv//Abf//wG5//8BvP//Ab7//wHB//8BxP//Acf//wHJ//8BzP//Ac///wHS//9A3////v7+/+rq6v/IyMj/paWl/1aptf9knKT/AeH//wHj//8B5f//Aef//wHp//8B6v//Aez//wHu//8B8P//AfH//wHz//8B9f//Afb//wH4//8B+v//Afv//wH9//8C/v//Cf///xH///8Y////H////yX///8r////Mf///zf///87////QP///0X///9J////Tf///1D///9T////Vv///1f///9Z////Wf///1n///9Z////WP///1b///9U////Uf///07///9K////Rv///0H///89////N////zL///8t////Jv///yD///8Z////Ev///wr///8D/v//Af3//wH8//8B+v//Afj//wH3//8B9f//AfP//wHy//8B8P//AO7//wDs//8A6///AITb/wB+2f8Aftn/AH7Z/wB+2f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2T4Aftn/AH7Z/wB+2f8Aftn/AIfi/wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaX//wGn//8Bqf//Aar//wGs//8Brv//Aa///wGx//8Bs///AbT//wG2//8BuP//Abr//wG8//8Bv///AcL//wHE//8Bx///Acr//wHN//8B0P//AdL//0Df////////+fn5/9zc3P+5ubn/g56i/0S0w/8B4v//AeT//wHl//8B5///Aen//wHr//8B7f//Ae7//wHw//8B8v//AfT//wH1//8B9///Afn//wH6//8B/P//Af7//wX///8N////Ff///xz///8j////Kv///zD///82////O////0H///9G////S////0////9T////Vv///1n///9c////Xv///1////9f////YP///1////9e////XP///1r///9X////VP///1D///9L////R////0L///88////N////zH///8r////Jf///x7///8X////D////wf///8B/v//Afz//wH7//8B+f//Aff//wH2//8B9P//AfL//wHw//8A7///AO3//wDQ9f8Aftn/AH7Z/wB+2f8Aftn/AH7ZvwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2e8Aftn/AH7Z/wB+2f8Aftn/AKD8/wCj//8Ao///AaP//wGj//8Bo///AaP//wGk//8Bpf//Aaf//wGp//8Bqv//Aaz//wGu//8BsP//AbH//wGz//8Btf//Abb//wG4//8Buv//Ab3//wG///8Bwv//AcX//wHI//8Byv//Ac3//wHQ//8B0///INr//4Dr//9/7P7/deL0/2TT4/+AnKD/Cdv3/wHi//8B5P//Aeb//wHo//8B6v//Aev//wHt//8B7///AfH//wHy//8B9P//Afb//wH4//8B+f//Afv//wH9//8C/v//Cf///xL///8Z////IP///yf///8u////NP///zr///9A////Rv///0v///9Q////VP///1j///9c////X////2L///9k////Zf///2b///9m////Zf///2T///9i////YP///13///9Z////Vf///1H///9M////R////0H///87////Nv///zD///8p////Iv///xr///8T////Cv///wP+//8B/f//Afz//wH6//8B+P//Afb//wH1//8B8///AfH//wDv//8A7f//AK7p/wB+2f8Aftn/AH7Z/wB+2f8AftluAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZnwB+2f8Aftn/AH7Z/wB+2f8AlfD/AKP//wCj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGr//8BrP//Aa7//wGw//8Bsv//AbP//wG1//8Bt///Abj//wG6//8Bvf//AcD//wHD//8Bxf//Acj//wHL//8Bzv//AdH//wHT//8B1v//Adj//wHa//8B3P//PrrN/0a2xf8B4f//AeP//wHl//8B5v//Aej//wHq//8B7P//Ae7//wHv//8B8f//AfP//wH1//8B9///Afj//wH6//8B/P//Af7//wT///8N////Ff///x3///8k////K////zL///84////Pv///0T///9K////UP///1X///9Z////Xv///2H///9l////Z////2n///9r////bP///2z///9r////av///2j///9l////Yv///17///9a////Vv///1H///9L////Rv///z////85////M////y3///8l////Hv///xf///8P////Bv///wH+//8B/P//Afr//wH5//8B9///AfX//wHz//8A8v//APD//wDu//8Ai93/AH7Z/wB+2f8Aftn/AH7Z/wB+2R4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftlOAH7Z/wB+2f8Aftn/AH7Z/wCE4P8Ao///AKP//wGj//8Bo///AaP//wGj//8BpP//Aab//wGo//8Bqf//Aav//wGt//8Brv//AbD//wGy//8Bs///AbX//wG3//8Buf//Abv//wG9//8BwP//AcP//wHG//8Byf//Acv//wHO//8B0f//AdT//wHW//8B2P//Adr//xvN6v+GlJb/Cdr3/wHh//8B4///AeX//wHn//8B6f//Aev//wHs//8B7v//AfD//wHy//8B9P//AfX//wH3//8B+f//Afv//wH9//8B/v//CP///xD///8Z////IP///yj///8v////Nv///zz///9C////Sf///07///9U////Wf///17///9j////Zv///2r///9t////b////3H///9x////cv///3H///9v////bf///2r///9n////Y////1////9a////Vf///0////9K////RP///z3///83////MP///yn///8i////Gv///xL///8J////Av7//wH9//8B+///Afn//wH4//8B9v//AfT//wDy//8A8P//AMvz/wB+2f8Aftn/AH7Z/wB+2f8AftnPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftnvAH7Z/wB+2f8Aftn/AH7Z/wCe+v8Ao///AKP//wGj//8Bo///AaP//wGk//8Bpv//Aaj//wGp//8Bq///Aa3//wGv//8BsP//AbL//wG0//8Btf//Abf//wG5//8Bu///Ab7//wHB//8Bw///Acb//wHJ//8BzP//Ac///wHR//8B1P//Adf//wHY//8B2v//ZKiz/22lrf8B4P//AeL//wHk//8B5f//Aef//wHp//8B6///Ae3//wHv//8B8P//AfL//wH0//8B9v//Afj//wH5//8B+///Af3//wL+//8L////FP///xv///8j////K////zL///84////P////0b///9M////Uv///1j///9d////Y////2f///9r////b////3L///90////dv///3f///93////dv///3X///9y////b////2z///9o////ZP///17///9Z////U////03///9H////QP///zr///8z////LP///yX///8d////Ff///wz///8E////Af3//wH8//8B+v//Afj//wH2//8B9P//APP//wDx//8AqOf/AH7Z/wB+2f8Aftn/AH7Z/wB+2W4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2Z8Aftn/AH7Z/wB+2f8Aftn/AI7p/wCj//8Ao///AaP//wGj//8Bo///AaT//wGm//8BqP//Aar//wGr//8Brf//Aa///wGw//8Bsv//AbT//wG2//8Bt///Abn//wG7//8Bvv//AcH//wHE//8Bx///Acn//wHM//8Bz///E8rx/wHV//8B1///Adn//wHb//+Tk5P/eKKo/wHg//8B4v//AeT//wHm//8B6P//Aen//wHr//8B7f//Ae///wHx//8B8///AfT//wH2//8B+P//Afr//wH8//8B/v//Bf///w3///8W////Hv///yb///8t////Nf///zv///9C////Sf///1D///9W////XP///2H///9m////a////3D///9z////d////3n///97////fP///3z///97////ev///3f///90////cf///2z///9n////Yv///13///9X////Uf///0r///9E////Pf///zb///8v////KP///yD///8Y////D////wb///8B/v//Afz//wH6//8B+P//Aff//wD1//8A8///AOr8/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZPgB+2f8Aftn/AH7Z/wB+2f8AgNv/AKD8/wCj//8Ao///AaP//wGj//8Bpf//Aab//wGo//8Bqv//Aaz//wGt//8Br///AbH//wGy//8BtP//Abb//wG3//8Buf//Abz//wG///8Bwf//AcT//wHH//8Byv//Ac3//wrM+P9wpbD/AdX//wHX//8B2f//Adv//4Oeo/+Wlpb/AeD//wHi//8B5P//Aeb//wHo//8B6v//Aez//wHt//8B7///AfH//wHz//8B9f//Aff//wH4//8B+v//Afz//wH+//8H////EP///xj///8g////KP///zD///83////Pv///0X///9M////Uv///1n///9f////Zf///2r///9v////dP///3j///97////fv///4D///+A////gP///4D///9+////fP///3n///91////cP///2v///9m////YP///1r///9U////Tf///0b///8/////OP///zH///8q////Iv///xr///8R////CP///wH+//8B/P//Afv//wH5//8B9///APX//wDz//8AuOz/AH7Z/wB+2f8Aftn/AH7Z/wB+2a8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZzwB+2f8Aftn/AH7Z/wB+2f8AkOz/AKP//wCj//8Bo///AaP//wGl//8Bpv//Aaj//wGq//8BrP//Aa3//wGv//8Bsf//AbL//wG0//8Btv//Abj//wG5//8BvP//Ab///wHC//8BxP//Acf//wHK//8Bzf//X6y+/0y1y/8B1f//Adf//wHZ//8B2///X7K+/5iYmP8wyt//AeP//wHk//8B5v//Aej//wHq//8B7P//Ae7//wHw//8B8f//AfP//wH1//8B9///Afn//wH7//8B/f//Af7//wj///8S////Gv///yL///8q////Mv///zn///9A////R////07///9V////W////2L///9n////bf///3L///93////fP///3////+B////g////4T///+F////hP///4L///9/////fP///3j///9z////bv///2n///9j////Xf///1b///9P////Sf///0H///86////M////yz///8k////HP///xP///8K////Av7//wH9//8B+///Afn//wD3//8A9f//AOz8/wCF2/8Aftn/AH7Z/wB+2f8Aftn/AH7ZTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftleAH7Z/wB+2f8Aftn/AH7Z/wCC3f8Ao///AKP//wCj//8Bo///AaX//wGn//8BqP//Aar//wGs//8Brf//Aa///wGx//8Bs///AbT//wG2//8BuP//Abr//wG8//8Bv///AcL//wHF//8Bx///Acr//wHN//+QnaD/J8Xl/wHW//8B2P//Adn//wHb//8nzOX/m5ub/2G1wP8B4///AeX//wHn//8B6P//Aer//wHs//8B7v//AfD//wHy//8B9P//AfX//wH3//8B+f//Afv//wH9//8C/v//Cv///xP///8c////JP///yz///80////Ov///0L///9J////UP///1f///9e////ZP///2r///9w////df///3r///9+////gv///4X///+H////if///4n///+I////hf///4L///9/////e////3b///9x////a////2X///9f////WP///1L///9L////Q////zz///81////Lf///yX///8d////Ff///wz///8D////Af3//wH7//8B+f//APj//wD2//8Auez/AH7Z/wB+2f8Aftn/AH7Z/wB+2d8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftnvAH7Z/wB+2f8Aftn/AH7Z/wCQ7P8Ao///AKP//wGj//8Bpf//Aaf//wGo//8Bqv//Aaz//wGu//8Br///AbH//wGz//8BtP//Abb//wG4//8Buv//Abz//wG///8Bwv//AcX//wHI//8Byv//HsTs/5ycnP8Kz/j/Adb//wHY//8B2v//Adv//wHd//+AqrD/lKKj/wrf+f8B5f//Aef//wHp//8B6v//Aez//wHu//8B8P//AfL//wH0//8B9v//Aff//wH5//8B+///Af3//wL///8L////FP///x3///8l////Lf///zX///88////Q////0v///9S////Wf///1////9m////bP///3L///93////fP///4D///+E////iP///4v///+M////jP///4v///+J////hf///4H///9+////eP///3P///9t////Z////2D///9a////U////0z///9F////Pf///zb///8v////J////x7///8W////Df///wT///8B/f//Afz//wD6//8A+P//AO78/wCF2/8Aftn/AH7Z/wB+2f8Aftn/AH7ZbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2X4Aftn/AH7Z/wB+2f8Aftn/AIDb/wCg/P8Ao///AKP//wGl//8Bp///Aaj//wGq//8BrP//Aa7//wGv//8Bsf//AbP//wG0//8Btv//Abj//wG6//8BvP//Ab///wHC//8Bxf//Acj//wHK//8oweb/np6e/wHT//8B1v//Adj//wHa//8B3P//Pcbc/1DAz/+goKD/PMrb/wHl//8B5///Aen//wHr//8B7P//Ae7//wHw//8B8v//AfT//wH2//8B+P//Afn//wH7//8B/f//A////wz///8V////Hf///yb///8u////Nf///z3///9E////TP///1P///9a////YP///2f///9t////c////3n///9+////gv///4f///+K////jf///4////+Q////jv///4v///+H////g////3////96////dP///27///9o////Yv///1v///9U////Tf///0b///8+////N////y////8n////H////xf///8O////BP///wH+//8B/P//APr//wD4//8Auuz/AH7Z/wB+2f8Aftn/AH7Z/wB+2e8AftkOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZDgB+2e8Aftn/AH7Z/wB+2f8Aftn/AJDs/wCj//8Ao///AaX//wGn//8BqP//Aar//wGs//8Brv//Aa///wGx//8Bs///AbX//wG2//8BuP//Abr//wG8//8Bv///AcL//wHF//8ByP//Acv//1G30P+Mp6z/AdP//wHW//8B2P//Adr//wHc//9xtcD/C9v5/3C2v/9mu8X/AeX//wHn//8B6f//Aev//wHs//8B7v//AfD//wHy//8B9P//Afb//wH4//8B+v//Afv//wH9//8D////DP///xb///8e////Jv///y////82////Pf///0X///9M////U////1r///9h////Z////27///90////ef///3////+D////iP///4z///+P////kv///5L///+Q////jP///4j///+E////f////3r///91////b////2n///9i////XP///1X///9N////Rv///z////83////MP///yj///8g////F////w7///8F////Af7//wD8//8A+v//APD8/wCF2/8Aftn/AH7Z/wB+2f8Aftn/AH7ZfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZfgB+2f8Aftn/AH7Z/wB+2f8Aftn/AJ76/wCj//8Apf//Aaf//wGo//8Bqv//Aaz//wGu//8Br///AbH//wGz//8Btf//Abb//wG4//8Buv//Abz//wG///8Bwv//AcX//wHI//8By///UrjR/3quuv8B0///Adb//wHY//8B2v//Adz//3yzvP8B3///Psrd/5CtsP8B5f//Aef//wHp//8B6///Aez//wHu//8B8P//AfL//wH0//8B9v//Afj//wH6//8B/P//Af3//wP///8M////Fv///x7///8m////L////zb///89////Rf///0z///9T////Wv///2H///9n////bv///3T///96////f////4P///+I////jP///4////+S////kv///5D///+N////iP///4T///+A////e////3X///9v////af///2L///9c////Vf///03///9G////P////zf///8w////KP///yD///8X////Dv///wX///8B/v//APz//wD6//8ArOf/AH7Z/wB+2f8Aftn/AH7Z/wB+2d8AftkOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z3wB+2f8Aftn/AH7Z/wB+2f8Ah+L/AKP//wCl//8Bp///Aaj//wGq//8BrP//Aa7//wGv//8Bsf//AbP//wG0//8Btv//Abj//wG6//8BvP//Ab///wHC//8Bxf//Acj//wHL//9TudL/fLC7/wHT//8B1v//Adj//wHa//8B3P//frW+/wHf//8g1u7/p6en/wHl//8B5///Aen//wHr//8B7P//Ae7//wHw//8B8v//AfT//wH2//8B+P//Afr//wH7//8B/f//A////wz///8V////Hv///yb///8u////Nv///z3///9E////TP///1P///9a////YP///2f///9t////c////3n///9+////gv///4f///+L////jv///5D///+Q////jv///4v///+I////g////3////96////dP///27///9o////Yv///1v///9U////Tf///0b///8+////N////zD///8o////H////xf///8O////Bf///wD+//8A/P//ANv1/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftlOAH7Z/wB+2f8Aftn/AH7Z/wB+2f8AlfD/AKX//wCn//8BqP//Aar//wGs//8Brv//Aa///wGx//8Bs///AbT//wG2//8BuP//Abr//wG8//8Bv///AcL//wHF//8ByP//Acr//1S60/+Ir7f/AdP//wHW//8B2P//Adr//wHb//91usX/INXv/yDW7/9qv8n/AeX//wHn//8B6f//Aer//wHs//8B7v//AfD//wHy//8B9P//Afb//wH4//8B+f//Afv//wH9//8D////C////xX///8d////Jf///y3///81////PP///0P///9L////Uv///1n///9g////Zv///2z///9y////eP///33///+B////hf///4j///+L////jf///43///+M////if///4X///+B////fv///3n///9z////bf///2f///9h////Wv///1P///9M////Rf///z3///82////L////yf///8e////Fv///w3///8E////AP3//wD8//8Ajd3/AH7Z/wB+2f8Aftn/AH7Z/wB+2c8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftm/AH7Z/wB+2f8Aftn/AH7Z/wCA2/8AoPr/AKf//wCo//8Bqv//Aaz//wGt//8Br///AbH//wGz//8BtP//Abb//wG4//8Buv//Abz//wG///8Bwv//AcX//wHH//8Byv//VbvU/6mpqf8B0///Atb//wLY//8C2v//Adv//0HL4P9Xxtb/YcPQ/wvf+f8B5f//Aef//wHo//8B6v//Aez//wHu//8B8P//AfL//wH0//8B9f//Aff//wH5//8B+///Af3//wL+//8K////FP///xz///8k////LP///zT///87////Qv///0n///9Q////V////17///9k////av///3D///92////ev///3////+C////hf///4j///+J////if///4j///+G////g////4D///97////dv///3H///9r////Zf///1////9Z////Uv///0v///9D////PP///zX///8u////Jv///x3///8V////DP///wL///8A/f//ALXp/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2R4AftnvAH7Z/wB+2f8Aftn/AH7Z/wCH4v8Apv//AKj//wGq//8BrP//Aa3//wGv//8Bsf//AbP//wG0//8Btv//Abj//wG6//8BvP//Ab///wHC//8BxP//Acj//wTL//9Ewd//q6ur/xbS+f8N2P//Dtn//w3b//8g1/T/W8bW/66urv9Oy9v/AeP//wHk//8B5v//Aej//wHq//8B7P//Ae7//wHw//8B8f//AfP//wH1//8B9///Afn//wH7//8B/f//Af7//wn///8S////Gv///yP///8r////Mv///zn///9A////SP///0////9V////XP///2L///9o////bv///3P///94////fP///3////+C////hP///4X///+F////hP///4L///+A////ff///3j///90////b////2n///9j////Xf///1f///9Q////Sf///0L///86////NP///yz///8k////HP///xT///8K////Af7//wDd9f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2Y8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2W4Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCS7P8AqP//AKr//wGs//8Brf//Aa///wGx//8Bsv//AbT//wG2//8BuP//Abn//wG8//8Bv///AsL//wXG//8Lyv//D83//yfM9P+tra3/Ps3q/xrZ//8b3P//Gt3//yzZ9f8+1Ov/T8/i/3TEz/8L5P//BuX//wHm//8B6P//Aer//wHs//8B7f//Ae///wHx//8B8///AfX//wH3//8B+f//Afr//wH8//8B/v//B////xD///8Z////If///yn///8w////N////z7///9F////TP///1P///9Z////X////2X///9r////cP///3T///95////fP///3////+A////gf///4H///+A////f////33///95////df///3D///9s////Zv///2D///9a////VP///07///9H////QP///zj///8y////Kv///yL///8a////Ev///wf///8A9vz/AIbb/wB+2f8Aftn/AH7Z/wB+2f8AftnfAH7ZDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2b8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCe9f8Aqv//AKv//wGt//8Br///AbH//wGy//8BtP//Abb//wG3//8Buf//Abz//wTA//8LxP//Ecj//xbM//8b0P//INP//5W3vv9zwtL/J9z//yje//8n3///JuD//yPh//8g4///orq9/1HT4/8R5v//C+f//wTo//8B6f//Aev//wHt//8B7///AfH//wHz//8B9f//Afb//wH4//8B+v//Afz//wH+//8F////Dv///xf///8f////Jv///y7///81////PP///0P///9K////UP///1b///9c////Yv///2f///9s////cf///3T///93////ev///3z///99////ff///3z///96////eP///3X///9x////bf///2j///9j////Xf///1f///9R////S////0T///89////Nv///y////8o////IP///xj///8P////Bf///wCe4v8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZHgB+2e8Aftn/AH7Z/wB+2f8Aftn/AIDb/wCk+v8Aq///AK3//wGv//8BsP//AbL//wG0//8Btf//Abf//wG5//8Hvf//D8L//xbH//8cy///Is///yfS//8r1f//YMri/5q5wP803f//NN///zPh//8y4v//MOP//y3k//+Uwsj/kcLJ/x3n//8X6P//D+n//wfq//8B6///Ae3//wHv//8B8P//AfL//wH0//8B9v//Afj//wH6//8B+///Af3//wP///8L////FP///xz///8k////K////zP///85////QP///0f///9N////U////1n///9e////Y////2j///9s////cP///3P///91////d////3j///94////d////3b///9z////cP///23///9p////ZP///1////9a////VP///07///9I////Qf///zr///80////Lf///yX///8d////Ff///wz///8Ctun/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftmPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZTgB+2f8Aftn/AH7Z/wB+2f8Aftn/AIbg/wCo/P8Arf//AK7//wGw//8Bsv//AbT//wG1//8Ct///CLv//xHA//8Zxf//IMn//yfN/v8u0f//M9T//zjY//9D2Pr/rba4/1bX8f9B4f//QOL//z/k//885f//OeX//7C7vf+5ubn/Kej//yLp//8a6f//Eur//wjr//8B7P//Ae7//wHw//8B8v//AfT//wH1//8B9///Afn//wH7//8B/f//Af7//wj///8R////Gf///yH///8o////MP///zb///88////Q////0n///9P////Vf///1r///9f////Y////2f///9r////bv///3D///9x////cv///3L///9y////cP///27///9r////aP///2T///9g////W////1b///9Q////Sv///0T///8+////N////zH///8q////Iv///xr///8S////Bs7w/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZjwB+2f8Aftn/AH7Z/wB+2f8Aftn/AIbg/wCs//8Arv//ALD//wGy//8Bs///AbX//wi5//8Rvv//GsL//yPH//8rzP7/MtD+/znT//8/1///RNr+/0jd/v+HyNX/jsbR/07j/v9O5P7/TOX+/0nm/v9U4fb/u7u7/5rGzP806f//Len//yXq//8c6///Euz//wjt//8B7v//AfD//wHx//8B8///AfX//wH3//8B+f//Afr//wH8//8B/v//Bf///w3///8W////Hf///yX///8s////M////zn///8/////Rf///0v///9Q////Vv///1r///9e////Yv///2X///9o////av///2z///9t////bf///2z///9r////af///2b///9j////X////1v///9W////Uf///0z///9G////QP///zr///80////Lf///yb///8f////Fv///wrW8/8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2e8AftkeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZzwB+2f8Aftn/AH7Z/wB+2f8Aftn/AI/n/wCu//8AsP//ALH//wGz//8Ht///Ebz//xvA//8kxf//Lcn+/zXO/v880v//RNb+/0rZ/v9R3P7/Vd/+/2Xc9f+4uLj/Zt/1/1vm/v9Z5/7/Vuj+/4HV4f+9vb3/edbi/z7q//836v//L+v//ybr//8c7P//Eu3//wfu//8B7///AfH//wHz//8B9P//Afb//wH4//8B+v//Afv//wH9//8C/v//Cv///xL///8a////If///yj///8v////Nf///zv///9B////Rv///0z///9R////Vf///1n///9d////YP///2P///9l////Zv///2f///9n////Zv///2X///9j////Yf///17///9a////Vv///1L///9N////R////0L///88////Nv///zD///8p////Iv///xr///8Q5vf/AYbb/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkOAH7ZzwB+2f8Aftn/AH7Z/wB+2f8Aftn/AJDn/wCv//8Asf//BLT//w+5//8Zvv//I8P//y3H/v82zP7/P9D+/0fU/v9Q2P7/Vtv+/13e/v9i4f7/ZuP+/6HIz/+gyND/aOj+/2bp/v9j6f7/rcfL/7nCw/9Z6Pr/Suv+/0Lr//846///L+z//yXs//8a7f//D+7//wTv//8B8P//AfL//wH0//8B9f//Aff//wH5//8B+///Afz//wH+//8G////Dv///xb///8d////JP///yv///8x////N////zz///9C////R////0v///9Q////VP///1f///9a////Xf///1////9g////Yf///2H///9g////X////13///9b////WP///1X///9R////TP///0j///9C////Pf///zj///8y////LP///yX///8d////E+b3/wGG2/8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AJDn/wCx//8Cs///FLv//yDA//8rxf7/Ncn+/z/O/v9I0v7/Utb+/1ra/v9j3v7/aeH+/27j/v9z5v7/jNrp/7y8vP+P2eX/dOr+/3/j8v/BwcH/jdnj/1zr/v9V6/7/TOz+/0Ls//847P//Le3//yPt//8X7v//C+///wHw//8B8f//AfP//wH1//8B9v//Afj//wH6//8B/P//Af3//wL+//8J////Ev///xn///8f////Jv///yz///8y////N////zz///9B////Rv///0r///9O////Uv///1T///9X////WP///1r///9a////Wv///1r///9Z////V////1X///9S////T////0v///9H////Qv///z3///84////M////y3///8n////IP///xXm9/8Bhtv/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftmfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AJHn/wCy//8Ftv//JcH+/zLH/v89y/7/SND+/1LV/v9c2f7/Zt3+/27g/v914/7/e+X+/3/n/v+C6f7/t8TG/7rBw/+D6fr/pNXd/7rJy/9w7f7/aOz+/1/s/v9V7P7/S+z+/0Dt//817f//Ku3//x/u//8S7v//Be///wHx//8B8v//AfT//wH2//8B9///Afn//wH7//8B/P//Af7//wX///8M////FP///xv///8h////J////y3///8z////N////zz///9A////Rf///0j///9L////Tv///1D///9S////U////1T///9U////U////1L///9R////Tv///0z///9J////Rf///0H///89////OP///zP///8u////KP///yH///8W5vf/AYbb/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZnwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AIfg/wCw/P8Dtv7/L8b+/0XN/v9R0v7/W9f+/2bb/v9w3/7/eeL+/4Dl/v+H5/7/jOr+/4/r/v+v0df/wcHB/6zS2P+30NT/p9fe/3vu/v9y7f7/ae3+/1/t/v9T7f7/Se3+/z3t//8x7f//Je7//xju//8L7///AfD//wHy//8B8///AfX//wH3//8B+P//Afr//wH7//8B/f//Af7//wf///8P////Fv///xz///8i////KP///y3///8y////N////zr///8+////Qv///0X///9I////Sv///0v///9N////Tf///03///9N////TP///0r///9I////Rv///0L///8/////O////zf///8z////Lv///yj///8i////Es7w/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2Z8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AIjg/wCr9/8EuP7/MMf+/1jU/v9k2f7/b93+/3nh/v+D5P7/jOf+/5Pq/v+Z7P7/nO7+/7DY4P/Dw8P/w8PD/8jIyP+b5fD/he/+/3zu/v9y7v7/Z+7+/1zu/v9P7f7/RO3//zft//8r7v//Hu7//xHv//8E7///AfH//wHy//8B9P//Afb//wH3//8B+f//Afr//wH8//8B/f//Av7//wn///8Q////F////xz///8i////J////yz///8x////Nf///zj///87////Pv///0H///9D////Rf///0b///9G////Rv///0b///9F////Q////0H///8/////PP///zn///82////Mv///y3///8n////Iv///w++7P8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftmfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AIHb/wCk8/8AuP//KcX+/2za/v933v7/guP+/43m/v+X6f7/n+z+/6bu/v+q8P7/uNvi/8XFxf/FxcX/ycnJ/5nx//+P8P//he/+/3rv/v9u7v7/Y+7+/1bu/v9K7f7/Pe3//zDt//8j7v//Fu7//wjv//8B8P//AfH//wHz//8B9f//Afb//wH4//8B+f//Afv//wH8//8B/v//A////wr///8R////F////xz///8h////Jv///yv///8v////M////zX///84////Ov///zz///8+////P////z////8/////P////z7///88////O////zj///82////M////y////8r////Jv///x/2/P8JpuT/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZnwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCa7P8Auf//FcH+/2fZ/v+K5P7/l+j+/6Hr/v+r7v7/s/D+/7jy///A3eP/x8fH/8fHx//Gz9D/rOjy/5nx//+N8P//ge/+/3Xv/v9p7v7/XO7+/0/t/v9C7f//NO3//yft//8a7v//DO7//wHv//8B8f//AfL//wH0//8B9f//Aff//wH4//8B+v//Afv//wH9//8B/v//BP///wr///8R////Fv///xv///8g////JP///yj///8s////L////zL///80////Nv///zf///84////OP///zj///84////N////zb///80////Mv///zD///8s////KP///yT///8a5vf/BZbg/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2Z8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7ZzwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCJ4P8As/r/CL/+/1LV/v+f6v7/rO3+/7fw/v/A8///xvT//8jf5P/Jycn/ycnJ/8HZ3f/G19r/seTt/5Xx//+I8P//e+/+/27u/v9h7v7/U+3+/0bt//847f//K+3//x3t//8P7v//Au7//wHw//8B8f//AfP//wH0//8B9v//Aff//wH5//8B+v//Afv//wH9//8B/v//BP///wn///8P////Ff///xn///8d////If///yX///8o////K////y3///8v////MP///zH///8y////Mv///zH///8w////L////y3///8r////KP///yX///8h////Ecbu/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkOAH7ZvwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCB2/8Aoe7/AL///x/J/v+H5P7/wfL//8z1///U9///zdbX/8vLy//Ly8v/x9jb/7fy/P/C3eH/vNzh/5nq9v9/7/7/cu7+/2Xu/v9W7f7/Se3+/zvt//8t7P//IO3//xHt//8E7f//Ae///wHw//8B8v//AfP//wH1//8B9v//Afj//wH5//8B+v//Afz//wH9//8B/v//A////wj///8N////Ev///xf///8a////Hv///yH///8j////Jv///yf///8p////Kv///yr///8q////Kv///yn///8o////Jv///yP///8g////Gu76/wee4v8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftnvAH7ZXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZjwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AiuD/ALT3/wDD//9L1///u/H//+H5///P0tP/zMzM/83Nzf/J4eb/u/X//63z//+f8v//kfD//4Lv/v917v7/Z+3+/1nt/v9L7P7/Pez//y/s//8i7P//E+z//wXt//8B7v//Ae///wHx//8B8v//AfT//wH1//8B9v//Afj//wH5//8B+v//Afv//wH9//8B/v//Av7//wb///8K////D////xP///8X////Gf///xz///8e////IP///yH///8i////I////yP///8i////If///yD///8e////G////w2+7P8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z3wB+2S4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0Z/R0dH/0dHR7wAAAAAAAAAAAAAAAAAAAAAAftkuAH7ZjwB+2d8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2a8AftleAH7ZDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHR79HR0f/R0dGPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2R4AftleAH7ZnwB+2d8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftm/AH7ZfgB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0S7R0dH/0dHR/9HR0S4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2Q4Aftk+AH7ZfgB+2Z8Aftm/AH7Z3wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8Aftm/AH7ZfgB+2V4AftkuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHRXtHR0f/R0dHfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkOAH7ZPgB+2T4Aftk+AH7ZPgB+2T4AftkuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR0dF+0dHR/9HR0Z8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0b/R0dH/0dHRXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHRv9HR0f/R0dE+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR0dG/0dHR/9HR0Q4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0Y/R0dH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHRPtHR0f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHRv9HR0S4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR0dEu0dHRbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR0dGv0dHRXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0T7R0dH/0dHRj9HR0Q4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0Y/R0dH/0dHR39HR0V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0U7R0dHP0dHR/9HR0d/R0dFeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////4P///+AP/////////////AAH//4AAP////////////AAAf/4AAA////////////AAAB/4AAAD///////////AAAAH8AAAAf//////////gAAAA8AAAAB//////////wAAAAGAAAAAP/////////4AAAAAAAAAAB/////////8AAAAAAAAAAAP////////+AAAAAAAAAAAD/////////AAAAAAAAAAAAP////////wAAAAAAAAAAAAP///////4AAAAAAAAAAAAAf//////+AAAAAAAAAAAAAA///////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAAP/////4AAAAAAAAAAAAAAA/////+AAAAAAAAAAAAAAAD/////gAAAAAAAAAAAAAAAP////4AAAAAAAAAAAAAAAB////+AAAAAAAAAAAAAAAAP////gAAAAAAAAAAAAAAAA////4AAAAAAAAAAAAAAAAH///+AAAAAAAAAAAAAAAAA////gAAAAAAAAAAAAAAAAH///4AAAAAAAAAAAAAAAAA///+AAAAAAAAAAAAAAAAAH///gAAAAAAAAAAAAAAAAA///4AAAAAAAAAAAAAAAAAH//+AAAAAAAAAAAAAAAAAA///wAAAAAAAAAAAAAAAAAH//8AAAAAAAAAAAAAAAAAB///AAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//+AAAAAAAAAAAAAAAAAAf//wAAAAAAAAAAAAAAAAAD//4AAAAAAAAAAAAAAAAAA//mAAAAAAAAAAAAAAAAAAH/xAAAAAAAAAAAAAAAAAAB/8AAAAAAAAAAAAAAAAAAAP/gAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAA/5AAAAAAAAAAAAAAAAAAAH+QAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAAAAAAAAAAD/gAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAAAAAAAAAAD/wAAAAAAAAAAAAAAAAAAA/8AAAAAAAAAAAAAAAAAAAP/AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAAAB/+AAAAAAAAAAAAAAAAAAAf/gAAAAAAAAAAAAAAAAAAH/4AAAAAAAAAAAAAAAAAAD//AAAAAAAAAAAAAAAAAAA//wAAAAAAAAAAAAAAAAAAP/8AAAAAAAAAAAAAAAAAAH//gAAAAAAAAAAAAAAAAAB//4AAAAAAAAAAAAAAAAAA///AAAAAAAAAAAAAAAAAAP//wAAAAAAAAAAAAAAAAAD//8AAAAAAAAAAAAAAAAAB///gAAAAAAAAAAAAAAAAAf//8AAAAAAAAAAAAAAAAAP///AAAAAAAAAAAAAAAAAH///4AAAAAAAAAAAAAAAAB///+AAAAAAAAAAAAAAAAA////wAAAAAAAAAAAAAAAAP///+AAAAAAAAAAAAAAAAH////gAAAAAAAAAAAAAAAD////8AAAAAAAAAAAAAAAB/////gAAAAAAAAAAAAAAAf////8AAAAAAAAAAAAAAAP/////AAAAAAAAAAAAAAAH/////4AAAAAAAAAAAAAAD//////AAAAAAAAAAAAAAB//////4AAAAAAAAAAAAAA///////AAAAAAAAAAAAAAf//////4AAAAAAAAAAAAAP///////AAAAAAAAAAAAAH///////4AAAAAAAAAAAAD////////AAAAAAAAAAAAB////////8AAAAAAAAAAAA/////////gAAAAAAAAAAAf////////8AAAAAAAAAAAf/////////wAAAAAAAAAAP/////////+AAAAAAAAAAP//////////4AAAAAAAAAH///////////gAAAAAAAAH///////////+AAAAAAAAH////////////gAAAAAAAH////////////4AAAAAAAP////////////+PAAAAAAP/////////////j+AAAAA//////////////w/+AAAD//////////////8f//4D////////////////H////////////////////x////////////////////8f////////////////////H////////////////////z////////////////////8/////////////////////n////////////////////5/////////////////////P////////////////////w////////////////////+H////////////////////wf////////////8L \ No newline at end of file diff --git a/AppleBatch_June.FormNetwork.resx b/AppleBatch_June.FormNetwork.resx new file mode 100644 index 0000000..71d8abd --- /dev/null +++ b/AppleBatch_June.FormNetwork.resx @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABNTeXN0ZW0uRHJhd2luZy5JY29uAgAAAAhJY29uRGF0YQhJY29uU2l6ZQcEAhNTeXN0ZW0uRHJhd2luZy5TaXplAgAAAAIAAAAJAwAAAAX8////E1N5c3RlbS5EcmF3aW5nLlNpemUCAAAABXdpZHRoBmhlaWdodAAACAgCAAAAAAAAAAAAAAAPAwAAAL4iAAACAAABAAEALDAAAAEAIACoIgAAFgAAACgAAAAsAAAAYAAAAAEAIAAAAAAAACEAAEsgAABLIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAsAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAALAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAEgAAAChAAAAxwAAAMMAAACPAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAADwAAACXAAAAwgAAAMIAAACYAAAAPAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEAAACPAAAAwwAAAMcAAAChAAAASAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAB5AAAA9AAAAPAAAADJAAAA0AAAAPgAAADjAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABlAAAA6gwJBP8rHw3/Kx8N/wwJBP8AAADrAAAAZgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABRAAAA4wAAAPgAAADQAAAAyQAAAO8AAAD0AAAAegAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAUQAAAPcAAAC/AAAANwAAAAwAAAAQAAAAUQAAAN4AAADfAAAAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAOonHAz/lWws/7+KOf+/ijn/lWws/yccDP8AAADrAAAAPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKQAAAN8AAADfAAAAUQAAABAAAAAMAAAANwAAAL4AAAD3AAAAUgAAAAAAAAAAAAAAAAAAAAYAAACyAAAA6AAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAWQAAAPsAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACXDAkE/5VsLP/OlT3/y5M8/8uTPP/OlT3/lmws/wwJBP8AAACYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB9AAAA+wAAAFoAAAAAAAAAAAAAAAAAAAAAAAAALQAAAOcAAACzAAAABgAAAAAAAAAAAAAAFwAAANwAAAC0AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAA4AAAAK4AAAADAAAAAAAAAAAAAAAAAAAACwAAAMMrHw3/v4o5/8uTPP/Kkjz/ypI8/8uTPP/Aizn/Kx8N/wAAAMQAAAALAAAAAAAAAAAAAAAAAAAAAwAAAK0AAADhAAAAGwAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAsgAAANwAAAAXAAAAAAAAAAAAAAAWAAAA2gAAALUAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABsAAADhAAAArAAAAAIAAAAAAAAAAAAAAAAAAAAKAAAAwSoeDP+/ijn/y5M8/8qSPP/Kkjz/y5M8/7+KOf8rHw3/AAAAwgAAAAsAAAAAAAAAAAAAAAAAAAACAAAAqwAAAOEAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAC0AAAA2wAAABcAAAAAAAAAAAAAAAUAAACtAAAA6gAAADIAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAPsAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSCwgD/5JqK//OlT3/y5M8/8uTPP/OlT3/k2os/wsIA/8AAACTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3AAAA/AAAAF4AAAAAAAAAAAAAAAAAAAAAAAAAMQAAAOkAAACwAAAABgAAAAAAAAAAAAAAAAAAAEoAAADzAAAAxQAAAD0AAAAPAAAAEwAAAFcAAADiAAAA2QAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUAAADlJBoL/5BoK/+9iDj/vYg4/5BoK/8kGgv/AAAA5gAAADYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAADYAAAA4wAAAFgAAAATAAAADwAAAD0AAADEAAAA9QAAAE0AAAAAAAAAAAAAAAAAAAAAAAAAAwAAAG4AAADuAAAA8gAAAMwAAADTAAAA+QAAANsAAABHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFkAAADjCgcD/yYcC/8mHAv/CgcD/wAAAOMAAABaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEcAAADbAAAA+gAAANMAAADMAAAA8gAAAPEAAAByAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAADwAAACYAAAA9QAAAOoAAACCAAAAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEAAACMAAAA7AAAAO0AAACMAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcAAACCAAAA6QAAAPcAAACdAAAAQAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAADUAAAAuQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAADGAAAAyAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAC4AAAA1wAAABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAANQAAAC5AAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAMYAAADHAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAALgAAADWAAAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAA1AAAALgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAxQAAAMcAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAtwAAANcAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAADTAAAAvwAAABoAAAAVAAAAFQAAABUAAAAVAAAAFQAAABUAAAAVAAAAFQAAABUAAAAVAAAAFQAAAB8AAADKAAAAzAAAAB8AAAAVAAAAFQAAABUAAAAVAAAAFQAAABUAAAAVAAAAFQAAABUAAAAVAAAAFQAAABoAAAC+AAAA1gAAABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAANIAAAD6AAAA2gAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2wAAAPcAAAD3AAAA2wAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2gAAAPoAAADVAAAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAdgAAALMAAACzAAAAswAAALMAAACzAAAAswAAALMAAACzAAAAswAAALMAAACzAAAAswAAALMAAAC2AAAA7gAAAPAAAAC6AAAAtgAAALcAAAC3AAAAtwAAALcAAAC3AAAAtwAAALcAAAC3AAAAtwAAALcAAAC2AAAAtwAAAHsAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAwAAAA4AAADGAAAAygAAABEAAAAEAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAMUAAADJAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAxgAAAMkAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAADFAAAAyAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAfAAAAQgAAANUAAADXAAAAQAAAAB0AAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAABiAAAAsQAAAN8AAADzAAAA/QAAAP0AAADyAAAA3gAAAK8AAABgAAAAFgAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAHEAAADQAAAA+gAAAP8CAgL/AwMD/wQEBP8EBAT/AAAA/wAAAPoAAADSAAAAdAAAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcAAABQAAAAigAAALAAAADCAAAAwgAAALEAAACLAAAAUgAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAoAAAAKAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgH8A/gHAAAIAPgB8AEAAAgAcADgAQAAAAAgAEAAAAAAACAAQAAAAAAAIABAAAAAAAAgAEAAAAAAACAAQAAAAAAAIABAAAAAAAAgAEAAAAAAAGAAYAAAAAgAcADgAQAADAD4AfADAAAOAfwD+AcAAA8AAAAADwAADwAAAAAPAAAPAAAAAA8AAA8AAAAADwAADwAAAAAPAAAPAAAAAA8AAA///gf//wAAD//wAP//AAAP/8AAP/8AAA//AAAP/wAAD/4AAAf/AAAP/gAAB/8AAA/8AAAD/wAAD/gAAAH/AAAP+AAAAf8AAA/4AAAB/wAAD/gAAAH/AAAP8AAAAP8AAA/wAAAA/wAAD/AAAAD/AAAP8AAAAP8AAA/wAAAA/wAAD/AAAAD/AAAP8AAAAP8AAA/4AAAB/wAAD/gAAAH/AAAP+AAAAf8AAA/8AAAD/wAAD/wAAAP/AAAP/gAAB/8AAA//AAAP/wAAD/+AAB//AAAP/+AAf/8AAA//+AH//wAAAL \ No newline at end of file diff --git a/AppleBatch_June.Forms/FormAuthBalance.cs b/AppleBatch_June.Forms/FormAuthBalance.cs new file mode 100644 index 0000000..ec2a279 --- /dev/null +++ b/AppleBatch_June.Forms/FormAuthBalance.cs @@ -0,0 +1,584 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Linq; +using System.Windows.Forms; +using AppleBatch_June.ExecuteTasks; +using AppleBatch_June.Model; +using AppleBatch_June.Views; + +namespace AppleBatch_June.Forms +{ + public class FormAuthBalance : BaseForm + { + private IContainer components; + + private GroupBox groupBox71; + + private CheckBox ckAuthBalenceVpn; + + private Label labAuthBalenceCount; + + private Label label108; + + private Label label109; + + private GroupBox groupBox69; + + private DoubleBufferListView lvAuthBalence; + + private ColumnHeader columnHeader127; + + private ColumnHeader columnHeader129; + + private ColumnHeader columnHeader130; + + private ColumnHeader columnHeader131; + + private ColumnHeader columnHeader132; + + private ColumnHeader columnHeader133; + + private ColumnHeader columnHeader136; + + private ColumnHeader columnHeader134; + + private ColumnHeader columnHeader135; + + private GroupBox groupBox70; + + private Label label106; + + private Label label107; + + private TextBox textBox15; + + private GroupBox groupBox72; + + private Label labAuthBalanceLvCount; + + private Label label111; + + private Button btnAuthBalanceClear; + + private Button btnAuthBalanceLog; + + private Button btnAuthBalenceInput; + + private Button btnAuthBalanceExprt; + + private Button btnAuthBalanceStart; + + public FormAuthBalance() + : base("密保查询余额", QueryAuthBalanceTask.Instance) + { + InitializeComponent(); + } + + private void btnAuthBalenceInput_Click(object sender, EventArgs e) + { + FromInputAcount fromInputAcount = new FromInputAcount(); + fromInputAcount.tipMssage = textBox15.Text; + fromInputAcount.isOpenSysVpn = ckAuthBalenceVpn.Checked; + if (fromInputAcount.ShowDialog() == DialogResult.OK) + { + List list = AppleUtlis.accountInput(fromInputAcount.StrInput, new string[5] { "appleId", "appleQt1", "appleQt2", "appleQt3", "applePwd" }); + lvAuthBalence.ListViewItemSorter = new ListViewItemComparer(0, 1); + lvAuthBalence.Sort(); + int num = 0; + if (lvAuthBalence.Items.Count > 0 && int.TryParse(lvAuthBalence.Items[lvAuthBalence.Items.Count - 1].SubItems[0].Text, out var result)) + { + num = result; + } + List list2 = new List(); + foreach (AppleAcount item in list) + { + if (!string.IsNullOrEmpty(item.appleQt1) && !string.IsNullOrEmpty(item.appleQt2) && !string.IsNullOrEmpty(item.appleQt3)) + { + num++; + ListViewItem listViewItem = new ListViewItem(num.ToString()); + listViewItem.SubItems.Add(item.appleId); + listViewItem.SubItems.Add(item.applePwd); + listViewItem.SubItems.Add(string.IsNullOrEmpty(item.appleQt1) ? "-" : item.appleQt1); + listViewItem.SubItems.Add(string.IsNullOrEmpty(item.appleQt2) ? "-" : item.appleQt2); + listViewItem.SubItems.Add(string.IsNullOrEmpty(item.appleQt3) ? "-" : item.appleQt3); + listViewItem.SubItems.Add("-"); + listViewItem.SubItems.Add("-"); + listViewItem.SubItems.Add("-"); + listViewItem.UseItemStyleForSubItems = false; + listViewItem.Tag = item.lvItemGuid; + list2.Add(listViewItem); + } + } + lvAuthBalence.Items.AddRange(list2.ToArray()); + } + labAuthBalanceLvCount.Text = string.Concat(lvAuthBalence.Items.Count); + } + + private void btnAuthBalanceLog_Click(object sender, EventArgs e) + { + FromDBDataQuery fromDBDataQuery = new FromDBDataQuery(); + fromDBDataQuery.sqlTitle = new Dictionary + { + { "value1", "账号|120" }, + { "value2", "密码|100" }, + { "value3", "问题1|60" }, + { "value4", "问题2|60" }, + { "value5", "问题3|60" }, + { "value6", "国家|80" }, + { "value7", "余额|100" }, + { "value8", "信息|150" } + }; + fromDBDataQuery.type = "authBalance"; + fromDBDataQuery.typeName = "Apple密保查余额记录"; + fromDBDataQuery.Show(); + } + + private void btnAuthBalanceExprt_Click(object sender, EventArgs e) + { + ExperList(lvAuthBalence); + } + + private void btnAuthBalanceClear_Click(object sender, EventArgs e) + { + if (MessageBox.Show("确认删除列表数据吗", "提示", MessageBoxButtons.OKCancel) == DialogResult.OK) + { + lvAuthBalence.Items.Clear(); + } + labAuthBalanceLvCount.Text = string.Concat(lvAuthBalence.Items.Count); + } + + private void FormAuthBalance_Load(object sender, EventArgs e) + { + labAuthBalenceCount.Text = AppSysConfig.getTypeById(22).consNum.ToString(); + ckAuthBalenceVpn.Checked = ((ConfigUtlis.getConfigValue("ckAuthBalenceVpn") == "True") ? true : false); + base.startBtn = btnAuthBalanceStart; + base.labCout = labAuthBalanceLvCount; + base.listData = lvAuthBalence; + InitLv(lvAuthBalence); + BindMenuStrip(addTwoFactor: false, null, shouItems: true); + } + + public override void ReExecute_Click(object sender, EventArgs e) + { + if (QueryAuthBalanceTask.Instance.TaskIsRun) + { + MessageBox.Show("请先停止"); + return; + } + List list = new List(); + foreach (ListViewItem selectedItem in lvAuthBalence.SelectedItems) + { + list.Add(new AppleAcount + { + appleId = selectedItem.SubItems[1].Text, + applePwd = selectedItem.SubItems[2].Text, + appleQt1 = selectedItem.SubItems[3].Text, + appleQt2 = selectedItem.SubItems[4].Text, + appleQt3 = selectedItem.SubItems[5].Text, + guidTag = (selectedItem.Tag as string) + }); + } + TaskRunAuthBalanceQuery(list); + } + + private void btnAuthBalanceStart_Click(object sender, EventArgs e) + { + if (!QueryAuthBalanceTask.Instance.isRun && !QueryAuthBalanceTask.Instance.TaskIsRun) + { + List apples = (from ListViewItem c in lvAuthBalence.Items + where c.SubItems[7].Text == "-" + select new AppleAcount + { + appleId = c.SubItems[1].Text, + applePwd = c.SubItems[2].Text, + appleQt1 = c.SubItems[3].Text, + appleQt2 = c.SubItems[4].Text, + appleQt3 = c.SubItems[5].Text, + guidTag = (c.Tag as string) + }).ToList(); + TaskRunAuthBalanceQuery(apples); + return; + } + QueryAuthBalanceTask.Instance.Stop(); + if (!base.IsDisposed) + { + Invoke((Action)delegate + { + btnAuthBalanceStart.Text = "正在停止"; + btnAuthBalanceStart.ForeColor = Color.Red; + }); + } + } + + public void TaskRunAuthBalanceQuery(List apples) + { + int id = 22; + int count = apples.Count; + if (AppSysConfig.integral < count * AppSysConfig.getTypeById(22).consNum) + { + MessageBox.Show("账号点数不足 , 执行账号数量:" + count + " ,至少需要 " + count * AppSysConfig.getTypeById(id).consNum + " 点数。"); + return; + } + ConfigUtlis.saveConfigKey("ckAuthBalenceVpn", ckAuthBalenceVpn.Checked.ToString()); + QueryAuthBalanceTask.Instance.AppleQueryAuthBalanceTask(2, ckAuthBalenceVpn.Checked, apples, delegate + { + if (!base.IsDisposed) + { + Invoke((Action)delegate + { + btnAuthBalanceStart.Enabled = true; + btnAuthBalanceStart.Text = "停止"; + btnAuthBalanceStart.ForeColor = Color.Red; + }); + } + }, delegate + { + Dictionary postData = new Dictionary + { + { + "token", + AppSysConfig.userToken + }, + { "type", 2 } + }; + new ApiNetReq().doPost(postData, "ApiProxyIp"); + if (!base.IsDisposed) + { + Invoke((Action)delegate + { + btnAuthBalanceStart.Text = "开始执行"; + btnAuthBalanceStart.ForeColor = Color.Green; + }); + } + }, delegate(string guidTag) + { + if (!base.IsDisposed) + { + Invoke((Action)delegate + { + ListViewItem listViewItem = (from ListViewItem c in lvAuthBalence.Items + where c.Tag.ToString() == guidTag + select c).FirstOrDefault(); + if (listViewItem != null) + { + SqliteHelper.ExecuteInsert("itunes_db", new Dictionary + { + { "type", "authBalance" }, + { + "addTime", + Tools.GenerateTimeStamp().ToString() + }, + { + "value1", + listViewItem.SubItems[1].Text + }, + { + "value2", + listViewItem.SubItems[2].Text + }, + { + "value3", + listViewItem.SubItems[3].Text + }, + { + "value4", + listViewItem.SubItems[4].Text + }, + { + "value5", + listViewItem.SubItems[5].Text + }, + { + "value6", + listViewItem.SubItems[6].Text + }, + { + "value7", + listViewItem.SubItems[7].Text + }, + { + "value8", + listViewItem.SubItems[8].Text + } + }); + } + }); + } + }, delegate(string guidTag, DisplyType ditype, string distReust) + { + if (!base.IsDisposed) + { + Invoke((Action)delegate + { + IEnumerable enumerable = from ListViewItem c in lvAuthBalence.Items + where c.Tag.ToString() == guidTag + select c; + new Font(Font, FontStyle.Bold); + foreach (ListViewItem item in enumerable) + { + switch (ditype) + { + case DisplyType.area: + item.SubItems[6].Text = distReust; + break; + case DisplyType.xinxi: + item.SubItems[8].Text = distReust; + break; + case DisplyType.balance: + item.SubItems[7].Text = distReust; + break; + case DisplyType.chongzhi: + item.SubItems[7].Text = distReust; + item.SubItems[6].Text = distReust; + break; + } + } + }); + } + }); + } + + protected override void Dispose(bool disposing) + { + if (disposing && components != null) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.groupBox71 = new System.Windows.Forms.GroupBox(); + this.ckAuthBalenceVpn = new System.Windows.Forms.CheckBox(); + this.labAuthBalenceCount = new System.Windows.Forms.Label(); + this.label108 = new System.Windows.Forms.Label(); + this.label109 = new System.Windows.Forms.Label(); + this.groupBox69 = new System.Windows.Forms.GroupBox(); + this.lvAuthBalence = new AppleBatch_June.Views.DoubleBufferListView(); + this.columnHeader127 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader129 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader130 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader131 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader132 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader133 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader136 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader134 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader135 = new System.Windows.Forms.ColumnHeader(); + this.groupBox70 = new System.Windows.Forms.GroupBox(); + this.label106 = new System.Windows.Forms.Label(); + this.label107 = new System.Windows.Forms.Label(); + this.textBox15 = new System.Windows.Forms.TextBox(); + this.groupBox72 = new System.Windows.Forms.GroupBox(); + this.labAuthBalanceLvCount = new System.Windows.Forms.Label(); + this.label111 = new System.Windows.Forms.Label(); + this.btnAuthBalanceClear = new System.Windows.Forms.Button(); + this.btnAuthBalanceLog = new System.Windows.Forms.Button(); + this.btnAuthBalenceInput = new System.Windows.Forms.Button(); + this.btnAuthBalanceExprt = new System.Windows.Forms.Button(); + this.btnAuthBalanceStart = new System.Windows.Forms.Button(); + this.groupBox71.SuspendLayout(); + this.groupBox69.SuspendLayout(); + this.groupBox70.SuspendLayout(); + this.groupBox72.SuspendLayout(); + base.SuspendLayout(); + this.groupBox71.Controls.Add(this.ckAuthBalenceVpn); + this.groupBox71.Controls.Add(this.labAuthBalenceCount); + this.groupBox71.Controls.Add(this.label108); + this.groupBox71.Controls.Add(this.label109); + this.groupBox71.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.groupBox71.Location = new System.Drawing.Point(427, 18); + this.groupBox71.Name = "groupBox71"; + this.groupBox71.Size = new System.Drawing.Size(275, 124); + this.groupBox71.TabIndex = 23; + this.groupBox71.TabStop = false; + this.groupBox71.Text = "功能说明"; + this.ckAuthBalenceVpn.AutoSize = true; + this.ckAuthBalenceVpn.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.ckAuthBalenceVpn.ForeColor = System.Drawing.Color.Red; + this.ckAuthBalenceVpn.Location = new System.Drawing.Point(18, 84); + this.ckAuthBalenceVpn.Name = "ckAuthBalenceVpn"; + this.ckAuthBalenceVpn.Size = new System.Drawing.Size(111, 21); + this.ckAuthBalenceVpn.TabIndex = 10; + this.ckAuthBalenceVpn.Text = "使用随机IP代理"; + this.ckAuthBalenceVpn.UseVisualStyleBackColor = true; + this.labAuthBalenceCount.AutoSize = true; + this.labAuthBalenceCount.Font = new System.Drawing.Font("微软雅黑", 10.5f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.labAuthBalenceCount.ForeColor = System.Drawing.Color.Crimson; + this.labAuthBalenceCount.Location = new System.Drawing.Point(103, 52); + this.labAuthBalenceCount.Name = "labAuthBalenceCount"; + this.labAuthBalenceCount.Size = new System.Drawing.Size(18, 19); + this.labAuthBalenceCount.TabIndex = 2; + this.labAuthBalenceCount.Text = "0"; + this.label108.AutoSize = true; + this.label108.Location = new System.Drawing.Point(15, 54); + this.label108.Name = "label108"; + this.label108.Size = new System.Drawing.Size(92, 17); + this.label108.TabIndex = 1; + this.label108.Text = "查询消耗点数:"; + this.label109.AutoSize = true; + this.label109.Location = new System.Drawing.Point(15, 25); + this.label109.Name = "label109"; + this.label109.Size = new System.Drawing.Size(168, 17); + this.label109.TabIndex = 0; + this.label109.Text = "可查询双禁,锁定 账号的余额"; + this.groupBox69.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + this.groupBox69.Controls.Add(this.lvAuthBalence); + this.groupBox69.Location = new System.Drawing.Point(15, 161); + this.groupBox69.Name = "groupBox69"; + this.groupBox69.Size = new System.Drawing.Size(1031, 428); + this.groupBox69.TabIndex = 22; + this.groupBox69.TabStop = false; + this.groupBox69.Text = "Apple账号列表"; + this.lvAuthBalence.Columns.AddRange(new System.Windows.Forms.ColumnHeader[9] { this.columnHeader127, this.columnHeader129, this.columnHeader130, this.columnHeader131, this.columnHeader132, this.columnHeader133, this.columnHeader136, this.columnHeader134, this.columnHeader135 }); + this.lvAuthBalence.Dock = System.Windows.Forms.DockStyle.Fill; + this.lvAuthBalence.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.lvAuthBalence.FullRowSelect = true; + this.lvAuthBalence.HideSelection = false; + this.lvAuthBalence.Location = new System.Drawing.Point(3, 17); + this.lvAuthBalence.Name = "lvAuthBalence"; + this.lvAuthBalence.Size = new System.Drawing.Size(1025, 408); + this.lvAuthBalence.TabIndex = 0; + this.lvAuthBalence.UseCompatibleStateImageBehavior = false; + this.lvAuthBalence.View = System.Windows.Forms.View.Details; + this.columnHeader127.Text = "序号"; + this.columnHeader129.Text = "账号"; + this.columnHeader129.Width = 200; + this.columnHeader130.Text = "密码"; + this.columnHeader130.Width = 150; + this.columnHeader131.Text = "问题1"; + this.columnHeader131.Width = 70; + this.columnHeader132.Text = "问题2"; + this.columnHeader132.Width = 80; + this.columnHeader133.Text = "问题3"; + this.columnHeader133.Width = 80; + this.columnHeader136.Text = "国家"; + this.columnHeader136.Width = 80; + this.columnHeader134.Text = "余额"; + this.columnHeader134.Width = 100; + this.columnHeader135.Text = "信息"; + this.columnHeader135.Width = 200; + this.groupBox70.Controls.Add(this.label106); + this.groupBox70.Controls.Add(this.label107); + this.groupBox70.Controls.Add(this.textBox15); + this.groupBox70.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.groupBox70.Location = new System.Drawing.Point(708, 18); + this.groupBox70.Name = "groupBox70"; + this.groupBox70.Size = new System.Drawing.Size(338, 130); + this.groupBox70.TabIndex = 21; + this.groupBox70.TabStop = false; + this.groupBox70.Text = "操作说明"; + this.label106.AutoSize = true; + this.label106.Location = new System.Drawing.Point(8, 80); + this.label106.Name = "label106"; + this.label106.Size = new System.Drawing.Size(259, 17); + this.label106.TabIndex = 8; + this.label106.Text = "如遇多次失败,一般是IP被封,请开启随机代理"; + this.label107.AutoSize = true; + this.label107.Location = new System.Drawing.Point(6, 25); + this.label107.Name = "label107"; + this.label107.Size = new System.Drawing.Size(80, 17); + this.label107.TabIndex = 7; + this.label107.Text = "账号导入格式"; + this.textBox15.BackColor = System.Drawing.SystemColors.ControlLightLight; + this.textBox15.Location = new System.Drawing.Point(12, 48); + this.textBox15.Name = "textBox15"; + this.textBox15.ReadOnly = true; + this.textBox15.Size = new System.Drawing.Size(302, 23); + this.textBox15.TabIndex = 6; + this.textBox15.Text = "xxx@xx.com----密码-答案1-答案2-答案3"; + this.groupBox72.Controls.Add(this.labAuthBalanceLvCount); + this.groupBox72.Controls.Add(this.label111); + this.groupBox72.Controls.Add(this.btnAuthBalanceClear); + this.groupBox72.Controls.Add(this.btnAuthBalanceLog); + this.groupBox72.Controls.Add(this.btnAuthBalenceInput); + this.groupBox72.Controls.Add(this.btnAuthBalanceExprt); + this.groupBox72.Controls.Add(this.btnAuthBalanceStart); + this.groupBox72.Location = new System.Drawing.Point(15, 18); + this.groupBox72.Name = "groupBox72"; + this.groupBox72.Size = new System.Drawing.Size(406, 130); + this.groupBox72.TabIndex = 20; + this.groupBox72.TabStop = false; + this.groupBox72.Text = "操作"; + this.labAuthBalanceLvCount.AutoSize = true; + this.labAuthBalanceLvCount.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.labAuthBalanceLvCount.ForeColor = System.Drawing.Color.OrangeRed; + this.labAuthBalanceLvCount.Location = new System.Drawing.Point(255, 15); + this.labAuthBalanceLvCount.Name = "labAuthBalanceLvCount"; + this.labAuthBalanceLvCount.Size = new System.Drawing.Size(15, 17); + this.labAuthBalanceLvCount.TabIndex = 7; + this.labAuthBalanceLvCount.Text = "0"; + this.label111.AutoSize = true; + this.label111.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.label111.Location = new System.Drawing.Point(152, 16); + this.label111.Name = "label111"; + this.label111.Size = new System.Drawing.Size(95, 17); + this.label111.TabIndex = 6; + this.label111.Text = "列表中账号数量:"; + this.btnAuthBalanceClear.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnAuthBalanceClear.Location = new System.Drawing.Point(298, 75); + this.btnAuthBalanceClear.Name = "btnAuthBalanceClear"; + this.btnAuthBalanceClear.Size = new System.Drawing.Size(96, 23); + this.btnAuthBalanceClear.TabIndex = 5; + this.btnAuthBalanceClear.Text = "清空账号列表"; + this.btnAuthBalanceClear.UseVisualStyleBackColor = true; + this.btnAuthBalanceClear.Click += new System.EventHandler(btnAuthBalanceClear_Click); + this.btnAuthBalanceLog.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnAuthBalanceLog.Location = new System.Drawing.Point(152, 42); + this.btnAuthBalanceLog.Name = "btnAuthBalanceLog"; + this.btnAuthBalanceLog.Size = new System.Drawing.Size(140, 23); + this.btnAuthBalanceLog.TabIndex = 4; + this.btnAuthBalanceLog.Text = "余额查询记录"; + this.btnAuthBalanceLog.UseVisualStyleBackColor = true; + this.btnAuthBalanceLog.Click += new System.EventHandler(btnAuthBalanceLog_Click); + this.btnAuthBalenceInput.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnAuthBalenceInput.Location = new System.Drawing.Point(152, 76); + this.btnAuthBalenceInput.Name = "btnAuthBalenceInput"; + this.btnAuthBalenceInput.Size = new System.Drawing.Size(140, 23); + this.btnAuthBalenceInput.TabIndex = 3; + this.btnAuthBalenceInput.Text = "账号输入"; + this.btnAuthBalenceInput.UseVisualStyleBackColor = true; + this.btnAuthBalenceInput.Click += new System.EventHandler(btnAuthBalenceInput_Click); + this.btnAuthBalanceExprt.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnAuthBalanceExprt.Location = new System.Drawing.Point(298, 42); + this.btnAuthBalanceExprt.Name = "btnAuthBalanceExprt"; + this.btnAuthBalanceExprt.Size = new System.Drawing.Size(96, 23); + this.btnAuthBalanceExprt.TabIndex = 2; + this.btnAuthBalanceExprt.Text = "导出账号"; + this.btnAuthBalanceExprt.UseVisualStyleBackColor = true; + this.btnAuthBalanceExprt.Click += new System.EventHandler(btnAuthBalanceExprt_Click); + this.btnAuthBalanceStart.Font = new System.Drawing.Font("微软雅黑", 10.5f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.btnAuthBalanceStart.ForeColor = System.Drawing.Color.Green; + this.btnAuthBalanceStart.Location = new System.Drawing.Point(18, 33); + this.btnAuthBalanceStart.Name = "btnAuthBalanceStart"; + this.btnAuthBalanceStart.Size = new System.Drawing.Size(110, 65); + this.btnAuthBalanceStart.TabIndex = 1; + this.btnAuthBalanceStart.Text = "开始执行"; + this.btnAuthBalanceStart.UseVisualStyleBackColor = true; + this.btnAuthBalanceStart.Click += new System.EventHandler(btnAuthBalanceStart_Click); + base.AutoScaleDimensions = new System.Drawing.SizeF(6f, 12f); + base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + base.ClientSize = new System.Drawing.Size(1058, 603); + base.Controls.Add(this.groupBox71); + base.Controls.Add(this.groupBox69); + base.Controls.Add(this.groupBox70); + base.Controls.Add(this.groupBox72); + base.MaximizeBox = false; + base.Name = "FormAuthBalance"; + base.ShowIcon = false; + base.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Apple 密保查余额"; + base.Load += new System.EventHandler(FormAuthBalance_Load); + this.groupBox71.ResumeLayout(false); + this.groupBox71.PerformLayout(); + this.groupBox69.ResumeLayout(false); + this.groupBox70.ResumeLayout(false); + this.groupBox70.PerformLayout(); + this.groupBox72.ResumeLayout(false); + this.groupBox72.PerformLayout(); + base.ResumeLayout(false); + } + } +} diff --git a/AppleBatch_June.Forms/FormEditListViewHander.cs b/AppleBatch_June.Forms/FormEditListViewHander.cs new file mode 100644 index 0000000..4058a41 --- /dev/null +++ b/AppleBatch_June.Forms/FormEditListViewHander.cs @@ -0,0 +1,152 @@ +using System; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +namespace AppleBatch_June.Forms +{ + public class FormEditListViewHander : Form + { + private IContainer components; + + private LinkLabel linkLabel1; + + public bool isAstrict { get; set; } = true; + + + public ListView lvData { get; set; } + + public FormEditListViewHander() + { + InitializeComponent(); + } + + private void FormEditListViewHander_Load(object sender, EventArgs e) + { + if (lvData != null) + { + initHander(lvData); + } + } + + public void initHander(ListView lvData) + { + int num = 20; + int num2 = 20; + int num3 = 0; + foreach (ColumnHeader column in lvData.Columns) + { + _ = column.Text; + addCkeckBox(num, num2, column); + num += 100; + num3++; + if (num3 == 5) + { + num = 20; + num2 += 40; + num3 = 0; + } + } + } + + private void addCkeckBox(int pi, int y, ColumnHeader item) + { + string text = item.Text; + bool @checked = false; + if (item.Width > 0) + { + @checked = true; + } + CheckBox checkBox = new CheckBox(); + checkBox.AutoSize = true; + checkBox.Font = new Font("微软雅黑", 10f, FontStyle.Regular, GraphicsUnit.Point, 134); + if (isAstrict && (text.Contains("序号") || text == "信息" || text.Contains("返回信息"))) + { + checkBox.Enabled = false; + } + checkBox.Location = new Point(pi, y); + checkBox.Size = new Size(70, 24); + checkBox.TabIndex = 0; + checkBox.Checked = @checked; + checkBox.Text = text; + checkBox.Tag = item; + checkBox.UseVisualStyleBackColor = true; + checkBox.CheckedChanged += radioButton1_CheckedChanged; + base.Controls.Add(checkBox); + } + + private void radioButton1_CheckedChanged(object sender, EventArgs e) + { + if (!(sender is CheckBox)) + { + return; + } + CheckBox checkBox = sender as CheckBox; + if (checkBox.Tag is ColumnHeader columnHeader) + { + int result; + if (!checkBox.Checked) + { + columnHeader.Tag = columnHeader.Width; + columnHeader.Width = 0; + } + else if (columnHeader.Tag != null && int.TryParse(columnHeader.Tag.ToString(), out result)) + { + columnHeader.Width = result; + } + else + { + columnHeader.Width = 100; + } + } + } + + private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + foreach (object control in base.Controls) + { + if (control is CheckBox && control is CheckBox) + { + (control as CheckBox).Checked = true; + } + } + } + + protected override void Dispose(bool disposing) + { + if (disposing && components != null) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.linkLabel1 = new System.Windows.Forms.LinkLabel(); + base.SuspendLayout(); + this.linkLabel1.AutoSize = true; + this.linkLabel1.Location = new System.Drawing.Point(520, 117); + this.linkLabel1.Name = "linkLabel1"; + this.linkLabel1.Size = new System.Drawing.Size(53, 12); + this.linkLabel1.TabIndex = 0; + this.linkLabel1.TabStop = true; + this.linkLabel1.Text = "全部显示"; + this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(linkLabel1_LinkClicked); + base.AutoScaleDimensions = new System.Drawing.SizeF(6f, 12f); + base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + base.ClientSize = new System.Drawing.Size(585, 138); + base.Controls.Add(this.linkLabel1); + base.MaximizeBox = false; + base.MinimizeBox = false; + base.Name = "FormEditListViewHander"; + base.ShowIcon = false; + base.ShowInTaskbar = false; + base.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "编辑显示列"; + base.Load += new System.EventHandler(FormEditListViewHander_Load); + base.ResumeLayout(false); + base.PerformLayout(); + } + } +} diff --git a/AppleBatch_June.Forms/FromActiotiCloud.cs b/AppleBatch_June.Forms/FromActiotiCloud.cs new file mode 100644 index 0000000..7a144f9 --- /dev/null +++ b/AppleBatch_June.Forms/FromActiotiCloud.cs @@ -0,0 +1,1133 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Drawing; +using System.Linq; +using System.Windows.Forms; +using AppleBatch_June.ExecuteTasks; +using AppleBatch_June.Model; +using AppleBatch_June.SMS; +using AppleBatch_June.Views; +using Microsoft.VisualBasic; + +namespace AppleBatch_June.Forms +{ + public class FromActiotiCloud : BaseForm + { + private int nosX; + + private int nosY; + + private string manualPrompt = "默认是中国号码,美国号码填 US ,加拿大填 CA ,中国填 CN"; + + private IContainer components; + + private GroupBox groupBox9; + + private CheckBox ckActiotiCloud; + + private Label labLeaveFamilyInter; + + private Label label10; + + private GroupBox groupBox10; + + private Label labLeaveFamilyCount; + + private Label label16; + + private Button btnActiotiCloudClre; + + private Button btnActiotiCloudQuery; + + private Button btnActiotiCloudInput; + + private Button btnActiotiCloudExper; + + private Button btnActiotiCloudStart; + + private GroupBox groupBox12; + + private DoubleBufferListView listActiotiCloud; + + private ColumnHeader columnHeader8; + + private ColumnHeader columnHeader9; + + private ColumnHeader columnHeader10; + + private ColumnHeader columnHeader1; + + private ColumnHeader columnHeader14; + + private ColumnHeader columnHeader3; + + private CheckBox ckisOpenAuthAction; + + private GroupBox groupBox1; + + private Label label1; + + private TextBox txtSmsToken; + + private Button btnBindSms; + + private LinkLabel linkLabel1; + + private ColumnHeader columnHeader2; + + private ColumnHeader columnHeader4; + + private ColumnHeader columnHeader5; + + private Label label2; + + private TextBox txtSmsGetMsgNumber; + + private ColumnHeader columnHeader6; + + private Label label3; + + private TextBox txtSmsProjectId; + + private Label label4; + + private TextBox txtSmsChennl; + + private ColumnHeader columnHeader7; + + private TextBox txtActivaPwd; + + private Label label5; + + private Button btnActiotiCloudStartSub; + + private Label label6; + + private ComboBox comMsmItems; + + private Label label7; + + private TextBox txtActivaStandbyPwd; + + private Label label8; + + private TextBox txtKaishaungCishu; + + private Panel panel1; + + private RadioButton radioButton2; + + private RadioButton radioButton1; + + public FromActiotiCloud() + : base("激活iCloud", ActivateiCloudTask.Instance) + { + InitializeComponent(); + } + + private void FromActiotiCloud_Load(object sender, EventArgs e) + { + base.listData = listActiotiCloud; + base.labCout = labLeaveFamilyCount; + base.startBtn = btnActiotiCloudStart; + if (AppSysConfig.userName == "teluns1") + { + panel1.Visible = true; + } + else + { + panel1.Visible = false; + } + labLeaveFamilyInter.Text = AppSysConfig.getTypeById(40).consNum.ToString(); + ckActiotiCloud.Checked = ((ConfigUtlis.getConfigValue("ckActiotiCloud") == "True") ? true : false); + InitLv(base.listData); + txtSmsGetMsgNumber.Text = ConfigUtlis.getConfigValue("txtSmsGetMsgNumber"); + txtSmsToken.Text = ConfigUtlis.getConfigValue("txtSmsToken"); + txtSmsProjectId.Text = ConfigUtlis.getConfigValue("txtSmsProjectId"); + txtSmsChennl.Text = ConfigUtlis.getConfigValue("txtSmsChennl"); + txtActivaPwd.Text = ConfigUtlis.getConfigValue("txtActivaPwd"); + txtActivaStandbyPwd.Text = ConfigUtlis.getConfigValue("txtActivaStandbyPwd"); + ToolStripMenuItem toolStripMenuItem = new ToolStripMenuItem + { + Text = "编辑数据", + Size = new Size(124, 22) + }; + toolStripMenuItem.Click += EditItemsIndex_Click; + BindMenuStrip(addTwoFactor: true, new ToolStripMenuItem[1] { toolStripMenuItem }, shouItems: true); + base.listData.MouseClick += ListData_MouseClick; + base.FormClosing += FromActiotiCloud_FormClosing; + string configValue = ConfigUtlis.getConfigValue("comMsmItems"); + foreach (string smsItem in SMSFactory.getSmsItems()) + { + comMsmItems.Items.Add(smsItem); + } + comMsmItems.Items.Add("手动接码"); + if (!string.IsNullOrEmpty(configValue)) + { + comMsmItems.SelectedItem = configValue; + } + else if (comMsmItems.Items.Count > 0) + { + comMsmItems.SelectedIndex = 0; + } + } + + private void FromActiotiCloud_FormClosing(object sender, FormClosingEventArgs e) + { + if (base.listData.Items.Count > 0 && MessageBox.Show("列表里还存在数据,确定退出吗?", "提示", MessageBoxButtons.OKCancel) != DialogResult.OK) + { + e.Cancel = true; + } + } + + private void ListData_MouseClick(object sender, MouseEventArgs e) + { + nosX = e.X; + nosY = e.Y; + } + + private void EditItemsIndex_Click(object sender, EventArgs e) + { + if (base.listData.SelectedItems.Count <= 0) + { + return; + } + ListViewItem itemAt = base.listData.GetItemAt(nosX, nosY); + if (itemAt == null) + { + return; + } + ListViewItem.ListViewSubItem subItemAt = itemAt.GetSubItemAt(nosX, nosY); + if (subItemAt == null) + { + return; + } + int num = 0; + IEnumerator enumerator = itemAt.SubItems.GetEnumerator(); + try + { + while (enumerator.MoveNext() && enumerator.Current != subItemAt) + { + num++; + } + } + finally + { + IDisposable disposable = enumerator as IDisposable; + if (disposable != null) + { + disposable.Dispose(); + } + } + string text = ""; + if (base.listData.Columns.Count >= num) + { + text = base.listData.Columns[num].Text; + } + int count = base.listData.SelectedItems.Count; + string text2 = Interaction.InputBox("编辑数据 【 " + text + " 】: " + subItemAt.Text + "\n\n共" + count + "条数据", "请重新输入编辑数据,清空则填 空格,不能留空", subItemAt.Text); + if (!(text2 != string.Empty)) + { + return; + } + subItemAt.Text = text2.Trim(); + foreach (ListViewItem selectedItem in base.listData.SelectedItems) + { + selectedItem.SubItems[num].Text = text2.Trim(); + } + } + + private void btnLeaveFamilyStart_Click(object sender, EventArgs e) + { + if (!ActivateiCloudTask.Instance.isRun && !ActivateiCloudTask.Instance.TaskIsRun) + { + List lvItems = (from ListViewItem c in base.listData.Items + where c.SubItems[9].Text == "-" + select new AppleAcount + { + appleId = c.SubItems[1].Text, + applePwd = c.SubItems[2].Text, + appleQt1 = c.SubItems[3].Text, + appleQt2 = c.SubItems[4].Text, + appleQt3 = c.SubItems[5].Text, + moblie = c.SubItems[8].Text, + birthday = c.SubItems[6].Text + }).ToList(); + RearTaskRun(lvItems, ActivateiCloudTask.Instance, base.startAct, base.endTakAct); + return; + } + ActivateiCloudTask.Instance.Stop(); + if (!base.IsDisposed) + { + Invoke((Action)delegate + { + base.startBtn.Text = "正在停止"; + base.startBtn.ForeColor = Color.Red; + }); + } + } + + private void RearTaskRun(List lvItems, ActivateiCloudTask Instance, Action from_startAct, Action from_endTakAct) + { + foreach (AppleAcount lvItem in lvItems) + { + if (string.IsNullOrEmpty(lvItem.moblie) || !long.TryParse(lvItem.moblie, out var _)) + { + lvItem.moblie = ""; + } + } + int id = 30; + int count = lvItems.Count; + if (AppSysConfig.integral < count * AppSysConfig.getTypeById(30).consNum) + { + MessageBox.Show("账号点数不足 , 执行账号数量:" + count + " ,至少需要 " + count * AppSysConfig.getTypeById(id).consNum + " 点数。"); + return; + } + ConfigUtlis.saveConfigKey("ckActiotiCloud", ckActiotiCloud.Checked.ToString()); + ConfigUtlis.saveConfigKey("ckisOpenAuthAction", ckisOpenAuthAction.Checked.ToString()); + ConfigUtlis.saveConfigKey("txtActivaPwd", txtActivaPwd.Text.ToString()); + ConfigUtlis.saveConfigKey("txtActivaStandbyPwd", txtActivaStandbyPwd.Text.ToString()); + ConfigUtlis.saveConfigKey("comMsmItems", comMsmItems.Text.ToString()); + ISms sms = null; + string smsCountry = "CN"; + if (comMsmItems.Text != "手动接码") + { + sms = SMSFactory.GetSms(comMsmItems.Text, txtSmsToken.Text, txtSmsProjectId.Text, txtSmsChennl.Text); + smsCountry = sms.smsCountry; + } + else if (!string.IsNullOrEmpty(txtSmsProjectId.Text)) + { + smsCountry = txtSmsProjectId.Text; + } + ActiotiCloudConfig actiotiCloudConfig = new ActiotiCloudConfig + { + getSmsMsgMaxCount = Tools.ToInt(txtSmsGetMsgNumber.Text, 30), + isOpenAuthAction = ckisOpenAuthAction.Checked, + smsCountry = smsCountry, + smsService = sms, + ActivaNewPwd = txtActivaPwd.Text, + ActivaStandbyPwd = txtActivaStandbyPwd.Text, + openNumber = int.Parse(txtKaishaungCishu.Text) + }; + if (ckisOpenAuthAction.Checked && string.IsNullOrEmpty(txtActivaPwd.Text)) + { + MessageBox.Show("请先设置密码"); + return; + } + actiotiCloudConfig.actGetCode = delegate(string retust, int type) + { + if (type == 9 || type == 1 || type == 15 || type == 11) + { + if (type == 11) + { + return retust; + } + if (!base.IsDisposed && base.IsHandleCreated) + { + VerificationCodeConfig verificationCode = new VerificationCodeConfig(); + if (type == 9) + { + verificationCode.content = retust + "的手机号码"; + verificationCode.WinTitle = "绑定手机号码"; + verificationCode.verifiLength = 0; + verificationCode.tipMag = "请输入手机号"; + } + if (type == 1 || type == 15) + { + verificationCode.content = retust; + verificationCode.WinTitle = "请输入验证码"; + verificationCode.verifiLength = 6; + verificationCode.tipMag = "请输入验证码"; + } + return Invoke((Func)delegate + { + VerificationCodeFrom verificationCodeFrom = new VerificationCodeFrom(verificationCode); + verificationCodeFrom.ShowDialog(); + return verificationCodeFrom.reustCode; + }).ToString(); + } + } + return string.Empty; + }; + Instance.ExecuteLeaveFamily(2, ckActiotiCloud.Checked, actiotiCloudConfig, lvItems, from_startAct, from_endTakAct, sucessAct, _action); + } + + public void sucessAct(string AppleId) + { + UpdataUi(delegate + { + ListViewItem listViewItem = (from ListViewItem c in base.listData.Items + where c.SubItems[1].Text == AppleId + select c).FirstOrDefault(); + if (listViewItem != null) + { + SqliteHelper.ExecuteInsert("itunes_db", new Dictionary + { + { "type", "activateiCloud" }, + { + "addTime", + Tools.GenerateTimeStamp().ToString() + }, + { + "value1", + listViewItem.SubItems[1].Text + }, + { + "value2", + listViewItem.SubItems[2].Text + }, + { + "value3", + listViewItem.SubItems[3].Text + }, + { + "value4", + listViewItem.SubItems[4].Text + }, + { + "value5", + listViewItem.SubItems[5].Text + }, + { + "value6", + listViewItem.SubItems[6].Text + }, + { + "value7", + listViewItem.SubItems[7].Text + }, + { + "value8", + listViewItem.SubItems[8].Text + }, + { + "value9", + listViewItem.SubItems[9].Text + }, + { + "value10", + listViewItem.SubItems[10].Text + } + }); + } + }); + } + + public void _action(string key, DisplyType type, string reust) + { + UpdataUi(delegate + { + IEnumerable enumerable = from ListViewItem c in base.listData.Items + where c.SubItems[1].Text == key + select c; + Font font = new Font(Font, FontStyle.Bold); + foreach (ListViewItem item in enumerable) + { + switch (type) + { + case DisplyType.chongzhi: + item.SubItems[9].ForeColor = Color.Black; + item.SubItems[9].Text = ""; + break; + case DisplyType.error: + item.SubItems[9].Text = reust; + item.SubItems[9].Font = font; + item.SubItems[9].ForeColor = Color.Red; + break; + case DisplyType.bindMoblie: + item.SubItems[8].Text = reust; + break; + case DisplyType.area: + if (!string.IsNullOrEmpty(reust)) + { + item.SubItems[7].Text = reust; + } + break; + case DisplyType.mima: + item.SubItems[2].ForeColor = Color.Green; + item.SubItems[2].Font = font; + item.SubItems[2].Text = reust; + break; + case DisplyType.shengri: + item.SubItems[6].Text = reust; + break; + case DisplyType.guojia: + if (!string.IsNullOrEmpty(reust)) + { + item.SubItems[7].Text = reust; + } + break; + case DisplyType.xinxi: + item.SubItems[10].Text = reust; + break; + case DisplyType.forbidden: + item.SubItems[9].Text = reust; + item.SubItems[9].Font = font; + item.SubItems[9].ForeColor = Color.Green; + break; + } + } + }); + } + + private void btnLeaveFamilyInput_Click(object sender, EventArgs e) + { + FromInputAcount fromInputAcount = new FromInputAcount(); + fromInputAcount.tipMssage = "账号--密码-密保1-密保2-密保3"; + fromInputAcount.isOpenSysVpn = ckisOpenAuthAction.Checked; + if (fromInputAcount.ShowDialog() == DialogResult.OK) + { + List list = AppleUtlis.accountInput(fromInputAcount.StrInput); + int num = 0; + base.listData.ListViewItemSorter = new ListViewItemComparer(0, 1); + base.listData.Sort(); + if (base.listData.Items.Count > 0 && int.TryParse(base.listData.Items[base.listData.Items.Count - 1].SubItems[0].Text, out var result)) + { + num = result; + } + List list2 = new List(); + foreach (AppleAcount item in list) + { + num++; + ListViewItem listViewItem = new ListViewItem(num.ToString()); + listViewItem.UseItemStyleForSubItems = false; + listViewItem.SubItems.Add(item.appleId); + listViewItem.SubItems.Add(item.applePwd); + listViewItem.SubItems.Add(item.appleQt1); + listViewItem.SubItems.Add(item.appleQt2); + listViewItem.SubItems.Add(item.appleQt3); + listViewItem.SubItems.Add(item.birthday); + string text = item.overflow.Replace("生日", "").Replace("国家", "").Replace("双重号码", "") + .Replace("手机号码", "") + .TrimStart('-'); + listViewItem.SubItems.Add(text.Split('-')[0]); + if (text.Split('-').Length >= 2) + { + listViewItem.SubItems.Add(text.Split('-')[1]); + } + else + { + listViewItem.SubItems.Add("-"); + } + listViewItem.SubItems.Add("-"); + listViewItem.SubItems.Add(""); + list2.Add(listViewItem); + } + base.listData.Items.AddRange(list2.ToArray()); + } + base.labCout.Text = string.Concat(base.listData.Items.Count); + } + + private void btnLiteClre_Click(object sender, EventArgs e) + { + if (MessageBox.Show("确认删除列表数据吗", "提示", MessageBoxButtons.OKCancel) == DialogResult.OK) + { + base.listData.Items.Clear(); + } + base.labCout.Text = string.Concat(base.listData.Items.Count); + } + + private void btnLeaveFamilyExper_Click(object sender, EventArgs e) + { + ExperList(base.listData); + } + + public override void TwoFactorItem_over_Click(string reust) + { + if (ActivateiCloudTask.InstanceSub.TaskIsRun) + { + MessageBox.Show("请先停止辅助执行"); + return; + } + List list = new List(); + foreach (ListViewItem selectedItem in base.listData.SelectedItems) + { + list.Add(new AppleAcount + { + appleId = selectedItem.SubItems[1].Text, + applePwd = selectedItem.SubItems[2].Text + reust, + appleQt1 = selectedItem.SubItems[3].Text, + appleQt2 = selectedItem.SubItems[4].Text, + appleQt3 = selectedItem.SubItems[5].Text, + moblie = selectedItem.SubItems[8].Text, + birthday = selectedItem.SubItems[6].Text + }); + } + RearTaskRun(list, ActivateiCloudTask.InstanceSub, startSubAct, endTakSubAct); + } + + public override void ReExecute_Click(object sender, EventArgs e) + { + if (ActivateiCloudTask.InstanceSub.TaskIsRun) + { + MessageBox.Show("请先停止辅助执行"); + return; + } + List list = new List(); + foreach (ListViewItem selectedItem in base.listData.SelectedItems) + { + selectedItem.SubItems[9].Text = "-"; + list.Add(new AppleAcount + { + appleId = selectedItem.SubItems[1].Text, + applePwd = selectedItem.SubItems[2].Text, + appleQt1 = selectedItem.SubItems[3].Text, + appleQt2 = selectedItem.SubItems[4].Text, + appleQt3 = selectedItem.SubItems[5].Text, + moblie = selectedItem.SubItems[8].Text, + birthday = selectedItem.SubItems[6].Text + }); + } + RearTaskRun(list, ActivateiCloudTask.InstanceSub, startSubAct, endTakSubAct); + } + + public void startSubAct() + { + UpdataUi(delegate + { + btnActiotiCloudStartSub.Text = "停止"; + btnActiotiCloudStartSub.ForeColor = Color.Red; + }); + } + + public void endTakSubAct() + { + UpdataUi(delegate + { + btnActiotiCloudStartSub.Text = "辅助执行"; + btnActiotiCloudStartSub.ForeColor = Color.CadetBlue; + }); + } + + private void btnLeaveFamilyQuery_Click(object sender, EventArgs e) + { + FromDBDataQuery fromDBDataQuery = new FromDBDataQuery(); + fromDBDataQuery.sqlTitle = new Dictionary + { + { "value1", "账号|180" }, + { "value2", "密码|100" }, + { "value3", "密保|80" }, + { "value4", "密保|80" }, + { "value5", "密保|80" }, + { "value6", "生日|80" }, + { "value7", "国家|80" }, + { "value8", "双重号码|80" }, + { "value9", "状态|150" }, + { "value10", "信息|150" } + }; + fromDBDataQuery.type = "activateiCloud"; + fromDBDataQuery.typeName = "激活记录"; + fromDBDataQuery.Show(); + } + + private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + if (comMsmItems.Text == "手动接码") + { + MessageBox.Show(manualPrompt); + } + else if (linkLabel1.Tag is string && !string.IsNullOrEmpty(linkLabel1.Tag.ToString())) + { + Process.Start(linkLabel1.Tag.ToString()); + } + else + { + Process.Start("http://smsyun.top/index/dashboard"); + } + } + + private void btnBindSms_Click(object sender, EventArgs e) + { + ConfigUtlis.saveConfigKey("txtSmsGetMsgNumber", txtSmsGetMsgNumber.Text.ToString()); + string text = comMsmItems.Text; + ConfigUtlis.saveConfigKey("txtSmsToken_" + text, txtSmsToken.Text.ToString()); + ConfigUtlis.saveConfigKey("txtSmsProjectId_" + text, txtSmsProjectId.Text.ToString()); + ConfigUtlis.saveConfigKey("txtSmsChennl_" + text, txtSmsChennl.Text.ToString()); + if (text == "手动接码") + { + MessageBox.Show(manualPrompt); + } + else + { + MessageBox.Show(SMSFactory.GetSms(text, txtSmsToken.Text, txtSmsProjectId.Text, txtSmsChennl.Text).getInfo().Data); + } + } + + private void btnActiotiCloudStartSub_Click(object sender, EventArgs e) + { + if (!ActivateiCloudTask.InstanceSub.TaskIsRun) + { + MessageBox.Show("请重右键执行"); + return; + } + ActivateiCloudTask.InstanceSub.Stop(); + if (!base.IsDisposed) + { + Invoke((Action)delegate + { + btnActiotiCloudStartSub.Text = "正在停止"; + btnActiotiCloudStartSub.ForeColor = Color.Red; + }); + } + } + + protected override void DelmunItem_Click(object sender, EventArgs e) + { + try + { + if (listActiotiCloud.SelectedItems.Count <= 0 || MessageBox.Show("确认删除选中数据吗", "提示", MessageBoxButtons.OKCancel) != DialogResult.OK) + { + return; + } + foreach (ListViewItem selectedItem in listActiotiCloud.SelectedItems) + { + listActiotiCloud.Items.Remove(selectedItem); + } + if (base.labCout != null) + { + base.labCout.Text = listActiotiCloud.Items.Count.ToString(); + } + } + catch (Exception) + { + } + } + + private void comMsmItems_SelectedIndexChanged(object sender, EventArgs e) + { + string text = comMsmItems.Text; + txtSmsToken.Text = ConfigUtlis.getConfigValue("txtSmsToken_" + text); + txtSmsProjectId.Text = ConfigUtlis.getConfigValue("txtSmsProjectId_" + text); + txtSmsChennl.Text = ConfigUtlis.getConfigValue("txtSmsChennl_" + text); + ISms sms = SMSFactory.GetSms(text, txtSmsToken.Text, txtSmsProjectId.Text, txtSmsChennl.Text); + if (sms != null) + { + linkLabel1.Tag = sms.smsLink; + } + if (text == "手动接码") + { + label3.Text = "号码国家"; + } + else + { + label3.Text = "项目ID"; + } + } + + private void radioButton2_CheckedChanged(object sender, EventArgs e) + { + if (radioButton2.Checked) + { + ActivateiCloudTask.Instance.nasType = 2; + } + else + { + ActivateiCloudTask.Instance.nasType = 1; + } + } + + protected override void Dispose(bool disposing) + { + if (disposing && components != null) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.groupBox9 = new System.Windows.Forms.GroupBox(); + this.label7 = new System.Windows.Forms.Label(); + this.txtActivaStandbyPwd = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); + this.comMsmItems = new System.Windows.Forms.ComboBox(); + this.label5 = new System.Windows.Forms.Label(); + this.txtActivaPwd = new System.Windows.Forms.TextBox(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.label8 = new System.Windows.Forms.Label(); + this.txtKaishaungCishu = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.txtSmsChennl = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.txtSmsProjectId = new System.Windows.Forms.TextBox(); + this.linkLabel1 = new System.Windows.Forms.LinkLabel(); + this.btnBindSms = new System.Windows.Forms.Button(); + this.txtSmsToken = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.ckisOpenAuthAction = new System.Windows.Forms.CheckBox(); + this.label2 = new System.Windows.Forms.Label(); + this.txtSmsGetMsgNumber = new System.Windows.Forms.TextBox(); + this.ckActiotiCloud = new System.Windows.Forms.CheckBox(); + this.labLeaveFamilyInter = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.groupBox10 = new System.Windows.Forms.GroupBox(); + this.panel1 = new System.Windows.Forms.Panel(); + this.radioButton2 = new System.Windows.Forms.RadioButton(); + this.radioButton1 = new System.Windows.Forms.RadioButton(); + this.btnActiotiCloudStartSub = new System.Windows.Forms.Button(); + this.labLeaveFamilyCount = new System.Windows.Forms.Label(); + this.label16 = new System.Windows.Forms.Label(); + this.btnActiotiCloudClre = new System.Windows.Forms.Button(); + this.btnActiotiCloudQuery = new System.Windows.Forms.Button(); + this.btnActiotiCloudInput = new System.Windows.Forms.Button(); + this.btnActiotiCloudExper = new System.Windows.Forms.Button(); + this.btnActiotiCloudStart = new System.Windows.Forms.Button(); + this.groupBox12 = new System.Windows.Forms.GroupBox(); + this.listActiotiCloud = new AppleBatch_June.Views.DoubleBufferListView(); + this.columnHeader8 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader9 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader10 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader3 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader2 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader4 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader5 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader7 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader6 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader1 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader14 = new System.Windows.Forms.ColumnHeader(); + this.groupBox9.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.groupBox10.SuspendLayout(); + this.panel1.SuspendLayout(); + this.groupBox12.SuspendLayout(); + base.SuspendLayout(); + this.groupBox9.Controls.Add(this.label7); + this.groupBox9.Controls.Add(this.txtActivaStandbyPwd); + this.groupBox9.Controls.Add(this.label6); + this.groupBox9.Controls.Add(this.comMsmItems); + this.groupBox9.Controls.Add(this.label5); + this.groupBox9.Controls.Add(this.txtActivaPwd); + this.groupBox9.Controls.Add(this.groupBox1); + this.groupBox9.Controls.Add(this.ckisOpenAuthAction); + this.groupBox9.Controls.Add(this.label2); + this.groupBox9.Controls.Add(this.txtSmsGetMsgNumber); + this.groupBox9.Controls.Add(this.ckActiotiCloud); + this.groupBox9.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.groupBox9.Location = new System.Drawing.Point(434, 12); + this.groupBox9.Name = "groupBox9"; + this.groupBox9.Size = new System.Drawing.Size(583, 137); + this.groupBox9.TabIndex = 20; + this.groupBox9.TabStop = false; + this.groupBox9.Text = "激活iCloud 功能说明"; + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(6, 76); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(104, 17); + this.label7.TabIndex = 19; + this.label7.Text = "重置冲突备用密码"; + this.txtActivaStandbyPwd.Location = new System.Drawing.Point(119, 72); + this.txtActivaStandbyPwd.Name = "txtActivaStandbyPwd"; + this.txtActivaStandbyPwd.Size = new System.Drawing.Size(155, 23); + this.txtActivaStandbyPwd.TabIndex = 18; + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(6, 107); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(56, 17); + this.label6.TabIndex = 17; + this.label6.Text = "短信平台"; + this.comMsmItems.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comMsmItems.FormattingEnabled = true; + this.comMsmItems.Location = new System.Drawing.Point(70, 102); + this.comMsmItems.Name = "comMsmItems"; + this.comMsmItems.Size = new System.Drawing.Size(96, 25); + this.comMsmItems.TabIndex = 16; + this.comMsmItems.SelectedIndexChanged += new System.EventHandler(comMsmItems_SelectedIndexChanged); + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(54, 50); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(56, 17); + this.label5.TabIndex = 15; + this.label5.Text = "重置密码"; + this.txtActivaPwd.Location = new System.Drawing.Point(119, 44); + this.txtActivaPwd.Name = "txtActivaPwd"; + this.txtActivaPwd.Size = new System.Drawing.Size(155, 23); + this.txtActivaPwd.TabIndex = 14; + this.groupBox1.Controls.Add(this.label8); + this.groupBox1.Controls.Add(this.txtKaishaungCishu); + this.groupBox1.Controls.Add(this.label4); + this.groupBox1.Controls.Add(this.txtSmsChennl); + this.groupBox1.Controls.Add(this.label3); + this.groupBox1.Controls.Add(this.txtSmsProjectId); + this.groupBox1.Controls.Add(this.linkLabel1); + this.groupBox1.Controls.Add(this.btnBindSms); + this.groupBox1.Controls.Add(this.txtSmsToken); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Location = new System.Drawing.Point(280, 15); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(297, 116); + this.groupBox1.TabIndex = 13; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "开双接码配置"; + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(6, 84); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(68, 17); + this.label8.TabIndex = 11; + this.label8.Text = "开双试次数"; + this.txtKaishaungCishu.Location = new System.Drawing.Point(82, 81); + this.txtKaishaungCishu.Name = "txtKaishaungCishu"; + this.txtKaishaungCishu.Size = new System.Drawing.Size(40, 23); + this.txtKaishaungCishu.TabIndex = 10; + this.txtKaishaungCishu.Text = "5"; + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(157, 55); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(32, 17); + this.label4.TabIndex = 9; + this.label4.Text = "通道"; + this.txtSmsChennl.Location = new System.Drawing.Point(196, 52); + this.txtSmsChennl.Name = "txtSmsChennl"; + this.txtSmsChennl.Size = new System.Drawing.Size(85, 23); + this.txtSmsChennl.TabIndex = 8; + this.txtSmsChennl.Text = "1"; + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(6, 54); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(45, 17); + this.label3.TabIndex = 7; + this.label3.Text = "项目ID"; + this.txtSmsProjectId.Location = new System.Drawing.Point(63, 50); + this.txtSmsProjectId.Name = "txtSmsProjectId"; + this.txtSmsProjectId.Size = new System.Drawing.Size(85, 23); + this.txtSmsProjectId.TabIndex = 6; + this.txtSmsProjectId.Text = "1098"; + this.linkLabel1.AutoSize = true; + this.linkLabel1.Location = new System.Drawing.Point(230, 85); + this.linkLabel1.Name = "linkLabel1"; + this.linkLabel1.Size = new System.Drawing.Size(56, 17); + this.linkLabel1.TabIndex = 3; + this.linkLabel1.TabStop = true; + this.linkLabel1.Text = "短信平台"; + this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(linkLabel1_LinkClicked); + this.btnBindSms.Location = new System.Drawing.Point(128, 82); + this.btnBindSms.Name = "btnBindSms"; + this.btnBindSms.Size = new System.Drawing.Size(95, 23); + this.btnBindSms.TabIndex = 2; + this.btnBindSms.Text = "配置"; + this.btnBindSms.UseVisualStyleBackColor = true; + this.btnBindSms.Click += new System.EventHandler(btnBindSms_Click); + this.txtSmsToken.Location = new System.Drawing.Point(63, 19); + this.txtSmsToken.Name = "txtSmsToken"; + this.txtSmsToken.Size = new System.Drawing.Size(218, 23); + this.txtSmsToken.TabIndex = 1; + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(9, 21); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(41, 17); + this.label1.TabIndex = 0; + this.label1.Text = "token"; + this.ckisOpenAuthAction.AutoSize = true; + this.ckisOpenAuthAction.Location = new System.Drawing.Point(140, 19); + this.ckisOpenAuthAction.Name = "ckisOpenAuthAction"; + this.ckisOpenAuthAction.Size = new System.Drawing.Size(123, 21); + this.ckisOpenAuthAction.TabIndex = 12; + this.ckisOpenAuthAction.Text = "失败开双重新激活"; + this.ckisOpenAuthAction.UseVisualStyleBackColor = true; + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(172, 107); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(56, 17); + this.label2.TabIndex = 5; + this.label2.Text = "短信次数"; + this.txtSmsGetMsgNumber.Location = new System.Drawing.Point(232, 104); + this.txtSmsGetMsgNumber.Name = "txtSmsGetMsgNumber"; + this.txtSmsGetMsgNumber.Size = new System.Drawing.Size(40, 23); + this.txtSmsGetMsgNumber.TabIndex = 4; + this.txtSmsGetMsgNumber.Text = "30"; + this.ckActiotiCloud.AutoSize = true; + this.ckActiotiCloud.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.ckActiotiCloud.ForeColor = System.Drawing.Color.Red; + this.ckActiotiCloud.Location = new System.Drawing.Point(9, 21); + this.ckActiotiCloud.Name = "ckActiotiCloud"; + this.ckActiotiCloud.Size = new System.Drawing.Size(111, 21); + this.ckActiotiCloud.TabIndex = 10; + this.ckActiotiCloud.Text = "使用随机IP代理"; + this.ckActiotiCloud.UseVisualStyleBackColor = true; + this.labLeaveFamilyInter.AutoSize = true; + this.labLeaveFamilyInter.Font = new System.Drawing.Font("微软雅黑", 10.5f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.labLeaveFamilyInter.ForeColor = System.Drawing.Color.Crimson; + this.labLeaveFamilyInter.Location = new System.Drawing.Point(260, 101); + this.labLeaveFamilyInter.Name = "labLeaveFamilyInter"; + this.labLeaveFamilyInter.Size = new System.Drawing.Size(18, 19); + this.labLeaveFamilyInter.TabIndex = 2; + this.labLeaveFamilyInter.Text = "0"; + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(172, 106); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(89, 12); + this.label10.TabIndex = 1; + this.label10.Text = "查询消耗点数:"; + this.groupBox10.Controls.Add(this.panel1); + this.groupBox10.Controls.Add(this.btnActiotiCloudStartSub); + this.groupBox10.Controls.Add(this.labLeaveFamilyCount); + this.groupBox10.Controls.Add(this.label16); + this.groupBox10.Controls.Add(this.label10); + this.groupBox10.Controls.Add(this.labLeaveFamilyInter); + this.groupBox10.Controls.Add(this.btnActiotiCloudClre); + this.groupBox10.Controls.Add(this.btnActiotiCloudQuery); + this.groupBox10.Controls.Add(this.btnActiotiCloudInput); + this.groupBox10.Controls.Add(this.btnActiotiCloudExper); + this.groupBox10.Controls.Add(this.btnActiotiCloudStart); + this.groupBox10.Location = new System.Drawing.Point(12, 12); + this.groupBox10.Name = "groupBox10"; + this.groupBox10.Size = new System.Drawing.Size(416, 126); + this.groupBox10.TabIndex = 19; + this.groupBox10.TabStop = false; + this.groupBox10.Text = "操作"; + this.panel1.Controls.Add(this.radioButton2); + this.panel1.Controls.Add(this.radioButton1); + this.panel1.Location = new System.Drawing.Point(303, 12); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(107, 24); + this.panel1.TabIndex = 9; + this.radioButton2.AutoSize = true; + this.radioButton2.Location = new System.Drawing.Point(59, 4); + this.radioButton2.Name = "radioButton2"; + this.radioButton2.Size = new System.Drawing.Size(35, 16); + this.radioButton2.TabIndex = 1; + this.radioButton2.Text = "t2"; + this.radioButton2.UseVisualStyleBackColor = true; + this.radioButton2.CheckedChanged += new System.EventHandler(radioButton2_CheckedChanged); + this.radioButton1.AutoSize = true; + this.radioButton1.Checked = true; + this.radioButton1.Location = new System.Drawing.Point(18, 4); + this.radioButton1.Name = "radioButton1"; + this.radioButton1.Size = new System.Drawing.Size(35, 16); + this.radioButton1.TabIndex = 0; + this.radioButton1.TabStop = true; + this.radioButton1.Text = "t1"; + this.radioButton1.UseVisualStyleBackColor = true; + this.btnActiotiCloudStartSub.Font = new System.Drawing.Font("微软雅黑", 10.5f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.btnActiotiCloudStartSub.ForeColor = System.Drawing.Color.CadetBlue; + this.btnActiotiCloudStartSub.Location = new System.Drawing.Point(18, 91); + this.btnActiotiCloudStartSub.Name = "btnActiotiCloudStartSub"; + this.btnActiotiCloudStartSub.Size = new System.Drawing.Size(119, 25); + this.btnActiotiCloudStartSub.TabIndex = 8; + this.btnActiotiCloudStartSub.Text = "辅助执行"; + this.btnActiotiCloudStartSub.UseVisualStyleBackColor = true; + this.btnActiotiCloudStartSub.Click += new System.EventHandler(btnActiotiCloudStartSub_Click); + this.labLeaveFamilyCount.AutoSize = true; + this.labLeaveFamilyCount.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.labLeaveFamilyCount.ForeColor = System.Drawing.Color.OrangeRed; + this.labLeaveFamilyCount.Location = new System.Drawing.Point(255, 16); + this.labLeaveFamilyCount.Name = "labLeaveFamilyCount"; + this.labLeaveFamilyCount.Size = new System.Drawing.Size(15, 17); + this.labLeaveFamilyCount.TabIndex = 7; + this.labLeaveFamilyCount.Text = "0"; + this.label16.AutoSize = true; + this.label16.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.label16.Location = new System.Drawing.Point(156, 16); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(95, 17); + this.label16.TabIndex = 6; + this.label16.Text = "列表中账号数量:"; + this.btnActiotiCloudClre.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnActiotiCloudClre.Location = new System.Drawing.Point(303, 76); + this.btnActiotiCloudClre.Name = "btnActiotiCloudClre"; + this.btnActiotiCloudClre.Size = new System.Drawing.Size(96, 23); + this.btnActiotiCloudClre.TabIndex = 5; + this.btnActiotiCloudClre.Text = "清空账号列表"; + this.btnActiotiCloudClre.UseVisualStyleBackColor = true; + this.btnActiotiCloudClre.Click += new System.EventHandler(btnLiteClre_Click); + this.btnActiotiCloudQuery.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnActiotiCloudQuery.Location = new System.Drawing.Point(159, 42); + this.btnActiotiCloudQuery.Name = "btnActiotiCloudQuery"; + this.btnActiotiCloudQuery.Size = new System.Drawing.Size(128, 23); + this.btnActiotiCloudQuery.TabIndex = 4; + this.btnActiotiCloudQuery.Text = "iCloud激活记录"; + this.btnActiotiCloudQuery.UseVisualStyleBackColor = true; + this.btnActiotiCloudQuery.Click += new System.EventHandler(btnLeaveFamilyQuery_Click); + this.btnActiotiCloudInput.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnActiotiCloudInput.Location = new System.Drawing.Point(159, 76); + this.btnActiotiCloudInput.Name = "btnActiotiCloudInput"; + this.btnActiotiCloudInput.Size = new System.Drawing.Size(128, 23); + this.btnActiotiCloudInput.TabIndex = 3; + this.btnActiotiCloudInput.Text = "账号输入"; + this.btnActiotiCloudInput.UseVisualStyleBackColor = true; + this.btnActiotiCloudInput.Click += new System.EventHandler(btnLeaveFamilyInput_Click); + this.btnActiotiCloudExper.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnActiotiCloudExper.Location = new System.Drawing.Point(303, 42); + this.btnActiotiCloudExper.Name = "btnActiotiCloudExper"; + this.btnActiotiCloudExper.Size = new System.Drawing.Size(96, 23); + this.btnActiotiCloudExper.TabIndex = 2; + this.btnActiotiCloudExper.Text = "导出账号"; + this.btnActiotiCloudExper.UseVisualStyleBackColor = true; + this.btnActiotiCloudExper.Click += new System.EventHandler(btnLeaveFamilyExper_Click); + this.btnActiotiCloudStart.Font = new System.Drawing.Font("微软雅黑", 10.5f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.btnActiotiCloudStart.ForeColor = System.Drawing.Color.Green; + this.btnActiotiCloudStart.Location = new System.Drawing.Point(18, 28); + this.btnActiotiCloudStart.Name = "btnActiotiCloudStart"; + this.btnActiotiCloudStart.Size = new System.Drawing.Size(119, 56); + this.btnActiotiCloudStart.TabIndex = 1; + this.btnActiotiCloudStart.Text = "开始执行"; + this.btnActiotiCloudStart.UseVisualStyleBackColor = true; + this.btnActiotiCloudStart.Click += new System.EventHandler(btnLeaveFamilyStart_Click); + this.groupBox12.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + this.groupBox12.Controls.Add(this.listActiotiCloud); + this.groupBox12.Location = new System.Drawing.Point(9, 155); + this.groupBox12.Name = "groupBox12"; + this.groupBox12.Size = new System.Drawing.Size(1008, 429); + this.groupBox12.TabIndex = 18; + this.groupBox12.TabStop = false; + this.groupBox12.Text = "iCloud账号列表"; + this.listActiotiCloud.Columns.AddRange(new System.Windows.Forms.ColumnHeader[11] + { + this.columnHeader8, this.columnHeader9, this.columnHeader10, this.columnHeader3, this.columnHeader2, this.columnHeader4, this.columnHeader5, this.columnHeader7, this.columnHeader6, this.columnHeader1, + this.columnHeader14 + }); + this.listActiotiCloud.Dock = System.Windows.Forms.DockStyle.Fill; + this.listActiotiCloud.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.listActiotiCloud.FullRowSelect = true; + this.listActiotiCloud.HideSelection = false; + this.listActiotiCloud.Location = new System.Drawing.Point(3, 17); + this.listActiotiCloud.Name = "listActiotiCloud"; + this.listActiotiCloud.Size = new System.Drawing.Size(1002, 409); + this.listActiotiCloud.TabIndex = 0; + this.listActiotiCloud.UseCompatibleStateImageBehavior = false; + this.listActiotiCloud.View = System.Windows.Forms.View.Details; + this.columnHeader8.Text = "序号"; + this.columnHeader9.Text = "账号"; + this.columnHeader9.Width = 140; + this.columnHeader10.Text = "密码"; + this.columnHeader10.Width = 90; + this.columnHeader3.Text = "密保"; + this.columnHeader2.Text = "密保"; + this.columnHeader4.Text = "密保"; + this.columnHeader5.Text = "生日"; + this.columnHeader5.Width = 80; + this.columnHeader7.Text = "国家"; + this.columnHeader6.Text = "双重号码"; + this.columnHeader6.Width = 100; + this.columnHeader1.Text = "状态"; + this.columnHeader1.Width = 80; + this.columnHeader14.Text = "信息"; + this.columnHeader14.Width = 200; + base.AutoScaleDimensions = new System.Drawing.SizeF(6f, 12f); + base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + base.ClientSize = new System.Drawing.Size(1032, 596); + base.Controls.Add(this.groupBox9); + base.Controls.Add(this.groupBox10); + base.Controls.Add(this.groupBox12); + base.MaximizeBox = false; + base.Name = "FromActiotiCloud"; + base.ShowIcon = false; + base.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "激活iCloud"; + base.Load += new System.EventHandler(FromActiotiCloud_Load); + this.groupBox9.ResumeLayout(false); + this.groupBox9.PerformLayout(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.groupBox10.ResumeLayout(false); + this.groupBox10.PerformLayout(); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.groupBox12.ResumeLayout(false); + base.ResumeLayout(false); + } + } +} diff --git a/AppleBatch_June.Forms/FromAddRemoveFamilyMember.cs b/AppleBatch_June.Forms/FromAddRemoveFamilyMember.cs new file mode 100644 index 0000000..1bc8489 --- /dev/null +++ b/AppleBatch_June.Forms/FromAddRemoveFamilyMember.cs @@ -0,0 +1,585 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Linq; +using System.Windows.Forms; +using AppleBatch_June.ExecuteTasks; +using AppleBatch_June.Model; +using AppleBatch_June.Views; + +namespace AppleBatch_June.Forms +{ + public class FromAddRemoveFamilyMember : BaseForm + { + private IContainer components; + + private GroupBox groupBox9; + + private TextBox textBox2; + + private CheckBox ckAddRemoveFamilyMember; + + private Label labAddRemoveFamilyMemberInter; + + private Label label10; + + private Label label13; + + private GroupBox groupBox10; + + private Label labAddRemoveFamilyMemberCount; + + private Label label16; + + private Button btnAddRemoveFamilyMemberClre; + + private Button btnAddRemoveFamilyMemberLog; + + private Button btnAddRemoveFamilyMembernput; + + private Button btnAddRemoveFamilyMemberExper; + + private Button btnAddRemoveFamilyMemberStart; + + private GroupBox groupBox12; + + private DoubleBufferListView listAddRemoveFamilyMember; + + private ColumnHeader columnHeader8; + + private ColumnHeader columnHeader9; + + private ColumnHeader columnHeader10; + + private ColumnHeader columnHeader3; + + private ColumnHeader columnHeader1; + + private ColumnHeader columnHeader14; + + private Label label2; + + private TextBox textBox1; + + private Label label1; + + private ColumnHeader columnHeader4; + + private ColumnHeader columnHeader2; + + public FromAddRemoveFamilyMember() + : base("添加或移除家庭成员", AddRemoveFamilyMemberTask.Instance) + { + InitializeComponent(); + } + + private void FromAddRemoveFamilyMember_Load(object sender, EventArgs e) + { + base.listData = listAddRemoveFamilyMember; + base.labCout = labAddRemoveFamilyMemberCount; + base.startBtn = btnAddRemoveFamilyMemberStart; + labAddRemoveFamilyMemberInter.Text = AppSysConfig.getTypeById(31).consNum.ToString(); + ckAddRemoveFamilyMember.Checked = ((ConfigUtlis.getConfigValue("ckAddRemoveFamilyMember") == "True") ? true : false); + InitLv(base.listData); + BindMenuStrip(addTwoFactor: true); + } + + private void btnAddRemoveFamilyMembernput_Click(object sender, EventArgs e) + { + FromInputAcount fromInputAcount = new FromInputAcount(); + fromInputAcount.tipMssage = textBox2.Text; + fromInputAcount.isOpenSysVpn = ckAddRemoveFamilyMember.Checked; + if (fromInputAcount.ShowDialog() == DialogResult.OK) + { + List list = AppleUtlis.accountInput(fromInputAcount.StrInput, null, removePwd: false, isdeWeight: false); + int num = 0; + base.listData.ListViewItemSorter = new ListViewItemComparer(0, 1); + base.listData.Sort(); + if (base.listData.Items.Count > 0 && int.TryParse(base.listData.Items[base.listData.Items.Count - 1].SubItems[0].Text, out var result)) + { + num = result; + } + foreach (AppleAcount item in list) + { + num++; + ListViewItem listViewItem = new ListViewItem(num.ToString()); + listViewItem.Tag = item.lvItemGuid; + listViewItem.UseItemStyleForSubItems = false; + listViewItem.SubItems.Add(item.appleId); + listViewItem.SubItems.Add(item.applePwd); + if (!string.IsNullOrEmpty(item.appleQt1)) + { + if (!string.IsNullOrEmpty(item.overflow)) + { + try + { + string obj = item.sourceInputData.Substring(item.sourceInputData.IndexOf(item.appleId) + item.appleId.Length).TrimStart('-'); + List list2 = AppleUtlis.accountInput(obj.Substring(obj.IndexOf(item.applePwd) + item.applePwd.Length).TrimStart('-')); + if (list2.Count == 1) + { + listViewItem.SubItems.Add(list2[0].appleId.Trim()); + listViewItem.SubItems.Add(list2[0].applePwd.Trim()); + listViewItem.SubItems.Add(list2[0].overflow); + goto IL_0296; + } + } + catch (Exception) + { + } + continue; + } + listViewItem.SubItems.Add(item.appleQt1); + listViewItem.SubItems.Add(item.appleQt2); + listViewItem.SubItems.Add(item.appleQt3); + } + else + { + listViewItem.SubItems.Add(item.overflow); + listViewItem.SubItems.Add("-"); + listViewItem.SubItems.Add("del"); + } + goto IL_0296; + IL_0296: + listViewItem.SubItems.Add("-"); + listViewItem.SubItems.Add("-"); + base.listData.Items.Add(listViewItem); + } + } + base.labCout.Text = string.Concat(base.listData.Items.Count); + } + + private void btnAddRemoveFamilyMemberStart_Click(object sender, EventArgs e) + { + if (!AddRemoveFamilyMemberTask.Instance.isRun && !AddRemoveFamilyMemberTask.Instance.TaskIsRun) + { + List lvItems = (from ListViewItem c in base.listData.Items + where c.SubItems[6].Text == "-" + select new AppleAcount + { + lvItemGuid = c.Tag.ToString(), + appleId = c.SubItems[1].Text, + applePwd = c.SubItems[2].Text, + newAppleId = c.SubItems[3].Text, + newApplePopPwd = c.SubItems[4].Text, + overflow = c.SubItems[5].Text + }).ToList(); + RearTaskRun(lvItems); + return; + } + AddRemoveFamilyMemberTask.Instance.Stop(); + if (!base.IsDisposed) + { + Invoke((Action)delegate + { + base.startBtn.Text = "正在停止"; + base.startBtn.ForeColor = Color.Red; + }); + } + } + + private void RearTaskRun(List lvItems) + { + int id = 31; + int count = lvItems.Count; + if (AppSysConfig.integral < count * AppSysConfig.getTypeById(31).consNum) + { + MessageBox.Show("账号点数不足 , 执行账号数量:" + count + " ,至少需要 " + count * AppSysConfig.getTypeById(id).consNum + " 点数。"); + } + else + { + ConfigUtlis.saveConfigKey("ckAddRemoveFamilyMember", ckAddRemoveFamilyMember.Checked.ToString()); + AddRemoveFamilyMemberTask.Instance.ExecuteAddRemoveFamilyMember(2, ckAddRemoveFamilyMember.Checked, lvItems, base.startAct, base.endTakAct, sucessAct, _action); + } + } + + public void sucessAct(string lvItemGuid) + { + UpdataUi(delegate + { + ListViewItem listViewItem = (from ListViewItem c in base.listData.Items + where c.Tag.ToString() == lvItemGuid + select c).FirstOrDefault(); + if (listViewItem != null) + { + SqliteHelper.ExecuteInsert("itunes_db", new Dictionary + { + { "type", "addRemoveFamily" }, + { + "addTime", + Tools.GenerateTimeStamp().ToString() + }, + { + "value1", + listViewItem.SubItems[1].Text + }, + { + "value2", + listViewItem.SubItems[2].Text + }, + { + "value3", + listViewItem.SubItems[3].Text + }, + { + "value4", + listViewItem.SubItems[4].Text + }, + { + "value5", + listViewItem.SubItems[5].Text + }, + { + "value6", + listViewItem.SubItems[6].Text + }, + { + "value7", + listViewItem.SubItems[7].Text + } + }); + } + }); + } + + public void _action(string lvItemGuid, DisplyType type, string reust) + { + UpdataUi(delegate + { + IEnumerable enumerable = from ListViewItem c in base.listData.Items + where c.Tag.ToString() == lvItemGuid + select c; + Font font = new Font(Font, FontStyle.Bold); + foreach (ListViewItem item in enumerable) + { + switch (type) + { + case DisplyType.forbidden: + item.SubItems[6].Text = reust; + item.SubItems[6].Font = font; + item.SubItems[6].ForeColor = Color.Green; + break; + case DisplyType.xinxi: + item.SubItems[7].Text = reust; + break; + case DisplyType.error: + item.SubItems[6].Text = reust; + item.SubItems[6].Font = font; + item.SubItems[6].ForeColor = Color.Red; + break; + case DisplyType.chongzhi: + item.SubItems[6].Text = reust; + item.SubItems[6].ForeColor = Color.Black; + break; + } + } + }); + } + + public override void ReExecute_Click(object sender, EventArgs e) + { + if (AddRemoveFamilyMemberTask.Instance.TaskIsRun) + { + MessageBox.Show("请先停止"); + return; + } + List list = new List(); + foreach (ListViewItem selectedItem in base.listData.SelectedItems) + { + list.Add(new AppleAcount + { + lvItemGuid = selectedItem.Tag.ToString(), + appleId = selectedItem.SubItems[1].Text, + applePwd = selectedItem.SubItems[2].Text, + newAppleId = selectedItem.SubItems[3].Text, + newApplePopPwd = selectedItem.SubItems[4].Text, + overflow = selectedItem.SubItems[5].Text + }); + } + RearTaskRun(list); + } + + public override void TwoFactorItem_over_Click(string reust) + { + List list = new List(); + foreach (ListViewItem selectedItem in base.listData.SelectedItems) + { + list.Add(new AppleAcount + { + lvItemGuid = selectedItem.Tag.ToString(), + appleId = selectedItem.SubItems[1].Text, + applePwd = selectedItem.SubItems[2].Text + reust, + newAppleId = selectedItem.SubItems[3].Text, + newApplePopPwd = selectedItem.SubItems[4].Text, + overflow = selectedItem.SubItems[5].Text + }); + } + RearTaskRun(list); + } + + private void btnAddRemoveFamilyMemberClre_Click(object sender, EventArgs e) + { + if (MessageBox.Show("确认删除列表数据吗", "提示", MessageBoxButtons.OKCancel) == DialogResult.OK) + { + base.listData.Items.Clear(); + } + base.labCout.Text = string.Concat(base.listData.Items.Count); + } + + private void btnAddRemoveFamilyMemberExper_Click(object sender, EventArgs e) + { + ExperList(base.listData); + } + + private void btnAddRemoveFamilyMemberLog_Click(object sender, EventArgs e) + { + FromDBDataQuery fromDBDataQuery = new FromDBDataQuery(); + fromDBDataQuery.sqlTitle = new Dictionary + { + { "value1", "账号|150" }, + { "value2", "密码|100" }, + { "value3", "成员账号|100" }, + { "value4", "成员密码|100" }, + { "value5", "类型/安全吗|80" }, + { "value6", "状态|60" }, + { "value7", "信息|150" } + }; + fromDBDataQuery.type = "addRemoveFamily"; + fromDBDataQuery.typeName = "添加或删除家庭成员记录"; + fromDBDataQuery.Show(); + } + + protected override void Dispose(bool disposing) + { + if (disposing && components != null) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.groupBox9 = new System.Windows.Forms.GroupBox(); + this.label2 = new System.Windows.Forms.Label(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.ckAddRemoveFamilyMember = new System.Windows.Forms.CheckBox(); + this.labAddRemoveFamilyMemberInter = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.label13 = new System.Windows.Forms.Label(); + this.groupBox10 = new System.Windows.Forms.GroupBox(); + this.labAddRemoveFamilyMemberCount = new System.Windows.Forms.Label(); + this.label16 = new System.Windows.Forms.Label(); + this.btnAddRemoveFamilyMemberClre = new System.Windows.Forms.Button(); + this.btnAddRemoveFamilyMemberLog = new System.Windows.Forms.Button(); + this.btnAddRemoveFamilyMembernput = new System.Windows.Forms.Button(); + this.btnAddRemoveFamilyMemberExper = new System.Windows.Forms.Button(); + this.btnAddRemoveFamilyMemberStart = new System.Windows.Forms.Button(); + this.groupBox12 = new System.Windows.Forms.GroupBox(); + this.listAddRemoveFamilyMember = new AppleBatch_June.Views.DoubleBufferListView(); + this.columnHeader8 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader9 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader10 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader4 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader2 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader3 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader1 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader14 = new System.Windows.Forms.ColumnHeader(); + this.groupBox9.SuspendLayout(); + this.groupBox10.SuspendLayout(); + this.groupBox12.SuspendLayout(); + base.SuspendLayout(); + this.groupBox9.Controls.Add(this.label2); + this.groupBox9.Controls.Add(this.textBox1); + this.groupBox9.Controls.Add(this.label1); + this.groupBox9.Controls.Add(this.textBox2); + this.groupBox9.Controls.Add(this.ckAddRemoveFamilyMember); + this.groupBox9.Controls.Add(this.labAddRemoveFamilyMemberInter); + this.groupBox9.Controls.Add(this.label10); + this.groupBox9.Controls.Add(this.label13); + this.groupBox9.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.groupBox9.Location = new System.Drawing.Point(445, 12); + this.groupBox9.Name = "groupBox9"; + this.groupBox9.Size = new System.Drawing.Size(520, 126); + this.groupBox9.TabIndex = 23; + this.groupBox9.TabStop = false; + this.groupBox9.Text = "添加或者移除家庭成员 功能说明"; + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(145, 99); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(80, 17); + this.label2.TabIndex = 14; + this.label2.Text = "移除成员格式"; + this.textBox1.BackColor = System.Drawing.SystemColors.ControlLightLight; + this.textBox1.Location = new System.Drawing.Point(233, 97); + this.textBox1.Name = "textBox1"; + this.textBox1.ReadOnly = true; + this.textBox1.Size = new System.Drawing.Size(271, 23); + this.textBox1.TabIndex = 13; + this.textBox1.Text = "组织者账号----密码--家庭成员的Dsid"; + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(146, 71); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(80, 17); + this.label1.TabIndex = 12; + this.label1.Text = "添加成员格式"; + this.textBox2.BackColor = System.Drawing.SystemColors.ControlLightLight; + this.textBox2.Location = new System.Drawing.Point(234, 68); + this.textBox2.Name = "textBox2"; + this.textBox2.ReadOnly = true; + this.textBox2.Size = new System.Drawing.Size(271, 23); + this.textBox2.TabIndex = 11; + this.textBox2.Text = "组织者账号----密码--成员账号--密码--安全码\r\n"; + this.ckAddRemoveFamilyMember.AutoSize = true; + this.ckAddRemoveFamilyMember.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.ckAddRemoveFamilyMember.ForeColor = System.Drawing.Color.Red; + this.ckAddRemoveFamilyMember.Location = new System.Drawing.Point(18, 97); + this.ckAddRemoveFamilyMember.Name = "ckAddRemoveFamilyMember"; + this.ckAddRemoveFamilyMember.Size = new System.Drawing.Size(111, 21); + this.ckAddRemoveFamilyMember.TabIndex = 10; + this.ckAddRemoveFamilyMember.Text = "使用随机IP代理"; + this.ckAddRemoveFamilyMember.UseVisualStyleBackColor = true; + this.labAddRemoveFamilyMemberInter.AutoSize = true; + this.labAddRemoveFamilyMemberInter.Font = new System.Drawing.Font("微软雅黑", 10.5f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.labAddRemoveFamilyMemberInter.ForeColor = System.Drawing.Color.Crimson; + this.labAddRemoveFamilyMemberInter.Location = new System.Drawing.Point(103, 71); + this.labAddRemoveFamilyMemberInter.Name = "labAddRemoveFamilyMemberInter"; + this.labAddRemoveFamilyMemberInter.Size = new System.Drawing.Size(18, 19); + this.labAddRemoveFamilyMemberInter.TabIndex = 2; + this.labAddRemoveFamilyMemberInter.Text = "0"; + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(15, 73); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(92, 17); + this.label10.TabIndex = 1; + this.label10.Text = "查询消耗点数:"; + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(11, 22); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(502, 34); + this.label13.TabIndex = 0; + this.label13.Text = "需要组织者账号并且拥有支付方式的安全码,才能添加成员,移除家庭成员需要成员的Dsid。\r\n 该功能不支持多线程运行,仅支持单线程运行。"; + this.groupBox10.Controls.Add(this.labAddRemoveFamilyMemberCount); + this.groupBox10.Controls.Add(this.label16); + this.groupBox10.Controls.Add(this.btnAddRemoveFamilyMemberClre); + this.groupBox10.Controls.Add(this.btnAddRemoveFamilyMemberLog); + this.groupBox10.Controls.Add(this.btnAddRemoveFamilyMembernput); + this.groupBox10.Controls.Add(this.btnAddRemoveFamilyMemberExper); + this.groupBox10.Controls.Add(this.btnAddRemoveFamilyMemberStart); + this.groupBox10.Location = new System.Drawing.Point(12, 12); + this.groupBox10.Name = "groupBox10"; + this.groupBox10.Size = new System.Drawing.Size(427, 126); + this.groupBox10.TabIndex = 22; + this.groupBox10.TabStop = false; + this.groupBox10.Text = "操作"; + this.labAddRemoveFamilyMemberCount.AutoSize = true; + this.labAddRemoveFamilyMemberCount.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.labAddRemoveFamilyMemberCount.ForeColor = System.Drawing.Color.OrangeRed; + this.labAddRemoveFamilyMemberCount.Location = new System.Drawing.Point(282, 15); + this.labAddRemoveFamilyMemberCount.Name = "labAddRemoveFamilyMemberCount"; + this.labAddRemoveFamilyMemberCount.Size = new System.Drawing.Size(15, 17); + this.labAddRemoveFamilyMemberCount.TabIndex = 7; + this.labAddRemoveFamilyMemberCount.Text = "0"; + this.label16.AutoSize = true; + this.label16.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.label16.Location = new System.Drawing.Point(179, 16); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(95, 17); + this.label16.TabIndex = 6; + this.label16.Text = "列表中账号数量:"; + this.btnAddRemoveFamilyMemberClre.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnAddRemoveFamilyMemberClre.Location = new System.Drawing.Point(325, 75); + this.btnAddRemoveFamilyMemberClre.Name = "btnAddRemoveFamilyMemberClre"; + this.btnAddRemoveFamilyMemberClre.Size = new System.Drawing.Size(96, 23); + this.btnAddRemoveFamilyMemberClre.TabIndex = 5; + this.btnAddRemoveFamilyMemberClre.Text = "清空账号列表"; + this.btnAddRemoveFamilyMemberClre.UseVisualStyleBackColor = true; + this.btnAddRemoveFamilyMemberClre.Click += new System.EventHandler(btnAddRemoveFamilyMemberClre_Click); + this.btnAddRemoveFamilyMemberLog.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnAddRemoveFamilyMemberLog.Location = new System.Drawing.Point(179, 42); + this.btnAddRemoveFamilyMemberLog.Name = "btnAddRemoveFamilyMemberLog"; + this.btnAddRemoveFamilyMemberLog.Size = new System.Drawing.Size(140, 23); + this.btnAddRemoveFamilyMemberLog.TabIndex = 4; + this.btnAddRemoveFamilyMemberLog.Text = "家庭成员管理记录"; + this.btnAddRemoveFamilyMemberLog.UseVisualStyleBackColor = true; + this.btnAddRemoveFamilyMemberLog.Click += new System.EventHandler(btnAddRemoveFamilyMemberLog_Click); + this.btnAddRemoveFamilyMembernput.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnAddRemoveFamilyMembernput.Location = new System.Drawing.Point(179, 76); + this.btnAddRemoveFamilyMembernput.Name = "btnAddRemoveFamilyMembernput"; + this.btnAddRemoveFamilyMembernput.Size = new System.Drawing.Size(140, 23); + this.btnAddRemoveFamilyMembernput.TabIndex = 3; + this.btnAddRemoveFamilyMembernput.Text = "账号输入"; + this.btnAddRemoveFamilyMembernput.UseVisualStyleBackColor = true; + this.btnAddRemoveFamilyMembernput.Click += new System.EventHandler(btnAddRemoveFamilyMembernput_Click); + this.btnAddRemoveFamilyMemberExper.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnAddRemoveFamilyMemberExper.Location = new System.Drawing.Point(325, 42); + this.btnAddRemoveFamilyMemberExper.Name = "btnAddRemoveFamilyMemberExper"; + this.btnAddRemoveFamilyMemberExper.Size = new System.Drawing.Size(96, 23); + this.btnAddRemoveFamilyMemberExper.TabIndex = 2; + this.btnAddRemoveFamilyMemberExper.Text = "导出账号"; + this.btnAddRemoveFamilyMemberExper.UseVisualStyleBackColor = true; + this.btnAddRemoveFamilyMemberExper.Click += new System.EventHandler(btnAddRemoveFamilyMemberExper_Click); + this.btnAddRemoveFamilyMemberStart.Font = new System.Drawing.Font("微软雅黑", 10.5f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.btnAddRemoveFamilyMemberStart.ForeColor = System.Drawing.Color.Green; + this.btnAddRemoveFamilyMemberStart.Location = new System.Drawing.Point(18, 33); + this.btnAddRemoveFamilyMemberStart.Name = "btnAddRemoveFamilyMemberStart"; + this.btnAddRemoveFamilyMemberStart.Size = new System.Drawing.Size(110, 65); + this.btnAddRemoveFamilyMemberStart.TabIndex = 1; + this.btnAddRemoveFamilyMemberStart.Text = "开始执行"; + this.btnAddRemoveFamilyMemberStart.UseVisualStyleBackColor = true; + this.btnAddRemoveFamilyMemberStart.Click += new System.EventHandler(btnAddRemoveFamilyMemberStart_Click); + this.groupBox12.Controls.Add(this.listAddRemoveFamilyMember); + this.groupBox12.Location = new System.Drawing.Point(9, 144); + this.groupBox12.Name = "groupBox12"; + this.groupBox12.Size = new System.Drawing.Size(956, 408); + this.groupBox12.TabIndex = 21; + this.groupBox12.TabStop = false; + this.groupBox12.Text = "iCloud账号列表"; + this.listAddRemoveFamilyMember.Columns.AddRange(new System.Windows.Forms.ColumnHeader[8] { this.columnHeader8, this.columnHeader9, this.columnHeader10, this.columnHeader4, this.columnHeader2, this.columnHeader3, this.columnHeader1, this.columnHeader14 }); + this.listAddRemoveFamilyMember.Dock = System.Windows.Forms.DockStyle.Fill; + this.listAddRemoveFamilyMember.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.listAddRemoveFamilyMember.FullRowSelect = true; + this.listAddRemoveFamilyMember.HideSelection = false; + this.listAddRemoveFamilyMember.Location = new System.Drawing.Point(3, 17); + this.listAddRemoveFamilyMember.Name = "listAddRemoveFamilyMember"; + this.listAddRemoveFamilyMember.Size = new System.Drawing.Size(950, 388); + this.listAddRemoveFamilyMember.TabIndex = 0; + this.listAddRemoveFamilyMember.UseCompatibleStateImageBehavior = false; + this.listAddRemoveFamilyMember.View = System.Windows.Forms.View.Details; + this.columnHeader8.Text = "序号"; + this.columnHeader9.Text = "账号"; + this.columnHeader9.Width = 150; + this.columnHeader10.Text = "密码"; + this.columnHeader10.Width = 100; + this.columnHeader4.Text = "成员账号"; + this.columnHeader4.Width = 150; + this.columnHeader2.Text = "成员密码"; + this.columnHeader2.Width = 100; + this.columnHeader3.Text = "类型/安全码"; + this.columnHeader3.Width = 80; + this.columnHeader1.Text = "状态"; + this.columnHeader14.Text = "信息"; + this.columnHeader14.Width = 230; + base.AutoScaleDimensions = new System.Drawing.SizeF(6f, 12f); + base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + base.ClientSize = new System.Drawing.Size(977, 567); + base.Controls.Add(this.groupBox9); + base.Controls.Add(this.groupBox10); + base.Controls.Add(this.groupBox12); + base.MaximizeBox = false; + base.Name = "FromAddRemoveFamilyMember"; + base.ShowIcon = false; + base.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "添加或者移除家庭成员"; + base.Load += new System.EventHandler(FromAddRemoveFamilyMember_Load); + this.groupBox9.ResumeLayout(false); + this.groupBox9.PerformLayout(); + this.groupBox10.ResumeLayout(false); + this.groupBox10.PerformLayout(); + this.groupBox12.ResumeLayout(false); + base.ResumeLayout(false); + } + } +} diff --git a/AppleBatch_June.Forms/FromCreateFamily.cs b/AppleBatch_June.Forms/FromCreateFamily.cs new file mode 100644 index 0000000..694a8ee --- /dev/null +++ b/AppleBatch_June.Forms/FromCreateFamily.cs @@ -0,0 +1,544 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Linq; +using System.Windows.Forms; +using AppleBatch_June.ExecuteTasks; +using AppleBatch_June.Model; +using AppleBatch_June.Views; + +namespace AppleBatch_June.Forms +{ + public class FromCreateFamily : BaseForm + { + private IContainer components; + + private GroupBox groupBox9; + + private TextBox textBox2; + + private CheckBox ckCreateFamilyVpn; + + private Label labCreateFamilyInter; + + private Label label10; + + private Label label13; + + private GroupBox groupBox10; + + private Label labCreateFamilyCount; + + private Label label16; + + private Button btnLiteClre; + + private Button btnCreateFamilyQuery; + + private Button btnCreateFamilyInput; + + private Button btnCreateFamilyExper; + + private Button btnCreateFamilyStart; + + private GroupBox groupBox12; + + private DoubleBufferListView listCreateFamily; + + private ColumnHeader columnHeader8; + + private ColumnHeader columnHeader9; + + private ColumnHeader columnHeader10; + + private ColumnHeader columnHeader2; + + private ColumnHeader columnHeader11; + + private ColumnHeader columnHeader1; + + private ColumnHeader columnHeader14; + + public FromCreateFamily() + : base("开通家庭共享", CreateFamilyTask.Instance) + { + InitializeComponent(); + } + + private void btnCreateFamilyInput_Click(object sender, EventArgs e) + { + FromInputAcount fromInputAcount = new FromInputAcount(); + fromInputAcount.tipMssage = textBox2.Text; + fromInputAcount.isOpenSysVpn = ckCreateFamilyVpn.Checked; + if (fromInputAcount.ShowDialog() == DialogResult.OK) + { + List list = AppleUtlis.accountInput(fromInputAcount.StrInput); + int num = 0; + base.listData.ListViewItemSorter = new ListViewItemComparer(0, 1); + base.listData.Sort(); + if (base.listData.Items.Count > 0 && int.TryParse(base.listData.Items[base.listData.Items.Count - 1].SubItems[0].Text, out var result)) + { + num = result; + } + foreach (AppleAcount item in list) + { + num++; + ListViewItem listViewItem = new ListViewItem(num.ToString()); + listViewItem.UseItemStyleForSubItems = false; + listViewItem.SubItems.Add(item.appleId); + listViewItem.SubItems.Add(item.applePwd); + if (item.overflow.Split('-').Length == 2) + { + listViewItem.SubItems.Add(item.overflow.Split('-')[0].Trim()); + listViewItem.SubItems.Add(item.overflow.Split('-')[1].Trim()); + } + else + { + if (item.overflow.Split('-').Length <= 2 || !string.IsNullOrEmpty(item.appleQt1)) + { + try + { + string obj = item.sourceInputData.Substring(item.sourceInputData.IndexOf(item.appleId) + item.appleId.Length).TrimStart('-'); + List list2 = AppleUtlis.accountInput(obj.Substring(obj.IndexOf(item.applePwd) + item.applePwd.Length).TrimStart('-')); + if (list2.Count == 1) + { + listViewItem.SubItems.Add(list2[0].appleId.Trim()); + listViewItem.SubItems.Add(list2[0].applePwd.Trim()); + goto IL_02cb; + } + } + catch (Exception) + { + } + continue; + } + try + { + int num2 = item.overflow.LastIndexOf('-'); + string text = item.overflow.Substring(0, num2); + string text2 = item.overflow.Substring(num2 + 1); + listViewItem.SubItems.Add(text); + listViewItem.SubItems.Add(text2); + } + catch (Exception) + { + continue; + } + } + goto IL_02cb; + IL_02cb: + listViewItem.SubItems.Add("-"); + listViewItem.SubItems.Add("-"); + base.listData.Items.Add(listViewItem); + } + } + base.labCout.Text = string.Concat(base.listData.Items.Count); + } + + private void FromCreateFamily_Load(object sender, EventArgs e) + { + base.listData = listCreateFamily; + base.labCout = labCreateFamilyCount; + base.startBtn = btnCreateFamilyStart; + labCreateFamilyInter.Text = AppSysConfig.getTypeById(32).consNum.ToString(); + ckCreateFamilyVpn.Checked = ((ConfigUtlis.getConfigValue("ckCreateFamilyVpn") == "True") ? true : false); + InitLv(base.listData); + BindMenuStrip(addTwoFactor: true); + } + + private void btnCreateFamilyStart_Click(object sender, EventArgs e) + { + if (!CreateFamilyTask.Instance.isRun && !CreateFamilyTask.Instance.TaskIsRun) + { + List lvItems = (from ListViewItem c in base.listData.Items + where c.SubItems[5].Text == "-" + select new AppleAcount + { + appleId = c.SubItems[1].Text, + applePwd = c.SubItems[2].Text, + newAppleId = c.SubItems[3].Text, + newApplePopPwd = c.SubItems[4].Text + }).ToList(); + RearTaskRun(lvItems); + return; + } + CreateFamilyTask.Instance.Stop(); + if (!base.IsDisposed) + { + Invoke((Action)delegate + { + base.startBtn.Text = "正在停止"; + base.startBtn.ForeColor = Color.Red; + }); + } + } + + private void RearTaskRun(List lvItems) + { + int id = 32; + int count = lvItems.Count; + if (AppSysConfig.integral < count * AppSysConfig.getTypeById(32).consNum) + { + MessageBox.Show("账号点数不足 , 执行账号数量:" + count + " ,至少需要 " + count * AppSysConfig.getTypeById(id).consNum + " 点数。"); + } + else + { + ConfigUtlis.saveConfigKey("ckCreateFamilyVpn", ckCreateFamilyVpn.Checked.ToString()); + CreateFamilyTask.Instance.ExecuteCreateFamily(2, ckCreateFamilyVpn.Checked, lvItems, base.startAct, base.endTakAct, sucessAct, _action); + } + } + + public void sucessAct(string AppleId) + { + UpdataUi(delegate + { + ListViewItem listViewItem = (from ListViewItem c in base.listData.Items + where c.SubItems[1].Text == AppleId + select c).FirstOrDefault(); + if (listViewItem != null) + { + SqliteHelper.ExecuteInsert("itunes_db", new Dictionary + { + { "type", "createFamily" }, + { + "addTime", + Tools.GenerateTimeStamp().ToString() + }, + { + "value1", + listViewItem.SubItems[1].Text + }, + { + "value2", + listViewItem.SubItems[2].Text + }, + { + "value3", + listViewItem.SubItems[3].Text + }, + { + "value4", + listViewItem.SubItems[4].Text + }, + { + "value5", + listViewItem.SubItems[5].Text + }, + { + "value6", + listViewItem.SubItems[6].Text + } + }); + } + }); + } + + public void _action(string key, DisplyType type, string reust) + { + UpdataUi(delegate + { + IEnumerable enumerable = from ListViewItem c in base.listData.Items + where c.SubItems[1].Text == key + select c; + Font font = new Font(Font, FontStyle.Bold); + foreach (ListViewItem item in enumerable) + { + switch (type) + { + case DisplyType.forbidden: + item.SubItems[5].Text = reust; + item.SubItems[5].Font = font; + item.SubItems[5].ForeColor = Color.Green; + break; + case DisplyType.xinxi: + item.SubItems[6].Text = reust; + break; + case DisplyType.error: + item.SubItems[5].Text = reust; + item.SubItems[5].Font = font; + item.SubItems[5].ForeColor = Color.Red; + break; + case DisplyType.chongzhi: + item.SubItems[5].Text = reust; + item.SubItems[5].ForeColor = Color.Black; + break; + } + } + }); + } + + private void btnLiteClre_Click(object sender, EventArgs e) + { + if (MessageBox.Show("确认删除列表数据吗", "提示", MessageBoxButtons.OKCancel) == DialogResult.OK) + { + base.listData.Items.Clear(); + } + base.labCout.Text = string.Concat(base.listData.Items.Count); + } + + private void btnCreateFamilyExper_Click(object sender, EventArgs e) + { + ExperList(base.listData); + } + + public override void ReExecute_Click(object sender, EventArgs e) + { + if (CreateFamilyTask.Instance.TaskIsRun) + { + MessageBox.Show("请先停止"); + return; + } + List list = new List(); + foreach (ListViewItem selectedItem in base.listData.SelectedItems) + { + list.Add(new AppleAcount + { + appleId = selectedItem.SubItems[1].Text, + applePwd = selectedItem.SubItems[2].Text, + newAppleId = selectedItem.SubItems[3].Text, + newApplePopPwd = selectedItem.SubItems[4].Text + }); + } + RearTaskRun(list); + } + + public override void TwoFactorItem_over_Click(string reust) + { + List list = new List(); + foreach (ListViewItem selectedItem in base.listData.SelectedItems) + { + list.Add(new AppleAcount + { + appleId = selectedItem.SubItems[1].Text, + applePwd = selectedItem.SubItems[2].Text + reust, + newAppleId = selectedItem.SubItems[3].Text, + newApplePopPwd = selectedItem.SubItems[4].Text + }); + } + RearTaskRun(list); + } + + private void btnCreateFamilyQuery_Click(object sender, EventArgs e) + { + FromDBDataQuery fromDBDataQuery = new FromDBDataQuery(); + fromDBDataQuery.sqlTitle = new Dictionary + { + { "value1", "账号|180" }, + { "value2", "密码|100" }, + { "value3", "付款账号|180" }, + { "value4", "付款密码|100" }, + { "value5", "状态|100" }, + { "value6", "信息|150" } + }; + fromDBDataQuery.type = "createFamily"; + fromDBDataQuery.typeName = "开通家庭共享记录"; + fromDBDataQuery.Show(); + } + + protected override void Dispose(bool disposing) + { + if (disposing && components != null) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.groupBox9 = new System.Windows.Forms.GroupBox(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.ckCreateFamilyVpn = new System.Windows.Forms.CheckBox(); + this.labCreateFamilyInter = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.label13 = new System.Windows.Forms.Label(); + this.groupBox10 = new System.Windows.Forms.GroupBox(); + this.labCreateFamilyCount = new System.Windows.Forms.Label(); + this.label16 = new System.Windows.Forms.Label(); + this.btnLiteClre = new System.Windows.Forms.Button(); + this.btnCreateFamilyQuery = new System.Windows.Forms.Button(); + this.btnCreateFamilyInput = new System.Windows.Forms.Button(); + this.btnCreateFamilyExper = new System.Windows.Forms.Button(); + this.btnCreateFamilyStart = new System.Windows.Forms.Button(); + this.groupBox12 = new System.Windows.Forms.GroupBox(); + this.listCreateFamily = new AppleBatch_June.Views.DoubleBufferListView(); + this.columnHeader8 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader9 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader10 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader2 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader11 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader1 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader14 = new System.Windows.Forms.ColumnHeader(); + this.groupBox9.SuspendLayout(); + this.groupBox10.SuspendLayout(); + this.groupBox12.SuspendLayout(); + base.SuspendLayout(); + this.groupBox9.Controls.Add(this.textBox2); + this.groupBox9.Controls.Add(this.ckCreateFamilyVpn); + this.groupBox9.Controls.Add(this.labCreateFamilyInter); + this.groupBox9.Controls.Add(this.label10); + this.groupBox9.Controls.Add(this.label13); + this.groupBox9.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.groupBox9.Location = new System.Drawing.Point(455, 12); + this.groupBox9.Name = "groupBox9"; + this.groupBox9.Size = new System.Drawing.Size(510, 126); + this.groupBox9.TabIndex = 17; + this.groupBox9.TabStop = false; + this.groupBox9.Text = "开通家庭共享 功能说明"; + this.textBox2.BackColor = System.Drawing.SystemColors.ControlLightLight; + this.textBox2.Location = new System.Drawing.Point(150, 80); + this.textBox2.Name = "textBox2"; + this.textBox2.ReadOnly = true; + this.textBox2.Size = new System.Drawing.Size(324, 23); + this.textBox2.TabIndex = 11; + this.textBox2.Text = "xxx@xx.com----密码--付款AppleID账号--付款密码"; + this.ckCreateFamilyVpn.AutoSize = true; + this.ckCreateFamilyVpn.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.ckCreateFamilyVpn.ForeColor = System.Drawing.Color.Red; + this.ckCreateFamilyVpn.Location = new System.Drawing.Point(18, 84); + this.ckCreateFamilyVpn.Name = "ckCreateFamilyVpn"; + this.ckCreateFamilyVpn.Size = new System.Drawing.Size(111, 21); + this.ckCreateFamilyVpn.TabIndex = 10; + this.ckCreateFamilyVpn.Text = "使用随机IP代理"; + this.ckCreateFamilyVpn.UseVisualStyleBackColor = true; + this.labCreateFamilyInter.AutoSize = true; + this.labCreateFamilyInter.Font = new System.Drawing.Font("微软雅黑", 10.5f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.labCreateFamilyInter.ForeColor = System.Drawing.Color.Crimson; + this.labCreateFamilyInter.Location = new System.Drawing.Point(103, 60); + this.labCreateFamilyInter.Name = "labCreateFamilyInter"; + this.labCreateFamilyInter.Size = new System.Drawing.Size(18, 19); + this.labCreateFamilyInter.TabIndex = 2; + this.labCreateFamilyInter.Text = "0"; + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(15, 62); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(92, 17); + this.label10.TabIndex = 1; + this.label10.Text = "查询消耗点数:"; + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(4, 31); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(500, 17); + this.label13.TabIndex = 0; + this.label13.Text = "开通家庭共享需要主账号绑定付款方式或者拥有付款方式的账号,付款账号可以是组织者账号\r\n"; + this.groupBox10.Controls.Add(this.labCreateFamilyCount); + this.groupBox10.Controls.Add(this.label16); + this.groupBox10.Controls.Add(this.btnLiteClre); + this.groupBox10.Controls.Add(this.btnCreateFamilyQuery); + this.groupBox10.Controls.Add(this.btnCreateFamilyInput); + this.groupBox10.Controls.Add(this.btnCreateFamilyExper); + this.groupBox10.Controls.Add(this.btnCreateFamilyStart); + this.groupBox10.Location = new System.Drawing.Point(12, 12); + this.groupBox10.Name = "groupBox10"; + this.groupBox10.Size = new System.Drawing.Size(437, 126); + this.groupBox10.TabIndex = 16; + this.groupBox10.TabStop = false; + this.groupBox10.Text = "操作"; + this.labCreateFamilyCount.AutoSize = true; + this.labCreateFamilyCount.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.labCreateFamilyCount.ForeColor = System.Drawing.Color.OrangeRed; + this.labCreateFamilyCount.Location = new System.Drawing.Point(282, 15); + this.labCreateFamilyCount.Name = "labCreateFamilyCount"; + this.labCreateFamilyCount.Size = new System.Drawing.Size(15, 17); + this.labCreateFamilyCount.TabIndex = 7; + this.labCreateFamilyCount.Text = "0"; + this.label16.AutoSize = true; + this.label16.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.label16.Location = new System.Drawing.Point(179, 16); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(95, 17); + this.label16.TabIndex = 6; + this.label16.Text = "列表中账号数量:"; + this.btnLiteClre.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnLiteClre.Location = new System.Drawing.Point(325, 75); + this.btnLiteClre.Name = "btnLiteClre"; + this.btnLiteClre.Size = new System.Drawing.Size(96, 23); + this.btnLiteClre.TabIndex = 5; + this.btnLiteClre.Text = "清空账号列表"; + this.btnLiteClre.UseVisualStyleBackColor = true; + this.btnLiteClre.Click += new System.EventHandler(btnLiteClre_Click); + this.btnCreateFamilyQuery.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnCreateFamilyQuery.Location = new System.Drawing.Point(179, 42); + this.btnCreateFamilyQuery.Name = "btnCreateFamilyQuery"; + this.btnCreateFamilyQuery.Size = new System.Drawing.Size(140, 23); + this.btnCreateFamilyQuery.TabIndex = 4; + this.btnCreateFamilyQuery.Text = "开通家庭共享记录"; + this.btnCreateFamilyQuery.UseVisualStyleBackColor = true; + this.btnCreateFamilyQuery.Click += new System.EventHandler(btnCreateFamilyQuery_Click); + this.btnCreateFamilyInput.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnCreateFamilyInput.Location = new System.Drawing.Point(179, 76); + this.btnCreateFamilyInput.Name = "btnCreateFamilyInput"; + this.btnCreateFamilyInput.Size = new System.Drawing.Size(140, 23); + this.btnCreateFamilyInput.TabIndex = 3; + this.btnCreateFamilyInput.Text = "账号输入"; + this.btnCreateFamilyInput.UseVisualStyleBackColor = true; + this.btnCreateFamilyInput.Click += new System.EventHandler(btnCreateFamilyInput_Click); + this.btnCreateFamilyExper.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnCreateFamilyExper.Location = new System.Drawing.Point(325, 42); + this.btnCreateFamilyExper.Name = "btnCreateFamilyExper"; + this.btnCreateFamilyExper.Size = new System.Drawing.Size(96, 23); + this.btnCreateFamilyExper.TabIndex = 2; + this.btnCreateFamilyExper.Text = "导出账号"; + this.btnCreateFamilyExper.UseVisualStyleBackColor = true; + this.btnCreateFamilyExper.Click += new System.EventHandler(btnCreateFamilyExper_Click); + this.btnCreateFamilyStart.Font = new System.Drawing.Font("微软雅黑", 10.5f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.btnCreateFamilyStart.ForeColor = System.Drawing.Color.Green; + this.btnCreateFamilyStart.Location = new System.Drawing.Point(18, 33); + this.btnCreateFamilyStart.Name = "btnCreateFamilyStart"; + this.btnCreateFamilyStart.Size = new System.Drawing.Size(110, 65); + this.btnCreateFamilyStart.TabIndex = 1; + this.btnCreateFamilyStart.Text = "开始执行"; + this.btnCreateFamilyStart.UseVisualStyleBackColor = true; + this.btnCreateFamilyStart.Click += new System.EventHandler(btnCreateFamilyStart_Click); + this.groupBox12.Controls.Add(this.listCreateFamily); + this.groupBox12.Location = new System.Drawing.Point(9, 144); + this.groupBox12.Name = "groupBox12"; + this.groupBox12.Size = new System.Drawing.Size(956, 408); + this.groupBox12.TabIndex = 15; + this.groupBox12.TabStop = false; + this.groupBox12.Text = "iCloud账号列表"; + this.listCreateFamily.Columns.AddRange(new System.Windows.Forms.ColumnHeader[7] { this.columnHeader8, this.columnHeader9, this.columnHeader10, this.columnHeader2, this.columnHeader11, this.columnHeader1, this.columnHeader14 }); + this.listCreateFamily.Dock = System.Windows.Forms.DockStyle.Fill; + this.listCreateFamily.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.listCreateFamily.FullRowSelect = true; + this.listCreateFamily.HideSelection = false; + this.listCreateFamily.Location = new System.Drawing.Point(3, 17); + this.listCreateFamily.Name = "listCreateFamily"; + this.listCreateFamily.Size = new System.Drawing.Size(950, 388); + this.listCreateFamily.TabIndex = 0; + this.listCreateFamily.UseCompatibleStateImageBehavior = false; + this.listCreateFamily.View = System.Windows.Forms.View.Details; + this.columnHeader8.Text = "序号"; + this.columnHeader9.Text = "账号"; + this.columnHeader9.Width = 150; + this.columnHeader10.Text = "密码"; + this.columnHeader10.Width = 100; + this.columnHeader2.Text = "付款账号"; + this.columnHeader2.Width = 150; + this.columnHeader11.Text = "付款密码"; + this.columnHeader11.Width = 100; + this.columnHeader1.Text = "状态"; + this.columnHeader1.Width = 80; + this.columnHeader14.Text = "信息"; + this.columnHeader14.Width = 250; + base.AutoScaleDimensions = new System.Drawing.SizeF(6f, 12f); + base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + base.ClientSize = new System.Drawing.Size(975, 565); + base.Controls.Add(this.groupBox9); + base.Controls.Add(this.groupBox10); + base.Controls.Add(this.groupBox12); + base.MaximizeBox = false; + base.Name = "FromCreateFamily"; + base.ShowIcon = false; + this.Text = "开通家庭共享"; + base.Load += new System.EventHandler(FromCreateFamily_Load); + this.groupBox9.ResumeLayout(false); + this.groupBox9.PerformLayout(); + this.groupBox10.ResumeLayout(false); + this.groupBox10.PerformLayout(); + this.groupBox12.ResumeLayout(false); + base.ResumeLayout(false); + } + } +} diff --git a/AppleBatch_June.Forms/FromLeaveFamily.cs b/AppleBatch_June.Forms/FromLeaveFamily.cs new file mode 100644 index 0000000..9ec9a1f --- /dev/null +++ b/AppleBatch_June.Forms/FromLeaveFamily.cs @@ -0,0 +1,494 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Linq; +using System.Windows.Forms; +using AppleBatch_June.ExecuteTasks; +using AppleBatch_June.Model; +using AppleBatch_June.Views; + +namespace AppleBatch_June.Forms +{ + public class FromLeaveFamily : BaseForm + { + private IContainer components; + + private GroupBox groupBox9; + + private TextBox textBox2; + + private CheckBox ckLeaveFamilyVpn; + + private Label labLeaveFamilyInter; + + private Label label10; + + private Label label13; + + private GroupBox groupBox10; + + private Label labLeaveFamilyCount; + + private Label label16; + + private Button btnLiteClre; + + private Button btnLeaveFamilyQuery; + + private Button btnLeaveFamilyInput; + + private Button btnLeaveFamilyExper; + + private Button btnLeaveFamilyStart; + + private GroupBox groupBox12; + + private DoubleBufferListView listLeaveFamily; + + private ColumnHeader columnHeader8; + + private ColumnHeader columnHeader9; + + private ColumnHeader columnHeader10; + + private ColumnHeader columnHeader1; + + private ColumnHeader columnHeader14; + + private ColumnHeader columnHeader3; + + public FromLeaveFamily() + : base("关闭家庭共享", LeaveFamilyTask.Instance) + { + InitializeComponent(); + } + + private void FromLeaveFamily_Load(object sender, EventArgs e) + { + base.listData = listLeaveFamily; + base.labCout = labLeaveFamilyCount; + base.startBtn = btnLeaveFamilyStart; + labLeaveFamilyInter.Text = AppSysConfig.getTypeById(30).consNum.ToString(); + ckLeaveFamilyVpn.Checked = ((ConfigUtlis.getConfigValue("ckLeaveFamilyVpn") == "True") ? true : false); + InitLv(base.listData); + BindMenuStrip(addTwoFactor: true); + } + + private void btnLeaveFamilyStart_Click(object sender, EventArgs e) + { + if (!LeaveFamilyTask.Instance.isRun && !LeaveFamilyTask.Instance.TaskIsRun) + { + List lvItems = (from ListViewItem c in base.listData.Items + where c.SubItems[3].Text == "-" + select new AppleAcount + { + appleId = c.SubItems[1].Text, + applePwd = c.SubItems[2].Text + }).ToList(); + RearTaskRun(lvItems); + return; + } + LeaveFamilyTask.Instance.Stop(); + if (!base.IsDisposed) + { + Invoke((Action)delegate + { + base.startBtn.Text = "正在停止"; + base.startBtn.ForeColor = Color.Red; + }); + } + } + + private void RearTaskRun(List lvItems) + { + int id = 30; + int count = lvItems.Count; + if (AppSysConfig.integral < count * AppSysConfig.getTypeById(30).consNum) + { + MessageBox.Show("账号点数不足 , 执行账号数量:" + count + " ,至少需要 " + count * AppSysConfig.getTypeById(id).consNum + " 点数。"); + } + else + { + ConfigUtlis.saveConfigKey("ckLeaveFamilyVpn", ckLeaveFamilyVpn.Checked.ToString()); + LeaveFamilyTask.Instance.ExecuteLeaveFamily(2, ckLeaveFamilyVpn.Checked, lvItems, base.startAct, base.endTakAct, sucessAct, _action); + } + } + + public void sucessAct(string AppleId) + { + UpdataUi(delegate + { + ListViewItem listViewItem = (from ListViewItem c in base.listData.Items + where c.SubItems[1].Text == AppleId + select c).FirstOrDefault(); + if (listViewItem != null) + { + SqliteHelper.ExecuteInsert("itunes_db", new Dictionary + { + { "type", "leaveFamily" }, + { + "addTime", + Tools.GenerateTimeStamp().ToString() + }, + { + "value1", + listViewItem.SubItems[1].Text + }, + { + "value2", + listViewItem.SubItems[2].Text + }, + { + "value3", + listViewItem.SubItems[3].Text + }, + { + "value4", + listViewItem.SubItems[4].Text + }, + { + "value5", + listViewItem.SubItems[5].Text + } + }); + } + }); + } + + public void _action(string key, DisplyType type, string reust) + { + UpdataUi(delegate + { + IEnumerable enumerable = from ListViewItem c in base.listData.Items + where c.SubItems[1].Text == key + select c; + Font font = new Font(Font, FontStyle.Bold); + foreach (ListViewItem item in enumerable) + { + switch (type) + { + case DisplyType.forbidden: + item.SubItems[4].Text = reust; + item.SubItems[4].Font = font; + item.SubItems[4].ForeColor = Color.Green; + break; + case DisplyType.xinxi: + item.SubItems[5].Text = reust; + break; + case DisplyType.error: + item.SubItems[4].Text = reust; + item.SubItems[4].Font = font; + item.SubItems[4].ForeColor = Color.Red; + break; + case DisplyType.chongzhi: + item.SubItems[3].Text = reust; + item.SubItems[5].Text = reust; + item.SubItems[5].ForeColor = Color.Black; + break; + case DisplyType.area: + item.SubItems[3].Text = reust; + break; + } + } + }); + } + + private void btnLeaveFamilyInput_Click(object sender, EventArgs e) + { + FromInputAcount fromInputAcount = new FromInputAcount(); + fromInputAcount.tipMssage = textBox2.Text; + fromInputAcount.isOpenSysVpn = ckLeaveFamilyVpn.Checked; + if (fromInputAcount.ShowDialog() == DialogResult.OK) + { + List list = AppleUtlis.accountInput(fromInputAcount.StrInput); + int num = 0; + base.listData.ListViewItemSorter = new ListViewItemComparer(0, 1); + base.listData.Sort(); + if (base.listData.Items.Count > 0 && int.TryParse(base.listData.Items[base.listData.Items.Count - 1].SubItems[0].Text, out var result)) + { + num = result; + } + foreach (AppleAcount item in list) + { + num++; + ListViewItem listViewItem = new ListViewItem(num.ToString()); + listViewItem.UseItemStyleForSubItems = false; + listViewItem.SubItems.Add(item.appleId); + listViewItem.SubItems.Add(item.applePwd); + listViewItem.SubItems.Add("-"); + listViewItem.SubItems.Add("-"); + listViewItem.SubItems.Add("-"); + base.listData.Items.Add(listViewItem); + } + } + base.labCout.Text = string.Concat(base.listData.Items.Count); + } + + private void btnLiteClre_Click(object sender, EventArgs e) + { + if (MessageBox.Show("确认删除列表数据吗", "提示", MessageBoxButtons.OKCancel) == DialogResult.OK) + { + base.listData.Items.Clear(); + } + base.labCout.Text = string.Concat(base.listData.Items.Count); + } + + private void btnLeaveFamilyExper_Click(object sender, EventArgs e) + { + ExperList(base.listData); + } + + public override void TwoFactorItem_over_Click(string reust) + { + List list = new List(); + foreach (ListViewItem selectedItem in base.listData.SelectedItems) + { + list.Add(new AppleAcount + { + appleId = selectedItem.SubItems[1].Text, + applePwd = selectedItem.SubItems[2].Text + reust + }); + } + RearTaskRun(list); + } + + public override void ReExecute_Click(object sender, EventArgs e) + { + if (LeaveFamilyTask.Instance.TaskIsRun) + { + MessageBox.Show("请先停止"); + return; + } + List list = new List(); + foreach (ListViewItem selectedItem in base.listData.SelectedItems) + { + list.Add(new AppleAcount + { + appleId = selectedItem.SubItems[1].Text, + applePwd = selectedItem.SubItems[2].Text + }); + } + RearTaskRun(list); + } + + private void btnLeaveFamilyQuery_Click(object sender, EventArgs e) + { + FromDBDataQuery fromDBDataQuery = new FromDBDataQuery(); + fromDBDataQuery.sqlTitle = new Dictionary + { + { "value1", "账号|180" }, + { "value2", "密码|100" }, + { "value3", "国家|80" }, + { "value4", "状态|100" }, + { "value5", "信息|150" } + }; + fromDBDataQuery.type = "leaveFamily"; + fromDBDataQuery.typeName = "关闭家庭共享记录"; + fromDBDataQuery.Show(); + } + + protected override void Dispose(bool disposing) + { + if (disposing && components != null) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.groupBox9 = new System.Windows.Forms.GroupBox(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.ckLeaveFamilyVpn = new System.Windows.Forms.CheckBox(); + this.labLeaveFamilyInter = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.label13 = new System.Windows.Forms.Label(); + this.groupBox10 = new System.Windows.Forms.GroupBox(); + this.labLeaveFamilyCount = new System.Windows.Forms.Label(); + this.label16 = new System.Windows.Forms.Label(); + this.btnLiteClre = new System.Windows.Forms.Button(); + this.btnLeaveFamilyQuery = new System.Windows.Forms.Button(); + this.btnLeaveFamilyInput = new System.Windows.Forms.Button(); + this.btnLeaveFamilyExper = new System.Windows.Forms.Button(); + this.btnLeaveFamilyStart = new System.Windows.Forms.Button(); + this.groupBox12 = new System.Windows.Forms.GroupBox(); + this.listLeaveFamily = new AppleBatch_June.Views.DoubleBufferListView(); + this.columnHeader8 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader9 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader10 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader3 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader1 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader14 = new System.Windows.Forms.ColumnHeader(); + this.groupBox9.SuspendLayout(); + this.groupBox10.SuspendLayout(); + this.groupBox12.SuspendLayout(); + base.SuspendLayout(); + this.groupBox9.Controls.Add(this.textBox2); + this.groupBox9.Controls.Add(this.ckLeaveFamilyVpn); + this.groupBox9.Controls.Add(this.labLeaveFamilyInter); + this.groupBox9.Controls.Add(this.label10); + this.groupBox9.Controls.Add(this.label13); + this.groupBox9.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.groupBox9.Location = new System.Drawing.Point(455, 12); + this.groupBox9.Name = "groupBox9"; + this.groupBox9.Size = new System.Drawing.Size(510, 126); + this.groupBox9.TabIndex = 20; + this.groupBox9.TabStop = false; + this.groupBox9.Text = "关闭家庭共享 功能说明"; + this.textBox2.BackColor = System.Drawing.SystemColors.ControlLightLight; + this.textBox2.Location = new System.Drawing.Point(151, 81); + this.textBox2.Name = "textBox2"; + this.textBox2.ReadOnly = true; + this.textBox2.Size = new System.Drawing.Size(324, 23); + this.textBox2.TabIndex = 11; + this.textBox2.Text = "导入格式:xxx@xx.com----密码"; + this.ckLeaveFamilyVpn.AutoSize = true; + this.ckLeaveFamilyVpn.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.ckLeaveFamilyVpn.ForeColor = System.Drawing.Color.Red; + this.ckLeaveFamilyVpn.Location = new System.Drawing.Point(18, 87); + this.ckLeaveFamilyVpn.Name = "ckLeaveFamilyVpn"; + this.ckLeaveFamilyVpn.Size = new System.Drawing.Size(111, 21); + this.ckLeaveFamilyVpn.TabIndex = 10; + this.ckLeaveFamilyVpn.Text = "使用随机IP代理"; + this.ckLeaveFamilyVpn.UseVisualStyleBackColor = true; + this.labLeaveFamilyInter.AutoSize = true; + this.labLeaveFamilyInter.Font = new System.Drawing.Font("微软雅黑", 10.5f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.labLeaveFamilyInter.ForeColor = System.Drawing.Color.Crimson; + this.labLeaveFamilyInter.Location = new System.Drawing.Point(103, 60); + this.labLeaveFamilyInter.Name = "labLeaveFamilyInter"; + this.labLeaveFamilyInter.Size = new System.Drawing.Size(18, 19); + this.labLeaveFamilyInter.TabIndex = 2; + this.labLeaveFamilyInter.Text = "0"; + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(15, 62); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(92, 17); + this.label10.TabIndex = 1; + this.label10.Text = "查询消耗点数:"; + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(15, 28); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(416, 17); + this.label13.TabIndex = 0; + this.label13.Text = "如果是组织者关闭家庭共享,则解散整个家庭共享,如果是成员,则退出家庭"; + this.groupBox10.Controls.Add(this.labLeaveFamilyCount); + this.groupBox10.Controls.Add(this.label16); + this.groupBox10.Controls.Add(this.btnLiteClre); + this.groupBox10.Controls.Add(this.btnLeaveFamilyQuery); + this.groupBox10.Controls.Add(this.btnLeaveFamilyInput); + this.groupBox10.Controls.Add(this.btnLeaveFamilyExper); + this.groupBox10.Controls.Add(this.btnLeaveFamilyStart); + this.groupBox10.Location = new System.Drawing.Point(12, 12); + this.groupBox10.Name = "groupBox10"; + this.groupBox10.Size = new System.Drawing.Size(437, 126); + this.groupBox10.TabIndex = 19; + this.groupBox10.TabStop = false; + this.groupBox10.Text = "操作"; + this.labLeaveFamilyCount.AutoSize = true; + this.labLeaveFamilyCount.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.labLeaveFamilyCount.ForeColor = System.Drawing.Color.OrangeRed; + this.labLeaveFamilyCount.Location = new System.Drawing.Point(282, 15); + this.labLeaveFamilyCount.Name = "labLeaveFamilyCount"; + this.labLeaveFamilyCount.Size = new System.Drawing.Size(15, 17); + this.labLeaveFamilyCount.TabIndex = 7; + this.labLeaveFamilyCount.Text = "0"; + this.label16.AutoSize = true; + this.label16.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.label16.Location = new System.Drawing.Point(179, 16); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(95, 17); + this.label16.TabIndex = 6; + this.label16.Text = "列表中账号数量:"; + this.btnLiteClre.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnLiteClre.Location = new System.Drawing.Point(325, 75); + this.btnLiteClre.Name = "btnLiteClre"; + this.btnLiteClre.Size = new System.Drawing.Size(96, 23); + this.btnLiteClre.TabIndex = 5; + this.btnLiteClre.Text = "清空账号列表"; + this.btnLiteClre.UseVisualStyleBackColor = true; + this.btnLiteClre.Click += new System.EventHandler(btnLiteClre_Click); + this.btnLeaveFamilyQuery.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnLeaveFamilyQuery.Location = new System.Drawing.Point(179, 42); + this.btnLeaveFamilyQuery.Name = "btnLeaveFamilyQuery"; + this.btnLeaveFamilyQuery.Size = new System.Drawing.Size(140, 23); + this.btnLeaveFamilyQuery.TabIndex = 4; + this.btnLeaveFamilyQuery.Text = "关闭家庭共享记录"; + this.btnLeaveFamilyQuery.UseVisualStyleBackColor = true; + this.btnLeaveFamilyQuery.Click += new System.EventHandler(btnLeaveFamilyQuery_Click); + this.btnLeaveFamilyInput.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnLeaveFamilyInput.Location = new System.Drawing.Point(179, 76); + this.btnLeaveFamilyInput.Name = "btnLeaveFamilyInput"; + this.btnLeaveFamilyInput.Size = new System.Drawing.Size(140, 23); + this.btnLeaveFamilyInput.TabIndex = 3; + this.btnLeaveFamilyInput.Text = "账号输入"; + this.btnLeaveFamilyInput.UseVisualStyleBackColor = true; + this.btnLeaveFamilyInput.Click += new System.EventHandler(btnLeaveFamilyInput_Click); + this.btnLeaveFamilyExper.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnLeaveFamilyExper.Location = new System.Drawing.Point(325, 42); + this.btnLeaveFamilyExper.Name = "btnLeaveFamilyExper"; + this.btnLeaveFamilyExper.Size = new System.Drawing.Size(96, 23); + this.btnLeaveFamilyExper.TabIndex = 2; + this.btnLeaveFamilyExper.Text = "导出账号"; + this.btnLeaveFamilyExper.UseVisualStyleBackColor = true; + this.btnLeaveFamilyExper.Click += new System.EventHandler(btnLeaveFamilyExper_Click); + this.btnLeaveFamilyStart.Font = new System.Drawing.Font("微软雅黑", 10.5f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.btnLeaveFamilyStart.ForeColor = System.Drawing.Color.Green; + this.btnLeaveFamilyStart.Location = new System.Drawing.Point(18, 33); + this.btnLeaveFamilyStart.Name = "btnLeaveFamilyStart"; + this.btnLeaveFamilyStart.Size = new System.Drawing.Size(110, 65); + this.btnLeaveFamilyStart.TabIndex = 1; + this.btnLeaveFamilyStart.Text = "开始执行"; + this.btnLeaveFamilyStart.UseVisualStyleBackColor = true; + this.btnLeaveFamilyStart.Click += new System.EventHandler(btnLeaveFamilyStart_Click); + this.groupBox12.Controls.Add(this.listLeaveFamily); + this.groupBox12.Location = new System.Drawing.Point(9, 144); + this.groupBox12.Name = "groupBox12"; + this.groupBox12.Size = new System.Drawing.Size(956, 408); + this.groupBox12.TabIndex = 18; + this.groupBox12.TabStop = false; + this.groupBox12.Text = "iCloud账号列表"; + this.listLeaveFamily.Columns.AddRange(new System.Windows.Forms.ColumnHeader[6] { this.columnHeader8, this.columnHeader9, this.columnHeader10, this.columnHeader3, this.columnHeader1, this.columnHeader14 }); + this.listLeaveFamily.Dock = System.Windows.Forms.DockStyle.Fill; + this.listLeaveFamily.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.listLeaveFamily.FullRowSelect = true; + this.listLeaveFamily.HideSelection = false; + this.listLeaveFamily.Location = new System.Drawing.Point(3, 17); + this.listLeaveFamily.Name = "listLeaveFamily"; + this.listLeaveFamily.Size = new System.Drawing.Size(950, 388); + this.listLeaveFamily.TabIndex = 0; + this.listLeaveFamily.UseCompatibleStateImageBehavior = false; + this.listLeaveFamily.View = System.Windows.Forms.View.Details; + this.columnHeader8.Text = "序号"; + this.columnHeader9.Text = "账号"; + this.columnHeader9.Width = 150; + this.columnHeader10.Text = "密码"; + this.columnHeader10.Width = 100; + this.columnHeader3.Text = "国家"; + this.columnHeader3.Width = 100; + this.columnHeader1.Text = "状态"; + this.columnHeader1.Width = 100; + this.columnHeader14.Text = "信息"; + this.columnHeader14.Width = 350; + base.AutoScaleDimensions = new System.Drawing.SizeF(6f, 12f); + base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + base.ClientSize = new System.Drawing.Size(977, 561); + base.Controls.Add(this.groupBox9); + base.Controls.Add(this.groupBox10); + base.Controls.Add(this.groupBox12); + base.MaximizeBox = false; + base.Name = "FromLeaveFamily"; + base.ShowIcon = false; + base.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "关闭家庭共享"; + base.Load += new System.EventHandler(FromLeaveFamily_Load); + this.groupBox9.ResumeLayout(false); + this.groupBox9.PerformLayout(); + this.groupBox10.ResumeLayout(false); + this.groupBox10.PerformLayout(); + this.groupBox12.ResumeLayout(false); + base.ResumeLayout(false); + } + } +} diff --git a/AppleBatch_June.Forms/FromOvercheck.cs b/AppleBatch_June.Forms/FromOvercheck.cs new file mode 100644 index 0000000..cc2e96e --- /dev/null +++ b/AppleBatch_June.Forms/FromOvercheck.cs @@ -0,0 +1,555 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Linq; +using System.Windows.Forms; +using AppleBatch_June.Domain; +using AppleBatch_June.ExecuteTasks; +using AppleBatch_June.Model; +using AppleBatch_June.Views; + +namespace AppleBatch_June.Forms +{ + public class FromOvercheck : BaseForm + { + private IContainer components; + + private GroupBox groupBox9; + + private TextBox textBox2; + + private CheckBox ckOvercheckVpn; + + private Label labOvercheckInter; + + private Label label10; + + private Label label13; + + private GroupBox groupBox10; + + private Label labOvercheckCount; + + private Label label16; + + private Button btnOvercheckLiteClre; + + private Button btnOvercheckQuery; + + private Button btnOvercheckInput; + + private Button btnOvercheckExper; + + private Button btnOvercheckStart; + + private GroupBox groupBox12; + + private DoubleBufferListView listOvercheck; + + private ColumnHeader columnHeader8; + + private ColumnHeader columnHeader9; + + private ColumnHeader columnHeader10; + + private ColumnHeader columnHeader1; + + private ColumnHeader columnHeader14; + + private ColumnHeader columnHeader3; + + private Label label1; + + private ComboBox ComCountrySelectList; + + private Label label63; + + public FromOvercheck() + : base("AppStore检查", OvercheckTask.Instance) + { + InitializeComponent(); + } + + private void FromLeaveFamily_Load(object sender, EventArgs e) + { + base.listData = listOvercheck; + base.labCout = labOvercheckCount; + base.startBtn = btnOvercheckStart; + labOvercheckInter.Text = AppSysConfig.getTypeById(41).consNum.ToString(); + label13.Text = label13.Text.Replace("{0}", AppSysConfig.getTypeById(42).consNum.ToString()); + ckOvercheckVpn.Checked = ((ConfigUtlis.getConfigValue("ckOvercheckVpn") == "True") ? true : false); + InitLv(base.listData); + ToolStripMenuItem toolStripMenuItem = new ToolStripMenuItem + { + Text = "设置显示列", + Size = new Size(124, 22) + }; + toolStripMenuItem.Click += base.ShouItemsIndex_Click; + BindMenuStrip(addTwoFactor: true, new ToolStripMenuItem[1] { toolStripMenuItem }); + ComCountrySelectList.DisplayMember = "name"; + ComCountrySelectList.ValueMember = "Id"; + List mation = new NationalData().getMation(); + mation.Insert(0, new NationalList + { + Id = "-", + name = "请选择", + payment = null + }); + ComCountrySelectList.DataSource = mation; + } + + private void btnLeaveFamilyStart_Click(object sender, EventArgs e) + { + if (!OvercheckTask.Instance.isRun && !OvercheckTask.Instance.TaskIsRun) + { + List lvItems = (from ListViewItem c in base.listData.Items + where c.SubItems[3].Text == "-" + select new AppleAcount + { + appleId = c.SubItems[1].Text, + applePwd = c.SubItems[2].Text + }).ToList(); + RearTaskRun(lvItems); + return; + } + OvercheckTask.Instance.Stop(); + if (!base.IsDisposed) + { + Invoke((Action)delegate + { + base.startBtn.Text = "正在停止"; + base.startBtn.ForeColor = Color.Red; + }); + } + } + + private void RearTaskRun(List lvItems) + { + int id = 41; + int count = lvItems.Count; + if (AppSysConfig.integral < count * AppSysConfig.getTypeById(41).consNum) + { + MessageBox.Show("账号点数不足 , 执行账号数量:" + count + " ,至少需要 " + count * AppSysConfig.getTypeById(id).consNum + " 点数。"); + return; + } + ConfigUtlis.saveConfigKey("ckOvercheckVpn", ckOvercheckVpn.Checked.ToString()); + NationalList nationalList = ComCountrySelectList.SelectedItem as NationalList; + PaymentInfo payment = null; + if (nationalList != null) + { + payment = nationalList.payment; + } + btnOvercheckStart.Tag = base.listData.Items.Cast().ToList(); + OvercheckTask.Instance.ExecuteLeaveFamily(2, ckOvercheckVpn.Checked, lvItems, payment, base.startAct, base.endTakAct, sucessAct, _action); + } + + public void sucessAct(string AppleId) + { + UpdataUi(delegate + { + if (btnOvercheckStart.Tag == null) + { + btnOvercheckStart.Tag = base.listData.Items.Cast().ToList(); + } + ListViewItem listViewItem = (btnOvercheckStart.Tag as List).Where((ListViewItem c) => c.SubItems[1].Text == AppleId).FirstOrDefault(); + if (listViewItem != null) + { + SqliteHelper.ExecuteInsert("itunes_db", new Dictionary + { + { "type", "overcheck" }, + { + "addTime", + Tools.GenerateTimeStamp().ToString() + }, + { + "value1", + listViewItem.SubItems[1].Text + }, + { + "value2", + listViewItem.SubItems[2].Text + }, + { + "value3", + listViewItem.SubItems[3].Text + }, + { + "value4", + listViewItem.SubItems[4].Text + }, + { + "value5", + listViewItem.SubItems[5].Text + } + }); + } + }); + } + + public void _action(string key, DisplyType type, string reust) + { + UpdataUi(delegate + { + if (btnOvercheckStart.Tag == null) + { + btnOvercheckStart.Tag = base.listData.Items.Cast().ToList(); + } + IEnumerable enumerable = (btnOvercheckStart.Tag as List).Where((ListViewItem c) => c.SubItems[1].Text == key); + Font font = new Font(Font, FontStyle.Bold); + foreach (ListViewItem item in enumerable) + { + switch (type) + { + case DisplyType.forbidden: + item.SubItems[4].Text = reust; + item.SubItems[4].Font = font; + item.SubItems[4].ForeColor = Color.Green; + break; + case DisplyType.xinxi: + item.SubItems[5].Text = reust; + break; + case DisplyType.error: + item.SubItems[4].Text = reust; + item.SubItems[4].Font = font; + item.SubItems[4].ForeColor = Color.Red; + break; + case DisplyType.chongzhi: + item.SubItems[3].Text = reust; + item.SubItems[4].Text = reust; + item.SubItems[4].Text = reust; + item.SubItems[4].ForeColor = Color.Black; + break; + case DisplyType.area: + item.SubItems[3].Text = reust; + break; + } + } + }); + } + + private void btnLeaveFamilyInput_Click(object sender, EventArgs e) + { + FromInputAcount fromInputAcount = new FromInputAcount(); + fromInputAcount.tipMssage = textBox2.Text; + fromInputAcount.isOpenSysVpn = ckOvercheckVpn.Checked; + if (fromInputAcount.ShowDialog() == DialogResult.OK) + { + List list = AppleUtlis.accountInput(fromInputAcount.StrInput); + int num = 0; + base.listData.ListViewItemSorter = new ListViewItemComparer(0, 1); + base.listData.Sort(); + if (base.listData.Items.Count > 0 && int.TryParse(base.listData.Items[base.listData.Items.Count - 1].SubItems[0].Text, out var result)) + { + num = result; + } + List list2 = new List(); + foreach (AppleAcount item in list) + { + num++; + ListViewItem listViewItem = new ListViewItem(num.ToString()); + listViewItem.UseItemStyleForSubItems = false; + listViewItem.SubItems.Add(item.appleId); + listViewItem.SubItems.Add(item.applePwd); + listViewItem.SubItems.Add("-"); + listViewItem.SubItems.Add("-"); + listViewItem.SubItems.Add("-"); + list2.Add(listViewItem); + } + base.listData.Items.AddRange(list2.ToArray()); + } + base.labCout.Text = string.Concat(base.listData.Items.Count); + } + + private void btnLiteClre_Click(object sender, EventArgs e) + { + if (MessageBox.Show("确认删除列表数据吗", "提示", MessageBoxButtons.OKCancel) == DialogResult.OK) + { + base.listData.Items.Clear(); + } + base.labCout.Text = string.Concat(base.listData.Items.Count); + } + + private void btnLeaveFamilyExper_Click(object sender, EventArgs e) + { + ExperList(base.listData); + } + + public override void TwoFactorItem_over_Click(string reust) + { + List list = new List(); + foreach (ListViewItem selectedItem in base.listData.SelectedItems) + { + list.Add(new AppleAcount + { + appleId = selectedItem.SubItems[1].Text, + applePwd = selectedItem.SubItems[2].Text, + isDoubleModl = true, + DoublePwd = reust + }); + } + RearTaskRun(list); + } + + public override void ReExecute_Click(object sender, EventArgs e) + { + if (OvercheckTask.Instance.TaskIsRun) + { + MessageBox.Show("请先停止"); + return; + } + List list = new List(); + foreach (ListViewItem selectedItem in base.listData.SelectedItems) + { + list.Add(new AppleAcount + { + appleId = selectedItem.SubItems[1].Text, + applePwd = selectedItem.SubItems[2].Text + }); + } + RearTaskRun(list); + } + + private void btnLeaveFamilyQuery_Click(object sender, EventArgs e) + { + FromDBDataQuery fromDBDataQuery = new FromDBDataQuery(); + fromDBDataQuery.sqlTitle = new Dictionary + { + { "value1", "账号|180" }, + { "value2", "密码|100" }, + { "value3", "国家|80" }, + { "value4", "状态|100" }, + { "value5", "信息|150" } + }; + fromDBDataQuery.type = "overcheck"; + fromDBDataQuery.typeName = "AppStore过检记录"; + fromDBDataQuery.Show(); + } + + protected override void Dispose(bool disposing) + { + if (disposing && components != null) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.groupBox9 = new System.Windows.Forms.GroupBox(); + this.ComCountrySelectList = new System.Windows.Forms.ComboBox(); + this.label63 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.ckOvercheckVpn = new System.Windows.Forms.CheckBox(); + this.labOvercheckInter = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.label13 = new System.Windows.Forms.Label(); + this.groupBox10 = new System.Windows.Forms.GroupBox(); + this.labOvercheckCount = new System.Windows.Forms.Label(); + this.label16 = new System.Windows.Forms.Label(); + this.btnOvercheckLiteClre = new System.Windows.Forms.Button(); + this.btnOvercheckQuery = new System.Windows.Forms.Button(); + this.btnOvercheckInput = new System.Windows.Forms.Button(); + this.btnOvercheckExper = new System.Windows.Forms.Button(); + this.btnOvercheckStart = new System.Windows.Forms.Button(); + this.groupBox12 = new System.Windows.Forms.GroupBox(); + this.listOvercheck = new AppleBatch_June.Views.DoubleBufferListView(); + this.columnHeader8 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader9 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader10 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader3 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader1 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader14 = new System.Windows.Forms.ColumnHeader(); + this.groupBox9.SuspendLayout(); + this.groupBox10.SuspendLayout(); + this.groupBox12.SuspendLayout(); + base.SuspendLayout(); + this.groupBox9.Controls.Add(this.ComCountrySelectList); + this.groupBox9.Controls.Add(this.label63); + this.groupBox9.Controls.Add(this.label1); + this.groupBox9.Controls.Add(this.textBox2); + this.groupBox9.Controls.Add(this.ckOvercheckVpn); + this.groupBox9.Controls.Add(this.labOvercheckInter); + this.groupBox9.Controls.Add(this.label10); + this.groupBox9.Controls.Add(this.label13); + this.groupBox9.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.groupBox9.Location = new System.Drawing.Point(455, 12); + this.groupBox9.Name = "groupBox9"; + this.groupBox9.Size = new System.Drawing.Size(510, 126); + this.groupBox9.TabIndex = 20; + this.groupBox9.TabStop = false; + this.groupBox9.Text = "AppStore检查 功能说明"; + this.ComCountrySelectList.FormattingEnabled = true; + this.ComCountrySelectList.Location = new System.Drawing.Point(99, 55); + this.ComCountrySelectList.Name = "ComCountrySelectList"; + this.ComCountrySelectList.Size = new System.Drawing.Size(158, 25); + this.ComCountrySelectList.TabIndex = 14; + this.label63.AutoSize = true; + this.label63.Location = new System.Drawing.Point(13, 59); + this.label63.Name = "label63"; + this.label63.Size = new System.Drawing.Size(80, 17); + this.label63.TabIndex = 13; + this.label63.Text = "指定过检国家"; + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(271, 59); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(188, 17); + this.label1.TabIndex = 12; + this.label1.Text = "不指定国家则使用账号默认的国家"; + this.textBox2.BackColor = System.Drawing.SystemColors.ControlLightLight; + this.textBox2.Location = new System.Drawing.Point(265, 91); + this.textBox2.Name = "textBox2"; + this.textBox2.ReadOnly = true; + this.textBox2.Size = new System.Drawing.Size(238, 23); + this.textBox2.TabIndex = 11; + this.textBox2.Text = "导入格式:xxx@xx.com----密码"; + this.ckOvercheckVpn.AutoSize = true; + this.ckOvercheckVpn.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.ckOvercheckVpn.ForeColor = System.Drawing.Color.Red; + this.ckOvercheckVpn.Location = new System.Drawing.Point(18, 95); + this.ckOvercheckVpn.Name = "ckOvercheckVpn"; + this.ckOvercheckVpn.Size = new System.Drawing.Size(111, 21); + this.ckOvercheckVpn.TabIndex = 10; + this.ckOvercheckVpn.Text = "使用随机IP代理"; + this.ckOvercheckVpn.UseVisualStyleBackColor = true; + this.labOvercheckInter.AutoSize = true; + this.labOvercheckInter.Font = new System.Drawing.Font("微软雅黑", 10.5f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.labOvercheckInter.ForeColor = System.Drawing.Color.Crimson; + this.labOvercheckInter.Location = new System.Drawing.Point(223, 96); + this.labOvercheckInter.Name = "labOvercheckInter"; + this.labOvercheckInter.Size = new System.Drawing.Size(18, 19); + this.labOvercheckInter.TabIndex = 2; + this.labOvercheckInter.Text = "0"; + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(135, 97); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(92, 17); + this.label10.TabIndex = 1; + this.label10.Text = "查询消耗点数:"; + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(10, 27); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(475, 17); + this.label13.TabIndex = 0; + this.label13.Text = "启用之后可以正常使用 AppStore 和 iTunes 功能,无需过检账号和需要补资料扣 {0} 点\r\n"; + this.groupBox10.Controls.Add(this.labOvercheckCount); + this.groupBox10.Controls.Add(this.label16); + this.groupBox10.Controls.Add(this.btnOvercheckLiteClre); + this.groupBox10.Controls.Add(this.btnOvercheckQuery); + this.groupBox10.Controls.Add(this.btnOvercheckInput); + this.groupBox10.Controls.Add(this.btnOvercheckExper); + this.groupBox10.Controls.Add(this.btnOvercheckStart); + this.groupBox10.Location = new System.Drawing.Point(12, 12); + this.groupBox10.Name = "groupBox10"; + this.groupBox10.Size = new System.Drawing.Size(437, 126); + this.groupBox10.TabIndex = 19; + this.groupBox10.TabStop = false; + this.groupBox10.Text = "操作"; + this.labOvercheckCount.AutoSize = true; + this.labOvercheckCount.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.labOvercheckCount.ForeColor = System.Drawing.Color.OrangeRed; + this.labOvercheckCount.Location = new System.Drawing.Point(282, 15); + this.labOvercheckCount.Name = "labOvercheckCount"; + this.labOvercheckCount.Size = new System.Drawing.Size(15, 17); + this.labOvercheckCount.TabIndex = 7; + this.labOvercheckCount.Text = "0"; + this.label16.AutoSize = true; + this.label16.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.label16.Location = new System.Drawing.Point(179, 16); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(95, 17); + this.label16.TabIndex = 6; + this.label16.Text = "列表中账号数量:"; + this.btnOvercheckLiteClre.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnOvercheckLiteClre.Location = new System.Drawing.Point(325, 75); + this.btnOvercheckLiteClre.Name = "btnOvercheckLiteClre"; + this.btnOvercheckLiteClre.Size = new System.Drawing.Size(96, 23); + this.btnOvercheckLiteClre.TabIndex = 5; + this.btnOvercheckLiteClre.Text = "清空账号列表"; + this.btnOvercheckLiteClre.UseVisualStyleBackColor = true; + this.btnOvercheckLiteClre.Click += new System.EventHandler(btnLiteClre_Click); + this.btnOvercheckQuery.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnOvercheckQuery.Location = new System.Drawing.Point(179, 42); + this.btnOvercheckQuery.Name = "btnOvercheckQuery"; + this.btnOvercheckQuery.Size = new System.Drawing.Size(140, 23); + this.btnOvercheckQuery.TabIndex = 4; + this.btnOvercheckQuery.Text = "账号过检记录"; + this.btnOvercheckQuery.UseVisualStyleBackColor = true; + this.btnOvercheckQuery.Click += new System.EventHandler(btnLeaveFamilyQuery_Click); + this.btnOvercheckInput.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnOvercheckInput.Location = new System.Drawing.Point(179, 76); + this.btnOvercheckInput.Name = "btnOvercheckInput"; + this.btnOvercheckInput.Size = new System.Drawing.Size(140, 23); + this.btnOvercheckInput.TabIndex = 3; + this.btnOvercheckInput.Text = "账号输入"; + this.btnOvercheckInput.UseVisualStyleBackColor = true; + this.btnOvercheckInput.Click += new System.EventHandler(btnLeaveFamilyInput_Click); + this.btnOvercheckExper.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnOvercheckExper.Location = new System.Drawing.Point(325, 42); + this.btnOvercheckExper.Name = "btnOvercheckExper"; + this.btnOvercheckExper.Size = new System.Drawing.Size(96, 23); + this.btnOvercheckExper.TabIndex = 2; + this.btnOvercheckExper.Text = "导出账号"; + this.btnOvercheckExper.UseVisualStyleBackColor = true; + this.btnOvercheckExper.Click += new System.EventHandler(btnLeaveFamilyExper_Click); + this.btnOvercheckStart.Font = new System.Drawing.Font("微软雅黑", 10.5f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.btnOvercheckStart.ForeColor = System.Drawing.Color.Green; + this.btnOvercheckStart.Location = new System.Drawing.Point(18, 33); + this.btnOvercheckStart.Name = "btnOvercheckStart"; + this.btnOvercheckStart.Size = new System.Drawing.Size(110, 65); + this.btnOvercheckStart.TabIndex = 1; + this.btnOvercheckStart.Text = "开始执行"; + this.btnOvercheckStart.UseVisualStyleBackColor = true; + this.btnOvercheckStart.Click += new System.EventHandler(btnLeaveFamilyStart_Click); + this.groupBox12.Controls.Add(this.listOvercheck); + this.groupBox12.Location = new System.Drawing.Point(9, 144); + this.groupBox12.Name = "groupBox12"; + this.groupBox12.Size = new System.Drawing.Size(956, 408); + this.groupBox12.TabIndex = 18; + this.groupBox12.TabStop = false; + this.groupBox12.Text = "Apple账号列表"; + this.listOvercheck.Columns.AddRange(new System.Windows.Forms.ColumnHeader[6] { this.columnHeader8, this.columnHeader9, this.columnHeader10, this.columnHeader3, this.columnHeader1, this.columnHeader14 }); + this.listOvercheck.Dock = System.Windows.Forms.DockStyle.Fill; + this.listOvercheck.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.listOvercheck.FullRowSelect = true; + this.listOvercheck.HideSelection = false; + this.listOvercheck.Location = new System.Drawing.Point(3, 17); + this.listOvercheck.Name = "listOvercheck"; + this.listOvercheck.Size = new System.Drawing.Size(950, 388); + this.listOvercheck.TabIndex = 0; + this.listOvercheck.UseCompatibleStateImageBehavior = false; + this.listOvercheck.View = System.Windows.Forms.View.Details; + this.columnHeader8.Text = "序号"; + this.columnHeader9.Text = "账号"; + this.columnHeader9.Width = 150; + this.columnHeader10.Text = "密码"; + this.columnHeader10.Width = 100; + this.columnHeader3.Text = "国家"; + this.columnHeader3.Width = 100; + this.columnHeader1.Text = "状态"; + this.columnHeader1.Width = 100; + this.columnHeader14.Text = "信息"; + this.columnHeader14.Width = 350; + base.AutoScaleDimensions = new System.Drawing.SizeF(6f, 12f); + base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + base.ClientSize = new System.Drawing.Size(977, 561); + base.Controls.Add(this.groupBox9); + base.Controls.Add(this.groupBox10); + base.Controls.Add(this.groupBox12); + base.MaximizeBox = false; + base.Name = "FromOvercheck"; + base.ShowIcon = false; + base.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "AppStore 检查-过检"; + base.Load += new System.EventHandler(FromLeaveFamily_Load); + this.groupBox9.ResumeLayout(false); + this.groupBox9.PerformLayout(); + this.groupBox10.ResumeLayout(false); + this.groupBox10.PerformLayout(); + this.groupBox12.ResumeLayout(false); + base.ResumeLayout(false); + } + } +} diff --git a/AppleBatch_June.FromDBDataQuery.resx b/AppleBatch_June.FromDBDataQuery.resx new file mode 100644 index 0000000..aa6c342 --- /dev/null +++ b/AppleBatch_June.FromDBDataQuery.resx @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABNTeXN0ZW0uRHJhd2luZy5JY29uAgAAAAhJY29uRGF0YQhJY29uU2l6ZQcEAhNTeXN0ZW0uRHJhd2luZy5TaXplAgAAAAIAAAAJAwAAAAX8////E1N5c3RlbS5EcmF3aW5nLlNpemUCAAAABXdpZHRoBmhlaWdodAAACAgCAAAAAAAAAAAAAAAPAwAAAD4IAQACAAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAABABILAAASCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkOAH7ZPgB+2T4Aftk+AH7ZDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2S4Aftk+AH7ZfgB+2X4Aftl+AH7ZfgB+2X4Aftk+AH7ZLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkeAH7ZbgB+2a8AftnfAH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2c8AftmfAH7ZXgB+2R4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkOAH7ZXgB+2a8AftnvAH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8AftluAH7ZHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftleAH7ZzwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8AftleAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkeAH7ZnwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZrwB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftleAH7Z3wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftnfAH7ZXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkeAH7ZnwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8AftkeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7ZzwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZvwB+2R4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZbgB+2e8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2V4Aftn/AH7Z/wB+2f8Aftn/AIvn/wCl//8AqP//AKz//wCw//8As///ALb//wC6//8Av///AMT//wDK//8Azv//ANP//wDX//8A2v//AN3//wDf//8A4v//AOT//wDl//8A5///AOj//wDp//8A6v//AOr//wDq//8A6v//AOn//wDo//8AxvP/AH7Z/wB+2f8Aftn/AH7Z/wCM5/8Apf//AKn//wCs//8AsP//ALP//wC3//8Au///AMD//wDF//8Ay///AND//wDU//8A2P//ANv//wDd//8A4P//AOP//wDl//8A5///AOj//wDp//8A6v//AOv//wDs//8A7P//AOv//wDr//8A6v//AOn//wDn//8A5f//AOP//wDh//8AqOn/AH7Z/wB+2f8Aftn/AH7Z/wCa7v8AsP//ALD//wCn9/8AlOn/AIHb/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8AftkeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZnwB+2f8Aftn/AH7Z/wB+2f8AlvD/AKf//wCr//8Arv//ALL//wC1//8Auf//AL7//wDD//8Ayf//AM7//wDT//8A1///ANv//wDe//8A4P//AOP//wDl//8A6P//AOr//wDr//8A7f//AO7//wDu//8A7///AO///wDu//8A7v//AO3//wCu6f8Aftn/AH7Z/wB+2f8Aftn/AJbw/wCn//8Aq///AK///wCy//8Atv//ALn//wC///8AxP//AMr//wDP//8A1P//ANj//wDb//8A3v//AOH//wDk//8A5v//AOn//wDr//8A7f//AO7//wDv//8A8P//APD//wDw//8A8P//AO///wDu//8A7f//AOv//wDp//8A5///AOX//wDJ9f8Aftn/AH7Z/wB+2f8Aftn/AI7k/wCy//8Asv//ALL//wCx//8Asf//AJ7w/wCL4v8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AH7ZDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftm/AH7Z/wB+2f8Aftn/AH7Z/wCj/P8Aqf//AK3//wCw//8AtP//ALj//wC8//8Awv//AMj//wDN//8A0///ANf//wDb//8A3v//AOH//wDk//8A5///AOn//wDs//8A7v//APD//wDx//8A8v//APP//wDz//8A8///APP//wDy//8A8f//AJri/wB+2f8Aftn/AH7Z/wB+2f8Aofr/AKn//wCt//8Asf//ALT//wC4//8Avf//AMP//wDI//8Azv//ANP//wDY//8A2///AN///wDi//8A5f//AOj//wDq//8A7f//AO///wDx//8A8v//APP//wD0//8A9f//APX//wD0//8A9P//APP//wDx//8A8P//AO3//wDr//8A6P//AOb//wB+2f8Aftn/AH7Z/wB+2f8AhN3/ALP//wCz//8As///ALP//wCz//8As///ALP//wCs+v8Akef/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftnfAH7ZPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8Agt3/AKf//wCr//8Ar///ALL//wC2//8Auv//AMD//wDG//8AzP//ANH//wDW//8A2v//AN7//wDh//8A5P//AOf//wDq//8A7f//APD//wDy//8A9P//APX//wD3//8A9///APj//wD4//8A+P//APf//wD2//8AjN3/AH7Z/wB+2f8Aftn/AH7Z/wCn//8Aq///AK///wCz//8Atv//ALr//wDA//8Axv//AMz//wDS//8A1///ANv//wDe//8A4v//AOX//wDo//8A6///AO7//wDx//8A8///APX//wD3//8A+P//APn//wD5//8A+f//APn//wD4//8A9///APb//wD0//8A8f//AO///wDs//8A6f//AJji/wB+2f8Aftn/AH7Z/wB+2f8Btf//AbX//wG1//8Atf//ALT//wC0//8AtP//ALT//wC0//8Arfr/AJLn/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z/wB+2f8Aftn/AH7Z/wCI4v8Aqf//AK3//wCw//8AtP//ALj//wC9//8Aw///AMn//wDP//8A1f//ANn//wDd//8A4f//AOT//wDo//8A6///AO7//wDx//8A8///APb//wD4//8A+v//APv//wD8//8A/P//APz//wD8//8A+///APr//wB+2f8Aftn/AH7Z/wB+2f8AiOL/AKn//wCt//8Asf//ALT//wC4//8Avf//AMT//wDK//8A0P//ANX//wDZ//8A3f//AOH//wDl//8A6P//AOz//wDv//8A8v//APT//wD3//8A+f//APv//wD8//8A/f//Af7//wH+//8A/f//AP3//wD7//8A+v//APj//wD1//8A8v//APD//wDs//8AmeL/AH7Z/wB+2f8Aftn/AH7Z/wG2//8Btv//Abb//wG2//8Btv//ALb//wC2//8Atv//ALX//wC1//8Atf//AK76/wCL4v8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZzwB+2R4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftn/AH7Z/wB+2f8Aftn/AIji/wCq//8Arv//ALL//wC2//8Auv//AMD//wDG//8AzP//ANP//wDY//8A3P//AN///wDj//8A5///AOv//wDu//8A8f//APT//wD3//8A+v//APz//wH+//8F/v//Cf///wz///8M////Cf///wX+//8B/v//AH7Z/wB+2f8Aftn/AH7Z/wCI4v8Aqv//AK7//wCy//8Atv//ALr//wDA//8Ax///AM3//wDT//8A2P//ANz//wDg//8A5P//AOf//wDr//8A7///APL//wD1//8A+P//APv//wD9//8E/v//Cv///xD///8T////E////xH///8M////Bv7//wH9//8A+///APn//wD2//8A8///APD//wCn5/8Aftn/AH7Z/wB+2f8Aftn/AK33/wG4//8BuP//Abj//wG4//8BuP//Abf//wC3//8At///ALf//wC2//8Atv//ALb//wCk8/8Ahd3/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z7wB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8AiOL/AKv//wCv//8As///ALf//wC8//8Aw///AMn//wDP//8A1f//ANr//wDe//8A4v//AOb//wDq//8A7f//APH//wD1//8A+P//APv//wD9//8H/v//Ef///xn///8e////If///yH///8f////Gv///xL///8Aftn/AH7Z/wB+2f8Aftn/AIji/wCr//8Ar///ALP//wC3//8AvP//AMP//wDJ//8A0P//ANb//wDa//8A3v//AOL//wDm//8A6v//AO7//wDy//8A9f//APj//wD8//8C/v//DP///xb///8e////JP///yf///8n////Jf///yD///8Z////D////wT+//8A/P//APn//wD2//8A8///AKjn/wB+2f8Aftn/AH7Z/wB+2f8Aq/X/Abr//wG6//8Buv//Abn//wG5//8Buf//Abn//wG4//8AuP//ALj//wC4//8At///ALf//wCz/P8Alun/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z/wB+2f8Aftn/AH7Z/wCJ4v8Arf//ALH//wC1//8Auf//AL///wDF//8AzP//ANL//wDY//8A3P//AOD//wDk//8A6P//AOz//wDw//8A9P//APf//wD7//8B/v//Df///xr///8k////LP///zH///80////NP///zL///8t////Jf///wB+2f8Aftn/AH7Z/wB+2f8AieL/AK3//wCx//8Atf//ALn//wC///8Axf//AMz//wDS//8A2P//ANz//wDg//8A5P//AOj//wDs//8A8P//APT//wD4//8A/P//A/7//xD///8e////KP///zH///83////Ov///zr///84////M////yv///8h////Ff///wb+//8A/f//APn//wD1//8Am+L/AH7Z/wB+2f8Aftn/AH7Z/wG8//8BvP//Abz//wG8//8BvP//Abv//wG7//8Bu///Abr//wG6//8Buv//ALn//wC5//8AuP//ALj//wC3//8AqfX/AIHb/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2W4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftn/AH7Z/wB+2f8Aftn/AIni/wCu//8Asv//ALb//wC6//8Awf//AMf//wDO//8A1P//ANn//wDe//8A4v//AOb//wDq//8A7v//APL//wD2//8A+v//Af7//w3///8d////Kv///zX///89////Q////0b///9G////Q////z7///82////A4bb/wB+2f8Aftn/AH7Z/wCA2/8Arv//ALL//wC2//8Auv//AMD//wDH//8Azv//ANT//wDZ//8A3v//AOL//wDm//8A6v//AO///wDz//8A9///APv//wL+//8Q////IP///y7///84////Qv///0j///9M////TP///0n///9E////O////zH///8k////Ff///wX+//8A/P//APj//wCc4v8Aftn/AH7Z/wB+2f8Aftn/Ab///wG///8Bv///Ab///wG+//8Bvv//Ab7//wG9//8Bvf//Abz//wG8//8Bu///Abv//wC6//8Auv//ALn//wC4//8AtPz/AIng/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2Z8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2e8Aftn/AH7Z/wB+2f8AgNv/AK///wCz//8At///ALz//wDC//8Ayf//AND//wDW//8A2///AN///wDj//8A6P//AOz//wDw//8A9f//APn//wD9//8J////G////yv///84////RP///03///9U////WP///1j///9U////Tv///0X///8PnuL/AH7Z/wB+2f8Aftn/AH7Z/wCr/P8Asv//ALf//wC7//8Awv//AMn//wDQ//8A1v//ANr//wDf//8A4///AOj//wDs//8A8P//APX//wD5//8A/f//C////x3///8t////O////0f///9R////Wf///13///9d////Wv///1T///9K////P////zH///8i////EP///wH+//8A+v//AH7Z/wB+2f8Aftn/AH7Z/wCC2/8Bwv//AcH//wHB//8Bwf//AcH//wHB//8BwP//AcD//wHA//8Bv///Ab///wG+//8Bvf//Ab3//wC8//8Au///ALr//wC6//8Auf//AJTn/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2Y8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZvwB+2f8Aftn/AH7Z/wB+2f8Aqfr/ALP//wC4//8Avf//AMT//wDL//8A0f//ANf//wDc//8A4P//AOX//wDp//8A7f//APL//wD2//8A+///Av7//xT///8m////Nv///0X///9R////XP///2P///9o////aP///2T///9d////Uv///yC26f8Aftn/AH7Z/wB+2f8Aftn/AKDz/wCz//8At///AL3//wDD//8Ayv//ANH//wDX//8A3P//AOD//wDk//8A6f//AO3//wDy//8A9v//APv//wP+//8V////J////zj///9H////VP///1////9n////bP///23///9p////Yv///1j///9L////PP///yz///8b////B/7//wDk9/8Aftn/AH7Z/wB+2f8Aftn/AI/i/wHE//8BxP//AcT//wHE//8BxP//AcP//wHD//8Bw///AcL//wHC//8Bwf//AcD//wHA//8Bv///Ab7//wG+//8Avf//ALz//wC7//8Auv//AJ/u/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftmPAH7Z/wB+2f8Aftn/AH7Z/wCe8P8AtP//ALj//wC+//8Axf//AMz//wDS//8A2P//AN3//wDh//8A5v//AOr//wDv//8A8///APf//wD8//8I////HP///y////8/////T////13///9o////cf///3b///92////cv///2n///9e////NM7w/wB+2f8Aftn/AH7Z/wB+2f8Akef/ALT//wC4//8Avv//AMT//wDL//8A0v//ANj//wDc//8A4f//AOX//wDq//8A7v//APP//wD3//8A/P//CP///x3///8v////QP///1D///9f////a////3T///96////e////3f///9u////Yv///1X///9F////NP///yL///8O////AMbu/wB+2f8Aftn/AH7Z/wB+2f8Aouz/Acf//wHH//8Bx///Acb//wHG//8Bxv//Acb//wHF//8Bxf//AcT//wHE//8Bw///AcL//wHC//8Bwf//AcD//wG///8Avv//AL3//wC8//8Au///AKTw/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2U4Aftn/AH7Z/wB+2f8Aftn/AIri/wC0//8Auf//AL///wDG//8AzP//ANP//wDZ//8A3f//AOL//wDm//8A6///AO///wD0//8A+f//AP3//w7///8i////Nf///0b///9X////Zv///3P///99////g////4P///99////dP///2f///9O7vr/AH7Z/wB+2f8Aftn/AH7Z/wCB2/8Asfz/ALj//wC+//8Axf//AMz//wDT//8A2P//AN3//wDh//8A5v//AOv//wDv//8A9P//APj//wD9//8N////Iv///zX///9G////V////2b///90////f////4b///+H////gf///3f///9q////XP///0v///86////KP///xP///8Ajt3/AH7Z/wB+2f8Aftn/AH7Z/wC29f8Byf//Acn//wHJ//8Byf//Acn//wHJ//8ByP//Acj//wHH//8Bx///Acb//wHG//8Bxf//AcT//wHE//8Bw///AcL//wHB//8AwP//AL///wC+//8Avf//AKXw/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z7wB+2S4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8Aftn/AK76/wC5//8Av///AMb//wDN//8A1P//ANn//wDe//8A4v//AOf//wDr//8A8P//APT//wD5//8A/f//Ef///yb///85////Sv///1v///9r////ef///4X///+M////jf///4X///96////bP///13///8PluD/AH7Z/wB+2f8Aftn/AH7Z/wCg8P8AuP//AL7//wDF//8AzP//ANP//wDZ//8A3f//AOL//wDm//8A6///AO///wD0//8A+f//AP3//w////8k////N////0n///9a////av///3n///+F////jv///4////+I////fP///2////9f////Tv///z3///8q////Et71/wB+2f8Aftn/AH7Z/wB+2f8Agtv/Acz//wHM//8BzP//Acz//wHM//8By///Acv//wHL//8Byv//Acr//wHJ//8Byf//Acj//wHI//8Bx///Acb//wHF//8BxP//AcP//wHC//8Awf//AMD//wC///8Avv//AKXw/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z3wB+2Q4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZnwB+2f8Aftn/AH7Z/wB+2f8Ak+f/ALn//wC///8Axv//AM3//wDU//8A2f//AN7//wDi//8A5///AOv//wDw//8A9f//APn//wH+//8S////J////zn///9L////XP///2z///97////h////5D///+Q////h////3z///9t////Xv///zLO8P8Aftn/AH7Z/wB+2f8Aftn/AIXd/wC4//8Avv//AMX//wDM//8A0///ANn//wDd//8A4v//AOb//wDr//8A7///APT//wD5//8A/f//D////yT///83////Sf///1r///9q////ef///4X///+O////j////4j///98////b////1////9O////Pf///yr///8HnuL/AH7Z/wB+2f8Aftn/AH7Z/wCh6f8Bz///Ac///wHP//8Bz///Ac7//wHO//8Bzv//Ac3//wHN//8Bzf//Acz//wHL//8By///Acr//wHJ//8Byf//Acj//wHH//8Bxv//AcX//wHE//8Aw///AMH//wDA//8Av///AJ7s/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZrwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftk+AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Arvf/AL///wDG//8Azf//ANT//wDZ//8A3v//AOL//wDn//8A6///APD//wD0//8A+f//AP3//xD///8l////OP///0n///9a////af///3f///+C////if///4r///+D////eP///2v///9b////Rvb8/wOG2/8Aftn/AH7Z/wB+2f8Aftn/AJvs/wC+//8Axf//AMz//wDT//8A2P//AN3//wDh//8A5v//AOv//wDv//8A9P//APj//wD9//8N////Iv///zT///9G////V////2b///90////f////4b///+H////gf///3f///9q////XP///0v///86////G87w/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AMf6/wHR//8B0f//AdH//wHR//8B0f//AdH//wHQ//8B0P//AdD//wHP//8Bz///Ac7//wHN//8Bzf//Acz//wHL//8Byv//Acn//wHI//8Bx///Acb//wHF//8AxP//AMP//wDB//8AwP//AJbn/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftm/AH7Z/wB+2f8Aftn/AH7Z/wCJ4P8Avv//AMX//wDM//8A0///ANn//wDd//8A4v//AOb//wDr//8A7///APT//wD4//8A/f//DP///yD///8z////RP///1T///9j////b////3n///9+////fv///3n///9w////ZP///1X///9F////HL7s/wB+2f8Aftn/AH7Z/wB+2f8Aftn/ALL3/wDE//8Ay///ANL//wDY//8A3P//AOH//wDl//8A6v//AO7//wDz//8A9///APz//wj///8d////L////0D///9Q////Xv///2v///90////ev///3v///92////bv///2L///9V////Rf///y/u+v8Chtv/AH7Z/wB+2f8Aftn/AH7Z/wCe5/8B1P//AdT//wHU//8B1P//AdT//wHU//8B0///AdP//wHT//8B0v//AdL//wHR//8B0f//AdD//wHP//8Bzv//Ac7//wHN//8BzP//Acv//wHK//8Byf//Acj//wHG//8Axf//AMT//wDC//8Avfz/AIrg/wB+2f8Aftn/AH7Z/wB+2f8AftnvAH7ZDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2T4Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCW5/8AxP//AMv//wDS//8A2P//ANz//wDh//8A5f//AOr//wDu//8A8///APf//wD7//8G/v//Gv///yz///88////S////1n///9k////bP///3H///9x////bf///2X///9a////Tf///z3///8QpuT/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aht3/AL/8/wDK//8A0f//ANf//wDc//8A4P//AOT//wDp//8A7f//APL//wD2//8A+///A/7//xX///8n////OP///0b///9U////X////2f///9s////bf///2n///9i////V////0v///859vz/CZbg/wB+2f8Aftn/AH7Z/wB+2f8Ag9v/AMv6/wHW//8B1v//Adb//wHW//8Ars//AGt//wDI7/8B1v//AdX//wHV//8B1P//AdT//wHT//8B0v//AdL//wHR//8B0P//Ac///wHO//8Bzf//Acz//wHL//8Byv//Acn//wHH//8Axv//AMX//wDD//8Atff/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftmfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2d8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCq8P8Ayv//ANH//wDX//8A2///AOD//wDk//8A6f//AO3//wDx//8A9v//APr//wH+//8Q////Iv///zL///9A////TP///1f///9e////Yv///2L///9e////V////03///9B////Fa7n/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Ai+D/AMT8/wDQ//8A1v//ANr//wDf//8A4///AOj//wDs//8A8P//APX//wD5//8A/f//C////x3///8t////Ov///0f///9R////WP///1z///9d////Wv///1P///9K////Pv///xGm5P8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCr7P8B2P//Adj//wHY//8B2P//Adj//wBRX/8AAAD/AGx//wHX//8B1///Adf//wHW//8B1v//Adb//wHV//8B1P//AdP//wHT//8B0v//AdH//wHQ//8Bz///Ac3//wHM//8By///Acr//wHJ//8Ax///AMb//wDE//8AoOz/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftkuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftk+AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCo7v8Az///ANX//wDa//8A3v//AOP//wDn//8A6///APD//wD0//8A+P//APz//wX+//8W////Jv///zP///8+////R////07///9R////Uf///07///9I////P////xWu5/8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AjOD/AMn8/wDU//8A2f//AN7//wDi//8A5v//AOr//wDv//8A8///APf//wD7//8C/v//EP///yD///8t////OP///0H///9I////S////0z///9J////Q////zj2/P8OnuL/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AleL/Adr//wHa//8B2v//Adr//wHa//8AzO//AAAA/wAAAP8AsM//Adn//wHZ//8B2f//Adj//wHY//8B1///Adf//wHW//8B1v//AdX//wHU//8B0///AdL//wHR//8B0P//Ac///wHN//8BzP//Acv//wDJ//8AyP//AMf//wDF//8Ai+D/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALgAAAB4AAAAAAAAAAAB+2b8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCc5/8Azvz/ANn//wDd//8A4f//AOX//wDq//8A7v//APL//wD1//8A+f//AP3//wj+//8X////JP///y////83////PP///z////8/////Pf///zT2/P8QpuT/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Ag9v/AL31/wDY//8A3P//AOD//wDk//8A6P//AOz//wDw//8A9P//APj//wD8//8D/v//EP///x3///8o////Mf///zb///85////Ov///zj///8q5vf/Bo7d/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AIPb/wDV/P8B2///Adv//wHc//8B3P//Adz//wBgb/8AAAD/ADY//wHb//8B2///Adv//wHa//8B2v//Adr//wHZ//8B2f//Adj//wHY//8B1///Adb//wHW//8B1f//AdP//wHS//8B0f//AdD//wHO//8Bzf//Acz//wDK//8Ayf//AMf//wC09f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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/wBmsP8ABw3/AAAA/wAKD/8AW4//AKP//wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wCc9/8Aku7/AIvn/wCH4v8AgNv/AH7Z/wB+2f8Aftn/AIPd/wCJ4v8Aj+f/AJju/wCl9/8BsP//AbH//wGz//8BtP//Abb//wG3//8ikfv/hBvw/3cV3v9hCr//TQCh/yZhz/8BxP//Acb//wHJ//8By///Ac3//wHP//8B0f//AdL//wHU//8B1v//AMz6/wDC9f8ArOz/AKzs/wCh5/8AleL/AJzk/wCu7P8Ar+z/AMLz/wDV+v8B4v//AeP//wHk//8B5f//AeX//wHm//8B5///Aef//wHo//8A2e//ADo//wBJT/8AoK//Aen//wHp//8B6f//AIOP/wAOD/8AAAD/AJKf/wHp//8B6f//Aen//wHo//8B6P//Aej//wHn//8B5///Aeb//wHl//8B5f//AeT//wHj//8B4v//AeL//wHh//8B4P//Ad///wHe//8B3f//Adz//wHb//8B2v//Adn//wHX//8B1v//ANX//wDT//8A0f//AI3g/wB+2f8Aftn/AH7Z/wB+2f8AftkuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAA/wAXKP8Adsv/AH7Z/wB2y/8AHzb/AAAA/wAAAP8AFB//AGWf/wCY7/8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpf//Aaf//wGo//8Bqv//Aav//wGt//8Brv//Aa///wGx//8Bsv//AbT//wG1//8Bt///Abj//yKS+/+EG/D/dxXe/2EKv/9NAKH/JmLP/wHG//8ByP//Acr//wHM//8Bzv//AdD//wHS//8B1P//Adb//wHX//8B2f//Adr//wHb//8B3P//Ad3//wHe//8B3///AeD//wHh//8B4v//AeP//wHk//8B5f//AeX//wHm//8B5///Aej//wHo//8B6f//Aen//wHq//8B6v//Aer//wHr//8B6///AHV//wAOD/8AAAD/ACwv/wC/z/8B6///Aev//wHr//8B6v//Aer//wHq//8B6f//Aen//wHo//8B6P//Aef//wHm//8B5v//AeX//wHk//8B4///AeL//wHh//8B4P//Ad///wHe//8B3f//Adz//wHb//8B2v//Adn//wHY//8A1v//ANX//wDT//8Ap+z/AH7Z/wB+2f8Aftn/AH7Z/wB+2W4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuAAAA/wAXKP8Adsv/AH7Z/wCH4v8AW4//AAoP/wAAAP8AAAD/AAoP/wBwr/8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGq//8BrP//Aa3//wGv//8BsP//AbL//wGz//8Btf//Abb//wG3//8Buf//IpP7/4Qb8P93Fd7/YQq//00Aof8mY8//Acj//wHK//8BzP//Ac7//wHQ//8B0v//AdT//wHW//8B1///Adn//wHa//8B2///Adz//wHd//8B3///AeD//wHh//8B4v//AeP//wHk//8B5f//AeX//wHm//8B5///Aej//wHp//8B6f//Aer//wHq//8B6///Aev//wHs//8B7P//Aez//wHt//8AWV//AEpP/wCUn/8B7f//Ae3//wHt//8B7f//Aez//wHs//8B7P//Aev//wHr//8B6v//Aer//wHp//8B6f//Aej//wHn//8B5v//Aeb//wHl//8B5P//AeP//wHi//8B4f//AeD//wHf//8B3v//Ad3//wHb//8B2v//Adn//wHY//8A1v//ANX//wC+9f8Aftn/AH7Z/wB+2f8Aftn/AH7ZrwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2V4ARnr/AAAA/wAHDf8AVpX/AJDs/wCj//8AmO//AFuP/wAUH/8AAAD/AGWf/wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpf//Aaf//wGo//8Bqv//Aav//wGt//8Brv//AbD//wGx//8Bs///AbT//wG1//8Bt///Abj//wG6//8ilPv/hBvw/3cV3v9hCr//TQCh/yZkz/8Byv//Acz//wHO//8B0P//AdL//wHU//8B1v//Adf//wHZ//8B2v//Adv//wHc//8B3v//Ad///wHg//8B4f//AeL//wHj//8B5P//AeX//wHm//8B5///Aej//wHp//8B6f//Aer//wHr//8B7P//Aez//wHt//8B7f//Ae3//wHu//8B7v//Ae7//wHv//8B7///Ae///wHv//8B7///Ae///wHu//8B7v//Ae7//wHt//8B7f//Ae3//wHs//8B7P//Aev//wHq//8B6v//Aen//wHo//8B5///Aeb//wHl//8B5P//AeP//wHi//8B4f//AeD//wHf//8B3v//Ad3//wHc//8B2v//Adn//wDY//8A1v//ANX//wB+2f8Aftn/AH7Z/wB+2f8AftnfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZfgB+2f8AVpX/AAcN/wAAAP8AHC3/AFuP/wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGr//8BrP//Aa7//wGv//8BsP//AbL//wGz//8Btf//Abb//wG4//8Buf//Abv//yKV+/+EG/D/dxXe/2EKv/9NAKH/JmXP/wHL//8Bzf//AdD//wHS//8B1P//Adb//wHX//8B2f//Adr//wHb//8B3f//Ad7//wHf//8B4P//AeH//wHj//8B5P//AeX//wHm//8B5///Aej//wHp//8B6f//Aer//wHr//8B7P//Aez//wHt//8B7v//Ae7//wHv//8B7///AfD//wHw//8B8P//AfD//wHw//8B8f//AfH//wHx//8B8P//AfD//wHw//8B8P//Ae///wHv//8B7v//Ae7//wHt//8B7f//Aez//wHr//8B6v//Aer//wHp//8B6P//Aef//wHm//8B5f//AeT//wHj//8B4v//AeD//wHf//8B3v//Ad3//wHc//8B2v//ANn//wDY//8A1v//AI7g/wB+2f8Aftn/AH7Z/wB+2f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftm/AH7Z/wB+2f8Adsv/AD9s/wAUH/8AAAD/AJjv/wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpf//Aaf//wGo//8Bqv//Aav//wGt//8Brv//AbD//wGx//8Bs///AbT//wG2//8Bt///Abn//wG6//8Bvf//Ipb7/4Qb8P93Fd7/YQq//00Aof8mZc//Ac3//wHP//8B0f//AdP//wHW//8B1///Adn//wHa//8B2///Ad3//wHe//8B3///AeD//wHi//8B4///AeT//wHl//8B5v//Aef//wHo//8B6f//Aer//wHr//8B7P//Ae3//wHt//8B7v//Ae///wHv//8B8P//AfD//wHx//8B8f//AfL//wHy//8B8v//AfL//wHy//8B8v//AfL//wHy//8B8v//AfL//wHx//8B8f//AfH//wHw//8B8P//Ae///wHu//8B7f//Ae3//wHs//8B6///Aer//wHp//8B6P//Aef//wHm//8B5f//AeT//wHj//8B4v//AeH//wHf//8B3v//Ad3//wHc//8A2v//ANn//wDX//8AmeT/AH7Z/wB+2f8Aftn/AH7Z/wB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2b8Aftn/AH7Z/wB+2f8Aftn/AKP//wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGq//8BrP//Aa7//wGv//8Bsf//AbL//wG0//8Btf//Abf//wG4//8Buv//Abz//wG+//8il/v/hBvw/3cV3v9hCr//TQCh/yZmz/8Bz///AdH//wHT//8B1f//Adf//wHY//8B2v//Adv//wHc//8B3v//Ad///wHg//8B4v//AeP//wHk//8B5f//Aeb//wHo//8B6f//Aer//wHr//8B7P//Ae3//wHt//8B7v//Ae///wHw//8B8P//AfH//wHy//8B8v//AfP//wHz//8B8///AfT//wH0//8B9P//AfT//wH0//8B9P//AfT//wH0//8B8///AfP//wHz//8B8v//AfL//wHx//8B8f//AfD//wHv//8B7v//Ae7//wHt//8B7P//Aev//wHq//8B6f//Aej//wHn//8B5f//AeT//wHj//8B4v//AeH//wHf//8B3v//Ad3//wDb//8A2v//ANn//wCr7P8Aftn/AH7Z/wB+2f8Aftn/AH7ZPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z/wB+2f8Aftn/AH7Z/wCC3f8Ao///AKP//wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bpf//Aaf//wGo//8Bqv//Aav//wGt//8Brv//AbD//wGx//8Bs///AbT//wG2//8Bt///Abn//wG7//8Bvf//AcD//yKY+/+EG/D/dxXe/2EKv/9NAKH/JmfP/wHQ//8B0v//AdX//wHW//8B2P//Adn//wHb//8B3P//Ad7//wHf//8B4P//AeL//wHj//8B5P//AeX//wHn//8B6P//Aen//wHq//8B6///Aez//wHt//8B7v//Ae///wHw//8B8f//AfH//wHy//8B8///AfP//wH0//8B9P//AfX//wH1//8B9f//Afb//wH2//8B9v//Afb//wH2//8B9v//AfX//wH1//8B9f//AfT//wH0//8B8///AfP//wHy//8B8f//AfH//wHw//8B7///Ae7//wHt//8B7P//Aev//wHq//8B6f//Aej//wHn//8B5v//AeT//wHj//8B4v//AeH//wHf//8B3v//Ad3//wDb//8A2v//ALHu/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftn/AH7Z/wB+2f8Aftn/AIfi/wCj//8Ao///AKP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGq//8BrP//Aa3//wGv//8Bsf//AbL//wG0//8Btf//Abf//wG4//8Buv//Abz//wG///8Bwf//Ipn7/4Qb8P93Fd7/YQq//00Aof8maM//AdL//wHU//8B1v//Adj//wHZ//8B2///Adz//wHd//8B3///AeD//wHi//8B4///AeT//wHm//8B5///Aej//wHp//8B6v//Aez//wHt//8B7v//Ae///wHw//8B8P//AfH//wHy//8B8///AfT//wH0//8B9f//Afb//wH2//8B9v//Aff//wH3//8B9///Aff//wH4//8B+P//Afj//wH3//8B9///Aff//wH2//8B9v//Afb//wH1//8B9P//AfT//wHz//8B8v//AfH//wHx//8B8P//Ae///wHu//8B7f//Aez//wHr//8B6f//Aej//wHn//8B5v//AeT//wHj//8B4v//AeD//wHf//8B3v//ANz//wDb//8AwvX/AH7Z/wB+2f8Aftn/AH7Z/wB+2X4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8Ah+L/AKP//wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bpf//Aab//wGo//8Bqf//Aav//wGt//8Brv//AbD//wGx//8Bs///AbT//wG2//8Bt///Abn//wG7//8Bvf//AcD//wHC//8imvv/hBvw/3cV3v9hCr//TQCh/yZoz/8B0///AdX//wHX//8B2f//Adr//wHc//8B3f//Ad///wHg//8B4f//AeP//wHk//8B5f//Aef//wHo//8B6f//Aev//wHs//8B7f//Ae7//wHv//8B8P//AfH//wHy//8B8///AfT//wH1//8B9f//Afb//wH3//8B9///Afj//wH4//8B+P//Afn//wH5//8B+f//Afn//wH5//8B+f//Afn//wH5//8B+f//Afj//wH4//8B9///Aff//wH2//8B9f//AfX//wH0//8B8///AfL//wHx//8B8P//Ae///wHu//8B7f//Aez//wHr//8B6v//Aej//wHn//8B5v//AeT//wHj//8B4v//AeD//wHf//8A3f//ANz//wDD9f8Aftn/AH7Z/wB+2f8Aftn/AH7ZfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z/wB+2f8Aftn/AH7Z/wCH4v8Ao///AKP//wAoP/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AXX//Abz//wG///8Bwf//AcT//yKb+/+EG/D/dxXe/2EKv/9NAKH/JmnP/wHV//8B1///Adj//wHa//8B2///Ad3//wHe//8B4P//AeH//wHj//8B5P//AeX//wHn//8B6P//Aen//wHr//8Asb//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wH6//8B+v//Afn//wH5//8B+P//Afj//wH3//8B9v//AfX//wH1//8B9P//AfP//wHy//8B8f//AfD//wHu//8B7f//Aez//wHr//8B6v//Aej//wHn//8B5v//AeT//wHj//8B4f//AeD//wDe//8A3f//AMT1/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftn/AH7Z/wB+2f8Aftn/AIfi/wCj//8Ao///ACg//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wBdf/8Bvf//AcD//wHC//8Bxf//Ipz7/4Qb8P93Fd7/YQq//00Aof8mas//Adb//wHY//8B2f//Adv//wHc//8B3v//Ad///wHh//8B4v//AeT//wHl//8B5///Aej//wHp//8B6///Aez//wCyv/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Afz//wH8//8B+///Afv//wH6//8B+f//Afn//wH4//8B9///Afb//wH1//8B9P//AfP//wHy//8B8f//AfD//wHv//8B7f//Aez//wHr//8B6v//Aej//wHn//8B5f//AeT//wHi//8B4f//AOD//wDe//8AxfX/AH7Z/wB+2f8Aftn/AH7Z/wB+2X4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8Ah+L/AKP//wCj//8AKD//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AF5//wG///8Bwf//AcT//wHG//8infv/hBvw/3cV3v9hCr//TQCh/yZrz/8B1///Adj//wHa//8B3P//Ad3//wHf//8B4P//AeL//wHj//8B5f//Aeb//wHo//8B6f//Aer//wHs//8B7f//ALO//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8B/v//Af3//wH9//8B/P//Afz//wH7//8B+v//Afn//wH5//8B+P//Aff//wH2//8B9f//AfT//wHy//8B8f//AfD//wHv//8B7f//Aez//wHr//8B6f//Aej//wHm//8B5f//AeT//wHi//8A4f//AN///wDG9f8Aftn/AH7Z/wB+2f8Aftn/AH7ZfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z/wB+2f8Aftn/AH7Z/wCH4v8Ao///AKP//wBln/8AUX//AFF//wBRf/8AUX//AFF//wBRf/8AUX//AFF//wBRf/8AUn//AFN//wBTf/8AVH//AFV//wBWf/8AV3//AFd//wBYf/8AWX//AFp//wBbf/8AW3//AFx//wBdf/8Ajr//AcD//wHC//8Bxf//Acf//yKe+/+EG/D/dxXe/2EKv/9NAKH/JmvP/wHY//8B2f//Adv//wHd//8B3v//AeD//wHh//8B4///AeT//wHm//8B5///Aen//wHq//8B7P//Ae3//wHu//8A0t//AHh//wB5f/8Aen//AHp//wB7f/8Ae3//AHx//wB8f/8AfX//AH1//wB+f/8Afn//AH9//wB/f/8Bf3//An9//wN/f/8Ef3//BH9//wV/f/8Ff3//BX9//wV/f/8Ff3//BH9//wX///8D////Av7//wH+//8B/f//Af3//wH8//8B+///Afr//wH5//8B+P//Aff//wH2//8B9f//AfT//wHz//8B8f//AfD//wHv//8B7f//Aez//wHq//8B6f//Aej//wHm//8B5f//AeP//wDi//8A4P//AMb1/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftn/AH7Z/wB+2f8Aftn/AIfi/wCj//8Ao///AKP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpv//Aaj//wGp//8Bq///Aaz//wGu//8BsP//AbH//wGz//8BtP//Abb//wG4//8Buf//Abz//wG+//8Bwf//AcP//wHG//8ByP//Ip/7/4Qb8P93Fd7/YQq//00Aof8ma8//Adn//wHa//8B3P//Ad3//wHf//8B4f//AeL//wHk//8B5f//Aef//wHo//8B6v//Aev//wHt//8B7v//AfD//wHx//8B8v//AfT//wH1//8B9v//Aff//wH4//8B+f//Afr//wH7//8B/P//Af3//wH+//8C/v//Bf///wj///8L////Df///w////8Q////Ef///xH///8R////Ef///xD///8P////Df///wv///8I////Bv///wP///8B/v//Af3//wH9//8B/P//Afv//wH6//8B+f//Aff//wH2//8B9f//AfT//wHz//8B8f//AfD//wHu//8B7f//Aez//wHq//8B6f//Aef//wHm//8B5P//AOP//wDh//8Ax/X/AH7Z/wB+2f8Aftn/AH7Z/wB+2X4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8Ah+L/AKP//wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaX//wGm//8BqP//Aar//wGr//8Brf//Aa///wGw//8Bsv//AbP//wG1//8Bt///Abj//wG6//8Bvf//Ab///wHC//8BxP//Acf//wHK//8ioPv/hBvw/3cV3v9hCr//TQCh/yZsz/8B2f//Adv//wHd//8B3v//AeD//wHi//8B4///AeX//wHm//8B6P//Aen//wHr//8B7P//Ae7//wHv//8B8f//AfL//wH0//8B9f//Afb//wH3//8B+f//Afr//wH7//8B/P//Af3//wH+//8C/v//Bv///wr///8N////EP///xP///8V////F////xj///8Z////Gv///xr///8Z////GP///xf///8W////FP///xH///8O////Cv///wf///8D////Af7//wH9//8B/P//Afv//wH6//8B+f//Afj//wH2//8B9f//AfT//wHy//8B8f//AfD//wHu//8B7f//Aev//wHq//8B6P//Aef//wHl//8A5P//AOL//wDI9f8Aftn/AH7Z/wB+2f8Aftn/AH7ZfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z3wB+2f8Aftn/AH7Z/wCA2/8Ao///AKP//wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpf//Aaf//wGp//8Bqv//Aaz//wGt//8Br///AbH//wGy//8BtP//Abb//wG3//8Buf//Abv//wG+//8BwP//AcP//wHF//8ByP//Acv//yKh+/+EG/D/dxXe/2EKv/9NAKH/JmzP/wHa//8B3P//Ad7//wHf//8B4f//AeP//wHk//8B5v//Aef//wHp//8B6v//Aez//wHt//8B7///AfD//wHy//8B8///AfX//wH2//8B9///Afn//wH6//8B+///Afz//wH9//8B/v//Bf///wn///8O////Ev///xX///8Y////G////x3///8f////IP///yH///8i////Iv///yH///8g////H////x3///8b////Gf///xb///8T////D////wr///8G////Av7//wH+//8B/f//Afv//wH6//8B+f//Afj//wH2//8B9f//AfT//wHy//8B8f//Ae///wHu//8B7P//Aev//wHp//8B6P//Aeb//wDk//8A4///ALbu/wB+2f8Aftn/AH7Z/wB+2f8AftleAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftm/AH7Z/wB+2f8Aftn/AH7Z/wCj//8Ao///AKP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGr//8BrP//Aa7//wGw//8Bsf//AbP//wG0//8Btv//Abj//wG5//8BvP//Ab///wHB//8BxP//Acb//wHJ//8BzP//IqH7/4Qb8P93Fd7/YQq//00Aof8mbc//Adv//wHd//8B3v//AeD//wHi//8B4///AeX//wHn//8B6P//Aer//wHr//8B7f//Ae7//wHw//8B8v//AfP//wH0//8B9v//Aff//wH5//8B+v//Afv//wH9//8B/v//Av7//wf///8M////Ef///xb///8Z////HP///yD///8i////JP///yb///8o////KP///yn///8p////Kf///yj///8m////Jf///yP///8g////Hf///xr///8W////Ev///w3///8I////A/7//wH+//8B/f//Afz//wH6//8B+f//Afj//wH2//8B9f//AfP//wHy//8B8P//Ae///wHt//8B7P//Aer//wHp//8B5///AOX//wDk//8AsOz/AH7Z/wB+2f8Aftn/AH7Z/wB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2a8Aftn/AH7Z/wB+2f8Aftn/AJz3/wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8BpP//Aab//wGo//8Bqf//Aav//wGt//8Brv//AbD//wGy//8Bs///AbX//wG3//8BuP//Abr//wG9//8Bv///AcL//wHF//8Bx///Acr//wHN//8iovv/hBvw/3cV3v9hCr//TQCh/yZtz/8B3P//Ad3//wHf//8B4f//AeP//wHk//8B5v//Aej//wHp//8B6///Aez//wHu//8B8P//AfH//wHz//8B9P//Afb//wH3//8B+P//Afr//wH7//8B/f//Af7//wP+//8I////Dv///xT///8Y////HP///yD///8k////J////yr///8s////Lv///y////8w////Mf///zH///8w////L////y7///8s////Kv///yf///8k////If///x3///8Z////FP///w////8J////BP///wH+//8B/f//Afz//wH6//8B+f//Aff//wH2//8B9P//AfP//wHx//8B8P//Ae7//wHt//8B6///Aen//wHo//8A5v//AOX//wCd5P8Aftn/AH7Z/wB+2f8Aftn/AH7ZLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZfgB+2f8Aftn/AH7Z/wB+2f8Al/P/AKP//wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGl//8Bp///Aaj//wGq//8BrP//Aa3//wGv//8BsP//AbL//wG0//8Btf//Abf//wG5//8Bu///Ab7//wHA//8Bw///Acb//wHI//8By///Ac7//yKj+/+EG/D/dxXe/2EKv/9NAKH/Jm3P/wHd//8B3v//AeD//wHi//8B4///AeX//wHn//8B6P//Aer//wHs//8B7f//Ae///wHw//8B8v//AfT//wH1//8B9///Afj//wH6//8B+///Afz//wH+//8D////Cf///w////8V////Gv///x////8j////J////yv///8u////Mf///zP///81////Nv///zf///83////N////zf///82////Nf///zP///8x////Lv///yv///8o////JP///yD///8b////Fv///xD///8K////BP///wH+//8B/f//Afv//wH6//8B+P//Aff//wH1//8B9P//AfL//wHx//8B7///Ae7//wHs//8B6v//AOn//wDn//8A5f//AJHg/wB+2f8Aftn/AH7Z/wB+2f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftlOAH7Z/wB+2f8Aftn/AH7Z/wCQ7P8Ao///AKP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8BpP//AaX//wGn//8Bqf//Aar//wGs//8Brv//Aa///wGx//8Bs///AbT//wG2//8BuP//Abn//wG8//8Bvv//AcH//wHE//8Bxv//Acn//wHM//8Bz///J7D6/5RG5f+COM//aCev/1celv9lVpT/EdLv/wHf//8B4f//AeL//wHk//8B5v//Aef//wHp//8B6///Aez//wHu//8B8P//AfH//wHz//8B9f//Afb//wH4//8B+f//Afv//wH8//8B/v//A/7//wn///8P////Fv///xv///8g////Jf///yr///8u////Mf///zX///83////Of///zv///89////Pv///z7///8+////Pv///z3///87////Of///zf///81////Mv///y////8q////Jv///yH///8c////F////xH///8K////BP///wH+//8B/P//Afv//wH5//8B+P//Afb//wH1//8B8///AfL//wHw//8B7v//Ae3//wHr//8A6f//AOj//wDm//8Aftn/AH7Z/wB+2f8Aftn/AH7ZzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2S4Aftn/AH7Z/wB+2f8Aftn/AIfi/wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpv//Aaf//wGp//8Bq///Aaz//wGu//8BsP//AbH//wGz//8Btf//Abb//wG4//8Buv//Abz//wG///8Bwv//AcX//wHH//8Byv//Ac3//wHP//861/n/0tLS/6+vr/+MjIz/dnZ2/1yTnP9LrLr/AeD//wHh//8B4///AeX//wHm//8B6P//Aer//wHs//8B7f//Ae///wHx//8B8v//AfT//wH1//8B9///Afn//wH6//8B/P//Af3//wL+//8I////D////xb///8b////If///yb///8r////MP///zT///83////Ov///z3///9A////Qv///0P///9F////Rf///0X///9F////RP///0L///9A////Pv///zv///84////Nf///zH///8s////J////yL///8c////F////xD///8J////A/7//wH+//8B/P//Afr//wH5//8B9///Afb//wH0//8B8///AfH//wHv//8B7v//Aez//wDq//8A6f//AM31/wB+2f8Aftn/AH7Z/wB+2f8AftmvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8AgNv/AKP//wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8BqP//Aan//wGr//8Brf//Aa7//wGw//8Bsv//AbP//wG1//8Bt///Abj//wG6//8Bvf//AcD//wHD//8Bxf//Acj//wHL//8Bzf//AdD//z/c/f/l5eX/w8PD/6Ghof9+fn7/O6m6/2Sbo/8B4P//AeL//wHk//8B5f//Aef//wHp//8B6///Aez//wHu//8B8P//AfH//wHz//8B9f//Afb//wH4//8B+v//Afv//wH9//8B/v//Bv///w7///8V////G////yH///8n////LP///zH///82////Of///z3///9B////RP///0f///9J////Sv///0v///9M////TP///0z///9L////Sf///0f///9E////Qf///z7///86////Nv///zL///8t////KP///yL///8c////Fv///w////8I////Av7//wH9//8B/P//Afr//wH4//8B9///AfX//wHz//8B8v//AfD//wHu//8B7f//AOv//wDp//8Aue7/AH7Z/wB+2f8Aftn/AH7Z/wB+2X4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZvwB+2f8Aftn/AH7Z/wB+2f8AnPf/AKP//wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bpf//Aab//wGo//8Bqv//Aav//wGt//8Br///AbD//wGy//8BtP//AbX//wG3//8Buf//Abv//wG+//8BwP//AcP//wHG//8Byf//Acv//wHO//8B0f//QN7///b29v/X19f/tLS0/5GRkf89q7z/ZJuj/wHh//8B4///AeT//wHm//8B6P//Aer//wHr//8B7f//Ae///wHx//8B8v//AfT//wH2//8B9///Afn//wH7//8B/P//Af7//wT///8L////E////xr///8g////Jv///yz///8y////N////zv///8/////RP///0f///9K////Tf///0////9R////Uv///1P///9T////Uv///1H///9Q////Tf///0v///9I////RP///0D///88////N////zP///8t////KP///yH///8b////Ff///w3///8F////Af7//wH8//8B+///Afn//wH4//8B9v//AfT//wHz//8B8f//Ae///wHt//8A7P//AOr//wCf5P8Aftn/AH7Z/wB+2f8Aftn/AH7ZPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftl+AH7Z/wB+2f8Aftn/AH7Z/wCS7v8Ao///AKP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGl//8Bp///Aaj//wGq//8BrP//Aa3//wGv//8Bsf//AbL//wG0//8Btv//Abf//wG5//8BvP//Ab7//wHB//8BxP//Acf//wHJ//8BzP//Ac///wHS//9A3////v7+/+rq6v/IyMj/paWl/1aptf9knKT/AeH//wHj//8B5f//Aef//wHp//8B6v//Aez//wHu//8B8P//AfH//wHz//8B9f//Afb//wH4//8B+v//Afv//wH9//8C/v//Cf///xH///8Y////H////yX///8r////Mf///zf///87////QP///0X///9J////Tf///1D///9T////Vv///1f///9Z////Wf///1n///9Z////WP///1b///9U////Uf///07///9K////Rv///0H///89////N////zL///8t////Jv///yD///8Z////Ev///wr///8D/v//Af3//wH8//8B+v//Afj//wH3//8B9f//AfP//wHy//8B8P//AO7//wDs//8A6///AITb/wB+2f8Aftn/AH7Z/wB+2f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2T4Aftn/AH7Z/wB+2f8Aftn/AIfi/wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaX//wGn//8Bqf//Aar//wGs//8Brv//Aa///wGx//8Bs///AbT//wG2//8BuP//Abr//wG8//8Bv///AcL//wHE//8Bx///Acr//wHN//8B0P//AdL//0Df////////+fn5/9zc3P+5ubn/g56i/0S0w/8B4v//AeT//wHl//8B5///Aen//wHr//8B7f//Ae7//wHw//8B8v//AfT//wH1//8B9///Afn//wH6//8B/P//Af7//wX///8N////Ff///xz///8j////Kv///zD///82////O////0H///9G////S////0////9T////Vv///1n///9c////Xv///1////9f////YP///1////9e////XP///1r///9X////VP///1D///9L////R////0L///88////N////zH///8r////Jf///x7///8X////D////wf///8B/v//Afz//wH7//8B+f//Aff//wH2//8B9P//AfL//wHw//8A7///AO3//wDQ9f8Aftn/AH7Z/wB+2f8Aftn/AH7ZvwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2e8Aftn/AH7Z/wB+2f8Aftn/AKD8/wCj//8Ao///AaP//wGj//8Bo///AaP//wGk//8Bpf//Aaf//wGp//8Bqv//Aaz//wGu//8BsP//AbH//wGz//8Btf//Abb//wG4//8Buv//Ab3//wG///8Bwv//AcX//wHI//8Byv//Ac3//wHQ//8B0///INr//4Dr//9/7P7/deL0/2TT4/+AnKD/Cdv3/wHi//8B5P//Aeb//wHo//8B6v//Aev//wHt//8B7///AfH//wHy//8B9P//Afb//wH4//8B+f//Afv//wH9//8C/v//Cf///xL///8Z////IP///yf///8u////NP///zr///9A////Rv///0v///9Q////VP///1j///9c////X////2L///9k////Zf///2b///9m////Zf///2T///9i////YP///13///9Z////Vf///1H///9M////R////0H///87////Nv///zD///8p////Iv///xr///8T////Cv///wP+//8B/f//Afz//wH6//8B+P//Afb//wH1//8B8///AfH//wDv//8A7f//AK7p/wB+2f8Aftn/AH7Z/wB+2f8AftluAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZnwB+2f8Aftn/AH7Z/wB+2f8AlfD/AKP//wCj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGr//8BrP//Aa7//wGw//8Bsv//AbP//wG1//8Bt///Abj//wG6//8Bvf//AcD//wHD//8Bxf//Acj//wHL//8Bzv//AdH//wHT//8B1v//Adj//wHa//8B3P//PrrN/0a2xf8B4f//AeP//wHl//8B5v//Aej//wHq//8B7P//Ae7//wHv//8B8f//AfP//wH1//8B9///Afj//wH6//8B/P//Af7//wT///8N////Ff///x3///8k////K////zL///84////Pv///0T///9K////UP///1X///9Z////Xv///2H///9l////Z////2n///9r////bP///2z///9r////av///2j///9l////Yv///17///9a////Vv///1H///9L////Rv///z////85////M////y3///8l////Hv///xf///8P////Bv///wH+//8B/P//Afr//wH5//8B9///AfX//wHz//8A8v//APD//wDu//8Ai93/AH7Z/wB+2f8Aftn/AH7Z/wB+2R4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftlOAH7Z/wB+2f8Aftn/AH7Z/wCE4P8Ao///AKP//wGj//8Bo///AaP//wGj//8BpP//Aab//wGo//8Bqf//Aav//wGt//8Brv//AbD//wGy//8Bs///AbX//wG3//8Buf//Abv//wG9//8BwP//AcP//wHG//8Byf//Acv//wHO//8B0f//AdT//wHW//8B2P//Adr//xvN6v+GlJb/Cdr3/wHh//8B4///AeX//wHn//8B6f//Aev//wHs//8B7v//AfD//wHy//8B9P//AfX//wH3//8B+f//Afv//wH9//8B/v//CP///xD///8Z////IP///yj///8v////Nv///zz///9C////Sf///07///9U////Wf///17///9j////Zv///2r///9t////b////3H///9x////cv///3H///9v////bf///2r///9n////Y////1////9a////Vf///0////9K////RP///z3///83////MP///yn///8i////Gv///xL///8J////Av7//wH9//8B+///Afn//wH4//8B9v//AfT//wDy//8A8P//AMvz/wB+2f8Aftn/AH7Z/wB+2f8AftnPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftnvAH7Z/wB+2f8Aftn/AH7Z/wCe+v8Ao///AKP//wGj//8Bo///AaP//wGk//8Bpv//Aaj//wGp//8Bq///Aa3//wGv//8BsP//AbL//wG0//8Btf//Abf//wG5//8Bu///Ab7//wHB//8Bw///Acb//wHJ//8BzP//Ac///wHR//8B1P//Adf//wHY//8B2v//ZKiz/22lrf8B4P//AeL//wHk//8B5f//Aef//wHp//8B6///Ae3//wHv//8B8P//AfL//wH0//8B9v//Afj//wH5//8B+///Af3//wL+//8L////FP///xv///8j////K////zL///84////P////0b///9M////Uv///1j///9d////Y////2f///9r////b////3L///90////dv///3f///93////dv///3X///9y////b////2z///9o////ZP///17///9Z////U////03///9H////QP///zr///8z////LP///yX///8d////Ff///wz///8E////Af3//wH8//8B+v//Afj//wH2//8B9P//APP//wDx//8AqOf/AH7Z/wB+2f8Aftn/AH7Z/wB+2W4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2Z8Aftn/AH7Z/wB+2f8Aftn/AI7p/wCj//8Ao///AaP//wGj//8Bo///AaT//wGm//8BqP//Aar//wGr//8Brf//Aa///wGw//8Bsv//AbT//wG2//8Bt///Abn//wG7//8Bvv//AcH//wHE//8Bx///Acn//wHM//8Bz///E8rx/wHV//8B1///Adn//wHb//+Tk5P/eKKo/wHg//8B4v//AeT//wHm//8B6P//Aen//wHr//8B7f//Ae///wHx//8B8///AfT//wH2//8B+P//Afr//wH8//8B/v//Bf///w3///8W////Hv///yb///8t////Nf///zv///9C////Sf///1D///9W////XP///2H///9m////a////3D///9z////d////3n///97////fP///3z///97////ev///3f///90////cf///2z///9n////Yv///13///9X////Uf///0r///9E////Pf///zb///8v////KP///yD///8Y////D////wb///8B/v//Afz//wH6//8B+P//Aff//wD1//8A8///AOr8/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZPgB+2f8Aftn/AH7Z/wB+2f8AgNv/AKD8/wCj//8Ao///AaP//wGj//8Bpf//Aab//wGo//8Bqv//Aaz//wGt//8Br///AbH//wGy//8BtP//Abb//wG3//8Buf//Abz//wG///8Bwf//AcT//wHH//8Byv//Ac3//wrM+P9wpbD/AdX//wHX//8B2f//Adv//4Oeo/+Wlpb/AeD//wHi//8B5P//Aeb//wHo//8B6v//Aez//wHt//8B7///AfH//wHz//8B9f//Aff//wH4//8B+v//Afz//wH+//8H////EP///xj///8g////KP///zD///83////Pv///0X///9M////Uv///1n///9f////Zf///2r///9v////dP///3j///97////fv///4D///+A////gP///4D///9+////fP///3n///91////cP///2v///9m////YP///1r///9U////Tf///0b///8/////OP///zH///8q////Iv///xr///8R////CP///wH+//8B/P//Afv//wH5//8B9///APX//wDz//8AuOz/AH7Z/wB+2f8Aftn/AH7Z/wB+2a8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZzwB+2f8Aftn/AH7Z/wB+2f8AkOz/AKP//wCj//8Bo///AaP//wGl//8Bpv//Aaj//wGq//8BrP//Aa3//wGv//8Bsf//AbL//wG0//8Btv//Abj//wG5//8BvP//Ab///wHC//8BxP//Acf//wHK//8Bzf//X6y+/0y1y/8B1f//Adf//wHZ//8B2///X7K+/5iYmP8wyt//AeP//wHk//8B5v//Aej//wHq//8B7P//Ae7//wHw//8B8f//AfP//wH1//8B9///Afn//wH7//8B/f//Af7//wj///8S////Gv///yL///8q////Mv///zn///9A////R////07///9V////W////2L///9n////bf///3L///93////fP///3////+B////g////4T///+F////hP///4L///9/////fP///3j///9z////bv///2n///9j////Xf///1b///9P////Sf///0H///86////M////yz///8k////HP///xP///8K////Av7//wH9//8B+///Afn//wD3//8A9f//AOz8/wCF2/8Aftn/AH7Z/wB+2f8Aftn/AH7ZTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftleAH7Z/wB+2f8Aftn/AH7Z/wCC3f8Ao///AKP//wCj//8Bo///AaX//wGn//8BqP//Aar//wGs//8Brf//Aa///wGx//8Bs///AbT//wG2//8BuP//Abr//wG8//8Bv///AcL//wHF//8Bx///Acr//wHN//+QnaD/J8Xl/wHW//8B2P//Adn//wHb//8nzOX/m5ub/2G1wP8B4///AeX//wHn//8B6P//Aer//wHs//8B7v//AfD//wHy//8B9P//AfX//wH3//8B+f//Afv//wH9//8C/v//Cv///xP///8c////JP///yz///80////Ov///0L///9J////UP///1f///9e////ZP///2r///9w////df///3r///9+////gv///4X///+H////if///4n///+I////hf///4L///9/////e////3b///9x////a////2X///9f////WP///1L///9L////Q////zz///81////Lf///yX///8d////Ff///wz///8D////Af3//wH7//8B+f//APj//wD2//8Auez/AH7Z/wB+2f8Aftn/AH7Z/wB+2d8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftnvAH7Z/wB+2f8Aftn/AH7Z/wCQ7P8Ao///AKP//wGj//8Bpf//Aaf//wGo//8Bqv//Aaz//wGu//8Br///AbH//wGz//8BtP//Abb//wG4//8Buv//Abz//wG///8Bwv//AcX//wHI//8Byv//HsTs/5ycnP8Kz/j/Adb//wHY//8B2v//Adv//wHd//+AqrD/lKKj/wrf+f8B5f//Aef//wHp//8B6v//Aez//wHu//8B8P//AfL//wH0//8B9v//Aff//wH5//8B+///Af3//wL///8L////FP///x3///8l////Lf///zX///88////Q////0v///9S////Wf///1////9m////bP///3L///93////fP///4D///+E////iP///4v///+M////jP///4v///+J////hf///4H///9+////eP///3P///9t////Z////2D///9a////U////0z///9F////Pf///zb///8v////J////x7///8W////Df///wT///8B/f//Afz//wD6//8A+P//AO78/wCF2/8Aftn/AH7Z/wB+2f8Aftn/AH7ZbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2X4Aftn/AH7Z/wB+2f8Aftn/AIDb/wCg/P8Ao///AKP//wGl//8Bp///Aaj//wGq//8BrP//Aa7//wGv//8Bsf//AbP//wG0//8Btv//Abj//wG6//8BvP//Ab///wHC//8Bxf//Acj//wHK//8oweb/np6e/wHT//8B1v//Adj//wHa//8B3P//Pcbc/1DAz/+goKD/PMrb/wHl//8B5///Aen//wHr//8B7P//Ae7//wHw//8B8v//AfT//wH2//8B+P//Afn//wH7//8B/f//A////wz///8V////Hf///yb///8u////Nf///z3///9E////TP///1P///9a////YP///2f///9t////c////3n///9+////gv///4f///+K////jf///4////+Q////jv///4v///+H////g////3////96////dP///27///9o////Yv///1v///9U////Tf///0b///8+////N////y////8n////H////xf///8O////BP///wH+//8B/P//APr//wD4//8Auuz/AH7Z/wB+2f8Aftn/AH7Z/wB+2e8AftkOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZDgB+2e8Aftn/AH7Z/wB+2f8Aftn/AJDs/wCj//8Ao///AaX//wGn//8BqP//Aar//wGs//8Brv//Aa///wGx//8Bs///AbX//wG2//8BuP//Abr//wG8//8Bv///AcL//wHF//8ByP//Acv//1G30P+Mp6z/AdP//wHW//8B2P//Adr//wHc//9xtcD/C9v5/3C2v/9mu8X/AeX//wHn//8B6f//Aev//wHs//8B7v//AfD//wHy//8B9P//Afb//wH4//8B+v//Afv//wH9//8D////DP///xb///8e////Jv///y////82////Pf///0X///9M////U////1r///9h////Z////27///90////ef///3////+D////iP///4z///+P////kv///5L///+Q////jP///4j///+E////f////3r///91////b////2n///9i////XP///1X///9N////Rv///z////83////MP///yj///8g////F////w7///8F////Af7//wD8//8A+v//APD8/wCF2/8Aftn/AH7Z/wB+2f8Aftn/AH7ZfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZfgB+2f8Aftn/AH7Z/wB+2f8Aftn/AJ76/wCj//8Apf//Aaf//wGo//8Bqv//Aaz//wGu//8Br///AbH//wGz//8Btf//Abb//wG4//8Buv//Abz//wG///8Bwv//AcX//wHI//8By///UrjR/3quuv8B0///Adb//wHY//8B2v//Adz//3yzvP8B3///Psrd/5CtsP8B5f//Aef//wHp//8B6///Aez//wHu//8B8P//AfL//wH0//8B9v//Afj//wH6//8B/P//Af3//wP///8M////Fv///x7///8m////L////zb///89////Rf///0z///9T////Wv///2H///9n////bv///3T///96////f////4P///+I////jP///4////+S////kv///5D///+N////iP///4T///+A////e////3X///9v////af///2L///9c////Vf///03///9G////P////zf///8w////KP///yD///8X////Dv///wX///8B/v//APz//wD6//8ArOf/AH7Z/wB+2f8Aftn/AH7Z/wB+2d8AftkOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z3wB+2f8Aftn/AH7Z/wB+2f8Ah+L/AKP//wCl//8Bp///Aaj//wGq//8BrP//Aa7//wGv//8Bsf//AbP//wG0//8Btv//Abj//wG6//8BvP//Ab///wHC//8Bxf//Acj//wHL//9TudL/fLC7/wHT//8B1v//Adj//wHa//8B3P//frW+/wHf//8g1u7/p6en/wHl//8B5///Aen//wHr//8B7P//Ae7//wHw//8B8v//AfT//wH2//8B+P//Afr//wH7//8B/f//A////wz///8V////Hv///yb///8u////Nv///z3///9E////TP///1P///9a////YP///2f///9t////c////3n///9+////gv///4f///+L////jv///5D///+Q////jv///4v///+I////g////3////96////dP///27///9o////Yv///1v///9U////Tf///0b///8+////N////zD///8o////H////xf///8O////Bf///wD+//8A/P//ANv1/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftlOAH7Z/wB+2f8Aftn/AH7Z/wB+2f8AlfD/AKX//wCn//8BqP//Aar//wGs//8Brv//Aa///wGx//8Bs///AbT//wG2//8BuP//Abr//wG8//8Bv///AcL//wHF//8ByP//Acr//1S60/+Ir7f/AdP//wHW//8B2P//Adr//wHb//91usX/INXv/yDW7/9qv8n/AeX//wHn//8B6f//Aer//wHs//8B7v//AfD//wHy//8B9P//Afb//wH4//8B+f//Afv//wH9//8D////C////xX///8d////Jf///y3///81////PP///0P///9L////Uv///1n///9g////Zv///2z///9y////eP///33///+B////hf///4j///+L////jf///43///+M////if///4X///+B////fv///3n///9z////bf///2f///9h////Wv///1P///9M////Rf///z3///82////L////yf///8e////Fv///w3///8E////AP3//wD8//8Ajd3/AH7Z/wB+2f8Aftn/AH7Z/wB+2c8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftm/AH7Z/wB+2f8Aftn/AH7Z/wCA2/8AoPr/AKf//wCo//8Bqv//Aaz//wGt//8Br///AbH//wGz//8BtP//Abb//wG4//8Buv//Abz//wG///8Bwv//AcX//wHH//8Byv//VbvU/6mpqf8B0///Atb//wLY//8C2v//Adv//0HL4P9Xxtb/YcPQ/wvf+f8B5f//Aef//wHo//8B6v//Aez//wHu//8B8P//AfL//wH0//8B9f//Aff//wH5//8B+///Af3//wL+//8K////FP///xz///8k////LP///zT///87////Qv///0n///9Q////V////17///9k////av///3D///92////ev///3////+C////hf///4j///+J////if///4j///+G////g////4D///97////dv///3H///9r////Zf///1////9Z////Uv///0v///9D////PP///zX///8u////Jv///x3///8V////DP///wL///8A/f//ALXp/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2R4AftnvAH7Z/wB+2f8Aftn/AH7Z/wCH4v8Apv//AKj//wGq//8BrP//Aa3//wGv//8Bsf//AbP//wG0//8Btv//Abj//wG6//8BvP//Ab///wHC//8BxP//Acj//wTL//9Ewd//q6ur/xbS+f8N2P//Dtn//w3b//8g1/T/W8bW/66urv9Oy9v/AeP//wHk//8B5v//Aej//wHq//8B7P//Ae7//wHw//8B8f//AfP//wH1//8B9///Afn//wH7//8B/f//Af7//wn///8S////Gv///yP///8r////Mv///zn///9A////SP///0////9V////XP///2L///9o////bv///3P///94////fP///3////+C////hP///4X///+F////hP///4L///+A////ff///3j///90////b////2n///9j////Xf///1f///9Q////Sf///0L///86////NP///yz///8k////HP///xT///8K////Af7//wDd9f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2Y8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2W4Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCS7P8AqP//AKr//wGs//8Brf//Aa///wGx//8Bsv//AbT//wG2//8BuP//Abn//wG8//8Bv///AsL//wXG//8Lyv//D83//yfM9P+tra3/Ps3q/xrZ//8b3P//Gt3//yzZ9f8+1Ov/T8/i/3TEz/8L5P//BuX//wHm//8B6P//Aer//wHs//8B7f//Ae///wHx//8B8///AfX//wH3//8B+f//Afr//wH8//8B/v//B////xD///8Z////If///yn///8w////N////z7///9F////TP///1P///9Z////X////2X///9r////cP///3T///95////fP///3////+A////gf///4H///+A////f////33///95////df///3D///9s////Zv///2D///9a////VP///07///9H////QP///zj///8y////Kv///yL///8a////Ev///wf///8A9vz/AIbb/wB+2f8Aftn/AH7Z/wB+2f8AftnfAH7ZDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2b8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCe9f8Aqv//AKv//wGt//8Br///AbH//wGy//8BtP//Abb//wG3//8Buf//Abz//wTA//8LxP//Ecj//xbM//8b0P//INP//5W3vv9zwtL/J9z//yje//8n3///JuD//yPh//8g4///orq9/1HT4/8R5v//C+f//wTo//8B6f//Aev//wHt//8B7///AfH//wHz//8B9f//Afb//wH4//8B+v//Afz//wH+//8F////Dv///xf///8f////Jv///y7///81////PP///0P///9K////UP///1b///9c////Yv///2f///9s////cf///3T///93////ev///3z///99////ff///3z///96////eP///3X///9x////bf///2j///9j////Xf///1f///9R////S////0T///89////Nv///y////8o////IP///xj///8P////Bf///wCe4v8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZHgB+2e8Aftn/AH7Z/wB+2f8Aftn/AIDb/wCk+v8Aq///AK3//wGv//8BsP//AbL//wG0//8Btf//Abf//wG5//8Hvf//D8L//xbH//8cy///Is///yfS//8r1f//YMri/5q5wP803f//NN///zPh//8y4v//MOP//y3k//+Uwsj/kcLJ/x3n//8X6P//D+n//wfq//8B6///Ae3//wHv//8B8P//AfL//wH0//8B9v//Afj//wH6//8B+///Af3//wP///8L////FP///xz///8k////K////zP///85////QP///0f///9N////U////1n///9e////Y////2j///9s////cP///3P///91////d////3j///94////d////3b///9z////cP///23///9p////ZP///1////9a////VP///07///9I////Qf///zr///80////Lf///yX///8d////Ff///wz///8Ctun/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftmPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZTgB+2f8Aftn/AH7Z/wB+2f8Aftn/AIbg/wCo/P8Arf//AK7//wGw//8Bsv//AbT//wG1//8Ct///CLv//xHA//8Zxf//IMn//yfN/v8u0f//M9T//zjY//9D2Pr/rba4/1bX8f9B4f//QOL//z/k//885f//OeX//7C7vf+5ubn/Kej//yLp//8a6f//Eur//wjr//8B7P//Ae7//wHw//8B8v//AfT//wH1//8B9///Afn//wH7//8B/f//Af7//wj///8R////Gf///yH///8o////MP///zb///88////Q////0n///9P////Vf///1r///9f////Y////2f///9r////bv///3D///9x////cv///3L///9y////cP///27///9r////aP///2T///9g////W////1b///9Q////Sv///0T///8+////N////zH///8q////Iv///xr///8S////Bs7w/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZjwB+2f8Aftn/AH7Z/wB+2f8Aftn/AIbg/wCs//8Arv//ALD//wGy//8Bs///AbX//wi5//8Rvv//GsL//yPH//8rzP7/MtD+/znT//8/1///RNr+/0jd/v+HyNX/jsbR/07j/v9O5P7/TOX+/0nm/v9U4fb/u7u7/5rGzP806f//Len//yXq//8c6///Euz//wjt//8B7v//AfD//wHx//8B8///AfX//wH3//8B+f//Afr//wH8//8B/v//Bf///w3///8W////Hf///yX///8s////M////zn///8/////Rf///0v///9Q////Vv///1r///9e////Yv///2X///9o////av///2z///9t////bf///2z///9r////af///2b///9j////X////1v///9W////Uf///0z///9G////QP///zr///80////Lf///yb///8f////Fv///wrW8/8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2e8AftkeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZzwB+2f8Aftn/AH7Z/wB+2f8Aftn/AI/n/wCu//8AsP//ALH//wGz//8Ht///Ebz//xvA//8kxf//Lcn+/zXO/v880v//RNb+/0rZ/v9R3P7/Vd/+/2Xc9f+4uLj/Zt/1/1vm/v9Z5/7/Vuj+/4HV4f+9vb3/edbi/z7q//836v//L+v//ybr//8c7P//Eu3//wfu//8B7///AfH//wHz//8B9P//Afb//wH4//8B+v//Afv//wH9//8C/v//Cv///xL///8a////If///yj///8v////Nf///zv///9B////Rv///0z///9R////Vf///1n///9d////YP///2P///9l////Zv///2f///9n////Zv///2X///9j////Yf///17///9a////Vv///1L///9N////R////0L///88////Nv///zD///8p////Iv///xr///8Q5vf/AYbb/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkOAH7ZzwB+2f8Aftn/AH7Z/wB+2f8Aftn/AJDn/wCv//8Asf//BLT//w+5//8Zvv//I8P//y3H/v82zP7/P9D+/0fU/v9Q2P7/Vtv+/13e/v9i4f7/ZuP+/6HIz/+gyND/aOj+/2bp/v9j6f7/rcfL/7nCw/9Z6Pr/Suv+/0Lr//846///L+z//yXs//8a7f//D+7//wTv//8B8P//AfL//wH0//8B9f//Aff//wH5//8B+///Afz//wH+//8G////Dv///xb///8d////JP///yv///8x////N////zz///9C////R////0v///9Q////VP///1f///9a////Xf///1////9g////Yf///2H///9g////X////13///9b////WP///1X///9R////TP///0j///9C////Pf///zj///8y////LP///yX///8d////E+b3/wGG2/8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AJDn/wCx//8Cs///FLv//yDA//8rxf7/Ncn+/z/O/v9I0v7/Utb+/1ra/v9j3v7/aeH+/27j/v9z5v7/jNrp/7y8vP+P2eX/dOr+/3/j8v/BwcH/jdnj/1zr/v9V6/7/TOz+/0Ls//847P//Le3//yPt//8X7v//C+///wHw//8B8f//AfP//wH1//8B9v//Afj//wH6//8B/P//Af3//wL+//8J////Ev///xn///8f////Jv///yz///8y////N////zz///9B////Rv///0r///9O////Uv///1T///9X////WP///1r///9a////Wv///1r///9Z////V////1X///9S////T////0v///9H////Qv///z3///84////M////y3///8n////IP///xXm9/8Bhtv/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftmfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AJHn/wCy//8Ftv//JcH+/zLH/v89y/7/SND+/1LV/v9c2f7/Zt3+/27g/v914/7/e+X+/3/n/v+C6f7/t8TG/7rBw/+D6fr/pNXd/7rJy/9w7f7/aOz+/1/s/v9V7P7/S+z+/0Dt//817f//Ku3//x/u//8S7v//Be///wHx//8B8v//AfT//wH2//8B9///Afn//wH7//8B/P//Af7//wX///8M////FP///xv///8h////J////y3///8z////N////zz///9A////Rf///0j///9L////Tv///1D///9S////U////1T///9U////U////1L///9R////Tv///0z///9J////Rf///0H///89////OP///zP///8u////KP///yH///8W5vf/AYbb/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZnwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AIfg/wCw/P8Dtv7/L8b+/0XN/v9R0v7/W9f+/2bb/v9w3/7/eeL+/4Dl/v+H5/7/jOr+/4/r/v+v0df/wcHB/6zS2P+30NT/p9fe/3vu/v9y7f7/ae3+/1/t/v9T7f7/Se3+/z3t//8x7f//Je7//xju//8L7///AfD//wHy//8B8///AfX//wH3//8B+P//Afr//wH7//8B/f//Af7//wf///8P////Fv///xz///8i////KP///y3///8y////N////zr///8+////Qv///0X///9I////Sv///0v///9N////Tf///03///9N////TP///0r///9I////Rv///0L///8/////O////zf///8z////Lv///yj///8i////Es7w/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2Z8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AIjg/wCr9/8EuP7/MMf+/1jU/v9k2f7/b93+/3nh/v+D5P7/jOf+/5Pq/v+Z7P7/nO7+/7DY4P/Dw8P/w8PD/8jIyP+b5fD/he/+/3zu/v9y7v7/Z+7+/1zu/v9P7f7/RO3//zft//8r7v//Hu7//xHv//8E7///AfH//wHy//8B9P//Afb//wH3//8B+f//Afr//wH8//8B/f//Av7//wn///8Q////F////xz///8i////J////yz///8x////Nf///zj///87////Pv///0H///9D////Rf///0b///9G////Rv///0b///9F////Q////0H///8/////PP///zn///82////Mv///y3///8n////Iv///w++7P8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftmfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AIHb/wCk8/8AuP//KcX+/2za/v933v7/guP+/43m/v+X6f7/n+z+/6bu/v+q8P7/uNvi/8XFxf/FxcX/ycnJ/5nx//+P8P//he/+/3rv/v9u7v7/Y+7+/1bu/v9K7f7/Pe3//zDt//8j7v//Fu7//wjv//8B8P//AfH//wHz//8B9f//Afb//wH4//8B+f//Afv//wH8//8B/v//A////wr///8R////F////xz///8h////Jv///yv///8v////M////zX///84////Ov///zz///8+////P////z////8/////P////z7///88////O////zj///82////M////y////8r////Jv///x/2/P8JpuT/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZnwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCa7P8Auf//FcH+/2fZ/v+K5P7/l+j+/6Hr/v+r7v7/s/D+/7jy///A3eP/x8fH/8fHx//Gz9D/rOjy/5nx//+N8P//ge/+/3Xv/v9p7v7/XO7+/0/t/v9C7f//NO3//yft//8a7v//DO7//wHv//8B8f//AfL//wH0//8B9f//Aff//wH4//8B+v//Afv//wH9//8B/v//BP///wr///8R////Fv///xv///8g////JP///yj///8s////L////zL///80////Nv///zf///84////OP///zj///84////N////zb///80////Mv///zD///8s////KP///yT///8a5vf/BZbg/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2Z8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7ZzwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCJ4P8As/r/CL/+/1LV/v+f6v7/rO3+/7fw/v/A8///xvT//8jf5P/Jycn/ycnJ/8HZ3f/G19r/seTt/5Xx//+I8P//e+/+/27u/v9h7v7/U+3+/0bt//847f//K+3//x3t//8P7v//Au7//wHw//8B8f//AfP//wH0//8B9v//Aff//wH5//8B+v//Afv//wH9//8B/v//BP///wn///8P////Ff///xn///8d////If///yX///8o////K////y3///8v////MP///zH///8y////Mv///zH///8w////L////y3///8r////KP///yX///8h////Ecbu/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkOAH7ZvwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCB2/8Aoe7/AL///x/J/v+H5P7/wfL//8z1///U9///zdbX/8vLy//Ly8v/x9jb/7fy/P/C3eH/vNzh/5nq9v9/7/7/cu7+/2Xu/v9W7f7/Se3+/zvt//8t7P//IO3//xHt//8E7f//Ae///wHw//8B8v//AfP//wH1//8B9v//Afj//wH5//8B+v//Afz//wH9//8B/v//A////wj///8N////Ev///xf///8a////Hv///yH///8j////Jv///yf///8p////Kv///yr///8q////Kv///yn///8o////Jv///yP///8g////Gu76/wee4v8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftnvAH7ZXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZjwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AiuD/ALT3/wDD//9L1///u/H//+H5///P0tP/zMzM/83Nzf/J4eb/u/X//63z//+f8v//kfD//4Lv/v917v7/Z+3+/1nt/v9L7P7/Pez//y/s//8i7P//E+z//wXt//8B7v//Ae///wHx//8B8v//AfT//wH1//8B9v//Afj//wH5//8B+v//Afv//wH9//8B/v//Av7//wb///8K////D////xP///8X////Gf///xz///8e////IP///yH///8i////I////yP///8i////If///yD///8e////G////w2+7P8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z3wB+2S4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0Z/R0dH/0dHR7wAAAAAAAAAAAAAAAAAAAAAAftkuAH7ZjwB+2d8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2a8AftleAH7ZDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHR79HR0f/R0dGPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2R4AftleAH7ZnwB+2d8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftm/AH7ZfgB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0S7R0dH/0dHR/9HR0S4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2Q4Aftk+AH7ZfgB+2Z8Aftm/AH7Z3wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8Aftm/AH7ZfgB+2V4AftkuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHRXtHR0f/R0dHfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkOAH7ZPgB+2T4Aftk+AH7ZPgB+2T4AftkuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR0dF+0dHR/9HR0Z8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0b/R0dH/0dHRXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHRv9HR0f/R0dE+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR0dG/0dHR/9HR0Q4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0Y/R0dH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHRPtHR0f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHRv9HR0S4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR0dEu0dHRbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR0dGv0dHRXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0T7R0dH/0dHRj9HR0Q4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0Y/R0dH/0dHR39HR0V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0U7R0dHP0dHR/9HR0d/R0dFeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////4P///+AP/////////////AAH//4AAP////////////AAAf/4AAA////////////AAAB/4AAAD///////////AAAAH8AAAAf//////////gAAAA8AAAAB//////////wAAAAGAAAAAP/////////4AAAAAAAAAAB/////////8AAAAAAAAAAAP////////+AAAAAAAAAAAD/////////AAAAAAAAAAAAP////////wAAAAAAAAAAAAP///////4AAAAAAAAAAAAAf//////+AAAAAAAAAAAAAA///////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAAP/////4AAAAAAAAAAAAAAA/////+AAAAAAAAAAAAAAAD/////gAAAAAAAAAAAAAAAP////4AAAAAAAAAAAAAAAB////+AAAAAAAAAAAAAAAAP////gAAAAAAAAAAAAAAAA////4AAAAAAAAAAAAAAAAH///+AAAAAAAAAAAAAAAAA////gAAAAAAAAAAAAAAAAH///4AAAAAAAAAAAAAAAAA///+AAAAAAAAAAAAAAAAAH///gAAAAAAAAAAAAAAAAA///4AAAAAAAAAAAAAAAAAH//+AAAAAAAAAAAAAAAAAA///wAAAAAAAAAAAAAAAAAH//8AAAAAAAAAAAAAAAAAB///AAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//+AAAAAAAAAAAAAAAAAAf//wAAAAAAAAAAAAAAAAAD//4AAAAAAAAAAAAAAAAAA//mAAAAAAAAAAAAAAAAAAH/xAAAAAAAAAAAAAAAAAAB/8AAAAAAAAAAAAAAAAAAAP/gAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAA/5AAAAAAAAAAAAAAAAAAAH+QAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAAAAAAAAAAD/gAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAAAAAAAAAAD/wAAAAAAAAAAAAAAAAAAA/8AAAAAAAAAAAAAAAAAAAP/AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAAAB/+AAAAAAAAAAAAAAAAAAAf/gAAAAAAAAAAAAAAAAAAH/4AAAAAAAAAAAAAAAAAAD//AAAAAAAAAAAAAAAAAAA//wAAAAAAAAAAAAAAAAAAP/8AAAAAAAAAAAAAAAAAAH//gAAAAAAAAAAAAAAAAAB//4AAAAAAAAAAAAAAAAAA///AAAAAAAAAAAAAAAAAAP//wAAAAAAAAAAAAAAAAAD//8AAAAAAAAAAAAAAAAAB///gAAAAAAAAAAAAAAAAAf//8AAAAAAAAAAAAAAAAAP///AAAAAAAAAAAAAAAAAH///4AAAAAAAAAAAAAAAAB///+AAAAAAAAAAAAAAAAA////wAAAAAAAAAAAAAAAAP///+AAAAAAAAAAAAAAAAH////gAAAAAAAAAAAAAAAD////8AAAAAAAAAAAAAAAB/////gAAAAAAAAAAAAAAAf////8AAAAAAAAAAAAAAAP/////AAAAAAAAAAAAAAAH/////4AAAAAAAAAAAAAAD//////AAAAAAAAAAAAAAB//////4AAAAAAAAAAAAAA///////AAAAAAAAAAAAAAf//////4AAAAAAAAAAAAAP///////AAAAAAAAAAAAAH///////4AAAAAAAAAAAAD////////AAAAAAAAAAAAB////////8AAAAAAAAAAAA/////////gAAAAAAAAAAAf////////8AAAAAAAAAAAf/////////wAAAAAAAAAAP/////////+AAAAAAAAAAP//////////4AAAAAAAAAH///////////gAAAAAAAAH///////////+AAAAAAAAH////////////gAAAAAAAH////////////4AAAAAAAP////////////+PAAAAAAP/////////////j+AAAAA//////////////w/+AAAD//////////////8f//4D////////////////H////////////////////x////////////////////8f////////////////////H////////////////////z////////////////////8/////////////////////n////////////////////5/////////////////////P////////////////////w////////////////////+H////////////////////wf////////////8L \ No newline at end of file diff --git a/AppleBatch_June.FromExper.resx b/AppleBatch_June.FromExper.resx new file mode 100644 index 0000000..aa6c342 --- /dev/null +++ b/AppleBatch_June.FromExper.resx @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABNTeXN0ZW0uRHJhd2luZy5JY29uAgAAAAhJY29uRGF0YQhJY29uU2l6ZQcEAhNTeXN0ZW0uRHJhd2luZy5TaXplAgAAAAIAAAAJAwAAAAX8////E1N5c3RlbS5EcmF3aW5nLlNpemUCAAAABXdpZHRoBmhlaWdodAAACAgCAAAAAAAAAAAAAAAPAwAAAD4IAQACAAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAABABILAAASCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkOAH7ZPgB+2T4Aftk+AH7ZDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2S4Aftk+AH7ZfgB+2X4Aftl+AH7ZfgB+2X4Aftk+AH7ZLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkeAH7ZbgB+2a8AftnfAH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2c8AftmfAH7ZXgB+2R4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkOAH7ZXgB+2a8AftnvAH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8AftluAH7ZHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftleAH7ZzwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8AftleAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkeAH7ZnwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZrwB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftleAH7Z3wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftnfAH7ZXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkeAH7ZnwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8AftkeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7ZzwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZvwB+2R4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZbgB+2e8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2V4Aftn/AH7Z/wB+2f8Aftn/AIvn/wCl//8AqP//AKz//wCw//8As///ALb//wC6//8Av///AMT//wDK//8Azv//ANP//wDX//8A2v//AN3//wDf//8A4v//AOT//wDl//8A5///AOj//wDp//8A6v//AOr//wDq//8A6v//AOn//wDo//8AxvP/AH7Z/wB+2f8Aftn/AH7Z/wCM5/8Apf//AKn//wCs//8AsP//ALP//wC3//8Au///AMD//wDF//8Ay///AND//wDU//8A2P//ANv//wDd//8A4P//AOP//wDl//8A5///AOj//wDp//8A6v//AOv//wDs//8A7P//AOv//wDr//8A6v//AOn//wDn//8A5f//AOP//wDh//8AqOn/AH7Z/wB+2f8Aftn/AH7Z/wCa7v8AsP//ALD//wCn9/8AlOn/AIHb/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8AftkeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZnwB+2f8Aftn/AH7Z/wB+2f8AlvD/AKf//wCr//8Arv//ALL//wC1//8Auf//AL7//wDD//8Ayf//AM7//wDT//8A1///ANv//wDe//8A4P//AOP//wDl//8A6P//AOr//wDr//8A7f//AO7//wDu//8A7///AO///wDu//8A7v//AO3//wCu6f8Aftn/AH7Z/wB+2f8Aftn/AJbw/wCn//8Aq///AK///wCy//8Atv//ALn//wC///8AxP//AMr//wDP//8A1P//ANj//wDb//8A3v//AOH//wDk//8A5v//AOn//wDr//8A7f//AO7//wDv//8A8P//APD//wDw//8A8P//AO///wDu//8A7f//AOv//wDp//8A5///AOX//wDJ9f8Aftn/AH7Z/wB+2f8Aftn/AI7k/wCy//8Asv//ALL//wCx//8Asf//AJ7w/wCL4v8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AH7ZDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftm/AH7Z/wB+2f8Aftn/AH7Z/wCj/P8Aqf//AK3//wCw//8AtP//ALj//wC8//8Awv//AMj//wDN//8A0///ANf//wDb//8A3v//AOH//wDk//8A5///AOn//wDs//8A7v//APD//wDx//8A8v//APP//wDz//8A8///APP//wDy//8A8f//AJri/wB+2f8Aftn/AH7Z/wB+2f8Aofr/AKn//wCt//8Asf//ALT//wC4//8Avf//AMP//wDI//8Azv//ANP//wDY//8A2///AN///wDi//8A5f//AOj//wDq//8A7f//AO///wDx//8A8v//APP//wD0//8A9f//APX//wD0//8A9P//APP//wDx//8A8P//AO3//wDr//8A6P//AOb//wB+2f8Aftn/AH7Z/wB+2f8AhN3/ALP//wCz//8As///ALP//wCz//8As///ALP//wCs+v8Akef/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftnfAH7ZPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8Agt3/AKf//wCr//8Ar///ALL//wC2//8Auv//AMD//wDG//8AzP//ANH//wDW//8A2v//AN7//wDh//8A5P//AOf//wDq//8A7f//APD//wDy//8A9P//APX//wD3//8A9///APj//wD4//8A+P//APf//wD2//8AjN3/AH7Z/wB+2f8Aftn/AH7Z/wCn//8Aq///AK///wCz//8Atv//ALr//wDA//8Axv//AMz//wDS//8A1///ANv//wDe//8A4v//AOX//wDo//8A6///AO7//wDx//8A8///APX//wD3//8A+P//APn//wD5//8A+f//APn//wD4//8A9///APb//wD0//8A8f//AO///wDs//8A6f//AJji/wB+2f8Aftn/AH7Z/wB+2f8Btf//AbX//wG1//8Atf//ALT//wC0//8AtP//ALT//wC0//8Arfr/AJLn/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z/wB+2f8Aftn/AH7Z/wCI4v8Aqf//AK3//wCw//8AtP//ALj//wC9//8Aw///AMn//wDP//8A1f//ANn//wDd//8A4f//AOT//wDo//8A6///AO7//wDx//8A8///APb//wD4//8A+v//APv//wD8//8A/P//APz//wD8//8A+///APr//wB+2f8Aftn/AH7Z/wB+2f8AiOL/AKn//wCt//8Asf//ALT//wC4//8Avf//AMT//wDK//8A0P//ANX//wDZ//8A3f//AOH//wDl//8A6P//AOz//wDv//8A8v//APT//wD3//8A+f//APv//wD8//8A/f//Af7//wH+//8A/f//AP3//wD7//8A+v//APj//wD1//8A8v//APD//wDs//8AmeL/AH7Z/wB+2f8Aftn/AH7Z/wG2//8Btv//Abb//wG2//8Btv//ALb//wC2//8Atv//ALX//wC1//8Atf//AK76/wCL4v8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZzwB+2R4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftn/AH7Z/wB+2f8Aftn/AIji/wCq//8Arv//ALL//wC2//8Auv//AMD//wDG//8AzP//ANP//wDY//8A3P//AN///wDj//8A5///AOv//wDu//8A8f//APT//wD3//8A+v//APz//wH+//8F/v//Cf///wz///8M////Cf///wX+//8B/v//AH7Z/wB+2f8Aftn/AH7Z/wCI4v8Aqv//AK7//wCy//8Atv//ALr//wDA//8Ax///AM3//wDT//8A2P//ANz//wDg//8A5P//AOf//wDr//8A7///APL//wD1//8A+P//APv//wD9//8E/v//Cv///xD///8T////E////xH///8M////Bv7//wH9//8A+///APn//wD2//8A8///APD//wCn5/8Aftn/AH7Z/wB+2f8Aftn/AK33/wG4//8BuP//Abj//wG4//8BuP//Abf//wC3//8At///ALf//wC2//8Atv//ALb//wCk8/8Ahd3/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z7wB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8AiOL/AKv//wCv//8As///ALf//wC8//8Aw///AMn//wDP//8A1f//ANr//wDe//8A4v//AOb//wDq//8A7f//APH//wD1//8A+P//APv//wD9//8H/v//Ef///xn///8e////If///yH///8f////Gv///xL///8Aftn/AH7Z/wB+2f8Aftn/AIji/wCr//8Ar///ALP//wC3//8AvP//AMP//wDJ//8A0P//ANb//wDa//8A3v//AOL//wDm//8A6v//AO7//wDy//8A9f//APj//wD8//8C/v//DP///xb///8e////JP///yf///8n////Jf///yD///8Z////D////wT+//8A/P//APn//wD2//8A8///AKjn/wB+2f8Aftn/AH7Z/wB+2f8Aq/X/Abr//wG6//8Buv//Abn//wG5//8Buf//Abn//wG4//8AuP//ALj//wC4//8At///ALf//wCz/P8Alun/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z/wB+2f8Aftn/AH7Z/wCJ4v8Arf//ALH//wC1//8Auf//AL///wDF//8AzP//ANL//wDY//8A3P//AOD//wDk//8A6P//AOz//wDw//8A9P//APf//wD7//8B/v//Df///xr///8k////LP///zH///80////NP///zL///8t////Jf///wB+2f8Aftn/AH7Z/wB+2f8AieL/AK3//wCx//8Atf//ALn//wC///8Axf//AMz//wDS//8A2P//ANz//wDg//8A5P//AOj//wDs//8A8P//APT//wD4//8A/P//A/7//xD///8e////KP///zH///83////Ov///zr///84////M////yv///8h////Ff///wb+//8A/f//APn//wD1//8Am+L/AH7Z/wB+2f8Aftn/AH7Z/wG8//8BvP//Abz//wG8//8BvP//Abv//wG7//8Bu///Abr//wG6//8Buv//ALn//wC5//8AuP//ALj//wC3//8AqfX/AIHb/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2W4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftn/AH7Z/wB+2f8Aftn/AIni/wCu//8Asv//ALb//wC6//8Awf//AMf//wDO//8A1P//ANn//wDe//8A4v//AOb//wDq//8A7v//APL//wD2//8A+v//Af7//w3///8d////Kv///zX///89////Q////0b///9G////Q////z7///82////A4bb/wB+2f8Aftn/AH7Z/wCA2/8Arv//ALL//wC2//8Auv//AMD//wDH//8Azv//ANT//wDZ//8A3v//AOL//wDm//8A6v//AO///wDz//8A9///APv//wL+//8Q////IP///y7///84////Qv///0j///9M////TP///0n///9E////O////zH///8k////Ff///wX+//8A/P//APj//wCc4v8Aftn/AH7Z/wB+2f8Aftn/Ab///wG///8Bv///Ab///wG+//8Bvv//Ab7//wG9//8Bvf//Abz//wG8//8Bu///Abv//wC6//8Auv//ALn//wC4//8AtPz/AIng/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2Z8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2e8Aftn/AH7Z/wB+2f8AgNv/AK///wCz//8At///ALz//wDC//8Ayf//AND//wDW//8A2///AN///wDj//8A6P//AOz//wDw//8A9f//APn//wD9//8J////G////yv///84////RP///03///9U////WP///1j///9U////Tv///0X///8PnuL/AH7Z/wB+2f8Aftn/AH7Z/wCr/P8Asv//ALf//wC7//8Awv//AMn//wDQ//8A1v//ANr//wDf//8A4///AOj//wDs//8A8P//APX//wD5//8A/f//C////x3///8t////O////0f///9R////Wf///13///9d////Wv///1T///9K////P////zH///8i////EP///wH+//8A+v//AH7Z/wB+2f8Aftn/AH7Z/wCC2/8Bwv//AcH//wHB//8Bwf//AcH//wHB//8BwP//AcD//wHA//8Bv///Ab///wG+//8Bvf//Ab3//wC8//8Au///ALr//wC6//8Auf//AJTn/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2Y8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZvwB+2f8Aftn/AH7Z/wB+2f8Aqfr/ALP//wC4//8Avf//AMT//wDL//8A0f//ANf//wDc//8A4P//AOX//wDp//8A7f//APL//wD2//8A+///Av7//xT///8m////Nv///0X///9R////XP///2P///9o////aP///2T///9d////Uv///yC26f8Aftn/AH7Z/wB+2f8Aftn/AKDz/wCz//8At///AL3//wDD//8Ayv//ANH//wDX//8A3P//AOD//wDk//8A6f//AO3//wDy//8A9v//APv//wP+//8V////J////zj///9H////VP///1////9n////bP///23///9p////Yv///1j///9L////PP///yz///8b////B/7//wDk9/8Aftn/AH7Z/wB+2f8Aftn/AI/i/wHE//8BxP//AcT//wHE//8BxP//AcP//wHD//8Bw///AcL//wHC//8Bwf//AcD//wHA//8Bv///Ab7//wG+//8Avf//ALz//wC7//8Auv//AJ/u/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftmPAH7Z/wB+2f8Aftn/AH7Z/wCe8P8AtP//ALj//wC+//8Axf//AMz//wDS//8A2P//AN3//wDh//8A5v//AOr//wDv//8A8///APf//wD8//8I////HP///y////8/////T////13///9o////cf///3b///92////cv///2n///9e////NM7w/wB+2f8Aftn/AH7Z/wB+2f8Akef/ALT//wC4//8Avv//AMT//wDL//8A0v//ANj//wDc//8A4f//AOX//wDq//8A7v//APP//wD3//8A/P//CP///x3///8v////QP///1D///9f////a////3T///96////e////3f///9u////Yv///1X///9F////NP///yL///8O////AMbu/wB+2f8Aftn/AH7Z/wB+2f8Aouz/Acf//wHH//8Bx///Acb//wHG//8Bxv//Acb//wHF//8Bxf//AcT//wHE//8Bw///AcL//wHC//8Bwf//AcD//wG///8Avv//AL3//wC8//8Au///AKTw/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2U4Aftn/AH7Z/wB+2f8Aftn/AIri/wC0//8Auf//AL///wDG//8AzP//ANP//wDZ//8A3f//AOL//wDm//8A6///AO///wD0//8A+f//AP3//w7///8i////Nf///0b///9X////Zv///3P///99////g////4P///99////dP///2f///9O7vr/AH7Z/wB+2f8Aftn/AH7Z/wCB2/8Asfz/ALj//wC+//8Axf//AMz//wDT//8A2P//AN3//wDh//8A5v//AOv//wDv//8A9P//APj//wD9//8N////Iv///zX///9G////V////2b///90////f////4b///+H////gf///3f///9q////XP///0v///86////KP///xP///8Ajt3/AH7Z/wB+2f8Aftn/AH7Z/wC29f8Byf//Acn//wHJ//8Byf//Acn//wHJ//8ByP//Acj//wHH//8Bx///Acb//wHG//8Bxf//AcT//wHE//8Bw///AcL//wHB//8AwP//AL///wC+//8Avf//AKXw/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z7wB+2S4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8Aftn/AK76/wC5//8Av///AMb//wDN//8A1P//ANn//wDe//8A4v//AOf//wDr//8A8P//APT//wD5//8A/f//Ef///yb///85////Sv///1v///9r////ef///4X///+M////jf///4X///96////bP///13///8PluD/AH7Z/wB+2f8Aftn/AH7Z/wCg8P8AuP//AL7//wDF//8AzP//ANP//wDZ//8A3f//AOL//wDm//8A6///AO///wD0//8A+f//AP3//w////8k////N////0n///9a////av///3n///+F////jv///4////+I////fP///2////9f////Tv///z3///8q////Et71/wB+2f8Aftn/AH7Z/wB+2f8Agtv/Acz//wHM//8BzP//Acz//wHM//8By///Acv//wHL//8Byv//Acr//wHJ//8Byf//Acj//wHI//8Bx///Acb//wHF//8BxP//AcP//wHC//8Awf//AMD//wC///8Avv//AKXw/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z3wB+2Q4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZnwB+2f8Aftn/AH7Z/wB+2f8Ak+f/ALn//wC///8Axv//AM3//wDU//8A2f//AN7//wDi//8A5///AOv//wDw//8A9f//APn//wH+//8S////J////zn///9L////XP///2z///97////h////5D///+Q////h////3z///9t////Xv///zLO8P8Aftn/AH7Z/wB+2f8Aftn/AIXd/wC4//8Avv//AMX//wDM//8A0///ANn//wDd//8A4v//AOb//wDr//8A7///APT//wD5//8A/f//D////yT///83////Sf///1r///9q////ef///4X///+O////j////4j///98////b////1////9O////Pf///yr///8HnuL/AH7Z/wB+2f8Aftn/AH7Z/wCh6f8Bz///Ac///wHP//8Bz///Ac7//wHO//8Bzv//Ac3//wHN//8Bzf//Acz//wHL//8By///Acr//wHJ//8Byf//Acj//wHH//8Bxv//AcX//wHE//8Aw///AMH//wDA//8Av///AJ7s/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZrwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftk+AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Arvf/AL///wDG//8Azf//ANT//wDZ//8A3v//AOL//wDn//8A6///APD//wD0//8A+f//AP3//xD///8l////OP///0n///9a////af///3f///+C////if///4r///+D////eP///2v///9b////Rvb8/wOG2/8Aftn/AH7Z/wB+2f8Aftn/AJvs/wC+//8Axf//AMz//wDT//8A2P//AN3//wDh//8A5v//AOv//wDv//8A9P//APj//wD9//8N////Iv///zT///9G////V////2b///90////f////4b///+H////gf///3f///9q////XP///0v///86////G87w/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AMf6/wHR//8B0f//AdH//wHR//8B0f//AdH//wHQ//8B0P//AdD//wHP//8Bz///Ac7//wHN//8Bzf//Acz//wHL//8Byv//Acn//wHI//8Bx///Acb//wHF//8AxP//AMP//wDB//8AwP//AJbn/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftm/AH7Z/wB+2f8Aftn/AH7Z/wCJ4P8Avv//AMX//wDM//8A0///ANn//wDd//8A4v//AOb//wDr//8A7///APT//wD4//8A/f//DP///yD///8z////RP///1T///9j////b////3n///9+////fv///3n///9w////ZP///1X///9F////HL7s/wB+2f8Aftn/AH7Z/wB+2f8Aftn/ALL3/wDE//8Ay///ANL//wDY//8A3P//AOH//wDl//8A6v//AO7//wDz//8A9///APz//wj///8d////L////0D///9Q////Xv///2v///90////ev///3v///92////bv///2L///9V////Rf///y/u+v8Chtv/AH7Z/wB+2f8Aftn/AH7Z/wCe5/8B1P//AdT//wHU//8B1P//AdT//wHU//8B0///AdP//wHT//8B0v//AdL//wHR//8B0f//AdD//wHP//8Bzv//Ac7//wHN//8BzP//Acv//wHK//8Byf//Acj//wHG//8Axf//AMT//wDC//8Avfz/AIrg/wB+2f8Aftn/AH7Z/wB+2f8AftnvAH7ZDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2T4Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCW5/8AxP//AMv//wDS//8A2P//ANz//wDh//8A5f//AOr//wDu//8A8///APf//wD7//8G/v//Gv///yz///88////S////1n///9k////bP///3H///9x////bf///2X///9a////Tf///z3///8QpuT/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aht3/AL/8/wDK//8A0f//ANf//wDc//8A4P//AOT//wDp//8A7f//APL//wD2//8A+///A/7//xX///8n////OP///0b///9U////X////2f///9s////bf///2n///9i////V////0v///859vz/CZbg/wB+2f8Aftn/AH7Z/wB+2f8Ag9v/AMv6/wHW//8B1v//Adb//wHW//8Ars//AGt//wDI7/8B1v//AdX//wHV//8B1P//AdT//wHT//8B0v//AdL//wHR//8B0P//Ac///wHO//8Bzf//Acz//wHL//8Byv//Acn//wHH//8Axv//AMX//wDD//8Atff/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftmfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2d8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCq8P8Ayv//ANH//wDX//8A2///AOD//wDk//8A6f//AO3//wDx//8A9v//APr//wH+//8Q////Iv///zL///9A////TP///1f///9e////Yv///2L///9e////V////03///9B////Fa7n/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Ai+D/AMT8/wDQ//8A1v//ANr//wDf//8A4///AOj//wDs//8A8P//APX//wD5//8A/f//C////x3///8t////Ov///0f///9R////WP///1z///9d////Wv///1P///9K////Pv///xGm5P8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCr7P8B2P//Adj//wHY//8B2P//Adj//wBRX/8AAAD/AGx//wHX//8B1///Adf//wHW//8B1v//Adb//wHV//8B1P//AdP//wHT//8B0v//AdH//wHQ//8Bz///Ac3//wHM//8By///Acr//wHJ//8Ax///AMb//wDE//8AoOz/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftkuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftk+AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCo7v8Az///ANX//wDa//8A3v//AOP//wDn//8A6///APD//wD0//8A+P//APz//wX+//8W////Jv///zP///8+////R////07///9R////Uf///07///9I////P////xWu5/8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AjOD/AMn8/wDU//8A2f//AN7//wDi//8A5v//AOr//wDv//8A8///APf//wD7//8C/v//EP///yD///8t////OP///0H///9I////S////0z///9J////Q////zj2/P8OnuL/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AleL/Adr//wHa//8B2v//Adr//wHa//8AzO//AAAA/wAAAP8AsM//Adn//wHZ//8B2f//Adj//wHY//8B1///Adf//wHW//8B1v//AdX//wHU//8B0///AdL//wHR//8B0P//Ac///wHN//8BzP//Acv//wDJ//8AyP//AMf//wDF//8Ai+D/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALgAAAB4AAAAAAAAAAAB+2b8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCc5/8Azvz/ANn//wDd//8A4f//AOX//wDq//8A7v//APL//wD1//8A+f//AP3//wj+//8X////JP///y////83////PP///z////8/////Pf///zT2/P8QpuT/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Ag9v/AL31/wDY//8A3P//AOD//wDk//8A6P//AOz//wDw//8A9P//APj//wD8//8D/v//EP///x3///8o////Mf///zb///85////Ov///zj///8q5vf/Bo7d/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AIPb/wDV/P8B2///Adv//wHc//8B3P//Adz//wBgb/8AAAD/ADY//wHb//8B2///Adv//wHa//8B2v//Adr//wHZ//8B2f//Adj//wHY//8B1///Adb//wHW//8B1f//AdP//wHS//8B0f//AdD//wHO//8Bzf//Acz//wDK//8Ayf//AMf//wC09f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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/wBmsP8ABw3/AAAA/wAKD/8AW4//AKP//wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wCc9/8Aku7/AIvn/wCH4v8AgNv/AH7Z/wB+2f8Aftn/AIPd/wCJ4v8Aj+f/AJju/wCl9/8BsP//AbH//wGz//8BtP//Abb//wG3//8ikfv/hBvw/3cV3v9hCr//TQCh/yZhz/8BxP//Acb//wHJ//8By///Ac3//wHP//8B0f//AdL//wHU//8B1v//AMz6/wDC9f8ArOz/AKzs/wCh5/8AleL/AJzk/wCu7P8Ar+z/AMLz/wDV+v8B4v//AeP//wHk//8B5f//AeX//wHm//8B5///Aef//wHo//8A2e//ADo//wBJT/8AoK//Aen//wHp//8B6f//AIOP/wAOD/8AAAD/AJKf/wHp//8B6f//Aen//wHo//8B6P//Aej//wHn//8B5///Aeb//wHl//8B5f//AeT//wHj//8B4v//AeL//wHh//8B4P//Ad///wHe//8B3f//Adz//wHb//8B2v//Adn//wHX//8B1v//ANX//wDT//8A0f//AI3g/wB+2f8Aftn/AH7Z/wB+2f8AftkuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAA/wAXKP8Adsv/AH7Z/wB2y/8AHzb/AAAA/wAAAP8AFB//AGWf/wCY7/8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpf//Aaf//wGo//8Bqv//Aav//wGt//8Brv//Aa///wGx//8Bsv//AbT//wG1//8Bt///Abj//yKS+/+EG/D/dxXe/2EKv/9NAKH/JmLP/wHG//8ByP//Acr//wHM//8Bzv//AdD//wHS//8B1P//Adb//wHX//8B2f//Adr//wHb//8B3P//Ad3//wHe//8B3///AeD//wHh//8B4v//AeP//wHk//8B5f//AeX//wHm//8B5///Aej//wHo//8B6f//Aen//wHq//8B6v//Aer//wHr//8B6///AHV//wAOD/8AAAD/ACwv/wC/z/8B6///Aev//wHr//8B6v//Aer//wHq//8B6f//Aen//wHo//8B6P//Aef//wHm//8B5v//AeX//wHk//8B4///AeL//wHh//8B4P//Ad///wHe//8B3f//Adz//wHb//8B2v//Adn//wHY//8A1v//ANX//wDT//8Ap+z/AH7Z/wB+2f8Aftn/AH7Z/wB+2W4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuAAAA/wAXKP8Adsv/AH7Z/wCH4v8AW4//AAoP/wAAAP8AAAD/AAoP/wBwr/8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGq//8BrP//Aa3//wGv//8BsP//AbL//wGz//8Btf//Abb//wG3//8Buf//IpP7/4Qb8P93Fd7/YQq//00Aof8mY8//Acj//wHK//8BzP//Ac7//wHQ//8B0v//AdT//wHW//8B1///Adn//wHa//8B2///Adz//wHd//8B3///AeD//wHh//8B4v//AeP//wHk//8B5f//AeX//wHm//8B5///Aej//wHp//8B6f//Aer//wHq//8B6///Aev//wHs//8B7P//Aez//wHt//8AWV//AEpP/wCUn/8B7f//Ae3//wHt//8B7f//Aez//wHs//8B7P//Aev//wHr//8B6v//Aer//wHp//8B6f//Aej//wHn//8B5v//Aeb//wHl//8B5P//AeP//wHi//8B4f//AeD//wHf//8B3v//Ad3//wHb//8B2v//Adn//wHY//8A1v//ANX//wC+9f8Aftn/AH7Z/wB+2f8Aftn/AH7ZrwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2V4ARnr/AAAA/wAHDf8AVpX/AJDs/wCj//8AmO//AFuP/wAUH/8AAAD/AGWf/wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpf//Aaf//wGo//8Bqv//Aav//wGt//8Brv//AbD//wGx//8Bs///AbT//wG1//8Bt///Abj//wG6//8ilPv/hBvw/3cV3v9hCr//TQCh/yZkz/8Byv//Acz//wHO//8B0P//AdL//wHU//8B1v//Adf//wHZ//8B2v//Adv//wHc//8B3v//Ad///wHg//8B4f//AeL//wHj//8B5P//AeX//wHm//8B5///Aej//wHp//8B6f//Aer//wHr//8B7P//Aez//wHt//8B7f//Ae3//wHu//8B7v//Ae7//wHv//8B7///Ae///wHv//8B7///Ae///wHu//8B7v//Ae7//wHt//8B7f//Ae3//wHs//8B7P//Aev//wHq//8B6v//Aen//wHo//8B5///Aeb//wHl//8B5P//AeP//wHi//8B4f//AeD//wHf//8B3v//Ad3//wHc//8B2v//Adn//wDY//8A1v//ANX//wB+2f8Aftn/AH7Z/wB+2f8AftnfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZfgB+2f8AVpX/AAcN/wAAAP8AHC3/AFuP/wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGr//8BrP//Aa7//wGv//8BsP//AbL//wGz//8Btf//Abb//wG4//8Buf//Abv//yKV+/+EG/D/dxXe/2EKv/9NAKH/JmXP/wHL//8Bzf//AdD//wHS//8B1P//Adb//wHX//8B2f//Adr//wHb//8B3f//Ad7//wHf//8B4P//AeH//wHj//8B5P//AeX//wHm//8B5///Aej//wHp//8B6f//Aer//wHr//8B7P//Aez//wHt//8B7v//Ae7//wHv//8B7///AfD//wHw//8B8P//AfD//wHw//8B8f//AfH//wHx//8B8P//AfD//wHw//8B8P//Ae///wHv//8B7v//Ae7//wHt//8B7f//Aez//wHr//8B6v//Aer//wHp//8B6P//Aef//wHm//8B5f//AeT//wHj//8B4v//AeD//wHf//8B3v//Ad3//wHc//8B2v//ANn//wDY//8A1v//AI7g/wB+2f8Aftn/AH7Z/wB+2f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftm/AH7Z/wB+2f8Adsv/AD9s/wAUH/8AAAD/AJjv/wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpf//Aaf//wGo//8Bqv//Aav//wGt//8Brv//AbD//wGx//8Bs///AbT//wG2//8Bt///Abn//wG6//8Bvf//Ipb7/4Qb8P93Fd7/YQq//00Aof8mZc//Ac3//wHP//8B0f//AdP//wHW//8B1///Adn//wHa//8B2///Ad3//wHe//8B3///AeD//wHi//8B4///AeT//wHl//8B5v//Aef//wHo//8B6f//Aer//wHr//8B7P//Ae3//wHt//8B7v//Ae///wHv//8B8P//AfD//wHx//8B8f//AfL//wHy//8B8v//AfL//wHy//8B8v//AfL//wHy//8B8v//AfL//wHx//8B8f//AfH//wHw//8B8P//Ae///wHu//8B7f//Ae3//wHs//8B6///Aer//wHp//8B6P//Aef//wHm//8B5f//AeT//wHj//8B4v//AeH//wHf//8B3v//Ad3//wHc//8A2v//ANn//wDX//8AmeT/AH7Z/wB+2f8Aftn/AH7Z/wB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2b8Aftn/AH7Z/wB+2f8Aftn/AKP//wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGq//8BrP//Aa7//wGv//8Bsf//AbL//wG0//8Btf//Abf//wG4//8Buv//Abz//wG+//8il/v/hBvw/3cV3v9hCr//TQCh/yZmz/8Bz///AdH//wHT//8B1f//Adf//wHY//8B2v//Adv//wHc//8B3v//Ad///wHg//8B4v//AeP//wHk//8B5f//Aeb//wHo//8B6f//Aer//wHr//8B7P//Ae3//wHt//8B7v//Ae///wHw//8B8P//AfH//wHy//8B8v//AfP//wHz//8B8///AfT//wH0//8B9P//AfT//wH0//8B9P//AfT//wH0//8B8///AfP//wHz//8B8v//AfL//wHx//8B8f//AfD//wHv//8B7v//Ae7//wHt//8B7P//Aev//wHq//8B6f//Aej//wHn//8B5f//AeT//wHj//8B4v//AeH//wHf//8B3v//Ad3//wDb//8A2v//ANn//wCr7P8Aftn/AH7Z/wB+2f8Aftn/AH7ZPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z/wB+2f8Aftn/AH7Z/wCC3f8Ao///AKP//wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bpf//Aaf//wGo//8Bqv//Aav//wGt//8Brv//AbD//wGx//8Bs///AbT//wG2//8Bt///Abn//wG7//8Bvf//AcD//yKY+/+EG/D/dxXe/2EKv/9NAKH/JmfP/wHQ//8B0v//AdX//wHW//8B2P//Adn//wHb//8B3P//Ad7//wHf//8B4P//AeL//wHj//8B5P//AeX//wHn//8B6P//Aen//wHq//8B6///Aez//wHt//8B7v//Ae///wHw//8B8f//AfH//wHy//8B8///AfP//wH0//8B9P//AfX//wH1//8B9f//Afb//wH2//8B9v//Afb//wH2//8B9v//AfX//wH1//8B9f//AfT//wH0//8B8///AfP//wHy//8B8f//AfH//wHw//8B7///Ae7//wHt//8B7P//Aev//wHq//8B6f//Aej//wHn//8B5v//AeT//wHj//8B4v//AeH//wHf//8B3v//Ad3//wDb//8A2v//ALHu/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftn/AH7Z/wB+2f8Aftn/AIfi/wCj//8Ao///AKP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGq//8BrP//Aa3//wGv//8Bsf//AbL//wG0//8Btf//Abf//wG4//8Buv//Abz//wG///8Bwf//Ipn7/4Qb8P93Fd7/YQq//00Aof8maM//AdL//wHU//8B1v//Adj//wHZ//8B2///Adz//wHd//8B3///AeD//wHi//8B4///AeT//wHm//8B5///Aej//wHp//8B6v//Aez//wHt//8B7v//Ae///wHw//8B8P//AfH//wHy//8B8///AfT//wH0//8B9f//Afb//wH2//8B9v//Aff//wH3//8B9///Aff//wH4//8B+P//Afj//wH3//8B9///Aff//wH2//8B9v//Afb//wH1//8B9P//AfT//wHz//8B8v//AfH//wHx//8B8P//Ae///wHu//8B7f//Aez//wHr//8B6f//Aej//wHn//8B5v//AeT//wHj//8B4v//AeD//wHf//8B3v//ANz//wDb//8AwvX/AH7Z/wB+2f8Aftn/AH7Z/wB+2X4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8Ah+L/AKP//wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bpf//Aab//wGo//8Bqf//Aav//wGt//8Brv//AbD//wGx//8Bs///AbT//wG2//8Bt///Abn//wG7//8Bvf//AcD//wHC//8imvv/hBvw/3cV3v9hCr//TQCh/yZoz/8B0///AdX//wHX//8B2f//Adr//wHc//8B3f//Ad///wHg//8B4f//AeP//wHk//8B5f//Aef//wHo//8B6f//Aev//wHs//8B7f//Ae7//wHv//8B8P//AfH//wHy//8B8///AfT//wH1//8B9f//Afb//wH3//8B9///Afj//wH4//8B+P//Afn//wH5//8B+f//Afn//wH5//8B+f//Afn//wH5//8B+f//Afj//wH4//8B9///Aff//wH2//8B9f//AfX//wH0//8B8///AfL//wHx//8B8P//Ae///wHu//8B7f//Aez//wHr//8B6v//Aej//wHn//8B5v//AeT//wHj//8B4v//AeD//wHf//8A3f//ANz//wDD9f8Aftn/AH7Z/wB+2f8Aftn/AH7ZfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z/wB+2f8Aftn/AH7Z/wCH4v8Ao///AKP//wAoP/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AXX//Abz//wG///8Bwf//AcT//yKb+/+EG/D/dxXe/2EKv/9NAKH/JmnP/wHV//8B1///Adj//wHa//8B2///Ad3//wHe//8B4P//AeH//wHj//8B5P//AeX//wHn//8B6P//Aen//wHr//8Asb//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wH6//8B+v//Afn//wH5//8B+P//Afj//wH3//8B9v//AfX//wH1//8B9P//AfP//wHy//8B8f//AfD//wHu//8B7f//Aez//wHr//8B6v//Aej//wHn//8B5v//AeT//wHj//8B4f//AeD//wDe//8A3f//AMT1/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftn/AH7Z/wB+2f8Aftn/AIfi/wCj//8Ao///ACg//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wBdf/8Bvf//AcD//wHC//8Bxf//Ipz7/4Qb8P93Fd7/YQq//00Aof8mas//Adb//wHY//8B2f//Adv//wHc//8B3v//Ad///wHh//8B4v//AeT//wHl//8B5///Aej//wHp//8B6///Aez//wCyv/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Afz//wH8//8B+///Afv//wH6//8B+f//Afn//wH4//8B9///Afb//wH1//8B9P//AfP//wHy//8B8f//AfD//wHv//8B7f//Aez//wHr//8B6v//Aej//wHn//8B5f//AeT//wHi//8B4f//AOD//wDe//8AxfX/AH7Z/wB+2f8Aftn/AH7Z/wB+2X4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8Ah+L/AKP//wCj//8AKD//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AF5//wG///8Bwf//AcT//wHG//8infv/hBvw/3cV3v9hCr//TQCh/yZrz/8B1///Adj//wHa//8B3P//Ad3//wHf//8B4P//AeL//wHj//8B5f//Aeb//wHo//8B6f//Aer//wHs//8B7f//ALO//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8B/v//Af3//wH9//8B/P//Afz//wH7//8B+v//Afn//wH5//8B+P//Aff//wH2//8B9f//AfT//wHy//8B8f//AfD//wHv//8B7f//Aez//wHr//8B6f//Aej//wHm//8B5f//AeT//wHi//8A4f//AN///wDG9f8Aftn/AH7Z/wB+2f8Aftn/AH7ZfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z/wB+2f8Aftn/AH7Z/wCH4v8Ao///AKP//wBln/8AUX//AFF//wBRf/8AUX//AFF//wBRf/8AUX//AFF//wBRf/8AUn//AFN//wBTf/8AVH//AFV//wBWf/8AV3//AFd//wBYf/8AWX//AFp//wBbf/8AW3//AFx//wBdf/8Ajr//AcD//wHC//8Bxf//Acf//yKe+/+EG/D/dxXe/2EKv/9NAKH/JmvP/wHY//8B2f//Adv//wHd//8B3v//AeD//wHh//8B4///AeT//wHm//8B5///Aen//wHq//8B7P//Ae3//wHu//8A0t//AHh//wB5f/8Aen//AHp//wB7f/8Ae3//AHx//wB8f/8AfX//AH1//wB+f/8Afn//AH9//wB/f/8Bf3//An9//wN/f/8Ef3//BH9//wV/f/8Ff3//BX9//wV/f/8Ff3//BH9//wX///8D////Av7//wH+//8B/f//Af3//wH8//8B+///Afr//wH5//8B+P//Aff//wH2//8B9f//AfT//wHz//8B8f//AfD//wHv//8B7f//Aez//wHq//8B6f//Aej//wHm//8B5f//AeP//wDi//8A4P//AMb1/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftn/AH7Z/wB+2f8Aftn/AIfi/wCj//8Ao///AKP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpv//Aaj//wGp//8Bq///Aaz//wGu//8BsP//AbH//wGz//8BtP//Abb//wG4//8Buf//Abz//wG+//8Bwf//AcP//wHG//8ByP//Ip/7/4Qb8P93Fd7/YQq//00Aof8ma8//Adn//wHa//8B3P//Ad3//wHf//8B4f//AeL//wHk//8B5f//Aef//wHo//8B6v//Aev//wHt//8B7v//AfD//wHx//8B8v//AfT//wH1//8B9v//Aff//wH4//8B+f//Afr//wH7//8B/P//Af3//wH+//8C/v//Bf///wj///8L////Df///w////8Q////Ef///xH///8R////Ef///xD///8P////Df///wv///8I////Bv///wP///8B/v//Af3//wH9//8B/P//Afv//wH6//8B+f//Aff//wH2//8B9f//AfT//wHz//8B8f//AfD//wHu//8B7f//Aez//wHq//8B6f//Aef//wHm//8B5P//AOP//wDh//8Ax/X/AH7Z/wB+2f8Aftn/AH7Z/wB+2X4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8Ah+L/AKP//wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaX//wGm//8BqP//Aar//wGr//8Brf//Aa///wGw//8Bsv//AbP//wG1//8Bt///Abj//wG6//8Bvf//Ab///wHC//8BxP//Acf//wHK//8ioPv/hBvw/3cV3v9hCr//TQCh/yZsz/8B2f//Adv//wHd//8B3v//AeD//wHi//8B4///AeX//wHm//8B6P//Aen//wHr//8B7P//Ae7//wHv//8B8f//AfL//wH0//8B9f//Afb//wH3//8B+f//Afr//wH7//8B/P//Af3//wH+//8C/v//Bv///wr///8N////EP///xP///8V////F////xj///8Z////Gv///xr///8Z////GP///xf///8W////FP///xH///8O////Cv///wf///8D////Af7//wH9//8B/P//Afv//wH6//8B+f//Afj//wH2//8B9f//AfT//wHy//8B8f//AfD//wHu//8B7f//Aev//wHq//8B6P//Aef//wHl//8A5P//AOL//wDI9f8Aftn/AH7Z/wB+2f8Aftn/AH7ZfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z3wB+2f8Aftn/AH7Z/wCA2/8Ao///AKP//wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpf//Aaf//wGp//8Bqv//Aaz//wGt//8Br///AbH//wGy//8BtP//Abb//wG3//8Buf//Abv//wG+//8BwP//AcP//wHF//8ByP//Acv//yKh+/+EG/D/dxXe/2EKv/9NAKH/JmzP/wHa//8B3P//Ad7//wHf//8B4f//AeP//wHk//8B5v//Aef//wHp//8B6v//Aez//wHt//8B7///AfD//wHy//8B8///AfX//wH2//8B9///Afn//wH6//8B+///Afz//wH9//8B/v//Bf///wn///8O////Ev///xX///8Y////G////x3///8f////IP///yH///8i////Iv///yH///8g////H////x3///8b////Gf///xb///8T////D////wr///8G////Av7//wH+//8B/f//Afv//wH6//8B+f//Afj//wH2//8B9f//AfT//wHy//8B8f//Ae///wHu//8B7P//Aev//wHp//8B6P//Aeb//wDk//8A4///ALbu/wB+2f8Aftn/AH7Z/wB+2f8AftleAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftm/AH7Z/wB+2f8Aftn/AH7Z/wCj//8Ao///AKP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGr//8BrP//Aa7//wGw//8Bsf//AbP//wG0//8Btv//Abj//wG5//8BvP//Ab///wHB//8BxP//Acb//wHJ//8BzP//IqH7/4Qb8P93Fd7/YQq//00Aof8mbc//Adv//wHd//8B3v//AeD//wHi//8B4///AeX//wHn//8B6P//Aer//wHr//8B7f//Ae7//wHw//8B8v//AfP//wH0//8B9v//Aff//wH5//8B+v//Afv//wH9//8B/v//Av7//wf///8M////Ef///xb///8Z////HP///yD///8i////JP///yb///8o////KP///yn///8p////Kf///yj///8m////Jf///yP///8g////Hf///xr///8W////Ev///w3///8I////A/7//wH+//8B/f//Afz//wH6//8B+f//Afj//wH2//8B9f//AfP//wHy//8B8P//Ae///wHt//8B7P//Aer//wHp//8B5///AOX//wDk//8AsOz/AH7Z/wB+2f8Aftn/AH7Z/wB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2a8Aftn/AH7Z/wB+2f8Aftn/AJz3/wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8BpP//Aab//wGo//8Bqf//Aav//wGt//8Brv//AbD//wGy//8Bs///AbX//wG3//8BuP//Abr//wG9//8Bv///AcL//wHF//8Bx///Acr//wHN//8iovv/hBvw/3cV3v9hCr//TQCh/yZtz/8B3P//Ad3//wHf//8B4f//AeP//wHk//8B5v//Aej//wHp//8B6///Aez//wHu//8B8P//AfH//wHz//8B9P//Afb//wH3//8B+P//Afr//wH7//8B/f//Af7//wP+//8I////Dv///xT///8Y////HP///yD///8k////J////yr///8s////Lv///y////8w////Mf///zH///8w////L////y7///8s////Kv///yf///8k////If///x3///8Z////FP///w////8J////BP///wH+//8B/f//Afz//wH6//8B+f//Aff//wH2//8B9P//AfP//wHx//8B8P//Ae7//wHt//8B6///Aen//wHo//8A5v//AOX//wCd5P8Aftn/AH7Z/wB+2f8Aftn/AH7ZLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZfgB+2f8Aftn/AH7Z/wB+2f8Al/P/AKP//wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGl//8Bp///Aaj//wGq//8BrP//Aa3//wGv//8BsP//AbL//wG0//8Btf//Abf//wG5//8Bu///Ab7//wHA//8Bw///Acb//wHI//8By///Ac7//yKj+/+EG/D/dxXe/2EKv/9NAKH/Jm3P/wHd//8B3v//AeD//wHi//8B4///AeX//wHn//8B6P//Aer//wHs//8B7f//Ae///wHw//8B8v//AfT//wH1//8B9///Afj//wH6//8B+///Afz//wH+//8D////Cf///w////8V////Gv///x////8j////J////yv///8u////Mf///zP///81////Nv///zf///83////N////zf///82////Nf///zP///8x////Lv///yv///8o////JP///yD///8b////Fv///xD///8K////BP///wH+//8B/f//Afv//wH6//8B+P//Aff//wH1//8B9P//AfL//wHx//8B7///Ae7//wHs//8B6v//AOn//wDn//8A5f//AJHg/wB+2f8Aftn/AH7Z/wB+2f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftlOAH7Z/wB+2f8Aftn/AH7Z/wCQ7P8Ao///AKP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8BpP//AaX//wGn//8Bqf//Aar//wGs//8Brv//Aa///wGx//8Bs///AbT//wG2//8BuP//Abn//wG8//8Bvv//AcH//wHE//8Bxv//Acn//wHM//8Bz///J7D6/5RG5f+COM//aCev/1celv9lVpT/EdLv/wHf//8B4f//AeL//wHk//8B5v//Aef//wHp//8B6///Aez//wHu//8B8P//AfH//wHz//8B9f//Afb//wH4//8B+f//Afv//wH8//8B/v//A/7//wn///8P////Fv///xv///8g////Jf///yr///8u////Mf///zX///83////Of///zv///89////Pv///z7///8+////Pv///z3///87////Of///zf///81////Mv///y////8q////Jv///yH///8c////F////xH///8K////BP///wH+//8B/P//Afv//wH5//8B+P//Afb//wH1//8B8///AfL//wHw//8B7v//Ae3//wHr//8A6f//AOj//wDm//8Aftn/AH7Z/wB+2f8Aftn/AH7ZzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2S4Aftn/AH7Z/wB+2f8Aftn/AIfi/wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpv//Aaf//wGp//8Bq///Aaz//wGu//8BsP//AbH//wGz//8Btf//Abb//wG4//8Buv//Abz//wG///8Bwv//AcX//wHH//8Byv//Ac3//wHP//861/n/0tLS/6+vr/+MjIz/dnZ2/1yTnP9LrLr/AeD//wHh//8B4///AeX//wHm//8B6P//Aer//wHs//8B7f//Ae///wHx//8B8v//AfT//wH1//8B9///Afn//wH6//8B/P//Af3//wL+//8I////D////xb///8b////If///yb///8r////MP///zT///83////Ov///z3///9A////Qv///0P///9F////Rf///0X///9F////RP///0L///9A////Pv///zv///84////Nf///zH///8s////J////yL///8c////F////xD///8J////A/7//wH+//8B/P//Afr//wH5//8B9///Afb//wH0//8B8///AfH//wHv//8B7v//Aez//wDq//8A6f//AM31/wB+2f8Aftn/AH7Z/wB+2f8AftmvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8AgNv/AKP//wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8BqP//Aan//wGr//8Brf//Aa7//wGw//8Bsv//AbP//wG1//8Bt///Abj//wG6//8Bvf//AcD//wHD//8Bxf//Acj//wHL//8Bzf//AdD//z/c/f/l5eX/w8PD/6Ghof9+fn7/O6m6/2Sbo/8B4P//AeL//wHk//8B5f//Aef//wHp//8B6///Aez//wHu//8B8P//AfH//wHz//8B9f//Afb//wH4//8B+v//Afv//wH9//8B/v//Bv///w7///8V////G////yH///8n////LP///zH///82////Of///z3///9B////RP///0f///9J////Sv///0v///9M////TP///0z///9L////Sf///0f///9E////Qf///z7///86////Nv///zL///8t////KP///yL///8c////Fv///w////8I////Av7//wH9//8B/P//Afr//wH4//8B9///AfX//wHz//8B8v//AfD//wHu//8B7f//AOv//wDp//8Aue7/AH7Z/wB+2f8Aftn/AH7Z/wB+2X4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZvwB+2f8Aftn/AH7Z/wB+2f8AnPf/AKP//wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bpf//Aab//wGo//8Bqv//Aav//wGt//8Br///AbD//wGy//8BtP//AbX//wG3//8Buf//Abv//wG+//8BwP//AcP//wHG//8Byf//Acv//wHO//8B0f//QN7///b29v/X19f/tLS0/5GRkf89q7z/ZJuj/wHh//8B4///AeT//wHm//8B6P//Aer//wHr//8B7f//Ae///wHx//8B8v//AfT//wH2//8B9///Afn//wH7//8B/P//Af7//wT///8L////E////xr///8g////Jv///yz///8y////N////zv///8/////RP///0f///9K////Tf///0////9R////Uv///1P///9T////Uv///1H///9Q////Tf///0v///9I////RP///0D///88////N////zP///8t////KP///yH///8b////Ff///w3///8F////Af7//wH8//8B+///Afn//wH4//8B9v//AfT//wHz//8B8f//Ae///wHt//8A7P//AOr//wCf5P8Aftn/AH7Z/wB+2f8Aftn/AH7ZPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftl+AH7Z/wB+2f8Aftn/AH7Z/wCS7v8Ao///AKP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGl//8Bp///Aaj//wGq//8BrP//Aa3//wGv//8Bsf//AbL//wG0//8Btv//Abf//wG5//8BvP//Ab7//wHB//8BxP//Acf//wHJ//8BzP//Ac///wHS//9A3////v7+/+rq6v/IyMj/paWl/1aptf9knKT/AeH//wHj//8B5f//Aef//wHp//8B6v//Aez//wHu//8B8P//AfH//wHz//8B9f//Afb//wH4//8B+v//Afv//wH9//8C/v//Cf///xH///8Y////H////yX///8r////Mf///zf///87////QP///0X///9J////Tf///1D///9T////Vv///1f///9Z////Wf///1n///9Z////WP///1b///9U////Uf///07///9K////Rv///0H///89////N////zL///8t////Jv///yD///8Z////Ev///wr///8D/v//Af3//wH8//8B+v//Afj//wH3//8B9f//AfP//wHy//8B8P//AO7//wDs//8A6///AITb/wB+2f8Aftn/AH7Z/wB+2f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2T4Aftn/AH7Z/wB+2f8Aftn/AIfi/wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaX//wGn//8Bqf//Aar//wGs//8Brv//Aa///wGx//8Bs///AbT//wG2//8BuP//Abr//wG8//8Bv///AcL//wHE//8Bx///Acr//wHN//8B0P//AdL//0Df////////+fn5/9zc3P+5ubn/g56i/0S0w/8B4v//AeT//wHl//8B5///Aen//wHr//8B7f//Ae7//wHw//8B8v//AfT//wH1//8B9///Afn//wH6//8B/P//Af7//wX///8N////Ff///xz///8j////Kv///zD///82////O////0H///9G////S////0////9T////Vv///1n///9c////Xv///1////9f////YP///1////9e////XP///1r///9X////VP///1D///9L////R////0L///88////N////zH///8r////Jf///x7///8X////D////wf///8B/v//Afz//wH7//8B+f//Aff//wH2//8B9P//AfL//wHw//8A7///AO3//wDQ9f8Aftn/AH7Z/wB+2f8Aftn/AH7ZvwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2e8Aftn/AH7Z/wB+2f8Aftn/AKD8/wCj//8Ao///AaP//wGj//8Bo///AaP//wGk//8Bpf//Aaf//wGp//8Bqv//Aaz//wGu//8BsP//AbH//wGz//8Btf//Abb//wG4//8Buv//Ab3//wG///8Bwv//AcX//wHI//8Byv//Ac3//wHQ//8B0///INr//4Dr//9/7P7/deL0/2TT4/+AnKD/Cdv3/wHi//8B5P//Aeb//wHo//8B6v//Aev//wHt//8B7///AfH//wHy//8B9P//Afb//wH4//8B+f//Afv//wH9//8C/v//Cf///xL///8Z////IP///yf///8u////NP///zr///9A////Rv///0v///9Q////VP///1j///9c////X////2L///9k////Zf///2b///9m////Zf///2T///9i////YP///13///9Z////Vf///1H///9M////R////0H///87////Nv///zD///8p////Iv///xr///8T////Cv///wP+//8B/f//Afz//wH6//8B+P//Afb//wH1//8B8///AfH//wDv//8A7f//AK7p/wB+2f8Aftn/AH7Z/wB+2f8AftluAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZnwB+2f8Aftn/AH7Z/wB+2f8AlfD/AKP//wCj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGr//8BrP//Aa7//wGw//8Bsv//AbP//wG1//8Bt///Abj//wG6//8Bvf//AcD//wHD//8Bxf//Acj//wHL//8Bzv//AdH//wHT//8B1v//Adj//wHa//8B3P//PrrN/0a2xf8B4f//AeP//wHl//8B5v//Aej//wHq//8B7P//Ae7//wHv//8B8f//AfP//wH1//8B9///Afj//wH6//8B/P//Af7//wT///8N////Ff///x3///8k////K////zL///84////Pv///0T///9K////UP///1X///9Z////Xv///2H///9l////Z////2n///9r////bP///2z///9r////av///2j///9l////Yv///17///9a////Vv///1H///9L////Rv///z////85////M////y3///8l////Hv///xf///8P////Bv///wH+//8B/P//Afr//wH5//8B9///AfX//wHz//8A8v//APD//wDu//8Ai93/AH7Z/wB+2f8Aftn/AH7Z/wB+2R4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftlOAH7Z/wB+2f8Aftn/AH7Z/wCE4P8Ao///AKP//wGj//8Bo///AaP//wGj//8BpP//Aab//wGo//8Bqf//Aav//wGt//8Brv//AbD//wGy//8Bs///AbX//wG3//8Buf//Abv//wG9//8BwP//AcP//wHG//8Byf//Acv//wHO//8B0f//AdT//wHW//8B2P//Adr//xvN6v+GlJb/Cdr3/wHh//8B4///AeX//wHn//8B6f//Aev//wHs//8B7v//AfD//wHy//8B9P//AfX//wH3//8B+f//Afv//wH9//8B/v//CP///xD///8Z////IP///yj///8v////Nv///zz///9C////Sf///07///9U////Wf///17///9j////Zv///2r///9t////b////3H///9x////cv///3H///9v////bf///2r///9n////Y////1////9a////Vf///0////9K////RP///z3///83////MP///yn///8i////Gv///xL///8J////Av7//wH9//8B+///Afn//wH4//8B9v//AfT//wDy//8A8P//AMvz/wB+2f8Aftn/AH7Z/wB+2f8AftnPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftnvAH7Z/wB+2f8Aftn/AH7Z/wCe+v8Ao///AKP//wGj//8Bo///AaP//wGk//8Bpv//Aaj//wGp//8Bq///Aa3//wGv//8BsP//AbL//wG0//8Btf//Abf//wG5//8Bu///Ab7//wHB//8Bw///Acb//wHJ//8BzP//Ac///wHR//8B1P//Adf//wHY//8B2v//ZKiz/22lrf8B4P//AeL//wHk//8B5f//Aef//wHp//8B6///Ae3//wHv//8B8P//AfL//wH0//8B9v//Afj//wH5//8B+///Af3//wL+//8L////FP///xv///8j////K////zL///84////P////0b///9M////Uv///1j///9d////Y////2f///9r////b////3L///90////dv///3f///93////dv///3X///9y////b////2z///9o////ZP///17///9Z////U////03///9H////QP///zr///8z////LP///yX///8d////Ff///wz///8E////Af3//wH8//8B+v//Afj//wH2//8B9P//APP//wDx//8AqOf/AH7Z/wB+2f8Aftn/AH7Z/wB+2W4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2Z8Aftn/AH7Z/wB+2f8Aftn/AI7p/wCj//8Ao///AaP//wGj//8Bo///AaT//wGm//8BqP//Aar//wGr//8Brf//Aa///wGw//8Bsv//AbT//wG2//8Bt///Abn//wG7//8Bvv//AcH//wHE//8Bx///Acn//wHM//8Bz///E8rx/wHV//8B1///Adn//wHb//+Tk5P/eKKo/wHg//8B4v//AeT//wHm//8B6P//Aen//wHr//8B7f//Ae///wHx//8B8///AfT//wH2//8B+P//Afr//wH8//8B/v//Bf///w3///8W////Hv///yb///8t////Nf///zv///9C////Sf///1D///9W////XP///2H///9m////a////3D///9z////d////3n///97////fP///3z///97////ev///3f///90////cf///2z///9n////Yv///13///9X////Uf///0r///9E////Pf///zb///8v////KP///yD///8Y////D////wb///8B/v//Afz//wH6//8B+P//Aff//wD1//8A8///AOr8/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZPgB+2f8Aftn/AH7Z/wB+2f8AgNv/AKD8/wCj//8Ao///AaP//wGj//8Bpf//Aab//wGo//8Bqv//Aaz//wGt//8Br///AbH//wGy//8BtP//Abb//wG3//8Buf//Abz//wG///8Bwf//AcT//wHH//8Byv//Ac3//wrM+P9wpbD/AdX//wHX//8B2f//Adv//4Oeo/+Wlpb/AeD//wHi//8B5P//Aeb//wHo//8B6v//Aez//wHt//8B7///AfH//wHz//8B9f//Aff//wH4//8B+v//Afz//wH+//8H////EP///xj///8g////KP///zD///83////Pv///0X///9M////Uv///1n///9f////Zf///2r///9v////dP///3j///97////fv///4D///+A////gP///4D///9+////fP///3n///91////cP///2v///9m////YP///1r///9U////Tf///0b///8/////OP///zH///8q////Iv///xr///8R////CP///wH+//8B/P//Afv//wH5//8B9///APX//wDz//8AuOz/AH7Z/wB+2f8Aftn/AH7Z/wB+2a8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZzwB+2f8Aftn/AH7Z/wB+2f8AkOz/AKP//wCj//8Bo///AaP//wGl//8Bpv//Aaj//wGq//8BrP//Aa3//wGv//8Bsf//AbL//wG0//8Btv//Abj//wG5//8BvP//Ab///wHC//8BxP//Acf//wHK//8Bzf//X6y+/0y1y/8B1f//Adf//wHZ//8B2///X7K+/5iYmP8wyt//AeP//wHk//8B5v//Aej//wHq//8B7P//Ae7//wHw//8B8f//AfP//wH1//8B9///Afn//wH7//8B/f//Af7//wj///8S////Gv///yL///8q////Mv///zn///9A////R////07///9V////W////2L///9n////bf///3L///93////fP///3////+B////g////4T///+F////hP///4L///9/////fP///3j///9z////bv///2n///9j////Xf///1b///9P////Sf///0H///86////M////yz///8k////HP///xP///8K////Av7//wH9//8B+///Afn//wD3//8A9f//AOz8/wCF2/8Aftn/AH7Z/wB+2f8Aftn/AH7ZTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftleAH7Z/wB+2f8Aftn/AH7Z/wCC3f8Ao///AKP//wCj//8Bo///AaX//wGn//8BqP//Aar//wGs//8Brf//Aa///wGx//8Bs///AbT//wG2//8BuP//Abr//wG8//8Bv///AcL//wHF//8Bx///Acr//wHN//+QnaD/J8Xl/wHW//8B2P//Adn//wHb//8nzOX/m5ub/2G1wP8B4///AeX//wHn//8B6P//Aer//wHs//8B7v//AfD//wHy//8B9P//AfX//wH3//8B+f//Afv//wH9//8C/v//Cv///xP///8c////JP///yz///80////Ov///0L///9J////UP///1f///9e////ZP///2r///9w////df///3r///9+////gv///4X///+H////if///4n///+I////hf///4L///9/////e////3b///9x////a////2X///9f////WP///1L///9L////Q////zz///81////Lf///yX///8d////Ff///wz///8D////Af3//wH7//8B+f//APj//wD2//8Auez/AH7Z/wB+2f8Aftn/AH7Z/wB+2d8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftnvAH7Z/wB+2f8Aftn/AH7Z/wCQ7P8Ao///AKP//wGj//8Bpf//Aaf//wGo//8Bqv//Aaz//wGu//8Br///AbH//wGz//8BtP//Abb//wG4//8Buv//Abz//wG///8Bwv//AcX//wHI//8Byv//HsTs/5ycnP8Kz/j/Adb//wHY//8B2v//Adv//wHd//+AqrD/lKKj/wrf+f8B5f//Aef//wHp//8B6v//Aez//wHu//8B8P//AfL//wH0//8B9v//Aff//wH5//8B+///Af3//wL///8L////FP///x3///8l////Lf///zX///88////Q////0v///9S////Wf///1////9m////bP///3L///93////fP///4D///+E////iP///4v///+M////jP///4v///+J////hf///4H///9+////eP///3P///9t////Z////2D///9a////U////0z///9F////Pf///zb///8v////J////x7///8W////Df///wT///8B/f//Afz//wD6//8A+P//AO78/wCF2/8Aftn/AH7Z/wB+2f8Aftn/AH7ZbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2X4Aftn/AH7Z/wB+2f8Aftn/AIDb/wCg/P8Ao///AKP//wGl//8Bp///Aaj//wGq//8BrP//Aa7//wGv//8Bsf//AbP//wG0//8Btv//Abj//wG6//8BvP//Ab///wHC//8Bxf//Acj//wHK//8oweb/np6e/wHT//8B1v//Adj//wHa//8B3P//Pcbc/1DAz/+goKD/PMrb/wHl//8B5///Aen//wHr//8B7P//Ae7//wHw//8B8v//AfT//wH2//8B+P//Afn//wH7//8B/f//A////wz///8V////Hf///yb///8u////Nf///z3///9E////TP///1P///9a////YP///2f///9t////c////3n///9+////gv///4f///+K////jf///4////+Q////jv///4v///+H////g////3////96////dP///27///9o////Yv///1v///9U////Tf///0b///8+////N////y////8n////H////xf///8O////BP///wH+//8B/P//APr//wD4//8Auuz/AH7Z/wB+2f8Aftn/AH7Z/wB+2e8AftkOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZDgB+2e8Aftn/AH7Z/wB+2f8Aftn/AJDs/wCj//8Ao///AaX//wGn//8BqP//Aar//wGs//8Brv//Aa///wGx//8Bs///AbX//wG2//8BuP//Abr//wG8//8Bv///AcL//wHF//8ByP//Acv//1G30P+Mp6z/AdP//wHW//8B2P//Adr//wHc//9xtcD/C9v5/3C2v/9mu8X/AeX//wHn//8B6f//Aev//wHs//8B7v//AfD//wHy//8B9P//Afb//wH4//8B+v//Afv//wH9//8D////DP///xb///8e////Jv///y////82////Pf///0X///9M////U////1r///9h////Z////27///90////ef///3////+D////iP///4z///+P////kv///5L///+Q////jP///4j///+E////f////3r///91////b////2n///9i////XP///1X///9N////Rv///z////83////MP///yj///8g////F////w7///8F////Af7//wD8//8A+v//APD8/wCF2/8Aftn/AH7Z/wB+2f8Aftn/AH7ZfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZfgB+2f8Aftn/AH7Z/wB+2f8Aftn/AJ76/wCj//8Apf//Aaf//wGo//8Bqv//Aaz//wGu//8Br///AbH//wGz//8Btf//Abb//wG4//8Buv//Abz//wG///8Bwv//AcX//wHI//8By///UrjR/3quuv8B0///Adb//wHY//8B2v//Adz//3yzvP8B3///Psrd/5CtsP8B5f//Aef//wHp//8B6///Aez//wHu//8B8P//AfL//wH0//8B9v//Afj//wH6//8B/P//Af3//wP///8M////Fv///x7///8m////L////zb///89////Rf///0z///9T////Wv///2H///9n////bv///3T///96////f////4P///+I////jP///4////+S////kv///5D///+N////iP///4T///+A////e////3X///9v////af///2L///9c////Vf///03///9G////P////zf///8w////KP///yD///8X////Dv///wX///8B/v//APz//wD6//8ArOf/AH7Z/wB+2f8Aftn/AH7Z/wB+2d8AftkOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z3wB+2f8Aftn/AH7Z/wB+2f8Ah+L/AKP//wCl//8Bp///Aaj//wGq//8BrP//Aa7//wGv//8Bsf//AbP//wG0//8Btv//Abj//wG6//8BvP//Ab///wHC//8Bxf//Acj//wHL//9TudL/fLC7/wHT//8B1v//Adj//wHa//8B3P//frW+/wHf//8g1u7/p6en/wHl//8B5///Aen//wHr//8B7P//Ae7//wHw//8B8v//AfT//wH2//8B+P//Afr//wH7//8B/f//A////wz///8V////Hv///yb///8u////Nv///z3///9E////TP///1P///9a////YP///2f///9t////c////3n///9+////gv///4f///+L////jv///5D///+Q////jv///4v///+I////g////3////96////dP///27///9o////Yv///1v///9U////Tf///0b///8+////N////zD///8o////H////xf///8O////Bf///wD+//8A/P//ANv1/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftlOAH7Z/wB+2f8Aftn/AH7Z/wB+2f8AlfD/AKX//wCn//8BqP//Aar//wGs//8Brv//Aa///wGx//8Bs///AbT//wG2//8BuP//Abr//wG8//8Bv///AcL//wHF//8ByP//Acr//1S60/+Ir7f/AdP//wHW//8B2P//Adr//wHb//91usX/INXv/yDW7/9qv8n/AeX//wHn//8B6f//Aer//wHs//8B7v//AfD//wHy//8B9P//Afb//wH4//8B+f//Afv//wH9//8D////C////xX///8d////Jf///y3///81////PP///0P///9L////Uv///1n///9g////Zv///2z///9y////eP///33///+B////hf///4j///+L////jf///43///+M////if///4X///+B////fv///3n///9z////bf///2f///9h////Wv///1P///9M////Rf///z3///82////L////yf///8e////Fv///w3///8E////AP3//wD8//8Ajd3/AH7Z/wB+2f8Aftn/AH7Z/wB+2c8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftm/AH7Z/wB+2f8Aftn/AH7Z/wCA2/8AoPr/AKf//wCo//8Bqv//Aaz//wGt//8Br///AbH//wGz//8BtP//Abb//wG4//8Buv//Abz//wG///8Bwv//AcX//wHH//8Byv//VbvU/6mpqf8B0///Atb//wLY//8C2v//Adv//0HL4P9Xxtb/YcPQ/wvf+f8B5f//Aef//wHo//8B6v//Aez//wHu//8B8P//AfL//wH0//8B9f//Aff//wH5//8B+///Af3//wL+//8K////FP///xz///8k////LP///zT///87////Qv///0n///9Q////V////17///9k////av///3D///92////ev///3////+C////hf///4j///+J////if///4j///+G////g////4D///97////dv///3H///9r////Zf///1////9Z////Uv///0v///9D////PP///zX///8u////Jv///x3///8V////DP///wL///8A/f//ALXp/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2R4AftnvAH7Z/wB+2f8Aftn/AH7Z/wCH4v8Apv//AKj//wGq//8BrP//Aa3//wGv//8Bsf//AbP//wG0//8Btv//Abj//wG6//8BvP//Ab///wHC//8BxP//Acj//wTL//9Ewd//q6ur/xbS+f8N2P//Dtn//w3b//8g1/T/W8bW/66urv9Oy9v/AeP//wHk//8B5v//Aej//wHq//8B7P//Ae7//wHw//8B8f//AfP//wH1//8B9///Afn//wH7//8B/f//Af7//wn///8S////Gv///yP///8r////Mv///zn///9A////SP///0////9V////XP///2L///9o////bv///3P///94////fP///3////+C////hP///4X///+F////hP///4L///+A////ff///3j///90////b////2n///9j////Xf///1f///9Q////Sf///0L///86////NP///yz///8k////HP///xT///8K////Af7//wDd9f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2Y8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2W4Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCS7P8AqP//AKr//wGs//8Brf//Aa///wGx//8Bsv//AbT//wG2//8BuP//Abn//wG8//8Bv///AsL//wXG//8Lyv//D83//yfM9P+tra3/Ps3q/xrZ//8b3P//Gt3//yzZ9f8+1Ov/T8/i/3TEz/8L5P//BuX//wHm//8B6P//Aer//wHs//8B7f//Ae///wHx//8B8///AfX//wH3//8B+f//Afr//wH8//8B/v//B////xD///8Z////If///yn///8w////N////z7///9F////TP///1P///9Z////X////2X///9r////cP///3T///95////fP///3////+A////gf///4H///+A////f////33///95////df///3D///9s////Zv///2D///9a////VP///07///9H////QP///zj///8y////Kv///yL///8a////Ev///wf///8A9vz/AIbb/wB+2f8Aftn/AH7Z/wB+2f8AftnfAH7ZDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2b8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCe9f8Aqv//AKv//wGt//8Br///AbH//wGy//8BtP//Abb//wG3//8Buf//Abz//wTA//8LxP//Ecj//xbM//8b0P//INP//5W3vv9zwtL/J9z//yje//8n3///JuD//yPh//8g4///orq9/1HT4/8R5v//C+f//wTo//8B6f//Aev//wHt//8B7///AfH//wHz//8B9f//Afb//wH4//8B+v//Afz//wH+//8F////Dv///xf///8f////Jv///y7///81////PP///0P///9K////UP///1b///9c////Yv///2f///9s////cf///3T///93////ev///3z///99////ff///3z///96////eP///3X///9x////bf///2j///9j////Xf///1f///9R////S////0T///89////Nv///y////8o////IP///xj///8P////Bf///wCe4v8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZHgB+2e8Aftn/AH7Z/wB+2f8Aftn/AIDb/wCk+v8Aq///AK3//wGv//8BsP//AbL//wG0//8Btf//Abf//wG5//8Hvf//D8L//xbH//8cy///Is///yfS//8r1f//YMri/5q5wP803f//NN///zPh//8y4v//MOP//y3k//+Uwsj/kcLJ/x3n//8X6P//D+n//wfq//8B6///Ae3//wHv//8B8P//AfL//wH0//8B9v//Afj//wH6//8B+///Af3//wP///8L////FP///xz///8k////K////zP///85////QP///0f///9N////U////1n///9e////Y////2j///9s////cP///3P///91////d////3j///94////d////3b///9z////cP///23///9p////ZP///1////9a////VP///07///9I////Qf///zr///80////Lf///yX///8d////Ff///wz///8Ctun/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftmPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZTgB+2f8Aftn/AH7Z/wB+2f8Aftn/AIbg/wCo/P8Arf//AK7//wGw//8Bsv//AbT//wG1//8Ct///CLv//xHA//8Zxf//IMn//yfN/v8u0f//M9T//zjY//9D2Pr/rba4/1bX8f9B4f//QOL//z/k//885f//OeX//7C7vf+5ubn/Kej//yLp//8a6f//Eur//wjr//8B7P//Ae7//wHw//8B8v//AfT//wH1//8B9///Afn//wH7//8B/f//Af7//wj///8R////Gf///yH///8o////MP///zb///88////Q////0n///9P////Vf///1r///9f////Y////2f///9r////bv///3D///9x////cv///3L///9y////cP///27///9r////aP///2T///9g////W////1b///9Q////Sv///0T///8+////N////zH///8q////Iv///xr///8S////Bs7w/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZjwB+2f8Aftn/AH7Z/wB+2f8Aftn/AIbg/wCs//8Arv//ALD//wGy//8Bs///AbX//wi5//8Rvv//GsL//yPH//8rzP7/MtD+/znT//8/1///RNr+/0jd/v+HyNX/jsbR/07j/v9O5P7/TOX+/0nm/v9U4fb/u7u7/5rGzP806f//Len//yXq//8c6///Euz//wjt//8B7v//AfD//wHx//8B8///AfX//wH3//8B+f//Afr//wH8//8B/v//Bf///w3///8W////Hf///yX///8s////M////zn///8/////Rf///0v///9Q////Vv///1r///9e////Yv///2X///9o////av///2z///9t////bf///2z///9r////af///2b///9j////X////1v///9W////Uf///0z///9G////QP///zr///80////Lf///yb///8f////Fv///wrW8/8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2e8AftkeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZzwB+2f8Aftn/AH7Z/wB+2f8Aftn/AI/n/wCu//8AsP//ALH//wGz//8Ht///Ebz//xvA//8kxf//Lcn+/zXO/v880v//RNb+/0rZ/v9R3P7/Vd/+/2Xc9f+4uLj/Zt/1/1vm/v9Z5/7/Vuj+/4HV4f+9vb3/edbi/z7q//836v//L+v//ybr//8c7P//Eu3//wfu//8B7///AfH//wHz//8B9P//Afb//wH4//8B+v//Afv//wH9//8C/v//Cv///xL///8a////If///yj///8v////Nf///zv///9B////Rv///0z///9R////Vf///1n///9d////YP///2P///9l////Zv///2f///9n////Zv///2X///9j////Yf///17///9a////Vv///1L///9N////R////0L///88////Nv///zD///8p////Iv///xr///8Q5vf/AYbb/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkOAH7ZzwB+2f8Aftn/AH7Z/wB+2f8Aftn/AJDn/wCv//8Asf//BLT//w+5//8Zvv//I8P//y3H/v82zP7/P9D+/0fU/v9Q2P7/Vtv+/13e/v9i4f7/ZuP+/6HIz/+gyND/aOj+/2bp/v9j6f7/rcfL/7nCw/9Z6Pr/Suv+/0Lr//846///L+z//yXs//8a7f//D+7//wTv//8B8P//AfL//wH0//8B9f//Aff//wH5//8B+///Afz//wH+//8G////Dv///xb///8d////JP///yv///8x////N////zz///9C////R////0v///9Q////VP///1f///9a////Xf///1////9g////Yf///2H///9g////X////13///9b////WP///1X///9R////TP///0j///9C////Pf///zj///8y////LP///yX///8d////E+b3/wGG2/8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AJDn/wCx//8Cs///FLv//yDA//8rxf7/Ncn+/z/O/v9I0v7/Utb+/1ra/v9j3v7/aeH+/27j/v9z5v7/jNrp/7y8vP+P2eX/dOr+/3/j8v/BwcH/jdnj/1zr/v9V6/7/TOz+/0Ls//847P//Le3//yPt//8X7v//C+///wHw//8B8f//AfP//wH1//8B9v//Afj//wH6//8B/P//Af3//wL+//8J////Ev///xn///8f////Jv///yz///8y////N////zz///9B////Rv///0r///9O////Uv///1T///9X////WP///1r///9a////Wv///1r///9Z////V////1X///9S////T////0v///9H////Qv///z3///84////M////y3///8n////IP///xXm9/8Bhtv/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftmfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AJHn/wCy//8Ftv//JcH+/zLH/v89y/7/SND+/1LV/v9c2f7/Zt3+/27g/v914/7/e+X+/3/n/v+C6f7/t8TG/7rBw/+D6fr/pNXd/7rJy/9w7f7/aOz+/1/s/v9V7P7/S+z+/0Dt//817f//Ku3//x/u//8S7v//Be///wHx//8B8v//AfT//wH2//8B9///Afn//wH7//8B/P//Af7//wX///8M////FP///xv///8h////J////y3///8z////N////zz///9A////Rf///0j///9L////Tv///1D///9S////U////1T///9U////U////1L///9R////Tv///0z///9J////Rf///0H///89////OP///zP///8u////KP///yH///8W5vf/AYbb/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZnwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AIfg/wCw/P8Dtv7/L8b+/0XN/v9R0v7/W9f+/2bb/v9w3/7/eeL+/4Dl/v+H5/7/jOr+/4/r/v+v0df/wcHB/6zS2P+30NT/p9fe/3vu/v9y7f7/ae3+/1/t/v9T7f7/Se3+/z3t//8x7f//Je7//xju//8L7///AfD//wHy//8B8///AfX//wH3//8B+P//Afr//wH7//8B/f//Af7//wf///8P////Fv///xz///8i////KP///y3///8y////N////zr///8+////Qv///0X///9I////Sv///0v///9N////Tf///03///9N////TP///0r///9I////Rv///0L///8/////O////zf///8z////Lv///yj///8i////Es7w/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2Z8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AIjg/wCr9/8EuP7/MMf+/1jU/v9k2f7/b93+/3nh/v+D5P7/jOf+/5Pq/v+Z7P7/nO7+/7DY4P/Dw8P/w8PD/8jIyP+b5fD/he/+/3zu/v9y7v7/Z+7+/1zu/v9P7f7/RO3//zft//8r7v//Hu7//xHv//8E7///AfH//wHy//8B9P//Afb//wH3//8B+f//Afr//wH8//8B/f//Av7//wn///8Q////F////xz///8i////J////yz///8x////Nf///zj///87////Pv///0H///9D////Rf///0b///9G////Rv///0b///9F////Q////0H///8/////PP///zn///82////Mv///y3///8n////Iv///w++7P8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftmfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AIHb/wCk8/8AuP//KcX+/2za/v933v7/guP+/43m/v+X6f7/n+z+/6bu/v+q8P7/uNvi/8XFxf/FxcX/ycnJ/5nx//+P8P//he/+/3rv/v9u7v7/Y+7+/1bu/v9K7f7/Pe3//zDt//8j7v//Fu7//wjv//8B8P//AfH//wHz//8B9f//Afb//wH4//8B+f//Afv//wH8//8B/v//A////wr///8R////F////xz///8h////Jv///yv///8v////M////zX///84////Ov///zz///8+////P////z////8/////P////z7///88////O////zj///82////M////y////8r////Jv///x/2/P8JpuT/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZnwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCa7P8Auf//FcH+/2fZ/v+K5P7/l+j+/6Hr/v+r7v7/s/D+/7jy///A3eP/x8fH/8fHx//Gz9D/rOjy/5nx//+N8P//ge/+/3Xv/v9p7v7/XO7+/0/t/v9C7f//NO3//yft//8a7v//DO7//wHv//8B8f//AfL//wH0//8B9f//Aff//wH4//8B+v//Afv//wH9//8B/v//BP///wr///8R////Fv///xv///8g////JP///yj///8s////L////zL///80////Nv///zf///84////OP///zj///84////N////zb///80////Mv///zD///8s////KP///yT///8a5vf/BZbg/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2Z8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7ZzwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCJ4P8As/r/CL/+/1LV/v+f6v7/rO3+/7fw/v/A8///xvT//8jf5P/Jycn/ycnJ/8HZ3f/G19r/seTt/5Xx//+I8P//e+/+/27u/v9h7v7/U+3+/0bt//847f//K+3//x3t//8P7v//Au7//wHw//8B8f//AfP//wH0//8B9v//Aff//wH5//8B+v//Afv//wH9//8B/v//BP///wn///8P////Ff///xn///8d////If///yX///8o////K////y3///8v////MP///zH///8y////Mv///zH///8w////L////y3///8r////KP///yX///8h////Ecbu/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkOAH7ZvwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCB2/8Aoe7/AL///x/J/v+H5P7/wfL//8z1///U9///zdbX/8vLy//Ly8v/x9jb/7fy/P/C3eH/vNzh/5nq9v9/7/7/cu7+/2Xu/v9W7f7/Se3+/zvt//8t7P//IO3//xHt//8E7f//Ae///wHw//8B8v//AfP//wH1//8B9v//Afj//wH5//8B+v//Afz//wH9//8B/v//A////wj///8N////Ev///xf///8a////Hv///yH///8j////Jv///yf///8p////Kv///yr///8q////Kv///yn///8o////Jv///yP///8g////Gu76/wee4v8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftnvAH7ZXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZjwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AiuD/ALT3/wDD//9L1///u/H//+H5///P0tP/zMzM/83Nzf/J4eb/u/X//63z//+f8v//kfD//4Lv/v917v7/Z+3+/1nt/v9L7P7/Pez//y/s//8i7P//E+z//wXt//8B7v//Ae///wHx//8B8v//AfT//wH1//8B9v//Afj//wH5//8B+v//Afv//wH9//8B/v//Av7//wb///8K////D////xP///8X////Gf///xz///8e////IP///yH///8i////I////yP///8i////If///yD///8e////G////w2+7P8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z3wB+2S4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZTgB+2e8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AJfn/wC8+v8Oyv//gN/5/87Ozv/Ozs7/zs7O/8zo7P++9f//sPP//6Hy//+T8P//hO/+/3bu/v9p7f7/Wuz+/0zs/v8+6///MOv//yLr//8U6///Buz//wHt//8B7v//AfD//wHx//8B8v//AfT//wH1//8B9v//Afj//wH5//8B+v//Afv//wH8//8B/f//Af7//wP///8H////C////w////8S////Ff///xb///8Y////Gf///xr///8b////G////xr///8Z////GP///w7O8P8Djt3/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2a8AftkOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZDgB+2b8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AILb/wCi7P9Oxuv/0NDQ/9DQ0P/Q0ND/zvL5/7/1//+w8///ovH//5Pw//+E7v7/d+7+/2nt/v9a7P7/TOv+/z3r//8w6v//I+r//xTq//8G6///Aez//wHt//8B7v//AfD//wHx//8B8///AfT//wH1//8B9v//Afj//wH5//8B+v//Afv//wH8//8B/f//Af3//wH+//8D////Bv///wn///8M////Dv///xD///8S////E////xP///8S////Ef///w3e9f8EnuL/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2e8AftleAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2W4AftnvAH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/4Kx1P/R0dH/0dHR/7bQ1v8/3f//ger//67z//+g8f//ke/+/4Pu/v927f7/Z+z+/1nr/v9L6v7/Per//y/q//8i6f//FOn//wXp//8B6v//Aez//wHt//8B7///AfD//wHx//8B8///AfT//wH1//8B9v//Aff//wH4//8B+f//Afr//wH7//8B/P//Af3//wH9//8B/v//Av7//wT///8G////B////wj///8J////Cf///wbO8P8CnuL/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftm/AH7ZHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2Q4AftmvAH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/tsbS/9HR0f/R0dH/aLbc/wC89f8A0///Ctf//0Ti//9q6f7/gO3+/3Ps/v9l6/7/V+r+/0np/v876f//Luj//yHo//8S6P//BOj//wHp//8B6///Aez//wHt//8B7///AfD//wHx//8B8v//AfT//wH1//8B9v//Aff//wH4//8B+f//Afr//wH6//8B+///Afz//wH8//8A/f//AP7//wD+//8A/v//Afb8/wHG7v8Ajt3/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftnvAH7ZTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftk+AH7ZzwB+2f8Aftn/AH7Z/yeN1//R0dH/0dHR/9HR0f8aiNj/AH7Z/wCI3f8ApOn/AMb3/wDY//8H2v7/KuH+/z3l/v9J6P7/Ruj+/zjo//8r5///Huf//xDn//8D5///Aej//wHp//8B6///Aez//wHt//8B7///AfD//wHx//8B8v//AfP//wH0//8B9f//Afb//wH3//8B+P//Afn//wD5//8A+v//APv//wD7//8A9Pz/AM3w/wCl5P8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZfgB+2Q4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZXgB+2d8Aftn/W6LV/9HR0f/R0dH/j7fT/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AInd/wCl6f8AvfP/ANv//wDd//8D3///DeH//xTk//8P5P//CuX//wHm//8B5///Aej//wHq//8B6///Aez//wHt//8B7///AfD//wHx//8A8v//APP//wD0//8A9f//APb//wD2//8A9///APj//wDi9/8Aw+7/AKXk/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZnwB+2R4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2V6pwdL/0dHR/9HR0f80ktf/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AI/g/wCo6f8AuvD/AMj1/wDi//8A4///AOT//wDm//8A5///AOj//wDq//8A6///AOz//wDt//8A7v//AO///wDw//8A8f//APL//wDl+v8A1/X/ALns/wCj5P8Ahdv/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZnwB+2R4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHRDtHR0f/R0dH/qcHS/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Al+L/AJfi/wCe5P8Asuz/ALPs/wC07P8AtOz/ALXs/wCu6f8AmuL/AJri/wCM3f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftnfAH7ZfgB+2Q4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR0dFe0dHR/9HR0f/R0dFeAH7ZHgB+2X4AftnfAH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftmvAH7ZTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0Z/R0dH/0dHR7wAAAAAAAAAAAAAAAAAAAAAAftkuAH7ZjwB+2d8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2a8AftleAH7ZDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHR79HR0f/R0dGPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2R4AftleAH7ZnwB+2d8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftm/AH7ZfgB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0S7R0dH/0dHR/9HR0S4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2Q4Aftk+AH7ZfgB+2Z8Aftm/AH7Z3wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8Aftm/AH7ZfgB+2V4AftkuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHRXtHR0f/R0dHfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkOAH7ZPgB+2T4Aftk+AH7ZPgB+2T4AftkuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR0dF+0dHR/9HR0Z8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0b/R0dH/0dHRXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHRv9HR0f/R0dE+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR0dG/0dHR/9HR0Q4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0Y/R0dH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHRPtHR0f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHRv9HR0S4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR0dEu0dHRbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR0dGv0dHRXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0T7R0dH/0dHRj9HR0Q4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0Y/R0dH/0dHR39HR0V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0U7R0dHP0dHR/9HR0d/R0dFeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////4P///+AP/////////////AAH//4AAP////////////AAAf/4AAA////////////AAAB/4AAAD///////////AAAAH8AAAAf//////////gAAAA8AAAAB//////////wAAAAGAAAAAP/////////4AAAAAAAAAAB/////////8AAAAAAAAAAAP////////+AAAAAAAAAAAD/////////AAAAAAAAAAAAP////////wAAAAAAAAAAAAP///////4AAAAAAAAAAAAAf//////+AAAAAAAAAAAAAA///////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAAP/////4AAAAAAAAAAAAAAA/////+AAAAAAAAAAAAAAAD/////gAAAAAAAAAAAAAAAP////4AAAAAAAAAAAAAAAB////+AAAAAAAAAAAAAAAAP////gAAAAAAAAAAAAAAAA////4AAAAAAAAAAAAAAAAH///+AAAAAAAAAAAAAAAAA////gAAAAAAAAAAAAAAAAH///4AAAAAAAAAAAAAAAAA///+AAAAAAAAAAAAAAAAAH///gAAAAAAAAAAAAAAAAA///4AAAAAAAAAAAAAAAAAH//+AAAAAAAAAAAAAAAAAA///wAAAAAAAAAAAAAAAAAH//8AAAAAAAAAAAAAAAAAB///AAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//+AAAAAAAAAAAAAAAAAAf//wAAAAAAAAAAAAAAAAAD//4AAAAAAAAAAAAAAAAAA//mAAAAAAAAAAAAAAAAAAH/xAAAAAAAAAAAAAAAAAAB/8AAAAAAAAAAAAAAAAAAAP/gAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAA/5AAAAAAAAAAAAAAAAAAAH+QAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAAAAAAAAAAD/gAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAAAAAAAAAAD/wAAAAAAAAAAAAAAAAAAA/8AAAAAAAAAAAAAAAAAAAP/AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAAAB/+AAAAAAAAAAAAAAAAAAAf/gAAAAAAAAAAAAAAAAAAH/4AAAAAAAAAAAAAAAAAAD//AAAAAAAAAAAAAAAAAAA//wAAAAAAAAAAAAAAAAAAP/8AAAAAAAAAAAAAAAAAAH//gAAAAAAAAAAAAAAAAAB//4AAAAAAAAAAAAAAAAAA///AAAAAAAAAAAAAAAAAAP//wAAAAAAAAAAAAAAAAAD//8AAAAAAAAAAAAAAAAAB///gAAAAAAAAAAAAAAAAAf//8AAAAAAAAAAAAAAAAAP///AAAAAAAAAAAAAAAAAH///4AAAAAAAAAAAAAAAAB///+AAAAAAAAAAAAAAAAA////wAAAAAAAAAAAAAAAAP///+AAAAAAAAAAAAAAAAH////gAAAAAAAAAAAAAAAD////8AAAAAAAAAAAAAAAB/////gAAAAAAAAAAAAAAAf////8AAAAAAAAAAAAAAAP/////AAAAAAAAAAAAAAAH/////4AAAAAAAAAAAAAAD//////AAAAAAAAAAAAAAB//////4AAAAAAAAAAAAAA///////AAAAAAAAAAAAAAf//////4AAAAAAAAAAAAAP///////AAAAAAAAAAAAAH///////4AAAAAAAAAAAAD////////AAAAAAAAAAAAB////////8AAAAAAAAAAAA/////////gAAAAAAAAAAAf////////8AAAAAAAAAAAf/////////wAAAAAAAAAAP/////////+AAAAAAAAAAP//////////4AAAAAAAAAH///////////gAAAAAAAAH///////////+AAAAAAAAH////////////gAAAAAAAH////////////4AAAAAAAP////////////+PAAAAAAP/////////////j+AAAAA//////////////w/+AAAD//////////////8f//4D////////////////H////////////////////x////////////////////8f////////////////////H////////////////////z////////////////////8/////////////////////n////////////////////5/////////////////////P////////////////////w////////////////////+H////////////////////wf////////////8L \ No newline at end of file diff --git a/AppleBatch_June.FromInputAcount.resx b/AppleBatch_June.FromInputAcount.resx new file mode 100644 index 0000000..aa6c342 --- /dev/null +++ b/AppleBatch_June.FromInputAcount.resx @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABNTeXN0ZW0uRHJhd2luZy5JY29uAgAAAAhJY29uRGF0YQhJY29uU2l6ZQcEAhNTeXN0ZW0uRHJhd2luZy5TaXplAgAAAAIAAAAJAwAAAAX8////E1N5c3RlbS5EcmF3aW5nLlNpemUCAAAABXdpZHRoBmhlaWdodAAACAgCAAAAAAAAAAAAAAAPAwAAAD4IAQACAAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAABABILAAASCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkOAH7ZPgB+2T4Aftk+AH7ZDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2S4Aftk+AH7ZfgB+2X4Aftl+AH7ZfgB+2X4Aftk+AH7ZLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkeAH7ZbgB+2a8AftnfAH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2c8AftmfAH7ZXgB+2R4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkOAH7ZXgB+2a8AftnvAH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8AftluAH7ZHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftleAH7ZzwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8AftleAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkeAH7ZnwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZrwB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftleAH7Z3wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftnfAH7ZXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkeAH7ZnwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8AftkeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7ZzwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZvwB+2R4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZbgB+2e8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2V4Aftn/AH7Z/wB+2f8Aftn/AIvn/wCl//8AqP//AKz//wCw//8As///ALb//wC6//8Av///AMT//wDK//8Azv//ANP//wDX//8A2v//AN3//wDf//8A4v//AOT//wDl//8A5///AOj//wDp//8A6v//AOr//wDq//8A6v//AOn//wDo//8AxvP/AH7Z/wB+2f8Aftn/AH7Z/wCM5/8Apf//AKn//wCs//8AsP//ALP//wC3//8Au///AMD//wDF//8Ay///AND//wDU//8A2P//ANv//wDd//8A4P//AOP//wDl//8A5///AOj//wDp//8A6v//AOv//wDs//8A7P//AOv//wDr//8A6v//AOn//wDn//8A5f//AOP//wDh//8AqOn/AH7Z/wB+2f8Aftn/AH7Z/wCa7v8AsP//ALD//wCn9/8AlOn/AIHb/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8AftkeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZnwB+2f8Aftn/AH7Z/wB+2f8AlvD/AKf//wCr//8Arv//ALL//wC1//8Auf//AL7//wDD//8Ayf//AM7//wDT//8A1///ANv//wDe//8A4P//AOP//wDl//8A6P//AOr//wDr//8A7f//AO7//wDu//8A7///AO///wDu//8A7v//AO3//wCu6f8Aftn/AH7Z/wB+2f8Aftn/AJbw/wCn//8Aq///AK///wCy//8Atv//ALn//wC///8AxP//AMr//wDP//8A1P//ANj//wDb//8A3v//AOH//wDk//8A5v//AOn//wDr//8A7f//AO7//wDv//8A8P//APD//wDw//8A8P//AO///wDu//8A7f//AOv//wDp//8A5///AOX//wDJ9f8Aftn/AH7Z/wB+2f8Aftn/AI7k/wCy//8Asv//ALL//wCx//8Asf//AJ7w/wCL4v8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AH7ZDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftm/AH7Z/wB+2f8Aftn/AH7Z/wCj/P8Aqf//AK3//wCw//8AtP//ALj//wC8//8Awv//AMj//wDN//8A0///ANf//wDb//8A3v//AOH//wDk//8A5///AOn//wDs//8A7v//APD//wDx//8A8v//APP//wDz//8A8///APP//wDy//8A8f//AJri/wB+2f8Aftn/AH7Z/wB+2f8Aofr/AKn//wCt//8Asf//ALT//wC4//8Avf//AMP//wDI//8Azv//ANP//wDY//8A2///AN///wDi//8A5f//AOj//wDq//8A7f//AO///wDx//8A8v//APP//wD0//8A9f//APX//wD0//8A9P//APP//wDx//8A8P//AO3//wDr//8A6P//AOb//wB+2f8Aftn/AH7Z/wB+2f8AhN3/ALP//wCz//8As///ALP//wCz//8As///ALP//wCs+v8Akef/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftnfAH7ZPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8Agt3/AKf//wCr//8Ar///ALL//wC2//8Auv//AMD//wDG//8AzP//ANH//wDW//8A2v//AN7//wDh//8A5P//AOf//wDq//8A7f//APD//wDy//8A9P//APX//wD3//8A9///APj//wD4//8A+P//APf//wD2//8AjN3/AH7Z/wB+2f8Aftn/AH7Z/wCn//8Aq///AK///wCz//8Atv//ALr//wDA//8Axv//AMz//wDS//8A1///ANv//wDe//8A4v//AOX//wDo//8A6///AO7//wDx//8A8///APX//wD3//8A+P//APn//wD5//8A+f//APn//wD4//8A9///APb//wD0//8A8f//AO///wDs//8A6f//AJji/wB+2f8Aftn/AH7Z/wB+2f8Btf//AbX//wG1//8Atf//ALT//wC0//8AtP//ALT//wC0//8Arfr/AJLn/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z/wB+2f8Aftn/AH7Z/wCI4v8Aqf//AK3//wCw//8AtP//ALj//wC9//8Aw///AMn//wDP//8A1f//ANn//wDd//8A4f//AOT//wDo//8A6///AO7//wDx//8A8///APb//wD4//8A+v//APv//wD8//8A/P//APz//wD8//8A+///APr//wB+2f8Aftn/AH7Z/wB+2f8AiOL/AKn//wCt//8Asf//ALT//wC4//8Avf//AMT//wDK//8A0P//ANX//wDZ//8A3f//AOH//wDl//8A6P//AOz//wDv//8A8v//APT//wD3//8A+f//APv//wD8//8A/f//Af7//wH+//8A/f//AP3//wD7//8A+v//APj//wD1//8A8v//APD//wDs//8AmeL/AH7Z/wB+2f8Aftn/AH7Z/wG2//8Btv//Abb//wG2//8Btv//ALb//wC2//8Atv//ALX//wC1//8Atf//AK76/wCL4v8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZzwB+2R4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftn/AH7Z/wB+2f8Aftn/AIji/wCq//8Arv//ALL//wC2//8Auv//AMD//wDG//8AzP//ANP//wDY//8A3P//AN///wDj//8A5///AOv//wDu//8A8f//APT//wD3//8A+v//APz//wH+//8F/v//Cf///wz///8M////Cf///wX+//8B/v//AH7Z/wB+2f8Aftn/AH7Z/wCI4v8Aqv//AK7//wCy//8Atv//ALr//wDA//8Ax///AM3//wDT//8A2P//ANz//wDg//8A5P//AOf//wDr//8A7///APL//wD1//8A+P//APv//wD9//8E/v//Cv///xD///8T////E////xH///8M////Bv7//wH9//8A+///APn//wD2//8A8///APD//wCn5/8Aftn/AH7Z/wB+2f8Aftn/AK33/wG4//8BuP//Abj//wG4//8BuP//Abf//wC3//8At///ALf//wC2//8Atv//ALb//wCk8/8Ahd3/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z7wB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8AiOL/AKv//wCv//8As///ALf//wC8//8Aw///AMn//wDP//8A1f//ANr//wDe//8A4v//AOb//wDq//8A7f//APH//wD1//8A+P//APv//wD9//8H/v//Ef///xn///8e////If///yH///8f////Gv///xL///8Aftn/AH7Z/wB+2f8Aftn/AIji/wCr//8Ar///ALP//wC3//8AvP//AMP//wDJ//8A0P//ANb//wDa//8A3v//AOL//wDm//8A6v//AO7//wDy//8A9f//APj//wD8//8C/v//DP///xb///8e////JP///yf///8n////Jf///yD///8Z////D////wT+//8A/P//APn//wD2//8A8///AKjn/wB+2f8Aftn/AH7Z/wB+2f8Aq/X/Abr//wG6//8Buv//Abn//wG5//8Buf//Abn//wG4//8AuP//ALj//wC4//8At///ALf//wCz/P8Alun/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z/wB+2f8Aftn/AH7Z/wCJ4v8Arf//ALH//wC1//8Auf//AL///wDF//8AzP//ANL//wDY//8A3P//AOD//wDk//8A6P//AOz//wDw//8A9P//APf//wD7//8B/v//Df///xr///8k////LP///zH///80////NP///zL///8t////Jf///wB+2f8Aftn/AH7Z/wB+2f8AieL/AK3//wCx//8Atf//ALn//wC///8Axf//AMz//wDS//8A2P//ANz//wDg//8A5P//AOj//wDs//8A8P//APT//wD4//8A/P//A/7//xD///8e////KP///zH///83////Ov///zr///84////M////yv///8h////Ff///wb+//8A/f//APn//wD1//8Am+L/AH7Z/wB+2f8Aftn/AH7Z/wG8//8BvP//Abz//wG8//8BvP//Abv//wG7//8Bu///Abr//wG6//8Buv//ALn//wC5//8AuP//ALj//wC3//8AqfX/AIHb/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2W4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftn/AH7Z/wB+2f8Aftn/AIni/wCu//8Asv//ALb//wC6//8Awf//AMf//wDO//8A1P//ANn//wDe//8A4v//AOb//wDq//8A7v//APL//wD2//8A+v//Af7//w3///8d////Kv///zX///89////Q////0b///9G////Q////z7///82////A4bb/wB+2f8Aftn/AH7Z/wCA2/8Arv//ALL//wC2//8Auv//AMD//wDH//8Azv//ANT//wDZ//8A3v//AOL//wDm//8A6v//AO///wDz//8A9///APv//wL+//8Q////IP///y7///84////Qv///0j///9M////TP///0n///9E////O////zH///8k////Ff///wX+//8A/P//APj//wCc4v8Aftn/AH7Z/wB+2f8Aftn/Ab///wG///8Bv///Ab///wG+//8Bvv//Ab7//wG9//8Bvf//Abz//wG8//8Bu///Abv//wC6//8Auv//ALn//wC4//8AtPz/AIng/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2Z8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2e8Aftn/AH7Z/wB+2f8AgNv/AK///wCz//8At///ALz//wDC//8Ayf//AND//wDW//8A2///AN///wDj//8A6P//AOz//wDw//8A9f//APn//wD9//8J////G////yv///84////RP///03///9U////WP///1j///9U////Tv///0X///8PnuL/AH7Z/wB+2f8Aftn/AH7Z/wCr/P8Asv//ALf//wC7//8Awv//AMn//wDQ//8A1v//ANr//wDf//8A4///AOj//wDs//8A8P//APX//wD5//8A/f//C////x3///8t////O////0f///9R////Wf///13///9d////Wv///1T///9K////P////zH///8i////EP///wH+//8A+v//AH7Z/wB+2f8Aftn/AH7Z/wCC2/8Bwv//AcH//wHB//8Bwf//AcH//wHB//8BwP//AcD//wHA//8Bv///Ab///wG+//8Bvf//Ab3//wC8//8Au///ALr//wC6//8Auf//AJTn/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2Y8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZvwB+2f8Aftn/AH7Z/wB+2f8Aqfr/ALP//wC4//8Avf//AMT//wDL//8A0f//ANf//wDc//8A4P//AOX//wDp//8A7f//APL//wD2//8A+///Av7//xT///8m////Nv///0X///9R////XP///2P///9o////aP///2T///9d////Uv///yC26f8Aftn/AH7Z/wB+2f8Aftn/AKDz/wCz//8At///AL3//wDD//8Ayv//ANH//wDX//8A3P//AOD//wDk//8A6f//AO3//wDy//8A9v//APv//wP+//8V////J////zj///9H////VP///1////9n////bP///23///9p////Yv///1j///9L////PP///yz///8b////B/7//wDk9/8Aftn/AH7Z/wB+2f8Aftn/AI/i/wHE//8BxP//AcT//wHE//8BxP//AcP//wHD//8Bw///AcL//wHC//8Bwf//AcD//wHA//8Bv///Ab7//wG+//8Avf//ALz//wC7//8Auv//AJ/u/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftmPAH7Z/wB+2f8Aftn/AH7Z/wCe8P8AtP//ALj//wC+//8Axf//AMz//wDS//8A2P//AN3//wDh//8A5v//AOr//wDv//8A8///APf//wD8//8I////HP///y////8/////T////13///9o////cf///3b///92////cv///2n///9e////NM7w/wB+2f8Aftn/AH7Z/wB+2f8Akef/ALT//wC4//8Avv//AMT//wDL//8A0v//ANj//wDc//8A4f//AOX//wDq//8A7v//APP//wD3//8A/P//CP///x3///8v////QP///1D///9f////a////3T///96////e////3f///9u////Yv///1X///9F////NP///yL///8O////AMbu/wB+2f8Aftn/AH7Z/wB+2f8Aouz/Acf//wHH//8Bx///Acb//wHG//8Bxv//Acb//wHF//8Bxf//AcT//wHE//8Bw///AcL//wHC//8Bwf//AcD//wG///8Avv//AL3//wC8//8Au///AKTw/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2U4Aftn/AH7Z/wB+2f8Aftn/AIri/wC0//8Auf//AL///wDG//8AzP//ANP//wDZ//8A3f//AOL//wDm//8A6///AO///wD0//8A+f//AP3//w7///8i////Nf///0b///9X////Zv///3P///99////g////4P///99////dP///2f///9O7vr/AH7Z/wB+2f8Aftn/AH7Z/wCB2/8Asfz/ALj//wC+//8Axf//AMz//wDT//8A2P//AN3//wDh//8A5v//AOv//wDv//8A9P//APj//wD9//8N////Iv///zX///9G////V////2b///90////f////4b///+H////gf///3f///9q////XP///0v///86////KP///xP///8Ajt3/AH7Z/wB+2f8Aftn/AH7Z/wC29f8Byf//Acn//wHJ//8Byf//Acn//wHJ//8ByP//Acj//wHH//8Bx///Acb//wHG//8Bxf//AcT//wHE//8Bw///AcL//wHB//8AwP//AL///wC+//8Avf//AKXw/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z7wB+2S4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8Aftn/AK76/wC5//8Av///AMb//wDN//8A1P//ANn//wDe//8A4v//AOf//wDr//8A8P//APT//wD5//8A/f//Ef///yb///85////Sv///1v///9r////ef///4X///+M////jf///4X///96////bP///13///8PluD/AH7Z/wB+2f8Aftn/AH7Z/wCg8P8AuP//AL7//wDF//8AzP//ANP//wDZ//8A3f//AOL//wDm//8A6///AO///wD0//8A+f//AP3//w////8k////N////0n///9a////av///3n///+F////jv///4////+I////fP///2////9f////Tv///z3///8q////Et71/wB+2f8Aftn/AH7Z/wB+2f8Agtv/Acz//wHM//8BzP//Acz//wHM//8By///Acv//wHL//8Byv//Acr//wHJ//8Byf//Acj//wHI//8Bx///Acb//wHF//8BxP//AcP//wHC//8Awf//AMD//wC///8Avv//AKXw/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z3wB+2Q4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZnwB+2f8Aftn/AH7Z/wB+2f8Ak+f/ALn//wC///8Axv//AM3//wDU//8A2f//AN7//wDi//8A5///AOv//wDw//8A9f//APn//wH+//8S////J////zn///9L////XP///2z///97////h////5D///+Q////h////3z///9t////Xv///zLO8P8Aftn/AH7Z/wB+2f8Aftn/AIXd/wC4//8Avv//AMX//wDM//8A0///ANn//wDd//8A4v//AOb//wDr//8A7///APT//wD5//8A/f//D////yT///83////Sf///1r///9q////ef///4X///+O////j////4j///98////b////1////9O////Pf///yr///8HnuL/AH7Z/wB+2f8Aftn/AH7Z/wCh6f8Bz///Ac///wHP//8Bz///Ac7//wHO//8Bzv//Ac3//wHN//8Bzf//Acz//wHL//8By///Acr//wHJ//8Byf//Acj//wHH//8Bxv//AcX//wHE//8Aw///AMH//wDA//8Av///AJ7s/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZrwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftk+AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Arvf/AL///wDG//8Azf//ANT//wDZ//8A3v//AOL//wDn//8A6///APD//wD0//8A+f//AP3//xD///8l////OP///0n///9a////af///3f///+C////if///4r///+D////eP///2v///9b////Rvb8/wOG2/8Aftn/AH7Z/wB+2f8Aftn/AJvs/wC+//8Axf//AMz//wDT//8A2P//AN3//wDh//8A5v//AOv//wDv//8A9P//APj//wD9//8N////Iv///zT///9G////V////2b///90////f////4b///+H////gf///3f///9q////XP///0v///86////G87w/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AMf6/wHR//8B0f//AdH//wHR//8B0f//AdH//wHQ//8B0P//AdD//wHP//8Bz///Ac7//wHN//8Bzf//Acz//wHL//8Byv//Acn//wHI//8Bx///Acb//wHF//8AxP//AMP//wDB//8AwP//AJbn/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftm/AH7Z/wB+2f8Aftn/AH7Z/wCJ4P8Avv//AMX//wDM//8A0///ANn//wDd//8A4v//AOb//wDr//8A7///APT//wD4//8A/f//DP///yD///8z////RP///1T///9j////b////3n///9+////fv///3n///9w////ZP///1X///9F////HL7s/wB+2f8Aftn/AH7Z/wB+2f8Aftn/ALL3/wDE//8Ay///ANL//wDY//8A3P//AOH//wDl//8A6v//AO7//wDz//8A9///APz//wj///8d////L////0D///9Q////Xv///2v///90////ev///3v///92////bv///2L///9V////Rf///y/u+v8Chtv/AH7Z/wB+2f8Aftn/AH7Z/wCe5/8B1P//AdT//wHU//8B1P//AdT//wHU//8B0///AdP//wHT//8B0v//AdL//wHR//8B0f//AdD//wHP//8Bzv//Ac7//wHN//8BzP//Acv//wHK//8Byf//Acj//wHG//8Axf//AMT//wDC//8Avfz/AIrg/wB+2f8Aftn/AH7Z/wB+2f8AftnvAH7ZDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2T4Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCW5/8AxP//AMv//wDS//8A2P//ANz//wDh//8A5f//AOr//wDu//8A8///APf//wD7//8G/v//Gv///yz///88////S////1n///9k////bP///3H///9x////bf///2X///9a////Tf///z3///8QpuT/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aht3/AL/8/wDK//8A0f//ANf//wDc//8A4P//AOT//wDp//8A7f//APL//wD2//8A+///A/7//xX///8n////OP///0b///9U////X////2f///9s////bf///2n///9i////V////0v///859vz/CZbg/wB+2f8Aftn/AH7Z/wB+2f8Ag9v/AMv6/wHW//8B1v//Adb//wHW//8Ars//AGt//wDI7/8B1v//AdX//wHV//8B1P//AdT//wHT//8B0v//AdL//wHR//8B0P//Ac///wHO//8Bzf//Acz//wHL//8Byv//Acn//wHH//8Axv//AMX//wDD//8Atff/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftmfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2d8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCq8P8Ayv//ANH//wDX//8A2///AOD//wDk//8A6f//AO3//wDx//8A9v//APr//wH+//8Q////Iv///zL///9A////TP///1f///9e////Yv///2L///9e////V////03///9B////Fa7n/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Ai+D/AMT8/wDQ//8A1v//ANr//wDf//8A4///AOj//wDs//8A8P//APX//wD5//8A/f//C////x3///8t////Ov///0f///9R////WP///1z///9d////Wv///1P///9K////Pv///xGm5P8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCr7P8B2P//Adj//wHY//8B2P//Adj//wBRX/8AAAD/AGx//wHX//8B1///Adf//wHW//8B1v//Adb//wHV//8B1P//AdP//wHT//8B0v//AdH//wHQ//8Bz///Ac3//wHM//8By///Acr//wHJ//8Ax///AMb//wDE//8AoOz/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftkuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftk+AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCo7v8Az///ANX//wDa//8A3v//AOP//wDn//8A6///APD//wD0//8A+P//APz//wX+//8W////Jv///zP///8+////R////07///9R////Uf///07///9I////P////xWu5/8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AjOD/AMn8/wDU//8A2f//AN7//wDi//8A5v//AOr//wDv//8A8///APf//wD7//8C/v//EP///yD///8t////OP///0H///9I////S////0z///9J////Q////zj2/P8OnuL/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AleL/Adr//wHa//8B2v//Adr//wHa//8AzO//AAAA/wAAAP8AsM//Adn//wHZ//8B2f//Adj//wHY//8B1///Adf//wHW//8B1v//AdX//wHU//8B0///AdL//wHR//8B0P//Ac///wHN//8BzP//Acv//wDJ//8AyP//AMf//wDF//8Ai+D/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALgAAAB4AAAAAAAAAAAB+2b8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCc5/8Azvz/ANn//wDd//8A4f//AOX//wDq//8A7v//APL//wD1//8A+f//AP3//wj+//8X////JP///y////83////PP///z////8/////Pf///zT2/P8QpuT/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Ag9v/AL31/wDY//8A3P//AOD//wDk//8A6P//AOz//wDw//8A9P//APj//wD8//8D/v//EP///x3///8o////Mf///zb///85////Ov///zj///8q5vf/Bo7d/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AIPb/wDV/P8B2///Adv//wHc//8B3P//Adz//wBgb/8AAAD/ADY//wHb//8B2///Adv//wHa//8B2v//Adr//wHZ//8B2f//Adj//wHY//8B1///Adb//wHW//8B1f//AdP//wHS//8B0f//AdD//wHO//8Bzf//Acz//wDK//8Ayf//AMf//wC09f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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/wBmsP8ABw3/AAAA/wAKD/8AW4//AKP//wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wCc9/8Aku7/AIvn/wCH4v8AgNv/AH7Z/wB+2f8Aftn/AIPd/wCJ4v8Aj+f/AJju/wCl9/8BsP//AbH//wGz//8BtP//Abb//wG3//8ikfv/hBvw/3cV3v9hCr//TQCh/yZhz/8BxP//Acb//wHJ//8By///Ac3//wHP//8B0f//AdL//wHU//8B1v//AMz6/wDC9f8ArOz/AKzs/wCh5/8AleL/AJzk/wCu7P8Ar+z/AMLz/wDV+v8B4v//AeP//wHk//8B5f//AeX//wHm//8B5///Aef//wHo//8A2e//ADo//wBJT/8AoK//Aen//wHp//8B6f//AIOP/wAOD/8AAAD/AJKf/wHp//8B6f//Aen//wHo//8B6P//Aej//wHn//8B5///Aeb//wHl//8B5f//AeT//wHj//8B4v//AeL//wHh//8B4P//Ad///wHe//8B3f//Adz//wHb//8B2v//Adn//wHX//8B1v//ANX//wDT//8A0f//AI3g/wB+2f8Aftn/AH7Z/wB+2f8AftkuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAA/wAXKP8Adsv/AH7Z/wB2y/8AHzb/AAAA/wAAAP8AFB//AGWf/wCY7/8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpf//Aaf//wGo//8Bqv//Aav//wGt//8Brv//Aa///wGx//8Bsv//AbT//wG1//8Bt///Abj//yKS+/+EG/D/dxXe/2EKv/9NAKH/JmLP/wHG//8ByP//Acr//wHM//8Bzv//AdD//wHS//8B1P//Adb//wHX//8B2f//Adr//wHb//8B3P//Ad3//wHe//8B3///AeD//wHh//8B4v//AeP//wHk//8B5f//AeX//wHm//8B5///Aej//wHo//8B6f//Aen//wHq//8B6v//Aer//wHr//8B6///AHV//wAOD/8AAAD/ACwv/wC/z/8B6///Aev//wHr//8B6v//Aer//wHq//8B6f//Aen//wHo//8B6P//Aef//wHm//8B5v//AeX//wHk//8B4///AeL//wHh//8B4P//Ad///wHe//8B3f//Adz//wHb//8B2v//Adn//wHY//8A1v//ANX//wDT//8Ap+z/AH7Z/wB+2f8Aftn/AH7Z/wB+2W4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuAAAA/wAXKP8Adsv/AH7Z/wCH4v8AW4//AAoP/wAAAP8AAAD/AAoP/wBwr/8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGq//8BrP//Aa3//wGv//8BsP//AbL//wGz//8Btf//Abb//wG3//8Buf//IpP7/4Qb8P93Fd7/YQq//00Aof8mY8//Acj//wHK//8BzP//Ac7//wHQ//8B0v//AdT//wHW//8B1///Adn//wHa//8B2///Adz//wHd//8B3///AeD//wHh//8B4v//AeP//wHk//8B5f//AeX//wHm//8B5///Aej//wHp//8B6f//Aer//wHq//8B6///Aev//wHs//8B7P//Aez//wHt//8AWV//AEpP/wCUn/8B7f//Ae3//wHt//8B7f//Aez//wHs//8B7P//Aev//wHr//8B6v//Aer//wHp//8B6f//Aej//wHn//8B5v//Aeb//wHl//8B5P//AeP//wHi//8B4f//AeD//wHf//8B3v//Ad3//wHb//8B2v//Adn//wHY//8A1v//ANX//wC+9f8Aftn/AH7Z/wB+2f8Aftn/AH7ZrwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2V4ARnr/AAAA/wAHDf8AVpX/AJDs/wCj//8AmO//AFuP/wAUH/8AAAD/AGWf/wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpf//Aaf//wGo//8Bqv//Aav//wGt//8Brv//AbD//wGx//8Bs///AbT//wG1//8Bt///Abj//wG6//8ilPv/hBvw/3cV3v9hCr//TQCh/yZkz/8Byv//Acz//wHO//8B0P//AdL//wHU//8B1v//Adf//wHZ//8B2v//Adv//wHc//8B3v//Ad///wHg//8B4f//AeL//wHj//8B5P//AeX//wHm//8B5///Aej//wHp//8B6f//Aer//wHr//8B7P//Aez//wHt//8B7f//Ae3//wHu//8B7v//Ae7//wHv//8B7///Ae///wHv//8B7///Ae///wHu//8B7v//Ae7//wHt//8B7f//Ae3//wHs//8B7P//Aev//wHq//8B6v//Aen//wHo//8B5///Aeb//wHl//8B5P//AeP//wHi//8B4f//AeD//wHf//8B3v//Ad3//wHc//8B2v//Adn//wDY//8A1v//ANX//wB+2f8Aftn/AH7Z/wB+2f8AftnfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZfgB+2f8AVpX/AAcN/wAAAP8AHC3/AFuP/wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGr//8BrP//Aa7//wGv//8BsP//AbL//wGz//8Btf//Abb//wG4//8Buf//Abv//yKV+/+EG/D/dxXe/2EKv/9NAKH/JmXP/wHL//8Bzf//AdD//wHS//8B1P//Adb//wHX//8B2f//Adr//wHb//8B3f//Ad7//wHf//8B4P//AeH//wHj//8B5P//AeX//wHm//8B5///Aej//wHp//8B6f//Aer//wHr//8B7P//Aez//wHt//8B7v//Ae7//wHv//8B7///AfD//wHw//8B8P//AfD//wHw//8B8f//AfH//wHx//8B8P//AfD//wHw//8B8P//Ae///wHv//8B7v//Ae7//wHt//8B7f//Aez//wHr//8B6v//Aer//wHp//8B6P//Aef//wHm//8B5f//AeT//wHj//8B4v//AeD//wHf//8B3v//Ad3//wHc//8B2v//ANn//wDY//8A1v//AI7g/wB+2f8Aftn/AH7Z/wB+2f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftm/AH7Z/wB+2f8Adsv/AD9s/wAUH/8AAAD/AJjv/wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpf//Aaf//wGo//8Bqv//Aav//wGt//8Brv//AbD//wGx//8Bs///AbT//wG2//8Bt///Abn//wG6//8Bvf//Ipb7/4Qb8P93Fd7/YQq//00Aof8mZc//Ac3//wHP//8B0f//AdP//wHW//8B1///Adn//wHa//8B2///Ad3//wHe//8B3///AeD//wHi//8B4///AeT//wHl//8B5v//Aef//wHo//8B6f//Aer//wHr//8B7P//Ae3//wHt//8B7v//Ae///wHv//8B8P//AfD//wHx//8B8f//AfL//wHy//8B8v//AfL//wHy//8B8v//AfL//wHy//8B8v//AfL//wHx//8B8f//AfH//wHw//8B8P//Ae///wHu//8B7f//Ae3//wHs//8B6///Aer//wHp//8B6P//Aef//wHm//8B5f//AeT//wHj//8B4v//AeH//wHf//8B3v//Ad3//wHc//8A2v//ANn//wDX//8AmeT/AH7Z/wB+2f8Aftn/AH7Z/wB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2b8Aftn/AH7Z/wB+2f8Aftn/AKP//wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGq//8BrP//Aa7//wGv//8Bsf//AbL//wG0//8Btf//Abf//wG4//8Buv//Abz//wG+//8il/v/hBvw/3cV3v9hCr//TQCh/yZmz/8Bz///AdH//wHT//8B1f//Adf//wHY//8B2v//Adv//wHc//8B3v//Ad///wHg//8B4v//AeP//wHk//8B5f//Aeb//wHo//8B6f//Aer//wHr//8B7P//Ae3//wHt//8B7v//Ae///wHw//8B8P//AfH//wHy//8B8v//AfP//wHz//8B8///AfT//wH0//8B9P//AfT//wH0//8B9P//AfT//wH0//8B8///AfP//wHz//8B8v//AfL//wHx//8B8f//AfD//wHv//8B7v//Ae7//wHt//8B7P//Aev//wHq//8B6f//Aej//wHn//8B5f//AeT//wHj//8B4v//AeH//wHf//8B3v//Ad3//wDb//8A2v//ANn//wCr7P8Aftn/AH7Z/wB+2f8Aftn/AH7ZPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z/wB+2f8Aftn/AH7Z/wCC3f8Ao///AKP//wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bpf//Aaf//wGo//8Bqv//Aav//wGt//8Brv//AbD//wGx//8Bs///AbT//wG2//8Bt///Abn//wG7//8Bvf//AcD//yKY+/+EG/D/dxXe/2EKv/9NAKH/JmfP/wHQ//8B0v//AdX//wHW//8B2P//Adn//wHb//8B3P//Ad7//wHf//8B4P//AeL//wHj//8B5P//AeX//wHn//8B6P//Aen//wHq//8B6///Aez//wHt//8B7v//Ae///wHw//8B8f//AfH//wHy//8B8///AfP//wH0//8B9P//AfX//wH1//8B9f//Afb//wH2//8B9v//Afb//wH2//8B9v//AfX//wH1//8B9f//AfT//wH0//8B8///AfP//wHy//8B8f//AfH//wHw//8B7///Ae7//wHt//8B7P//Aev//wHq//8B6f//Aej//wHn//8B5v//AeT//wHj//8B4v//AeH//wHf//8B3v//Ad3//wDb//8A2v//ALHu/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftn/AH7Z/wB+2f8Aftn/AIfi/wCj//8Ao///AKP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGq//8BrP//Aa3//wGv//8Bsf//AbL//wG0//8Btf//Abf//wG4//8Buv//Abz//wG///8Bwf//Ipn7/4Qb8P93Fd7/YQq//00Aof8maM//AdL//wHU//8B1v//Adj//wHZ//8B2///Adz//wHd//8B3///AeD//wHi//8B4///AeT//wHm//8B5///Aej//wHp//8B6v//Aez//wHt//8B7v//Ae///wHw//8B8P//AfH//wHy//8B8///AfT//wH0//8B9f//Afb//wH2//8B9v//Aff//wH3//8B9///Aff//wH4//8B+P//Afj//wH3//8B9///Aff//wH2//8B9v//Afb//wH1//8B9P//AfT//wHz//8B8v//AfH//wHx//8B8P//Ae///wHu//8B7f//Aez//wHr//8B6f//Aej//wHn//8B5v//AeT//wHj//8B4v//AeD//wHf//8B3v//ANz//wDb//8AwvX/AH7Z/wB+2f8Aftn/AH7Z/wB+2X4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8Ah+L/AKP//wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bpf//Aab//wGo//8Bqf//Aav//wGt//8Brv//AbD//wGx//8Bs///AbT//wG2//8Bt///Abn//wG7//8Bvf//AcD//wHC//8imvv/hBvw/3cV3v9hCr//TQCh/yZoz/8B0///AdX//wHX//8B2f//Adr//wHc//8B3f//Ad///wHg//8B4f//AeP//wHk//8B5f//Aef//wHo//8B6f//Aev//wHs//8B7f//Ae7//wHv//8B8P//AfH//wHy//8B8///AfT//wH1//8B9f//Afb//wH3//8B9///Afj//wH4//8B+P//Afn//wH5//8B+f//Afn//wH5//8B+f//Afn//wH5//8B+f//Afj//wH4//8B9///Aff//wH2//8B9f//AfX//wH0//8B8///AfL//wHx//8B8P//Ae///wHu//8B7f//Aez//wHr//8B6v//Aej//wHn//8B5v//AeT//wHj//8B4v//AeD//wHf//8A3f//ANz//wDD9f8Aftn/AH7Z/wB+2f8Aftn/AH7ZfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z/wB+2f8Aftn/AH7Z/wCH4v8Ao///AKP//wAoP/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AXX//Abz//wG///8Bwf//AcT//yKb+/+EG/D/dxXe/2EKv/9NAKH/JmnP/wHV//8B1///Adj//wHa//8B2///Ad3//wHe//8B4P//AeH//wHj//8B5P//AeX//wHn//8B6P//Aen//wHr//8Asb//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wH6//8B+v//Afn//wH5//8B+P//Afj//wH3//8B9v//AfX//wH1//8B9P//AfP//wHy//8B8f//AfD//wHu//8B7f//Aez//wHr//8B6v//Aej//wHn//8B5v//AeT//wHj//8B4f//AeD//wDe//8A3f//AMT1/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftn/AH7Z/wB+2f8Aftn/AIfi/wCj//8Ao///ACg//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wBdf/8Bvf//AcD//wHC//8Bxf//Ipz7/4Qb8P93Fd7/YQq//00Aof8mas//Adb//wHY//8B2f//Adv//wHc//8B3v//Ad///wHh//8B4v//AeT//wHl//8B5///Aej//wHp//8B6///Aez//wCyv/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Afz//wH8//8B+///Afv//wH6//8B+f//Afn//wH4//8B9///Afb//wH1//8B9P//AfP//wHy//8B8f//AfD//wHv//8B7f//Aez//wHr//8B6v//Aej//wHn//8B5f//AeT//wHi//8B4f//AOD//wDe//8AxfX/AH7Z/wB+2f8Aftn/AH7Z/wB+2X4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8Ah+L/AKP//wCj//8AKD//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AF5//wG///8Bwf//AcT//wHG//8infv/hBvw/3cV3v9hCr//TQCh/yZrz/8B1///Adj//wHa//8B3P//Ad3//wHf//8B4P//AeL//wHj//8B5f//Aeb//wHo//8B6f//Aer//wHs//8B7f//ALO//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8B/v//Af3//wH9//8B/P//Afz//wH7//8B+v//Afn//wH5//8B+P//Aff//wH2//8B9f//AfT//wHy//8B8f//AfD//wHv//8B7f//Aez//wHr//8B6f//Aej//wHm//8B5f//AeT//wHi//8A4f//AN///wDG9f8Aftn/AH7Z/wB+2f8Aftn/AH7ZfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z/wB+2f8Aftn/AH7Z/wCH4v8Ao///AKP//wBln/8AUX//AFF//wBRf/8AUX//AFF//wBRf/8AUX//AFF//wBRf/8AUn//AFN//wBTf/8AVH//AFV//wBWf/8AV3//AFd//wBYf/8AWX//AFp//wBbf/8AW3//AFx//wBdf/8Ajr//AcD//wHC//8Bxf//Acf//yKe+/+EG/D/dxXe/2EKv/9NAKH/JmvP/wHY//8B2f//Adv//wHd//8B3v//AeD//wHh//8B4///AeT//wHm//8B5///Aen//wHq//8B7P//Ae3//wHu//8A0t//AHh//wB5f/8Aen//AHp//wB7f/8Ae3//AHx//wB8f/8AfX//AH1//wB+f/8Afn//AH9//wB/f/8Bf3//An9//wN/f/8Ef3//BH9//wV/f/8Ff3//BX9//wV/f/8Ff3//BH9//wX///8D////Av7//wH+//8B/f//Af3//wH8//8B+///Afr//wH5//8B+P//Aff//wH2//8B9f//AfT//wHz//8B8f//AfD//wHv//8B7f//Aez//wHq//8B6f//Aej//wHm//8B5f//AeP//wDi//8A4P//AMb1/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftn/AH7Z/wB+2f8Aftn/AIfi/wCj//8Ao///AKP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpv//Aaj//wGp//8Bq///Aaz//wGu//8BsP//AbH//wGz//8BtP//Abb//wG4//8Buf//Abz//wG+//8Bwf//AcP//wHG//8ByP//Ip/7/4Qb8P93Fd7/YQq//00Aof8ma8//Adn//wHa//8B3P//Ad3//wHf//8B4f//AeL//wHk//8B5f//Aef//wHo//8B6v//Aev//wHt//8B7v//AfD//wHx//8B8v//AfT//wH1//8B9v//Aff//wH4//8B+f//Afr//wH7//8B/P//Af3//wH+//8C/v//Bf///wj///8L////Df///w////8Q////Ef///xH///8R////Ef///xD///8P////Df///wv///8I////Bv///wP///8B/v//Af3//wH9//8B/P//Afv//wH6//8B+f//Aff//wH2//8B9f//AfT//wHz//8B8f//AfD//wHu//8B7f//Aez//wHq//8B6f//Aef//wHm//8B5P//AOP//wDh//8Ax/X/AH7Z/wB+2f8Aftn/AH7Z/wB+2X4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8Ah+L/AKP//wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaX//wGm//8BqP//Aar//wGr//8Brf//Aa///wGw//8Bsv//AbP//wG1//8Bt///Abj//wG6//8Bvf//Ab///wHC//8BxP//Acf//wHK//8ioPv/hBvw/3cV3v9hCr//TQCh/yZsz/8B2f//Adv//wHd//8B3v//AeD//wHi//8B4///AeX//wHm//8B6P//Aen//wHr//8B7P//Ae7//wHv//8B8f//AfL//wH0//8B9f//Afb//wH3//8B+f//Afr//wH7//8B/P//Af3//wH+//8C/v//Bv///wr///8N////EP///xP///8V////F////xj///8Z////Gv///xr///8Z////GP///xf///8W////FP///xH///8O////Cv///wf///8D////Af7//wH9//8B/P//Afv//wH6//8B+f//Afj//wH2//8B9f//AfT//wHy//8B8f//AfD//wHu//8B7f//Aev//wHq//8B6P//Aef//wHl//8A5P//AOL//wDI9f8Aftn/AH7Z/wB+2f8Aftn/AH7ZfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z3wB+2f8Aftn/AH7Z/wCA2/8Ao///AKP//wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpf//Aaf//wGp//8Bqv//Aaz//wGt//8Br///AbH//wGy//8BtP//Abb//wG3//8Buf//Abv//wG+//8BwP//AcP//wHF//8ByP//Acv//yKh+/+EG/D/dxXe/2EKv/9NAKH/JmzP/wHa//8B3P//Ad7//wHf//8B4f//AeP//wHk//8B5v//Aef//wHp//8B6v//Aez//wHt//8B7///AfD//wHy//8B8///AfX//wH2//8B9///Afn//wH6//8B+///Afz//wH9//8B/v//Bf///wn///8O////Ev///xX///8Y////G////x3///8f////IP///yH///8i////Iv///yH///8g////H////x3///8b////Gf///xb///8T////D////wr///8G////Av7//wH+//8B/f//Afv//wH6//8B+f//Afj//wH2//8B9f//AfT//wHy//8B8f//Ae///wHu//8B7P//Aev//wHp//8B6P//Aeb//wDk//8A4///ALbu/wB+2f8Aftn/AH7Z/wB+2f8AftleAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftm/AH7Z/wB+2f8Aftn/AH7Z/wCj//8Ao///AKP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGr//8BrP//Aa7//wGw//8Bsf//AbP//wG0//8Btv//Abj//wG5//8BvP//Ab///wHB//8BxP//Acb//wHJ//8BzP//IqH7/4Qb8P93Fd7/YQq//00Aof8mbc//Adv//wHd//8B3v//AeD//wHi//8B4///AeX//wHn//8B6P//Aer//wHr//8B7f//Ae7//wHw//8B8v//AfP//wH0//8B9v//Aff//wH5//8B+v//Afv//wH9//8B/v//Av7//wf///8M////Ef///xb///8Z////HP///yD///8i////JP///yb///8o////KP///yn///8p////Kf///yj///8m////Jf///yP///8g////Hf///xr///8W////Ev///w3///8I////A/7//wH+//8B/f//Afz//wH6//8B+f//Afj//wH2//8B9f//AfP//wHy//8B8P//Ae///wHt//8B7P//Aer//wHp//8B5///AOX//wDk//8AsOz/AH7Z/wB+2f8Aftn/AH7Z/wB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2a8Aftn/AH7Z/wB+2f8Aftn/AJz3/wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8BpP//Aab//wGo//8Bqf//Aav//wGt//8Brv//AbD//wGy//8Bs///AbX//wG3//8BuP//Abr//wG9//8Bv///AcL//wHF//8Bx///Acr//wHN//8iovv/hBvw/3cV3v9hCr//TQCh/yZtz/8B3P//Ad3//wHf//8B4f//AeP//wHk//8B5v//Aej//wHp//8B6///Aez//wHu//8B8P//AfH//wHz//8B9P//Afb//wH3//8B+P//Afr//wH7//8B/f//Af7//wP+//8I////Dv///xT///8Y////HP///yD///8k////J////yr///8s////Lv///y////8w////Mf///zH///8w////L////y7///8s////Kv///yf///8k////If///x3///8Z////FP///w////8J////BP///wH+//8B/f//Afz//wH6//8B+f//Aff//wH2//8B9P//AfP//wHx//8B8P//Ae7//wHt//8B6///Aen//wHo//8A5v//AOX//wCd5P8Aftn/AH7Z/wB+2f8Aftn/AH7ZLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZfgB+2f8Aftn/AH7Z/wB+2f8Al/P/AKP//wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGl//8Bp///Aaj//wGq//8BrP//Aa3//wGv//8BsP//AbL//wG0//8Btf//Abf//wG5//8Bu///Ab7//wHA//8Bw///Acb//wHI//8By///Ac7//yKj+/+EG/D/dxXe/2EKv/9NAKH/Jm3P/wHd//8B3v//AeD//wHi//8B4///AeX//wHn//8B6P//Aer//wHs//8B7f//Ae///wHw//8B8v//AfT//wH1//8B9///Afj//wH6//8B+///Afz//wH+//8D////Cf///w////8V////Gv///x////8j////J////yv///8u////Mf///zP///81////Nv///zf///83////N////zf///82////Nf///zP///8x////Lv///yv///8o////JP///yD///8b////Fv///xD///8K////BP///wH+//8B/f//Afv//wH6//8B+P//Aff//wH1//8B9P//AfL//wHx//8B7///Ae7//wHs//8B6v//AOn//wDn//8A5f//AJHg/wB+2f8Aftn/AH7Z/wB+2f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftlOAH7Z/wB+2f8Aftn/AH7Z/wCQ7P8Ao///AKP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8BpP//AaX//wGn//8Bqf//Aar//wGs//8Brv//Aa///wGx//8Bs///AbT//wG2//8BuP//Abn//wG8//8Bvv//AcH//wHE//8Bxv//Acn//wHM//8Bz///J7D6/5RG5f+COM//aCev/1celv9lVpT/EdLv/wHf//8B4f//AeL//wHk//8B5v//Aef//wHp//8B6///Aez//wHu//8B8P//AfH//wHz//8B9f//Afb//wH4//8B+f//Afv//wH8//8B/v//A/7//wn///8P////Fv///xv///8g////Jf///yr///8u////Mf///zX///83////Of///zv///89////Pv///z7///8+////Pv///z3///87////Of///zf///81////Mv///y////8q////Jv///yH///8c////F////xH///8K////BP///wH+//8B/P//Afv//wH5//8B+P//Afb//wH1//8B8///AfL//wHw//8B7v//Ae3//wHr//8A6f//AOj//wDm//8Aftn/AH7Z/wB+2f8Aftn/AH7ZzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2S4Aftn/AH7Z/wB+2f8Aftn/AIfi/wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpv//Aaf//wGp//8Bq///Aaz//wGu//8BsP//AbH//wGz//8Btf//Abb//wG4//8Buv//Abz//wG///8Bwv//AcX//wHH//8Byv//Ac3//wHP//861/n/0tLS/6+vr/+MjIz/dnZ2/1yTnP9LrLr/AeD//wHh//8B4///AeX//wHm//8B6P//Aer//wHs//8B7f//Ae///wHx//8B8v//AfT//wH1//8B9///Afn//wH6//8B/P//Af3//wL+//8I////D////xb///8b////If///yb///8r////MP///zT///83////Ov///z3///9A////Qv///0P///9F////Rf///0X///9F////RP///0L///9A////Pv///zv///84////Nf///zH///8s////J////yL///8c////F////xD///8J////A/7//wH+//8B/P//Afr//wH5//8B9///Afb//wH0//8B8///AfH//wHv//8B7v//Aez//wDq//8A6f//AM31/wB+2f8Aftn/AH7Z/wB+2f8AftmvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8AgNv/AKP//wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8BqP//Aan//wGr//8Brf//Aa7//wGw//8Bsv//AbP//wG1//8Bt///Abj//wG6//8Bvf//AcD//wHD//8Bxf//Acj//wHL//8Bzf//AdD//z/c/f/l5eX/w8PD/6Ghof9+fn7/O6m6/2Sbo/8B4P//AeL//wHk//8B5f//Aef//wHp//8B6///Aez//wHu//8B8P//AfH//wHz//8B9f//Afb//wH4//8B+v//Afv//wH9//8B/v//Bv///w7///8V////G////yH///8n////LP///zH///82////Of///z3///9B////RP///0f///9J////Sv///0v///9M////TP///0z///9L////Sf///0f///9E////Qf///z7///86////Nv///zL///8t////KP///yL///8c////Fv///w////8I////Av7//wH9//8B/P//Afr//wH4//8B9///AfX//wHz//8B8v//AfD//wHu//8B7f//AOv//wDp//8Aue7/AH7Z/wB+2f8Aftn/AH7Z/wB+2X4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZvwB+2f8Aftn/AH7Z/wB+2f8AnPf/AKP//wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bpf//Aab//wGo//8Bqv//Aav//wGt//8Br///AbD//wGy//8BtP//AbX//wG3//8Buf//Abv//wG+//8BwP//AcP//wHG//8Byf//Acv//wHO//8B0f//QN7///b29v/X19f/tLS0/5GRkf89q7z/ZJuj/wHh//8B4///AeT//wHm//8B6P//Aer//wHr//8B7f//Ae///wHx//8B8v//AfT//wH2//8B9///Afn//wH7//8B/P//Af7//wT///8L////E////xr///8g////Jv///yz///8y////N////zv///8/////RP///0f///9K////Tf///0////9R////Uv///1P///9T////Uv///1H///9Q////Tf///0v///9I////RP///0D///88////N////zP///8t////KP///yH///8b////Ff///w3///8F////Af7//wH8//8B+///Afn//wH4//8B9v//AfT//wHz//8B8f//Ae///wHt//8A7P//AOr//wCf5P8Aftn/AH7Z/wB+2f8Aftn/AH7ZPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftl+AH7Z/wB+2f8Aftn/AH7Z/wCS7v8Ao///AKP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGl//8Bp///Aaj//wGq//8BrP//Aa3//wGv//8Bsf//AbL//wG0//8Btv//Abf//wG5//8BvP//Ab7//wHB//8BxP//Acf//wHJ//8BzP//Ac///wHS//9A3////v7+/+rq6v/IyMj/paWl/1aptf9knKT/AeH//wHj//8B5f//Aef//wHp//8B6v//Aez//wHu//8B8P//AfH//wHz//8B9f//Afb//wH4//8B+v//Afv//wH9//8C/v//Cf///xH///8Y////H////yX///8r////Mf///zf///87////QP///0X///9J////Tf///1D///9T////Vv///1f///9Z////Wf///1n///9Z////WP///1b///9U////Uf///07///9K////Rv///0H///89////N////zL///8t////Jv///yD///8Z////Ev///wr///8D/v//Af3//wH8//8B+v//Afj//wH3//8B9f//AfP//wHy//8B8P//AO7//wDs//8A6///AITb/wB+2f8Aftn/AH7Z/wB+2f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2T4Aftn/AH7Z/wB+2f8Aftn/AIfi/wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaX//wGn//8Bqf//Aar//wGs//8Brv//Aa///wGx//8Bs///AbT//wG2//8BuP//Abr//wG8//8Bv///AcL//wHE//8Bx///Acr//wHN//8B0P//AdL//0Df////////+fn5/9zc3P+5ubn/g56i/0S0w/8B4v//AeT//wHl//8B5///Aen//wHr//8B7f//Ae7//wHw//8B8v//AfT//wH1//8B9///Afn//wH6//8B/P//Af7//wX///8N////Ff///xz///8j////Kv///zD///82////O////0H///9G////S////0////9T////Vv///1n///9c////Xv///1////9f////YP///1////9e////XP///1r///9X////VP///1D///9L////R////0L///88////N////zH///8r////Jf///x7///8X////D////wf///8B/v//Afz//wH7//8B+f//Aff//wH2//8B9P//AfL//wHw//8A7///AO3//wDQ9f8Aftn/AH7Z/wB+2f8Aftn/AH7ZvwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2e8Aftn/AH7Z/wB+2f8Aftn/AKD8/wCj//8Ao///AaP//wGj//8Bo///AaP//wGk//8Bpf//Aaf//wGp//8Bqv//Aaz//wGu//8BsP//AbH//wGz//8Btf//Abb//wG4//8Buv//Ab3//wG///8Bwv//AcX//wHI//8Byv//Ac3//wHQ//8B0///INr//4Dr//9/7P7/deL0/2TT4/+AnKD/Cdv3/wHi//8B5P//Aeb//wHo//8B6v//Aev//wHt//8B7///AfH//wHy//8B9P//Afb//wH4//8B+f//Afv//wH9//8C/v//Cf///xL///8Z////IP///yf///8u////NP///zr///9A////Rv///0v///9Q////VP///1j///9c////X////2L///9k////Zf///2b///9m////Zf///2T///9i////YP///13///9Z////Vf///1H///9M////R////0H///87////Nv///zD///8p////Iv///xr///8T////Cv///wP+//8B/f//Afz//wH6//8B+P//Afb//wH1//8B8///AfH//wDv//8A7f//AK7p/wB+2f8Aftn/AH7Z/wB+2f8AftluAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZnwB+2f8Aftn/AH7Z/wB+2f8AlfD/AKP//wCj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGr//8BrP//Aa7//wGw//8Bsv//AbP//wG1//8Bt///Abj//wG6//8Bvf//AcD//wHD//8Bxf//Acj//wHL//8Bzv//AdH//wHT//8B1v//Adj//wHa//8B3P//PrrN/0a2xf8B4f//AeP//wHl//8B5v//Aej//wHq//8B7P//Ae7//wHv//8B8f//AfP//wH1//8B9///Afj//wH6//8B/P//Af7//wT///8N////Ff///x3///8k////K////zL///84////Pv///0T///9K////UP///1X///9Z////Xv///2H///9l////Z////2n///9r////bP///2z///9r////av///2j///9l////Yv///17///9a////Vv///1H///9L////Rv///z////85////M////y3///8l////Hv///xf///8P////Bv///wH+//8B/P//Afr//wH5//8B9///AfX//wHz//8A8v//APD//wDu//8Ai93/AH7Z/wB+2f8Aftn/AH7Z/wB+2R4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftlOAH7Z/wB+2f8Aftn/AH7Z/wCE4P8Ao///AKP//wGj//8Bo///AaP//wGj//8BpP//Aab//wGo//8Bqf//Aav//wGt//8Brv//AbD//wGy//8Bs///AbX//wG3//8Buf//Abv//wG9//8BwP//AcP//wHG//8Byf//Acv//wHO//8B0f//AdT//wHW//8B2P//Adr//xvN6v+GlJb/Cdr3/wHh//8B4///AeX//wHn//8B6f//Aev//wHs//8B7v//AfD//wHy//8B9P//AfX//wH3//8B+f//Afv//wH9//8B/v//CP///xD///8Z////IP///yj///8v////Nv///zz///9C////Sf///07///9U////Wf///17///9j////Zv///2r///9t////b////3H///9x////cv///3H///9v////bf///2r///9n////Y////1////9a////Vf///0////9K////RP///z3///83////MP///yn///8i////Gv///xL///8J////Av7//wH9//8B+///Afn//wH4//8B9v//AfT//wDy//8A8P//AMvz/wB+2f8Aftn/AH7Z/wB+2f8AftnPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftnvAH7Z/wB+2f8Aftn/AH7Z/wCe+v8Ao///AKP//wGj//8Bo///AaP//wGk//8Bpv//Aaj//wGp//8Bq///Aa3//wGv//8BsP//AbL//wG0//8Btf//Abf//wG5//8Bu///Ab7//wHB//8Bw///Acb//wHJ//8BzP//Ac///wHR//8B1P//Adf//wHY//8B2v//ZKiz/22lrf8B4P//AeL//wHk//8B5f//Aef//wHp//8B6///Ae3//wHv//8B8P//AfL//wH0//8B9v//Afj//wH5//8B+///Af3//wL+//8L////FP///xv///8j////K////zL///84////P////0b///9M////Uv///1j///9d////Y////2f///9r////b////3L///90////dv///3f///93////dv///3X///9y////b////2z///9o////ZP///17///9Z////U////03///9H////QP///zr///8z////LP///yX///8d////Ff///wz///8E////Af3//wH8//8B+v//Afj//wH2//8B9P//APP//wDx//8AqOf/AH7Z/wB+2f8Aftn/AH7Z/wB+2W4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2Z8Aftn/AH7Z/wB+2f8Aftn/AI7p/wCj//8Ao///AaP//wGj//8Bo///AaT//wGm//8BqP//Aar//wGr//8Brf//Aa///wGw//8Bsv//AbT//wG2//8Bt///Abn//wG7//8Bvv//AcH//wHE//8Bx///Acn//wHM//8Bz///E8rx/wHV//8B1///Adn//wHb//+Tk5P/eKKo/wHg//8B4v//AeT//wHm//8B6P//Aen//wHr//8B7f//Ae///wHx//8B8///AfT//wH2//8B+P//Afr//wH8//8B/v//Bf///w3///8W////Hv///yb///8t////Nf///zv///9C////Sf///1D///9W////XP///2H///9m////a////3D///9z////d////3n///97////fP///3z///97////ev///3f///90////cf///2z///9n////Yv///13///9X////Uf///0r///9E////Pf///zb///8v////KP///yD///8Y////D////wb///8B/v//Afz//wH6//8B+P//Aff//wD1//8A8///AOr8/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZPgB+2f8Aftn/AH7Z/wB+2f8AgNv/AKD8/wCj//8Ao///AaP//wGj//8Bpf//Aab//wGo//8Bqv//Aaz//wGt//8Br///AbH//wGy//8BtP//Abb//wG3//8Buf//Abz//wG///8Bwf//AcT//wHH//8Byv//Ac3//wrM+P9wpbD/AdX//wHX//8B2f//Adv//4Oeo/+Wlpb/AeD//wHi//8B5P//Aeb//wHo//8B6v//Aez//wHt//8B7///AfH//wHz//8B9f//Aff//wH4//8B+v//Afz//wH+//8H////EP///xj///8g////KP///zD///83////Pv///0X///9M////Uv///1n///9f////Zf///2r///9v////dP///3j///97////fv///4D///+A////gP///4D///9+////fP///3n///91////cP///2v///9m////YP///1r///9U////Tf///0b///8/////OP///zH///8q////Iv///xr///8R////CP///wH+//8B/P//Afv//wH5//8B9///APX//wDz//8AuOz/AH7Z/wB+2f8Aftn/AH7Z/wB+2a8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZzwB+2f8Aftn/AH7Z/wB+2f8AkOz/AKP//wCj//8Bo///AaP//wGl//8Bpv//Aaj//wGq//8BrP//Aa3//wGv//8Bsf//AbL//wG0//8Btv//Abj//wG5//8BvP//Ab///wHC//8BxP//Acf//wHK//8Bzf//X6y+/0y1y/8B1f//Adf//wHZ//8B2///X7K+/5iYmP8wyt//AeP//wHk//8B5v//Aej//wHq//8B7P//Ae7//wHw//8B8f//AfP//wH1//8B9///Afn//wH7//8B/f//Af7//wj///8S////Gv///yL///8q////Mv///zn///9A////R////07///9V////W////2L///9n////bf///3L///93////fP///3////+B////g////4T///+F////hP///4L///9/////fP///3j///9z////bv///2n///9j////Xf///1b///9P////Sf///0H///86////M////yz///8k////HP///xP///8K////Av7//wH9//8B+///Afn//wD3//8A9f//AOz8/wCF2/8Aftn/AH7Z/wB+2f8Aftn/AH7ZTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftleAH7Z/wB+2f8Aftn/AH7Z/wCC3f8Ao///AKP//wCj//8Bo///AaX//wGn//8BqP//Aar//wGs//8Brf//Aa///wGx//8Bs///AbT//wG2//8BuP//Abr//wG8//8Bv///AcL//wHF//8Bx///Acr//wHN//+QnaD/J8Xl/wHW//8B2P//Adn//wHb//8nzOX/m5ub/2G1wP8B4///AeX//wHn//8B6P//Aer//wHs//8B7v//AfD//wHy//8B9P//AfX//wH3//8B+f//Afv//wH9//8C/v//Cv///xP///8c////JP///yz///80////Ov///0L///9J////UP///1f///9e////ZP///2r///9w////df///3r///9+////gv///4X///+H////if///4n///+I////hf///4L///9/////e////3b///9x////a////2X///9f////WP///1L///9L////Q////zz///81////Lf///yX///8d////Ff///wz///8D////Af3//wH7//8B+f//APj//wD2//8Auez/AH7Z/wB+2f8Aftn/AH7Z/wB+2d8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftnvAH7Z/wB+2f8Aftn/AH7Z/wCQ7P8Ao///AKP//wGj//8Bpf//Aaf//wGo//8Bqv//Aaz//wGu//8Br///AbH//wGz//8BtP//Abb//wG4//8Buv//Abz//wG///8Bwv//AcX//wHI//8Byv//HsTs/5ycnP8Kz/j/Adb//wHY//8B2v//Adv//wHd//+AqrD/lKKj/wrf+f8B5f//Aef//wHp//8B6v//Aez//wHu//8B8P//AfL//wH0//8B9v//Aff//wH5//8B+///Af3//wL///8L////FP///x3///8l////Lf///zX///88////Q////0v///9S////Wf///1////9m////bP///3L///93////fP///4D///+E////iP///4v///+M////jP///4v///+J////hf///4H///9+////eP///3P///9t////Z////2D///9a////U////0z///9F////Pf///zb///8v////J////x7///8W////Df///wT///8B/f//Afz//wD6//8A+P//AO78/wCF2/8Aftn/AH7Z/wB+2f8Aftn/AH7ZbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2X4Aftn/AH7Z/wB+2f8Aftn/AIDb/wCg/P8Ao///AKP//wGl//8Bp///Aaj//wGq//8BrP//Aa7//wGv//8Bsf//AbP//wG0//8Btv//Abj//wG6//8BvP//Ab///wHC//8Bxf//Acj//wHK//8oweb/np6e/wHT//8B1v//Adj//wHa//8B3P//Pcbc/1DAz/+goKD/PMrb/wHl//8B5///Aen//wHr//8B7P//Ae7//wHw//8B8v//AfT//wH2//8B+P//Afn//wH7//8B/f//A////wz///8V////Hf///yb///8u////Nf///z3///9E////TP///1P///9a////YP///2f///9t////c////3n///9+////gv///4f///+K////jf///4////+Q////jv///4v///+H////g////3////96////dP///27///9o////Yv///1v///9U////Tf///0b///8+////N////y////8n////H////xf///8O////BP///wH+//8B/P//APr//wD4//8Auuz/AH7Z/wB+2f8Aftn/AH7Z/wB+2e8AftkOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZDgB+2e8Aftn/AH7Z/wB+2f8Aftn/AJDs/wCj//8Ao///AaX//wGn//8BqP//Aar//wGs//8Brv//Aa///wGx//8Bs///AbX//wG2//8BuP//Abr//wG8//8Bv///AcL//wHF//8ByP//Acv//1G30P+Mp6z/AdP//wHW//8B2P//Adr//wHc//9xtcD/C9v5/3C2v/9mu8X/AeX//wHn//8B6f//Aev//wHs//8B7v//AfD//wHy//8B9P//Afb//wH4//8B+v//Afv//wH9//8D////DP///xb///8e////Jv///y////82////Pf///0X///9M////U////1r///9h////Z////27///90////ef///3////+D////iP///4z///+P////kv///5L///+Q////jP///4j///+E////f////3r///91////b////2n///9i////XP///1X///9N////Rv///z////83////MP///yj///8g////F////w7///8F////Af7//wD8//8A+v//APD8/wCF2/8Aftn/AH7Z/wB+2f8Aftn/AH7ZfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZfgB+2f8Aftn/AH7Z/wB+2f8Aftn/AJ76/wCj//8Apf//Aaf//wGo//8Bqv//Aaz//wGu//8Br///AbH//wGz//8Btf//Abb//wG4//8Buv//Abz//wG///8Bwv//AcX//wHI//8By///UrjR/3quuv8B0///Adb//wHY//8B2v//Adz//3yzvP8B3///Psrd/5CtsP8B5f//Aef//wHp//8B6///Aez//wHu//8B8P//AfL//wH0//8B9v//Afj//wH6//8B/P//Af3//wP///8M////Fv///x7///8m////L////zb///89////Rf///0z///9T////Wv///2H///9n////bv///3T///96////f////4P///+I////jP///4////+S////kv///5D///+N////iP///4T///+A////e////3X///9v////af///2L///9c////Vf///03///9G////P////zf///8w////KP///yD///8X////Dv///wX///8B/v//APz//wD6//8ArOf/AH7Z/wB+2f8Aftn/AH7Z/wB+2d8AftkOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z3wB+2f8Aftn/AH7Z/wB+2f8Ah+L/AKP//wCl//8Bp///Aaj//wGq//8BrP//Aa7//wGv//8Bsf//AbP//wG0//8Btv//Abj//wG6//8BvP//Ab///wHC//8Bxf//Acj//wHL//9TudL/fLC7/wHT//8B1v//Adj//wHa//8B3P//frW+/wHf//8g1u7/p6en/wHl//8B5///Aen//wHr//8B7P//Ae7//wHw//8B8v//AfT//wH2//8B+P//Afr//wH7//8B/f//A////wz///8V////Hv///yb///8u////Nv///z3///9E////TP///1P///9a////YP///2f///9t////c////3n///9+////gv///4f///+L////jv///5D///+Q////jv///4v///+I////g////3////96////dP///27///9o////Yv///1v///9U////Tf///0b///8+////N////zD///8o////H////xf///8O////Bf///wD+//8A/P//ANv1/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftlOAH7Z/wB+2f8Aftn/AH7Z/wB+2f8AlfD/AKX//wCn//8BqP//Aar//wGs//8Brv//Aa///wGx//8Bs///AbT//wG2//8BuP//Abr//wG8//8Bv///AcL//wHF//8ByP//Acr//1S60/+Ir7f/AdP//wHW//8B2P//Adr//wHb//91usX/INXv/yDW7/9qv8n/AeX//wHn//8B6f//Aer//wHs//8B7v//AfD//wHy//8B9P//Afb//wH4//8B+f//Afv//wH9//8D////C////xX///8d////Jf///y3///81////PP///0P///9L////Uv///1n///9g////Zv///2z///9y////eP///33///+B////hf///4j///+L////jf///43///+M////if///4X///+B////fv///3n///9z////bf///2f///9h////Wv///1P///9M////Rf///z3///82////L////yf///8e////Fv///w3///8E////AP3//wD8//8Ajd3/AH7Z/wB+2f8Aftn/AH7Z/wB+2c8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftm/AH7Z/wB+2f8Aftn/AH7Z/wCA2/8AoPr/AKf//wCo//8Bqv//Aaz//wGt//8Br///AbH//wGz//8BtP//Abb//wG4//8Buv//Abz//wG///8Bwv//AcX//wHH//8Byv//VbvU/6mpqf8B0///Atb//wLY//8C2v//Adv//0HL4P9Xxtb/YcPQ/wvf+f8B5f//Aef//wHo//8B6v//Aez//wHu//8B8P//AfL//wH0//8B9f//Aff//wH5//8B+///Af3//wL+//8K////FP///xz///8k////LP///zT///87////Qv///0n///9Q////V////17///9k////av///3D///92////ev///3////+C////hf///4j///+J////if///4j///+G////g////4D///97////dv///3H///9r////Zf///1////9Z////Uv///0v///9D////PP///zX///8u////Jv///x3///8V////DP///wL///8A/f//ALXp/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2R4AftnvAH7Z/wB+2f8Aftn/AH7Z/wCH4v8Apv//AKj//wGq//8BrP//Aa3//wGv//8Bsf//AbP//wG0//8Btv//Abj//wG6//8BvP//Ab///wHC//8BxP//Acj//wTL//9Ewd//q6ur/xbS+f8N2P//Dtn//w3b//8g1/T/W8bW/66urv9Oy9v/AeP//wHk//8B5v//Aej//wHq//8B7P//Ae7//wHw//8B8f//AfP//wH1//8B9///Afn//wH7//8B/f//Af7//wn///8S////Gv///yP///8r////Mv///zn///9A////SP///0////9V////XP///2L///9o////bv///3P///94////fP///3////+C////hP///4X///+F////hP///4L///+A////ff///3j///90////b////2n///9j////Xf///1f///9Q////Sf///0L///86////NP///yz///8k////HP///xT///8K////Af7//wDd9f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2Y8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2W4Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCS7P8AqP//AKr//wGs//8Brf//Aa///wGx//8Bsv//AbT//wG2//8BuP//Abn//wG8//8Bv///AsL//wXG//8Lyv//D83//yfM9P+tra3/Ps3q/xrZ//8b3P//Gt3//yzZ9f8+1Ov/T8/i/3TEz/8L5P//BuX//wHm//8B6P//Aer//wHs//8B7f//Ae///wHx//8B8///AfX//wH3//8B+f//Afr//wH8//8B/v//B////xD///8Z////If///yn///8w////N////z7///9F////TP///1P///9Z////X////2X///9r////cP///3T///95////fP///3////+A////gf///4H///+A////f////33///95////df///3D///9s////Zv///2D///9a////VP///07///9H////QP///zj///8y////Kv///yL///8a////Ev///wf///8A9vz/AIbb/wB+2f8Aftn/AH7Z/wB+2f8AftnfAH7ZDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2b8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCe9f8Aqv//AKv//wGt//8Br///AbH//wGy//8BtP//Abb//wG3//8Buf//Abz//wTA//8LxP//Ecj//xbM//8b0P//INP//5W3vv9zwtL/J9z//yje//8n3///JuD//yPh//8g4///orq9/1HT4/8R5v//C+f//wTo//8B6f//Aev//wHt//8B7///AfH//wHz//8B9f//Afb//wH4//8B+v//Afz//wH+//8F////Dv///xf///8f////Jv///y7///81////PP///0P///9K////UP///1b///9c////Yv///2f///9s////cf///3T///93////ev///3z///99////ff///3z///96////eP///3X///9x////bf///2j///9j////Xf///1f///9R////S////0T///89////Nv///y////8o////IP///xj///8P////Bf///wCe4v8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZHgB+2e8Aftn/AH7Z/wB+2f8Aftn/AIDb/wCk+v8Aq///AK3//wGv//8BsP//AbL//wG0//8Btf//Abf//wG5//8Hvf//D8L//xbH//8cy///Is///yfS//8r1f//YMri/5q5wP803f//NN///zPh//8y4v//MOP//y3k//+Uwsj/kcLJ/x3n//8X6P//D+n//wfq//8B6///Ae3//wHv//8B8P//AfL//wH0//8B9v//Afj//wH6//8B+///Af3//wP///8L////FP///xz///8k////K////zP///85////QP///0f///9N////U////1n///9e////Y////2j///9s////cP///3P///91////d////3j///94////d////3b///9z////cP///23///9p////ZP///1////9a////VP///07///9I////Qf///zr///80////Lf///yX///8d////Ff///wz///8Ctun/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftmPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZTgB+2f8Aftn/AH7Z/wB+2f8Aftn/AIbg/wCo/P8Arf//AK7//wGw//8Bsv//AbT//wG1//8Ct///CLv//xHA//8Zxf//IMn//yfN/v8u0f//M9T//zjY//9D2Pr/rba4/1bX8f9B4f//QOL//z/k//885f//OeX//7C7vf+5ubn/Kej//yLp//8a6f//Eur//wjr//8B7P//Ae7//wHw//8B8v//AfT//wH1//8B9///Afn//wH7//8B/f//Af7//wj///8R////Gf///yH///8o////MP///zb///88////Q////0n///9P////Vf///1r///9f////Y////2f///9r////bv///3D///9x////cv///3L///9y////cP///27///9r////aP///2T///9g////W////1b///9Q////Sv///0T///8+////N////zH///8q////Iv///xr///8S////Bs7w/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZjwB+2f8Aftn/AH7Z/wB+2f8Aftn/AIbg/wCs//8Arv//ALD//wGy//8Bs///AbX//wi5//8Rvv//GsL//yPH//8rzP7/MtD+/znT//8/1///RNr+/0jd/v+HyNX/jsbR/07j/v9O5P7/TOX+/0nm/v9U4fb/u7u7/5rGzP806f//Len//yXq//8c6///Euz//wjt//8B7v//AfD//wHx//8B8///AfX//wH3//8B+f//Afr//wH8//8B/v//Bf///w3///8W////Hf///yX///8s////M////zn///8/////Rf///0v///9Q////Vv///1r///9e////Yv///2X///9o////av///2z///9t////bf///2z///9r////af///2b///9j////X////1v///9W////Uf///0z///9G////QP///zr///80////Lf///yb///8f////Fv///wrW8/8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2e8AftkeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZzwB+2f8Aftn/AH7Z/wB+2f8Aftn/AI/n/wCu//8AsP//ALH//wGz//8Ht///Ebz//xvA//8kxf//Lcn+/zXO/v880v//RNb+/0rZ/v9R3P7/Vd/+/2Xc9f+4uLj/Zt/1/1vm/v9Z5/7/Vuj+/4HV4f+9vb3/edbi/z7q//836v//L+v//ybr//8c7P//Eu3//wfu//8B7///AfH//wHz//8B9P//Afb//wH4//8B+v//Afv//wH9//8C/v//Cv///xL///8a////If///yj///8v////Nf///zv///9B////Rv///0z///9R////Vf///1n///9d////YP///2P///9l////Zv///2f///9n////Zv///2X///9j////Yf///17///9a////Vv///1L///9N////R////0L///88////Nv///zD///8p////Iv///xr///8Q5vf/AYbb/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkOAH7ZzwB+2f8Aftn/AH7Z/wB+2f8Aftn/AJDn/wCv//8Asf//BLT//w+5//8Zvv//I8P//y3H/v82zP7/P9D+/0fU/v9Q2P7/Vtv+/13e/v9i4f7/ZuP+/6HIz/+gyND/aOj+/2bp/v9j6f7/rcfL/7nCw/9Z6Pr/Suv+/0Lr//846///L+z//yXs//8a7f//D+7//wTv//8B8P//AfL//wH0//8B9f//Aff//wH5//8B+///Afz//wH+//8G////Dv///xb///8d////JP///yv///8x////N////zz///9C////R////0v///9Q////VP///1f///9a////Xf///1////9g////Yf///2H///9g////X////13///9b////WP///1X///9R////TP///0j///9C////Pf///zj///8y////LP///yX///8d////E+b3/wGG2/8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AJDn/wCx//8Cs///FLv//yDA//8rxf7/Ncn+/z/O/v9I0v7/Utb+/1ra/v9j3v7/aeH+/27j/v9z5v7/jNrp/7y8vP+P2eX/dOr+/3/j8v/BwcH/jdnj/1zr/v9V6/7/TOz+/0Ls//847P//Le3//yPt//8X7v//C+///wHw//8B8f//AfP//wH1//8B9v//Afj//wH6//8B/P//Af3//wL+//8J////Ev///xn///8f////Jv///yz///8y////N////zz///9B////Rv///0r///9O////Uv///1T///9X////WP///1r///9a////Wv///1r///9Z////V////1X///9S////T////0v///9H////Qv///z3///84////M////y3///8n////IP///xXm9/8Bhtv/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftmfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AJHn/wCy//8Ftv//JcH+/zLH/v89y/7/SND+/1LV/v9c2f7/Zt3+/27g/v914/7/e+X+/3/n/v+C6f7/t8TG/7rBw/+D6fr/pNXd/7rJy/9w7f7/aOz+/1/s/v9V7P7/S+z+/0Dt//817f//Ku3//x/u//8S7v//Be///wHx//8B8v//AfT//wH2//8B9///Afn//wH7//8B/P//Af7//wX///8M////FP///xv///8h////J////y3///8z////N////zz///9A////Rf///0j///9L////Tv///1D///9S////U////1T///9U////U////1L///9R////Tv///0z///9J////Rf///0H///89////OP///zP///8u////KP///yH///8W5vf/AYbb/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZnwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AIfg/wCw/P8Dtv7/L8b+/0XN/v9R0v7/W9f+/2bb/v9w3/7/eeL+/4Dl/v+H5/7/jOr+/4/r/v+v0df/wcHB/6zS2P+30NT/p9fe/3vu/v9y7f7/ae3+/1/t/v9T7f7/Se3+/z3t//8x7f//Je7//xju//8L7///AfD//wHy//8B8///AfX//wH3//8B+P//Afr//wH7//8B/f//Af7//wf///8P////Fv///xz///8i////KP///y3///8y////N////zr///8+////Qv///0X///9I////Sv///0v///9N////Tf///03///9N////TP///0r///9I////Rv///0L///8/////O////zf///8z////Lv///yj///8i////Es7w/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2Z8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AIjg/wCr9/8EuP7/MMf+/1jU/v9k2f7/b93+/3nh/v+D5P7/jOf+/5Pq/v+Z7P7/nO7+/7DY4P/Dw8P/w8PD/8jIyP+b5fD/he/+/3zu/v9y7v7/Z+7+/1zu/v9P7f7/RO3//zft//8r7v//Hu7//xHv//8E7///AfH//wHy//8B9P//Afb//wH3//8B+f//Afr//wH8//8B/f//Av7//wn///8Q////F////xz///8i////J////yz///8x////Nf///zj///87////Pv///0H///9D////Rf///0b///9G////Rv///0b///9F////Q////0H///8/////PP///zn///82////Mv///y3///8n////Iv///w++7P8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftmfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AIHb/wCk8/8AuP//KcX+/2za/v933v7/guP+/43m/v+X6f7/n+z+/6bu/v+q8P7/uNvi/8XFxf/FxcX/ycnJ/5nx//+P8P//he/+/3rv/v9u7v7/Y+7+/1bu/v9K7f7/Pe3//zDt//8j7v//Fu7//wjv//8B8P//AfH//wHz//8B9f//Afb//wH4//8B+f//Afv//wH8//8B/v//A////wr///8R////F////xz///8h////Jv///yv///8v////M////zX///84////Ov///zz///8+////P////z////8/////P////z7///88////O////zj///82////M////y////8r////Jv///x/2/P8JpuT/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZnwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCa7P8Auf//FcH+/2fZ/v+K5P7/l+j+/6Hr/v+r7v7/s/D+/7jy///A3eP/x8fH/8fHx//Gz9D/rOjy/5nx//+N8P//ge/+/3Xv/v9p7v7/XO7+/0/t/v9C7f//NO3//yft//8a7v//DO7//wHv//8B8f//AfL//wH0//8B9f//Aff//wH4//8B+v//Afv//wH9//8B/v//BP///wr///8R////Fv///xv///8g////JP///yj///8s////L////zL///80////Nv///zf///84////OP///zj///84////N////zb///80////Mv///zD///8s////KP///yT///8a5vf/BZbg/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2Z8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7ZzwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCJ4P8As/r/CL/+/1LV/v+f6v7/rO3+/7fw/v/A8///xvT//8jf5P/Jycn/ycnJ/8HZ3f/G19r/seTt/5Xx//+I8P//e+/+/27u/v9h7v7/U+3+/0bt//847f//K+3//x3t//8P7v//Au7//wHw//8B8f//AfP//wH0//8B9v//Aff//wH5//8B+v//Afv//wH9//8B/v//BP///wn///8P////Ff///xn///8d////If///yX///8o////K////y3///8v////MP///zH///8y////Mv///zH///8w////L////y3///8r////KP///yX///8h////Ecbu/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkOAH7ZvwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCB2/8Aoe7/AL///x/J/v+H5P7/wfL//8z1///U9///zdbX/8vLy//Ly8v/x9jb/7fy/P/C3eH/vNzh/5nq9v9/7/7/cu7+/2Xu/v9W7f7/Se3+/zvt//8t7P//IO3//xHt//8E7f//Ae///wHw//8B8v//AfP//wH1//8B9v//Afj//wH5//8B+v//Afz//wH9//8B/v//A////wj///8N////Ev///xf///8a////Hv///yH///8j////Jv///yf///8p////Kv///yr///8q////Kv///yn///8o////Jv///yP///8g////Gu76/wee4v8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftnvAH7ZXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZjwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AiuD/ALT3/wDD//9L1///u/H//+H5///P0tP/zMzM/83Nzf/J4eb/u/X//63z//+f8v//kfD//4Lv/v917v7/Z+3+/1nt/v9L7P7/Pez//y/s//8i7P//E+z//wXt//8B7v//Ae///wHx//8B8v//AfT//wH1//8B9v//Afj//wH5//8B+v//Afv//wH9//8B/v//Av7//wb///8K////D////xP///8X////Gf///xz///8e////IP///yH///8i////I////yP///8i////If///yD///8e////G////w2+7P8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z3wB+2S4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0Z/R0dH/0dHR7wAAAAAAAAAAAAAAAAAAAAAAftkuAH7ZjwB+2d8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2a8AftleAH7ZDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHR79HR0f/R0dGPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2R4AftleAH7ZnwB+2d8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftm/AH7ZfgB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0S7R0dH/0dHR/9HR0S4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2Q4Aftk+AH7ZfgB+2Z8Aftm/AH7Z3wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8Aftm/AH7ZfgB+2V4AftkuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHRXtHR0f/R0dHfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkOAH7ZPgB+2T4Aftk+AH7ZPgB+2T4AftkuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR0dF+0dHR/9HR0Z8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0b/R0dH/0dHRXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHRv9HR0f/R0dE+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR0dG/0dHR/9HR0Q4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0Y/R0dH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHRPtHR0f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHRv9HR0S4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR0dEu0dHRbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR0dGv0dHRXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0T7R0dH/0dHRj9HR0Q4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0Y/R0dH/0dHR39HR0V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0U7R0dHP0dHR/9HR0d/R0dFeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////4P///+AP/////////////AAH//4AAP////////////AAAf/4AAA////////////AAAB/4AAAD///////////AAAAH8AAAAf//////////gAAAA8AAAAB//////////wAAAAGAAAAAP/////////4AAAAAAAAAAB/////////8AAAAAAAAAAAP////////+AAAAAAAAAAAD/////////AAAAAAAAAAAAP////////wAAAAAAAAAAAAP///////4AAAAAAAAAAAAAf//////+AAAAAAAAAAAAAA///////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAAP/////4AAAAAAAAAAAAAAA/////+AAAAAAAAAAAAAAAD/////gAAAAAAAAAAAAAAAP////4AAAAAAAAAAAAAAAB////+AAAAAAAAAAAAAAAAP////gAAAAAAAAAAAAAAAA////4AAAAAAAAAAAAAAAAH///+AAAAAAAAAAAAAAAAA////gAAAAAAAAAAAAAAAAH///4AAAAAAAAAAAAAAAAA///+AAAAAAAAAAAAAAAAAH///gAAAAAAAAAAAAAAAAA///4AAAAAAAAAAAAAAAAAH//+AAAAAAAAAAAAAAAAAA///wAAAAAAAAAAAAAAAAAH//8AAAAAAAAAAAAAAAAAB///AAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//+AAAAAAAAAAAAAAAAAAf//wAAAAAAAAAAAAAAAAAD//4AAAAAAAAAAAAAAAAAA//mAAAAAAAAAAAAAAAAAAH/xAAAAAAAAAAAAAAAAAAB/8AAAAAAAAAAAAAAAAAAAP/gAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAA/5AAAAAAAAAAAAAAAAAAAH+QAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAAAAAAAAAAD/gAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAAAAAAAAAAD/wAAAAAAAAAAAAAAAAAAA/8AAAAAAAAAAAAAAAAAAAP/AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAAAB/+AAAAAAAAAAAAAAAAAAAf/gAAAAAAAAAAAAAAAAAAH/4AAAAAAAAAAAAAAAAAAD//AAAAAAAAAAAAAAAAAAA//wAAAAAAAAAAAAAAAAAAP/8AAAAAAAAAAAAAAAAAAH//gAAAAAAAAAAAAAAAAAB//4AAAAAAAAAAAAAAAAAA///AAAAAAAAAAAAAAAAAAP//wAAAAAAAAAAAAAAAAAD//8AAAAAAAAAAAAAAAAAB///gAAAAAAAAAAAAAAAAAf//8AAAAAAAAAAAAAAAAAP///AAAAAAAAAAAAAAAAAH///4AAAAAAAAAAAAAAAAB///+AAAAAAAAAAAAAAAAA////wAAAAAAAAAAAAAAAAP///+AAAAAAAAAAAAAAAAH////gAAAAAAAAAAAAAAAD////8AAAAAAAAAAAAAAAB/////gAAAAAAAAAAAAAAAf////8AAAAAAAAAAAAAAAP/////AAAAAAAAAAAAAAAH/////4AAAAAAAAAAAAAAD//////AAAAAAAAAAAAAAB//////4AAAAAAAAAAAAAA///////AAAAAAAAAAAAAAf//////4AAAAAAAAAAAAAP///////AAAAAAAAAAAAAH///////4AAAAAAAAAAAAD////////AAAAAAAAAAAAB////////8AAAAAAAAAAAA/////////gAAAAAAAAAAAf////////8AAAAAAAAAAAf/////////wAAAAAAAAAAP/////////+AAAAAAAAAAP//////////4AAAAAAAAAH///////////gAAAAAAAAH///////////+AAAAAAAAH////////////gAAAAAAAH////////////4AAAAAAAP////////////+PAAAAAAP/////////////j+AAAAA//////////////w/+AAAD//////////////8f//4D////////////////H////////////////////x////////////////////8f////////////////////H////////////////////z////////////////////8/////////////////////n////////////////////5/////////////////////P////////////////////w////////////////////+H////////////////////wf////////////8L \ No newline at end of file diff --git a/AppleBatch_June.FromMain.resx b/AppleBatch_June.FromMain.resx new file mode 100644 index 0000000..58142de --- /dev/null +++ b/AppleBatch_June.FromMain.resx @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABNTeXN0ZW0uRHJhd2luZy5JY29uAgAAAAhJY29uRGF0YQhJY29uU2l6ZQcEAhNTeXN0ZW0uRHJhd2luZy5TaXplAgAAAAIAAAAJAwAAAAX8////E1N5c3RlbS5EcmF3aW5nLlNpemUCAAAABXdpZHRoBmhlaWdodAAACAgCAAAAAAAAAAAAAAAPAwAAAD4IAQACAAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAABABILAAASCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkOAH7ZPgB+2T4Aftk+AH7ZDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2S4Aftk+AH7ZfgB+2X4Aftl+AH7ZfgB+2X4Aftk+AH7ZLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkeAH7ZbgB+2a8AftnfAH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2c8AftmfAH7ZXgB+2R4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkOAH7ZXgB+2a8AftnvAH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8AftluAH7ZHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftleAH7ZzwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8AftleAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkeAH7ZnwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZrwB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftleAH7Z3wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftnfAH7ZXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkeAH7ZnwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8AftkeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7ZzwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZvwB+2R4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZbgB+2e8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2V4Aftn/AH7Z/wB+2f8Aftn/AIvn/wCl//8AqP//AKz//wCw//8As///ALb//wC6//8Av///AMT//wDK//8Azv//ANP//wDX//8A2v//AN3//wDf//8A4v//AOT//wDl//8A5///AOj//wDp//8A6v//AOr//wDq//8A6v//AOn//wDo//8AxvP/AH7Z/wB+2f8Aftn/AH7Z/wCM5/8Apf//AKn//wCs//8AsP//ALP//wC3//8Au///AMD//wDF//8Ay///AND//wDU//8A2P//ANv//wDd//8A4P//AOP//wDl//8A5///AOj//wDp//8A6v//AOv//wDs//8A7P//AOv//wDr//8A6v//AOn//wDn//8A5f//AOP//wDh//8AqOn/AH7Z/wB+2f8Aftn/AH7Z/wCa7v8AsP//ALD//wCn9/8AlOn/AIHb/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8AftkeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZnwB+2f8Aftn/AH7Z/wB+2f8AlvD/AKf//wCr//8Arv//ALL//wC1//8Auf//AL7//wDD//8Ayf//AM7//wDT//8A1///ANv//wDe//8A4P//AOP//wDl//8A6P//AOr//wDr//8A7f//AO7//wDu//8A7///AO///wDu//8A7v//AO3//wCu6f8Aftn/AH7Z/wB+2f8Aftn/AJbw/wCn//8Aq///AK///wCy//8Atv//ALn//wC///8AxP//AMr//wDP//8A1P//ANj//wDb//8A3v//AOH//wDk//8A5v//AOn//wDr//8A7f//AO7//wDv//8A8P//APD//wDw//8A8P//AO///wDu//8A7f//AOv//wDp//8A5///AOX//wDJ9f8Aftn/AH7Z/wB+2f8Aftn/AI7k/wCy//8Asv//ALL//wCx//8Asf//AJ7w/wCL4v8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AH7ZDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftm/AH7Z/wB+2f8Aftn/AH7Z/wCj/P8Aqf//AK3//wCw//8AtP//ALj//wC8//8Awv//AMj//wDN//8A0///ANf//wDb//8A3v//AOH//wDk//8A5///AOn//wDs//8A7v//APD//wDx//8A8v//APP//wDz//8A8///APP//wDy//8A8f//AJri/wB+2f8Aftn/AH7Z/wB+2f8Aofr/AKn//wCt//8Asf//ALT//wC4//8Avf//AMP//wDI//8Azv//ANP//wDY//8A2///AN///wDi//8A5f//AOj//wDq//8A7f//AO///wDx//8A8v//APP//wD0//8A9f//APX//wD0//8A9P//APP//wDx//8A8P//AO3//wDr//8A6P//AOb//wB+2f8Aftn/AH7Z/wB+2f8AhN3/ALP//wCz//8As///ALP//wCz//8As///ALP//wCs+v8Akef/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftnfAH7ZPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8Agt3/AKf//wCr//8Ar///ALL//wC2//8Auv//AMD//wDG//8AzP//ANH//wDW//8A2v//AN7//wDh//8A5P//AOf//wDq//8A7f//APD//wDy//8A9P//APX//wD3//8A9///APj//wD4//8A+P//APf//wD2//8AjN3/AH7Z/wB+2f8Aftn/AH7Z/wCn//8Aq///AK///wCz//8Atv//ALr//wDA//8Axv//AMz//wDS//8A1///ANv//wDe//8A4v//AOX//wDo//8A6///AO7//wDx//8A8///APX//wD3//8A+P//APn//wD5//8A+f//APn//wD4//8A9///APb//wD0//8A8f//AO///wDs//8A6f//AJji/wB+2f8Aftn/AH7Z/wB+2f8Btf//AbX//wG1//8Atf//ALT//wC0//8AtP//ALT//wC0//8Arfr/AJLn/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z/wB+2f8Aftn/AH7Z/wCI4v8Aqf//AK3//wCw//8AtP//ALj//wC9//8Aw///AMn//wDP//8A1f//ANn//wDd//8A4f//AOT//wDo//8A6///AO7//wDx//8A8///APb//wD4//8A+v//APv//wD8//8A/P//APz//wD8//8A+///APr//wB+2f8Aftn/AH7Z/wB+2f8AiOL/AKn//wCt//8Asf//ALT//wC4//8Avf//AMT//wDK//8A0P//ANX//wDZ//8A3f//AOH//wDl//8A6P//AOz//wDv//8A8v//APT//wD3//8A+f//APv//wD8//8A/f//Af7//wH+//8A/f//AP3//wD7//8A+v//APj//wD1//8A8v//APD//wDs//8AmeL/AH7Z/wB+2f8Aftn/AH7Z/wG2//8Btv//Abb//wG2//8Btv//ALb//wC2//8Atv//ALX//wC1//8Atf//AK76/wCL4v8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZzwB+2R4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftn/AH7Z/wB+2f8Aftn/AIji/wCq//8Arv//ALL//wC2//8Auv//AMD//wDG//8AzP//ANP//wDY//8A3P//AN///wDj//8A5///AOv//wDu//8A8f//APT//wD3//8A+v//APz//wH+//8F/v//Cf///wz///8M////Cf///wX+//8B/v//AH7Z/wB+2f8Aftn/AH7Z/wCI4v8Aqv//AK7//wCy//8Atv//ALr//wDA//8Ax///AM3//wDT//8A2P//ANz//wDg//8A5P//AOf//wDr//8A7///APL//wD1//8A+P//APv//wD9//8E/v//Cv///xD///8T////E////xH///8M////Bv7//wH9//8A+///APn//wD2//8A8///APD//wCn5/8Aftn/AH7Z/wB+2f8Aftn/AK33/wG4//8BuP//Abj//wG4//8BuP//Abf//wC3//8At///ALf//wC2//8Atv//ALb//wCk8/8Ahd3/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z7wB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8AiOL/AKv//wCv//8As///ALf//wC8//8Aw///AMn//wDP//8A1f//ANr//wDe//8A4v//AOb//wDq//8A7f//APH//wD1//8A+P//APv//wD9//8H/v//Ef///xn///8e////If///yH///8f////Gv///xL///8Aftn/AH7Z/wB+2f8Aftn/AIji/wCr//8Ar///ALP//wC3//8AvP//AMP//wDJ//8A0P//ANb//wDa//8A3v//AOL//wDm//8A6v//AO7//wDy//8A9f//APj//wD8//8C/v//DP///xb///8e////JP///yf///8n////Jf///yD///8Z////D////wT+//8A/P//APn//wD2//8A8///AKjn/wB+2f8Aftn/AH7Z/wB+2f8Aq/X/Abr//wG6//8Buv//Abn//wG5//8Buf//Abn//wG4//8AuP//ALj//wC4//8At///ALf//wCz/P8Alun/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z/wB+2f8Aftn/AH7Z/wCJ4v8Arf//ALH//wC1//8Auf//AL///wDF//8AzP//ANL//wDY//8A3P//AOD//wDk//8A6P//AOz//wDw//8A9P//APf//wD7//8B/v//Df///xr///8k////LP///zH///80////NP///zL///8t////Jf///wB+2f8Aftn/AH7Z/wB+2f8AieL/AK3//wCx//8Atf//ALn//wC///8Axf//AMz//wDS//8A2P//ANz//wDg//8A5P//AOj//wDs//8A8P//APT//wD4//8A/P//A/7//xD///8e////KP///zH///83////Ov///zr///84////M////yv///8h////Ff///wb+//8A/f//APn//wD1//8Am+L/AH7Z/wB+2f8Aftn/AH7Z/wG8//8BvP//Abz//wG8//8BvP//Abv//wG7//8Bu///Abr//wG6//8Buv//ALn//wC5//8AuP//ALj//wC3//8AqfX/AIHb/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2W4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftn/AH7Z/wB+2f8Aftn/AIni/wCu//8Asv//ALb//wC6//8Awf//AMf//wDO//8A1P//ANn//wDe//8A4v//AOb//wDq//8A7v//APL//wD2//8A+v//Af7//w3///8d////Kv///zX///89////Q////0b///9G////Q////z7///82////A4bb/wB+2f8Aftn/AH7Z/wCA2/8Arv//ALL//wC2//8Auv//AMD//wDH//8Azv//ANT//wDZ//8A3v//AOL//wDm//8A6v//AO///wDz//8A9///APv//wL+//8Q////IP///y7///84////Qv///0j///9M////TP///0n///9E////O////zH///8k////Ff///wX+//8A/P//APj//wCc4v8Aftn/AH7Z/wB+2f8Aftn/Ab///wG///8Bv///Ab///wG+//8Bvv//Ab7//wG9//8Bvf//Abz//wG8//8Bu///Abv//wC6//8Auv//ALn//wC4//8AtPz/AIng/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2Z8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2e8Aftn/AH7Z/wB+2f8AgNv/AK///wCz//8At///ALz//wDC//8Ayf//AND//wDW//8A2///AN///wDj//8A6P//AOz//wDw//8A9f//APn//wD9//8J////G////yv///84////RP///03///9U////WP///1j///9U////Tv///0X///8PnuL/AH7Z/wB+2f8Aftn/AH7Z/wCr/P8Asv//ALf//wC7//8Awv//AMn//wDQ//8A1v//ANr//wDf//8A4///AOj//wDs//8A8P//APX//wD5//8A/f//C////x3///8t////O////0f///9R////Wf///13///9d////Wv///1T///9K////P////zH///8i////EP///wH+//8A+v//AH7Z/wB+2f8Aftn/AH7Z/wCC2/8Bwv//AcH//wHB//8Bwf//AcH//wHB//8BwP//AcD//wHA//8Bv///Ab///wG+//8Bvf//Ab3//wC8//8Au///ALr//wC6//8Auf//AJTn/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2Y8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZvwB+2f8Aftn/AH7Z/wB+2f8Aqfr/ALP//wC4//8Avf//AMT//wDL//8A0f//ANf//wDc//8A4P//AOX//wDp//8A7f//APL//wD2//8A+///Av7//xT///8m////Nv///0X///9R////XP///2P///9o////aP///2T///9d////Uv///yC26f8Aftn/AH7Z/wB+2f8Aftn/AKDz/wCz//8At///AL3//wDD//8Ayv//ANH//wDX//8A3P//AOD//wDk//8A6f//AO3//wDy//8A9v//APv//wP+//8V////J////zj///9H////VP///1////9n////bP///23///9p////Yv///1j///9L////PP///yz///8b////B/7//wDk9/8Aftn/AH7Z/wB+2f8Aftn/AI/i/wHE//8BxP//AcT//wHE//8BxP//AcP//wHD//8Bw///AcL//wHC//8Bwf//AcD//wHA//8Bv///Ab7//wG+//8Avf//ALz//wC7//8Auv//AJ/u/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftmPAH7Z/wB+2f8Aftn/AH7Z/wCe8P8AtP//ALj//wC+//8Axf//AMz//wDS//8A2P//AN3//wDh//8A5v//AOr//wDv//8A8///APf//wD8//8I////HP///y////8/////T////13///9o////cf///3b///92////cv///2n///9e////NM7w/wB+2f8Aftn/AH7Z/wB+2f8Akef/ALT//wC4//8Avv//AMT//wDL//8A0v//ANj//wDc//8A4f//AOX//wDq//8A7v//APP//wD3//8A/P//CP///x3///8v////QP///1D///9f////a////3T///96////e////3f///9u////Yv///1X///9F////NP///yL///8O////AMbu/wB+2f8Aftn/AH7Z/wB+2f8Aouz/Acf//wHH//8Bx///Acb//wHG//8Bxv//Acb//wHF//8Bxf//AcT//wHE//8Bw///AcL//wHC//8Bwf//AcD//wG///8Avv//AL3//wC8//8Au///AKTw/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2U4Aftn/AH7Z/wB+2f8Aftn/AIri/wC0//8Auf//AL///wDG//8AzP//ANP//wDZ//8A3f//AOL//wDm//8A6///AO///wD0//8A+f//AP3//w7///8i////Nf///0b///9X////Zv///3P///99////g////4P///99////dP///2f///9O7vr/AH7Z/wB+2f8Aftn/AH7Z/wCB2/8Asfz/ALj//wC+//8Axf//AMz//wDT//8A2P//AN3//wDh//8A5v//AOv//wDv//8A9P//APj//wD9//8N////Iv///zX///9G////V////2b///90////f////4b///+H////gf///3f///9q////XP///0v///86////KP///xP///8Ajt3/AH7Z/wB+2f8Aftn/AH7Z/wC29f8Byf//Acn//wHJ//8Byf//Acn//wHJ//8ByP//Acj//wHH//8Bx///Acb//wHG//8Bxf//AcT//wHE//8Bw///AcL//wHB//8AwP//AL///wC+//8Avf//AKXw/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z7wB+2S4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8Aftn/AK76/wC5//8Av///AMb//wDN//8A1P//ANn//wDe//8A4v//AOf//wDr//8A8P//APT//wD5//8A/f//Ef///yb///85////Sv///1v///9r////ef///4X///+M////jf///4X///96////bP///13///8PluD/AH7Z/wB+2f8Aftn/AH7Z/wCg8P8AuP//AL7//wDF//8AzP//ANP//wDZ//8A3f//AOL//wDm//8A6///AO///wD0//8A+f//AP3//w////8k////N////0n///9a////av///3n///+F////jv///4////+I////fP///2////9f////Tv///z3///8q////Et71/wB+2f8Aftn/AH7Z/wB+2f8Agtv/Acz//wHM//8BzP//Acz//wHM//8By///Acv//wHL//8Byv//Acr//wHJ//8Byf//Acj//wHI//8Bx///Acb//wHF//8BxP//AcP//wHC//8Awf//AMD//wC///8Avv//AKXw/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z3wB+2Q4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZnwB+2f8Aftn/AH7Z/wB+2f8Ak+f/ALn//wC///8Axv//AM3//wDU//8A2f//AN7//wDi//8A5///AOv//wDw//8A9f//APn//wH+//8S////J////zn///9L////XP///2z///97////h////5D///+Q////h////3z///9t////Xv///zLO8P8Aftn/AH7Z/wB+2f8Aftn/AIXd/wC4//8Avv//AMX//wDM//8A0///ANn//wDd//8A4v//AOb//wDr//8A7///APT//wD5//8A/f//D////yT///83////Sf///1r///9q////ef///4X///+O////j////4j///98////b////1////9O////Pf///yr///8HnuL/AH7Z/wB+2f8Aftn/AH7Z/wCh6f8Bz///Ac///wHP//8Bz///Ac7//wHO//8Bzv//Ac3//wHN//8Bzf//Acz//wHL//8By///Acr//wHJ//8Byf//Acj//wHH//8Bxv//AcX//wHE//8Aw///AMH//wDA//8Av///AJ7s/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZrwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftk+AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Arvf/AL///wDG//8Azf//ANT//wDZ//8A3v//AOL//wDn//8A6///APD//wD0//8A+f//AP3//xD///8l////OP///0n///9a////af///3f///+C////if///4r///+D////eP///2v///9b////Rvb8/wOG2/8Aftn/AH7Z/wB+2f8Aftn/AJvs/wC+//8Axf//AMz//wDT//8A2P//AN3//wDh//8A5v//AOv//wDv//8A9P//APj//wD9//8N////Iv///zT///9G////V////2b///90////f////4b///+H////gf///3f///9q////XP///0v///86////G87w/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AMf6/wHR//8B0f//AdH//wHR//8B0f//AdH//wHQ//8B0P//AdD//wHP//8Bz///Ac7//wHN//8Bzf//Acz//wHL//8Byv//Acn//wHI//8Bx///Acb//wHF//8AxP//AMP//wDB//8AwP//AJbn/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftm/AH7Z/wB+2f8Aftn/AH7Z/wCJ4P8Avv//AMX//wDM//8A0///ANn//wDd//8A4v//AOb//wDr//8A7///APT//wD4//8A/f//DP///yD///8z////RP///1T///9j////b////3n///9+////fv///3n///9w////ZP///1X///9F////HL7s/wB+2f8Aftn/AH7Z/wB+2f8Aftn/ALL3/wDE//8Ay///ANL//wDY//8A3P//AOH//wDl//8A6v//AO7//wDz//8A9///APz//wj///8d////L////0D///9Q////Xv///2v///90////ev///3v///92////bv///2L///9V////Rf///y/u+v8Chtv/AH7Z/wB+2f8Aftn/AH7Z/wCe5/8B1P//AdT//wHU//8B1P//AdT//wHU//8B0///AdP//wHT//8B0v//AdL//wHR//8B0f//AdD//wHP//8Bzv//Ac7//wHN//8BzP//Acv//wHK//8Byf//Acj//wHG//8Axf//AMT//wDC//8Avfz/AIrg/wB+2f8Aftn/AH7Z/wB+2f8AftnvAH7ZDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2T4Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCW5/8AxP//AMv//wDS//8A2P//ANz//wDh//8A5f//AOr//wDu//8A8///APf//wD7//8G/v//Gv///yz///88////S////1n///9k////bP///3H///9x////bf///2X///9a////Tf///z3///8QpuT/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aht3/AL/8/wDK//8A0f//ANf//wDc//8A4P//AOT//wDp//8A7f//APL//wD2//8A+///A/7//xX///8n////OP///0b///9U////X////2f///9s////bf///2n///9i////V////0v///859vz/CZbg/wB+2f8Aftn/AH7Z/wB+2f8Ag9v/AMv6/wHW//8B1v//Adb//wHW//8Ars//AGt//wDI7/8B1v//AdX//wHV//8B1P//AdT//wHT//8B0v//AdL//wHR//8B0P//Ac///wHO//8Bzf//Acz//wHL//8Byv//Acn//wHH//8Axv//AMX//wDD//8Atff/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftmfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2d8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCq8P8Ayv//ANH//wDX//8A2///AOD//wDk//8A6f//AO3//wDx//8A9v//APr//wH+//8Q////Iv///zL///9A////TP///1f///9e////Yv///2L///9e////V////03///9B////Fa7n/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Ai+D/AMT8/wDQ//8A1v//ANr//wDf//8A4///AOj//wDs//8A8P//APX//wD5//8A/f//C////x3///8t////Ov///0f///9R////WP///1z///9d////Wv///1P///9K////Pv///xGm5P8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCr7P8B2P//Adj//wHY//8B2P//Adj//wBRX/8AAAD/AGx//wHX//8B1///Adf//wHW//8B1v//Adb//wHV//8B1P//AdP//wHT//8B0v//AdH//wHQ//8Bz///Ac3//wHM//8By///Acr//wHJ//8Ax///AMb//wDE//8AoOz/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftkuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftk+AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCo7v8Az///ANX//wDa//8A3v//AOP//wDn//8A6///APD//wD0//8A+P//APz//wX+//8W////Jv///zP///8+////R////07///9R////Uf///07///9I////P////xWu5/8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AjOD/AMn8/wDU//8A2f//AN7//wDi//8A5v//AOr//wDv//8A8///APf//wD7//8C/v//EP///yD///8t////OP///0H///9I////S////0z///9J////Q////zj2/P8OnuL/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AleL/Adr//wHa//8B2v//Adr//wHa//8AzO//AAAA/wAAAP8AsM//Adn//wHZ//8B2f//Adj//wHY//8B1///Adf//wHW//8B1v//AdX//wHU//8B0///AdL//wHR//8B0P//Ac///wHN//8BzP//Acv//wDJ//8AyP//AMf//wDF//8Ai+D/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALgAAAB4AAAAAAAAAAAB+2b8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCc5/8Azvz/ANn//wDd//8A4f//AOX//wDq//8A7v//APL//wD1//8A+f//AP3//wj+//8X////JP///y////83////PP///z////8/////Pf///zT2/P8QpuT/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Ag9v/AL31/wDY//8A3P//AOD//wDk//8A6P//AOz//wDw//8A9P//APj//wD8//8D/v//EP///x3///8o////Mf///zb///85////Ov///zj///8q5vf/Bo7d/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AIPb/wDV/P8B2///Adv//wHc//8B3P//Adz//wBgb/8AAAD/ADY//wHb//8B2///Adv//wHa//8B2v//Adr//wHZ//8B2f//Adj//wHY//8B1///Adb//wHW//8B1f//AdP//wHS//8B0f//AdD//wHO//8Bzf//Acz//wDK//8Ayf//AMf//wC09f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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/wBmsP8ABw3/AAAA/wAKD/8AW4//AKP//wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wCc9/8Aku7/AIvn/wCH4v8AgNv/AH7Z/wB+2f8Aftn/AIPd/wCJ4v8Aj+f/AJju/wCl9/8BsP//AbH//wGz//8BtP//Abb//wG3//8ikfv/hBvw/3cV3v9hCr//TQCh/yZhz/8BxP//Acb//wHJ//8By///Ac3//wHP//8B0f//AdL//wHU//8B1v//AMz6/wDC9f8ArOz/AKzs/wCh5/8AleL/AJzk/wCu7P8Ar+z/AMLz/wDV+v8B4v//AeP//wHk//8B5f//AeX//wHm//8B5///Aef//wHo//8A2e//ADo//wBJT/8AoK//Aen//wHp//8B6f//AIOP/wAOD/8AAAD/AJKf/wHp//8B6f//Aen//wHo//8B6P//Aej//wHn//8B5///Aeb//wHl//8B5f//AeT//wHj//8B4v//AeL//wHh//8B4P//Ad///wHe//8B3f//Adz//wHb//8B2v//Adn//wHX//8B1v//ANX//wDT//8A0f//AI3g/wB+2f8Aftn/AH7Z/wB+2f8AftkuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAA/wAXKP8Adsv/AH7Z/wB2y/8AHzb/AAAA/wAAAP8AFB//AGWf/wCY7/8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpf//Aaf//wGo//8Bqv//Aav//wGt//8Brv//Aa///wGx//8Bsv//AbT//wG1//8Bt///Abj//yKS+/+EG/D/dxXe/2EKv/9NAKH/JmLP/wHG//8ByP//Acr//wHM//8Bzv//AdD//wHS//8B1P//Adb//wHX//8B2f//Adr//wHb//8B3P//Ad3//wHe//8B3///AeD//wHh//8B4v//AeP//wHk//8B5f//AeX//wHm//8B5///Aej//wHo//8B6f//Aen//wHq//8B6v//Aer//wHr//8B6///AHV//wAOD/8AAAD/ACwv/wC/z/8B6///Aev//wHr//8B6v//Aer//wHq//8B6f//Aen//wHo//8B6P//Aef//wHm//8B5v//AeX//wHk//8B4///AeL//wHh//8B4P//Ad///wHe//8B3f//Adz//wHb//8B2v//Adn//wHY//8A1v//ANX//wDT//8Ap+z/AH7Z/wB+2f8Aftn/AH7Z/wB+2W4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuAAAA/wAXKP8Adsv/AH7Z/wCH4v8AW4//AAoP/wAAAP8AAAD/AAoP/wBwr/8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGq//8BrP//Aa3//wGv//8BsP//AbL//wGz//8Btf//Abb//wG3//8Buf//IpP7/4Qb8P93Fd7/YQq//00Aof8mY8//Acj//wHK//8BzP//Ac7//wHQ//8B0v//AdT//wHW//8B1///Adn//wHa//8B2///Adz//wHd//8B3///AeD//wHh//8B4v//AeP//wHk//8B5f//AeX//wHm//8B5///Aej//wHp//8B6f//Aer//wHq//8B6///Aev//wHs//8B7P//Aez//wHt//8AWV//AEpP/wCUn/8B7f//Ae3//wHt//8B7f//Aez//wHs//8B7P//Aev//wHr//8B6v//Aer//wHp//8B6f//Aej//wHn//8B5v//Aeb//wHl//8B5P//AeP//wHi//8B4f//AeD//wHf//8B3v//Ad3//wHb//8B2v//Adn//wHY//8A1v//ANX//wC+9f8Aftn/AH7Z/wB+2f8Aftn/AH7ZrwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2V4ARnr/AAAA/wAHDf8AVpX/AJDs/wCj//8AmO//AFuP/wAUH/8AAAD/AGWf/wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpf//Aaf//wGo//8Bqv//Aav//wGt//8Brv//AbD//wGx//8Bs///AbT//wG1//8Bt///Abj//wG6//8ilPv/hBvw/3cV3v9hCr//TQCh/yZkz/8Byv//Acz//wHO//8B0P//AdL//wHU//8B1v//Adf//wHZ//8B2v//Adv//wHc//8B3v//Ad///wHg//8B4f//AeL//wHj//8B5P//AeX//wHm//8B5///Aej//wHp//8B6f//Aer//wHr//8B7P//Aez//wHt//8B7f//Ae3//wHu//8B7v//Ae7//wHv//8B7///Ae///wHv//8B7///Ae///wHu//8B7v//Ae7//wHt//8B7f//Ae3//wHs//8B7P//Aev//wHq//8B6v//Aen//wHo//8B5///Aeb//wHl//8B5P//AeP//wHi//8B4f//AeD//wHf//8B3v//Ad3//wHc//8B2v//Adn//wDY//8A1v//ANX//wB+2f8Aftn/AH7Z/wB+2f8AftnfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZfgB+2f8AVpX/AAcN/wAAAP8AHC3/AFuP/wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGr//8BrP//Aa7//wGv//8BsP//AbL//wGz//8Btf//Abb//wG4//8Buf//Abv//yKV+/+EG/D/dxXe/2EKv/9NAKH/JmXP/wHL//8Bzf//AdD//wHS//8B1P//Adb//wHX//8B2f//Adr//wHb//8B3f//Ad7//wHf//8B4P//AeH//wHj//8B5P//AeX//wHm//8B5///Aej//wHp//8B6f//Aer//wHr//8B7P//Aez//wHt//8B7v//Ae7//wHv//8B7///AfD//wHw//8B8P//AfD//wHw//8B8f//AfH//wHx//8B8P//AfD//wHw//8B8P//Ae///wHv//8B7v//Ae7//wHt//8B7f//Aez//wHr//8B6v//Aer//wHp//8B6P//Aef//wHm//8B5f//AeT//wHj//8B4v//AeD//wHf//8B3v//Ad3//wHc//8B2v//ANn//wDY//8A1v//AI7g/wB+2f8Aftn/AH7Z/wB+2f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftm/AH7Z/wB+2f8Adsv/AD9s/wAUH/8AAAD/AJjv/wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpf//Aaf//wGo//8Bqv//Aav//wGt//8Brv//AbD//wGx//8Bs///AbT//wG2//8Bt///Abn//wG6//8Bvf//Ipb7/4Qb8P93Fd7/YQq//00Aof8mZc//Ac3//wHP//8B0f//AdP//wHW//8B1///Adn//wHa//8B2///Ad3//wHe//8B3///AeD//wHi//8B4///AeT//wHl//8B5v//Aef//wHo//8B6f//Aer//wHr//8B7P//Ae3//wHt//8B7v//Ae///wHv//8B8P//AfD//wHx//8B8f//AfL//wHy//8B8v//AfL//wHy//8B8v//AfL//wHy//8B8v//AfL//wHx//8B8f//AfH//wHw//8B8P//Ae///wHu//8B7f//Ae3//wHs//8B6///Aer//wHp//8B6P//Aef//wHm//8B5f//AeT//wHj//8B4v//AeH//wHf//8B3v//Ad3//wHc//8A2v//ANn//wDX//8AmeT/AH7Z/wB+2f8Aftn/AH7Z/wB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2b8Aftn/AH7Z/wB+2f8Aftn/AKP//wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGq//8BrP//Aa7//wGv//8Bsf//AbL//wG0//8Btf//Abf//wG4//8Buv//Abz//wG+//8il/v/hBvw/3cV3v9hCr//TQCh/yZmz/8Bz///AdH//wHT//8B1f//Adf//wHY//8B2v//Adv//wHc//8B3v//Ad///wHg//8B4v//AeP//wHk//8B5f//Aeb//wHo//8B6f//Aer//wHr//8B7P//Ae3//wHt//8B7v//Ae///wHw//8B8P//AfH//wHy//8B8v//AfP//wHz//8B8///AfT//wH0//8B9P//AfT//wH0//8B9P//AfT//wH0//8B8///AfP//wHz//8B8v//AfL//wHx//8B8f//AfD//wHv//8B7v//Ae7//wHt//8B7P//Aev//wHq//8B6f//Aej//wHn//8B5f//AeT//wHj//8B4v//AeH//wHf//8B3v//Ad3//wDb//8A2v//ANn//wCr7P8Aftn/AH7Z/wB+2f8Aftn/AH7ZPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z/wB+2f8Aftn/AH7Z/wCC3f8Ao///AKP//wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bpf//Aaf//wGo//8Bqv//Aav//wGt//8Brv//AbD//wGx//8Bs///AbT//wG2//8Bt///Abn//wG7//8Bvf//AcD//yKY+/+EG/D/dxXe/2EKv/9NAKH/JmfP/wHQ//8B0v//AdX//wHW//8B2P//Adn//wHb//8B3P//Ad7//wHf//8B4P//AeL//wHj//8B5P//AeX//wHn//8B6P//Aen//wHq//8B6///Aez//wHt//8B7v//Ae///wHw//8B8f//AfH//wHy//8B8///AfP//wH0//8B9P//AfX//wH1//8B9f//Afb//wH2//8B9v//Afb//wH2//8B9v//AfX//wH1//8B9f//AfT//wH0//8B8///AfP//wHy//8B8f//AfH//wHw//8B7///Ae7//wHt//8B7P//Aev//wHq//8B6f//Aej//wHn//8B5v//AeT//wHj//8B4v//AeH//wHf//8B3v//Ad3//wDb//8A2v//ALHu/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftn/AH7Z/wB+2f8Aftn/AIfi/wCj//8Ao///AKP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGq//8BrP//Aa3//wGv//8Bsf//AbL//wG0//8Btf//Abf//wG4//8Buv//Abz//wG///8Bwf//Ipn7/4Qb8P93Fd7/YQq//00Aof8maM//AdL//wHU//8B1v//Adj//wHZ//8B2///Adz//wHd//8B3///AeD//wHi//8B4///AeT//wHm//8B5///Aej//wHp//8B6v//Aez//wHt//8B7v//Ae///wHw//8B8P//AfH//wHy//8B8///AfT//wH0//8B9f//Afb//wH2//8B9v//Aff//wH3//8B9///Aff//wH4//8B+P//Afj//wH3//8B9///Aff//wH2//8B9v//Afb//wH1//8B9P//AfT//wHz//8B8v//AfH//wHx//8B8P//Ae///wHu//8B7f//Aez//wHr//8B6f//Aej//wHn//8B5v//AeT//wHj//8B4v//AeD//wHf//8B3v//ANz//wDb//8AwvX/AH7Z/wB+2f8Aftn/AH7Z/wB+2X4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8Ah+L/AKP//wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bpf//Aab//wGo//8Bqf//Aav//wGt//8Brv//AbD//wGx//8Bs///AbT//wG2//8Bt///Abn//wG7//8Bvf//AcD//wHC//8imvv/hBvw/3cV3v9hCr//TQCh/yZoz/8B0///AdX//wHX//8B2f//Adr//wHc//8B3f//Ad///wHg//8B4f//AeP//wHk//8B5f//Aef//wHo//8B6f//Aev//wHs//8B7f//Ae7//wHv//8B8P//AfH//wHy//8B8///AfT//wH1//8B9f//Afb//wH3//8B9///Afj//wH4//8B+P//Afn//wH5//8B+f//Afn//wH5//8B+f//Afn//wH5//8B+f//Afj//wH4//8B9///Aff//wH2//8B9f//AfX//wH0//8B8///AfL//wHx//8B8P//Ae///wHu//8B7f//Aez//wHr//8B6v//Aej//wHn//8B5v//AeT//wHj//8B4v//AeD//wHf//8A3f//ANz//wDD9f8Aftn/AH7Z/wB+2f8Aftn/AH7ZfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z/wB+2f8Aftn/AH7Z/wCH4v8Ao///AKP//wAoP/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AXX//Abz//wG///8Bwf//AcT//yKb+/+EG/D/dxXe/2EKv/9NAKH/JmnP/wHV//8B1///Adj//wHa//8B2///Ad3//wHe//8B4P//AeH//wHj//8B5P//AeX//wHn//8B6P//Aen//wHr//8Asb//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wH6//8B+v//Afn//wH5//8B+P//Afj//wH3//8B9v//AfX//wH1//8B9P//AfP//wHy//8B8f//AfD//wHu//8B7f//Aez//wHr//8B6v//Aej//wHn//8B5v//AeT//wHj//8B4f//AeD//wDe//8A3f//AMT1/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftn/AH7Z/wB+2f8Aftn/AIfi/wCj//8Ao///ACg//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wBdf/8Bvf//AcD//wHC//8Bxf//Ipz7/4Qb8P93Fd7/YQq//00Aof8mas//Adb//wHY//8B2f//Adv//wHc//8B3v//Ad///wHh//8B4v//AeT//wHl//8B5///Aej//wHp//8B6///Aez//wCyv/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Afz//wH8//8B+///Afv//wH6//8B+f//Afn//wH4//8B9///Afb//wH1//8B9P//AfP//wHy//8B8f//AfD//wHv//8B7f//Aez//wHr//8B6v//Aej//wHn//8B5f//AeT//wHi//8B4f//AOD//wDe//8AxfX/AH7Z/wB+2f8Aftn/AH7Z/wB+2X4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8Ah+L/AKP//wCj//8AKD//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AF5//wG///8Bwf//AcT//wHG//8infv/hBvw/3cV3v9hCr//TQCh/yZrz/8B1///Adj//wHa//8B3P//Ad3//wHf//8B4P//AeL//wHj//8B5f//Aeb//wHo//8B6f//Aer//wHs//8B7f//ALO//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8B/v//Af3//wH9//8B/P//Afz//wH7//8B+v//Afn//wH5//8B+P//Aff//wH2//8B9f//AfT//wHy//8B8f//AfD//wHv//8B7f//Aez//wHr//8B6f//Aej//wHm//8B5f//AeT//wHi//8A4f//AN///wDG9f8Aftn/AH7Z/wB+2f8Aftn/AH7ZfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z/wB+2f8Aftn/AH7Z/wCH4v8Ao///AKP//wBln/8AUX//AFF//wBRf/8AUX//AFF//wBRf/8AUX//AFF//wBRf/8AUn//AFN//wBTf/8AVH//AFV//wBWf/8AV3//AFd//wBYf/8AWX//AFp//wBbf/8AW3//AFx//wBdf/8Ajr//AcD//wHC//8Bxf//Acf//yKe+/+EG/D/dxXe/2EKv/9NAKH/JmvP/wHY//8B2f//Adv//wHd//8B3v//AeD//wHh//8B4///AeT//wHm//8B5///Aen//wHq//8B7P//Ae3//wHu//8A0t//AHh//wB5f/8Aen//AHp//wB7f/8Ae3//AHx//wB8f/8AfX//AH1//wB+f/8Afn//AH9//wB/f/8Bf3//An9//wN/f/8Ef3//BH9//wV/f/8Ff3//BX9//wV/f/8Ff3//BH9//wX///8D////Av7//wH+//8B/f//Af3//wH8//8B+///Afr//wH5//8B+P//Aff//wH2//8B9f//AfT//wHz//8B8f//AfD//wHv//8B7f//Aez//wHq//8B6f//Aej//wHm//8B5f//AeP//wDi//8A4P//AMb1/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftn/AH7Z/wB+2f8Aftn/AIfi/wCj//8Ao///AKP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpv//Aaj//wGp//8Bq///Aaz//wGu//8BsP//AbH//wGz//8BtP//Abb//wG4//8Buf//Abz//wG+//8Bwf//AcP//wHG//8ByP//Ip/7/4Qb8P93Fd7/YQq//00Aof8ma8//Adn//wHa//8B3P//Ad3//wHf//8B4f//AeL//wHk//8B5f//Aef//wHo//8B6v//Aev//wHt//8B7v//AfD//wHx//8B8v//AfT//wH1//8B9v//Aff//wH4//8B+f//Afr//wH7//8B/P//Af3//wH+//8C/v//Bf///wj///8L////Df///w////8Q////Ef///xH///8R////Ef///xD///8P////Df///wv///8I////Bv///wP///8B/v//Af3//wH9//8B/P//Afv//wH6//8B+f//Aff//wH2//8B9f//AfT//wHz//8B8f//AfD//wHu//8B7f//Aez//wHq//8B6f//Aef//wHm//8B5P//AOP//wDh//8Ax/X/AH7Z/wB+2f8Aftn/AH7Z/wB+2X4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8Ah+L/AKP//wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaX//wGm//8BqP//Aar//wGr//8Brf//Aa///wGw//8Bsv//AbP//wG1//8Bt///Abj//wG6//8Bvf//Ab///wHC//8BxP//Acf//wHK//8ioPv/hBvw/3cV3v9hCr//TQCh/yZsz/8B2f//Adv//wHd//8B3v//AeD//wHi//8B4///AeX//wHm//8B6P//Aen//wHr//8B7P//Ae7//wHv//8B8f//AfL//wH0//8B9f//Afb//wH3//8B+f//Afr//wH7//8B/P//Af3//wH+//8C/v//Bv///wr///8N////EP///xP///8V////F////xj///8Z////Gv///xr///8Z////GP///xf///8W////FP///xH///8O////Cv///wf///8D////Af7//wH9//8B/P//Afv//wH6//8B+f//Afj//wH2//8B9f//AfT//wHy//8B8f//AfD//wHu//8B7f//Aev//wHq//8B6P//Aef//wHl//8A5P//AOL//wDI9f8Aftn/AH7Z/wB+2f8Aftn/AH7ZfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z3wB+2f8Aftn/AH7Z/wCA2/8Ao///AKP//wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpf//Aaf//wGp//8Bqv//Aaz//wGt//8Br///AbH//wGy//8BtP//Abb//wG3//8Buf//Abv//wG+//8BwP//AcP//wHF//8ByP//Acv//yKh+/+EG/D/dxXe/2EKv/9NAKH/JmzP/wHa//8B3P//Ad7//wHf//8B4f//AeP//wHk//8B5v//Aef//wHp//8B6v//Aez//wHt//8B7///AfD//wHy//8B8///AfX//wH2//8B9///Afn//wH6//8B+///Afz//wH9//8B/v//Bf///wn///8O////Ev///xX///8Y////G////x3///8f////IP///yH///8i////Iv///yH///8g////H////x3///8b////Gf///xb///8T////D////wr///8G////Av7//wH+//8B/f//Afv//wH6//8B+f//Afj//wH2//8B9f//AfT//wHy//8B8f//Ae///wHu//8B7P//Aev//wHp//8B6P//Aeb//wDk//8A4///ALbu/wB+2f8Aftn/AH7Z/wB+2f8AftleAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftm/AH7Z/wB+2f8Aftn/AH7Z/wCj//8Ao///AKP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGr//8BrP//Aa7//wGw//8Bsf//AbP//wG0//8Btv//Abj//wG5//8BvP//Ab///wHB//8BxP//Acb//wHJ//8BzP//IqH7/4Qb8P93Fd7/YQq//00Aof8mbc//Adv//wHd//8B3v//AeD//wHi//8B4///AeX//wHn//8B6P//Aer//wHr//8B7f//Ae7//wHw//8B8v//AfP//wH0//8B9v//Aff//wH5//8B+v//Afv//wH9//8B/v//Av7//wf///8M////Ef///xb///8Z////HP///yD///8i////JP///yb///8o////KP///yn///8p////Kf///yj///8m////Jf///yP///8g////Hf///xr///8W////Ev///w3///8I////A/7//wH+//8B/f//Afz//wH6//8B+f//Afj//wH2//8B9f//AfP//wHy//8B8P//Ae///wHt//8B7P//Aer//wHp//8B5///AOX//wDk//8AsOz/AH7Z/wB+2f8Aftn/AH7Z/wB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2a8Aftn/AH7Z/wB+2f8Aftn/AJz3/wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8BpP//Aab//wGo//8Bqf//Aav//wGt//8Brv//AbD//wGy//8Bs///AbX//wG3//8BuP//Abr//wG9//8Bv///AcL//wHF//8Bx///Acr//wHN//8iovv/hBvw/3cV3v9hCr//TQCh/yZtz/8B3P//Ad3//wHf//8B4f//AeP//wHk//8B5v//Aej//wHp//8B6///Aez//wHu//8B8P//AfH//wHz//8B9P//Afb//wH3//8B+P//Afr//wH7//8B/f//Af7//wP+//8I////Dv///xT///8Y////HP///yD///8k////J////yr///8s////Lv///y////8w////Mf///zH///8w////L////y7///8s////Kv///yf///8k////If///x3///8Z////FP///w////8J////BP///wH+//8B/f//Afz//wH6//8B+f//Aff//wH2//8B9P//AfP//wHx//8B8P//Ae7//wHt//8B6///Aen//wHo//8A5v//AOX//wCd5P8Aftn/AH7Z/wB+2f8Aftn/AH7ZLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZfgB+2f8Aftn/AH7Z/wB+2f8Al/P/AKP//wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGl//8Bp///Aaj//wGq//8BrP//Aa3//wGv//8BsP//AbL//wG0//8Btf//Abf//wG5//8Bu///Ab7//wHA//8Bw///Acb//wHI//8By///Ac7//yKj+/+EG/D/dxXe/2EKv/9NAKH/Jm3P/wHd//8B3v//AeD//wHi//8B4///AeX//wHn//8B6P//Aer//wHs//8B7f//Ae///wHw//8B8v//AfT//wH1//8B9///Afj//wH6//8B+///Afz//wH+//8D////Cf///w////8V////Gv///x////8j////J////yv///8u////Mf///zP///81////Nv///zf///83////N////zf///82////Nf///zP///8x////Lv///yv///8o////JP///yD///8b////Fv///xD///8K////BP///wH+//8B/f//Afv//wH6//8B+P//Aff//wH1//8B9P//AfL//wHx//8B7///Ae7//wHs//8B6v//AOn//wDn//8A5f//AJHg/wB+2f8Aftn/AH7Z/wB+2f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftlOAH7Z/wB+2f8Aftn/AH7Z/wCQ7P8Ao///AKP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8BpP//AaX//wGn//8Bqf//Aar//wGs//8Brv//Aa///wGx//8Bs///AbT//wG2//8BuP//Abn//wG8//8Bvv//AcH//wHE//8Bxv//Acn//wHM//8Bz///J7D6/5RG5f+COM//aCev/1celv9lVpT/EdLv/wHf//8B4f//AeL//wHk//8B5v//Aef//wHp//8B6///Aez//wHu//8B8P//AfH//wHz//8B9f//Afb//wH4//8B+f//Afv//wH8//8B/v//A/7//wn///8P////Fv///xv///8g////Jf///yr///8u////Mf///zX///83////Of///zv///89////Pv///z7///8+////Pv///z3///87////Of///zf///81////Mv///y////8q////Jv///yH///8c////F////xH///8K////BP///wH+//8B/P//Afv//wH5//8B+P//Afb//wH1//8B8///AfL//wHw//8B7v//Ae3//wHr//8A6f//AOj//wDm//8Aftn/AH7Z/wB+2f8Aftn/AH7ZzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2S4Aftn/AH7Z/wB+2f8Aftn/AIfi/wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpv//Aaf//wGp//8Bq///Aaz//wGu//8BsP//AbH//wGz//8Btf//Abb//wG4//8Buv//Abz//wG///8Bwv//AcX//wHH//8Byv//Ac3//wHP//861/n/0tLS/6+vr/+MjIz/dnZ2/1yTnP9LrLr/AeD//wHh//8B4///AeX//wHm//8B6P//Aer//wHs//8B7f//Ae///wHx//8B8v//AfT//wH1//8B9///Afn//wH6//8B/P//Af3//wL+//8I////D////xb///8b////If///yb///8r////MP///zT///83////Ov///z3///9A////Qv///0P///9F////Rf///0X///9F////RP///0L///9A////Pv///zv///84////Nf///zH///8s////J////yL///8c////F////xD///8J////A/7//wH+//8B/P//Afr//wH5//8B9///Afb//wH0//8B8///AfH//wHv//8B7v//Aez//wDq//8A6f//AM31/wB+2f8Aftn/AH7Z/wB+2f8AftmvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8AgNv/AKP//wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8BqP//Aan//wGr//8Brf//Aa7//wGw//8Bsv//AbP//wG1//8Bt///Abj//wG6//8Bvf//AcD//wHD//8Bxf//Acj//wHL//8Bzf//AdD//z/c/f/l5eX/w8PD/6Ghof9+fn7/O6m6/2Sbo/8B4P//AeL//wHk//8B5f//Aef//wHp//8B6///Aez//wHu//8B8P//AfH//wHz//8B9f//Afb//wH4//8B+v//Afv//wH9//8B/v//Bv///w7///8V////G////yH///8n////LP///zH///82////Of///z3///9B////RP///0f///9J////Sv///0v///9M////TP///0z///9L////Sf///0f///9E////Qf///z7///86////Nv///zL///8t////KP///yL///8c////Fv///w////8I////Av7//wH9//8B/P//Afr//wH4//8B9///AfX//wHz//8B8v//AfD//wHu//8B7f//AOv//wDp//8Aue7/AH7Z/wB+2f8Aftn/AH7Z/wB+2X4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZvwB+2f8Aftn/AH7Z/wB+2f8AnPf/AKP//wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bpf//Aab//wGo//8Bqv//Aav//wGt//8Br///AbD//wGy//8BtP//AbX//wG3//8Buf//Abv//wG+//8BwP//AcP//wHG//8Byf//Acv//wHO//8B0f//QN7///b29v/X19f/tLS0/5GRkf89q7z/ZJuj/wHh//8B4///AeT//wHm//8B6P//Aer//wHr//8B7f//Ae///wHx//8B8v//AfT//wH2//8B9///Afn//wH7//8B/P//Af7//wT///8L////E////xr///8g////Jv///yz///8y////N////zv///8/////RP///0f///9K////Tf///0////9R////Uv///1P///9T////Uv///1H///9Q////Tf///0v///9I////RP///0D///88////N////zP///8t////KP///yH///8b////Ff///w3///8F////Af7//wH8//8B+///Afn//wH4//8B9v//AfT//wHz//8B8f//Ae///wHt//8A7P//AOr//wCf5P8Aftn/AH7Z/wB+2f8Aftn/AH7ZPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftl+AH7Z/wB+2f8Aftn/AH7Z/wCS7v8Ao///AKP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGl//8Bp///Aaj//wGq//8BrP//Aa3//wGv//8Bsf//AbL//wG0//8Btv//Abf//wG5//8BvP//Ab7//wHB//8BxP//Acf//wHJ//8BzP//Ac///wHS//9A3////v7+/+rq6v/IyMj/paWl/1aptf9knKT/AeH//wHj//8B5f//Aef//wHp//8B6v//Aez//wHu//8B8P//AfH//wHz//8B9f//Afb//wH4//8B+v//Afv//wH9//8C/v//Cf///xH///8Y////H////yX///8r////Mf///zf///87////QP///0X///9J////Tf///1D///9T////Vv///1f///9Z////Wf///1n///9Z////WP///1b///9U////Uf///07///9K////Rv///0H///89////N////zL///8t////Jv///yD///8Z////Ev///wr///8D/v//Af3//wH8//8B+v//Afj//wH3//8B9f//AfP//wHy//8B8P//AO7//wDs//8A6///AITb/wB+2f8Aftn/AH7Z/wB+2f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2T4Aftn/AH7Z/wB+2f8Aftn/AIfi/wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaX//wGn//8Bqf//Aar//wGs//8Brv//Aa///wGx//8Bs///AbT//wG2//8BuP//Abr//wG8//8Bv///AcL//wHE//8Bx///Acr//wHN//8B0P//AdL//0Df////////+fn5/9zc3P+5ubn/g56i/0S0w/8B4v//AeT//wHl//8B5///Aen//wHr//8B7f//Ae7//wHw//8B8v//AfT//wH1//8B9///Afn//wH6//8B/P//Af7//wX///8N////Ff///xz///8j////Kv///zD///82////O////0H///9G////S////0////9T////Vv///1n///9c////Xv///1////9f////YP///1////9e////XP///1r///9X////VP///1D///9L////R////0L///88////N////zH///8r////Jf///x7///8X////D////wf///8B/v//Afz//wH7//8B+f//Aff//wH2//8B9P//AfL//wHw//8A7///AO3//wDQ9f8Aftn/AH7Z/wB+2f8Aftn/AH7ZvwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2e8Aftn/AH7Z/wB+2f8Aftn/AKD8/wCj//8Ao///AaP//wGj//8Bo///AaP//wGk//8Bpf//Aaf//wGp//8Bqv//Aaz//wGu//8BsP//AbH//wGz//8Btf//Abb//wG4//8Buv//Ab3//wG///8Bwv//AcX//wHI//8Byv//Ac3//wHQ//8B0///INr//4Dr//9/7P7/deL0/2TT4/+AnKD/Cdv3/wHi//8B5P//Aeb//wHo//8B6v//Aev//wHt//8B7///AfH//wHy//8B9P//Afb//wH4//8B+f//Afv//wH9//8C/v//Cf///xL///8Z////IP///yf///8u////NP///zr///9A////Rv///0v///9Q////VP///1j///9c////X////2L///9k////Zf///2b///9m////Zf///2T///9i////YP///13///9Z////Vf///1H///9M////R////0H///87////Nv///zD///8p////Iv///xr///8T////Cv///wP+//8B/f//Afz//wH6//8B+P//Afb//wH1//8B8///AfH//wDv//8A7f//AK7p/wB+2f8Aftn/AH7Z/wB+2f8AftluAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZnwB+2f8Aftn/AH7Z/wB+2f8AlfD/AKP//wCj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGr//8BrP//Aa7//wGw//8Bsv//AbP//wG1//8Bt///Abj//wG6//8Bvf//AcD//wHD//8Bxf//Acj//wHL//8Bzv//AdH//wHT//8B1v//Adj//wHa//8B3P//PrrN/0a2xf8B4f//AeP//wHl//8B5v//Aej//wHq//8B7P//Ae7//wHv//8B8f//AfP//wH1//8B9///Afj//wH6//8B/P//Af7//wT///8N////Ff///x3///8k////K////zL///84////Pv///0T///9K////UP///1X///9Z////Xv///2H///9l////Z////2n///9r////bP///2z///9r////av///2j///9l////Yv///17///9a////Vv///1H///9L////Rv///z////85////M////y3///8l////Hv///xf///8P////Bv///wH+//8B/P//Afr//wH5//8B9///AfX//wHz//8A8v//APD//wDu//8Ai93/AH7Z/wB+2f8Aftn/AH7Z/wB+2R4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftlOAH7Z/wB+2f8Aftn/AH7Z/wCE4P8Ao///AKP//wGj//8Bo///AaP//wGj//8BpP//Aab//wGo//8Bqf//Aav//wGt//8Brv//AbD//wGy//8Bs///AbX//wG3//8Buf//Abv//wG9//8BwP//AcP//wHG//8Byf//Acv//wHO//8B0f//AdT//wHW//8B2P//Adr//xvN6v+GlJb/Cdr3/wHh//8B4///AeX//wHn//8B6f//Aev//wHs//8B7v//AfD//wHy//8B9P//AfX//wH3//8B+f//Afv//wH9//8B/v//CP///xD///8Z////IP///yj///8v////Nv///zz///9C////Sf///07///9U////Wf///17///9j////Zv///2r///9t////b////3H///9x////cv///3H///9v////bf///2r///9n////Y////1////9a////Vf///0////9K////RP///z3///83////MP///yn///8i////Gv///xL///8J////Av7//wH9//8B+///Afn//wH4//8B9v//AfT//wDy//8A8P//AMvz/wB+2f8Aftn/AH7Z/wB+2f8AftnPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftnvAH7Z/wB+2f8Aftn/AH7Z/wCe+v8Ao///AKP//wGj//8Bo///AaP//wGk//8Bpv//Aaj//wGp//8Bq///Aa3//wGv//8BsP//AbL//wG0//8Btf//Abf//wG5//8Bu///Ab7//wHB//8Bw///Acb//wHJ//8BzP//Ac///wHR//8B1P//Adf//wHY//8B2v//ZKiz/22lrf8B4P//AeL//wHk//8B5f//Aef//wHp//8B6///Ae3//wHv//8B8P//AfL//wH0//8B9v//Afj//wH5//8B+///Af3//wL+//8L////FP///xv///8j////K////zL///84////P////0b///9M////Uv///1j///9d////Y////2f///9r////b////3L///90////dv///3f///93////dv///3X///9y////b////2z///9o////ZP///17///9Z////U////03///9H////QP///zr///8z////LP///yX///8d////Ff///wz///8E////Af3//wH8//8B+v//Afj//wH2//8B9P//APP//wDx//8AqOf/AH7Z/wB+2f8Aftn/AH7Z/wB+2W4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2Z8Aftn/AH7Z/wB+2f8Aftn/AI7p/wCj//8Ao///AaP//wGj//8Bo///AaT//wGm//8BqP//Aar//wGr//8Brf//Aa///wGw//8Bsv//AbT//wG2//8Bt///Abn//wG7//8Bvv//AcH//wHE//8Bx///Acn//wHM//8Bz///E8rx/wHV//8B1///Adn//wHb//+Tk5P/eKKo/wHg//8B4v//AeT//wHm//8B6P//Aen//wHr//8B7f//Ae///wHx//8B8///AfT//wH2//8B+P//Afr//wH8//8B/v//Bf///w3///8W////Hv///yb///8t////Nf///zv///9C////Sf///1D///9W////XP///2H///9m////a////3D///9z////d////3n///97////fP///3z///97////ev///3f///90////cf///2z///9n////Yv///13///9X////Uf///0r///9E////Pf///zb///8v////KP///yD///8Y////D////wb///8B/v//Afz//wH6//8B+P//Aff//wD1//8A8///AOr8/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZPgB+2f8Aftn/AH7Z/wB+2f8AgNv/AKD8/wCj//8Ao///AaP//wGj//8Bpf//Aab//wGo//8Bqv//Aaz//wGt//8Br///AbH//wGy//8BtP//Abb//wG3//8Buf//Abz//wG///8Bwf//AcT//wHH//8Byv//Ac3//wrM+P9wpbD/AdX//wHX//8B2f//Adv//4Oeo/+Wlpb/AeD//wHi//8B5P//Aeb//wHo//8B6v//Aez//wHt//8B7///AfH//wHz//8B9f//Aff//wH4//8B+v//Afz//wH+//8H////EP///xj///8g////KP///zD///83////Pv///0X///9M////Uv///1n///9f////Zf///2r///9v////dP///3j///97////fv///4D///+A////gP///4D///9+////fP///3n///91////cP///2v///9m////YP///1r///9U////Tf///0b///8/////OP///zH///8q////Iv///xr///8R////CP///wH+//8B/P//Afv//wH5//8B9///APX//wDz//8AuOz/AH7Z/wB+2f8Aftn/AH7Z/wB+2a8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZzwB+2f8Aftn/AH7Z/wB+2f8AkOz/AKP//wCj//8Bo///AaP//wGl//8Bpv//Aaj//wGq//8BrP//Aa3//wGv//8Bsf//AbL//wG0//8Btv//Abj//wG5//8BvP//Ab///wHC//8BxP//Acf//wHK//8Bzf//X6y+/0y1y/8B1f//Adf//wHZ//8B2///X7K+/5iYmP8wyt//AeP//wHk//8B5v//Aej//wHq//8B7P//Ae7//wHw//8B8f//AfP//wH1//8B9///Afn//wH7//8B/f//Af7//wj///8S////Gv///yL///8q////Mv///zn///9A////R////07///9V////W////2L///9n////bf///3L///93////fP///3////+B////g////4T///+F////hP///4L///9/////fP///3j///9z////bv///2n///9j////Xf///1b///9P////Sf///0H///86////M////yz///8k////HP///xP///8K////Av7//wH9//8B+///Afn//wD3//8A9f//AOz8/wCF2/8Aftn/AH7Z/wB+2f8Aftn/AH7ZTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftleAH7Z/wB+2f8Aftn/AH7Z/wCC3f8Ao///AKP//wCj//8Bo///AaX//wGn//8BqP//Aar//wGs//8Brf//Aa///wGx//8Bs///AbT//wG2//8BuP//Abr//wG8//8Bv///AcL//wHF//8Bx///Acr//wHN//+QnaD/J8Xl/wHW//8B2P//Adn//wHb//8nzOX/m5ub/2G1wP8B4///AeX//wHn//8B6P//Aer//wHs//8B7v//AfD//wHy//8B9P//AfX//wH3//8B+f//Afv//wH9//8C/v//Cv///xP///8c////JP///yz///80////Ov///0L///9J////UP///1f///9e////ZP///2r///9w////df///3r///9+////gv///4X///+H////if///4n///+I////hf///4L///9/////e////3b///9x////a////2X///9f////WP///1L///9L////Q////zz///81////Lf///yX///8d////Ff///wz///8D////Af3//wH7//8B+f//APj//wD2//8Auez/AH7Z/wB+2f8Aftn/AH7Z/wB+2d8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftnvAH7Z/wB+2f8Aftn/AH7Z/wCQ7P8Ao///AKP//wGj//8Bpf//Aaf//wGo//8Bqv//Aaz//wGu//8Br///AbH//wGz//8BtP//Abb//wG4//8Buv//Abz//wG///8Bwv//AcX//wHI//8Byv//HsTs/5ycnP8Kz/j/Adb//wHY//8B2v//Adv//wHd//+AqrD/lKKj/wrf+f8B5f//Aef//wHp//8B6v//Aez//wHu//8B8P//AfL//wH0//8B9v//Aff//wH5//8B+///Af3//wL///8L////FP///x3///8l////Lf///zX///88////Q////0v///9S////Wf///1////9m////bP///3L///93////fP///4D///+E////iP///4v///+M////jP///4v///+J////hf///4H///9+////eP///3P///9t////Z////2D///9a////U////0z///9F////Pf///zb///8v////J////x7///8W////Df///wT///8B/f//Afz//wD6//8A+P//AO78/wCF2/8Aftn/AH7Z/wB+2f8Aftn/AH7ZbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2X4Aftn/AH7Z/wB+2f8Aftn/AIDb/wCg/P8Ao///AKP//wGl//8Bp///Aaj//wGq//8BrP//Aa7//wGv//8Bsf//AbP//wG0//8Btv//Abj//wG6//8BvP//Ab///wHC//8Bxf//Acj//wHK//8oweb/np6e/wHT//8B1v//Adj//wHa//8B3P//Pcbc/1DAz/+goKD/PMrb/wHl//8B5///Aen//wHr//8B7P//Ae7//wHw//8B8v//AfT//wH2//8B+P//Afn//wH7//8B/f//A////wz///8V////Hf///yb///8u////Nf///z3///9E////TP///1P///9a////YP///2f///9t////c////3n///9+////gv///4f///+K////jf///4////+Q////jv///4v///+H////g////3////96////dP///27///9o////Yv///1v///9U////Tf///0b///8+////N////y////8n////H////xf///8O////BP///wH+//8B/P//APr//wD4//8Auuz/AH7Z/wB+2f8Aftn/AH7Z/wB+2e8AftkOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZDgB+2e8Aftn/AH7Z/wB+2f8Aftn/AJDs/wCj//8Ao///AaX//wGn//8BqP//Aar//wGs//8Brv//Aa///wGx//8Bs///AbX//wG2//8BuP//Abr//wG8//8Bv///AcL//wHF//8ByP//Acv//1G30P+Mp6z/AdP//wHW//8B2P//Adr//wHc//9xtcD/C9v5/3C2v/9mu8X/AeX//wHn//8B6f//Aev//wHs//8B7v//AfD//wHy//8B9P//Afb//wH4//8B+v//Afv//wH9//8D////DP///xb///8e////Jv///y////82////Pf///0X///9M////U////1r///9h////Z////27///90////ef///3////+D////iP///4z///+P////kv///5L///+Q////jP///4j///+E////f////3r///91////b////2n///9i////XP///1X///9N////Rv///z////83////MP///yj///8g////F////w7///8F////Af7//wD8//8A+v//APD8/wCF2/8Aftn/AH7Z/wB+2f8Aftn/AH7ZfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZfgB+2f8Aftn/AH7Z/wB+2f8Aftn/AJ76/wCj//8Apf//Aaf//wGo//8Bqv//Aaz//wGu//8Br///AbH//wGz//8Btf//Abb//wG4//8Buv//Abz//wG///8Bwv//AcX//wHI//8By///UrjR/3quuv8B0///Adb//wHY//8B2v//Adz//3yzvP8B3///Psrd/5CtsP8B5f//Aef//wHp//8B6///Aez//wHu//8B8P//AfL//wH0//8B9v//Afj//wH6//8B/P//Af3//wP///8M////Fv///x7///8m////L////zb///89////Rf///0z///9T////Wv///2H///9n////bv///3T///96////f////4P///+I////jP///4////+S////kv///5D///+N////iP///4T///+A////e////3X///9v////af///2L///9c////Vf///03///9G////P////zf///8w////KP///yD///8X////Dv///wX///8B/v//APz//wD6//8ArOf/AH7Z/wB+2f8Aftn/AH7Z/wB+2d8AftkOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z3wB+2f8Aftn/AH7Z/wB+2f8Ah+L/AKP//wCl//8Bp///Aaj//wGq//8BrP//Aa7//wGv//8Bsf//AbP//wG0//8Btv//Abj//wG6//8BvP//Ab///wHC//8Bxf//Acj//wHL//9TudL/fLC7/wHT//8B1v//Adj//wHa//8B3P//frW+/wHf//8g1u7/p6en/wHl//8B5///Aen//wHr//8B7P//Ae7//wHw//8B8v//AfT//wH2//8B+P//Afr//wH7//8B/f//A////wz///8V////Hv///yb///8u////Nv///z3///9E////TP///1P///9a////YP///2f///9t////c////3n///9+////gv///4f///+L////jv///5D///+Q////jv///4v///+I////g////3////96////dP///27///9o////Yv///1v///9U////Tf///0b///8+////N////zD///8o////H////xf///8O////Bf///wD+//8A/P//ANv1/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftlOAH7Z/wB+2f8Aftn/AH7Z/wB+2f8AlfD/AKX//wCn//8BqP//Aar//wGs//8Brv//Aa///wGx//8Bs///AbT//wG2//8BuP//Abr//wG8//8Bv///AcL//wHF//8ByP//Acr//1S60/+Ir7f/AdP//wHW//8B2P//Adr//wHb//91usX/INXv/yDW7/9qv8n/AeX//wHn//8B6f//Aer//wHs//8B7v//AfD//wHy//8B9P//Afb//wH4//8B+f//Afv//wH9//8D////C////xX///8d////Jf///y3///81////PP///0P///9L////Uv///1n///9g////Zv///2z///9y////eP///33///+B////hf///4j///+L////jf///43///+M////if///4X///+B////fv///3n///9z////bf///2f///9h////Wv///1P///9M////Rf///z3///82////L////yf///8e////Fv///w3///8E////AP3//wD8//8Ajd3/AH7Z/wB+2f8Aftn/AH7Z/wB+2c8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftm/AH7Z/wB+2f8Aftn/AH7Z/wCA2/8AoPr/AKf//wCo//8Bqv//Aaz//wGt//8Br///AbH//wGz//8BtP//Abb//wG4//8Buv//Abz//wG///8Bwv//AcX//wHH//8Byv//VbvU/6mpqf8B0///Atb//wLY//8C2v//Adv//0HL4P9Xxtb/YcPQ/wvf+f8B5f//Aef//wHo//8B6v//Aez//wHu//8B8P//AfL//wH0//8B9f//Aff//wH5//8B+///Af3//wL+//8K////FP///xz///8k////LP///zT///87////Qv///0n///9Q////V////17///9k////av///3D///92////ev///3////+C////hf///4j///+J////if///4j///+G////g////4D///97////dv///3H///9r////Zf///1////9Z////Uv///0v///9D////PP///zX///8u////Jv///x3///8V////DP///wL///8A/f//ALXp/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2R4AftnvAH7Z/wB+2f8Aftn/AH7Z/wCH4v8Apv//AKj//wGq//8BrP//Aa3//wGv//8Bsf//AbP//wG0//8Btv//Abj//wG6//8BvP//Ab///wHC//8BxP//Acj//wTL//9Ewd//q6ur/xbS+f8N2P//Dtn//w3b//8g1/T/W8bW/66urv9Oy9v/AeP//wHk//8B5v//Aej//wHq//8B7P//Ae7//wHw//8B8f//AfP//wH1//8B9///Afn//wH7//8B/f//Af7//wn///8S////Gv///yP///8r////Mv///zn///9A////SP///0////9V////XP///2L///9o////bv///3P///94////fP///3////+C////hP///4X///+F////hP///4L///+A////ff///3j///90////b////2n///9j////Xf///1f///9Q////Sf///0L///86////NP///yz///8k////HP///xT///8K////Af7//wDd9f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2Y8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2W4Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCS7P8AqP//AKr//wGs//8Brf//Aa///wGx//8Bsv//AbT//wG2//8BuP//Abn//wG8//8Bv///AsL//wXG//8Lyv//D83//yfM9P+tra3/Ps3q/xrZ//8b3P//Gt3//yzZ9f8+1Ov/T8/i/3TEz/8L5P//BuX//wHm//8B6P//Aer//wHs//8B7f//Ae///wHx//8B8///AfX//wH3//8B+f//Afr//wH8//8B/v//B////xD///8Z////If///yn///8w////N////z7///9F////TP///1P///9Z////X////2X///9r////cP///3T///95////fP///3////+A////gf///4H///+A////f////33///95////df///3D///9s////Zv///2D///9a////VP///07///9H////QP///zj///8y////Kv///yL///8a////Ev///wf///8A9vz/AIbb/wB+2f8Aftn/AH7Z/wB+2f8AftnfAH7ZDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2b8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCe9f8Aqv//AKv//wGt//8Br///AbH//wGy//8BtP//Abb//wG3//8Buf//Abz//wTA//8LxP//Ecj//xbM//8b0P//INP//5W3vv9zwtL/J9z//yje//8n3///JuD//yPh//8g4///orq9/1HT4/8R5v//C+f//wTo//8B6f//Aev//wHt//8B7///AfH//wHz//8B9f//Afb//wH4//8B+v//Afz//wH+//8F////Dv///xf///8f////Jv///y7///81////PP///0P///9K////UP///1b///9c////Yv///2f///9s////cf///3T///93////ev///3z///99////ff///3z///96////eP///3X///9x////bf///2j///9j////Xf///1f///9R////S////0T///89////Nv///y////8o////IP///xj///8P////Bf///wCe4v8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZHgB+2e8Aftn/AH7Z/wB+2f8Aftn/AIDb/wCk+v8Aq///AK3//wGv//8BsP//AbL//wG0//8Btf//Abf//wG5//8Hvf//D8L//xbH//8cy///Is///yfS//8r1f//YMri/5q5wP803f//NN///zPh//8y4v//MOP//y3k//+Uwsj/kcLJ/x3n//8X6P//D+n//wfq//8B6///Ae3//wHv//8B8P//AfL//wH0//8B9v//Afj//wH6//8B+///Af3//wP///8L////FP///xz///8k////K////zP///85////QP///0f///9N////U////1n///9e////Y////2j///9s////cP///3P///91////d////3j///94////d////3b///9z////cP///23///9p////ZP///1////9a////VP///07///9I////Qf///zr///80////Lf///yX///8d////Ff///wz///8Ctun/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftmPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZTgB+2f8Aftn/AH7Z/wB+2f8Aftn/AIbg/wCo/P8Arf//AK7//wGw//8Bsv//AbT//wG1//8Ct///CLv//xHA//8Zxf//IMn//yfN/v8u0f//M9T//zjY//9D2Pr/rba4/1bX8f9B4f//QOL//z/k//885f//OeX//7C7vf+5ubn/Kej//yLp//8a6f//Eur//wjr//8B7P//Ae7//wHw//8B8v//AfT//wH1//8B9///Afn//wH7//8B/f//Af7//wj///8R////Gf///yH///8o////MP///zb///88////Q////0n///9P////Vf///1r///9f////Y////2f///9r////bv///3D///9x////cv///3L///9y////cP///27///9r////aP///2T///9g////W////1b///9Q////Sv///0T///8+////N////zH///8q////Iv///xr///8S////Bs7w/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZjwB+2f8Aftn/AH7Z/wB+2f8Aftn/AIbg/wCs//8Arv//ALD//wGy//8Bs///AbX//wi5//8Rvv//GsL//yPH//8rzP7/MtD+/znT//8/1///RNr+/0jd/v+HyNX/jsbR/07j/v9O5P7/TOX+/0nm/v9U4fb/u7u7/5rGzP806f//Len//yXq//8c6///Euz//wjt//8B7v//AfD//wHx//8B8///AfX//wH3//8B+f//Afr//wH8//8B/v//Bf///w3///8W////Hf///yX///8s////M////zn///8/////Rf///0v///9Q////Vv///1r///9e////Yv///2X///9o////av///2z///9t////bf///2z///9r////af///2b///9j////X////1v///9W////Uf///0z///9G////QP///zr///80////Lf///yb///8f////Fv///wrW8/8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2e8AftkeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZzwB+2f8Aftn/AH7Z/wB+2f8Aftn/AI/n/wCu//8AsP//ALH//wGz//8Ht///Ebz//xvA//8kxf//Lcn+/zXO/v880v//RNb+/0rZ/v9R3P7/Vd/+/2Xc9f+4uLj/Zt/1/1vm/v9Z5/7/Vuj+/4HV4f+9vb3/edbi/z7q//836v//L+v//ybr//8c7P//Eu3//wfu//8B7///AfH//wHz//8B9P//Afb//wH4//8B+v//Afv//wH9//8C/v//Cv///xL///8a////If///yj///8v////Nf///zv///9B////Rv///0z///9R////Vf///1n///9d////YP///2P///9l////Zv///2f///9n////Zv///2X///9j////Yf///17///9a////Vv///1L///9N////R////0L///88////Nv///zD///8p////Iv///xr///8Q5vf/AYbb/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkOAH7ZzwB+2f8Aftn/AH7Z/wB+2f8Aftn/AJDn/wCv//8Asf//BLT//w+5//8Zvv//I8P//y3H/v82zP7/P9D+/0fU/v9Q2P7/Vtv+/13e/v9i4f7/ZuP+/6HIz/+gyND/aOj+/2bp/v9j6f7/rcfL/7nCw/9Z6Pr/Suv+/0Lr//846///L+z//yXs//8a7f//D+7//wTv//8B8P//AfL//wH0//8B9f//Aff//wH5//8B+///Afz//wH+//8G////Dv///xb///8d////JP///yv///8x////N////zz///9C////R////0v///9Q////VP///1f///9a////Xf///1////9g////Yf///2H///9g////X////13///9b////WP///1X///9R////TP///0j///9C////Pf///zj///8y////LP///yX///8d////E+b3/wGG2/8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AJDn/wCx//8Cs///FLv//yDA//8rxf7/Ncn+/z/O/v9I0v7/Utb+/1ra/v9j3v7/aeH+/27j/v9z5v7/jNrp/7y8vP+P2eX/dOr+/3/j8v/BwcH/jdnj/1zr/v9V6/7/TOz+/0Ls//847P//Le3//yPt//8X7v//C+///wHw//8B8f//AfP//wH1//8B9v//Afj//wH6//8B/P//Af3//wL+//8J////Ev///xn///8f////Jv///yz///8y////N////zz///9B////Rv///0r///9O////Uv///1T///9X////WP///1r///9a////Wv///1r///9Z////V////1X///9S////T////0v///9H////Qv///z3///84////M////y3///8n////IP///xXm9/8Bhtv/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftmfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AJHn/wCy//8Ftv//JcH+/zLH/v89y/7/SND+/1LV/v9c2f7/Zt3+/27g/v914/7/e+X+/3/n/v+C6f7/t8TG/7rBw/+D6fr/pNXd/7rJy/9w7f7/aOz+/1/s/v9V7P7/S+z+/0Dt//817f//Ku3//x/u//8S7v//Be///wHx//8B8v//AfT//wH2//8B9///Afn//wH7//8B/P//Af7//wX///8M////FP///xv///8h////J////y3///8z////N////zz///9A////Rf///0j///9L////Tv///1D///9S////U////1T///9U////U////1L///9R////Tv///0z///9J////Rf///0H///89////OP///zP///8u////KP///yH///8W5vf/AYbb/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZnwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AIfg/wCw/P8Dtv7/L8b+/0XN/v9R0v7/W9f+/2bb/v9w3/7/eeL+/4Dl/v+H5/7/jOr+/4/r/v+v0df/wcHB/6zS2P+30NT/p9fe/3vu/v9y7f7/ae3+/1/t/v9T7f7/Se3+/z3t//8x7f//Je7//xju//8L7///AfD//wHy//8B8///AfX//wH3//8B+P//Afr//wH7//8B/f//Af7//wf///8P////Fv///xz///8i////KP///y3///8y////N////zr///8+////Qv///0X///9I////Sv///0v///9N////Tf///03///9N////TP///0r///9I////Rv///0L///8/////O////zf///8z////Lv///yj///8i////Es7w/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2Z8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AIjg/wCr9/8EuP7/MMf+/1jU/v9k2f7/b93+/3nh/v+D5P7/jOf+/5Pq/v+Z7P7/nO7+/7DY4P/Dw8P/w8PD/8jIyP+b5fD/he/+/3zu/v9y7v7/Z+7+/1zu/v9P7f7/RO3//zft//8r7v//Hu7//xHv//8E7///AfH//wHy//8B9P//Afb//wH3//8B+f//Afr//wH8//8B/f//Av7//wn///8Q////F////xz///8i////J////yz///8x////Nf///zj///87////Pv///0H///9D////Rf///0b///9G////Rv///0b///9F////Q////0H///8/////PP///zn///82////Mv///y3///8n////Iv///w++7P8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftmfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AIHb/wCk8/8AuP//KcX+/2za/v933v7/guP+/43m/v+X6f7/n+z+/6bu/v+q8P7/uNvi/8XFxf/FxcX/ycnJ/5nx//+P8P//he/+/3rv/v9u7v7/Y+7+/1bu/v9K7f7/Pe3//zDt//8j7v//Fu7//wjv//8B8P//AfH//wHz//8B9f//Afb//wH4//8B+f//Afv//wH8//8B/v//A////wr///8R////F////xz///8h////Jv///yv///8v////M////zX///84////Ov///zz///8+////P////z////8/////P////z7///88////O////zj///82////M////y////8r////Jv///x/2/P8JpuT/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZnwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCa7P8Auf//FcH+/2fZ/v+K5P7/l+j+/6Hr/v+r7v7/s/D+/7jy///A3eP/x8fH/8fHx//Gz9D/rOjy/5nx//+N8P//ge/+/3Xv/v9p7v7/XO7+/0/t/v9C7f//NO3//yft//8a7v//DO7//wHv//8B8f//AfL//wH0//8B9f//Aff//wH4//8B+v//Afv//wH9//8B/v//BP///wr///8R////Fv///xv///8g////JP///yj///8s////L////zL///80////Nv///zf///84////OP///zj///84////N////zb///80////Mv///zD///8s////KP///yT///8a5vf/BZbg/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2Z8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7ZzwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCJ4P8As/r/CL/+/1LV/v+f6v7/rO3+/7fw/v/A8///xvT//8jf5P/Jycn/ycnJ/8HZ3f/G19r/seTt/5Xx//+I8P//e+/+/27u/v9h7v7/U+3+/0bt//847f//K+3//x3t//8P7v//Au7//wHw//8B8f//AfP//wH0//8B9v//Aff//wH5//8B+v//Afv//wH9//8B/v//BP///wn///8P////Ff///xn///8d////If///yX///8o////K////y3///8v////MP///zH///8y////Mv///zH///8w////L////y3///8r////KP///yX///8h////Ecbu/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkOAH7ZvwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCB2/8Aoe7/AL///x/J/v+H5P7/wfL//8z1///U9///zdbX/8vLy//Ly8v/x9jb/7fy/P/C3eH/vNzh/5nq9v9/7/7/cu7+/2Xu/v9W7f7/Se3+/zvt//8t7P//IO3//xHt//8E7f//Ae///wHw//8B8v//AfP//wH1//8B9v//Afj//wH5//8B+v//Afz//wH9//8B/v//A////wj///8N////Ev///xf///8a////Hv///yH///8j////Jv///yf///8p////Kv///yr///8q////Kv///yn///8o////Jv///yP///8g////Gu76/wee4v8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftnvAH7ZXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZjwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AiuD/ALT3/wDD//9L1///u/H//+H5///P0tP/zMzM/83Nzf/J4eb/u/X//63z//+f8v//kfD//4Lv/v917v7/Z+3+/1nt/v9L7P7/Pez//y/s//8i7P//E+z//wXt//8B7v//Ae///wHx//8B8v//AfT//wH1//8B9v//Afj//wH5//8B+v//Afv//wH9//8B/v//Av7//wb///8K////D////xP///8X////Gf///xz///8e////IP///yH///8i////I////yP///8i////If///yD///8e////G////w2+7P8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z3wB+2S4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0Z/R0dH/0dHR7wAAAAAAAAAAAAAAAAAAAAAAftkuAH7ZjwB+2d8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2a8AftleAH7ZDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHR79HR0f/R0dGPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2R4AftleAH7ZnwB+2d8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftm/AH7ZfgB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0S7R0dH/0dHR/9HR0S4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2Q4Aftk+AH7ZfgB+2Z8Aftm/AH7Z3wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8Aftm/AH7ZfgB+2V4AftkuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHRXtHR0f/R0dHfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkOAH7ZPgB+2T4Aftk+AH7ZPgB+2T4AftkuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR0dF+0dHR/9HR0Z8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0b/R0dH/0dHRXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHRv9HR0f/R0dE+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR0dG/0dHR/9HR0Q4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0Y/R0dH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHRPtHR0f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHRv9HR0S4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR0dEu0dHRbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR0dGv0dHRXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0T7R0dH/0dHRj9HR0Q4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0Y/R0dH/0dHR39HR0V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0U7R0dHP0dHR/9HR0d/R0dFeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////4P///+AP/////////////AAH//4AAP////////////AAAf/4AAA////////////AAAB/4AAAD///////////AAAAH8AAAAf//////////gAAAA8AAAAB//////////wAAAAGAAAAAP/////////4AAAAAAAAAAB/////////8AAAAAAAAAAAP////////+AAAAAAAAAAAD/////////AAAAAAAAAAAAP////////wAAAAAAAAAAAAP///////4AAAAAAAAAAAAAf//////+AAAAAAAAAAAAAA///////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAAP/////4AAAAAAAAAAAAAAA/////+AAAAAAAAAAAAAAAD/////gAAAAAAAAAAAAAAAP////4AAAAAAAAAAAAAAAB////+AAAAAAAAAAAAAAAAP////gAAAAAAAAAAAAAAAA////4AAAAAAAAAAAAAAAAH///+AAAAAAAAAAAAAAAAA////gAAAAAAAAAAAAAAAAH///4AAAAAAAAAAAAAAAAA///+AAAAAAAAAAAAAAAAAH///gAAAAAAAAAAAAAAAAA///4AAAAAAAAAAAAAAAAAH//+AAAAAAAAAAAAAAAAAA///wAAAAAAAAAAAAAAAAAH//8AAAAAAAAAAAAAAAAAB///AAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//+AAAAAAAAAAAAAAAAAAf//wAAAAAAAAAAAAAAAAAD//4AAAAAAAAAAAAAAAAAA//mAAAAAAAAAAAAAAAAAAH/xAAAAAAAAAAAAAAAAAAB/8AAAAAAAAAAAAAAAAAAAP/gAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAA/5AAAAAAAAAAAAAAAAAAAH+QAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAAAAAAAAAAD/gAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAAAAAAAAAAD/wAAAAAAAAAAAAAAAAAAA/8AAAAAAAAAAAAAAAAAAAP/AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAAAB/+AAAAAAAAAAAAAAAAAAAf/gAAAAAAAAAAAAAAAAAAH/4AAAAAAAAAAAAAAAAAAD//AAAAAAAAAAAAAAAAAAA//wAAAAAAAAAAAAAAAAAAP/8AAAAAAAAAAAAAAAAAAH//gAAAAAAAAAAAAAAAAAB//4AAAAAAAAAAAAAAAAAA///AAAAAAAAAAAAAAAAAAP//wAAAAAAAAAAAAAAAAAD//8AAAAAAAAAAAAAAAAAB///gAAAAAAAAAAAAAAAAAf//8AAAAAAAAAAAAAAAAAP///AAAAAAAAAAAAAAAAAH///4AAAAAAAAAAAAAAAAB///+AAAAAAAAAAAAAAAAA////wAAAAAAAAAAAAAAAAP///+AAAAAAAAAAAAAAAAH////gAAAAAAAAAAAAAAAD////8AAAAAAAAAAAAAAAB/////gAAAAAAAAAAAAAAAf////8AAAAAAAAAAAAAAAP/////AAAAAAAAAAAAAAAH/////4AAAAAAAAAAAAAAD//////AAAAAAAAAAAAAAB//////4AAAAAAAAAAAAAA///////AAAAAAAAAAAAAAf//////4AAAAAAAAAAAAAP///////AAAAAAAAAAAAAH///////4AAAAAAAAAAAAD////////AAAAAAAAAAAAB////////8AAAAAAAAAAAA/////////gAAAAAAAAAAAf////////8AAAAAAAAAAAf/////////wAAAAAAAAAAP/////////+AAAAAAAAAAP//////////4AAAAAAAAAH///////////gAAAAAAAAH///////////+AAAAAAAAH////////////gAAAAAAAH////////////4AAAAAAAP////////////+PAAAAAAP/////////////j+AAAAA//////////////w/+AAAD//////////////8f//4D////////////////H////////////////////x////////////////////8f////////////////////H////////////////////z////////////////////8/////////////////////n////////////////////5/////////////////////P////////////////////w////////////////////+H////////////////////wf////////////8LAAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABVTeXN0ZW0uRHJhd2luZy5CaXRtYXABAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAAwYAAAKJUE5HDQoaCgAAAA1JSERSAAAAQAAAAEAIBgAAAKppcd4AAAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAFpUlEQVR4Xt3bV6jsRADG8RXsHRVRFAsWVFDsivhgQ7CA9cGCihXsir1XVGygomB9sOAVfLA3xIoVFazYO/Zesfv/9jqHOTnfJpNkNjeeD37cy24yyczJbqZkBx1kAWyJw3EFHsCL+Bi/4p///v0Er+IxXIytMC/+l9kQZ+IJqIJtPIwDsRh6n33wMlxFctDVsxN6l2PwFdxJj4M+QjtjlmdTvAZ3kl14Duug88yP6+FOala4CPOgk6yL9+FOpMr30BVzP67D2bgUN+JevAm3XwqVuyLGmoPhDl7maRyHFZCSRbEtLkDd75UfoH3HkjPgDuo8ioOwJNpmd6gR3XFGOR3ZMhuugjtQkT4a22McWR3X4Ge4YxedhyxRr8wdIPYbzsHcGHeWQ2pf42S0Sspn/nGsjC6ju9DtcOdTdCgaZWv8BVdocBvmwKzKafgb7txim6NWloK+UV1hwc3oQ/aEO7/Yl1CdkqN7sisoUCeoT1F/wp1n7BEkZQ+4AoJroTtD33Ir3PnGdkFlPoPbWfSF1zZ3QH+NUZp2aXUHehbuvIOPUJpD4HaUP7AS2uZbuPIDfcM3jeYMVElXbnAKbOaEZmXcTpKrdzXOBlDUFXblBt9hLkzJvnA7yBvIla/hjhG0bQDlBbiyA905puRJuI1Fc3q58g3cMYIcDaBZI1d2oKm6SVH30m0omrzMmS4aQNEEqys/mNR7PRFuIzkfOdPFR0DZDa784GhM5Cm4jWRN5My4vwRD5oPuXO4Y8hCG0f1z1IbvIHe6agBFU+ruGPIn1EjDiU23gZyE3OmyAco+2qK6D06NXijaDLnTZQNo/tIdIzgMg1uiF4pWQ+502QDq3LljBFejdL5tYdTNsjh25n9tmt4FNEhbe+Z/a0U9P3cc0Zf/4N3ohZi+GOtGlVe/QftrVtelyRWgnpsmPjStvp5eqJG34I4jwz7OF9ELMU1w1onm5EPlg3NRTN0roNhF/xEbITVlC7Sa9JlYoi7S+ltq1KsaNZAqNkLVXH/cAAfAbfMTNkZK7oErQ1R3+4boykjJqvgcrowg7k2mXgFlQ3PR9HhKIzwIt38wvKTcG6KHG6qi5wDcvkVav1NSGkAPU7j3imagKmUjQ12Ngw+iF4pSu8GXwO1fpEao+ghopte9XqSZpZSUNbjWIofTXO5NqbMGn7p6lIMelEiZjtfH0+0f6HGc4SSne1O0qFknl8OVk9PdSM3+cGUEN2FwQvRCkabH62acV0LqXz7kBrhyAj3ZMrzM3ZuiEdPiqJtxNELdyivvwZUVbILB0tELzhFokpyN0KTyS8CVFZuYglenx20gz6NpcjTCXWiy/qiVYVdeMBwHhGhp220UtBkVtmkEVX521M1CKBsEyfDzH6JRltso0Npbm6T2E2JaeW6as+DKjC2PSXkJbkPRKGwZtEmdK6HpX17RM0YaK7hyAzvO2Q9u40CjqraLoimN0KbyyoVw5cbsQxOaIKxquaPQNmWN0LbyyjYomw3WswIjF2CrBjZ6FmgVtI1rhByVDylrBHX8RkZXQdVoTZ+fHCcaN0LOyoe4RvgUlcvver4v3sm5D27qqm8pNsKOSMoziCvs6FG1tneGLrIddL61xjW6R1Y9JCWaNVoffY/+8lPu+1XZFa7Sjp4nnJZJefoqeB07YNrlMrgKj6KFlg0wrXIlXGXLvALNATZdX9TtSgstvUnViLGMepga3OyNNRDfizVyU0U1AbsF9DCWHrfXfpqx7tXVpCWq31Gs4DipEZqsCY4t+pFS1VRTbhrb96oR1AssW1Yfh941grIXqp76ykkry2uhV1kQWs2pmoLKRYM1/Xymd9HDFPoGfxvuxHPQc8DHYxH0Ono2RzMzOX5HrMVNrV718jfDKdFP4LWMfST083mNyvTscajgL/gQquid0FK6foTdwf1/MPgXtSw25pYwFjgAAAAASUVORK5CYIILAAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABVTeXN0ZW0uRHJhd2luZy5CaXRtYXABAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAtAIAAAKJUE5HDQoaCgAAAA1JSERSAAAAMAAAADAIBgAAAFcC+YcAAAAEZ0FNQQAAsY8L/GEFAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfkBQIOKjkZGN3lAAACF0lEQVRoQ92aWUoEMRRFG3QFjjROq/DDRTpsQf1xXIa7UFTw2wUoDvd8BJqQVNKVl6pKXzjQJF0vuamXpKaZoXbElfgSf5WhDdqaCxOtiTMRaqwWP+JSmGhPvIhQQzXhTJjoSLyLUCO1MdGhWEkD3+JDvAnq+8CxxCCWHx9MFDNAwyfiQPCfPnAsMYjlxwcT0VDIAKNHB0pFDGL58cFEsUlMGXWlig0QmCi2jFJGXamqG1gX58IPThl1pTIxwG7LaAK/fW0JOsyoA78ps1CxgW3hOvcsTsWG8LVo0mLknYoM7Io74R+IidCZqKHeBuj8rQgdyJmwmKA56mWAy+PQyDusVpgcLW0gljaLMCcmmUJdaeN4EEzsoZRtIJU2gDlMDqksA6m0+RX3YsiRd0oayEmbJ3Es9gUBreBaKbVv8L+ogZzOw6d4FQSyJrVzdxrg7j5UMQaxla3TQOxOZwxie8tqG7j2CsaEFApN5tWexKjpZdQJE48i9CdgI7sRk9zInJq+lHDKSScu5qxuF3O0lAGUSifgafSk78iavqFx6kqnJgwgTJDz/oEXwvLJQ5eKDCAmLDnPqAOdD03iST5WcUp1blOwmzqTXTvrsjIx0CXM0WE/OGUWK1V1A5wVRt0PThl1papuoPnH67EGmnnBETPQ/Cum5l/yDYGJYpN4CEwUW0ZrY/apATvzGB978EzLTCN8bjOb/wPjm8oQ4zGMCAAAAABJRU5ErkJgggs=使用本软件前请您仔细阅读以下条款,使用本软件则表明您已知悉并接受这些条款。若您不接受有关条款和条件的约束,请立即删除本软件 +1.软件仅用于技术交流学习使用和个人便捷体验。 +2.软件仅提供批量处理功能,且不对用户数据、操作进行任何保存。 +3.使用软件不会造成封号等情况,如若有此类事情发生,与软件无关。 +4.严禁利用此软件进行商业或违法违规等活动,因使用软件产生的不良后果,均由用户自行承担,本软件及作者概不承担任何法律责任及其他连带的法律责任。 +5.软件保证不含任何病毒,木马,等破坏用户数据的恶意代码,但是由于本软件产品可以通过网络等途径下载、传播, 对于从非指定站点下载的本软件产品无法保证该软件是否感染计算机病毒、是否隐藏有伪装的特洛伊木马程序或者黑客软件,不承担由此引起的直接和间接损害责任。 +6.如果用户自行安装本软件,即表明用户信任软件及作者,自愿选择安装本软件,并接受本协议所有条款。 如果用户不接受本协议,请立即删除 +7.鉴于互联网的特殊性,本软件无法鉴别和判断用户所使用的资源的来源、权属、真伪、等权力属性、自然属性及其他各状况。因此,用户在使用前应加以仔细辨明,并慎重考虑和评估可能产生的各项风险。基于此,用户承诺,用户在本软件所从事的所有活动属于合法的,用户所使用的资源均具有合法正当的来源。 +8.在法律允许的范围内本软件拥有最终解释权。 +一旦发现用于非法用途,本软件将全力配合有关部门予以打击! + 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 \ No newline at end of file diff --git a/AppleBatch_June.FromReg.resx b/AppleBatch_June.FromReg.resx new file mode 100644 index 0000000..aa6c342 --- /dev/null +++ b/AppleBatch_June.FromReg.resx @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +text/microsoft-resx1.3System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABNTeXN0ZW0uRHJhd2luZy5JY29uAgAAAAhJY29uRGF0YQhJY29uU2l6ZQcEAhNTeXN0ZW0uRHJhd2luZy5TaXplAgAAAAIAAAAJAwAAAAX8////E1N5c3RlbS5EcmF3aW5nLlNpemUCAAAABXdpZHRoBmhlaWdodAAACAgCAAAAAAAAAAAAAAAPAwAAAD4IAQACAAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAABABILAAASCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkOAH7ZPgB+2T4Aftk+AH7ZDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2S4Aftk+AH7ZfgB+2X4Aftl+AH7ZfgB+2X4Aftk+AH7ZLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkeAH7ZbgB+2a8AftnfAH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2c8AftmfAH7ZXgB+2R4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkOAH7ZXgB+2a8AftnvAH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8AftluAH7ZHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftleAH7ZzwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8AftleAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkeAH7ZnwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZrwB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftleAH7Z3wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftnfAH7ZXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkeAH7ZnwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8AftkeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7ZzwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZvwB+2R4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZbgB+2e8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2V4Aftn/AH7Z/wB+2f8Aftn/AIvn/wCl//8AqP//AKz//wCw//8As///ALb//wC6//8Av///AMT//wDK//8Azv//ANP//wDX//8A2v//AN3//wDf//8A4v//AOT//wDl//8A5///AOj//wDp//8A6v//AOr//wDq//8A6v//AOn//wDo//8AxvP/AH7Z/wB+2f8Aftn/AH7Z/wCM5/8Apf//AKn//wCs//8AsP//ALP//wC3//8Au///AMD//wDF//8Ay///AND//wDU//8A2P//ANv//wDd//8A4P//AOP//wDl//8A5///AOj//wDp//8A6v//AOv//wDs//8A7P//AOv//wDr//8A6v//AOn//wDn//8A5f//AOP//wDh//8AqOn/AH7Z/wB+2f8Aftn/AH7Z/wCa7v8AsP//ALD//wCn9/8AlOn/AIHb/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8AftkeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZnwB+2f8Aftn/AH7Z/wB+2f8AlvD/AKf//wCr//8Arv//ALL//wC1//8Auf//AL7//wDD//8Ayf//AM7//wDT//8A1///ANv//wDe//8A4P//AOP//wDl//8A6P//AOr//wDr//8A7f//AO7//wDu//8A7///AO///wDu//8A7v//AO3//wCu6f8Aftn/AH7Z/wB+2f8Aftn/AJbw/wCn//8Aq///AK///wCy//8Atv//ALn//wC///8AxP//AMr//wDP//8A1P//ANj//wDb//8A3v//AOH//wDk//8A5v//AOn//wDr//8A7f//AO7//wDv//8A8P//APD//wDw//8A8P//AO///wDu//8A7f//AOv//wDp//8A5///AOX//wDJ9f8Aftn/AH7Z/wB+2f8Aftn/AI7k/wCy//8Asv//ALL//wCx//8Asf//AJ7w/wCL4v8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AH7ZDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftm/AH7Z/wB+2f8Aftn/AH7Z/wCj/P8Aqf//AK3//wCw//8AtP//ALj//wC8//8Awv//AMj//wDN//8A0///ANf//wDb//8A3v//AOH//wDk//8A5///AOn//wDs//8A7v//APD//wDx//8A8v//APP//wDz//8A8///APP//wDy//8A8f//AJri/wB+2f8Aftn/AH7Z/wB+2f8Aofr/AKn//wCt//8Asf//ALT//wC4//8Avf//AMP//wDI//8Azv//ANP//wDY//8A2///AN///wDi//8A5f//AOj//wDq//8A7f//AO///wDx//8A8v//APP//wD0//8A9f//APX//wD0//8A9P//APP//wDx//8A8P//AO3//wDr//8A6P//AOb//wB+2f8Aftn/AH7Z/wB+2f8AhN3/ALP//wCz//8As///ALP//wCz//8As///ALP//wCs+v8Akef/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftnfAH7ZPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8Agt3/AKf//wCr//8Ar///ALL//wC2//8Auv//AMD//wDG//8AzP//ANH//wDW//8A2v//AN7//wDh//8A5P//AOf//wDq//8A7f//APD//wDy//8A9P//APX//wD3//8A9///APj//wD4//8A+P//APf//wD2//8AjN3/AH7Z/wB+2f8Aftn/AH7Z/wCn//8Aq///AK///wCz//8Atv//ALr//wDA//8Axv//AMz//wDS//8A1///ANv//wDe//8A4v//AOX//wDo//8A6///AO7//wDx//8A8///APX//wD3//8A+P//APn//wD5//8A+f//APn//wD4//8A9///APb//wD0//8A8f//AO///wDs//8A6f//AJji/wB+2f8Aftn/AH7Z/wB+2f8Btf//AbX//wG1//8Atf//ALT//wC0//8AtP//ALT//wC0//8Arfr/AJLn/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z/wB+2f8Aftn/AH7Z/wCI4v8Aqf//AK3//wCw//8AtP//ALj//wC9//8Aw///AMn//wDP//8A1f//ANn//wDd//8A4f//AOT//wDo//8A6///AO7//wDx//8A8///APb//wD4//8A+v//APv//wD8//8A/P//APz//wD8//8A+///APr//wB+2f8Aftn/AH7Z/wB+2f8AiOL/AKn//wCt//8Asf//ALT//wC4//8Avf//AMT//wDK//8A0P//ANX//wDZ//8A3f//AOH//wDl//8A6P//AOz//wDv//8A8v//APT//wD3//8A+f//APv//wD8//8A/f//Af7//wH+//8A/f//AP3//wD7//8A+v//APj//wD1//8A8v//APD//wDs//8AmeL/AH7Z/wB+2f8Aftn/AH7Z/wG2//8Btv//Abb//wG2//8Btv//ALb//wC2//8Atv//ALX//wC1//8Atf//AK76/wCL4v8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZzwB+2R4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftn/AH7Z/wB+2f8Aftn/AIji/wCq//8Arv//ALL//wC2//8Auv//AMD//wDG//8AzP//ANP//wDY//8A3P//AN///wDj//8A5///AOv//wDu//8A8f//APT//wD3//8A+v//APz//wH+//8F/v//Cf///wz///8M////Cf///wX+//8B/v//AH7Z/wB+2f8Aftn/AH7Z/wCI4v8Aqv//AK7//wCy//8Atv//ALr//wDA//8Ax///AM3//wDT//8A2P//ANz//wDg//8A5P//AOf//wDr//8A7///APL//wD1//8A+P//APv//wD9//8E/v//Cv///xD///8T////E////xH///8M////Bv7//wH9//8A+///APn//wD2//8A8///APD//wCn5/8Aftn/AH7Z/wB+2f8Aftn/AK33/wG4//8BuP//Abj//wG4//8BuP//Abf//wC3//8At///ALf//wC2//8Atv//ALb//wCk8/8Ahd3/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z7wB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8AiOL/AKv//wCv//8As///ALf//wC8//8Aw///AMn//wDP//8A1f//ANr//wDe//8A4v//AOb//wDq//8A7f//APH//wD1//8A+P//APv//wD9//8H/v//Ef///xn///8e////If///yH///8f////Gv///xL///8Aftn/AH7Z/wB+2f8Aftn/AIji/wCr//8Ar///ALP//wC3//8AvP//AMP//wDJ//8A0P//ANb//wDa//8A3v//AOL//wDm//8A6v//AO7//wDy//8A9f//APj//wD8//8C/v//DP///xb///8e////JP///yf///8n////Jf///yD///8Z////D////wT+//8A/P//APn//wD2//8A8///AKjn/wB+2f8Aftn/AH7Z/wB+2f8Aq/X/Abr//wG6//8Buv//Abn//wG5//8Buf//Abn//wG4//8AuP//ALj//wC4//8At///ALf//wCz/P8Alun/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z/wB+2f8Aftn/AH7Z/wCJ4v8Arf//ALH//wC1//8Auf//AL///wDF//8AzP//ANL//wDY//8A3P//AOD//wDk//8A6P//AOz//wDw//8A9P//APf//wD7//8B/v//Df///xr///8k////LP///zH///80////NP///zL///8t////Jf///wB+2f8Aftn/AH7Z/wB+2f8AieL/AK3//wCx//8Atf//ALn//wC///8Axf//AMz//wDS//8A2P//ANz//wDg//8A5P//AOj//wDs//8A8P//APT//wD4//8A/P//A/7//xD///8e////KP///zH///83////Ov///zr///84////M////yv///8h////Ff///wb+//8A/f//APn//wD1//8Am+L/AH7Z/wB+2f8Aftn/AH7Z/wG8//8BvP//Abz//wG8//8BvP//Abv//wG7//8Bu///Abr//wG6//8Buv//ALn//wC5//8AuP//ALj//wC3//8AqfX/AIHb/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2W4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftn/AH7Z/wB+2f8Aftn/AIni/wCu//8Asv//ALb//wC6//8Awf//AMf//wDO//8A1P//ANn//wDe//8A4v//AOb//wDq//8A7v//APL//wD2//8A+v//Af7//w3///8d////Kv///zX///89////Q////0b///9G////Q////z7///82////A4bb/wB+2f8Aftn/AH7Z/wCA2/8Arv//ALL//wC2//8Auv//AMD//wDH//8Azv//ANT//wDZ//8A3v//AOL//wDm//8A6v//AO///wDz//8A9///APv//wL+//8Q////IP///y7///84////Qv///0j///9M////TP///0n///9E////O////zH///8k////Ff///wX+//8A/P//APj//wCc4v8Aftn/AH7Z/wB+2f8Aftn/Ab///wG///8Bv///Ab///wG+//8Bvv//Ab7//wG9//8Bvf//Abz//wG8//8Bu///Abv//wC6//8Auv//ALn//wC4//8AtPz/AIng/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2Z8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2e8Aftn/AH7Z/wB+2f8AgNv/AK///wCz//8At///ALz//wDC//8Ayf//AND//wDW//8A2///AN///wDj//8A6P//AOz//wDw//8A9f//APn//wD9//8J////G////yv///84////RP///03///9U////WP///1j///9U////Tv///0X///8PnuL/AH7Z/wB+2f8Aftn/AH7Z/wCr/P8Asv//ALf//wC7//8Awv//AMn//wDQ//8A1v//ANr//wDf//8A4///AOj//wDs//8A8P//APX//wD5//8A/f//C////x3///8t////O////0f///9R////Wf///13///9d////Wv///1T///9K////P////zH///8i////EP///wH+//8A+v//AH7Z/wB+2f8Aftn/AH7Z/wCC2/8Bwv//AcH//wHB//8Bwf//AcH//wHB//8BwP//AcD//wHA//8Bv///Ab///wG+//8Bvf//Ab3//wC8//8Au///ALr//wC6//8Auf//AJTn/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2Y8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZvwB+2f8Aftn/AH7Z/wB+2f8Aqfr/ALP//wC4//8Avf//AMT//wDL//8A0f//ANf//wDc//8A4P//AOX//wDp//8A7f//APL//wD2//8A+///Av7//xT///8m////Nv///0X///9R////XP///2P///9o////aP///2T///9d////Uv///yC26f8Aftn/AH7Z/wB+2f8Aftn/AKDz/wCz//8At///AL3//wDD//8Ayv//ANH//wDX//8A3P//AOD//wDk//8A6f//AO3//wDy//8A9v//APv//wP+//8V////J////zj///9H////VP///1////9n////bP///23///9p////Yv///1j///9L////PP///yz///8b////B/7//wDk9/8Aftn/AH7Z/wB+2f8Aftn/AI/i/wHE//8BxP//AcT//wHE//8BxP//AcP//wHD//8Bw///AcL//wHC//8Bwf//AcD//wHA//8Bv///Ab7//wG+//8Avf//ALz//wC7//8Auv//AJ/u/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftmPAH7Z/wB+2f8Aftn/AH7Z/wCe8P8AtP//ALj//wC+//8Axf//AMz//wDS//8A2P//AN3//wDh//8A5v//AOr//wDv//8A8///APf//wD8//8I////HP///y////8/////T////13///9o////cf///3b///92////cv///2n///9e////NM7w/wB+2f8Aftn/AH7Z/wB+2f8Akef/ALT//wC4//8Avv//AMT//wDL//8A0v//ANj//wDc//8A4f//AOX//wDq//8A7v//APP//wD3//8A/P//CP///x3///8v////QP///1D///9f////a////3T///96////e////3f///9u////Yv///1X///9F////NP///yL///8O////AMbu/wB+2f8Aftn/AH7Z/wB+2f8Aouz/Acf//wHH//8Bx///Acb//wHG//8Bxv//Acb//wHF//8Bxf//AcT//wHE//8Bw///AcL//wHC//8Bwf//AcD//wG///8Avv//AL3//wC8//8Au///AKTw/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2U4Aftn/AH7Z/wB+2f8Aftn/AIri/wC0//8Auf//AL///wDG//8AzP//ANP//wDZ//8A3f//AOL//wDm//8A6///AO///wD0//8A+f//AP3//w7///8i////Nf///0b///9X////Zv///3P///99////g////4P///99////dP///2f///9O7vr/AH7Z/wB+2f8Aftn/AH7Z/wCB2/8Asfz/ALj//wC+//8Axf//AMz//wDT//8A2P//AN3//wDh//8A5v//AOv//wDv//8A9P//APj//wD9//8N////Iv///zX///9G////V////2b///90////f////4b///+H////gf///3f///9q////XP///0v///86////KP///xP///8Ajt3/AH7Z/wB+2f8Aftn/AH7Z/wC29f8Byf//Acn//wHJ//8Byf//Acn//wHJ//8ByP//Acj//wHH//8Bx///Acb//wHG//8Bxf//AcT//wHE//8Bw///AcL//wHB//8AwP//AL///wC+//8Avf//AKXw/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z7wB+2S4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8Aftn/AK76/wC5//8Av///AMb//wDN//8A1P//ANn//wDe//8A4v//AOf//wDr//8A8P//APT//wD5//8A/f//Ef///yb///85////Sv///1v///9r////ef///4X///+M////jf///4X///96////bP///13///8PluD/AH7Z/wB+2f8Aftn/AH7Z/wCg8P8AuP//AL7//wDF//8AzP//ANP//wDZ//8A3f//AOL//wDm//8A6///AO///wD0//8A+f//AP3//w////8k////N////0n///9a////av///3n///+F////jv///4////+I////fP///2////9f////Tv///z3///8q////Et71/wB+2f8Aftn/AH7Z/wB+2f8Agtv/Acz//wHM//8BzP//Acz//wHM//8By///Acv//wHL//8Byv//Acr//wHJ//8Byf//Acj//wHI//8Bx///Acb//wHF//8BxP//AcP//wHC//8Awf//AMD//wC///8Avv//AKXw/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z3wB+2Q4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZnwB+2f8Aftn/AH7Z/wB+2f8Ak+f/ALn//wC///8Axv//AM3//wDU//8A2f//AN7//wDi//8A5///AOv//wDw//8A9f//APn//wH+//8S////J////zn///9L////XP///2z///97////h////5D///+Q////h////3z///9t////Xv///zLO8P8Aftn/AH7Z/wB+2f8Aftn/AIXd/wC4//8Avv//AMX//wDM//8A0///ANn//wDd//8A4v//AOb//wDr//8A7///APT//wD5//8A/f//D////yT///83////Sf///1r///9q////ef///4X///+O////j////4j///98////b////1////9O////Pf///yr///8HnuL/AH7Z/wB+2f8Aftn/AH7Z/wCh6f8Bz///Ac///wHP//8Bz///Ac7//wHO//8Bzv//Ac3//wHN//8Bzf//Acz//wHL//8By///Acr//wHJ//8Byf//Acj//wHH//8Bxv//AcX//wHE//8Aw///AMH//wDA//8Av///AJ7s/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZrwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftk+AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Arvf/AL///wDG//8Azf//ANT//wDZ//8A3v//AOL//wDn//8A6///APD//wD0//8A+f//AP3//xD///8l////OP///0n///9a////af///3f///+C////if///4r///+D////eP///2v///9b////Rvb8/wOG2/8Aftn/AH7Z/wB+2f8Aftn/AJvs/wC+//8Axf//AMz//wDT//8A2P//AN3//wDh//8A5v//AOv//wDv//8A9P//APj//wD9//8N////Iv///zT///9G////V////2b///90////f////4b///+H////gf///3f///9q////XP///0v///86////G87w/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AMf6/wHR//8B0f//AdH//wHR//8B0f//AdH//wHQ//8B0P//AdD//wHP//8Bz///Ac7//wHN//8Bzf//Acz//wHL//8Byv//Acn//wHI//8Bx///Acb//wHF//8AxP//AMP//wDB//8AwP//AJbn/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftm/AH7Z/wB+2f8Aftn/AH7Z/wCJ4P8Avv//AMX//wDM//8A0///ANn//wDd//8A4v//AOb//wDr//8A7///APT//wD4//8A/f//DP///yD///8z////RP///1T///9j////b////3n///9+////fv///3n///9w////ZP///1X///9F////HL7s/wB+2f8Aftn/AH7Z/wB+2f8Aftn/ALL3/wDE//8Ay///ANL//wDY//8A3P//AOH//wDl//8A6v//AO7//wDz//8A9///APz//wj///8d////L////0D///9Q////Xv///2v///90////ev///3v///92////bv///2L///9V////Rf///y/u+v8Chtv/AH7Z/wB+2f8Aftn/AH7Z/wCe5/8B1P//AdT//wHU//8B1P//AdT//wHU//8B0///AdP//wHT//8B0v//AdL//wHR//8B0f//AdD//wHP//8Bzv//Ac7//wHN//8BzP//Acv//wHK//8Byf//Acj//wHG//8Axf//AMT//wDC//8Avfz/AIrg/wB+2f8Aftn/AH7Z/wB+2f8AftnvAH7ZDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2T4Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCW5/8AxP//AMv//wDS//8A2P//ANz//wDh//8A5f//AOr//wDu//8A8///APf//wD7//8G/v//Gv///yz///88////S////1n///9k////bP///3H///9x////bf///2X///9a////Tf///z3///8QpuT/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aht3/AL/8/wDK//8A0f//ANf//wDc//8A4P//AOT//wDp//8A7f//APL//wD2//8A+///A/7//xX///8n////OP///0b///9U////X////2f///9s////bf///2n///9i////V////0v///859vz/CZbg/wB+2f8Aftn/AH7Z/wB+2f8Ag9v/AMv6/wHW//8B1v//Adb//wHW//8Ars//AGt//wDI7/8B1v//AdX//wHV//8B1P//AdT//wHT//8B0v//AdL//wHR//8B0P//Ac///wHO//8Bzf//Acz//wHL//8Byv//Acn//wHH//8Axv//AMX//wDD//8Atff/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftmfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2d8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCq8P8Ayv//ANH//wDX//8A2///AOD//wDk//8A6f//AO3//wDx//8A9v//APr//wH+//8Q////Iv///zL///9A////TP///1f///9e////Yv///2L///9e////V////03///9B////Fa7n/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Ai+D/AMT8/wDQ//8A1v//ANr//wDf//8A4///AOj//wDs//8A8P//APX//wD5//8A/f//C////x3///8t////Ov///0f///9R////WP///1z///9d////Wv///1P///9K////Pv///xGm5P8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCr7P8B2P//Adj//wHY//8B2P//Adj//wBRX/8AAAD/AGx//wHX//8B1///Adf//wHW//8B1v//Adb//wHV//8B1P//AdP//wHT//8B0v//AdH//wHQ//8Bz///Ac3//wHM//8By///Acr//wHJ//8Ax///AMb//wDE//8AoOz/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftkuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftk+AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCo7v8Az///ANX//wDa//8A3v//AOP//wDn//8A6///APD//wD0//8A+P//APz//wX+//8W////Jv///zP///8+////R////07///9R////Uf///07///9I////P////xWu5/8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AjOD/AMn8/wDU//8A2f//AN7//wDi//8A5v//AOr//wDv//8A8///APf//wD7//8C/v//EP///yD///8t////OP///0H///9I////S////0z///9J////Q////zj2/P8OnuL/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AleL/Adr//wHa//8B2v//Adr//wHa//8AzO//AAAA/wAAAP8AsM//Adn//wHZ//8B2f//Adj//wHY//8B1///Adf//wHW//8B1v//AdX//wHU//8B0///AdL//wHR//8B0P//Ac///wHN//8BzP//Acv//wDJ//8AyP//AMf//wDF//8Ai+D/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALgAAAB4AAAAAAAAAAAB+2b8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCc5/8Azvz/ANn//wDd//8A4f//AOX//wDq//8A7v//APL//wD1//8A+f//AP3//wj+//8X////JP///y////83////PP///z////8/////Pf///zT2/P8QpuT/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Ag9v/AL31/wDY//8A3P//AOD//wDk//8A6P//AOz//wDw//8A9P//APj//wD8//8D/v//EP///x3///8o////Mf///zb///85////Ov///zj///8q5vf/Bo7d/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AIPb/wDV/P8B2///Adv//wHc//8B3P//Adz//wBgb/8AAAD/ADY//wHb//8B2///Adv//wHa//8B2v//Adr//wHZ//8B2f//Adj//wHY//8B1///Adb//wHW//8B1f//AdP//wHS//8B0f//AdD//wHO//8Bzf//Acz//wDK//8Ayf//AMf//wC09f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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/wBmsP8ABw3/AAAA/wAKD/8AW4//AKP//wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wCc9/8Aku7/AIvn/wCH4v8AgNv/AH7Z/wB+2f8Aftn/AIPd/wCJ4v8Aj+f/AJju/wCl9/8BsP//AbH//wGz//8BtP//Abb//wG3//8ikfv/hBvw/3cV3v9hCr//TQCh/yZhz/8BxP//Acb//wHJ//8By///Ac3//wHP//8B0f//AdL//wHU//8B1v//AMz6/wDC9f8ArOz/AKzs/wCh5/8AleL/AJzk/wCu7P8Ar+z/AMLz/wDV+v8B4v//AeP//wHk//8B5f//AeX//wHm//8B5///Aef//wHo//8A2e//ADo//wBJT/8AoK//Aen//wHp//8B6f//AIOP/wAOD/8AAAD/AJKf/wHp//8B6f//Aen//wHo//8B6P//Aej//wHn//8B5///Aeb//wHl//8B5f//AeT//wHj//8B4v//AeL//wHh//8B4P//Ad///wHe//8B3f//Adz//wHb//8B2v//Adn//wHX//8B1v//ANX//wDT//8A0f//AI3g/wB+2f8Aftn/AH7Z/wB+2f8AftkuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAA/wAXKP8Adsv/AH7Z/wB2y/8AHzb/AAAA/wAAAP8AFB//AGWf/wCY7/8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpf//Aaf//wGo//8Bqv//Aav//wGt//8Brv//Aa///wGx//8Bsv//AbT//wG1//8Bt///Abj//yKS+/+EG/D/dxXe/2EKv/9NAKH/JmLP/wHG//8ByP//Acr//wHM//8Bzv//AdD//wHS//8B1P//Adb//wHX//8B2f//Adr//wHb//8B3P//Ad3//wHe//8B3///AeD//wHh//8B4v//AeP//wHk//8B5f//AeX//wHm//8B5///Aej//wHo//8B6f//Aen//wHq//8B6v//Aer//wHr//8B6///AHV//wAOD/8AAAD/ACwv/wC/z/8B6///Aev//wHr//8B6v//Aer//wHq//8B6f//Aen//wHo//8B6P//Aef//wHm//8B5v//AeX//wHk//8B4///AeL//wHh//8B4P//Ad///wHe//8B3f//Adz//wHb//8B2v//Adn//wHY//8A1v//ANX//wDT//8Ap+z/AH7Z/wB+2f8Aftn/AH7Z/wB+2W4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuAAAA/wAXKP8Adsv/AH7Z/wCH4v8AW4//AAoP/wAAAP8AAAD/AAoP/wBwr/8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGq//8BrP//Aa3//wGv//8BsP//AbL//wGz//8Btf//Abb//wG3//8Buf//IpP7/4Qb8P93Fd7/YQq//00Aof8mY8//Acj//wHK//8BzP//Ac7//wHQ//8B0v//AdT//wHW//8B1///Adn//wHa//8B2///Adz//wHd//8B3///AeD//wHh//8B4v//AeP//wHk//8B5f//AeX//wHm//8B5///Aej//wHp//8B6f//Aer//wHq//8B6///Aev//wHs//8B7P//Aez//wHt//8AWV//AEpP/wCUn/8B7f//Ae3//wHt//8B7f//Aez//wHs//8B7P//Aev//wHr//8B6v//Aer//wHp//8B6f//Aej//wHn//8B5v//Aeb//wHl//8B5P//AeP//wHi//8B4f//AeD//wHf//8B3v//Ad3//wHb//8B2v//Adn//wHY//8A1v//ANX//wC+9f8Aftn/AH7Z/wB+2f8Aftn/AH7ZrwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2V4ARnr/AAAA/wAHDf8AVpX/AJDs/wCj//8AmO//AFuP/wAUH/8AAAD/AGWf/wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpf//Aaf//wGo//8Bqv//Aav//wGt//8Brv//AbD//wGx//8Bs///AbT//wG1//8Bt///Abj//wG6//8ilPv/hBvw/3cV3v9hCr//TQCh/yZkz/8Byv//Acz//wHO//8B0P//AdL//wHU//8B1v//Adf//wHZ//8B2v//Adv//wHc//8B3v//Ad///wHg//8B4f//AeL//wHj//8B5P//AeX//wHm//8B5///Aej//wHp//8B6f//Aer//wHr//8B7P//Aez//wHt//8B7f//Ae3//wHu//8B7v//Ae7//wHv//8B7///Ae///wHv//8B7///Ae///wHu//8B7v//Ae7//wHt//8B7f//Ae3//wHs//8B7P//Aev//wHq//8B6v//Aen//wHo//8B5///Aeb//wHl//8B5P//AeP//wHi//8B4f//AeD//wHf//8B3v//Ad3//wHc//8B2v//Adn//wDY//8A1v//ANX//wB+2f8Aftn/AH7Z/wB+2f8AftnfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZfgB+2f8AVpX/AAcN/wAAAP8AHC3/AFuP/wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGr//8BrP//Aa7//wGv//8BsP//AbL//wGz//8Btf//Abb//wG4//8Buf//Abv//yKV+/+EG/D/dxXe/2EKv/9NAKH/JmXP/wHL//8Bzf//AdD//wHS//8B1P//Adb//wHX//8B2f//Adr//wHb//8B3f//Ad7//wHf//8B4P//AeH//wHj//8B5P//AeX//wHm//8B5///Aej//wHp//8B6f//Aer//wHr//8B7P//Aez//wHt//8B7v//Ae7//wHv//8B7///AfD//wHw//8B8P//AfD//wHw//8B8f//AfH//wHx//8B8P//AfD//wHw//8B8P//Ae///wHv//8B7v//Ae7//wHt//8B7f//Aez//wHr//8B6v//Aer//wHp//8B6P//Aef//wHm//8B5f//AeT//wHj//8B4v//AeD//wHf//8B3v//Ad3//wHc//8B2v//ANn//wDY//8A1v//AI7g/wB+2f8Aftn/AH7Z/wB+2f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftm/AH7Z/wB+2f8Adsv/AD9s/wAUH/8AAAD/AJjv/wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpf//Aaf//wGo//8Bqv//Aav//wGt//8Brv//AbD//wGx//8Bs///AbT//wG2//8Bt///Abn//wG6//8Bvf//Ipb7/4Qb8P93Fd7/YQq//00Aof8mZc//Ac3//wHP//8B0f//AdP//wHW//8B1///Adn//wHa//8B2///Ad3//wHe//8B3///AeD//wHi//8B4///AeT//wHl//8B5v//Aef//wHo//8B6f//Aer//wHr//8B7P//Ae3//wHt//8B7v//Ae///wHv//8B8P//AfD//wHx//8B8f//AfL//wHy//8B8v//AfL//wHy//8B8v//AfL//wHy//8B8v//AfL//wHx//8B8f//AfH//wHw//8B8P//Ae///wHu//8B7f//Ae3//wHs//8B6///Aer//wHp//8B6P//Aef//wHm//8B5f//AeT//wHj//8B4v//AeH//wHf//8B3v//Ad3//wHc//8A2v//ANn//wDX//8AmeT/AH7Z/wB+2f8Aftn/AH7Z/wB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2b8Aftn/AH7Z/wB+2f8Aftn/AKP//wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGq//8BrP//Aa7//wGv//8Bsf//AbL//wG0//8Btf//Abf//wG4//8Buv//Abz//wG+//8il/v/hBvw/3cV3v9hCr//TQCh/yZmz/8Bz///AdH//wHT//8B1f//Adf//wHY//8B2v//Adv//wHc//8B3v//Ad///wHg//8B4v//AeP//wHk//8B5f//Aeb//wHo//8B6f//Aer//wHr//8B7P//Ae3//wHt//8B7v//Ae///wHw//8B8P//AfH//wHy//8B8v//AfP//wHz//8B8///AfT//wH0//8B9P//AfT//wH0//8B9P//AfT//wH0//8B8///AfP//wHz//8B8v//AfL//wHx//8B8f//AfD//wHv//8B7v//Ae7//wHt//8B7P//Aev//wHq//8B6f//Aej//wHn//8B5f//AeT//wHj//8B4v//AeH//wHf//8B3v//Ad3//wDb//8A2v//ANn//wCr7P8Aftn/AH7Z/wB+2f8Aftn/AH7ZPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z/wB+2f8Aftn/AH7Z/wCC3f8Ao///AKP//wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bpf//Aaf//wGo//8Bqv//Aav//wGt//8Brv//AbD//wGx//8Bs///AbT//wG2//8Bt///Abn//wG7//8Bvf//AcD//yKY+/+EG/D/dxXe/2EKv/9NAKH/JmfP/wHQ//8B0v//AdX//wHW//8B2P//Adn//wHb//8B3P//Ad7//wHf//8B4P//AeL//wHj//8B5P//AeX//wHn//8B6P//Aen//wHq//8B6///Aez//wHt//8B7v//Ae///wHw//8B8f//AfH//wHy//8B8///AfP//wH0//8B9P//AfX//wH1//8B9f//Afb//wH2//8B9v//Afb//wH2//8B9v//AfX//wH1//8B9f//AfT//wH0//8B8///AfP//wHy//8B8f//AfH//wHw//8B7///Ae7//wHt//8B7P//Aev//wHq//8B6f//Aej//wHn//8B5v//AeT//wHj//8B4v//AeH//wHf//8B3v//Ad3//wDb//8A2v//ALHu/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftn/AH7Z/wB+2f8Aftn/AIfi/wCj//8Ao///AKP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGq//8BrP//Aa3//wGv//8Bsf//AbL//wG0//8Btf//Abf//wG4//8Buv//Abz//wG///8Bwf//Ipn7/4Qb8P93Fd7/YQq//00Aof8maM//AdL//wHU//8B1v//Adj//wHZ//8B2///Adz//wHd//8B3///AeD//wHi//8B4///AeT//wHm//8B5///Aej//wHp//8B6v//Aez//wHt//8B7v//Ae///wHw//8B8P//AfH//wHy//8B8///AfT//wH0//8B9f//Afb//wH2//8B9v//Aff//wH3//8B9///Aff//wH4//8B+P//Afj//wH3//8B9///Aff//wH2//8B9v//Afb//wH1//8B9P//AfT//wHz//8B8v//AfH//wHx//8B8P//Ae///wHu//8B7f//Aez//wHr//8B6f//Aej//wHn//8B5v//AeT//wHj//8B4v//AeD//wHf//8B3v//ANz//wDb//8AwvX/AH7Z/wB+2f8Aftn/AH7Z/wB+2X4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8Ah+L/AKP//wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bpf//Aab//wGo//8Bqf//Aav//wGt//8Brv//AbD//wGx//8Bs///AbT//wG2//8Bt///Abn//wG7//8Bvf//AcD//wHC//8imvv/hBvw/3cV3v9hCr//TQCh/yZoz/8B0///AdX//wHX//8B2f//Adr//wHc//8B3f//Ad///wHg//8B4f//AeP//wHk//8B5f//Aef//wHo//8B6f//Aev//wHs//8B7f//Ae7//wHv//8B8P//AfH//wHy//8B8///AfT//wH1//8B9f//Afb//wH3//8B9///Afj//wH4//8B+P//Afn//wH5//8B+f//Afn//wH5//8B+f//Afn//wH5//8B+f//Afj//wH4//8B9///Aff//wH2//8B9f//AfX//wH0//8B8///AfL//wHx//8B8P//Ae///wHu//8B7f//Aez//wHr//8B6v//Aej//wHn//8B5v//AeT//wHj//8B4v//AeD//wHf//8A3f//ANz//wDD9f8Aftn/AH7Z/wB+2f8Aftn/AH7ZfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z/wB+2f8Aftn/AH7Z/wCH4v8Ao///AKP//wAoP/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AXX//Abz//wG///8Bwf//AcT//yKb+/+EG/D/dxXe/2EKv/9NAKH/JmnP/wHV//8B1///Adj//wHa//8B2///Ad3//wHe//8B4P//AeH//wHj//8B5P//AeX//wHn//8B6P//Aen//wHr//8Asb//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wH6//8B+v//Afn//wH5//8B+P//Afj//wH3//8B9v//AfX//wH1//8B9P//AfP//wHy//8B8f//AfD//wHu//8B7f//Aez//wHr//8B6v//Aej//wHn//8B5v//AeT//wHj//8B4f//AeD//wDe//8A3f//AMT1/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftn/AH7Z/wB+2f8Aftn/AIfi/wCj//8Ao///ACg//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wBdf/8Bvf//AcD//wHC//8Bxf//Ipz7/4Qb8P93Fd7/YQq//00Aof8mas//Adb//wHY//8B2f//Adv//wHc//8B3v//Ad///wHh//8B4v//AeT//wHl//8B5///Aej//wHp//8B6///Aez//wCyv/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Afz//wH8//8B+///Afv//wH6//8B+f//Afn//wH4//8B9///Afb//wH1//8B9P//AfP//wHy//8B8f//AfD//wHv//8B7f//Aez//wHr//8B6v//Aej//wHn//8B5f//AeT//wHi//8B4f//AOD//wDe//8AxfX/AH7Z/wB+2f8Aftn/AH7Z/wB+2X4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8Ah+L/AKP//wCj//8AKD//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AF5//wG///8Bwf//AcT//wHG//8infv/hBvw/3cV3v9hCr//TQCh/yZrz/8B1///Adj//wHa//8B3P//Ad3//wHf//8B4P//AeL//wHj//8B5f//Aeb//wHo//8B6f//Aer//wHs//8B7f//ALO//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8B/v//Af3//wH9//8B/P//Afz//wH7//8B+v//Afn//wH5//8B+P//Aff//wH2//8B9f//AfT//wHy//8B8f//AfD//wHv//8B7f//Aez//wHr//8B6f//Aej//wHm//8B5f//AeT//wHi//8A4f//AN///wDG9f8Aftn/AH7Z/wB+2f8Aftn/AH7ZfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z/wB+2f8Aftn/AH7Z/wCH4v8Ao///AKP//wBln/8AUX//AFF//wBRf/8AUX//AFF//wBRf/8AUX//AFF//wBRf/8AUn//AFN//wBTf/8AVH//AFV//wBWf/8AV3//AFd//wBYf/8AWX//AFp//wBbf/8AW3//AFx//wBdf/8Ajr//AcD//wHC//8Bxf//Acf//yKe+/+EG/D/dxXe/2EKv/9NAKH/JmvP/wHY//8B2f//Adv//wHd//8B3v//AeD//wHh//8B4///AeT//wHm//8B5///Aen//wHq//8B7P//Ae3//wHu//8A0t//AHh//wB5f/8Aen//AHp//wB7f/8Ae3//AHx//wB8f/8AfX//AH1//wB+f/8Afn//AH9//wB/f/8Bf3//An9//wN/f/8Ef3//BH9//wV/f/8Ff3//BX9//wV/f/8Ff3//BH9//wX///8D////Av7//wH+//8B/f//Af3//wH8//8B+///Afr//wH5//8B+P//Aff//wH2//8B9f//AfT//wHz//8B8f//AfD//wHv//8B7f//Aez//wHq//8B6f//Aej//wHm//8B5f//AeP//wDi//8A4P//AMb1/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftn/AH7Z/wB+2f8Aftn/AIfi/wCj//8Ao///AKP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpv//Aaj//wGp//8Bq///Aaz//wGu//8BsP//AbH//wGz//8BtP//Abb//wG4//8Buf//Abz//wG+//8Bwf//AcP//wHG//8ByP//Ip/7/4Qb8P93Fd7/YQq//00Aof8ma8//Adn//wHa//8B3P//Ad3//wHf//8B4f//AeL//wHk//8B5f//Aef//wHo//8B6v//Aev//wHt//8B7v//AfD//wHx//8B8v//AfT//wH1//8B9v//Aff//wH4//8B+f//Afr//wH7//8B/P//Af3//wH+//8C/v//Bf///wj///8L////Df///w////8Q////Ef///xH///8R////Ef///xD///8P////Df///wv///8I////Bv///wP///8B/v//Af3//wH9//8B/P//Afv//wH6//8B+f//Aff//wH2//8B9f//AfT//wHz//8B8f//AfD//wHu//8B7f//Aez//wHq//8B6f//Aef//wHm//8B5P//AOP//wDh//8Ax/X/AH7Z/wB+2f8Aftn/AH7Z/wB+2X4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8Ah+L/AKP//wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaX//wGm//8BqP//Aar//wGr//8Brf//Aa///wGw//8Bsv//AbP//wG1//8Bt///Abj//wG6//8Bvf//Ab///wHC//8BxP//Acf//wHK//8ioPv/hBvw/3cV3v9hCr//TQCh/yZsz/8B2f//Adv//wHd//8B3v//AeD//wHi//8B4///AeX//wHm//8B6P//Aen//wHr//8B7P//Ae7//wHv//8B8f//AfL//wH0//8B9f//Afb//wH3//8B+f//Afr//wH7//8B/P//Af3//wH+//8C/v//Bv///wr///8N////EP///xP///8V////F////xj///8Z////Gv///xr///8Z////GP///xf///8W////FP///xH///8O////Cv///wf///8D////Af7//wH9//8B/P//Afv//wH6//8B+f//Afj//wH2//8B9f//AfT//wHy//8B8f//AfD//wHu//8B7f//Aev//wHq//8B6P//Aef//wHl//8A5P//AOL//wDI9f8Aftn/AH7Z/wB+2f8Aftn/AH7ZfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z3wB+2f8Aftn/AH7Z/wCA2/8Ao///AKP//wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpf//Aaf//wGp//8Bqv//Aaz//wGt//8Br///AbH//wGy//8BtP//Abb//wG3//8Buf//Abv//wG+//8BwP//AcP//wHF//8ByP//Acv//yKh+/+EG/D/dxXe/2EKv/9NAKH/JmzP/wHa//8B3P//Ad7//wHf//8B4f//AeP//wHk//8B5v//Aef//wHp//8B6v//Aez//wHt//8B7///AfD//wHy//8B8///AfX//wH2//8B9///Afn//wH6//8B+///Afz//wH9//8B/v//Bf///wn///8O////Ev///xX///8Y////G////x3///8f////IP///yH///8i////Iv///yH///8g////H////x3///8b////Gf///xb///8T////D////wr///8G////Av7//wH+//8B/f//Afv//wH6//8B+f//Afj//wH2//8B9f//AfT//wHy//8B8f//Ae///wHu//8B7P//Aev//wHp//8B6P//Aeb//wDk//8A4///ALbu/wB+2f8Aftn/AH7Z/wB+2f8AftleAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftm/AH7Z/wB+2f8Aftn/AH7Z/wCj//8Ao///AKP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGr//8BrP//Aa7//wGw//8Bsf//AbP//wG0//8Btv//Abj//wG5//8BvP//Ab///wHB//8BxP//Acb//wHJ//8BzP//IqH7/4Qb8P93Fd7/YQq//00Aof8mbc//Adv//wHd//8B3v//AeD//wHi//8B4///AeX//wHn//8B6P//Aer//wHr//8B7f//Ae7//wHw//8B8v//AfP//wH0//8B9v//Aff//wH5//8B+v//Afv//wH9//8B/v//Av7//wf///8M////Ef///xb///8Z////HP///yD///8i////JP///yb///8o////KP///yn///8p////Kf///yj///8m////Jf///yP///8g////Hf///xr///8W////Ev///w3///8I////A/7//wH+//8B/f//Afz//wH6//8B+f//Afj//wH2//8B9f//AfP//wHy//8B8P//Ae///wHt//8B7P//Aer//wHp//8B5///AOX//wDk//8AsOz/AH7Z/wB+2f8Aftn/AH7Z/wB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2a8Aftn/AH7Z/wB+2f8Aftn/AJz3/wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8BpP//Aab//wGo//8Bqf//Aav//wGt//8Brv//AbD//wGy//8Bs///AbX//wG3//8BuP//Abr//wG9//8Bv///AcL//wHF//8Bx///Acr//wHN//8iovv/hBvw/3cV3v9hCr//TQCh/yZtz/8B3P//Ad3//wHf//8B4f//AeP//wHk//8B5v//Aej//wHp//8B6///Aez//wHu//8B8P//AfH//wHz//8B9P//Afb//wH3//8B+P//Afr//wH7//8B/f//Af7//wP+//8I////Dv///xT///8Y////HP///yD///8k////J////yr///8s////Lv///y////8w////Mf///zH///8w////L////y7///8s////Kv///yf///8k////If///x3///8Z////FP///w////8J////BP///wH+//8B/f//Afz//wH6//8B+f//Aff//wH2//8B9P//AfP//wHx//8B8P//Ae7//wHt//8B6///Aen//wHo//8A5v//AOX//wCd5P8Aftn/AH7Z/wB+2f8Aftn/AH7ZLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZfgB+2f8Aftn/AH7Z/wB+2f8Al/P/AKP//wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGl//8Bp///Aaj//wGq//8BrP//Aa3//wGv//8BsP//AbL//wG0//8Btf//Abf//wG5//8Bu///Ab7//wHA//8Bw///Acb//wHI//8By///Ac7//yKj+/+EG/D/dxXe/2EKv/9NAKH/Jm3P/wHd//8B3v//AeD//wHi//8B4///AeX//wHn//8B6P//Aer//wHs//8B7f//Ae///wHw//8B8v//AfT//wH1//8B9///Afj//wH6//8B+///Afz//wH+//8D////Cf///w////8V////Gv///x////8j////J////yv///8u////Mf///zP///81////Nv///zf///83////N////zf///82////Nf///zP///8x////Lv///yv///8o////JP///yD///8b////Fv///xD///8K////BP///wH+//8B/f//Afv//wH6//8B+P//Aff//wH1//8B9P//AfL//wHx//8B7///Ae7//wHs//8B6v//AOn//wDn//8A5f//AJHg/wB+2f8Aftn/AH7Z/wB+2f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftlOAH7Z/wB+2f8Aftn/AH7Z/wCQ7P8Ao///AKP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGj//8BpP//AaX//wGn//8Bqf//Aar//wGs//8Brv//Aa///wGx//8Bs///AbT//wG2//8BuP//Abn//wG8//8Bvv//AcH//wHE//8Bxv//Acn//wHM//8Bz///J7D6/5RG5f+COM//aCev/1celv9lVpT/EdLv/wHf//8B4f//AeL//wHk//8B5v//Aef//wHp//8B6///Aez//wHu//8B8P//AfH//wHz//8B9f//Afb//wH4//8B+f//Afv//wH8//8B/v//A/7//wn///8P////Fv///xv///8g////Jf///yr///8u////Mf///zX///83////Of///zv///89////Pv///z7///8+////Pv///z3///87////Of///zf///81////Mv///y////8q////Jv///yH///8c////F////xH///8K////BP///wH+//8B/P//Afv//wH5//8B+P//Afb//wH1//8B8///AfL//wHw//8B7v//Ae3//wHr//8A6f//AOj//wDm//8Aftn/AH7Z/wB+2f8Aftn/AH7ZzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2S4Aftn/AH7Z/wB+2f8Aftn/AIfi/wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGk//8Bpv//Aaf//wGp//8Bq///Aaz//wGu//8BsP//AbH//wGz//8Btf//Abb//wG4//8Buv//Abz//wG///8Bwv//AcX//wHH//8Byv//Ac3//wHP//861/n/0tLS/6+vr/+MjIz/dnZ2/1yTnP9LrLr/AeD//wHh//8B4///AeX//wHm//8B6P//Aer//wHs//8B7f//Ae///wHx//8B8v//AfT//wH1//8B9///Afn//wH6//8B/P//Af3//wL+//8I////D////xb///8b////If///yb///8r////MP///zT///83////Ov///z3///9A////Qv///0P///9F////Rf///0X///9F////RP///0L///9A////Pv///zv///84////Nf///zH///8s////J////yL///8c////F////xD///8J////A/7//wH+//8B/P//Afr//wH5//8B9///Afb//wH0//8B8///AfH//wHv//8B7v//Aez//wDq//8A6f//AM31/wB+2f8Aftn/AH7Z/wB+2f8AftmvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2f8Aftn/AH7Z/wB+2f8AgNv/AKP//wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaT//wGm//8BqP//Aan//wGr//8Brf//Aa7//wGw//8Bsv//AbP//wG1//8Bt///Abj//wG6//8Bvf//AcD//wHD//8Bxf//Acj//wHL//8Bzf//AdD//z/c/f/l5eX/w8PD/6Ghof9+fn7/O6m6/2Sbo/8B4P//AeL//wHk//8B5f//Aef//wHp//8B6///Aez//wHu//8B8P//AfH//wHz//8B9f//Afb//wH4//8B+v//Afv//wH9//8B/v//Bv///w7///8V////G////yH///8n////LP///zH///82////Of///z3///9B////RP///0f///9J////Sv///0v///9M////TP///0z///9L////Sf///0f///9E////Qf///z7///86////Nv///zL///8t////KP///yL///8c////Fv///w////8I////Av7//wH9//8B/P//Afr//wH4//8B9///AfX//wHz//8B8v//AfD//wHu//8B7f//AOv//wDp//8Aue7/AH7Z/wB+2f8Aftn/AH7Z/wB+2X4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZvwB+2f8Aftn/AH7Z/wB+2f8AnPf/AKP//wCj//8Bo///AaP//wGj//8Bo///AaP//wGj//8Bpf//Aab//wGo//8Bqv//Aav//wGt//8Br///AbD//wGy//8BtP//AbX//wG3//8Buf//Abv//wG+//8BwP//AcP//wHG//8Byf//Acv//wHO//8B0f//QN7///b29v/X19f/tLS0/5GRkf89q7z/ZJuj/wHh//8B4///AeT//wHm//8B6P//Aer//wHr//8B7f//Ae///wHx//8B8v//AfT//wH2//8B9///Afn//wH7//8B/P//Af7//wT///8L////E////xr///8g////Jv///yz///8y////N////zv///8/////RP///0f///9K////Tf///0////9R////Uv///1P///9T////Uv///1H///9Q////Tf///0v///9I////RP///0D///88////N////zP///8t////KP///yH///8b////Ff///w3///8F////Af7//wH8//8B+///Afn//wH4//8B9v//AfT//wHz//8B8f//Ae///wHt//8A7P//AOr//wCf5P8Aftn/AH7Z/wB+2f8Aftn/AH7ZPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftl+AH7Z/wB+2f8Aftn/AH7Z/wCS7v8Ao///AKP//wGj//8Bo///AaP//wGj//8Bo///AaP//wGl//8Bp///Aaj//wGq//8BrP//Aa3//wGv//8Bsf//AbL//wG0//8Btv//Abf//wG5//8BvP//Ab7//wHB//8BxP//Acf//wHJ//8BzP//Ac///wHS//9A3////v7+/+rq6v/IyMj/paWl/1aptf9knKT/AeH//wHj//8B5f//Aef//wHp//8B6v//Aez//wHu//8B8P//AfH//wHz//8B9f//Afb//wH4//8B+v//Afv//wH9//8C/v//Cf///xH///8Y////H////yX///8r////Mf///zf///87////QP///0X///9J////Tf///1D///9T////Vv///1f///9Z////Wf///1n///9Z////WP///1b///9U////Uf///07///9K////Rv///0H///89////N////zL///8t////Jv///yD///8Z////Ev///wr///8D/v//Af3//wH8//8B+v//Afj//wH3//8B9f//AfP//wHy//8B8P//AO7//wDs//8A6///AITb/wB+2f8Aftn/AH7Z/wB+2f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2T4Aftn/AH7Z/wB+2f8Aftn/AIfi/wCj//8Ao///AaP//wGj//8Bo///AaP//wGj//8Bo///AaX//wGn//8Bqf//Aar//wGs//8Brv//Aa///wGx//8Bs///AbT//wG2//8BuP//Abr//wG8//8Bv///AcL//wHE//8Bx///Acr//wHN//8B0P//AdL//0Df////////+fn5/9zc3P+5ubn/g56i/0S0w/8B4v//AeT//wHl//8B5///Aen//wHr//8B7f//Ae7//wHw//8B8v//AfT//wH1//8B9///Afn//wH6//8B/P//Af7//wX///8N////Ff///xz///8j////Kv///zD///82////O////0H///9G////S////0////9T////Vv///1n///9c////Xv///1////9f////YP///1////9e////XP///1r///9X////VP///1D///9L////R////0L///88////N////zH///8r////Jf///x7///8X////D////wf///8B/v//Afz//wH7//8B+f//Aff//wH2//8B9P//AfL//wHw//8A7///AO3//wDQ9f8Aftn/AH7Z/wB+2f8Aftn/AH7ZvwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2e8Aftn/AH7Z/wB+2f8Aftn/AKD8/wCj//8Ao///AaP//wGj//8Bo///AaP//wGk//8Bpf//Aaf//wGp//8Bqv//Aaz//wGu//8BsP//AbH//wGz//8Btf//Abb//wG4//8Buv//Ab3//wG///8Bwv//AcX//wHI//8Byv//Ac3//wHQ//8B0///INr//4Dr//9/7P7/deL0/2TT4/+AnKD/Cdv3/wHi//8B5P//Aeb//wHo//8B6v//Aev//wHt//8B7///AfH//wHy//8B9P//Afb//wH4//8B+f//Afv//wH9//8C/v//Cf///xL///8Z////IP///yf///8u////NP///zr///9A////Rv///0v///9Q////VP///1j///9c////X////2L///9k////Zf///2b///9m////Zf///2T///9i////YP///13///9Z////Vf///1H///9M////R////0H///87////Nv///zD///8p////Iv///xr///8T////Cv///wP+//8B/f//Afz//wH6//8B+P//Afb//wH1//8B8///AfH//wDv//8A7f//AK7p/wB+2f8Aftn/AH7Z/wB+2f8AftluAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZnwB+2f8Aftn/AH7Z/wB+2f8AlfD/AKP//wCj//8Bo///AaP//wGj//8Bo///AaT//wGm//8Bp///Aan//wGr//8BrP//Aa7//wGw//8Bsv//AbP//wG1//8Bt///Abj//wG6//8Bvf//AcD//wHD//8Bxf//Acj//wHL//8Bzv//AdH//wHT//8B1v//Adj//wHa//8B3P//PrrN/0a2xf8B4f//AeP//wHl//8B5v//Aej//wHq//8B7P//Ae7//wHv//8B8f//AfP//wH1//8B9///Afj//wH6//8B/P//Af7//wT///8N////Ff///x3///8k////K////zL///84////Pv///0T///9K////UP///1X///9Z////Xv///2H///9l////Z////2n///9r////bP///2z///9r////av///2j///9l////Yv///17///9a////Vv///1H///9L////Rv///z////85////M////y3///8l////Hv///xf///8P////Bv///wH+//8B/P//Afr//wH5//8B9///AfX//wHz//8A8v//APD//wDu//8Ai93/AH7Z/wB+2f8Aftn/AH7Z/wB+2R4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftlOAH7Z/wB+2f8Aftn/AH7Z/wCE4P8Ao///AKP//wGj//8Bo///AaP//wGj//8BpP//Aab//wGo//8Bqf//Aav//wGt//8Brv//AbD//wGy//8Bs///AbX//wG3//8Buf//Abv//wG9//8BwP//AcP//wHG//8Byf//Acv//wHO//8B0f//AdT//wHW//8B2P//Adr//xvN6v+GlJb/Cdr3/wHh//8B4///AeX//wHn//8B6f//Aev//wHs//8B7v//AfD//wHy//8B9P//AfX//wH3//8B+f//Afv//wH9//8B/v//CP///xD///8Z////IP///yj///8v////Nv///zz///9C////Sf///07///9U////Wf///17///9j////Zv///2r///9t////b////3H///9x////cv///3H///9v////bf///2r///9n////Y////1////9a////Vf///0////9K////RP///z3///83////MP///yn///8i////Gv///xL///8J////Av7//wH9//8B+///Afn//wH4//8B9v//AfT//wDy//8A8P//AMvz/wB+2f8Aftn/AH7Z/wB+2f8AftnPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftnvAH7Z/wB+2f8Aftn/AH7Z/wCe+v8Ao///AKP//wGj//8Bo///AaP//wGk//8Bpv//Aaj//wGp//8Bq///Aa3//wGv//8BsP//AbL//wG0//8Btf//Abf//wG5//8Bu///Ab7//wHB//8Bw///Acb//wHJ//8BzP//Ac///wHR//8B1P//Adf//wHY//8B2v//ZKiz/22lrf8B4P//AeL//wHk//8B5f//Aef//wHp//8B6///Ae3//wHv//8B8P//AfL//wH0//8B9v//Afj//wH5//8B+///Af3//wL+//8L////FP///xv///8j////K////zL///84////P////0b///9M////Uv///1j///9d////Y////2f///9r////b////3L///90////dv///3f///93////dv///3X///9y////b////2z///9o////ZP///17///9Z////U////03///9H////QP///zr///8z////LP///yX///8d////Ff///wz///8E////Af3//wH8//8B+v//Afj//wH2//8B9P//APP//wDx//8AqOf/AH7Z/wB+2f8Aftn/AH7Z/wB+2W4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2Z8Aftn/AH7Z/wB+2f8Aftn/AI7p/wCj//8Ao///AaP//wGj//8Bo///AaT//wGm//8BqP//Aar//wGr//8Brf//Aa///wGw//8Bsv//AbT//wG2//8Bt///Abn//wG7//8Bvv//AcH//wHE//8Bx///Acn//wHM//8Bz///E8rx/wHV//8B1///Adn//wHb//+Tk5P/eKKo/wHg//8B4v//AeT//wHm//8B6P//Aen//wHr//8B7f//Ae///wHx//8B8///AfT//wH2//8B+P//Afr//wH8//8B/v//Bf///w3///8W////Hv///yb///8t////Nf///zv///9C////Sf///1D///9W////XP///2H///9m////a////3D///9z////d////3n///97////fP///3z///97////ev///3f///90////cf///2z///9n////Yv///13///9X////Uf///0r///9E////Pf///zb///8v////KP///yD///8Y////D////wb///8B/v//Afz//wH6//8B+P//Aff//wD1//8A8///AOr8/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZPgB+2f8Aftn/AH7Z/wB+2f8AgNv/AKD8/wCj//8Ao///AaP//wGj//8Bpf//Aab//wGo//8Bqv//Aaz//wGt//8Br///AbH//wGy//8BtP//Abb//wG3//8Buf//Abz//wG///8Bwf//AcT//wHH//8Byv//Ac3//wrM+P9wpbD/AdX//wHX//8B2f//Adv//4Oeo/+Wlpb/AeD//wHi//8B5P//Aeb//wHo//8B6v//Aez//wHt//8B7///AfH//wHz//8B9f//Aff//wH4//8B+v//Afz//wH+//8H////EP///xj///8g////KP///zD///83////Pv///0X///9M////Uv///1n///9f////Zf///2r///9v////dP///3j///97////fv///4D///+A////gP///4D///9+////fP///3n///91////cP///2v///9m////YP///1r///9U////Tf///0b///8/////OP///zH///8q////Iv///xr///8R////CP///wH+//8B/P//Afv//wH5//8B9///APX//wDz//8AuOz/AH7Z/wB+2f8Aftn/AH7Z/wB+2a8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZzwB+2f8Aftn/AH7Z/wB+2f8AkOz/AKP//wCj//8Bo///AaP//wGl//8Bpv//Aaj//wGq//8BrP//Aa3//wGv//8Bsf//AbL//wG0//8Btv//Abj//wG5//8BvP//Ab///wHC//8BxP//Acf//wHK//8Bzf//X6y+/0y1y/8B1f//Adf//wHZ//8B2///X7K+/5iYmP8wyt//AeP//wHk//8B5v//Aej//wHq//8B7P//Ae7//wHw//8B8f//AfP//wH1//8B9///Afn//wH7//8B/f//Af7//wj///8S////Gv///yL///8q////Mv///zn///9A////R////07///9V////W////2L///9n////bf///3L///93////fP///3////+B////g////4T///+F////hP///4L///9/////fP///3j///9z////bv///2n///9j////Xf///1b///9P////Sf///0H///86////M////yz///8k////HP///xP///8K////Av7//wH9//8B+///Afn//wD3//8A9f//AOz8/wCF2/8Aftn/AH7Z/wB+2f8Aftn/AH7ZTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftleAH7Z/wB+2f8Aftn/AH7Z/wCC3f8Ao///AKP//wCj//8Bo///AaX//wGn//8BqP//Aar//wGs//8Brf//Aa///wGx//8Bs///AbT//wG2//8BuP//Abr//wG8//8Bv///AcL//wHF//8Bx///Acr//wHN//+QnaD/J8Xl/wHW//8B2P//Adn//wHb//8nzOX/m5ub/2G1wP8B4///AeX//wHn//8B6P//Aer//wHs//8B7v//AfD//wHy//8B9P//AfX//wH3//8B+f//Afv//wH9//8C/v//Cv///xP///8c////JP///yz///80////Ov///0L///9J////UP///1f///9e////ZP///2r///9w////df///3r///9+////gv///4X///+H////if///4n///+I////hf///4L///9/////e////3b///9x////a////2X///9f////WP///1L///9L////Q////zz///81////Lf///yX///8d////Ff///wz///8D////Af3//wH7//8B+f//APj//wD2//8Auez/AH7Z/wB+2f8Aftn/AH7Z/wB+2d8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftnvAH7Z/wB+2f8Aftn/AH7Z/wCQ7P8Ao///AKP//wGj//8Bpf//Aaf//wGo//8Bqv//Aaz//wGu//8Br///AbH//wGz//8BtP//Abb//wG4//8Buv//Abz//wG///8Bwv//AcX//wHI//8Byv//HsTs/5ycnP8Kz/j/Adb//wHY//8B2v//Adv//wHd//+AqrD/lKKj/wrf+f8B5f//Aef//wHp//8B6v//Aez//wHu//8B8P//AfL//wH0//8B9v//Aff//wH5//8B+///Af3//wL///8L////FP///x3///8l////Lf///zX///88////Q////0v///9S////Wf///1////9m////bP///3L///93////fP///4D///+E////iP///4v///+M////jP///4v///+J////hf///4H///9+////eP///3P///9t////Z////2D///9a////U////0z///9F////Pf///zb///8v////J////x7///8W////Df///wT///8B/f//Afz//wD6//8A+P//AO78/wCF2/8Aftn/AH7Z/wB+2f8Aftn/AH7ZbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2X4Aftn/AH7Z/wB+2f8Aftn/AIDb/wCg/P8Ao///AKP//wGl//8Bp///Aaj//wGq//8BrP//Aa7//wGv//8Bsf//AbP//wG0//8Btv//Abj//wG6//8BvP//Ab///wHC//8Bxf//Acj//wHK//8oweb/np6e/wHT//8B1v//Adj//wHa//8B3P//Pcbc/1DAz/+goKD/PMrb/wHl//8B5///Aen//wHr//8B7P//Ae7//wHw//8B8v//AfT//wH2//8B+P//Afn//wH7//8B/f//A////wz///8V////Hf///yb///8u////Nf///z3///9E////TP///1P///9a////YP///2f///9t////c////3n///9+////gv///4f///+K////jf///4////+Q////jv///4v///+H////g////3////96////dP///27///9o////Yv///1v///9U////Tf///0b///8+////N////y////8n////H////xf///8O////BP///wH+//8B/P//APr//wD4//8Auuz/AH7Z/wB+2f8Aftn/AH7Z/wB+2e8AftkOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZDgB+2e8Aftn/AH7Z/wB+2f8Aftn/AJDs/wCj//8Ao///AaX//wGn//8BqP//Aar//wGs//8Brv//Aa///wGx//8Bs///AbX//wG2//8BuP//Abr//wG8//8Bv///AcL//wHF//8ByP//Acv//1G30P+Mp6z/AdP//wHW//8B2P//Adr//wHc//9xtcD/C9v5/3C2v/9mu8X/AeX//wHn//8B6f//Aev//wHs//8B7v//AfD//wHy//8B9P//Afb//wH4//8B+v//Afv//wH9//8D////DP///xb///8e////Jv///y////82////Pf///0X///9M////U////1r///9h////Z////27///90////ef///3////+D////iP///4z///+P////kv///5L///+Q////jP///4j///+E////f////3r///91////b////2n///9i////XP///1X///9N////Rv///z////83////MP///yj///8g////F////w7///8F////Af7//wD8//8A+v//APD8/wCF2/8Aftn/AH7Z/wB+2f8Aftn/AH7ZfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZfgB+2f8Aftn/AH7Z/wB+2f8Aftn/AJ76/wCj//8Apf//Aaf//wGo//8Bqv//Aaz//wGu//8Br///AbH//wGz//8Btf//Abb//wG4//8Buv//Abz//wG///8Bwv//AcX//wHI//8By///UrjR/3quuv8B0///Adb//wHY//8B2v//Adz//3yzvP8B3///Psrd/5CtsP8B5f//Aef//wHp//8B6///Aez//wHu//8B8P//AfL//wH0//8B9v//Afj//wH6//8B/P//Af3//wP///8M////Fv///x7///8m////L////zb///89////Rf///0z///9T////Wv///2H///9n////bv///3T///96////f////4P///+I////jP///4////+S////kv///5D///+N////iP///4T///+A////e////3X///9v////af///2L///9c////Vf///03///9G////P////zf///8w////KP///yD///8X////Dv///wX///8B/v//APz//wD6//8ArOf/AH7Z/wB+2f8Aftn/AH7Z/wB+2d8AftkOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7Z3wB+2f8Aftn/AH7Z/wB+2f8Ah+L/AKP//wCl//8Bp///Aaj//wGq//8BrP//Aa7//wGv//8Bsf//AbP//wG0//8Btv//Abj//wG6//8BvP//Ab///wHC//8Bxf//Acj//wHL//9TudL/fLC7/wHT//8B1v//Adj//wHa//8B3P//frW+/wHf//8g1u7/p6en/wHl//8B5///Aen//wHr//8B7P//Ae7//wHw//8B8v//AfT//wH2//8B+P//Afr//wH7//8B/f//A////wz///8V////Hv///yb///8u////Nv///z3///9E////TP///1P///9a////YP///2f///9t////c////3n///9+////gv///4f///+L////jv///5D///+Q////jv///4v///+I////g////3////96////dP///27///9o////Yv///1v///9U////Tf///0b///8+////N////zD///8o////H////xf///8O////Bf///wD+//8A/P//ANv1/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftlOAH7Z/wB+2f8Aftn/AH7Z/wB+2f8AlfD/AKX//wCn//8BqP//Aar//wGs//8Brv//Aa///wGx//8Bs///AbT//wG2//8BuP//Abr//wG8//8Bv///AcL//wHF//8ByP//Acr//1S60/+Ir7f/AdP//wHW//8B2P//Adr//wHb//91usX/INXv/yDW7/9qv8n/AeX//wHn//8B6f//Aer//wHs//8B7v//AfD//wHy//8B9P//Afb//wH4//8B+f//Afv//wH9//8D////C////xX///8d////Jf///y3///81////PP///0P///9L////Uv///1n///9g////Zv///2z///9y////eP///33///+B////hf///4j///+L////jf///43///+M////if///4X///+B////fv///3n///9z////bf///2f///9h////Wv///1P///9M////Rf///z3///82////L////yf///8e////Fv///w3///8E////AP3//wD8//8Ajd3/AH7Z/wB+2f8Aftn/AH7Z/wB+2c8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftm/AH7Z/wB+2f8Aftn/AH7Z/wCA2/8AoPr/AKf//wCo//8Bqv//Aaz//wGt//8Br///AbH//wGz//8BtP//Abb//wG4//8Buv//Abz//wG///8Bwv//AcX//wHH//8Byv//VbvU/6mpqf8B0///Atb//wLY//8C2v//Adv//0HL4P9Xxtb/YcPQ/wvf+f8B5f//Aef//wHo//8B6v//Aez//wHu//8B8P//AfL//wH0//8B9f//Aff//wH5//8B+///Af3//wL+//8K////FP///xz///8k////LP///zT///87////Qv///0n///9Q////V////17///9k////av///3D///92////ev///3////+C////hf///4j///+J////if///4j///+G////g////4D///97////dv///3H///9r////Zf///1////9Z////Uv///0v///9D////PP///zX///8u////Jv///x3///8V////DP///wL///8A/f//ALXp/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2R4AftnvAH7Z/wB+2f8Aftn/AH7Z/wCH4v8Apv//AKj//wGq//8BrP//Aa3//wGv//8Bsf//AbP//wG0//8Btv//Abj//wG6//8BvP//Ab///wHC//8BxP//Acj//wTL//9Ewd//q6ur/xbS+f8N2P//Dtn//w3b//8g1/T/W8bW/66urv9Oy9v/AeP//wHk//8B5v//Aej//wHq//8B7P//Ae7//wHw//8B8f//AfP//wH1//8B9///Afn//wH7//8B/f//Af7//wn///8S////Gv///yP///8r////Mv///zn///9A////SP///0////9V////XP///2L///9o////bv///3P///94////fP///3////+C////hP///4X///+F////hP///4L///+A////ff///3j///90////b////2n///9j////Xf///1f///9Q////Sf///0L///86////NP///yz///8k////HP///xT///8K////Af7//wDd9f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2Y8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2W4Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCS7P8AqP//AKr//wGs//8Brf//Aa///wGx//8Bsv//AbT//wG2//8BuP//Abn//wG8//8Bv///AsL//wXG//8Lyv//D83//yfM9P+tra3/Ps3q/xrZ//8b3P//Gt3//yzZ9f8+1Ov/T8/i/3TEz/8L5P//BuX//wHm//8B6P//Aer//wHs//8B7f//Ae///wHx//8B8///AfX//wH3//8B+f//Afr//wH8//8B/v//B////xD///8Z////If///yn///8w////N////z7///9F////TP///1P///9Z////X////2X///9r////cP///3T///95////fP///3////+A////gf///4H///+A////f////33///95////df///3D///9s////Zv///2D///9a////VP///07///9H////QP///zj///8y////Kv///yL///8a////Ev///wf///8A9vz/AIbb/wB+2f8Aftn/AH7Z/wB+2f8AftnfAH7ZDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2b8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCe9f8Aqv//AKv//wGt//8Br///AbH//wGy//8BtP//Abb//wG3//8Buf//Abz//wTA//8LxP//Ecj//xbM//8b0P//INP//5W3vv9zwtL/J9z//yje//8n3///JuD//yPh//8g4///orq9/1HT4/8R5v//C+f//wTo//8B6f//Aev//wHt//8B7///AfH//wHz//8B9f//Afb//wH4//8B+v//Afz//wH+//8F////Dv///xf///8f////Jv///y7///81////PP///0P///9K////UP///1b///9c////Yv///2f///9s////cf///3T///93////ev///3z///99////ff///3z///96////eP///3X///9x////bf///2j///9j////Xf///1f///9R////S////0T///89////Nv///y////8o////IP///xj///8P////Bf///wCe4v8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZHgB+2e8Aftn/AH7Z/wB+2f8Aftn/AIDb/wCk+v8Aq///AK3//wGv//8BsP//AbL//wG0//8Btf//Abf//wG5//8Hvf//D8L//xbH//8cy///Is///yfS//8r1f//YMri/5q5wP803f//NN///zPh//8y4v//MOP//y3k//+Uwsj/kcLJ/x3n//8X6P//D+n//wfq//8B6///Ae3//wHv//8B8P//AfL//wH0//8B9v//Afj//wH6//8B+///Af3//wP///8L////FP///xz///8k////K////zP///85////QP///0f///9N////U////1n///9e////Y////2j///9s////cP///3P///91////d////3j///94////d////3b///9z////cP///23///9p////ZP///1////9a////VP///07///9I////Qf///zr///80////Lf///yX///8d////Ff///wz///8Ctun/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftmPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZTgB+2f8Aftn/AH7Z/wB+2f8Aftn/AIbg/wCo/P8Arf//AK7//wGw//8Bsv//AbT//wG1//8Ct///CLv//xHA//8Zxf//IMn//yfN/v8u0f//M9T//zjY//9D2Pr/rba4/1bX8f9B4f//QOL//z/k//885f//OeX//7C7vf+5ubn/Kej//yLp//8a6f//Eur//wjr//8B7P//Ae7//wHw//8B8v//AfT//wH1//8B9///Afn//wH7//8B/f//Af7//wj///8R////Gf///yH///8o////MP///zb///88////Q////0n///9P////Vf///1r///9f////Y////2f///9r////bv///3D///9x////cv///3L///9y////cP///27///9r////aP///2T///9g////W////1b///9Q////Sv///0T///8+////N////zH///8q////Iv///xr///8S////Bs7w/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZjwB+2f8Aftn/AH7Z/wB+2f8Aftn/AIbg/wCs//8Arv//ALD//wGy//8Bs///AbX//wi5//8Rvv//GsL//yPH//8rzP7/MtD+/znT//8/1///RNr+/0jd/v+HyNX/jsbR/07j/v9O5P7/TOX+/0nm/v9U4fb/u7u7/5rGzP806f//Len//yXq//8c6///Euz//wjt//8B7v//AfD//wHx//8B8///AfX//wH3//8B+f//Afr//wH8//8B/v//Bf///w3///8W////Hf///yX///8s////M////zn///8/////Rf///0v///9Q////Vv///1r///9e////Yv///2X///9o////av///2z///9t////bf///2z///9r////af///2b///9j////X////1v///9W////Uf///0z///9G////QP///zr///80////Lf///yb///8f////Fv///wrW8/8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2e8AftkeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZzwB+2f8Aftn/AH7Z/wB+2f8Aftn/AI/n/wCu//8AsP//ALH//wGz//8Ht///Ebz//xvA//8kxf//Lcn+/zXO/v880v//RNb+/0rZ/v9R3P7/Vd/+/2Xc9f+4uLj/Zt/1/1vm/v9Z5/7/Vuj+/4HV4f+9vb3/edbi/z7q//836v//L+v//ybr//8c7P//Eu3//wfu//8B7///AfH//wHz//8B9P//Afb//wH4//8B+v//Afv//wH9//8C/v//Cv///xL///8a////If///yj///8v////Nf///zv///9B////Rv///0z///9R////Vf///1n///9d////YP///2P///9l////Zv///2f///9n////Zv///2X///9j////Yf///17///9a////Vv///1L///9N////R////0L///88////Nv///zD///8p////Iv///xr///8Q5vf/AYbb/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkOAH7ZzwB+2f8Aftn/AH7Z/wB+2f8Aftn/AJDn/wCv//8Asf//BLT//w+5//8Zvv//I8P//y3H/v82zP7/P9D+/0fU/v9Q2P7/Vtv+/13e/v9i4f7/ZuP+/6HIz/+gyND/aOj+/2bp/v9j6f7/rcfL/7nCw/9Z6Pr/Suv+/0Lr//846///L+z//yXs//8a7f//D+7//wTv//8B8P//AfL//wH0//8B9f//Aff//wH5//8B+///Afz//wH+//8G////Dv///xb///8d////JP///yv///8x////N////zz///9C////R////0v///9Q////VP///1f///9a////Xf///1////9g////Yf///2H///9g////X////13///9b////WP///1X///9R////TP///0j///9C////Pf///zj///8y////LP///yX///8d////E+b3/wGG2/8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AJDn/wCx//8Cs///FLv//yDA//8rxf7/Ncn+/z/O/v9I0v7/Utb+/1ra/v9j3v7/aeH+/27j/v9z5v7/jNrp/7y8vP+P2eX/dOr+/3/j8v/BwcH/jdnj/1zr/v9V6/7/TOz+/0Ls//847P//Le3//yPt//8X7v//C+///wHw//8B8f//AfP//wH1//8B9v//Afj//wH6//8B/P//Af3//wL+//8J////Ev///xn///8f////Jv///yz///8y////N////zz///9B////Rv///0r///9O////Uv///1T///9X////WP///1r///9a////Wv///1r///9Z////V////1X///9S////T////0v///9H////Qv///z3///84////M////y3///8n////IP///xXm9/8Bhtv/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftmfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AJHn/wCy//8Ftv//JcH+/zLH/v89y/7/SND+/1LV/v9c2f7/Zt3+/27g/v914/7/e+X+/3/n/v+C6f7/t8TG/7rBw/+D6fr/pNXd/7rJy/9w7f7/aOz+/1/s/v9V7P7/S+z+/0Dt//817f//Ku3//x/u//8S7v//Be///wHx//8B8v//AfT//wH2//8B9///Afn//wH7//8B/P//Af7//wX///8M////FP///xv///8h////J////y3///8z////N////zz///9A////Rf///0j///9L////Tv///1D///9S////U////1T///9U////U////1L///9R////Tv///0z///9J////Rf///0H///89////OP///zP///8u////KP///yH///8W5vf/AYbb/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZnwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AIfg/wCw/P8Dtv7/L8b+/0XN/v9R0v7/W9f+/2bb/v9w3/7/eeL+/4Dl/v+H5/7/jOr+/4/r/v+v0df/wcHB/6zS2P+30NT/p9fe/3vu/v9y7f7/ae3+/1/t/v9T7f7/Se3+/z3t//8x7f//Je7//xju//8L7///AfD//wHy//8B8///AfX//wH3//8B+P//Afr//wH7//8B/f//Af7//wf///8P////Fv///xz///8i////KP///y3///8y////N////zr///8+////Qv///0X///9I////Sv///0v///9N////Tf///03///9N////TP///0r///9I////Rv///0L///8/////O////zf///8z////Lv///yj///8i////Es7w/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2Z8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AIjg/wCr9/8EuP7/MMf+/1jU/v9k2f7/b93+/3nh/v+D5P7/jOf+/5Pq/v+Z7P7/nO7+/7DY4P/Dw8P/w8PD/8jIyP+b5fD/he/+/3zu/v9y7v7/Z+7+/1zu/v9P7f7/RO3//zft//8r7v//Hu7//xHv//8E7///AfH//wHy//8B9P//Afb//wH3//8B+f//Afr//wH8//8B/f//Av7//wn///8Q////F////xz///8i////J////yz///8x////Nf///zj///87////Pv///0H///9D////Rf///0b///9G////Rv///0b///9F////Q////0H///8/////PP///zn///82////Mv///y3///8n////Iv///w++7P8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftmfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AIHb/wCk8/8AuP//KcX+/2za/v933v7/guP+/43m/v+X6f7/n+z+/6bu/v+q8P7/uNvi/8XFxf/FxcX/ycnJ/5nx//+P8P//he/+/3rv/v9u7v7/Y+7+/1bu/v9K7f7/Pe3//zDt//8j7v//Fu7//wjv//8B8P//AfH//wHz//8B9f//Afb//wH4//8B+f//Afv//wH8//8B/v//A////wr///8R////F////xz///8h////Jv///yv///8v////M////zX///84////Ov///zz///8+////P////z////8/////P////z7///88////O////zj///82////M////y////8r////Jv///x/2/P8JpuT/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7ZnwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7Z7wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCa7P8Auf//FcH+/2fZ/v+K5P7/l+j+/6Hr/v+r7v7/s/D+/7jy///A3eP/x8fH/8fHx//Gz9D/rOjy/5nx//+N8P//ge/+/3Xv/v9p7v7/XO7+/0/t/v9C7f//NO3//yft//8a7v//DO7//wHv//8B8f//AfL//wH0//8B9f//Aff//wH4//8B+v//Afv//wH9//8B/v//BP///wr///8R////Fv///xv///8g////JP///yj///8s////L////zL///80////Nv///zf///84////OP///zj///84////N////zb///80////Mv///zD///8s////KP///yT///8a5vf/BZbg/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2Z8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkuAH7ZzwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCJ4P8As/r/CL/+/1LV/v+f6v7/rO3+/7fw/v/A8///xvT//8jf5P/Jycn/ycnJ/8HZ3f/G19r/seTt/5Xx//+I8P//e+/+/27u/v9h7v7/U+3+/0bt//847f//K+3//x3t//8P7v//Au7//wHw//8B8f//AfP//wH0//8B9v//Aff//wH5//8B+v//Afv//wH9//8B/v//BP///wn///8P////Ff///xn///8d////If///yX///8o////K////y3///8v////MP///zH///8y////Mv///zH///8w////L////y3///8r////KP///yX///8h////Ecbu/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftl+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkOAH7ZvwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wCB2/8Aoe7/AL///x/J/v+H5P7/wfL//8z1///U9///zdbX/8vLy//Ly8v/x9jb/7fy/P/C3eH/vNzh/5nq9v9/7/7/cu7+/2Xu/v9W7f7/Se3+/zvt//8t7P//IO3//xHt//8E7f//Ae///wHw//8B8v//AfP//wH1//8B9v//Afj//wH5//8B+v//Afz//wH9//8B/v//A////wj///8N////Ev///xf///8a////Hv///yH///8j////Jv///yf///8p////Kv///yr///8q////Kv///yn///8o////Jv///yP///8g////Gu76/wee4v8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AftnvAH7ZXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7ZjwB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8AiuD/ALT3/wDD//9L1///u/H//+H5///P0tP/zMzM/83Nzf/J4eb/u/X//63z//+f8v//kfD//4Lv/v917v7/Z+3+/1nt/v9L7P7/Pez//y/s//8i7P//E+z//wXt//8B7v//Ae///wHx//8B8v//AfT//wH1//8B9v//Afj//wH5//8B+v//Afv//wH9//8B/v//Av7//wb///8K////D////xP///8X////Gf///xz///8e////IP///yH///8i////I////yP///8i////If///yD///8e////G////w2+7P8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z3wB+2S4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0Z/R0dH/0dHR7wAAAAAAAAAAAAAAAAAAAAAAftkuAH7ZjwB+2d8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2a8AftleAH7ZDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHR79HR0f/R0dGPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2R4AftleAH7ZnwB+2d8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftm/AH7ZfgB+2T4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0S7R0dH/0dHR/9HR0S4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+2Q4Aftk+AH7ZfgB+2Z8Aftm/AH7Z3wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2f8Aftn/AH7Z/wB+2b8Aftm/AH7ZfgB+2V4AftkuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHRXtHR0f/R0dHfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAftkOAH7ZPgB+2T4Aftk+AH7ZPgB+2T4AftkuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR0dF+0dHR/9HR0Z8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0b/R0dH/0dHRXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHRv9HR0f/R0dE+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR0dG/0dHR/9HR0Q4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0Y/R0dH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHRPtHR0f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0dHRv9HR0S4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR0dEu0dHRbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR0dGv0dHRXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0T7R0dH/0dHRj9HR0Q4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0Y/R0dH/0dHR39HR0V4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0U7R0dHP0dHR/9HR0d/R0dFeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////4P///+AP/////////////AAH//4AAP////////////AAAf/4AAA////////////AAAB/4AAAD///////////AAAAH8AAAAf//////////gAAAA8AAAAB//////////wAAAAGAAAAAP/////////4AAAAAAAAAAB/////////8AAAAAAAAAAAP////////+AAAAAAAAAAAD/////////AAAAAAAAAAAAP////////wAAAAAAAAAAAAP///////4AAAAAAAAAAAAAf//////+AAAAAAAAAAAAAA///////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAAP/////4AAAAAAAAAAAAAAA/////+AAAAAAAAAAAAAAAD/////gAAAAAAAAAAAAAAAP////4AAAAAAAAAAAAAAAB////+AAAAAAAAAAAAAAAAP////gAAAAAAAAAAAAAAAA////4AAAAAAAAAAAAAAAAH///+AAAAAAAAAAAAAAAAA////gAAAAAAAAAAAAAAAAH///4AAAAAAAAAAAAAAAAA///+AAAAAAAAAAAAAAAAAH///gAAAAAAAAAAAAAAAAA///4AAAAAAAAAAAAAAAAAH//+AAAAAAAAAAAAAAAAAA///wAAAAAAAAAAAAAAAAAH//8AAAAAAAAAAAAAAAAAB///AAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//+AAAAAAAAAAAAAAAAAAf//wAAAAAAAAAAAAAAAAAD//4AAAAAAAAAAAAAAAAAA//mAAAAAAAAAAAAAAAAAAH/xAAAAAAAAAAAAAAAAAAB/8AAAAAAAAAAAAAAAAAAAP/gAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAA/5AAAAAAAAAAAAAAAAAAAH+QAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAAAAAAAAAAD/gAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAAAAAAAAAAD/wAAAAAAAAAAAAAAAAAAA/8AAAAAAAAAAAAAAAAAAAP/AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAAAB/+AAAAAAAAAAAAAAAAAAAf/gAAAAAAAAAAAAAAAAAAH/4AAAAAAAAAAAAAAAAAAD//AAAAAAAAAAAAAAAAAAA//wAAAAAAAAAAAAAAAAAAP/8AAAAAAAAAAAAAAAAAAH//gAAAAAAAAAAAAAAAAAB//4AAAAAAAAAAAAAAAAAA///AAAAAAAAAAAAAAAAAAP//wAAAAAAAAAAAAAAAAAD//8AAAAAAAAAAAAAAAAAB///gAAAAAAAAAAAAAAAAAf//8AAAAAAAAAAAAAAAAAP///AAAAAAAAAAAAAAAAAH///4AAAAAAAAAAAAAAAAB///+AAAAAAAAAAAAAAAAA////wAAAAAAAAAAAAAAAAP///+AAAAAAAAAAAAAAAAH////gAAAAAAAAAAAAAAAD////8AAAAAAAAAAAAAAAB/////gAAAAAAAAAAAAAAAf////8AAAAAAAAAAAAAAAP/////AAAAAAAAAAAAAAAH/////4AAAAAAAAAAAAAAD//////AAAAAAAAAAAAAAB//////4AAAAAAAAAAAAAA///////AAAAAAAAAAAAAAf//////4AAAAAAAAAAAAAP///////AAAAAAAAAAAAAH///////4AAAAAAAAAAAAD////////AAAAAAAAAAAAB////////8AAAAAAAAAAAA/////////gAAAAAAAAAAAf////////8AAAAAAAAAAAf/////////wAAAAAAAAAAP/////////+AAAAAAAAAAP//////////4AAAAAAAAAH///////////gAAAAAAAAH///////////+AAAAAAAAH////////////gAAAAAAAH////////////4AAAAAAAP////////////+PAAAAAAP/////////////j+AAAAA//////////////w/+AAAD//////////////8f//4D////////////////H////////////////////x////////////////////8f////////////////////H////////////////////z////////////////////8/////////////////////n////////////////////5/////////////////////P////////////////////w////////////////////+H////////////////////wf////////////8L \ No newline at end of file diff --git a/AppleBatch_June.Interfaces/IAccountDisabled.cs b/AppleBatch_June.Interfaces/IAccountDisabled.cs new file mode 100644 index 0000000..ed3c797 --- /dev/null +++ b/AppleBatch_June.Interfaces/IAccountDisabled.cs @@ -0,0 +1,7 @@ +namespace AppleBatch_June.Interfaces +{ + public interface IAccountDisabled + { + bool accountCheck(string account, string pwd, string notityKey); + } +} diff --git a/AppleBatch_June.Interfaces/WebAccountDisabled.cs b/AppleBatch_June.Interfaces/WebAccountDisabled.cs new file mode 100644 index 0000000..74e2f62 --- /dev/null +++ b/AppleBatch_June.Interfaces/WebAccountDisabled.cs @@ -0,0 +1,43 @@ +using System; +using AppleBatch_June.AppleWebServace; +using AppleBatch_June.ExecuteTasks; +using AppleBatch_June.Model; +using AppleBatch_June.Utils; + +namespace AppleBatch_June.Interfaces +{ + public class WebAccountDisabled : IAccountDisabled + { + private Action action; + + private Action applyAtion; + + private bool _openVpn; + + public ITaskRunState taskState; + + public WebAccountDisabled(bool openVpn, Action _action, Action _applyAtion, ITaskRunState _taskState) + { + taskState = _taskState ?? throw new Exception("任务运行状态不能是空的"); + _openVpn = openVpn; + action = _action; + applyAtion = _applyAtion; + } + + public bool accountCheck(string account, string pwd, string notityKey) + { + if (AppSysConfig.webProtocolS2k) + { + return new AppleReportaproblemWeb(_openVpn, action, applyAtion, taskState) + { + ProxyIp = ProxyAccountCache.getProxyAccountIP(account) + }.checkDisable(account, pwd, notityKey); + } + AppleManageWebUtlis appleManageWebUtlis = new AppleManageWebUtlis(action, applyAtion, taskState); + appleManageWebUtlis.ProxyIp = ProxyAccountCache.getProxyAccountIP(account); + bool result = appleManageWebUtlis.checkDisable(_openVpn, account, pwd, notityKey); + appleManageWebUtlis.reportSingOut(); + return result; + } + } +} diff --git a/AppleBatch_June.Interfaces/iTunesAccountDisabled.cs b/AppleBatch_June.Interfaces/iTunesAccountDisabled.cs new file mode 100644 index 0000000..f240b73 --- /dev/null +++ b/AppleBatch_June.Interfaces/iTunesAccountDisabled.cs @@ -0,0 +1,61 @@ +using System; +using AppleBatch_June.ExecuteTasks; +using AppleBatch_June.Model; +using AppleBatch_June.Utils; + +namespace AppleBatch_June.Interfaces +{ + public class iTunesAccountDisabled : IAccountDisabled + { + private Action action; + + private Action applyAtion; + + public ITaskRunState taskState; + + private bool openVpn { get; set; } + + public iTunesAccountDisabled(bool _openVpn, Action _action, Action _applyAtion, ITaskRunState _taskState) + { + taskState = _taskState ?? throw new Exception("任务运行状态不能是空的"); + openVpn = _openVpn; + action = _action; + applyAtion = _applyAtion; + } + + public bool accountCheck(string account, string pwd, string notityKey) + { + ItunesUtlis itunesUtlis = new ItunesUtlis(taskState, notityKey, action, openVpn); + string msgReust = ""; + if (string.IsNullOrEmpty(itunesUtlis.ProxyIp)) + { + itunesUtlis.ProxyIp = ProxyAccountCache.getProxyAccountIP(account); + } + AppleItunesLogin appleItunesLogin = null; + appleItunesLogin = ((!AppSysConfig.iTunesisRemoteLogin) ? itunesUtlis.appleLogin(account, pwd, 1, ref msgReust, out var _) : itunesUtlis.remoteAppleLogin(account, pwd, ref msgReust)); + if (appleItunesLogin == null) + { + action?.Invoke(notityKey, DisplyType.xinxi, msgReust); + return false; + } + action?.Invoke(notityKey, DisplyType.area, appleItunesLogin.Area.ToString()); + action?.Invoke(notityKey, DisplyType.xinxi, "登录完成,正在检测"); + DisplyState displyState = ((!(appleItunesLogin.isDisabledAccount.ToLower() == "true")) ? DisplyState.None : DisplyState.Disply); + action?.Invoke(notityKey, DisplyType.xinxi, "查询完成"); + switch (displyState) + { + default: + return false; + case DisplyState.Disply: + applyAtion?.Invoke(notityKey, DisplyType.forbidden, "禁用"); + return true; + case DisplyState.None: + applyAtion?.Invoke(notityKey, DisplyType.normal, "正常"); + return true; + case DisplyState.Unknown: + action?.Invoke(notityKey, DisplyType.xinxi, "未知异常,请重新检测"); + return true; + } + } + } +} diff --git a/AppleBatch_June.Login/iTunesDownloadErrorState.cs b/AppleBatch_June.Login/iTunesDownloadErrorState.cs new file mode 100644 index 0000000..3b3dc5c --- /dev/null +++ b/AppleBatch_June.Login/iTunesDownloadErrorState.cs @@ -0,0 +1,38 @@ +namespace AppleBatch_June.Login +{ + public enum iTunesDownloadErrorState + { + AgeMustLarge17Charge = 10, + AgeMustLarge17Free = 9, + AppleIdDisable = 18, + CannotPurchase = 11, + CannotVerification = 16, + Charge = 5, + ChargeMoney2AppleID = 23, + CreditBalanceHasExpired = 26, + FailedAuthorize = 12, + GetMoreDownloadItemOverTime = 24, + iTunesAskThreeQuestions = 25, + iTunesCannotAnalyseVersion = 8, + iTunesLowVersion = 7, + LoginException = 6, + LoginInOtherStore = 14, + LoginiTunesDisable = 21, + LoginiTunesVertify = 20, + NeedSecurityCode = 19, + NeedToLogin = 15, + Nomal = -2, + NotBindingCredit = 17, + NotContainItemId = 3, + NotLogin = 2, + Purchased = 13, + SecurityChanging = 22, + Succeed = 1, + UnKnow = 0, + Waiting = -1, + WebCannotAnalyse = 4, + Supplyhasbeenstopped = 28, + Downloaded = 27, + BeenLocked = -9999 + } +} diff --git a/AppleBatch_June.Login/iTunesUserInfo.cs b/AppleBatch_June.Login/iTunesUserInfo.cs new file mode 100644 index 0000000..eca1953 --- /dev/null +++ b/AppleBatch_June.Login/iTunesUserInfo.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.Net; + +namespace AppleBatch_June.Login +{ + public class iTunesUserInfo + { + private DateTime dateTime_0 = DateTime.Now; + + private Dictionary waitingDownloadMedataDict = new Dictionary(); + + public iTunesDownloadErrorState State; + + public string siv = string.Empty; + + public CookieContainer PcookieContainer = new CookieContainer(); + + public string Area { get; set; } = string.Empty; + + + public string Balance { get; set; } + + public string Boundary { get; set; } + + public string Credit { get; set; } + + public string Dsid { get; set; } + + public string Guid { get; set; } + + public bool IsAreaChanged { get; set; } + + public string Country { get; set; } + + public string Kbsync { get; set; } + + public string MachineName { get; set; } + + public string Password { get; set; } + + public string PasswordToken { get; set; } + + public string PlistContent { get; set; } = string.Empty; + + + public string PurchedMedata { get; set; } = string.Empty; + + + public string ServerId { get; set; } = "20"; + + + public string StoredDescrption { get; set; } = string.Empty; + + + public string UserAgent { get; set; } + + public int UserId { get; set; } + + public string UserName { get; set; } + + public string PRH { get; set; } + + public Dictionary WaitingDownloadMedataDict + { + get + { + try + { + if (DateTime.Now.Subtract(dateTime_0).TotalHours > 48.0) + { + waitingDownloadMedataDict.Clear(); + } + } + catch + { + } + return waitingDownloadMedataDict; + } + set + { + dateTime_0 = DateTime.Now; + waitingDownloadMedataDict = value; + } + } + } +} diff --git a/AppleBatch_June.Model/ActiotiCloudConfig.cs b/AppleBatch_June.Model/ActiotiCloudConfig.cs new file mode 100644 index 0000000..71c1f75 --- /dev/null +++ b/AppleBatch_June.Model/ActiotiCloudConfig.cs @@ -0,0 +1,29 @@ +using System; +using AppleBatch_June.SMS; + +namespace AppleBatch_June.Model +{ + public class ActiotiCloudConfig + { + public Func actGetCode; + + public bool isOpenAuthAction { get; set; } + + public ISms smsService { get; set; } + + public string smsCountry { get; set; } = "CN"; + + + public int getSmsMsgMaxCount { get; set; } = 30; + + + public string ActivaNewPwd { get; set; } = ""; + + + public string ActivaStandbyPwd { get; set; } = ""; + + + public int openNumber { get; set; } = 5; + + } +} diff --git a/AppleBatch_June.Model/AddFamilyMemberPostModel.cs b/AppleBatch_June.Model/AddFamilyMemberPostModel.cs new file mode 100644 index 0000000..64d5cdc --- /dev/null +++ b/AppleBatch_June.Model/AddFamilyMemberPostModel.cs @@ -0,0 +1,19 @@ +namespace AppleBatch_June.Model +{ + public class AddFamilyMemberPostModel + { + public string appleId { get; set; } + + public string password { get; set; } + + public string appleIdForPurchases { get; set; } + + public bool shareMyLocationEnabledDefault { get; set; } + + public bool shareMyPurchasesEnabledDefault { get; set; } + + public string verificationToken { get; set; } + + public string preferredAppleId { get; set; } + } +} diff --git a/AppleBatch_June.Model/AddPaymentCardType.cs b/AppleBatch_June.Model/AddPaymentCardType.cs new file mode 100644 index 0000000..797d8a3 --- /dev/null +++ b/AppleBatch_June.Model/AddPaymentCardType.cs @@ -0,0 +1,11 @@ +namespace AppleBatch_June.Model +{ + public class AddPaymentCardType + { + public string cardType { get; set; } + + public string cardName { get; set; } + + public int status { get; set; } + } +} diff --git a/AppleBatch_June.Model/AothQuestions.cs b/AppleBatch_June.Model/AothQuestions.cs new file mode 100644 index 0000000..082c0b7 --- /dev/null +++ b/AppleBatch_June.Model/AothQuestions.cs @@ -0,0 +1,18 @@ +namespace AppleBatch_June.Model +{ + public class AothQuestions + { + public class Question + { + public int id { get; set; } + + public string question { get; set; } + + public int number { get; set; } + + public string answer { get; set; } + } + + public Question[] questions { get; set; } + } +} diff --git a/AppleBatch_June.Model/AppleChangeItem.cs b/AppleBatch_June.Model/AppleChangeItem.cs new file mode 100644 index 0000000..1d93d95 --- /dev/null +++ b/AppleBatch_June.Model/AppleChangeItem.cs @@ -0,0 +1,37 @@ +namespace AppleBatch_June.Model +{ + public class AppleChangeItem + { + public string newPwd { get; set; } + + public string newQt1 { get; set; } + + public string newQt2 { get; set; } + + public string newQt3 { get; set; } + + public string newshengri { get; set; } + + public string newGuojia { get; set; } + + public PaymentInfo pay { get; set; } + + public string editAddrs { get; set; } + + public bool isDeleteDevice { get; set; } + + public bool isUnlinkFamily { get; set; } + + public bool isRemoveRescueEmail { get; set; } + + public string countryCode { get; set; } = ""; + + + public string mode { get; set; } = ""; + + + public bool CreatePin { get; set; } + + public bool ckShippingAddress { get; set; } + } +} diff --git a/AppleBatch_June.Model/AppleItunesLogin.cs b/AppleBatch_June.Model/AppleItunesLogin.cs new file mode 100644 index 0000000..397166d --- /dev/null +++ b/AppleBatch_June.Model/AppleItunesLogin.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; + +namespace AppleBatch_June.Model +{ + public class AppleItunesLogin + { + public string timeCheck = DateTime.Now.ToString("yyMMddHHmm"); + + public int timeCheckCount; + + private string areaName; + + private string kbsync; + + public string reddemQts { get; set; } = ""; + + + public string account { get; set; } + + public string pwd { get; set; } + + public string msg { get; set; } + + public string StdndbyKeyGuid { get; set; } = ""; + + + public DateTime LoginTime { get; set; } = DateTime.Now; + + + public string Balance { get; set; } + + public string UserAgent { get; set; } + + public string Area + { + get + { + return areaName; + } + set + { + areaName = AppleUtlis.GetAreaByArea(value); + AreaCode = AppleUtlis.GetCountryCodeByArea(value); + } + } + + public string AreaCode { get; private set; } + + public Dictionary cookis { get; set; } + + public string xtoken { get; set; } + + public string dsis { get; set; } + + public string ServerId { get; set; } + + public string software { get; set; } + + public string isDisabledAccount { get; set; } + + public string extension { get; set; } = ""; + + + public string oldUserAgent { get; set; } = ""; + + + public string Guid { get; set; } + + public int serverIndex { get; set; } = -1; + + + public string nextServerId { get; set; } = "0"; + + + public string proxyIp { get; set; } = ""; + + + public string Kbsync + { + get + { + string text = ""; + for (int i = 0; i < kbsync.Length; i++) + { + if (i % 68 == 0) + { + text += "\n"; + } + text += kbsync[i]; + } + return kbsync; + } + set + { + kbsync = value; + } + } + } +} diff --git a/AppleBatch_June.Model/AppleUserInfo.cs b/AppleBatch_June.Model/AppleUserInfo.cs new file mode 100644 index 0000000..06d18ae --- /dev/null +++ b/AppleBatch_June.Model/AppleUserInfo.cs @@ -0,0 +1,43 @@ +using System.Net; + +namespace AppleBatch_June.Model +{ + public class AppleUserInfo + { + public CookieContainer PcookieContainer = new CookieContainer(); + + private string userAgent; + + public string AppleId { get; set; } + + public string ApplePwd { get; set; } + + public string AppleQt1 { get; set; } + + public string AppleQt2 { get; set; } + + public string AppleQt3 { get; set; } + + public string UserAgent + { + get + { + if (!string.IsNullOrEmpty(userAgent)) + { + return userAgent; + } + userAgent = AppleUtlis.getAppleWenUserAgent(); + return userAgent; + } + set + { + userAgent = value; + } + } + + public string Birthday { get; set; } + + public string Area { get; set; } = string.Empty; + + } +} diff --git a/AppleBatch_June.Model/AppleiCloundLogin.cs b/AppleBatch_June.Model/AppleiCloundLogin.cs new file mode 100644 index 0000000..5c7157e --- /dev/null +++ b/AppleBatch_June.Model/AppleiCloundLogin.cs @@ -0,0 +1,31 @@ +using System; + +namespace AppleBatch_June.Model +{ + public class AppleiCloundLogin + { + public string timeCheck = DateTime.Now.ToString("yyMMddHHmm"); + + public int timeCheckCount; + + public string StdndbyKeyGuid { get; set; } = ""; + + + public DateTime LoginTime { get; } = DateTime.Now; + + + public string account { get; set; } + + public string pwd { get; set; } + + public string dsid { get; set; } + + public string mmeAuthToken { get; set; } + + public string userAgent { get; set; } + + public string clientInfo { get; set; } + + public string Area { get; set; } + } +} diff --git a/AppleBatch_June.Model/AreaRequestModel.cs b/AppleBatch_June.Model/AreaRequestModel.cs new file mode 100644 index 0000000..3d51d50 --- /dev/null +++ b/AppleBatch_June.Model/AreaRequestModel.cs @@ -0,0 +1,32 @@ +namespace AppleBatch_June.Model +{ + public class AreaRequestModel + { + public int state { get; set; } + + public string msg { get; set; } = ""; + + + public string balance { get; set; } = ""; + + + public string Area { get; set; } = ""; + + + public string isDisabledAccount { get; set; } = ""; + + + public string extension { get; set; } = ""; + + + public string ServerId { get; set; } = ""; + + + public AreaRequestModel Init(int _state, string _msg) + { + state = _state; + msg = _msg; + return this; + } + } +} diff --git a/AppleBatch_June.Model/AvailableSecurityQuestions.cs b/AppleBatch_June.Model/AvailableSecurityQuestions.cs new file mode 100644 index 0000000..5af76be --- /dev/null +++ b/AppleBatch_June.Model/AvailableSecurityQuestions.cs @@ -0,0 +1,18 @@ +namespace AppleBatch_June.Model +{ + public class AvailableSecurityQuestions + { + public class Availablesecurityquestion + { + public int id { get; set; } + + public string question { get; set; } + + public int number { get; set; } + + public bool userDefined { get; set; } + } + + public Availablesecurityquestion[][] availableSecurityQuestions { get; set; } + } +} diff --git a/AppleBatch_June.Model/BaseModel.cs b/AppleBatch_June.Model/BaseModel.cs new file mode 100644 index 0000000..49194ba --- /dev/null +++ b/AppleBatch_June.Model/BaseModel.cs @@ -0,0 +1,9 @@ +namespace AppleBatch_June.Model +{ + public class BaseModel + { + public string Code { get; set; } + + public string Message { get; set; } + } +} diff --git a/AppleBatch_June.Model/ConfigModel.cs b/AppleBatch_June.Model/ConfigModel.cs new file mode 100644 index 0000000..5edb6ce --- /dev/null +++ b/AppleBatch_June.Model/ConfigModel.cs @@ -0,0 +1,7 @@ +namespace AppleBatch_June.Model +{ + public class ConfigModel : BaseModel + { + public Data Data { get; set; } + } +} diff --git a/AppleBatch_June.Model/CountriesReachableAt.cs b/AppleBatch_June.Model/CountriesReachableAt.cs new file mode 100644 index 0000000..16c9c75 --- /dev/null +++ b/AppleBatch_June.Model/CountriesReachableAt.cs @@ -0,0 +1,9197 @@ +namespace AppleBatch_June.Model +{ + public class CountriesReachableAt + { + public class Countryoptions + { + public ABW ABW { get; set; } + + public AFG AFG { get; set; } + + public AGO AGO { get; set; } + + public AIA AIA { get; set; } + + public ALB ALB { get; set; } + + public AND AND { get; set; } + + public ANT ANT { get; set; } + + public ARE ARE { get; set; } + + public ARG ARG { get; set; } + + public ARM ARM { get; set; } + + public ASM ASM { get; set; } + + public ATA ATA { get; set; } + + public ATF ATF { get; set; } + + public ATG ATG { get; set; } + + public AUS AUS { get; set; } + + public AUT AUT { get; set; } + + public AZE AZE { get; set; } + + public BDI BDI { get; set; } + + public BEL BEL { get; set; } + + public BEN BEN { get; set; } + + public BES BES { get; set; } + + public BFA BFA { get; set; } + + public BGD BGD { get; set; } + + public BGR BGR { get; set; } + + public BHR BHR { get; set; } + + public BHS BHS { get; set; } + + public BIH BIH { get; set; } + + public BLR BLR { get; set; } + + public BLZ BLZ { get; set; } + + public BMU BMU { get; set; } + + public BOL BOL { get; set; } + + public BRA BRA { get; set; } + + public BRB BRB { get; set; } + + public BRN BRN { get; set; } + + public BTN BTN { get; set; } + + public BVT BVT { get; set; } + + public BWA BWA { get; set; } + + public CAF CAF { get; set; } + + public CAN CAN { get; set; } + + public CCK CCK { get; set; } + + public CHE CHE { get; set; } + + public CHL CHL { get; set; } + + public CHN CHN { get; set; } + + public CIV CIV { get; set; } + + public CMR CMR { get; set; } + + public COD COD { get; set; } + + public COG COG { get; set; } + + public COK COK { get; set; } + + public COL COL { get; set; } + + public COM COM { get; set; } + + public CPV CPV { get; set; } + + public CRI CRI { get; set; } + + public CUW CUW { get; set; } + + public CXR CXR { get; set; } + + public CYM CYM { get; set; } + + public CYP CYP { get; set; } + + public CZE CZE { get; set; } + + public DEU DEU { get; set; } + + public DJI DJI { get; set; } + + public DMA DMA { get; set; } + + public DNK DNK { get; set; } + + public DOM DOM { get; set; } + + public DZA DZA { get; set; } + + public ECU ECU { get; set; } + + public EGY EGY { get; set; } + + public ERI ERI { get; set; } + + public ESH ESH { get; set; } + + public ESP ESP { get; set; } + + public EST EST { get; set; } + + public ETH ETH { get; set; } + + public FIN FIN { get; set; } + + public FJI FJI { get; set; } + + public FLK FLK { get; set; } + + public FRA FRA { get; set; } + + public FRO FRO { get; set; } + + public FSM FSM { get; set; } + + public GAB GAB { get; set; } + + public GBR GBR { get; set; } + + public GEO GEO { get; set; } + + public GGY GGY { get; set; } + + public GHA GHA { get; set; } + + public GIB GIB { get; set; } + + public GIN GIN { get; set; } + + public GLP GLP { get; set; } + + public GMB GMB { get; set; } + + public GNB GNB { get; set; } + + public GNQ GNQ { get; set; } + + public GRC GRC { get; set; } + + public GRD GRD { get; set; } + + public GRL GRL { get; set; } + + public GTM GTM { get; set; } + + public GUF GUF { get; set; } + + public GUM GUM { get; set; } + + public GUY GUY { get; set; } + + public HKG HKG { get; set; } + + public HMD HMD { get; set; } + + public HND HND { get; set; } + + public HRV HRV { get; set; } + + public HTI HTI { get; set; } + + public HUN HUN { get; set; } + + public IDN IDN { get; set; } + + public IMN IMN { get; set; } + + public IND IND { get; set; } + + public IOT IOT { get; set; } + + public IRL IRL { get; set; } + + public IRQ IRQ { get; set; } + + public ISL ISL { get; set; } + + public ISR ISR { get; set; } + + public ITA ITA { get; set; } + + public JAM JAM { get; set; } + + public JEY JEY { get; set; } + + public JOR JOR { get; set; } + + public JPN JPN { get; set; } + + public KAZ KAZ { get; set; } + + public KEN KEN { get; set; } + + public KGZ KGZ { get; set; } + + public KHM KHM { get; set; } + + public KIR KIR { get; set; } + + public KNA KNA { get; set; } + + public KOR KOR { get; set; } + + public KWT KWT { get; set; } + + public LAO LAO { get; set; } + + public LBN LBN { get; set; } + + public LBR LBR { get; set; } + + public LCA LCA { get; set; } + + public LIE LIE { get; set; } + + public LKA LKA { get; set; } + + public LSO LSO { get; set; } + + public LTU LTU { get; set; } + + public LUX LUX { get; set; } + + public LVA LVA { get; set; } + + public MAC MAC { get; set; } + + public MAF MAF { get; set; } + + public MAR MAR { get; set; } + + public MCO MCO { get; set; } + + public MDA MDA { get; set; } + + public MDG MDG { get; set; } + + public MDV MDV { get; set; } + + public MEX MEX { get; set; } + + public MHL MHL { get; set; } + + public MKD MKD { get; set; } + + public MLI MLI { get; set; } + + public MLT MLT { get; set; } + + public MMR MMR { get; set; } + + public MNE MNE { get; set; } + + public MNG MNG { get; set; } + + public MNP MNP { get; set; } + + public MOZ MOZ { get; set; } + + public MRT MRT { get; set; } + + public MSR MSR { get; set; } + + public MTQ MTQ { get; set; } + + public MUS MUS { get; set; } + + public MWI MWI { get; set; } + + public MYS MYS { get; set; } + + public MYT MYT { get; set; } + + public NAM NAM { get; set; } + + public NCL NCL { get; set; } + + public NER NER { get; set; } + + public NFK NFK { get; set; } + + public NGA NGA { get; set; } + + public NIC NIC { get; set; } + + public NIU NIU { get; set; } + + public NLD NLD { get; set; } + + public NOR NOR { get; set; } + + public NPL NPL { get; set; } + + public NRU NRU { get; set; } + + public NZL NZL { get; set; } + + public OMN OMN { get; set; } + + public PAK PAK { get; set; } + + public PAN PAN { get; set; } + + public PCN PCN { get; set; } + + public PER PER { get; set; } + + public PHL PHL { get; set; } + + public PLW PLW { get; set; } + + public PNG PNG { get; set; } + + public POL POL { get; set; } + + public PRI PRI { get; set; } + + public PRT PRT { get; set; } + + public PRY PRY { get; set; } + + public PSE PSE { get; set; } + + public PYF PYF { get; set; } + + public QAT QAT { get; set; } + + public REU REU { get; set; } + + public ROU ROU { get; set; } + + public RUS RUS { get; set; } + + public RWA RWA { get; set; } + + public SAU SAU { get; set; } + + public SDN SDN { get; set; } + + public SEN SEN { get; set; } + + public SGP SGP { get; set; } + + public SGS SGS { get; set; } + + public SHN SHN { get; set; } + + public SJM SJM { get; set; } + + public SLB SLB { get; set; } + + public SLE SLE { get; set; } + + public SLV SLV { get; set; } + + public SMR SMR { get; set; } + + public SOM SOM { get; set; } + + public SPM SPM { get; set; } + + public SRB SRB { get; set; } + + public STP STP { get; set; } + + public SUR SUR { get; set; } + + public SVK SVK { get; set; } + + public SVN SVN { get; set; } + + public SWE SWE { get; set; } + + public SWZ SWZ { get; set; } + + public SXM SXM { get; set; } + + public SYC SYC { get; set; } + + public TCA TCA { get; set; } + + public TCD TCD { get; set; } + + public TGO TGO { get; set; } + + public THA THA { get; set; } + + public TJK TJK { get; set; } + + public TKL TKL { get; set; } + + public TKM TKM { get; set; } + + public TMP TMP { get; set; } + + public TON TON { get; set; } + + public TTO TTO { get; set; } + + public TUN TUN { get; set; } + + public TUR TUR { get; set; } + + public TUV TUV { get; set; } + + public TWN TWN { get; set; } + + public TZA TZA { get; set; } + + public UGA UGA { get; set; } + + public UKR UKR { get; set; } + + public UMI UMI { get; set; } + + public URY URY { get; set; } + + public USA USA { get; set; } + + public UZB UZB { get; set; } + + public VAT VAT { get; set; } + + public VCT VCT { get; set; } + + public VEN VEN { get; set; } + + public VGB VGB { get; set; } + + public VIR VIR { get; set; } + + public VNM VNM { get; set; } + + public VUT VUT { get; set; } + + public WLF WLF { get; set; } + + public WSM WSM { get; set; } + + public YEM YEM { get; set; } + + public ZAF ZAF { get; set; } + + public ZMB ZMB { get; set; } + + public ZWE ZWE { get; set; } + } + + public class ABW + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class AFG + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class AGO + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class AIA + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public Phonenumberformat phoneNumberFormat { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class Phonenumberformat + { + public string format { get; set; } + + public int[] formatDigitRegions { get; set; } + + public int minDigitLength { get; set; } + + public int maxDigitLength { get; set; } + + public string countryCode { get; set; } + + public string countryDialCode { get; set; } + + public string countryCode2 { get; set; } + } + + public class ALB + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class AND + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class ANT + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class ARE + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class ARG + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class ARM + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class ASM + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class ATA + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class ATF + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class ATG + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public Phonenumberformat1 phoneNumberFormat { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class Phonenumberformat1 + { + public string format { get; set; } + + public int[] formatDigitRegions { get; set; } + + public int minDigitLength { get; set; } + + public int maxDigitLength { get; set; } + + public string countryCode { get; set; } + + public string countryDialCode { get; set; } + + public string countryCode2 { get; set; } + } + + public class AUS + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class AUT + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class AZE + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class BDI + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class BEL + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class BEN + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class BES + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class BFA + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class BGD + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class BGR + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class BHR + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class BHS + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public Phonenumberformat2 phoneNumberFormat { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class Phonenumberformat2 + { + public string format { get; set; } + + public int[] formatDigitRegions { get; set; } + + public int minDigitLength { get; set; } + + public int maxDigitLength { get; set; } + + public string countryCode { get; set; } + + public string countryDialCode { get; set; } + + public string countryCode2 { get; set; } + } + + public class BIH + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class BLR + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class BLZ + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class BMU + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class BOL + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class BRA + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class BRB + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public Phonenumberformat3 phoneNumberFormat { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class Phonenumberformat3 + { + public string format { get; set; } + + public int[] formatDigitRegions { get; set; } + + public int minDigitLength { get; set; } + + public int maxDigitLength { get; set; } + + public string countryCode { get; set; } + + public string countryDialCode { get; set; } + + public string countryCode2 { get; set; } + } + + public class BRN + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class BTN + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class BVT + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class BWA + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class CAF + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class CAN + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public Phonenumberformat4 phoneNumberFormat { get; set; } + + public bool supportPaidAccount { get; set; } + + public Stateprovince[] stateProvinces { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class Phonenumberformat4 + { + public string format { get; set; } + + public int[] formatDigitRegions { get; set; } + + public int minDigitLength { get; set; } + + public int maxDigitLength { get; set; } + + public string countryCode { get; set; } + + public string countryDialCode { get; set; } + + public string countryCode2 { get; set; } + } + + public class Stateprovince + { + public string code { get; set; } + + public string name { get; set; } + } + + public class CCK + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class CHE + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public Phonenumberformat5 phoneNumberFormat { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class Phonenumberformat5 + { + public string format { get; set; } + + public int[] formatDigitRegions { get; set; } + + public int minDigitLength { get; set; } + + public int maxDigitLength { get; set; } + + public string countryCode { get; set; } + + public string countryDialCode { get; set; } + + public string countryCode2 { get; set; } + } + + public class CHL + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class CHN + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public Phonenumberformat6 phoneNumberFormat { get; set; } + + public bool supportPaidAccount { get; set; } + + public Stateprovince1[] stateProvinces { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class Phonenumberformat6 + { + public string format { get; set; } + + public int[] formatDigitRegions { get; set; } + + public int minDigitLength { get; set; } + + public int maxDigitLength { get; set; } + + public string countryCode { get; set; } + + public string countryDialCode { get; set; } + + public string countryCode2 { get; set; } + } + + public class Stateprovince1 + { + public string code { get; set; } + + public string name { get; set; } + } + + public class CIV + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class CMR + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class COD + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class COG + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class COK + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class COL + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class COM + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class CPV + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class CRI + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class CUW + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class CXR + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class CYM + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public Phonenumberformat7 phoneNumberFormat { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class Phonenumberformat7 + { + public string format { get; set; } + + public int[] formatDigitRegions { get; set; } + + public int minDigitLength { get; set; } + + public int maxDigitLength { get; set; } + + public string countryCode { get; set; } + + public string countryDialCode { get; set; } + + public string countryCode2 { get; set; } + } + + public class CYP + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class CZE + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public Phonenumberformat8 phoneNumberFormat { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class Phonenumberformat8 + { + public string format { get; set; } + + public int[] formatDigitRegions { get; set; } + + public int minDigitLength { get; set; } + + public int maxDigitLength { get; set; } + + public string countryCode { get; set; } + + public string countryDialCode { get; set; } + + public string countryCode2 { get; set; } + } + + public class DEU + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class DJI + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class DMA + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public Phonenumberformat9 phoneNumberFormat { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class Phonenumberformat9 + { + public string format { get; set; } + + public int[] formatDigitRegions { get; set; } + + public int minDigitLength { get; set; } + + public int maxDigitLength { get; set; } + + public string countryCode { get; set; } + + public string countryDialCode { get; set; } + + public string countryCode2 { get; set; } + } + + public class DNK + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class DOM + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class DZA + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class ECU + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class EGY + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class ERI + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class ESH + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class ESP + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public Phonenumberformat10 phoneNumberFormat { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class Phonenumberformat10 + { + public string format { get; set; } + + public int[] formatDigitRegions { get; set; } + + public int minDigitLength { get; set; } + + public int maxDigitLength { get; set; } + + public string countryCode { get; set; } + + public string countryDialCode { get; set; } + + public string countryCode2 { get; set; } + } + + public class EST + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class ETH + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class FIN + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class FJI + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class FLK + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class FRA + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public Phonenumberformat11 phoneNumberFormat { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class Phonenumberformat11 + { + public string format { get; set; } + + public int[] formatDigitRegions { get; set; } + + public int minDigitLength { get; set; } + + public int maxDigitLength { get; set; } + + public string countryCode { get; set; } + + public string countryDialCode { get; set; } + + public string countryCode2 { get; set; } + } + + public class FRO + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class FSM + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class GAB + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class GBR + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class GEO + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class GGY + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class GHA + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class GIB + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class GIN + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class GLP + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class GMB + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class GNB + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class GNQ + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class GRC + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public Phonenumberformat12 phoneNumberFormat { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class Phonenumberformat12 + { + public string format { get; set; } + + public int[] formatDigitRegions { get; set; } + + public int minDigitLength { get; set; } + + public int maxDigitLength { get; set; } + + public string countryCode { get; set; } + + public string countryDialCode { get; set; } + + public string countryCode2 { get; set; } + } + + public class GRD + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public Phonenumberformat13 phoneNumberFormat { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class Phonenumberformat13 + { + public string format { get; set; } + + public int[] formatDigitRegions { get; set; } + + public int minDigitLength { get; set; } + + public int maxDigitLength { get; set; } + + public string countryCode { get; set; } + + public string countryDialCode { get; set; } + + public string countryCode2 { get; set; } + } + + public class GRL + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class GTM + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class GUF + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class GUM + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class GUY + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class HKG + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class HMD + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class HND + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class HRV + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class HTI + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class HUN + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class IDN + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class IMN + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class IND + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public Phonenumberformat14 phoneNumberFormat { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class Phonenumberformat14 + { + public string format { get; set; } + + public int[] formatDigitRegions { get; set; } + + public int minDigitLength { get; set; } + + public int maxDigitLength { get; set; } + + public string countryCode { get; set; } + + public string countryDialCode { get; set; } + + public string countryCode2 { get; set; } + } + + public class IOT + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class IRL + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class IRQ + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class ISL + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class ISR + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class ITA + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class JAM + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public Phonenumberformat15 phoneNumberFormat { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class Phonenumberformat15 + { + public string format { get; set; } + + public int[] formatDigitRegions { get; set; } + + public int minDigitLength { get; set; } + + public int maxDigitLength { get; set; } + + public string countryCode { get; set; } + + public string countryDialCode { get; set; } + + public string countryCode2 { get; set; } + } + + public class JEY + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class JOR + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class JPN + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public Stateprovince2[] stateProvinces { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class Stateprovince2 + { + public string code { get; set; } + + public string name { get; set; } + } + + public class KAZ + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class KEN + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class KGZ + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class KHM + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class KIR + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class KNA + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public Phonenumberformat16 phoneNumberFormat { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class Phonenumberformat16 + { + public string format { get; set; } + + public int[] formatDigitRegions { get; set; } + + public int minDigitLength { get; set; } + + public int maxDigitLength { get; set; } + + public string countryCode { get; set; } + + public string countryDialCode { get; set; } + + public string countryCode2 { get; set; } + } + + public class KOR + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class KWT + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class LAO + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class LBN + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class LBR + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class LCA + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public Phonenumberformat17 phoneNumberFormat { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class Phonenumberformat17 + { + public string format { get; set; } + + public int[] formatDigitRegions { get; set; } + + public int minDigitLength { get; set; } + + public int maxDigitLength { get; set; } + + public string countryCode { get; set; } + + public string countryDialCode { get; set; } + + public string countryCode2 { get; set; } + } + + public class LIE + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class LKA + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class LSO + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class LTU + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class LUX + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class LVA + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class MAC + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class MAF + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class MAR + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class MCO + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class MDA + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class MDG + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class MDV + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class MEX + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class MHL + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class MKD + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class MLI + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class MLT + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class MMR + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class MNE + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class MNG + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class MNP + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class MOZ + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class MRT + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class MSR + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class MTQ + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class MUS + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class MWI + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class MYS + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class MYT + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class NAM + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class NCL + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class NER + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class NFK + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class NGA + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class NIC + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class NIU + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class NLD + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class NOR + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class NPL + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class NRU + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class NZL + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class OMN + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class PAK + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class PAN + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class PCN + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class PER + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class PHL + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class PLW + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class PNG + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class POL + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class PRI + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class PRT + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class PRY + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class PSE + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class PYF + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class QAT + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class REU + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class ROU + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class RUS + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class RWA + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class SAU + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public Phonenumberformat18 phoneNumberFormat { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class Phonenumberformat18 + { + public string format { get; set; } + + public int[] formatDigitRegions { get; set; } + + public int minDigitLength { get; set; } + + public int maxDigitLength { get; set; } + + public string countryCode { get; set; } + + public string countryDialCode { get; set; } + + public string countryCode2 { get; set; } + } + + public class SDN + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class SEN + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class SGP + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class SGS + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class SHN + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class SJM + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class SLB + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class SLE + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class SLV + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class SMR + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class SOM + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class SPM + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class SRB + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class STP + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class SUR + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class SVK + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class SVN + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class SWE + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class SWZ + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class SXM + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class SYC + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class TCA + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public Phonenumberformat19 phoneNumberFormat { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class Phonenumberformat19 + { + public string format { get; set; } + + public int[] formatDigitRegions { get; set; } + + public int minDigitLength { get; set; } + + public int maxDigitLength { get; set; } + + public string countryCode { get; set; } + + public string countryDialCode { get; set; } + + public string countryCode2 { get; set; } + } + + public class TCD + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class TGO + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class THA + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class TJK + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class TKL + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class TKM + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class TMP + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class TON + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class TTO + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public Phonenumberformat20 phoneNumberFormat { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class Phonenumberformat20 + { + public string format { get; set; } + + public int[] formatDigitRegions { get; set; } + + public int minDigitLength { get; set; } + + public int maxDigitLength { get; set; } + + public string countryCode { get; set; } + + public string countryDialCode { get; set; } + + public string countryCode2 { get; set; } + } + + public class TUN + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class TUR + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class TUV + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class TWN + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class TZA + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class UGA + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class UKR + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class UMI + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class URY + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class USA + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public Phonenumberformat21 phoneNumberFormat { get; set; } + + public bool supportPaidAccount { get; set; } + + public Stateprovince3[] stateProvinces { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class Phonenumberformat21 + { + public string format { get; set; } + + public int[] formatDigitRegions { get; set; } + + public int minDigitLength { get; set; } + + public int maxDigitLength { get; set; } + + public string countryCode { get; set; } + + public string countryDialCode { get; set; } + + public string countryCode2 { get; set; } + } + + public class Stateprovince3 + { + public string code { get; set; } + + public string name { get; set; } + } + + public class UZB + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class VAT + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class VCT + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public Phonenumberformat22 phoneNumberFormat { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class Phonenumberformat22 + { + public string format { get; set; } + + public int[] formatDigitRegions { get; set; } + + public int minDigitLength { get; set; } + + public int maxDigitLength { get; set; } + + public string countryCode { get; set; } + + public string countryDialCode { get; set; } + + public string countryCode2 { get; set; } + } + + public class VEN + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class VGB + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public Phonenumberformat23 phoneNumberFormat { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class Phonenumberformat23 + { + public string format { get; set; } + + public int[] formatDigitRegions { get; set; } + + public int minDigitLength { get; set; } + + public int maxDigitLength { get; set; } + + public string countryCode { get; set; } + + public string countryDialCode { get; set; } + + public string countryCode2 { get; set; } + } + + public class VIR + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class VNM + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class VUT + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class WLF + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class WSM + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class YEM + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class ZAF + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class ZMB + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class ZWE + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class Smssupportedcountriesreachableat + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + + public Phonenumberformat24 phoneNumberFormat { get; set; } + + public Stateprovince4[] stateProvinces { get; set; } + } + + public class Phonenumberformat24 + { + public string format { get; set; } + + public int[] formatDigitRegions { get; set; } + + public int minDigitLength { get; set; } + + public int maxDigitLength { get; set; } + + public string countryCode { get; set; } + + public string countryDialCode { get; set; } + + public string countryCode2 { get; set; } + } + + public class Stateprovince4 + { + public string code { get; set; } + + public string name { get; set; } + } + + public class Passwordrule + { + public string type { get; set; } + + public string languageCode { get; set; } + + public string regex { get; set; } + + public string description { get; set; } + } + + public class Availablesecurityquestion + { + public int id { get; set; } + + public string question { get; set; } + + public int number { get; set; } + + public bool userDefined { get; set; } + } + + public class Smssupportedcountry + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + + public Phonenumberformat25 phoneNumberFormat { get; set; } + + public Stateprovince5[] stateProvinces { get; set; } + } + + public class Phonenumberformat25 + { + public string format { get; set; } + + public int[] formatDigitRegions { get; set; } + + public int minDigitLength { get; set; } + + public int maxDigitLength { get; set; } + + public string countryCode { get; set; } + + public string countryDialCode { get; set; } + + public string countryCode2 { get; set; } + } + + public class Stateprovince5 + { + public string code { get; set; } + + public string name { get; set; } + } + + public class Securityquestionsgroupedbyone + { + public int id { get; set; } + + public string question { get; set; } + + public int number { get; set; } + + public bool userDefined { get; set; } + + public Locale locale { get; set; } + } + + public class Locale + { + public string locale { get; set; } + + public string dsformattedString { get; set; } + + public string isoLocale { get; set; } + + public string acceptLanguageLocale { get; set; } + + public string siteCountryCode { get; set; } + + public string isoLocaleWithSiteCountry { get; set; } + + public string displayLocale { get; set; } + + public bool rightToLeft { get; set; } + + public bool english { get; set; } + + public string headerSearchLocale { get; set; } + + public string isoLocaleWithScript { get; set; } + + public string isoLocaleWithScriptWithoutCountry { get; set; } + + public string language { get; set; } + + public bool _default { get; set; } + + public string country { get; set; } + + public string displayLanguage { get; set; } + + public string displayCountry { get; set; } + } + + public class Languageoption + { + public string code { get; set; } + + public string name { get; set; } + + public bool enabled { get; set; } + } + + public Smssupportedcountriesreachableat[] smsSupportedCountriesReachableAt { get; set; } + + public string dateLayout { get; set; } + + public string dateFormat { get; set; } + + public bool showAppleMusicOption { get; set; } + + public Passwordrule[] passwordRules { get; set; } + + public string locale { get; set; } + + public Availablesecurityquestion[][] availableSecurityQuestions { get; set; } + + public bool showAppleNewsOption { get; set; } + + public Countryoptions countryOptions { get; set; } + + public string dateInputPlaceholder { get; set; } + + public string dateInputFormat { get; set; } + + public Smssupportedcountry[] smsSupportedCountries { get; set; } + + public Securityquestionsgroupedbyone[][] securityQuestionsGroupedByOne { get; set; } + + public Languageoption[] languageOptions { get; set; } + } +} diff --git a/AppleBatch_June.Model/CountryCodeModel.cs b/AppleBatch_June.Model/CountryCodeModel.cs new file mode 100644 index 0000000..ee98a58 --- /dev/null +++ b/AppleBatch_June.Model/CountryCodeModel.cs @@ -0,0 +1,17 @@ +namespace AppleBatch_June.Model +{ + public class CountryCodeModel + { + public string name { get; set; } + + public string area { get; set; } + + public string description { get; set; } + + public string code { get; set; } + + public string id { get; set; } + + public string displayName { get; set; } + } +} diff --git a/AppleBatch_June.Model/CreateFamilyPostModel.cs b/AppleBatch_June.Model/CreateFamilyPostModel.cs new file mode 100644 index 0000000..7f7e83e --- /dev/null +++ b/AppleBatch_June.Model/CreateFamilyPostModel.cs @@ -0,0 +1,15 @@ +namespace AppleBatch_June.Model +{ + public class CreateFamilyPostModel + { + public string organizerAppleId { get; set; } + + public string organizerAppleIdForPurchases { get; set; } + + public string organizerAppleIdForPurchasesPassword { get; set; } + + public bool organizerShareMyLocationEnabledDefault { get; set; } + + public int iTunesTosVersion { get; set; } + } +} diff --git a/AppleBatch_June.Model/Data.cs b/AppleBatch_June.Model/Data.cs new file mode 100644 index 0000000..161e8c8 --- /dev/null +++ b/AppleBatch_June.Model/Data.cs @@ -0,0 +1,9 @@ +namespace AppleBatch_June.Model +{ + public class Data + { + public Listtype[] listTypes { get; set; } + + public Listconfig[] listConfig { get; set; } + } +} diff --git a/AppleBatch_June.Model/DeleteDeviceReust.cs b/AppleBatch_June.Model/DeleteDeviceReust.cs new file mode 100644 index 0000000..38ffb4b --- /dev/null +++ b/AppleBatch_June.Model/DeleteDeviceReust.cs @@ -0,0 +1,349 @@ +namespace AppleBatch_June.Model +{ + public class DeleteDeviceReust + { + public class Removeddevice + { + public string listImageLocation { get; set; } + + public string listImageLocation2x { get; set; } + + public string listImageLocation3x { get; set; } + + public string infoboxImageLocation { get; set; } + + public string infoboxImageLocation2x { get; set; } + + public string infoboxImageLocation3x { get; set; } + + public bool currentDevice { get; set; } + + public bool removalPending { get; set; } + + public string deviceDetailHttpMethod { get; set; } + + public string deviceDetailUri { get; set; } + + public Dateformatter dateFormatter { get; set; } + + public Timeformatter timeFormatter { get; set; } + + public bool iCloudDevice { get; set; } + + public bool applePayCardRemovalPending { get; set; } + + public bool suppressChangePasswordLink { get; set; } + + public bool showBackupStatus { get; set; } + + public bool showSerialNumber { get; set; } + + public bool allowRemoval { get; set; } + + public bool fmipCapable { get; set; } + + public bool backupCapable { get; set; } + + public string os { get; set; } + + public bool trustedDevice { get; set; } + + public string osAndVersion { get; set; } + + public bool accountSupportsVerificationCodes { get; set; } + + public bool supportsVerificationCodes { get; set; } + + public bool pushDevice { get; set; } + + public bool hasApplePayCards { get; set; } + + public bool hasActiveSurfAccount { get; set; } + + public string deviceClass { get; set; } + + public bool primary { get; set; } + + public bool fmipEnabled { get; set; } + + public bool secondary { get; set; } + + public string modelName { get; set; } + + public string osVersion { get; set; } + + public bool untrusted { get; set; } + + public string name { get; set; } + + public string id { get; set; } + + public string type { get; set; } + } + + public class Dateformatter + { + public string locale { get; set; } + + public Decimalstyle decimalStyle { get; set; } + + public string resolverStyle { get; set; } + + public Zone zone { get; set; } + + public Chronology chronology { get; set; } + } + + public class Decimalstyle + { + public string zeroDigit { get; set; } + + public string positiveSign { get; set; } + + public string negativeSign { get; set; } + + public string decimalSeparator { get; set; } + } + + public class Zone + { + public int totalSeconds { get; set; } + + public string id { get; set; } + + public Rules rules { get; set; } + } + + public class Rules + { + public bool fixedOffset { get; set; } + + public object[] transitions { get; set; } + + public object[] transitionRules { get; set; } + } + + public class Chronology + { + public string calendarType { get; set; } + + public string id { get; set; } + } + + public class Timeformatter + { + public string locale { get; set; } + + public Decimalstyle1 decimalStyle { get; set; } + + public string resolverStyle { get; set; } + + public Zone1 zone { get; set; } + } + + public class Decimalstyle1 + { + public string zeroDigit { get; set; } + + public string positiveSign { get; set; } + + public string negativeSign { get; set; } + + public string decimalSeparator { get; set; } + } + + public class Zone1 + { + public int totalSeconds { get; set; } + + public string id { get; set; } + + public Rules1 rules { get; set; } + } + + public class Rules1 + { + public bool fixedOffset { get; set; } + + public object[] transitions { get; set; } + + public object[] transitionRules { get; set; } + } + + public class Device + { + public string listImageLocation { get; set; } + + public string listImageLocation2x { get; set; } + + public string listImageLocation3x { get; set; } + + public string infoboxImageLocation { get; set; } + + public string infoboxImageLocation2x { get; set; } + + public string infoboxImageLocation3x { get; set; } + + public bool currentDevice { get; set; } + + public bool removalPending { get; set; } + + public string deviceDetailHttpMethod { get; set; } + + public string deviceDetailUri { get; set; } + + public Dateformatter1 dateFormatter { get; set; } + + public Timeformatter1 timeFormatter { get; set; } + + public bool iCloudDevice { get; set; } + + public bool applePayCardRemovalPending { get; set; } + + public bool suppressChangePasswordLink { get; set; } + + public bool showBackupStatus { get; set; } + + public bool showSerialNumber { get; set; } + + public bool allowRemoval { get; set; } + + public bool fmipCapable { get; set; } + + public bool backupCapable { get; set; } + + public string os { get; set; } + + public bool trustedDevice { get; set; } + + public string osAndVersion { get; set; } + + public bool accountSupportsVerificationCodes { get; set; } + + public bool supportsVerificationCodes { get; set; } + + public bool pushDevice { get; set; } + + public bool hasApplePayCards { get; set; } + + public bool hasActiveSurfAccount { get; set; } + + public string deviceClass { get; set; } + + public bool primary { get; set; } + + public bool fmipEnabled { get; set; } + + public bool secondary { get; set; } + + public string modelName { get; set; } + + public string osVersion { get; set; } + + public bool untrusted { get; set; } + + public string name { get; set; } + + public string id { get; set; } + + public string type { get; set; } + } + + public class Dateformatter1 + { + public string locale { get; set; } + + public Decimalstyle2 decimalStyle { get; set; } + + public string resolverStyle { get; set; } + + public Zone2 zone { get; set; } + + public Chronology1 chronology { get; set; } + } + + public class Decimalstyle2 + { + public string zeroDigit { get; set; } + + public string positiveSign { get; set; } + + public string negativeSign { get; set; } + + public string decimalSeparator { get; set; } + } + + public class Zone2 + { + public int totalSeconds { get; set; } + + public string id { get; set; } + + public Rules2 rules { get; set; } + } + + public class Rules2 + { + public bool fixedOffset { get; set; } + + public object[] transitions { get; set; } + + public object[] transitionRules { get; set; } + } + + public class Chronology1 + { + public string calendarType { get; set; } + + public string id { get; set; } + } + + public class Timeformatter1 + { + public string locale { get; set; } + + public Decimalstyle3 decimalStyle { get; set; } + + public string resolverStyle { get; set; } + + public Zone3 zone { get; set; } + } + + public class Decimalstyle3 + { + public string zeroDigit { get; set; } + + public string positiveSign { get; set; } + + public string negativeSign { get; set; } + + public string decimalSeparator { get; set; } + } + + public class Zone3 + { + public int totalSeconds { get; set; } + + public string id { get; set; } + + public Rules3 rules { get; set; } + } + + public class Rules3 + { + public bool fixedOffset { get; set; } + + public object[] transitions { get; set; } + + public object[] transitionRules { get; set; } + } + + public Device[] devices { get; set; } + + public string hsa2SignedInDevicesLink { get; set; } + + public Removeddevice removedDevice { get; set; } + + public bool suppressChangePasswordLink { get; set; } + } +} diff --git a/AppleBatch_June.Model/DevicesInfo.cs b/AppleBatch_June.Model/DevicesInfo.cs new file mode 100644 index 0000000..96b6b57 --- /dev/null +++ b/AppleBatch_June.Model/DevicesInfo.cs @@ -0,0 +1,96 @@ +namespace AppleBatch_June.Model +{ + public class DevicesInfo + { + public class Dateformatter + { + public string locale { get; set; } + + public Decimalstyle decimalStyle { get; set; } + + public string resolverStyle { get; set; } + + public Zone zone { get; set; } + + public Chronology chronology { get; set; } + } + + public class Decimalstyle + { + public string zeroDigit { get; set; } + + public string positiveSign { get; set; } + + public string negativeSign { get; set; } + + public string decimalSeparator { get; set; } + } + + public class Zone + { + public int totalSeconds { get; set; } + + public string id { get; set; } + + public Rules rules { get; set; } + } + + public class Rules + { + public bool fixedOffset { get; set; } + + public object[] transitions { get; set; } + + public object[] transitionRules { get; set; } + } + + public class Chronology + { + public string calendarType { get; set; } + + public string id { get; set; } + } + + public class Timeformatter + { + public string locale { get; set; } + + public Decimalstyle1 decimalStyle { get; set; } + + public string resolverStyle { get; set; } + + public Zone1 zone { get; set; } + } + + public class Decimalstyle1 + { + public string zeroDigit { get; set; } + + public string positiveSign { get; set; } + + public string negativeSign { get; set; } + + public string decimalSeparator { get; set; } + } + + public class Zone1 + { + public int totalSeconds { get; set; } + + public string id { get; set; } + + public Rules1 rules { get; set; } + } + + public class Rules1 + { + public bool fixedOffset { get; set; } + + public object[] transitions { get; set; } + + public object[] transitionRules { get; set; } + } + + public bool allowRemoval { get; set; } + } +} diff --git a/AppleBatch_June.Model/DisplyType.cs b/AppleBatch_June.Model/DisplyType.cs new file mode 100644 index 0000000..81aa695 --- /dev/null +++ b/AppleBatch_June.Model/DisplyType.cs @@ -0,0 +1,32 @@ +namespace AppleBatch_June.Model +{ + public enum DisplyType + { + newAccount, + mima, + qt1, + qt2, + qt3, + shengri, + guojia, + xinxi, + forbidden, + normal, + xiaofeiriqi, + xiaofeiriqiNow, + xiaofeijine, + lostBillNo, + area, + reddemLose, + reddemValid, + reddemUNlock, + gameSuccess, + gameFire, + gameCount, + chongzhi, + balance, + error, + init, + bindMoblie + } +} diff --git a/AppleBatch_June.Model/FamilyMembers.cs b/AppleBatch_June.Model/FamilyMembers.cs new file mode 100644 index 0000000..136306a --- /dev/null +++ b/AppleBatch_June.Model/FamilyMembers.cs @@ -0,0 +1,48 @@ +namespace AppleBatch_June.Model +{ + public class FamilyMembers + { + public class Family + { + public string familyId { get; set; } + + public string organizerDsid { get; set; } + } + + public class Activefamilyservice + { + public string id { get; set; } + + public string icon { get; set; } + + public string displayLabel { get; set; } + + public bool isSubscription { get; set; } + } + + public class Familymember + { + public string dsid { get; set; } + + public string firstName { get; set; } + + public string lastName { get; set; } + + public string fullName { get; set; } + } + + public string currentDsid { get; set; } + + public string currentUserAppleId { get; set; } + + public Activefamilyservice[] activeFamilyServices { get; set; } + + public Family family { get; set; } + + public Familymember[] familyMembers { get; set; } + + public bool isLinkedToFamily { get; set; } + + public bool isMemberOfFamily { get; set; } + } +} diff --git a/AppleBatch_June.Model/GetIpProxyModel.cs b/AppleBatch_June.Model/GetIpProxyModel.cs new file mode 100644 index 0000000..bf518f9 --- /dev/null +++ b/AppleBatch_June.Model/GetIpProxyModel.cs @@ -0,0 +1,28 @@ +using System; + +namespace AppleBatch_June.Model +{ + public class GetIpProxyModel + { + public class ProxyModel + { + public string proxyIp { get; set; } + + public DateTime expireTime { get; set; } + } + + public string Code { get; set; } + + public string Message { get; set; } + + public ProxyModel[] Data { get; set; } + + public int serverIndex { get; set; } + + public string extend { get; set; } + + public string authenUserInfo { get; set; } + + public string platformName { get; set; } + } +} diff --git a/AppleBatch_June.Model/GiftcardBalanceModel.cs b/AppleBatch_June.Model/GiftcardBalanceModel.cs new file mode 100644 index 0000000..e3d6254 --- /dev/null +++ b/AppleBatch_June.Model/GiftcardBalanceModel.cs @@ -0,0 +1,123 @@ +namespace AppleBatch_June.Model +{ + public class GiftcardBalanceModel + { + public class Head + { + public int status { get; set; } + } + + public class Body + { + public Meta meta { get; set; } + + public Giftcardbalancecheck giftCardBalanceCheck { get; set; } + } + + public class Meta + { + public string[] l { get; set; } + + public H h { get; set; } + } + + public class H + { + public string syntax { get; set; } + + public string xaosmodelpage { get; set; } + + public string modelVersion { get; set; } + + public string xaosstk { get; set; } + } + + public class Giftcardbalancecheck + { + public D d { get; set; } + + public B b { get; set; } + + public T t { get; set; } + } + + public class D + { + public string buyUrl { get; set; } + + public string maxAttemptReachedError { get; set; } + + public string shopStoreUrl { get; set; } + + public string checkBalanceUrl { get; set; } + + public string balance { get; set; } + + public bool localNavEnabled { get; set; } + + public Localnav[] localNav { get; set; } + + public bool showBalanceCheckResult { get; set; } + + public bool maxAttemptReached { get; set; } + + public string giftCardNumber { get; set; } + + public string[] alertMessages { get; set; } + } + + public class Localnav + { + public string url { get; set; } + + public string label { get; set; } + + public bool isDisabled { get; set; } + } + + public class B + { + public Successcheck successCheck { get; set; } + } + + public class Successcheck + { + public string id { get; set; } + + public Event[] events { get; set; } + } + + public class Event + { + public string on { get; set; } + + public string metric { get; set; } + } + + public class T + { + public Applycheckbalance applyCheckBalance { get; set; } + } + + public class Applycheckbalance + { + public Microevent[] microEvents { get; set; } + } + + public class Microevent + { + public string key { get; set; } + + public string value { get; set; } + + public string feature { get; set; } + } + + public string xxs { get; set; } = ""; + + + public Head head { get; set; } + + public Body body { get; set; } + } +} diff --git a/AppleBatch_June.Model/IdToHint.cs b/AppleBatch_June.Model/IdToHint.cs new file mode 100644 index 0000000..f3165f0 --- /dev/null +++ b/AppleBatch_June.Model/IdToHint.cs @@ -0,0 +1,6 @@ +namespace AppleBatch_June.Model +{ + internal class IdToHint + { + } +} diff --git a/AppleBatch_June.Model/IforgotVerifyPhoneModel.cs b/AppleBatch_June.Model/IforgotVerifyPhoneModel.cs new file mode 100644 index 0000000..db1445a --- /dev/null +++ b/AppleBatch_June.Model/IforgotVerifyPhoneModel.cs @@ -0,0 +1,14 @@ +namespace AppleBatch_June.Model +{ + public class IforgotVerifyPhoneModel + { + public class Trustedphone + { + public string number { get; set; } + } + + public Trustedphone[] trustedPhones { get; set; } + + public bool recoverable { get; set; } + } +} diff --git a/AppleBatch_June.Model/IntervalCartModel.cs b/AppleBatch_June.Model/IntervalCartModel.cs new file mode 100644 index 0000000..e73ac74 --- /dev/null +++ b/AppleBatch_June.Model/IntervalCartModel.cs @@ -0,0 +1,13 @@ +namespace AppleBatch_June.Model +{ + public class IntervalCartModel + { + public string code { get; set; } + + public string time { get; set; } + + public int state { get; set; } + + public string redeemMsg { get; set; } + } +} diff --git a/AppleBatch_June.Model/IntervalIdModel.cs b/AppleBatch_June.Model/IntervalIdModel.cs new file mode 100644 index 0000000..ebb554d --- /dev/null +++ b/AppleBatch_June.Model/IntervalIdModel.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; + +namespace AppleBatch_June.Model +{ + public class IntervalIdModel + { + public string appleId { get; set; } + + public string applePwd { get; set; } + + public int state { get; set; } + + public string msg { get; set; } + + public List intervalCarts { get; set; } + } +} diff --git a/AppleBatch_June.Model/IpInfoModel.cs b/AppleBatch_June.Model/IpInfoModel.cs new file mode 100644 index 0000000..10773b5 --- /dev/null +++ b/AppleBatch_June.Model/IpInfoModel.cs @@ -0,0 +1,11 @@ +namespace AppleBatch_June.Model +{ + public class IpInfoModel + { + public string ip { get; set; } + + public string country { get; set; } + + public string isp { get; set; } + } +} diff --git a/AppleBatch_June.Model/Listconfig.cs b/AppleBatch_June.Model/Listconfig.cs new file mode 100644 index 0000000..124c5b3 --- /dev/null +++ b/AppleBatch_June.Model/Listconfig.cs @@ -0,0 +1,19 @@ +using System; + +namespace AppleBatch_June.Model +{ + public class Listconfig + { + public int id { get; set; } + + public string code { get; set; } + + public string name { get; set; } + + public string value { get; set; } + + public DateTime addTime { get; set; } + + public int state { get; set; } + } +} diff --git a/AppleBatch_June.Model/Listtype.cs b/AppleBatch_June.Model/Listtype.cs new file mode 100644 index 0000000..09533ec --- /dev/null +++ b/AppleBatch_June.Model/Listtype.cs @@ -0,0 +1,19 @@ +using System; + +namespace AppleBatch_June.Model +{ + public class Listtype + { + public int id { get; set; } + + public string code { get; set; } + + public string name { get; set; } + + public DateTime addTime { get; set; } + + public int state { get; set; } + + public int consNum { get; set; } + } +} diff --git a/AppleBatch_June.Model/LoginAppleInfo.cs b/AppleBatch_June.Model/LoginAppleInfo.cs new file mode 100644 index 0000000..0aefb04 --- /dev/null +++ b/AppleBatch_June.Model/LoginAppleInfo.cs @@ -0,0 +1,466 @@ +namespace AppleBatch_June.Model +{ + public class LoginAppleInfo + { + public class Person + { + public Reachableatoptions reachableAtOptions { get; set; } + + public Primaryaddress primaryAddress { get; set; } + + public Name name { get; set; } + } + + public class Reachableatoptions + { + public Primaryemailaddress primaryEmailAddress { get; set; } + } + + public class Contactinformationoptions + { + public Option[] options { get; set; } + } + + public class Option + { + public string type { get; set; } + } + + public class Appleid + { + public string name { get; set; } + + public string formattedAccountName { get; set; } + + public string accountName { get; set; } + + public bool editable { get; set; } + + public string obfuscatedAppleId { get; set; } + + public string domain { get; set; } + } + + public class Primaryemailaddress + { + public object createdDate { get; set; } + } + + public class Vettingstatus + { + public string type { get; set; } + + public Updateddate updatedDate { get; set; } + + public bool vetted { get; set; } + + public bool pending { get; set; } + + public bool notVetted { get; set; } + } + + public class Updateddate + { + public Offset offset { get; set; } + + public Zone zone { get; set; } + + public int hour { get; set; } + + public int minute { get; set; } + + public int second { get; set; } + + public int nano { get; set; } + + public int year { get; set; } + + public string month { get; set; } + + public int dayOfMonth { get; set; } + + public string dayOfWeek { get; set; } + + public int dayOfYear { get; set; } + + public int monthValue { get; set; } + + public Chronology chronology { get; set; } + } + + public class Offset + { + public int totalSeconds { get; set; } + + public string id { get; set; } + + public Rules rules { get; set; } + } + + public class Rules + { + public bool fixedOffset { get; set; } + + public object[] transitions { get; set; } + + public object[] transitionRules { get; set; } + } + + public class Zone + { + public int totalSeconds { get; set; } + + public string id { get; set; } + + public Rules1 rules { get; set; } + } + + public class Rules1 + { + public bool fixedOffset { get; set; } + + public object[] transitions { get; set; } + + public object[] transitionRules { get; set; } + } + + public class Chronology + { + public string calendarType { get; set; } + + public string id { get; set; } + } + + public class Createddate + { + public Offset1 offset { get; set; } + + public Zone1 zone { get; set; } + + public int hour { get; set; } + + public int minute { get; set; } + + public int second { get; set; } + + public int nano { get; set; } + + public int year { get; set; } + + public string month { get; set; } + + public int dayOfMonth { get; set; } + + public string dayOfWeek { get; set; } + + public int dayOfYear { get; set; } + + public int monthValue { get; set; } + + public Chronology1 chronology { get; set; } + } + + public class Offset1 + { + public int totalSeconds { get; set; } + + public string id { get; set; } + + public Rules2 rules { get; set; } + } + + public class Rules2 + { + public bool fixedOffset { get; set; } + + public object[] transitions { get; set; } + + public object[] transitionRules { get; set; } + } + + public class Zone1 + { + public int totalSeconds { get; set; } + + public string id { get; set; } + + public Rules3 rules { get; set; } + } + + public class Rules3 + { + public bool fixedOffset { get; set; } + + public object[] transitions { get; set; } + + public object[] transitionRules { get; set; } + } + + public class Chronology1 + { + public string calendarType { get; set; } + + public string id { get; set; } + } + + public class Updatedate + { + public Offset2 offset { get; set; } + + public Zone2 zone { get; set; } + + public int hour { get; set; } + + public int minute { get; set; } + + public int second { get; set; } + + public int nano { get; set; } + + public int year { get; set; } + + public string month { get; set; } + + public int dayOfMonth { get; set; } + + public string dayOfWeek { get; set; } + + public int dayOfYear { get; set; } + + public int monthValue { get; set; } + + public Chronology2 chronology { get; set; } + } + + public class Offset2 + { + public int totalSeconds { get; set; } + + public string id { get; set; } + + public Rules4 rules { get; set; } + } + + public class Rules4 + { + public bool fixedOffset { get; set; } + + public object[] transitions { get; set; } + + public object[] transitionRules { get; set; } + } + + public class Zone2 + { + public int totalSeconds { get; set; } + + public string id { get; set; } + + public Rules5 rules { get; set; } + } + + public class Rules5 + { + public bool fixedOffset { get; set; } + + public object[] transitions { get; set; } + + public object[] transitionRules { get; set; } + } + + public class Chronology2 + { + public string calendarType { get; set; } + + public string id { get; set; } + } + + public class Primaryaddress + { + public string countryName { get; set; } + } + + public class Stateprovince + { + public string code { get; set; } + + public string name { get; set; } + } + + public class Stateprovince1 + { + public string code { get; set; } + + public string name { get; set; } + } + + public class Primaryemailaddress1 + { + public int id { get; set; } + + public string type { get; set; } + + public string address { get; set; } + + public string addressPrefix { get; set; } + + public string addressSuffix { get; set; } + + public Vettingstatus1 vettingStatus { get; set; } + + public bool vetted { get; set; } + + public bool isEmailSameAsAccountName { get; set; } + } + + public class Vettingstatus1 + { + public string type { get; set; } + + public Updateddate1 updatedDate { get; set; } + + public bool vetted { get; set; } + + public bool pending { get; set; } + + public bool notVetted { get; set; } + } + + public class Updateddate1 + { + public Offset3 offset { get; set; } + + public Zone3 zone { get; set; } + + public int hour { get; set; } + + public int minute { get; set; } + + public int second { get; set; } + + public int nano { get; set; } + + public int year { get; set; } + + public string month { get; set; } + + public int dayOfMonth { get; set; } + + public string dayOfWeek { get; set; } + + public int dayOfYear { get; set; } + + public int monthValue { get; set; } + + public Chronology3 chronology { get; set; } + } + + public class Offset3 + { + public int totalSeconds { get; set; } + + public string id { get; set; } + + public Rules6 rules { get; set; } + } + + public class Rules6 + { + public bool fixedOffset { get; set; } + + public object[] transitions { get; set; } + + public object[] transitionRules { get; set; } + } + + public class Zone3 + { + public int totalSeconds { get; set; } + + public string id { get; set; } + + public Rules7 rules { get; set; } + } + + public class Rules7 + { + public bool fixedOffset { get; set; } + + public object[] transitions { get; set; } + + public object[] transitionRules { get; set; } + } + + public class Chronology3 + { + public string calendarType { get; set; } + + public string id { get; set; } + } + + public class Name + { + public bool middleNameRequired { get; set; } + + public string middleName { get; set; } + + public string firstName { get; set; } + + public string lastName { get; set; } + } + + public class Security + { + public string birthday { get; set; } + + public string rescueEmail { get; set; } = ""; + + } + + public class Passwordpolicy + { + } + + public class Question + { + public int number { get; set; } + + public string question { get; set; } + + public int id { get; set; } + } + + public class Preferences + { + public string preferredLanguage { get; set; } + + public Marketingpreferences marketingPreferences { get; set; } + + public Privacypreferences privacyPreferences { get; set; } + } + + public class Marketingpreferences + { + public bool appleUpdates { get; set; } + + public bool iTunesUpdates { get; set; } + + public bool appleNews { get; set; } + + public bool appleMusic { get; set; } + } + + public class Privacypreferences + { + public bool allowDeviceDiagnosticsAndUsage { get; set; } + + public bool allowShareThirdPartyDevelopers { get; set; } + + public bool allowICloudDataAnalytics { get; set; } + } + + public Person person { get; set; } + + public Security security { get; set; } + } +} diff --git a/AppleBatch_June.Model/LoginErrorModel.cs b/AppleBatch_June.Model/LoginErrorModel.cs new file mode 100644 index 0000000..cb31e20 --- /dev/null +++ b/AppleBatch_June.Model/LoginErrorModel.cs @@ -0,0 +1,14 @@ +namespace AppleBatch_June.Model +{ + public class LoginErrorModel + { + public class Serviceerror + { + public string code { get; set; } + + public string message { get; set; } + } + + public Serviceerror[] serviceErrors { get; set; } + } +} diff --git a/AppleBatch_June.Model/ManagePayment.cs b/AppleBatch_June.Model/ManagePayment.cs new file mode 100644 index 0000000..8e2bdf8 --- /dev/null +++ b/AppleBatch_June.Model/ManagePayment.cs @@ -0,0 +1,753 @@ +namespace AppleBatch_June.Model +{ + public class ManagePayment + { + public class Primarypaymentmethod + { + public string absoluteImagePath { get; set; } + + public string absoluteImagePath2x { get; set; } + + public string number { get; set; } + + public int? expirationMonth { get; set; } + + public int? expirationYear { get; set; } + + public NameOnCard nameOnCard { get; set; } + + public bool weChatPay { get; set; } + + public string partnerLogin { get; set; } + + public string paymentMethodName { get; set; } + + public string paymentMethodDetail { get; set; } + + public Phonenumber phoneNumber { get; set; } + + public Ownername ownerName { get; set; } + + public string taxId { get; set; } + + public Billingaddress billingAddress { get; set; } + + public string paymentAccountCountryCode { get; set; } + + public bool stackAware { get; set; } + + public bool applePayPayment { get; set; } + + public bool card { get; set; } + + public Paymentmethodoption paymentMethodOption { get; set; } + + public bool imageSupported { get; set; } + + public string imagePath2x { get; set; } + + public bool alipay { get; set; } + + public bool paymentSupported { get; set; } + + public bool none { get; set; } + + public bool carrierBilling { get; set; } + + public bool expirationSupported { get; set; } + + public string obfuscatedPhoneNumber { get; set; } + + public bool familyCard { get; set; } + + public bool payPal { get; set; } + + public bool ideal { get; set; } + + public bool kakaoPay { get; set; } + + public bool appleCard { get; set; } + + public bool appleCash { get; set; } + + public bool applePay { get; set; } + + public bool deprecated { get; set; } + + public string type { get; set; } + + public string imagePath { get; set; } + + public int id { get; set; } + } + + public class Phonenumber + { + public string areaCode { get; set; } = ""; + + + public string numberWithoutAreaCode { get; set; } + + public string number { get; set; } + + public string countryCode { get; set; } + + public bool vetted { get; set; } + + public string countryDialCode { get; set; } + + public bool northAmericaDisplayFormat { get; set; } + + public bool sameAsAppleId { get; set; } + + public string fullNumberWithCountryPrefix { get; set; } + + public string fullNumberWithoutCountryPrefix { get; set; } + + public string rawNumber { get; set; } + + public bool northAmericaDialCode { get; set; } + + public bool northAmericaPhone { get; set; } + + public string countryCodeAsString { get; set; } + + public string type { get; set; } + + public bool trusted { get; set; } + } + + public class Ownername + { + public string firstName { get; set; } + + public string lastName { get; set; } + + public bool lastNameFirstOrderingRequired { get; set; } + + public bool noSpaceRequiredInName { get; set; } + + public string fullPronounceName { get; set; } + + public string fullName { get; set; } + } + + public class NameOnCard + { + public string firstName { get; set; } + + public string lastName { get; set; } + + public bool lastNameFirstOrderingRequired { get; set; } + + public bool noSpaceRequiredInName { get; set; } + + public string fullPronounceName { get; set; } + + public string fullName { get; set; } + } + + public class Billingaddress + { + public bool defaultAddress { get; set; } + + public bool stateProvinceInvalid { get; set; } + + public string countryCode { get; set; } + + public string stateProvinceCode { get; set; } + + public string postalCode { get; set; } = ""; + + + public string stateProvinceName { get; set; } + + public string city { get; set; } + + public string line1 { get; set; } + + public string line2 { get; set; } = ""; + + + public string suburb { get; set; } = ""; + + + public string county { get; set; } = ""; + + + public Stateprovince stateProvince { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool shipping { get; set; } + + public bool japanese { get; set; } + + public bool korean { get; set; } + + public string[] formattedAddress { get; set; } + + public bool primary { get; set; } + + public string fullAddress { get; set; } + + public Stateprovince1[] stateProvinces { get; set; } + + public string countryName { get; set; } + + public bool preferred { get; set; } + + public string id { get; set; } + } + + public class Stateprovince + { + public string code { get; set; } + + public string name { get; set; } + } + + public class Stateprovince1 + { + public string code { get; set; } + + public string name { get; set; } + } + + public class Paymentmethodoption + { + public string name { get; set; } + } + + public class Currentpaymentoption + { + public Option option { get; set; } + } + + public class Option + { + public string name { get; set; } + + public string displayName { get; set; } + } + + public class Addressfeatures + { + public string countryCode { get; set; } + + public bool zipCodeLabelRequired { get; set; } + + public Supportedcountry[] supportedCountries { get; set; } + + public Stateprovinceoption[] stateProvinceOptions { get; set; } + + public bool allowChangeCountry { get; set; } + + public bool unionPaySupported { get; set; } + } + + public class Supportedcountry + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + + public Phonenumberformat phoneNumberFormat { get; set; } + + public Stateprovince2[] stateProvinces { get; set; } + } + + public class Phonenumberformat + { + public string format { get; set; } + + public int[] formatDigitRegions { get; set; } + + public int minDigitLength { get; set; } + + public int maxDigitLength { get; set; } + + public string countryCode { get; set; } + + public string countryDialCode { get; set; } + + public string countryCode2 { get; set; } + } + + public class Stateprovince2 + { + public string code { get; set; } + + public string name { get; set; } + } + + public class Stateprovinceoption + { + public string code { get; set; } + + public string name { get; set; } + } + + public class Addressformat + { + public Fields fields { get; set; } + + public Sections sections { get; set; } + } + + public class Fields + { + public Firstname firstName { get; set; } + + public Lastname lastName { get; set; } + + public Line1 line1 { get; set; } + + public Line2 line2 { get; set; } + + public Line3 line3 { get; set; } + + public City city { get; set; } + + public Stateprovince3 stateProvince { get; set; } + + public Postalcode postalCode { get; set; } + + public Country country { get; set; } + + public Phonecountrydialcode phoneCountryDialCode { get; set; } + + public Phonenumber1 phoneNumber { get; set; } + + public Paymenttype paymentType { get; set; } + + public Creditcardnumber creditCardNumber { get; set; } + + public Creditcardexpirationmonth creditCardExpirationMonth { get; set; } + + public Creditcardexpirationyear creditCardExpirationYear { get; set; } + + public Creditverificationnumber creditVerificationNumber { get; set; } + + public Company company { get; set; } + } + + public class Firstname + { + public string id { get; set; } + + public string type { get; set; } + + public bool required { get; set; } + + public string title { get; set; } + + public string placeholder { get; set; } + } + + public class Lastname + { + public string id { get; set; } + + public string type { get; set; } + + public bool required { get; set; } + + public string title { get; set; } + + public string placeholder { get; set; } + } + + public class Line1 + { + public string id { get; set; } + + public string type { get; set; } + + public bool required { get; set; } + + public string title { get; set; } + + public string placeholder { get; set; } + } + + public class Line2 + { + public string id { get; set; } + + public string type { get; set; } + + public bool required { get; set; } + + public string title { get; set; } + + public string placeholder { get; set; } + } + + public class Line3 + { + public string id { get; set; } + + public string type { get; set; } + + public bool required { get; set; } + + public string title { get; set; } + + public string placeholder { get; set; } + } + + public class City + { + public string id { get; set; } + + public string type { get; set; } + + public bool required { get; set; } + + public string title { get; set; } + + public string placeholder { get; set; } + } + + public class Stateprovince3 + { + public string id { get; set; } + + public string type { get; set; } + + public bool required { get; set; } + + public string title { get; set; } + + public string placeholder { get; set; } + + public Value[] values { get; set; } + } + + public class Value + { + public string name { get; set; } + + public string title { get; set; } + } + + public class Postalcode + { + public string id { get; set; } + + public string type { get; set; } + + public bool required { get; set; } + + public string title { get; set; } + + public string placeholder { get; set; } + } + + public class Country + { + public string id { get; set; } + + public string type { get; set; } + + public bool required { get; set; } + + public string title { get; set; } + } + + public class Phonecountrydialcode + { + public string id { get; set; } + + public string type { get; set; } + + public bool required { get; set; } + + public string title { get; set; } + + public string placeholder { get; set; } + } + + public class Phonenumber1 + { + public string id { get; set; } + + public string type { get; set; } + + public bool required { get; set; } + + public string title { get; set; } + + public string placeholder { get; set; } + } + + public class Paymenttype + { + public string id { get; set; } + + public string type { get; set; } + + public bool required { get; set; } + + public string title { get; set; } + + public Value1[] values { get; set; } + } + + public class Value1 + { + public string name { get; set; } + + public string title { get; set; } + } + + public class Creditcardnumber + { + public string id { get; set; } + + public string type { get; set; } + + public bool required { get; set; } + + public string title { get; set; } + + public string placeholder { get; set; } + } + + public class Creditcardexpirationmonth + { + public string id { get; set; } + + public string type { get; set; } + + public bool required { get; set; } + + public string title { get; set; } + + public string placeholder { get; set; } + + public Value2[] values { get; set; } + } + + public class Value2 + { + public string name { get; set; } + + public string title { get; set; } + } + + public class Creditcardexpirationyear + { + public string id { get; set; } + + public string type { get; set; } + + public bool required { get; set; } + + public string title { get; set; } + + public string placeholder { get; set; } + + public Value3[] values { get; set; } + } + + public class Value3 + { + public string name { get; set; } + + public string title { get; set; } + } + + public class Creditverificationnumber + { + public string id { get; set; } + + public string type { get; set; } + + public bool required { get; set; } + + public string title { get; set; } + + public string placeholder { get; set; } + } + + public class Company + { + public string id { get; set; } + + public string type { get; set; } + + public bool required { get; set; } + } + + public class Sections + { + public Billingaddress1 billingAddress { get; set; } + + public Name name { get; set; } + + public Address address { get; set; } + + public Phone phone { get; set; } + + public Payment payment { get; set; } + + public Shippingaddress shippingAddress { get; set; } + + public Primaryaddress primaryAddress { get; set; } + } + + public class Billingaddress1 + { + public string id { get; set; } + + public string[][] lines { get; set; } + } + + public class Name + { + public string id { get; set; } + + public string[][] lines { get; set; } + } + + public class Address + { + public string id { get; set; } + + public string[][] lines { get; set; } + } + + public class Phone + { + public string id { get; set; } + + public string[][] lines { get; set; } + } + + public class Payment + { + public string id { get; set; } + + public string[][] lines { get; set; } + } + + public class Shippingaddress + { + public string id { get; set; } + + public string[][] lines { get; set; } + } + + public class Primaryaddress + { + public string id { get; set; } + + public string[][] lines { get; set; } + } + + public class Paymentmethodoption1 + { + public Option1 option { get; set; } + } + + public class Option1 + { + public string name { get; set; } + + public string displayName { get; set; } + } + + public class Countrydialcode + { + public string dialCode { get; set; } + + public string name { get; set; } + + public string displayName { get; set; } + } + + public Primarypaymentmethod primaryPaymentMethod { get; set; } + + public Paymentmethodoption1[] paymentMethodOptions { get; set; } + + public Currentpaymentoption currentPaymentOption { get; set; } + + public Addressfeatures addressFeatures { get; set; } + + public Addressformat addressFormat { get; set; } + + public Countrydialcode[] countryDialCodes { get; set; } + + public bool paymentMethodUpdateAllowed { get; set; } + + public bool familyPaymentUpdateAllowed { get; set; } + + public bool paymentRemovalAllowed { get; set; } + + public string iTunesThickAppAccountSummaryUrl { get; set; } + + public bool supportsPlatformAssets { get; set; } + + public string paymentStatus { get; set; } + + public bool primaryPaymentFamilyPayment { get; set; } + + public bool paymentSupportedInWebButNotCurrentClient { get; set; } + + public bool enableAlipayV2OnPurple { get; set; } + + public bool displayUnsupportedPaymentMessage { get; set; } + + public string primaryCardImagePath { get; set; } + + public string primaryCardImagePath2x { get; set; } + + public string primaryCardImagePath3x { get; set; } + + public string surfImagePath { get; set; } + + public string surfImagePath2x { get; set; } + + public string surfImagePath3x { get; set; } + + public string applePayBadgeImagePath { get; set; } + + public string applePayBadgeImagePath2x { get; set; } + + public string broadwayImagePath { get; set; } + + public string broadwayImagePath2x { get; set; } + + public string broadwayImagePath3x { get; set; } + } +} diff --git a/AppleBatch_June.Model/NasQualifyModel.cs b/AppleBatch_June.Model/NasQualifyModel.cs new file mode 100644 index 0000000..0e5301f --- /dev/null +++ b/AppleBatch_June.Model/NasQualifyModel.cs @@ -0,0 +1,13 @@ +namespace AppleBatch_June.Model +{ + public class NasQualifyModel + { + public string nasQualify { get; set; } + + public string userAgent { get; set; } + + public string clientInfo { get; set; } + + public string postData { get; set; } + } +} diff --git a/AppleBatch_June.Model/NationalList.cs b/AppleBatch_June.Model/NationalList.cs new file mode 100644 index 0000000..24da34b --- /dev/null +++ b/AppleBatch_June.Model/NationalList.cs @@ -0,0 +1,31 @@ +namespace AppleBatch_June.Model +{ + public class NationalList + { + private string _name; + + public string name + { + get + { + return _name; + } + set + { + string[] array = value.Split('-'); + if (array.Length >= 2) + { + _name = array[0].Trim(); + } + else + { + _name = value; + } + } + } + + public string Id { get; set; } + + public PaymentInfo payment { get; set; } + } +} diff --git a/AppleBatch_June.Model/PaymentInfo.cs b/AppleBatch_June.Model/PaymentInfo.cs new file mode 100644 index 0000000..b6ef20d --- /dev/null +++ b/AppleBatch_June.Model/PaymentInfo.cs @@ -0,0 +1,56 @@ +namespace AppleBatch_June.Model +{ + public class PaymentInfo + { + public class Ownername + { + public string firstName { get; set; } + + public string lastName { get; set; } + } + + public class Phonenumber + { + public string areaCode { get; set; } + + public string number { get; set; } + + public string countryCode { get; set; } + } + + public class Billingaddress + { + public string line1 { get; set; } + + public string line2 { get; set; } + + public string line3 { get; set; } + + public string suburb { get; set; } + + public string county { get; set; } + + public string city { get; set; } + + public string countryCode { get; set; } + + public string postalCode { get; set; } + + public string stateProvinceName { get; set; } + } + + public Ownername ownerName { get; set; } + + public Phonenumber phoneNumber { get; set; } + + public Billingaddress billingAddress { get; set; } + + public int id => 1; + + public string webAppend { get; set; } = ""; + + + public string itAppend { get; set; } = ""; + + } +} diff --git a/AppleBatch_June.Model/PaymentList.cs b/AppleBatch_June.Model/PaymentList.cs new file mode 100644 index 0000000..f7fdf67 --- /dev/null +++ b/AppleBatch_June.Model/PaymentList.cs @@ -0,0 +1,723 @@ +namespace AppleBatch_June.Model +{ + public class PaymentList + { + public class Data + { + public string id { get; set; } + + public string type { get; set; } + + public Attributes attributes { get; set; } + } + + public class Attributes + { + public Paymentinfo[] paymentInfos { get; set; } + } + + public class Billinginfoformat + { + public Billinginfoformat1 billingInfoFormat { get; set; } + } + + public class Billinginfoformat1 + { + public Address address { get; set; } + + public Paymentmethods paymentMethods { get; set; } + } + + public class Address + { + public Billinglastname billingLastName { get; set; } + + public Phoneofficenumber phoneOfficeNumber { get; set; } + + public Addressofficialcity addressOfficialCity { get; set; } + + public Phoneofficecountrydialcode phoneOfficeCountryDialCode { get; set; } + + public Addressofficialstateprovince addressOfficialStateProvince { get; set; } + + public Addressofficialcountrycode addressOfficialCountryCode { get; set; } + + public Billingfirstname billingFirstName { get; set; } + + public Addressofficiallinesecond addressOfficialLineSecond { get; set; } + + public Addressofficiallinefirst addressOfficialLineFirst { get; set; } + + public Addressofficialpostalcode addressOfficialPostalCode { get; set; } + + public Addressofficiallinethird addressOfficialLineThird { get; set; } + + public string[][] order { get; set; } + } + + public class Billinglastname + { + public string id { get; set; } + + public string type { get; set; } + + public bool required { get; set; } + + public string value { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + + public string title { get; set; } + } + + public class Phoneofficenumber + { + public string id { get; set; } + + public string type { get; set; } + + public bool required { get; set; } + + public string value { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + + public string title { get; set; } + } + + public class Addressofficialcity + { + public string id { get; set; } + + public string type { get; set; } + + public bool required { get; set; } + + public string value { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + + public string title { get; set; } + } + + public class Phoneofficecountrydialcode + { + public string id { get; set; } + + public string type { get; set; } + + public bool required { get; set; } + + public string placeholder { get; set; } + + public string title { get; set; } + } + + public class Addressofficialstateprovince + { + public string id { get; set; } + + public string type { get; set; } + + public string subType { get; set; } + + public bool required { get; set; } + + public string value { get; set; } + + public Option[] options { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + + public string title { get; set; } + } + + public class Option + { + public string displayName { get; set; } + + public string name { get; set; } + + public string value { get; set; } + + public int selected { get; set; } + + public Extra extra { get; set; } + } + + public class Extra + { + public string romanizedDisplayName { get; set; } + } + + public class Addressofficialcountrycode + { + public string id { get; set; } + + public string type { get; set; } + + public bool required { get; set; } + + public string value { get; set; } + + public string label { get; set; } + + public string title { get; set; } + } + + public class Billingfirstname + { + public string id { get; set; } + + public string type { get; set; } + + public bool required { get; set; } + + public string value { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + + public string title { get; set; } + } + + public class Addressofficiallinesecond + { + public string id { get; set; } + + public string type { get; set; } + + public bool required { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + + public string title { get; set; } + } + + public class Addressofficiallinefirst + { + public string id { get; set; } + + public string type { get; set; } + + public bool required { get; set; } + + public string value { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + + public string title { get; set; } + } + + public class Addressofficialpostalcode + { + public string id { get; set; } + + public string type { get; set; } + + public bool required { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + + public string title { get; set; } + } + + public class Addressofficiallinethird + { + public string id { get; set; } + + public string type { get; set; } + + public bool required { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + + public string title { get; set; } + } + + public class Paymentmethods + { + public Payeaseoption PayEaseOption { get; set; } + + public Creditcardoption creditCardOption { get; set; } + + public string id { get; set; } + + public Wcpyoption WCPYOption { get; set; } + + public string[] order { get; set; } + + public Apwcoption APWCOption { get; set; } + } + + public class Payeaseoption + { + public string id { get; set; } + + public bool required { get; set; } + + public string value { get; set; } + + public string displayName { get; set; } + + public string verboseDisplayName { get; set; } + + public int cvmLength { get; set; } + + public string regexes { get; set; } + + public int ccId { get; set; } + + public bool topUpEnabled { get; set; } + + public bool requiresSms { get; set; } + + public bool canUseForSharedPayment { get; set; } + + public bool topUpOnly { get; set; } + + public Data1 data { get; set; } + + public bool isEnabledForWeb { get; set; } + } + + public class Data1 + { + } + + public class Creditcardoption + { + public Creditcardexpirationmonth creditCardExpirationMonth { get; set; } + + public Creditverificationnumber creditVerificationNumber { get; set; } + + public Creditcardexpirationyear creditCardExpirationYear { get; set; } + + public Creditcardnumber creditCardNumber { get; set; } + + public string displayName { get; set; } + + public Cctypes ccTypes { get; set; } + + public string id { get; set; } + + public string value { get; set; } + + public string[] order { get; set; } + } + + public class Creditcardexpirationmonth + { + public string id { get; set; } + + public bool required { get; set; } + + public Option1[] options { get; set; } + + public string title { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + } + + public class Option1 + { + public string displayName { get; set; } + + public string name { get; set; } + + public string value { get; set; } + + public int selected { get; set; } + + public Extra1 extra { get; set; } + } + + public class Extra1 + { + } + + public class Creditverificationnumber + { + public string id { get; set; } + + public bool required { get; set; } + + public string value { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + } + + public class Creditcardexpirationyear + { + public string id { get; set; } + + public bool required { get; set; } + + public Option2[] options { get; set; } + + public string title { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + } + + public class Option2 + { + public string displayName { get; set; } + + public string name { get; set; } + + public string value { get; set; } + + public int selected { get; set; } + + public Extra2 extra { get; set; } + } + + public class Extra2 + { + } + + public class Creditcardnumber + { + public string id { get; set; } + + public bool required { get; set; } + + public string value { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + } + + public class Cctypes + { + public string id { get; set; } + + public bool required { get; set; } + + public int selectableNumberOfFields { get; set; } + + public Option3[] options { get; set; } + } + + public class Option3 + { + public bool required { get; set; } + + public string value { get; set; } + + public string displayName { get; set; } + + public string verboseDisplayName { get; set; } + + public int cvmLength { get; set; } + + public string regexes { get; set; } + + public int ccId { get; set; } + + public bool topUpEnabled { get; set; } + + public bool requiresSms { get; set; } + + public bool canUseForSharedPayment { get; set; } + + public bool topUpOnly { get; set; } + + public Data2 data { get; set; } + + public bool isEnabledForWeb { get; set; } + } + + public class Data2 + { + } + + public class Wcpyoption + { + public string id { get; set; } + + public bool required { get; set; } + + public string value { get; set; } + + public string displayName { get; set; } + + public string verboseDisplayName { get; set; } + + public int cvmLength { get; set; } + + public string regexes { get; set; } + + public int ccId { get; set; } + + public bool topUpEnabled { get; set; } + + public bool requiresSms { get; set; } + + public bool canUseForSharedPayment { get; set; } + + public bool topUpOnly { get; set; } + + public Data3 data { get; set; } + + public bool isEnabledForWeb { get; set; } + + public string signUpUrl { get; set; } + + public string partnerAppId { get; set; } + + public string version { get; set; } + } + + public class Data3 + { + } + + public class Apwcoption + { + public string id { get; set; } + + public bool required { get; set; } + + public string value { get; set; } + + public string displayName { get; set; } + + public string verboseDisplayName { get; set; } + + public int cvmLength { get; set; } + + public string regexes { get; set; } + + public int ccId { get; set; } + + public string ccSubType { get; set; } + + public bool topUpEnabled { get; set; } + + public bool requiresSms { get; set; } + + public bool canUseForSharedPayment { get; set; } + + public bool topUpOnly { get; set; } + + public Data4 data { get; set; } + + public bool isEnabledForWeb { get; set; } + + public string signUpUrl { get; set; } + + public string partnerAppId { get; set; } + + public string version { get; set; } + } + + public class Data4 + { + public Phoneofficecountrydialcode1 phoneOfficeCountryDialCode { get; set; } + + public Nationalid nationalId { get; set; } + + public Partnerlogin partnerLogin { get; set; } + } + + public class Phoneofficecountrydialcode1 + { + public string id { get; set; } + + public bool required { get; set; } + + public Option4[] options { get; set; } + } + + public class Option4 + { + public string displayName { get; set; } + + public string name { get; set; } + + public string value { get; set; } + + public int selected { get; set; } + + public Extra3 extra { get; set; } + } + + public class Extra3 + { + } + + public class Nationalid + { + public string id { get; set; } + + public string type { get; set; } + + public bool required { get; set; } + + public string placeholder { get; set; } + } + + public class Partnerlogin + { + public string id { get; set; } + + public string type { get; set; } + + public bool required { get; set; } + } + + public class Storefront + { + public string id { get; set; } + + public bool required { get; set; } + + public Defaultstorefront defaultStorefront { get; set; } + + public Activestorefront[] activeStorefronts { get; set; } + } + + public class Defaultstorefront + { + public string displayName { get; set; } + + public string name { get; set; } + + public string value { get; set; } + + public int selected { get; set; } + + public Extra4 extra { get; set; } + + public string storefrontId { get; set; } + } + + public class Extra4 + { + public string countryDialCodeLabel { get; set; } + + public string countryDialCodeValue { get; set; } + } + + public class Activestorefront + { + public string displayName { get; set; } + + public string name { get; set; } + + public string value { get; set; } + + public int selected { get; set; } + + public Extra5 extra { get; set; } + } + + public class Extra5 + { + public string countryDialCodeLabel { get; set; } + + public string countryDialCodeValue { get; set; } + } + + public class Lockstatus + { + public bool isStackLocked { get; set; } + } + + public class Paymentinfo + { + public string creditCardExpirationMonth { get; set; } = ""; + + + public string creditCardExpirationYear { get; set; } = ""; + + + public string paymentId { get; set; } + + public string last4CCDigits { get; set; } + + public string paymentMethodType { get; set; } + + public string translatedDisplayNameForCC { get; set; } + + public bool requiresPSD2Check { get; set; } + + public string partnerLogin { get; set; } + + public Billingaddress billingAddress { get; set; } + + public Phone phone { get; set; } + + public Taxident taxIdent { get; set; } + + public ValidationErrors[] validationErrors { get; set; } + + public string paymentInfoAction { get; set; } + } + + public class ValidationErrors + { + public string errorShortMessage { get; set; } + + public string error { get; set; } + } + + public class Billingaddress + { + public string billingFirstName { get; set; } + + public string billingLastName { get; set; } + + public string addressOfficialLineFirst { get; set; } + + public string addressOfficialCity { get; set; } + + public string addressOfficialStateProvince { get; set; } + + public string addressOfficialCountryCode { get; set; } + + public string addressOfficialLineSecond { get; set; } + + public string addressOfficialPostalCode { get; set; } + } + + public class Phone + { + public string phoneOfficeNumber { get; set; } + + public string phoneOfficeAreaCode { get; set; } + } + + public class Taxident + { + } + + public Data data { get; set; } + } +} diff --git a/AppleBatch_June.Model/PhoneCountries.cs b/AppleBatch_June.Model/PhoneCountries.cs new file mode 100644 index 0000000..aa57bd1 --- /dev/null +++ b/AppleBatch_June.Model/PhoneCountries.cs @@ -0,0 +1,89 @@ +namespace AppleBatch_June.Model +{ + public class PhoneCountries + { + public class Country + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public bool supportPaidAccount { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + + public Phonenumberformat phoneNumberFormat { get; set; } + + public Stateprovince[] stateProvinces { get; set; } + } + + public class Phonenumberformat + { + public string format { get; set; } + + public int[] formatDigitRegions { get; set; } + + public int minDigitLength { get; set; } + + public int maxDigitLength { get; set; } + + public string countryDialCode { get; set; } + + public string countryCode2 { get; set; } + + public string countryCode { get; set; } + } + + public class Stateprovince + { + public string code { get; set; } + + public string name { get; set; } + } + + private static string jonsCountries = "[{\"code\":\"ALB\",\"code2\":\"AL\",\"name\":\"阿尔巴尼亚\",\"dialCode\":\"355\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+355 (阿尔巴尼亚)\"},{\"code\":\"DZA\",\"code2\":\"DZ\",\"name\":\"阿尔及利亚\",\"dialCode\":\"213\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":19,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+213 (阿尔及利亚)\"},{\"code\":\"AFG\",\"code2\":\"AF\",\"name\":\"阿富汗\",\"dialCode\":\"93\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+93 (阿富汗)\"},{\"code\":\"ARG\",\"code2\":\"AR\",\"name\":\"阿根廷\",\"dialCode\":\"54\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+54 (阿根廷)\"},{\"code\":\"ARE\",\"code2\":\"AE\",\"name\":\"阿拉伯联合酋长国\",\"dialCode\":\"971\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":21,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+971 (阿拉伯联合酋长国)\"},{\"code\":\"ABW\",\"code2\":\"AW\",\"name\":\"阿鲁巴\",\"dialCode\":\"297\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+297 (阿鲁巴)\"},{\"code\":\"OMN\",\"code2\":\"OM\",\"name\":\"阿曼\",\"dialCode\":\"968\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+968 (阿曼)\"},{\"code\":\"AZE\",\"code2\":\"AZ\",\"name\":\"阿塞拜疆\",\"dialCode\":\"994\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+994 (阿塞拜疆)\"},{\"code\":\"EGY\",\"code2\":\"EG\",\"name\":\"埃及\",\"dialCode\":\"20\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":21,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+20 (埃及)\"},{\"code\":\"ETH\",\"code2\":\"ET\",\"name\":\"埃塞俄比亚\",\"dialCode\":\"251\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+251 (埃塞俄比亚)\"},{\"code\":\"IRL\",\"code2\":\"IE\",\"name\":\"爱尔兰\",\"dialCode\":\"353\",\"embargoed\":false,\"underAgeLimit\":16,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+353 (爱尔兰)\"},{\"code\":\"EST\",\"code2\":\"EE\",\"name\":\"爱沙尼亚\",\"dialCode\":\"372\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+372 (爱沙尼亚)\"},{\"code\":\"AND\",\"code2\":\"AD\",\"name\":\"安道尔\",\"dialCode\":\"376\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+376 (安道尔)\"},{\"code\":\"AGO\",\"code2\":\"AO\",\"name\":\"安哥拉\",\"dialCode\":\"244\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+244 (安哥拉)\"},{\"code\":\"AIA\",\"code2\":\"AI\",\"name\":\"安圭拉岛\",\"dialCode\":\"1264\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"phoneNumberFormat\":{\"format\":\"xxx-xxxx\",\"formatDigitRegions\":[0,3,4,8],\"minDigitLength\":7,\"maxDigitLength\":7,\"countryDialCode\":\"1264\",\"countryCode2\":\"AI\",\"countryCode\":\"AIA\"},\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+1264 (安圭拉岛)\"},{\"code\":\"ATG\",\"code2\":\"AG\",\"name\":\"安提瓜和巴布达\",\"dialCode\":\"1268\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"phoneNumberFormat\":{\"format\":\"xxx-xxxx\",\"formatDigitRegions\":[0,3,4,8],\"minDigitLength\":7,\"maxDigitLength\":7,\"countryDialCode\":\"1268\",\"countryCode2\":\"AG\",\"countryCode\":\"ATG\"},\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+1268 (安提瓜和巴布达)\"},{\"code\":\"AUT\",\"code2\":\"AT\",\"name\":\"奥地利\",\"dialCode\":\"43\",\"embargoed\":false,\"underAgeLimit\":14,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+43 (奥地利)\"},{\"code\":\"AUS\",\"code2\":\"AU\",\"name\":\"澳大利亚\",\"dialCode\":\"61\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+61 (澳大利亚)\"},{\"code\":\"MAC\",\"code2\":\"MO\",\"name\":\"澳门\",\"dialCode\":\"853\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+853 (澳门)\"},{\"code\":\"BRB\",\"code2\":\"BB\",\"name\":\"巴巴多斯\",\"dialCode\":\"1246\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"phoneNumberFormat\":{\"format\":\"xxx-xxxx\",\"formatDigitRegions\":[0,3,4,8],\"minDigitLength\":7,\"maxDigitLength\":7,\"countryDialCode\":\"1246\",\"countryCode2\":\"BB\",\"countryCode\":\"BRB\"},\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+1246 (巴巴多斯)\"},{\"code\":\"PNG\",\"code2\":\"PG\",\"name\":\"巴布亚新几内亚\",\"dialCode\":\"675\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+675 (巴布亚新几内亚)\"},{\"code\":\"BHS\",\"code2\":\"BS\",\"name\":\"巴哈马\",\"dialCode\":\"1242\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"phoneNumberFormat\":{\"format\":\"xxx-xxxx\",\"formatDigitRegions\":[0,3,4,8],\"minDigitLength\":7,\"maxDigitLength\":7,\"countryDialCode\":\"1242\",\"countryCode2\":\"BS\",\"countryCode\":\"BHS\"},\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+1242 (巴哈马)\"},{\"code\":\"PAK\",\"code2\":\"PK\",\"name\":\"巴基斯坦\",\"dialCode\":\"92\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+92 (巴基斯坦)\"},{\"code\":\"PRY\",\"code2\":\"PY\",\"name\":\"巴拉圭\",\"dialCode\":\"595\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+595 (巴拉圭)\"},{\"code\":\"PSE\",\"code2\":\"PS\",\"name\":\"巴勒斯坦领土\",\"dialCode\":\"970\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+970 (巴勒斯坦领土)\"},{\"code\":\"BHR\",\"code2\":\"BH\",\"name\":\"巴林\",\"dialCode\":\"973\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":21,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+973 (巴林)\"},{\"code\":\"PAN\",\"code2\":\"PA\",\"name\":\"巴拿马\",\"dialCode\":\"507\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+507 (巴拿马)\"},{\"code\":\"BRA\",\"code2\":\"BR\",\"name\":\"巴西\",\"dialCode\":\"55\",\"embargoed\":false,\"underAgeLimit\":16,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+55 (巴西)\"},{\"code\":\"BLR\",\"code2\":\"BY\",\"name\":\"白俄罗斯\",\"dialCode\":\"375\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+375 (白俄罗斯)\"},{\"code\":\"BMU\",\"code2\":\"BM\",\"name\":\"百慕大\",\"dialCode\":\"1441\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+1441 (百慕大)\"},{\"code\":\"BGR\",\"code2\":\"BG\",\"name\":\"保加利亚\",\"dialCode\":\"359\",\"embargoed\":false,\"underAgeLimit\":14,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+359 (保加利亚)\"},{\"code\":\"MNP\",\"code2\":\"MP\",\"name\":\"北马里亚纳群岛\",\"dialCode\":\"1\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+1 (北马里亚纳群岛)\"},{\"code\":\"MKD\",\"code2\":\"MK\",\"name\":\"北马其顿\",\"dialCode\":\"389\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+389 (北马其顿)\"},{\"code\":\"BEN\",\"code2\":\"BJ\",\"name\":\"贝宁\",\"dialCode\":\"229\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+229 (贝宁)\"},{\"code\":\"BEL\",\"code2\":\"BE\",\"name\":\"比利时\",\"dialCode\":\"32\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+32 (比利时)\"},{\"code\":\"ISL\",\"code2\":\"IS\",\"name\":\"冰岛\",\"dialCode\":\"354\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+354 (冰岛)\"},{\"code\":\"BOL\",\"code2\":\"BO\",\"name\":\"玻利维亚\",\"dialCode\":\"591\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":16,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+591 (玻利维亚)\"},{\"code\":\"PRI\",\"code2\":\"PR\",\"name\":\"波多黎各\",\"dialCode\":\"1\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+1 (波多黎各)\"},{\"code\":\"POL\",\"code2\":\"PL\",\"name\":\"波兰\",\"dialCode\":\"48\",\"embargoed\":false,\"underAgeLimit\":16,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+48 (波兰)\"},{\"code\":\"BIH\",\"code2\":\"BA\",\"name\":\"波斯尼亚和黑塞哥维那\",\"dialCode\":\"387\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+387 (波斯尼亚和黑塞哥维那)\"},{\"code\":\"BWA\",\"code2\":\"BW\",\"name\":\"博茨瓦纳\",\"dialCode\":\"267\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+267 (博茨瓦纳)\"},{\"code\":\"BLZ\",\"code2\":\"BZ\",\"name\":\"伯利兹\",\"dialCode\":\"501\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+501 (伯利兹)\"},{\"code\":\"BTN\",\"code2\":\"BT\",\"name\":\"不丹\",\"dialCode\":\"975\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+975 (不丹)\"},{\"code\":\"BFA\",\"code2\":\"BF\",\"name\":\"布基纳法索\",\"dialCode\":\"226\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":20,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+226 (布基纳法索)\"},{\"code\":\"BDI\",\"code2\":\"BI\",\"name\":\"布隆迪\",\"dialCode\":\"257\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+257 (布隆迪)\"},{\"code\":\"GNQ\",\"code2\":\"GQ\",\"name\":\"赤道几内亚\",\"dialCode\":\"240\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+240 (赤道几内亚)\"},{\"code\":\"DNK\",\"code2\":\"DK\",\"name\":\"丹麦\",\"dialCode\":\"45\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+45 (丹麦)\"},{\"code\":\"DEU\",\"code2\":\"DE\",\"name\":\"德国\",\"dialCode\":\"49\",\"embargoed\":false,\"underAgeLimit\":16,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+49 (德国)\"},{\"code\":\"TMP\",\"code2\":\"TP\",\"name\":\"东帝汶\",\"dialCode\":\"670\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+670 (东帝汶)\"},{\"code\":\"TGO\",\"code2\":\"TG\",\"name\":\"多哥\",\"dialCode\":\"228\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+228 (多哥)\"},{\"code\":\"DOM\",\"code2\":\"DO\",\"name\":\"多米尼加共和国\",\"dialCode\":\"1\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+1 (多米尼加共和国)\"},{\"code\":\"DMA\",\"code2\":\"DM\",\"name\":\"多米尼克\",\"dialCode\":\"1767\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"phoneNumberFormat\":{\"format\":\"xxx-xxxx\",\"formatDigitRegions\":[0,3,4,8],\"minDigitLength\":7,\"maxDigitLength\":7,\"countryDialCode\":\"1767\",\"countryCode2\":\"DM\",\"countryCode\":\"DMA\"},\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+1767 (多米尼克)\"},{\"code\":\"RUS\",\"code2\":\"RU\",\"name\":\"俄罗斯\",\"dialCode\":\"7\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+7 (俄罗斯)\"},{\"code\":\"ECU\",\"code2\":\"EC\",\"name\":\"厄瓜多尔\",\"dialCode\":\"593\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+593 (厄瓜多尔)\"},{\"code\":\"ERI\",\"code2\":\"ER\",\"name\":\"厄立特里亚\",\"dialCode\":\"291\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+291 (厄立特里亚)\"},{\"code\":\"FRA\",\"code2\":\"FR\",\"name\":\"法国\",\"dialCode\":\"33\",\"embargoed\":false,\"underAgeLimit\":15,\"minorAgeLimit\":18,\"supportHSA2\":true,\"phoneNumberFormat\":{\"format\":\"xx xx xx xx xx\",\"formatDigitRegions\":[0,2,3,5,6,8,9,11,12,14],\"minDigitLength\":1,\"maxDigitLength\":10,\"countryDialCode\":\"33\",\"countryCode2\":\"FR\",\"countryCode\":\"FRA\"},\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+33 (法国)\"},{\"code\":\"FRO\",\"code2\":\"FO\",\"name\":\"法罗群岛\",\"dialCode\":\"298\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+298 (法罗群岛)\"},{\"code\":\"PYF\",\"code2\":\"PF\",\"name\":\"法属波利尼西亚\",\"dialCode\":\"689\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+689 (法属波利尼西亚)\"},{\"code\":\"GUF\",\"code2\":\"GF\",\"name\":\"法属圭亚那\",\"dialCode\":\"594\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+594 (法属圭亚那)\"},{\"code\":\"PHL\",\"code2\":\"PH\",\"name\":\"菲律宾\",\"dialCode\":\"63\",\"embargoed\":false,\"underAgeLimit\":16,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+63 (菲律宾)\"},{\"code\":\"FIN\",\"code2\":\"FI\",\"name\":\"芬兰\",\"dialCode\":\"358\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+358 (芬兰)\"},{\"code\":\"CPV\",\"code2\":\"CV\",\"name\":\"佛得角\",\"dialCode\":\"238\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+238 (佛得角)\"},{\"code\":\"FLK\",\"code2\":\"FK\",\"name\":\"福克兰群岛\",\"dialCode\":\"500\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+500 (福克兰群岛)\"},{\"code\":\"GMB\",\"code2\":\"GM\",\"name\":\"冈比亚\",\"dialCode\":\"220\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+220 (冈比亚)\"},{\"code\":\"COG\",\"code2\":\"CG\",\"name\":\"刚果共和国\",\"dialCode\":\"242\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+242 (刚果共和国)\"},{\"code\":\"COD\",\"code2\":\"CD\",\"name\":\"刚果民主共和国\",\"dialCode\":\"243\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+243 (刚果民主共和国)\"},{\"code\":\"COL\",\"code2\":\"CO\",\"name\":\"哥伦比亚\",\"dialCode\":\"57\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+57 (哥伦比亚)\"},{\"code\":\"CRI\",\"code2\":\"CR\",\"name\":\"哥斯达黎加\",\"dialCode\":\"506\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+506 (哥斯达黎加)\"},{\"code\":\"GRD\",\"code2\":\"GD\",\"name\":\"格林纳达\",\"dialCode\":\"1473\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"phoneNumberFormat\":{\"format\":\"xxx-xxxx\",\"formatDigitRegions\":[0,3,4,8],\"minDigitLength\":7,\"maxDigitLength\":7,\"countryDialCode\":\"1473\",\"countryCode2\":\"GD\",\"countryCode\":\"GRD\"},\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+1473 (格林纳达)\"},{\"code\":\"GRL\",\"code2\":\"GL\",\"name\":\"格陵兰\",\"dialCode\":\"299\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+299 (格陵兰)\"},{\"code\":\"GEO\",\"code2\":\"GE\",\"name\":\"格鲁吉亚\",\"dialCode\":\"995\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+995 (格鲁吉亚)\"},{\"code\":\"GGY\",\"code2\":\"GG\",\"name\":\"根西岛\",\"dialCode\":\"44\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+44 (根西岛)\"},{\"code\":\"GLP\",\"code2\":\"GP\",\"name\":\"瓜德罗普\",\"dialCode\":\"590\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+590 (瓜德罗普)\"},{\"code\":\"GUM\",\"code2\":\"GU\",\"name\":\"关岛\",\"dialCode\":\"1\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+1 (关岛)\"},{\"code\":\"GUY\",\"code2\":\"GY\",\"name\":\"圭亚那\",\"dialCode\":\"592\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+592 (圭亚那)\"},{\"code\":\"KAZ\",\"code2\":\"KZ\",\"name\":\"哈萨克斯坦\",\"dialCode\":\"7\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+7 (哈萨克斯坦)\"},{\"code\":\"HTI\",\"code2\":\"HT\",\"name\":\"海地\",\"dialCode\":\"509\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+509 (海地)\"},{\"code\":\"KOR\",\"code2\":\"KR\",\"name\":\"韩国\",\"dialCode\":\"82\",\"embargoed\":false,\"underAgeLimit\":14,\"minorAgeLimit\":19,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":true,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+82 (韩国)\"},{\"code\":\"NLD\",\"code2\":\"NL\",\"name\":\"荷兰\",\"dialCode\":\"31\",\"embargoed\":false,\"underAgeLimit\":16,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+31 (荷兰)\"},{\"code\":\"ANT\",\"code2\":\"AN\",\"name\":\"荷属安的列斯\",\"dialCode\":\"599\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+599 (荷属安的列斯)\"},{\"code\":\"SXM\",\"code2\":\"SX\",\"name\":\"荷属圣马丁\",\"dialCode\":\"1\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+1 (荷属圣马丁)\"},{\"code\":\"MNE\",\"code2\":\"ME\",\"name\":\"黑山\",\"dialCode\":\"382\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+382 (黑山)\"},{\"code\":\"HND\",\"code2\":\"HN\",\"name\":\"洪都拉斯\",\"dialCode\":\"504\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":21,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+504 (洪都拉斯)\"},{\"code\":\"KIR\",\"code2\":\"KI\",\"name\":\"基里巴斯\",\"dialCode\":\"686\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+686 (基里巴斯)\"},{\"code\":\"DJI\",\"code2\":\"DJ\",\"name\":\"吉布提\",\"dialCode\":\"253\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+253 (吉布提)\"},{\"code\":\"KGZ\",\"code2\":\"KG\",\"name\":\"吉尔吉斯斯坦\",\"dialCode\":\"996\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+996 (吉尔吉斯斯坦)\"},{\"code\":\"GIN\",\"code2\":\"GN\",\"name\":\"几内亚\",\"dialCode\":\"224\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+224 (几内亚)\"},{\"code\":\"GNB\",\"code2\":\"GW\",\"name\":\"几内亚比绍\",\"dialCode\":\"245\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+245 (几内亚比绍)\"},{\"code\":\"CAN\",\"code2\":\"CA\",\"name\":\"加拿大\",\"dialCode\":\"1\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":19,\"supportHSA2\":true,\"phoneNumberFormat\":{\"format\":\"(xxx) xxx-xxxx\",\"formatDigitRegions\":[1,4,6,9,10,14],\"minDigitLength\":10,\"maxDigitLength\":10,\"countryDialCode\":\"1\",\"countryCode2\":\"CA\",\"countryCode\":\"CAN\"},\"supportPaidAccount\":false,\"stateProvinces\":[{\"code\":\"AB\",\"name\":\"Alberta\"},{\"code\":\"BC\",\"name\":\"British Columbia\"},{\"code\":\"MB\",\"name\":\"Manitoba\"},{\"code\":\"NB\",\"name\":\"New Brunswick\"},{\"code\":\"NF\",\"name\":\"Newfoundland & Labrador\"},{\"code\":\"NS\",\"name\":\"Nova Scotia\"},{\"code\":\"NT\",\"name\":\"Northwest Territories\"},{\"code\":\"NU\",\"name\":\"Nunavut\"},{\"code\":\"ON\",\"name\":\"Ontario\"},{\"code\":\"PE\",\"name\":\"Prince Edward Island\"},{\"code\":\"QC\",\"name\":\"Quebec\"},{\"code\":\"SK\",\"name\":\"Saskatchewan\"},{\"code\":\"YT\",\"name\":\"Yukon\"}],\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":true,\"uk\":false,\"dialCodeDisplay\":\"+1 (加拿大)\"},{\"code\":\"GHA\",\"code2\":\"GH\",\"name\":\"加纳\",\"dialCode\":\"233\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+233 (加纳)\"},{\"code\":\"GAB\",\"code2\":\"GA\",\"name\":\"加蓬\",\"dialCode\":\"241\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+241 (加蓬)\"},{\"code\":\"KHM\",\"code2\":\"KH\",\"name\":\"柬埔寨\",\"dialCode\":\"855\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+855 (柬埔寨)\"},{\"code\":\"CZE\",\"code2\":\"CZ\",\"name\":\"捷克\",\"dialCode\":\"420\",\"embargoed\":false,\"underAgeLimit\":15,\"minorAgeLimit\":18,\"supportHSA2\":true,\"phoneNumberFormat\":{\"format\":\"xxx xxx xxx\",\"formatDigitRegions\":[0,3,4,7,8,11],\"minDigitLength\":9,\"maxDigitLength\":9,\"countryDialCode\":\"420\",\"countryCode2\":\"CZ\",\"countryCode\":\"CZE\"},\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+420 (捷克)\"},{\"code\":\"ZWE\",\"code2\":\"ZW\",\"name\":\"津巴布韦\",\"dialCode\":\"263\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+263 (津巴布韦)\"},{\"code\":\"CMR\",\"code2\":\"CM\",\"name\":\"喀麦隆\",\"dialCode\":\"237\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+237 (喀麦隆)\"},{\"code\":\"QAT\",\"code2\":\"QA\",\"name\":\"卡塔尔\",\"dialCode\":\"974\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+974 (卡塔尔)\"},{\"code\":\"CYM\",\"code2\":\"KY\",\"name\":\"开曼群岛\",\"dialCode\":\"1345\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"phoneNumberFormat\":{\"format\":\"xxx-xxxx\",\"formatDigitRegions\":[0,3,4,8],\"minDigitLength\":7,\"maxDigitLength\":7,\"countryDialCode\":\"1345\",\"countryCode2\":\"KY\",\"countryCode\":\"CYM\"},\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+1345 (开曼群岛)\"},{\"code\":\"COM\",\"code2\":\"KM\",\"name\":\"科摩罗\",\"dialCode\":\"269\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+269 (科摩罗)\"},{\"code\":\"XKS\",\"code2\":\"XK\",\"name\":\"科索沃\",\"dialCode\":\"383\",\"embargoed\":false,\"underAgeLimit\":16,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+383 (科索沃)\"},{\"code\":\"CIV\",\"code2\":\"CI\",\"name\":\"科特迪瓦\",\"dialCode\":\"225\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+225 (科特迪瓦)\"},{\"code\":\"KWT\",\"code2\":\"KW\",\"name\":\"科威特\",\"dialCode\":\"965\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":21,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+965 (科威特)\"},{\"code\":\"HRV\",\"code2\":\"HR\",\"name\":\"克罗地亚\",\"dialCode\":\"385\",\"embargoed\":false,\"underAgeLimit\":16,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+385 (克罗地亚)\"},{\"code\":\"KEN\",\"code2\":\"KE\",\"name\":\"肯尼亚\",\"dialCode\":\"254\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+254 (肯尼亚)\"},{\"code\":\"COK\",\"code2\":\"CK\",\"name\":\"库克群岛\",\"dialCode\":\"682\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+682 (库克群岛)\"},{\"code\":\"CUW\",\"code2\":\"CW\",\"name\":\"库拉索\",\"dialCode\":\"599\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+599 (库拉索)\"},{\"code\":\"LVA\",\"code2\":\"LV\",\"name\":\"拉脱维亚\",\"dialCode\":\"371\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+371 (拉脱维亚)\"},{\"code\":\"LSO\",\"code2\":\"LS\",\"name\":\"莱索托\",\"dialCode\":\"266\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+266 (莱索托)\"},{\"code\":\"LAO\",\"code2\":\"LA\",\"name\":\"老挝\",\"dialCode\":\"856\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+856 (老挝)\"},{\"code\":\"LBN\",\"code2\":\"LB\",\"name\":\"黎巴嫩\",\"dialCode\":\"961\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+961 (黎巴嫩)\"},{\"code\":\"LBR\",\"code2\":\"LR\",\"name\":\"利比里亚\",\"dialCode\":\"231\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+231 (利比里亚)\"},{\"code\":\"LBY\",\"code2\":\"LY\",\"name\":\"利比亚\",\"dialCode\":\"218\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+218 (利比亚)\"},{\"code\":\"LTU\",\"code2\":\"LT\",\"name\":\"立陶宛\",\"dialCode\":\"370\",\"embargoed\":false,\"underAgeLimit\":14,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+370 (立陶宛)\"},{\"code\":\"LIE\",\"code2\":\"LI\",\"name\":\"列支敦士登\",\"dialCode\":\"423\",\"embargoed\":false,\"underAgeLimit\":16,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+423 (列支敦士登)\"},{\"code\":\"REU\",\"code2\":\"RE\",\"name\":\"留尼汪\",\"dialCode\":\"262\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+262 (留尼汪)\"},{\"code\":\"LUX\",\"code2\":\"LU\",\"name\":\"卢森堡\",\"dialCode\":\"352\",\"embargoed\":false,\"underAgeLimit\":16,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+352 (卢森堡)\"},{\"code\":\"RWA\",\"code2\":\"RW\",\"name\":\"卢旺达\",\"dialCode\":\"250\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+250 (卢旺达)\"},{\"code\":\"ROU\",\"code2\":\"RO\",\"name\":\"罗马尼亚\",\"dialCode\":\"40\",\"embargoed\":false,\"underAgeLimit\":16,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+40 (罗马尼亚)\"},{\"code\":\"MDG\",\"code2\":\"MG\",\"name\":\"马达加斯加\",\"dialCode\":\"261\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":21,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+261 (马达加斯加)\"},{\"code\":\"MLT\",\"code2\":\"MT\",\"name\":\"马耳他\",\"dialCode\":\"356\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+356 (马耳他)\"},{\"code\":\"MDV\",\"code2\":\"MV\",\"name\":\"马尔代夫\",\"dialCode\":\"960\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+960 (马尔代夫)\"},{\"code\":\"MWI\",\"code2\":\"MW\",\"name\":\"马拉维\",\"dialCode\":\"265\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":21,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+265 (马拉维)\"},{\"code\":\"MYS\",\"code2\":\"MY\",\"name\":\"马来西亚\",\"dialCode\":\"60\",\"embargoed\":false,\"underAgeLimit\":16,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+60 (马来西亚)\"},{\"code\":\"MLI\",\"code2\":\"ML\",\"name\":\"马里\",\"dialCode\":\"223\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+223 (马里)\"},{\"code\":\"MHL\",\"code2\":\"MH\",\"name\":\"马绍尔群岛\",\"dialCode\":\"692\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+692 (马绍尔群岛)\"},{\"code\":\"MTQ\",\"code2\":\"MQ\",\"name\":\"马提尼克\",\"dialCode\":\"596\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+596 (马提尼克)\"},{\"code\":\"MYT\",\"code2\":\"YT\",\"name\":\"马约特\",\"dialCode\":\"262\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+262 (马约特)\"},{\"code\":\"IMN\",\"code2\":\"IM\",\"name\":\"曼恩岛\",\"dialCode\":\"44\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+44 (曼恩岛)\"},{\"code\":\"MUS\",\"code2\":\"MU\",\"name\":\"毛里求斯\",\"dialCode\":\"230\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+230 (毛里求斯)\"},{\"code\":\"MRT\",\"code2\":\"MR\",\"name\":\"毛里塔尼亚\",\"dialCode\":\"222\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+222 (毛里塔尼亚)\"},{\"code\":\"USA\",\"code2\":\"US\",\"name\":\"美国\",\"dialCode\":\"1\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"phoneNumberFormat\":{\"format\":\"(xxx) xxx-xxxx\",\"formatDigitRegions\":[1,4,6,9,10,14],\"minDigitLength\":10,\"maxDigitLength\":10,\"countryDialCode\":\"1\",\"countryCode2\":\"US\",\"countryCode\":\"USA\"},\"supportPaidAccount\":false,\"stateProvinces\":[{\"code\":\"AL\",\"name\":\"Alabama\"},{\"code\":\"AK\",\"name\":\"Alaska\"},{\"code\":\"AZ\",\"name\":\"Arizona\"},{\"code\":\"AR\",\"name\":\"Arkansas\"},{\"code\":\"AA\",\"name\":\"Armed Forces Americas\"},{\"code\":\"AE\",\"name\":\"Armed Forces Europe\"},{\"code\":\"AP\",\"name\":\"Armed Forces Pacific\"},{\"code\":\"CA\",\"name\":\"California\"},{\"code\":\"CO\",\"name\":\"Colorado\"},{\"code\":\"CT\",\"name\":\"Connecticut\"},{\"code\":\"DC\",\"name\":\"Dist Of Columbia\"},{\"code\":\"DE\",\"name\":\"Delaware\"},{\"code\":\"FL\",\"name\":\"Florida\"},{\"code\":\"GA\",\"name\":\"Georgia\"},{\"code\":\"GU\",\"name\":\"Guam\"},{\"code\":\"HI\",\"name\":\"Hawaii\"},{\"code\":\"IA\",\"name\":\"Iowa\"},{\"code\":\"ID\",\"name\":\"Idaho\"},{\"code\":\"IL\",\"name\":\"Illinois\"},{\"code\":\"IN\",\"name\":\"Indiana\"},{\"code\":\"KS\",\"name\":\"Kansas\"},{\"code\":\"KY\",\"name\":\"Kentucky\"},{\"code\":\"LA\",\"name\":\"Louisiana\"},{\"code\":\"MA\",\"name\":\"Massachusetts\"},{\"code\":\"MD\",\"name\":\"Maryland\"},{\"code\":\"ME\",\"name\":\"Maine\"},{\"code\":\"MI\",\"name\":\"Michigan\"},{\"code\":\"MN\",\"name\":\"Minnesota\"},{\"code\":\"MO\",\"name\":\"Missouri\"},{\"code\":\"MS\",\"name\":\"Mississippi\"},{\"code\":\"MT\",\"name\":\"Montana\"},{\"code\":\"NC\",\"name\":\"North Carolina\"},{\"code\":\"ND\",\"name\":\"North Dakota\"},{\"code\":\"NE\",\"name\":\"Nebraska\"},{\"code\":\"NH\",\"name\":\"New Hampshire\"},{\"code\":\"NJ\",\"name\":\"New Jersey\"},{\"code\":\"NM\",\"name\":\"New Mexico\"},{\"code\":\"NV\",\"name\":\"Nevada\"},{\"code\":\"NY\",\"name\":\"New York\"},{\"code\":\"OH\",\"name\":\"Ohio\"},{\"code\":\"OK\",\"name\":\"Oklahoma\"},{\"code\":\"OR\",\"name\":\"Oregon\"},{\"code\":\"PA\",\"name\":\"Pennsylvania\"},{\"code\":\"PR\",\"name\":\"Puerto Rico\"},{\"code\":\"RI\",\"name\":\"Rhode Island\"},{\"code\":\"SC\",\"name\":\"South Carolina\"},{\"code\":\"SD\",\"name\":\"South Dakota\"},{\"code\":\"TN\",\"name\":\"Tennessee\"},{\"code\":\"TX\",\"name\":\"Texas\"},{\"code\":\"UT\",\"name\":\"Utah\"},{\"code\":\"VA\",\"name\":\"Virginia\"},{\"code\":\"VI\",\"name\":\"Virgin Islands\"},{\"code\":\"VT\",\"name\":\"Vermont\"},{\"code\":\"WA\",\"name\":\"Washington\"},{\"code\":\"WI\",\"name\":\"Wisconsin\"},{\"code\":\"WV\",\"name\":\"West Virginia\"},{\"code\":\"WY\",\"name\":\"Wyoming\"}],\"japan\":false,\"korea\":false,\"usa\":true,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+1 (美国)\"},{\"code\":\"ASM\",\"code2\":\"AS\",\"name\":\"美属萨摩亚\",\"dialCode\":\"1684\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+1684 (美属萨摩亚)\"},{\"code\":\"VIR\",\"code2\":\"VI\",\"name\":\"美属维尔京群岛\",\"dialCode\":\"1\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+1 (美属维尔京群岛)\"},{\"code\":\"MNG\",\"code2\":\"MN\",\"name\":\"蒙古\",\"dialCode\":\"976\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+976 (蒙古)\"},{\"code\":\"MSR\",\"code2\":\"MS\",\"name\":\"蒙特塞拉特\",\"dialCode\":\"1\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":21,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+1 (蒙特塞拉特)\"},{\"code\":\"BGD\",\"code2\":\"BD\",\"name\":\"孟加拉国\",\"dialCode\":\"880\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+880 (孟加拉国)\"},{\"code\":\"PER\",\"code2\":\"PE\",\"name\":\"秘鲁\",\"dialCode\":\"51\",\"embargoed\":false,\"underAgeLimit\":15,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+51 (秘鲁)\"},{\"code\":\"FSM\",\"code2\":\"FM\",\"name\":\"密克罗尼西亚\",\"dialCode\":\"691\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+691 (密克罗尼西亚)\"},{\"code\":\"MMR\",\"code2\":\"MM\",\"name\":\"缅甸\",\"dialCode\":\"95\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+95 (缅甸)\"},{\"code\":\"MDA\",\"code2\":\"MD\",\"name\":\"摩尔多瓦\",\"dialCode\":\"373\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+373 (摩尔多瓦)\"},{\"code\":\"MAR\",\"code2\":\"MA\",\"name\":\"摩洛哥\",\"dialCode\":\"212\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+212 (摩洛哥)\"},{\"code\":\"MCO\",\"code2\":\"MC\",\"name\":\"摩纳哥\",\"dialCode\":\"377\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+377 (摩纳哥)\"},{\"code\":\"MOZ\",\"code2\":\"MZ\",\"name\":\"莫桑比克\",\"dialCode\":\"258\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+258 (莫桑比克)\"},{\"code\":\"MEX\",\"code2\":\"MX\",\"name\":\"墨西哥\",\"dialCode\":\"52\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+52 (墨西哥)\"},{\"code\":\"NAM\",\"code2\":\"NA\",\"name\":\"纳米比亚\",\"dialCode\":\"264\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":21,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+264 (纳米比亚)\"},{\"code\":\"ZAF\",\"code2\":\"ZA\",\"name\":\"南非\",\"dialCode\":\"27\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+27 (南非)\"},{\"code\":\"ATA\",\"code2\":\"AQ\",\"name\":\"南极洲\",\"dialCode\":\"672\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+672 (南极洲)\"},{\"code\":\"NPL\",\"code2\":\"NP\",\"name\":\"尼泊尔\",\"dialCode\":\"977\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+977 (尼泊尔)\"},{\"code\":\"NIC\",\"code2\":\"NI\",\"name\":\"尼加拉瓜\",\"dialCode\":\"505\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":21,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+505 (尼加拉瓜)\"},{\"code\":\"NER\",\"code2\":\"NE\",\"name\":\"尼日尔\",\"dialCode\":\"227\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":21,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+227 (尼日尔)\"},{\"code\":\"NGA\",\"code2\":\"NG\",\"name\":\"尼日利亚\",\"dialCode\":\"234\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+234 (尼日利亚)\"},{\"code\":\"NIU\",\"code2\":\"NU\",\"name\":\"纽埃\",\"dialCode\":\"683\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+683 (纽埃)\"},{\"code\":\"NOR\",\"code2\":\"NO\",\"name\":\"挪威\",\"dialCode\":\"47\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+47 (挪威)\"},{\"code\":\"PLW\",\"code2\":\"PW\",\"name\":\"帕劳\",\"dialCode\":\"680\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+680 (帕劳)\"},{\"code\":\"PCN\",\"code2\":\"PN\",\"name\":\"皮特凯恩\",\"dialCode\":\"870\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+870 (皮特凯恩)\"},{\"code\":\"PRT\",\"code2\":\"PT\",\"name\":\"葡萄牙\",\"dialCode\":\"351\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+351 (葡萄牙)\"},{\"code\":\"JPN\",\"code2\":\"JP\",\"name\":\"日本\",\"dialCode\":\"81\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":20,\"supportHSA2\":true,\"supportPaidAccount\":false,\"stateProvinces\":[{\"code\":\"1\",\"name\":\"Hokkaido\"},{\"code\":\"2\",\"name\":\"Aomori\"},{\"code\":\"3\",\"name\":\"Iwate\"},{\"code\":\"4\",\"name\":\"Miyagi\"},{\"code\":\"5\",\"name\":\"Akita\"},{\"code\":\"6\",\"name\":\"Yamagata\"},{\"code\":\"7\",\"name\":\"Fukushima\"},{\"code\":\"48\",\"name\":\"Ibaraki\"},{\"code\":\"9\",\"name\":\"Tochigi\"},{\"code\":\"10\",\"name\":\"Gunma\"},{\"code\":\"11\",\"name\":\"Saitama\"},{\"code\":\"12\",\"name\":\"Chiba\"},{\"code\":\"13\",\"name\":\"Tokyo\"},{\"code\":\"14\",\"name\":\"Kanagawa\"},{\"code\":\"15\",\"name\":\"Niigata\"},{\"code\":\"16\",\"name\":\"Toyama\"},{\"code\":\"17\",\"name\":\"Ishikawa\"},{\"code\":\"18\",\"name\":\"Fukui\"},{\"code\":\"19\",\"name\":\"Yamanashi\"},{\"code\":\"50\",\"name\":\"Nagano\"},{\"code\":\"21\",\"name\":\"Gifu\"},{\"code\":\"22\",\"name\":\"Shizuoka\"},{\"code\":\"23\",\"name\":\"Aichi\"},{\"code\":\"24\",\"name\":\"Mie\"},{\"code\":\"25\",\"name\":\"Shiga\"},{\"code\":\"26\",\"name\":\"Kyoto\"},{\"code\":\"27\",\"name\":\"Osaka\"},{\"code\":\"28\",\"name\":\"Hyogo\"},{\"code\":\"29\",\"name\":\"Nara\"},{\"code\":\"30\",\"name\":\"Wakayama\"},{\"code\":\"31\",\"name\":\"Tottori\"},{\"code\":\"32\",\"name\":\"Shimane\"},{\"code\":\"33\",\"name\":\"Okayama\"},{\"code\":\"34\",\"name\":\"Hiroshima\"},{\"code\":\"35\",\"name\":\"Yamaguchi\"},{\"code\":\"36\",\"name\":\"Tokushima\"},{\"code\":\"37\",\"name\":\"Kagawa\"},{\"code\":\"38\",\"name\":\"Ehime\"},{\"code\":\"39\",\"name\":\"Kochi\"},{\"code\":\"40\",\"name\":\"Fukuoka\"},{\"code\":\"41\",\"name\":\"Saga\"},{\"code\":\"42\",\"name\":\"Nagasaki\"},{\"code\":\"43\",\"name\":\"Kumamoto\"},{\"code\":\"44\",\"name\":\"Oita\"},{\"code\":\"45\",\"name\":\"Miyazaki\"},{\"code\":\"46\",\"name\":\"Kagoshima\"},{\"code\":\"47\",\"name\":\"Okinawa\"}],\"japan\":true,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+81 (日本)\"},{\"code\":\"SWE\",\"code2\":\"SE\",\"name\":\"瑞典\",\"dialCode\":\"46\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+46 (瑞典)\"},{\"code\":\"CHE\",\"code2\":\"CH\",\"name\":\"瑞士\",\"dialCode\":\"41\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"phoneNumberFormat\":{\"format\":\"xxx xxx xx xx\",\"formatDigitRegions\":[0,3,4,7,8,10,11,13],\"minDigitLength\":1,\"maxDigitLength\":10,\"countryDialCode\":\"41\",\"countryCode2\":\"CH\",\"countryCode\":\"CHE\"},\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+41 (瑞士)\"},{\"code\":\"SLV\",\"code2\":\"SV\",\"name\":\"萨尔瓦多\",\"dialCode\":\"503\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+503 (萨尔瓦多)\"},{\"code\":\"WSM\",\"code2\":\"WS\",\"name\":\"萨摩亚\",\"dialCode\":\"685\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+685 (萨摩亚)\"},{\"code\":\"SRB\",\"code2\":\"RS\",\"name\":\"塞尔维亚\",\"dialCode\":\"381\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+381 (塞尔维亚)\"},{\"code\":\"SLE\",\"code2\":\"SL\",\"name\":\"塞拉利昂\",\"dialCode\":\"232\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":21,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+232 (塞拉利昂)\"},{\"code\":\"SEN\",\"code2\":\"SN\",\"name\":\"塞内加尔\",\"dialCode\":\"221\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+221 (塞内加尔)\"},{\"code\":\"CYP\",\"code2\":\"CY\",\"name\":\"塞浦路斯\",\"dialCode\":\"357\",\"embargoed\":false,\"underAgeLimit\":14,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+357 (塞浦路斯)\"},{\"code\":\"SYC\",\"code2\":\"SC\",\"name\":\"塞舌尔\",\"dialCode\":\"248\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+248 (塞舌尔)\"},{\"code\":\"SAU\",\"code2\":\"SA\",\"name\":\"沙特阿拉伯\",\"dialCode\":\"966\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"phoneNumberFormat\":{\"format\":\"xxxxxxxxx\",\"formatDigitRegions\":[0,9],\"minDigitLength\":9,\"maxDigitLength\":9,\"countryDialCode\":\"966\",\"countryCode2\":\"SA\",\"countryCode\":\"SAU\"},\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+966 (沙特阿拉伯)\"},{\"code\":\"CXR\",\"code2\":\"CX\",\"name\":\"圣诞岛\",\"dialCode\":\"61\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+61 (圣诞岛)\"},{\"code\":\"STP\",\"code2\":\"ST\",\"name\":\"圣多美和普林西比\",\"dialCode\":\"239\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+239 (圣多美和普林西比)\"},{\"code\":\"SHN\",\"code2\":\"SH\",\"name\":\"圣赫勒拿\",\"dialCode\":\"290\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+290 (圣赫勒拿)\"},{\"code\":\"KNA\",\"code2\":\"KN\",\"name\":\"圣基茨和尼维斯\",\"dialCode\":\"1869\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"phoneNumberFormat\":{\"format\":\"xxx-xxxx\",\"formatDigitRegions\":[0,3,4,8],\"minDigitLength\":7,\"maxDigitLength\":7,\"countryDialCode\":\"1869\",\"countryCode2\":\"KN\",\"countryCode\":\"KNA\"},\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+1869 (圣基茨和尼维斯)\"},{\"code\":\"LCA\",\"code2\":\"LC\",\"name\":\"圣卢西亚\",\"dialCode\":\"1758\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"phoneNumberFormat\":{\"format\":\"xxx-xxxx\",\"formatDigitRegions\":[0,3,4,8],\"minDigitLength\":7,\"maxDigitLength\":7,\"countryDialCode\":\"1758\",\"countryCode2\":\"LC\",\"countryCode\":\"LCA\"},\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+1758 (圣卢西亚)\"},{\"code\":\"MAF\",\"code2\":\"MF\",\"name\":\"圣马丁岛\",\"dialCode\":\"1\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+1 (圣马丁岛)\"},{\"code\":\"SMR\",\"code2\":\"SM\",\"name\":\"圣马力诺\",\"dialCode\":\"378\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+378 (圣马力诺)\"},{\"code\":\"SPM\",\"code2\":\"PM\",\"name\":\"圣皮埃尔和密克隆群岛\",\"dialCode\":\"508\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+508 (圣皮埃尔和密克隆群岛)\"},{\"code\":\"VCT\",\"code2\":\"VC\",\"name\":\"圣文森特和格林纳丁斯\",\"dialCode\":\"1784\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"phoneNumberFormat\":{\"format\":\"xxx-xxxx\",\"formatDigitRegions\":[0,3,4,8],\"minDigitLength\":7,\"maxDigitLength\":7,\"countryDialCode\":\"1784\",\"countryCode2\":\"VC\",\"countryCode\":\"VCT\"},\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+1784 (圣文森特和格林纳丁斯)\"},{\"code\":\"LKA\",\"code2\":\"LK\",\"name\":\"斯里兰卡\",\"dialCode\":\"94\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+94 (斯里兰卡)\"},{\"code\":\"SVK\",\"code2\":\"SK\",\"name\":\"斯洛伐克\",\"dialCode\":\"421\",\"embargoed\":false,\"underAgeLimit\":16,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+421 (斯洛伐克)\"},{\"code\":\"SVN\",\"code2\":\"SI\",\"name\":\"斯洛文尼亚\",\"dialCode\":\"386\",\"embargoed\":false,\"underAgeLimit\":16,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+386 (斯洛文尼亚)\"},{\"code\":\"SJM\",\"code2\":\"SJ\",\"name\":\"斯瓦尔巴岛和扬马延岛\",\"dialCode\":\"47\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+47 (斯瓦尔巴岛和扬马延岛)\"},{\"code\":\"SWZ\",\"code2\":\"SZ\",\"name\":\"斯威士兰\",\"dialCode\":\"268\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+268 (斯威士兰)\"},{\"code\":\"SDN\",\"code2\":\"SD\",\"name\":\"苏丹\",\"dialCode\":\"249\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+249 (苏丹)\"},{\"code\":\"SUR\",\"code2\":\"SR\",\"name\":\"苏里南\",\"dialCode\":\"597\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+597 (苏里南)\"},{\"code\":\"SOM\",\"code2\":\"SO\",\"name\":\"索马里\",\"dialCode\":\"252\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+252 (索马里)\"},{\"code\":\"SLB\",\"code2\":\"SB\",\"name\":\"所罗门群岛\",\"dialCode\":\"677\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+677 (所罗门群岛)\"},{\"code\":\"TJK\",\"code2\":\"TJ\",\"name\":\"塔吉克斯坦\",\"dialCode\":\"992\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+992 (塔吉克斯坦)\"},{\"code\":\"TWN\",\"code2\":\"TW\",\"name\":\"台湾\",\"dialCode\":\"886\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":20,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+886 (台湾)\"},{\"code\":\"THA\",\"code2\":\"TH\",\"name\":\"泰国\",\"dialCode\":\"66\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":20,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+66 (泰国)\"},{\"code\":\"TZA\",\"code2\":\"TZ\",\"name\":\"坦桑尼亚\",\"dialCode\":\"255\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+255 (坦桑尼亚)\"},{\"code\":\"TON\",\"code2\":\"TO\",\"name\":\"汤加\",\"dialCode\":\"676\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+676 (汤加)\"},{\"code\":\"TCA\",\"code2\":\"TC\",\"name\":\"特克斯和凯科斯群岛\",\"dialCode\":\"1649\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"phoneNumberFormat\":{\"format\":\"xxx-xxxx\",\"formatDigitRegions\":[0,3,4,8],\"minDigitLength\":7,\"maxDigitLength\":7,\"countryDialCode\":\"1649\",\"countryCode2\":\"TC\",\"countryCode\":\"TCA\"},\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+1649 (特克斯和凯科斯群岛)\"},{\"code\":\"TTO\",\"code2\":\"TT\",\"name\":\"特立尼达和多巴哥\",\"dialCode\":\"1868\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"phoneNumberFormat\":{\"format\":\"xxx-xxxx\",\"formatDigitRegions\":[0,3,4,8],\"minDigitLength\":7,\"maxDigitLength\":7,\"countryDialCode\":\"1868\",\"countryCode2\":\"TT\",\"countryCode\":\"TTO\"},\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+1868 (特立尼达和多巴哥)\"},{\"code\":\"TUN\",\"code2\":\"TN\",\"name\":\"突尼斯\",\"dialCode\":\"216\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+216 (突尼斯)\"},{\"code\":\"TUV\",\"code2\":\"TV\",\"name\":\"图瓦卢\",\"dialCode\":\"688\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+688 (图瓦卢)\"},{\"code\":\"TUR\",\"code2\":\"TR\",\"name\":\"土耳其\",\"dialCode\":\"90\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+90 (土耳其)\"},{\"code\":\"TKM\",\"code2\":\"TM\",\"name\":\"土库曼斯坦\",\"dialCode\":\"993\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+993 (土库曼斯坦)\"},{\"code\":\"TKL\",\"code2\":\"TK\",\"name\":\"托克劳\",\"dialCode\":\"690\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+690 (托克劳)\"},{\"code\":\"WLF\",\"code2\":\"WF\",\"name\":\"瓦利斯群岛和富图纳群岛\",\"dialCode\":\"681\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+681 (瓦利斯群岛和富图纳群岛)\"},{\"code\":\"VUT\",\"code2\":\"VU\",\"name\":\"瓦努阿图\",\"dialCode\":\"678\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+678 (瓦努阿图)\"},{\"code\":\"GTM\",\"code2\":\"GT\",\"name\":\"危地马拉\",\"dialCode\":\"502\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+502 (危地马拉)\"},{\"code\":\"VEN\",\"code2\":\"VE\",\"name\":\"委内瑞拉\",\"dialCode\":\"58\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+58 (委内瑞拉)\"},{\"code\":\"BRN\",\"code2\":\"BN\",\"name\":\"文莱\",\"dialCode\":\"673\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+673 (文莱)\"},{\"code\":\"UGA\",\"code2\":\"UG\",\"name\":\"乌干达\",\"dialCode\":\"256\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+256 (乌干达)\"},{\"code\":\"UKR\",\"code2\":\"UA\",\"name\":\"乌克兰\",\"dialCode\":\"380\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+380 (乌克兰)\"},{\"code\":\"URY\",\"code2\":\"UY\",\"name\":\"乌拉圭\",\"dialCode\":\"598\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+598 (乌拉圭)\"},{\"code\":\"UZB\",\"code2\":\"UZ\",\"name\":\"乌兹别克斯坦\",\"dialCode\":\"998\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+998 (乌兹别克斯坦)\"},{\"code\":\"ESP\",\"code2\":\"ES\",\"name\":\"西班牙\",\"dialCode\":\"34\",\"embargoed\":false,\"underAgeLimit\":14,\"minorAgeLimit\":18,\"supportHSA2\":true,\"phoneNumberFormat\":{\"format\":\"xxx xxx xxx\",\"formatDigitRegions\":[0,3,4,7,8,11],\"minDigitLength\":9,\"maxDigitLength\":9,\"countryDialCode\":\"34\",\"countryCode2\":\"ES\",\"countryCode\":\"ESP\"},\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+34 (西班牙)\"},{\"code\":\"ESH\",\"code2\":\"EH\",\"name\":\"西撒哈拉\",\"dialCode\":\"212\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+212 (西撒哈拉)\"},{\"code\":\"GRC\",\"code2\":\"GR\",\"name\":\"希腊\",\"dialCode\":\"30\",\"embargoed\":false,\"underAgeLimit\":15,\"minorAgeLimit\":18,\"supportHSA2\":true,\"phoneNumberFormat\":{\"format\":\"xxx xxx xxxx\",\"formatDigitRegions\":[0,3,4,7,8,12],\"minDigitLength\":10,\"maxDigitLength\":10,\"countryDialCode\":\"30\",\"countryCode2\":\"GR\",\"countryCode\":\"GRC\"},\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+30 (希腊)\"},{\"code\":\"HKG\",\"code2\":\"HK\",\"name\":\"香港\",\"dialCode\":\"852\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+852 (香港)\"},{\"code\":\"SGP\",\"code2\":\"SG\",\"name\":\"新加坡\",\"dialCode\":\"65\",\"embargoed\":false,\"underAgeLimit\":16,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+65 (新加坡)\"},{\"code\":\"NCL\",\"code2\":\"NC\",\"name\":\"新喀里多尼亚\",\"dialCode\":\"687\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+687 (新喀里多尼亚)\"},{\"code\":\"NZL\",\"code2\":\"NZ\",\"name\":\"新西兰\",\"dialCode\":\"64\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+64 (新西兰)\"},{\"code\":\"HUN\",\"code2\":\"HU\",\"name\":\"匈牙利\",\"dialCode\":\"36\",\"embargoed\":false,\"underAgeLimit\":16,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+36 (匈牙利)\"},{\"code\":\"JAM\",\"code2\":\"JM\",\"name\":\"牙买加\",\"dialCode\":\"1876\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"phoneNumberFormat\":{\"format\":\"xxx-xxxx\",\"formatDigitRegions\":[0,3,4,8],\"minDigitLength\":7,\"maxDigitLength\":7,\"countryDialCode\":\"1876\",\"countryCode2\":\"JM\",\"countryCode\":\"JAM\"},\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+1876 (牙买加)\"},{\"code\":\"ARM\",\"code2\":\"AM\",\"name\":\"亚美尼亚\",\"dialCode\":\"374\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+374 (亚美尼亚)\"},{\"code\":\"YEM\",\"code2\":\"YE\",\"name\":\"也门\",\"dialCode\":\"967\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+967 (也门)\"},{\"code\":\"IRQ\",\"code2\":\"IQ\",\"name\":\"伊拉克\",\"dialCode\":\"964\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+964 (伊拉克)\"},{\"code\":\"ISR\",\"code2\":\"IL\",\"name\":\"以色列\",\"dialCode\":\"972\",\"embargoed\":false,\"underAgeLimit\":14,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+972 (以色列)\"},{\"code\":\"ITA\",\"code2\":\"IT\",\"name\":\"意大利\",\"dialCode\":\"39\",\"embargoed\":false,\"underAgeLimit\":14,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+39 (意大利)\"},{\"code\":\"IND\",\"code2\":\"IN\",\"name\":\"印度\",\"dialCode\":\"91\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"phoneNumberFormat\":{\"format\":\"xxx xxx xxxx\",\"formatDigitRegions\":[0,3,4,7,8,12],\"minDigitLength\":10,\"maxDigitLength\":10,\"countryDialCode\":\"91\",\"countryCode2\":\"IN\",\"countryCode\":\"IND\"},\"supportPaidAccount\":true,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+91 (印度)\"},{\"code\":\"IDN\",\"code2\":\"ID\",\"name\":\"印度尼西亚\",\"dialCode\":\"62\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+62 (印度尼西亚)\"},{\"code\":\"GBR\",\"code2\":\"GB\",\"name\":\"英国\",\"dialCode\":\"44\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":true,\"dialCodeDisplay\":\"+44 (英国)\"},{\"code\":\"VGB\",\"code2\":\"VG\",\"name\":\"英属维尔京群岛\",\"dialCode\":\"1284\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"phoneNumberFormat\":{\"format\":\"xxx-xxxx\",\"formatDigitRegions\":[0,3,4,8],\"minDigitLength\":7,\"maxDigitLength\":7,\"countryDialCode\":\"1284\",\"countryCode2\":\"VG\",\"countryCode\":\"VGB\"},\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+1284 (英属维尔京群岛)\"},{\"code\":\"IOT\",\"code2\":\"IO\",\"name\":\"英属印度洋领地\",\"dialCode\":\"246\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+246 (英属印度洋领地)\"},{\"code\":\"JOR\",\"code2\":\"JO\",\"name\":\"约旦\",\"dialCode\":\"962\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+962 (约旦)\"},{\"code\":\"VNM\",\"code2\":\"VN\",\"name\":\"越南\",\"dialCode\":\"84\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+84 (越南)\"},{\"code\":\"ZMB\",\"code2\":\"ZM\",\"name\":\"赞比亚\",\"dialCode\":\"260\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+260 (赞比亚)\"},{\"code\":\"JEY\",\"code2\":\"JE\",\"name\":\"泽西岛\",\"dialCode\":\"44\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+44 (泽西岛)\"},{\"code\":\"TCD\",\"code2\":\"TD\",\"name\":\"乍得\",\"dialCode\":\"235\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+235 (乍得)\"},{\"code\":\"GIB\",\"code2\":\"GI\",\"name\":\"直布罗陀\",\"dialCode\":\"350\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+350 (直布罗陀)\"},{\"code\":\"CHL\",\"code2\":\"CL\",\"name\":\"智利\",\"dialCode\":\"56\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+56 (智利)\"},{\"code\":\"CAF\",\"code2\":\"CF\",\"name\":\"中非共和国\",\"dialCode\":\"236\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+236 (中非共和国)\"},{\"code\":\"CHN\",\"code2\":\"CN\",\"name\":\"中国大陆\",\"dialCode\":\"86\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"phoneNumberFormat\":{\"format\":\"xxx xxxx xxxx\",\"formatDigitRegions\":[0,3,4,8,9,13],\"minDigitLength\":1,\"maxDigitLength\":11,\"countryDialCode\":\"86\",\"countryCode2\":\"CN\",\"countryCode\":\"CHN\"},\"supportPaidAccount\":true,\"stateProvinces\":[{\"code\":\"110\",\"name\":\"安徽\"},{\"code\":\"10\",\"name\":\"北京\"},{\"code\":\"11\",\"name\":\"重庆\"},{\"code\":\"150\",\"name\":\"福建\"},{\"code\":\"260\",\"name\":\"甘肃\"},{\"code\":\"190\",\"name\":\"广东\"},{\"code\":\"210\",\"name\":\"广西\"},{\"code\":\"220\",\"name\":\"贵州\"},{\"code\":\"200\",\"name\":\"海南\"},{\"code\":\"60\",\"name\":\"河北\"},{\"code\":\"90\",\"name\":\"黑龙江\"},{\"code\":\"180\",\"name\":\"河南\"},{\"code\":\"170\",\"name\":\"湖北\"},{\"code\":\"160\",\"name\":\"湖南\"},{\"code\":\"100\",\"name\":\"江苏\"},{\"code\":\"140\",\"name\":\"江西\"},{\"code\":\"80\",\"name\":\"吉林\"},{\"code\":\"70\",\"name\":\"辽宁\"},{\"code\":\"40\",\"name\":\"内蒙古\"},{\"code\":\"270\",\"name\":\"宁夏\"},{\"code\":\"280\",\"name\":\"青海\"},{\"code\":\"250\",\"name\":\"陕西\"},{\"code\":\"120\",\"name\":\"山东\"},{\"code\":\"20\",\"name\":\"上海\"},{\"code\":\"50\",\"name\":\"山西\"},{\"code\":\"230\",\"name\":\"四川\"},{\"code\":\"30\",\"name\":\"天津\"},{\"code\":\"290\",\"name\":\"新疆\"},{\"code\":\"300\",\"name\":\"西藏\"},{\"code\":\"240\",\"name\":\"云南\"},{\"code\":\"130\",\"name\":\"浙江\"}],\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+86 (中国大陆)\"},{\"code\":\"NRU\",\"code2\":\"NR\",\"name\":\"瑙鲁\",\"dialCode\":\"674\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+674 (瑙鲁)\"},{\"code\":\"FJI\",\"code2\":\"FJ\",\"name\":\"斐济\",\"dialCode\":\"679\",\"embargoed\":false,\"underAgeLimit\":13,\"minorAgeLimit\":18,\"supportHSA2\":true,\"supportPaidAccount\":false,\"japan\":false,\"korea\":false,\"usa\":false,\"canada\":false,\"uk\":false,\"dialCodeDisplay\":\"+679 (斐济)\"}]"; + + private static Country[] singletonObj = null; + + private static object obj = new object(); + + public Country[] countries { get; set; } + + public static Country[] GetCountries() + { + if (singletonObj == null) + { + lock (obj) + { + if (singletonObj == null) + { + singletonObj = Tools.Todejosn(jonsCountries); + } + } + } + return singletonObj; + } + } +} diff --git a/AppleBatch_June.Model/ProxyIpModel.cs b/AppleBatch_June.Model/ProxyIpModel.cs new file mode 100644 index 0000000..1e76aad --- /dev/null +++ b/AppleBatch_June.Model/ProxyIpModel.cs @@ -0,0 +1,20 @@ +using System; + +namespace AppleBatch_June.Model +{ + public class ProxyIpModel + { + public string prixyIp { get; set; } + + public DateTime? expirationTime { get; set; } + + public int type { get; set; } + + public string tunnelProxy { get; set; } + + public int userCount { get; set; } + + public DateTime upTime { get; set; } = DateTime.Now; + + } +} diff --git a/AppleBatch_June.Model/ProxyModel2.cs b/AppleBatch_June.Model/ProxyModel2.cs new file mode 100644 index 0000000..082428c --- /dev/null +++ b/AppleBatch_June.Model/ProxyModel2.cs @@ -0,0 +1,15 @@ +using System; + +namespace AppleBatch_June.Model +{ + public class ProxyModel2 + { + public string prixyIp { get; set; } + + public DateTime applyDate { get; set; } + + public int type { get; set; } + + public string TunnelProxy { get; set; } + } +} diff --git a/AppleBatch_June.Model/PurchaseLineItems.cs b/AppleBatch_June.Model/PurchaseLineItems.cs new file mode 100644 index 0000000..152a7f8 --- /dev/null +++ b/AppleBatch_June.Model/PurchaseLineItems.cs @@ -0,0 +1,19 @@ +namespace AppleBatch_June.Model +{ + public class PurchaseLineItems + { + public string extra { get; set; } + + public string total { get; set; } + + public string title { get; set; } + + public string dataT { get; set; } + + public string currency { get; set; } + + public decimal money { get; set; } + + public string monetary { get; set; } + } +} diff --git a/AppleBatch_June.Model/PurchasesItems.cs b/AppleBatch_June.Model/PurchasesItems.cs new file mode 100644 index 0000000..21bcc9c --- /dev/null +++ b/AppleBatch_June.Model/PurchasesItems.cs @@ -0,0 +1,164 @@ +using System.Text.RegularExpressions; + +namespace AppleBatch_June.Model +{ + internal class PurchasesItems + { + public class Data + { + public string id { get; set; } + + public string type { get; set; } + + public Attributes attributes { get; set; } + } + + public class Attributes + { + public bool disabledstorefront { get; set; } + + public object[] alerts { get; set; } + + public Purchase[] purchases { get; set; } + + public Range range { get; set; } + + public int storefrontid { get; set; } + + public bool iscomplete { get; set; } + + public bool canpaywithstorecreditenabled { get; set; } + + public string paginationtoken { get; set; } + } + + public class Range + { + public string start { get; set; } + + public string displayablerange { get; set; } + } + + public class Purchase + { + private static string pattern = "(\\p{Sc})?"; + + private Regex rgx = new Regex(pattern); + + private string _total; + + public BilledTo billedto { get; set; } + + public long id { get; set; } + + public string invoicedate { get; set; } + + public Item[] items { get; set; } + + public string orderid { get; set; } + + public bool pending { get; set; } + + public string subtotal { get; set; } + + public string tax { get; set; } + + public decimal money { get; set; } + + public string total + { + get + { + return _total; + } + set + { + _total = value; + if (decimal.TryParse(rgx.Replace(value, ""), out var result)) + { + money = result; + } + } + } + + public bool fromemailinvoice { get; set; } + + public bool ischargeback { get; set; } + + public bool showtax { get; set; } + + public bool showsubtotal { get; set; } + + public bool canbeclearedwithstorecredit { get; set; } + } + + public class BilledTo + { + public Address address { get; set; } + + public string email { get; set; } + + public bool isvat { get; set; } + + public string receiptlabel { get; set; } + } + + public class Address + { + public string addressOfficialCity { get; set; } + + public string addressOfficialCountryCode { get; set; } + + public string addressOfficialStateProvince { get; set; } + + public string addressOfficialLineFirst { get; set; } + + public string addressOfficialLineSecond { get; set; } + + public string addressOfficialPostalCode { get; set; } + + public string billingFirstName { get; set; } + + public string billingLastName { get; set; } + } + + public class Item + { + public string kind { get; set; } + + public string displayablekind { get; set; } + + public string artistname { get; set; } + + public string itemid { get; set; } + + public string itemname { get; set; } + + public string itemurl { get; set; } + + public string seller { get; set; } + + public string artworktemplateurl { get; set; } + + public int artworkheight { get; set; } + + public int artworkwidth { get; set; } + + public bool issubscription { get; set; } + + public string price { get; set; } + + public bool partiallyrefunded { get; set; } + + public bool refunded { get; set; } + + public string purchasedate { get; set; } + + public bool isgiftitem { get; set; } + + public string itemtitle { get; set; } + } + + public Data data { get; set; } + } +} diff --git a/AppleBatch_June.Model/RequestState.cs b/AppleBatch_June.Model/RequestState.cs new file mode 100644 index 0000000..d1e2882 --- /dev/null +++ b/AppleBatch_June.Model/RequestState.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Net; +using DotNet.Utilities; + +namespace AppleBatch_June.Model +{ + public class RequestState : IDisposable + { + private const int BUFFER_SIZE = 1024; + + public byte[] BufferRead; + + public List RequestData; + + public HttpWebRequest request; + + public HttpWebResponse response; + + public Stream streamResponse; + + public HttpResult result; + + public HttpItem item; + + private bool m_disposed; + + public RequestState(HttpResult _result, HttpItem _item) + { + BufferRead = new byte[1024]; + RequestData = new List(); + result = _result; + item = _item; + request = null; + streamResponse = null; + } + + public void Dispose() + { + Dispose(disposing: true); + } + + protected virtual void Dispose(bool disposing) + { + if (m_disposed) + { + return; + } + if (disposing) + { + try + { + if (BufferRead != null) + { + Array.Clear(BufferRead, 0, BufferRead.Length); + BufferRead = null; + } + if (RequestData != null) + { + foreach (byte[] requestDatum in RequestData) + { + Array.Clear(requestDatum, 0, requestDatum.Length); + } + RequestData.Clear(); + RequestData = null; + } + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + } + } + m_disposed = true; + } + + ~RequestState() + { + Dispose(disposing: false); + } + + public byte[] getDataBytes() + { + if (RequestData != null && RequestData.Count > 0) + { + byte[] array = new byte[RequestData.Sum((byte[] c) => c.Length)]; + int num = 0; + foreach (byte[] requestDatum in RequestData) + { + foreach (byte b in requestDatum) + { + array[num] = b; + num++; + } + } + if (response.ContentEncoding != null && response.ContentEncoding.Equals("gzip", StringComparison.InvariantCultureIgnoreCase)) + { + using (MemoryStream stream = new MemoryStream(array)) + { + MemoryStream memoryStream = new MemoryStream(); + new GZipStream(stream, CompressionMode.Decompress).CopyTo(memoryStream, 1024); + return memoryStream.ToArray(); + } + } + return array; + } + return null; + } + } +} diff --git a/AppleBatch_June.Model/RequestStreamStae.cs b/AppleBatch_June.Model/RequestStreamStae.cs new file mode 100644 index 0000000..dddc75e --- /dev/null +++ b/AppleBatch_June.Model/RequestStreamStae.cs @@ -0,0 +1,54 @@ +using System; +using System.Net; + +namespace AppleBatch_June.Model +{ + public class RequestStreamStae : IDisposable + { + private bool m_disposed; + + public HttpWebRequest request { get; set; } + + public byte[] buffer { get; set; } + + public bool WriteState { get; set; } = true; + + + public string WriteErrMessage { get; set; } = ""; + + + public void Dispose() + { + Dispose(disposing: true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (m_disposed) + { + return; + } + if (disposing) + { + try + { + if (buffer != null) + { + Array.Clear(buffer, 0, buffer.Length); + } + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + } + } + m_disposed = true; + } + + ~RequestStreamStae() + { + Dispose(disposing: false); + } + } +} diff --git a/AppleBatch_June.Model/RespErrorJson.cs b/AppleBatch_June.Model/RespErrorJson.cs new file mode 100644 index 0000000..131a8aa --- /dev/null +++ b/AppleBatch_June.Model/RespErrorJson.cs @@ -0,0 +1,14 @@ +namespace AppleBatch_June.Model +{ + public class RespErrorJson + { + public class Serviceerror + { + public string code { get; set; } + + public string message { get; set; } + } + + public Serviceerror[] serviceErrors { get; set; } + } +} diff --git a/AppleBatch_June.Model/SecurityUpgradeModel.cs b/AppleBatch_June.Model/SecurityUpgradeModel.cs new file mode 100644 index 0000000..40d9e63 --- /dev/null +++ b/AppleBatch_June.Model/SecurityUpgradeModel.cs @@ -0,0 +1,331 @@ +namespace AppleBatch_June.Model +{ + public class SecurityUpgradeModel + { + public class Account + { + public Person person { get; set; } + + public Security security { get; set; } + } + + public class Person + { + public Primaryaddress primaryAddress { get; set; } + } + + public class Primaryaddress + { + public string countryName { get; set; } + } + + public class Stateprovince + { + public object code { get; set; } + + public string name { get; set; } + } + + public class Stateprovince1 + { + public string code { get; set; } + + public string name { get; set; } + } + + public class Primaryemailaddress + { + public int id { get; set; } + + public string type { get; set; } + + public string address { get; set; } + + public string addressPrefix { get; set; } + + public string addressSuffix { get; set; } + + public Vettingstatus vettingStatus { get; set; } + + public bool isEmailSameAsAccountName { get; set; } + + public bool vetted { get; set; } + } + + public class Vettingstatus + { + public string type { get; set; } + + public bool vetted { get; set; } + + public bool notVetted { get; set; } + + public bool pending { get; set; } + } + + public class Loginhandles + { + public Emailloginhandle[] emailLoginHandles { get; set; } + } + + public class Emailloginhandle + { + public int id { get; set; } + + public string type { get; set; } + + public string address { get; set; } + + public string addressPrefix { get; set; } + + public string addressSuffix { get; set; } + + public Vettingstatus1 vettingStatus { get; set; } + + public bool isEmailSameAsAccountName { get; set; } + + public bool vetted { get; set; } + } + + public class Vettingstatus1 + { + public string type { get; set; } + + public bool vetted { get; set; } + + public bool notVetted { get; set; } + + public bool pending { get; set; } + } + + public class Name + { + public bool middleNameRequired { get; set; } + + public string firstNamePronounce { get; set; } + + public string lastNamePronounce { get; set; } + + public string middleName { get; set; } + + public string firstName { get; set; } + + public string lastName { get; set; } + } + + public class Agelimits + { + public int underAge { get; set; } + + public int minorAge { get; set; } + + public string ageCategory { get; set; } + } + + public class Security + { + public string birthday { get; set; } + } + + public class Passwordpolicy + { + } + + public class Question + { + public int id { get; set; } + + public int number { get; set; } + + public string question { get; set; } + } + + public class Regioncountry + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public Phonenumberformat phoneNumberFormat { get; set; } + + public bool supportPaidAccount { get; set; } + + public Stateprovince2[] stateProvinces { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class Phonenumberformat + { + public string format { get; set; } + + public int[] formatDigitRegions { get; set; } + + public int minDigitLength { get; set; } + + public int maxDigitLength { get; set; } + + public string countryCode { get; set; } + + public string countryDialCode { get; set; } + + public string countryCode2 { get; set; } + } + + public class Stateprovince2 + { + public string code { get; set; } + + public string name { get; set; } + } + + public class Phonenumber + { + public bool sameAsAppleID { get; set; } + + public bool iMessageType { get; set; } + + public bool deviceType { get; set; } + + public bool pacType { get; set; } + + public bool nonFTEU { get; set; } + + public bool complianceType { get; set; } + + public string countryCode { get; set; } + + public bool verified { get; set; } + + public string countryDialCode { get; set; } + + public string pushMode { get; set; } + + public bool vetted { get; set; } + + public bool pending { get; set; } + + public string countryCodeAsString { get; set; } + + public bool appleComplianceType { get; set; } + } + + public class Phonenumber1 + { + public bool sameAsAppleID { get; set; } + + public bool iMessageType { get; set; } + + public bool deviceType { get; set; } + + public bool pacType { get; set; } + + public bool nonFTEU { get; set; } + + public bool complianceType { get; set; } + + public string countryCode { get; set; } + + public bool verified { get; set; } + + public string countryDialCode { get; set; } + + public string pushMode { get; set; } + + public bool vetted { get; set; } + + public bool pending { get; set; } + + public string countryCodeAsString { get; set; } + + public bool appleComplianceType { get; set; } + } + + public class Country + { + public string code { get; set; } + + public string code2 { get; set; } + + public string name { get; set; } + + public string dialCode { get; set; } + + public bool embargoed { get; set; } + + public int underAgeLimit { get; set; } + + public int minorAgeLimit { get; set; } + + public bool supportHSA2 { get; set; } + + public Phonenumberformat1 phoneNumberFormat { get; set; } + + public bool supportPaidAccount { get; set; } + + public Stateprovince3[] stateProvinces { get; set; } + + public bool japan { get; set; } + + public bool korea { get; set; } + + public bool usa { get; set; } + + public bool canada { get; set; } + + public bool uk { get; set; } + + public string dialCodeDisplay { get; set; } + } + + public class Phonenumberformat1 + { + public string format { get; set; } + + public int[] formatDigitRegions { get; set; } + + public int minDigitLength { get; set; } + + public int maxDigitLength { get; set; } + + public string countryCode { get; set; } + + public string countryDialCode { get; set; } + + public string countryCode2 { get; set; } + } + + public class Stateprovince3 + { + public string code { get; set; } + + public string name { get; set; } + } + + public int success { get; set; } + + public Account account { get; set; } + } +} diff --git a/AppleBatch_June.Model/Securitydevices.cs b/AppleBatch_June.Model/Securitydevices.cs new file mode 100644 index 0000000..fcd0d21 --- /dev/null +++ b/AppleBatch_June.Model/Securitydevices.cs @@ -0,0 +1,52 @@ +namespace AppleBatch_June.Model +{ + public class Securitydevices + { + public class Device + { + public string os { get; set; } + + public string osAndVersion { get; set; } + + public string listImageLocation { get; set; } + + public string listImageLocation2x { get; set; } + + public string listImageLocation3x { get; set; } + + public string infoboxImageLocation { get; set; } + + public string infoboxImageLocation2x { get; set; } + + public string infoboxImageLocation3x { get; set; } + + public bool currentDevice { get; set; } + + public bool hasApplePayCards { get; set; } + + public bool hasActiveSurfAccount { get; set; } + + public bool removalPending { get; set; } + + public string deviceDetailUri { get; set; } + + public string deviceDetailHttpMethod { get; set; } + + public string deviceClass { get; set; } + + public string modelName { get; set; } + + public string osVersion { get; set; } + + public string name { get; set; } + + public string id { get; set; } + } + + public Device[] devices { get; set; } + + public string hsa2SignedInDevicesLink { get; set; } + + public bool suppressChangePasswordLink { get; set; } + } +} diff --git a/AppleBatch_June.Model/ServiceAndVitityErrors.cs b/AppleBatch_June.Model/ServiceAndVitityErrors.cs new file mode 100644 index 0000000..6e79b90 --- /dev/null +++ b/AppleBatch_June.Model/ServiceAndVitityErrors.cs @@ -0,0 +1,33 @@ +namespace AppleBatch_June.Model +{ + public class ServiceAndVitityErrors + { + public class Service_Errors + { + public string code { get; set; } + + public string title { get; set; } + + public string message { get; set; } + + public string path { get; set; } + } + + public class Validationerror + { + public string code { get; set; } + + public string title { get; set; } + + public string message { get; set; } + + public string path { get; set; } + } + + public Service_Errors[] service_errors { get; set; } + + public bool hasError { get; set; } + + public Validationerror[] validationErrors { get; set; } + } +} diff --git a/AppleBatch_June.Model/ServiceErrorsModel.cs b/AppleBatch_June.Model/ServiceErrorsModel.cs new file mode 100644 index 0000000..6aa0cfb --- /dev/null +++ b/AppleBatch_June.Model/ServiceErrorsModel.cs @@ -0,0 +1,40 @@ +namespace AppleBatch_June.Model +{ + public class ServiceErrorsModel + { + public class Service_Errors + { + public string code { get; set; } + + public string message { get; set; } + } + + public class ServiceErrors + { + public string code { get; set; } + + public string message { get; set; } + + public bool suppressDismissal { get; set; } + } + + public class Validationerror + { + public string code { get; set; } + + public string title { get; set; } + + public string message { get; set; } + + public string path { get; set; } + } + + public Service_Errors[] service_errors { get; set; } + + public ServiceErrors[] serviceErrors { get; set; } + + public bool hasError { get; set; } + + public Validationerror[] validationErrors { get; set; } + } +} diff --git a/AppleBatch_June.Model/ServiceReddemModel.cs b/AppleBatch_June.Model/ServiceReddemModel.cs new file mode 100644 index 0000000..f5b83b0 --- /dev/null +++ b/AppleBatch_June.Model/ServiceReddemModel.cs @@ -0,0 +1,13 @@ +namespace AppleBatch_June.Model +{ + public class ServiceReddemModel + { + public string errorMessageKey { get; set; } + + public int status { get; set; } + + public string code { get; set; } + + public string msg { get; set; } + } +} diff --git a/AppleBatch_June.Model/ShopBillModel.cs b/AppleBatch_June.Model/ShopBillModel.cs new file mode 100644 index 0000000..8f88122 --- /dev/null +++ b/AppleBatch_June.Model/ShopBillModel.cs @@ -0,0 +1,1646 @@ +namespace AppleBatch_June.Model +{ + public class ShopBillModel + { + public class Head + { + public int status { get; set; } + } + + public class Body + { + public Checkout checkout { get; set; } + } + + public class Meta + { + public string[] l { get; set; } + + public string[] x { get; set; } + + public H h { get; set; } + + public Page page { get; set; } + } + + public class H + { + public string xaosmodelpage { get; set; } + + public string modelVersion { get; set; } + + public string xaosstk { get; set; } + + public string syntax { get; set; } + } + + public class Page + { + public string title { get; set; } + + public Metric metric { get; set; } + + public string metricName { get; set; } + + public string url { get; set; } + + public string htmlUrl { get; set; } + } + + public class Metric + { + public string macroEvents { get; set; } + + public string page { get; set; } + } + + public class Checkout + { + public Billing billing { get; set; } + } + + public class D + { + public string page { get; set; } + + public bool acmiFromBag { get; set; } + + public bool partnerFinanceFromBag { get; set; } + } + + public class Billing + { + public Billingoptions billingOptions { get; set; } + } + + public class D1 + { + public bool displayBarclaysCheckStatusLink { get; set; } + + public string merchantIdentifier { get; set; } + + public bool shouldShowChat { get; set; } + + public string continueLabel { get; set; } + + public bool enableContinue { get; set; } + } + + public class B + { + public Continue _continue { get; set; } + } + + public class Continue + { + public string id { get; set; } + + public Event[] events { get; set; } + } + + public class Event + { + public string on { get; set; } + + public string _do { get; set; } + + public string metric { get; set; } + } + + public class A + { + public Continue1 _continue { get; set; } + + public Applygiftcard applyGiftCard { get; set; } + } + + public class Continue1 + { + public string url { get; set; } + + public bool submit { get; set; } + } + + public class Applygiftcard + { + public string url { get; set; } + + public bool submit { get; set; } + + public bool validate { get; set; } + } + + public class T + { + public Continueaction continueAction { get; set; } + + public Billingcontinueaction billingContinueAction { get; set; } + } + + public class Continueaction + { + public Microevent[] microEvents { get; set; } + + public Macroevents macroEvents { get; set; } + } + + public class Macroevents + { + public string op { get; set; } + + public object[] args { get; set; } + } + + public class Microevent + { + public string key { get; set; } + + public string value { get; set; } + + public string slot { get; set; } + } + + public class Billingcontinueaction + { + public Microevent1[] microEvents { get; set; } + } + + public class Microevent1 + { + public string key { get; set; } + + public object value { get; set; } + + public string slot { get; set; } + } + + public class Billingmessages + { + } + + public class Billingoptions + { + public D2 d { get; set; } + + public Selectedbillingoptions selectedBillingOptions { get; set; } + } + + public class D2 + { + public Option[] options { get; set; } + } + + public class Option + { + public string value { get; set; } + + public bool disabled { get; set; } + + public string disabledMessage { get; set; } + } + + public class B1 + { + public Selectbillingoption selectBillingOption { get; set; } + } + + public class Selectbillingoption + { + public string id { get; set; } + + public string key { get; set; } + + public bool submit { get; set; } + + public Event1[] events { get; set; } + } + + public class Event1 + { + public string on { get; set; } + + public string _do { get; set; } + } + + public class A1 + { + public Selectbillingoptionaction selectBillingOptionAction { get; set; } + } + + public class Selectbillingoptionaction + { + public string url { get; set; } + + public bool submit { get; set; } + + public string module { get; set; } + + public bool validate { get; set; } + } + + public class Displaygroups + { + public string[] c { get; set; } + + public GroupAPPLE_BALANCE groupAPPLE_BALANCE { get; set; } + + public GroupGIFTCARD groupGIFTCARD { get; set; } + + public GroupPAY_IN_FULL groupPAY_IN_FULL { get; set; } + } + + public class GroupAPPLE_BALANCE + { + public D3 d { get; set; } + + public B2 b { get; set; } + + public A2 a { get; set; } + } + + public class D3 + { + public bool enableFinancingCalculatorLink { get; set; } + + public string groupKey { get; set; } + + public string[] options { get; set; } + } + + public class B2 + { + public Viewfinanceoverlay viewFinanceOverlay { get; set; } + } + + public class Viewfinanceoverlay + { + public string id { get; set; } + + public Event2[] events { get; set; } + } + + public class Event2 + { + public string on { get; set; } + + public string _do { get; set; } + + public string metric { get; set; } + } + + public class A2 + { + public Viewfinanceoverlay1 viewFinanceOverlay { get; set; } + } + + public class Viewfinanceoverlay1 + { + public string url { get; set; } + } + + public class GroupGIFTCARD + { + public D4 d { get; set; } + + public B3 b { get; set; } + + public A3 a { get; set; } + } + + public class D4 + { + public bool enableFinancingCalculatorLink { get; set; } + + public string groupKey { get; set; } + + public string[] options { get; set; } + } + + public class B3 + { + public Viewfinanceoverlay2 viewFinanceOverlay { get; set; } + } + + public class Viewfinanceoverlay2 + { + public string id { get; set; } + + public Event3[] events { get; set; } + } + + public class Event3 + { + public string on { get; set; } + + public string _do { get; set; } + + public string metric { get; set; } + } + + public class A3 + { + public Viewfinanceoverlay3 viewFinanceOverlay { get; set; } + } + + public class Viewfinanceoverlay3 + { + public string url { get; set; } + } + + public class GroupPAY_IN_FULL + { + public D5 d { get; set; } + + public B4 b { get; set; } + + public A4 a { get; set; } + } + + public class D5 + { + public bool enableFinancingCalculatorLink { get; set; } + + public string groupKey { get; set; } + + public string header { get; set; } + + public string[] options { get; set; } + } + + public class B4 + { + public Viewfinanceoverlay4 viewFinanceOverlay { get; set; } + } + + public class Viewfinanceoverlay4 + { + public string id { get; set; } + + public Event4[] events { get; set; } + } + + public class Event4 + { + public string on { get; set; } + + public string _do { get; set; } + + public string metric { get; set; } + } + + public class A4 + { + public Viewfinanceoverlay5 viewFinanceOverlay { get; set; } + } + + public class Viewfinanceoverlay5 + { + public string url { get; set; } + } + + public class Selectedbillingoptions + { + public Applebalance appleBalance { get; set; } + } + + public class Applebalance + { + public Applebalanceinput appleBalanceInput { get; set; } + } + + public class Applebalanceinput + { + public D6 d { get; set; } + } + + public class D6 + { + public string amount { get; set; } + + public string availableAppleBalance { get; set; } + } + + public class B5 + { + public Amount amount { get; set; } + + public Applyapplebalance applyAppleBalance { get; set; } + } + + public class Amount + { + public string id { get; set; } + + public string key { get; set; } + + public string name { get; set; } + + public string type { get; set; } + + public int maxLen { get; set; } + + public bool submit { get; set; } + + public Format format { get; set; } + + public P p { get; set; } + } + + public class Format + { + public string inputRegex { get; set; } + + public Block[] blocks { get; set; } + } + + public class Block + { + public int length { get; set; } + + public string start { get; set; } + } + + public class P + { + public Valid valid { get; set; } + } + + public class Valid + { + public If _if { get; set; } + + public Then then { get; set; } + + public Else _else { get; set; } + } + + public class If + { + public string op { get; set; } + + public object[] args { get; set; } + } + + public class Then + { + public string error { get; set; } + } + + public class Else + { + public If1 _if { get; set; } + + public Then1 then { get; set; } + } + + public class If1 + { + public string op { get; set; } + + public Arg[] args { get; set; } + } + + public class Arg + { + public string op { get; set; } + + public object[] args { get; set; } + } + + public class Then1 + { + public string error { get; set; } + } + + public class Applyapplebalance + { + public string id { get; set; } + + public string name { get; set; } + + public Event5[] events { get; set; } + } + + public class Event5 + { + public string on { get; set; } + + public string _do { get; set; } + } + + public class A5 + { + public Addidmsdata addIDMSData { get; set; } + } + + public class Addidmsdata + { + public string url { get; set; } + + public bool submit { get; set; } + } + + public class Giftcard + { + public P1 p { get; set; } + + public string[] c { get; set; } + + public Giftcardinput giftCardInput { get; set; } + } + + public class P1 + { + public bool active { get; set; } + + public bool visible { get; set; } + } + + public class Giftcardinput + { + public D7 d { get; set; } + + public B6 b { get; set; } + + public T1 t { get; set; } + } + + public class D7 + { + public bool _editing { get; set; } + + public string deviceID { get; set; } + + public string giftCard { get; set; } + + public string valuelinkGiftCard { get; set; } + + public bool showValueLinkGiftCardNumber { get; set; } + } + + public class B6 + { + public Clear clear { get; set; } + + public Deviceid deviceID { get; set; } + + public Giftcard1 giftCard { get; set; } + + public Valuelinkgiftcard valuelinkGiftCard { get; set; } + + public Resetfields resetFields { get; set; } + + public Applygiftcard1 applyGiftCard { get; set; } + } + + public class Clear + { + public string id { get; set; } + + public Event6[] events { get; set; } + } + + public class Event6 + { + public string on { get; set; } + + public Do[] _do { get; set; } + } + + public class Do + { + public string set { get; set; } + + public object to { get; set; } + } + + public class Deviceid + { + public string id { get; set; } + + public string key { get; set; } + + public string name { get; set; } + + public bool submit { get; set; } + + public Event7[] events { get; set; } + } + + public class Event7 + { + public string on { get; set; } + + public Do1[] _do { get; set; } + } + + public class Do1 + { + public string set { get; set; } + + public To to { get; set; } + } + + public class To + { + public string op { get; set; } + } + + public class Giftcard1 + { + public string id { get; set; } + + public string key { get; set; } + + public string name { get; set; } + + public string type { get; set; } + + public int maxLen { get; set; } + + public bool submit { get; set; } + + public Format1 format { get; set; } + + public Event8[] events { get; set; } + + public P2 p { get; set; } + } + + public class Format1 + { + public string inputRegex { get; set; } + + public Block1[] blocks { get; set; } + } + + public class Block1 + { + public int length { get; set; } + + public string start { get; set; } + } + + public class P2 + { + public Valid1 valid { get; set; } + } + + public class Valid1 + { + public If2 _if { get; set; } + + public Then2 then { get; set; } + + public Else1 _else { get; set; } + } + + public class If2 + { + public string op { get; set; } + + public Arg1[] args { get; set; } + } + + public class Arg1 + { + public string op { get; set; } + + public object[] args { get; set; } + } + + public class Then2 + { + public string error { get; set; } + } + + public class Else1 + { + public string error { get; set; } + } + + public class Event8 + { + public string on { get; set; } + + public Do2[] _do { get; set; } + } + + public class Do2 + { + public string set { get; set; } + + public To1 to { get; set; } + } + + public class To1 + { + public string get { get; set; } + } + + public class Valuelinkgiftcard + { + public string id { get; set; } + + public string key { get; set; } + + public string name { get; set; } + + public string type { get; set; } + + public int maxLen { get; set; } + + public Format2 format { get; set; } + + public Event9[] events { get; set; } + + public P3 p { get; set; } + } + + public class Format2 + { + public string inputRegex { get; set; } + + public Block2[] blocks { get; set; } + } + + public class Block2 + { + public int length { get; set; } + + public string start { get; set; } + } + + public class P3 + { + public Valid2 valid { get; set; } + } + + public class Valid2 + { + public If3 _if { get; set; } + + public Then3 then { get; set; } + + public Else2 _else { get; set; } + } + + public class If3 + { + public string op { get; set; } + + public Arg2[] args { get; set; } + } + + public class Arg2 + { + public string op { get; set; } + + public object[] args { get; set; } + } + + public class Then3 + { + public string error { get; set; } + } + + public class Else2 + { + public string error { get; set; } + } + + public class Event9 + { + public string on { get; set; } + + public Do3[] _do { get; set; } + } + + public class Do3 + { + public string set { get; set; } + + public To2 to { get; set; } + } + + public class To2 + { + public string get { get; set; } + } + + public class Resetfields + { + public string id { get; set; } + + public Event10[] events { get; set; } + } + + public class Event10 + { + public string on { get; set; } + + public Do4[] _do { get; set; } + + public string metric { get; set; } + } + + public class Do4 + { + public string set { get; set; } + + public bool to { get; set; } + } + + public class Applygiftcard1 + { + public string id { get; set; } + + public Event11[] events { get; set; } + } + + public class Event11 + { + public string on { get; set; } + + public string _do { get; set; } + + public string metric { get; set; } + } + + public class T1 + { + public Entergiftcard enterGiftCard { get; set; } + + public Applygiftcard2 applyGiftCard { get; set; } + } + + public class Entergiftcard + { + public Microevent2[] microEvents { get; set; } + } + + public class Microevent2 + { + public string key { get; set; } + + public string value { get; set; } + + public string slot { get; set; } + } + + public class Applygiftcard2 + { + public Microevent3[] microEvents { get; set; } + } + + public class Microevent3 + { + public string key { get; set; } + + public string value { get; set; } + + public string slot { get; set; } + } + + public class Footnotes + { + public D8 d { get; set; } + } + + public class D8 + { + public bool hasPartnerFinanceInstallment { get; set; } + + public bool isGeoLocationEnabled { get; set; } + + public bool isFlagshipEnable { get; set; } + } + + public class Faq + { + public D9 d { get; set; } + } + + public class D9 + { + public Faq1[] faq { get; set; } + + public string faqTitle { get; set; } + } + + public class Faq1 + { + public string question { get; set; } + + public string answer { get; set; } + } + + public class Companionbar + { + public D10 d { get; set; } + + public string[] c { get; set; } + + public Ordersummary orderSummary { get; set; } + + public Orderdetails orderDetails { get; set; } + } + + public class D10 + { + public bool showCompanionBar { get; set; } + + public bool showSecureCheckoutOverlay { get; set; } + + public string label { get; set; } + + public string amount { get; set; } + } + + public class Ordersummary + { + public D11 d { get; set; } + + public B7 b { get; set; } + + public T2 t { get; set; } + } + + public class D11 + { + public object editBagLink { get; set; } + + public bool showTaxInclusivePrices { get; set; } + + public string continueBagLink { get; set; } + + public string items { get; set; } + + public string total { get; set; } + + public string title { get; set; } + + public bool showEditBag { get; set; } + + public Shipping shipping { get; set; } + + public string editLabel { get; set; } + + public string editLabelA11y { get; set; } + + public string totalNoShip { get; set; } + + public string subtotal { get; set; } + + public bool showBuacMessage { get; set; } + } + + public class Shipping + { + public string cost { get; set; } + + public bool free { get; set; } + + public bool enabled { get; set; } + } + + public class B7 + { + public Editbaglink editBagLink { get; set; } + } + + public class Editbaglink + { + public string id { get; set; } + + public string key { get; set; } + + public Event12[] events { get; set; } + } + + public class Event12 + { + public string on { get; set; } + + public Do5[] _do { get; set; } + + public string metric { get; set; } + } + + public class Do5 + { + public string set { get; set; } + + public bool to { get; set; } + } + + public class T2 + { + public Editbagcompanionbar editBagCompanionBar { get; set; } + } + + public class Editbagcompanionbar + { + public Microevent4[] microEvents { get; set; } + } + + public class Microevent4 + { + public string key { get; set; } + + public string value { get; set; } + + public string slot { get; set; } + + public string feature { get; set; } + } + + public class Orderdetails + { + public D12 d { get; set; } + + public string[] c { get; set; } + + public string view { get; set; } + + public Fulfillmentcompanionbar fulfillmentCompanionBar { get; set; } + + public Shippingcompanionbar shippingCompanionBar { get; set; } + + public Billingcompanionbar billingCompanionBar { get; set; } + + public Reviewcompanionbar reviewCompanionBar { get; set; } + } + + public class D12 + { + public string id { get; set; } + + public string title { get; set; } + } + + public class Fulfillmentcompanionbar + { + public D13 d { get; set; } + + public B8 b { get; set; } + + public A6 a { get; set; } + + public T3 t { get; set; } + + public string[] c { get; set; } + + public Deliverysummary deliverySummary { get; set; } + } + + public class D13 + { + public string label { get; set; } + } + + public class B8 + { + public Edit edit { get; set; } + } + + public class Edit + { + public string id { get; set; } + + public Event13[] events { get; set; } + } + + public class Event13 + { + public string on { get; set; } + + public string _do { get; set; } + + public string metric { get; set; } + } + + public class A6 + { + public Edit1 edit { get; set; } + } + + public class Edit1 + { + public string url { get; set; } + + public bool submit { get; set; } + + public string module { get; set; } + + public bool validate { get; set; } + } + + public class T3 + { + public Change change { get; set; } + } + + public class Change + { + public Microevent5[] microEvents { get; set; } + } + + public class Microevent5 + { + public string key { get; set; } + + public string value { get; set; } + + public string slot { get; set; } + + public string feature { get; set; } + } + + public class Deliverysummary + { + public D14 d { get; set; } + + public B9 b { get; set; } + + public A7 a { get; set; } + + public T4 t { get; set; } + + public string view { get; set; } + } + + public class D14 + { + public string editDeliveryLabelA11y { get; set; } + + public string editDeliveryLabel { get; set; } + + public string id { get; set; } + + public string homeDeliveryDates { get; set; } + + public string homeDeliveryLabel { get; set; } + + public string timeSlot { get; set; } + } + + public class B9 + { + public Edit2 edit { get; set; } + } + + public class Edit2 + { + public string id { get; set; } + + public Event14[] events { get; set; } + } + + public class Event14 + { + public string on { get; set; } + + public string _do { get; set; } + + public string metric { get; set; } + } + + public class A7 + { + public Edit3 edit { get; set; } + } + + public class Edit3 + { + public string url { get; set; } + + public bool submit { get; set; } + + public string module { get; set; } + + public bool validate { get; set; } + } + + public class T4 + { + public Change1 change { get; set; } + } + + public class Change1 + { + public Microevent6[] microEvents { get; set; } + } + + public class Microevent6 + { + public string key { get; set; } + + public string value { get; set; } + + public string slot { get; set; } + + public string feature { get; set; } + } + + public class Shippingcompanionbar + { + public D15 d { get; set; } + + public B10 b { get; set; } + + public A8 a { get; set; } + + public T5 t { get; set; } + + public string[] c { get; set; } + + public Address address { get; set; } + } + + public class D15 + { + public string editLabel { get; set; } + + public string editLabelA11y { get; set; } + + public string label { get; set; } + + public string shipsToLabel { get; set; } + } + + public class B10 + { + public Edit4 edit { get; set; } + } + + public class Edit4 + { + public string id { get; set; } + + public Event15[] events { get; set; } + } + + public class Event15 + { + public string on { get; set; } + + public string _do { get; set; } + + public string metric { get; set; } + } + + public class A8 + { + public Edit5 edit { get; set; } + } + + public class Edit5 + { + public string url { get; set; } + + public bool submit { get; set; } + + public string module { get; set; } + + public bool validate { get; set; } + } + + public class T5 + { + public Change2 change { get; set; } + } + + public class Change2 + { + public Microevent7[] microEvents { get; set; } + } + + public class Microevent7 + { + public string key { get; set; } + + public string value { get; set; } + + public string slot { get; set; } + + public string feature { get; set; } + } + + public class Address + { + public D16 d { get; set; } + } + + public class D16 + { + public bool showLocationConsent { get; set; } + + public string lastName { get; set; } + + public string firstName { get; set; } + + public string mode { get; set; } + + public string street { get; set; } + + public Layout[] layout { get; set; } + } + + public class Layout + { + public Field[][] fields { get; set; } + } + + public class Field + { + public string name { get; set; } + + public string type { get; set; } + + public string label { get; set; } + } + + public class Billingcompanionbar + { + public D17 d { get; set; } + + public B11 b { get; set; } + + public A9 a { get; set; } + + public T6 t { get; set; } + + public P4 p { get; set; } + } + + public class D17 + { + public string editLabel { get; set; } + + public string editLabelA11y { get; set; } + + public string label { get; set; } + + public bool hideDetails { get; set; } + } + + public class B11 + { + public Edit6 edit { get; set; } + } + + public class Edit6 + { + public string id { get; set; } + + public Event16[] events { get; set; } + } + + public class Event16 + { + public string on { get; set; } + + public string _do { get; set; } + + public string metric { get; set; } + } + + public class A9 + { + public Edit7 edit { get; set; } + } + + public class Edit7 + { + public string url { get; set; } + + public bool submit { get; set; } + + public string module { get; set; } + + public bool validate { get; set; } + } + + public class T6 + { + public Change3 change { get; set; } + } + + public class Change3 + { + public Microevent8[] microEvents { get; set; } + } + + public class Microevent8 + { + public string key { get; set; } + + public string value { get; set; } + + public string slot { get; set; } + + public string feature { get; set; } + } + + public class P4 + { + public bool enabled { get; set; } + } + + public class Reviewcompanionbar + { + public D18 d { get; set; } + + public B12 b { get; set; } + + public A10 a { get; set; } + + public T7 t { get; set; } + + public P5 p { get; set; } + } + + public class D18 + { + public string editLabel { get; set; } + + public string editLabelA11y { get; set; } + + public string label { get; set; } + } + + public class B12 + { + public Edit8 edit { get; set; } + } + + public class Edit8 + { + public string id { get; set; } + + public Event17[] events { get; set; } + } + + public class Event17 + { + public string on { get; set; } + + public string _do { get; set; } + + public string metric { get; set; } + } + + public class A10 + { + public Edit9 edit { get; set; } + } + + public class Edit9 + { + public string url { get; set; } + + public bool submit { get; set; } + + public string module { get; set; } + + public bool validate { get; set; } + } + + public class T7 + { + public Change4 change { get; set; } + } + + public class Change4 + { + public Microevent9[] microEvents { get; set; } + } + + public class Microevent9 + { + public string key { get; set; } + + public string value { get; set; } + + public string slot { get; set; } + + public string feature { get; set; } + } + + public class P5 + { + public bool enabled { get; set; } + } + + public class Locationconsent + { + public D19 d { get; set; } + + public B13 b { get; set; } + + public A11 a { get; set; } + } + + public class D19 + { + public bool locationConsent { get; set; } + } + + public class B13 + { + public Locationconsent1 locationConsent { get; set; } + } + + public class Locationconsent1 + { + public string id { get; set; } + + public string key { get; set; } + + public bool submit { get; set; } + + public Event18[] events { get; set; } + } + + public class Event18 + { + public string on { get; set; } + + public string _do { get; set; } + } + + public class A11 + { + public LocationConsent locationconsent { get; set; } + } + + public class LocationConsent + { + public string url { get; set; } + + public bool submit { get; set; } + + public bool validate { get; set; } + } + + public class Session + { + public D20 d { get; set; } + + public B14 b { get; set; } + + public A12 a { get; set; } + } + + public class D20 + { + public string alertMs { get; set; } + + public string interactionMs { get; set; } + + public string expiredUrl { get; set; } + + public bool canExtend { get; set; } + + public string ttl { get; set; } + + public string extendSessionUrl { get; set; } + + public object extendSession { get; set; } + } + + public class B14 + { + public Extendsession extendSession { get; set; } + } + + public class Extendsession + { + public string id { get; set; } + + public string key { get; set; } + + public Event19[] events { get; set; } + } + + public class Event19 + { + public string on { get; set; } + + public string _do { get; set; } + } + + public class A12 + { + public Extendsession1 extendSession { get; set; } + } + + public class Extendsession1 + { + public string url { get; set; } + } + + public Body body { get; set; } + } +} diff --git a/AppleBatch_June.Model/StackablePaymentInfos.cs b/AppleBatch_June.Model/StackablePaymentInfos.cs new file mode 100644 index 0000000..e6d9690 --- /dev/null +++ b/AppleBatch_June.Model/StackablePaymentInfos.cs @@ -0,0 +1,786 @@ +namespace AppleBatch_June.Model +{ + public class StackablePaymentInfos + { + public class Data + { + public string id { get; set; } + + public string type { get; set; } + + public Attributes attributes { get; set; } + } + + public class Attributes + { + public Paymentinfo[] paymentInfos { get; set; } + + public Shippingaddressinfo shippingAddressInfo { get; set; } + } + + public class Billinginfoformat + { + public Billinginfoformat1 billingInfoFormat { get; set; } + } + + public class Billinginfoformat1 + { + public Address address { get; set; } + + public Phonenumber phoneNumber { get; set; } + + public Paymentmethods paymentMethods { get; set; } + + public Name name { get; set; } + + public Shippingaddress shippingAddress { get; set; } + } + + public class Address + { + public Addressofficialcity addressOfficialCity { get; set; } + + public Addressofficialstateprovince addressOfficialStateProvince { get; set; } + + public Addressofficialcountrycode addressOfficialCountryCode { get; set; } + + public Addressofficiallinesecond addressOfficialLineSecond { get; set; } + + public Addressofficiallinefirst addressOfficialLineFirst { get; set; } + + public Addressofficialpostalcode addressOfficialPostalCode { get; set; } + + public string[] order { get; set; } + } + + public class Addressofficialcity + { + public string id { get; set; } + + public string value { get; set; } + + public bool required { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + } + + public class Addressofficialstateprovince + { + public string id { get; set; } + + public string value { get; set; } + + public bool required { get; set; } + + public Option[] options { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + } + + public class Option + { + public string displayName { get; set; } + + public string name { get; set; } + + public string value { get; set; } + + public int selected { get; set; } + + public Extra extra { get; set; } + } + + public class Extra + { + public string romanizedDisplayName { get; set; } + } + + public class Addressofficialcountrycode + { + public string id { get; set; } + + public string value { get; set; } + + public bool required { get; set; } + + public string label { get; set; } + } + + public class Addressofficiallinesecond + { + public string id { get; set; } + + public string value { get; set; } + + public bool required { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + } + + public class Addressofficiallinefirst + { + public string id { get; set; } + + public string value { get; set; } + + public bool required { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + } + + public class Addressofficialpostalcode + { + public string id { get; set; } + + public string value { get; set; } + + public bool required { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + } + + public class Phonenumber + { + public Phoneofficenumber phoneOfficeNumber { get; set; } + + public Phoneofficeareacode phoneOfficeAreaCode { get; set; } + + public string[] order { get; set; } + } + + public class Phoneofficenumber + { + public string id { get; set; } + + public bool required { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + } + + public class Phoneofficeareacode + { + public string id { get; set; } + + public string value { get; set; } + + public bool required { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + } + + public class Paymentmethods + { + public Creditcardoption creditCardOption { get; set; } + + public string id { get; set; } + + public string[] order { get; set; } + + public Paypaloption PayPalOption { get; set; } + + public Noneoption NoneOption { get; set; } + } + + public class Creditcardoption + { + public Creditcardexpirationmonth creditCardExpirationMonth { get; set; } + + public Creditverificationnumber creditVerificationNumber { get; set; } + + public Creditcardexpirationyear creditCardExpirationYear { get; set; } + + public Creditcardnumber creditCardNumber { get; set; } + + public string displayName { get; set; } + + public Cctypes ccTypes { get; set; } + + public string id { get; set; } + + public string value { get; set; } + + public string[] order { get; set; } + } + + public class Creditcardexpirationmonth + { + public string id { get; set; } + + public bool required { get; set; } + + public Option1[] options { get; set; } + + public string title { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + } + + public class Option1 + { + public string displayName { get; set; } + + public string name { get; set; } + + public string value { get; set; } + + public int selected { get; set; } + + public Extra1 extra { get; set; } + } + + public class Extra1 + { + } + + public class Creditverificationnumber + { + public string id { get; set; } + + public string value { get; set; } + + public bool required { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + } + + public class Creditcardexpirationyear + { + public string id { get; set; } + + public bool required { get; set; } + + public Option2[] options { get; set; } + + public string title { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + } + + public class Option2 + { + public string displayName { get; set; } + + public string name { get; set; } + + public string value { get; set; } + + public int selected { get; set; } + + public Extra2 extra { get; set; } + } + + public class Extra2 + { + } + + public class Creditcardnumber + { + public string id { get; set; } + + public string value { get; set; } + + public bool required { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + } + + public class Cctypes + { + public string id { get; set; } + + public bool required { get; set; } + + public Option3[] options { get; set; } + + public int selectableNumberOfFields { get; set; } + } + + public class Option3 + { + public string value { get; set; } + + public bool required { get; set; } + + public string displayName { get; set; } + + public string verboseDisplayName { get; set; } + + public int cvmLength { get; set; } + + public string regexes { get; set; } + + public int ccId { get; set; } + + public bool topUpEnabled { get; set; } + + public bool requiresSms { get; set; } + + public bool canUseForSharedPayment { get; set; } + + public bool topUpOnly { get; set; } + + public bool isEnabledForWeb { get; set; } + + public Data1 data { get; set; } + + public Cardart cardArt { get; set; } + } + + public class Data1 + { + } + + public class Cardart + { + public string path2x { get; set; } + + public string path3x { get; set; } + } + + public class Paypaloption + { + public string id { get; set; } + + public string value { get; set; } + + public bool required { get; set; } + + public string displayName { get; set; } + + public string verboseDisplayName { get; set; } + + public int cvmLength { get; set; } + + public string regexes { get; set; } + + public int ccId { get; set; } + + public bool topUpEnabled { get; set; } + + public bool requiresSms { get; set; } + + public bool canUseForSharedPayment { get; set; } + + public bool topUpOnly { get; set; } + + public bool isEnabledForWeb { get; set; } + + public Data2 data { get; set; } + + public Cardart1 cardArt { get; set; } + + public string version { get; set; } + + public string signUpUrl { get; set; } + + public string partnerAppId { get; set; } + } + + public class Data2 + { + } + + public class Cardart1 + { + public string path2x { get; set; } + + public string path3x { get; set; } + } + + public class Noneoption + { + public string id { get; set; } + + public string value { get; set; } + + public bool required { get; set; } + + public string displayName { get; set; } + + public string verboseDisplayName { get; set; } + + public int cvmLength { get; set; } + + public string regexes { get; set; } + + public int ccId { get; set; } + + public bool topUpEnabled { get; set; } + + public bool requiresSms { get; set; } + + public bool canUseForSharedPayment { get; set; } + + public bool topUpOnly { get; set; } + + public bool isEnabledForWeb { get; set; } + + public Data3 data { get; set; } + + public Cardart2 cardArt { get; set; } + } + + public class Data3 + { + public bool isTaxIdRequired { get; set; } + } + + public class Cardart2 + { + } + + public class Name + { + public Billinglastname billingLastName { get; set; } + + public Billingfirstname billingFirstName { get; set; } + + public string[] order { get; set; } + } + + public class Billinglastname + { + public string id { get; set; } + + public string value { get; set; } + + public bool required { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + } + + public class Billingfirstname + { + public string id { get; set; } + + public string value { get; set; } + + public bool required { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + } + + public class Shippingaddress + { + public Addressshippingcity addressShippingCity { get; set; } + + public Addressshippinglinefirst addressShippingLineFirst { get; set; } + + public Shippinglastname shippingLastName { get; set; } + + public Addressshippingstateprovince addressShippingStateProvince { get; set; } + + public Shippingfirstname shippingFirstName { get; set; } + + public Addressshippinglinesecond addressShippingLineSecond { get; set; } + + public Addressshippingcountrycode addressShippingCountryCode { get; set; } + + public string[] order { get; set; } + + public Addressshippingcompanyname addressShippingCompanyName { get; set; } + } + + public class Addressshippingcity + { + public string id { get; set; } + + public string value { get; set; } + + public bool required { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + } + + public class Addressshippinglinefirst + { + public string id { get; set; } + + public string value { get; set; } + + public bool required { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + } + + public class Shippinglastname + { + public string id { get; set; } + + public string value { get; set; } + + public bool required { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + } + + public class Addressshippingstateprovince + { + public string id { get; set; } + + public string value { get; set; } + + public bool required { get; set; } + + public Option4[] options { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + } + + public class Option4 + { + public string displayName { get; set; } + + public string name { get; set; } + + public string value { get; set; } + + public int selected { get; set; } + + public Extra3 extra { get; set; } + } + + public class Extra3 + { + public string romanizedDisplayName { get; set; } + } + + public class Shippingfirstname + { + public string id { get; set; } + + public string value { get; set; } + + public bool required { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + } + + public class Addressshippinglinesecond + { + public string id { get; set; } + + public string value { get; set; } + + public bool required { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + } + + public class Addressshippingcountrycode + { + public string id { get; set; } + + public string value { get; set; } + + public bool required { get; set; } + + public string label { get; set; } + } + + public class Addressshippingcompanyname + { + public string id { get; set; } + + public string value { get; set; } + + public bool required { get; set; } + + public string placeholder { get; set; } + + public string label { get; set; } + } + + public class Storefront + { + public string id { get; set; } + + public bool required { get; set; } + + public Defaultstorefront defaultStorefront { get; set; } + + public Activestorefront[] activeStorefronts { get; set; } + } + + public class Defaultstorefront + { + public string displayName { get; set; } + + public string name { get; set; } + + public string value { get; set; } + + public int selected { get; set; } + + public Extra4 extra { get; set; } + + public string storefrontId { get; set; } + } + + public class Extra4 + { + public string countryDialCodeLabel { get; set; } + + public string countryDialCodeValue { get; set; } + } + + public class Activestorefront + { + public string displayName { get; set; } + + public string name { get; set; } + + public string value { get; set; } + + public int selected { get; set; } + + public Extra5 extra { get; set; } + } + + public class Extra5 + { + public string countryDialCodeLabel { get; set; } + + public string countryDialCodeValue { get; set; } + } + + public class Shippingaddressinfo + { + public ShippingaddressinfoModel shippingAddressInfo { get; set; } + } + + public class ShippingaddressinfoModel + { + public string addressShippingCountryCode { get; set; } + + public string addressShippingCity { get; set; } + + public string shippingLastName { get; set; } + + public string addressShippingCompanyName { get; set; } + + public string addressShippingPostalCode { get; set; } + + public string addressShippingLineFirst { get; set; } + + public string shippingFirstName { get; set; } + + public string addressShippingStateProvince { get; set; } + + public string addressShippingLineSecond { get; set; } + } + + public class Lockstatus + { + public bool isStackLocked { get; set; } + } + + public class Accounthistorysnapshot + { + } + + public class Commercecontext + { + public bool shouldUseLegacyAddPayment { get; set; } + } + + public class Clientuicontrols + { + public Addfundscontrols addFundsControls { get; set; } + + public Promocontrols promoControls { get; set; } + } + + public class Addfundscontrols + { + public bool shouldDisplay { get; set; } + } + + public class Promocontrols + { + public bool appleCardPromoDisplay { get; set; } + } + + public class Paymentinfo + { + public Billingaddress billingAddress { get; set; } + } + + public class Billingaddress + { + public string billingFirstName { get; set; } + + public string billingLastName { get; set; } + + public string addressOfficialLineFirst { get; set; } + + public string addressOfficialLineSecond { get; set; } + + public string addressOfficialCity { get; set; } + + public string addressOfficialPostalCode { get; set; } + + public string addressOfficialStateProvince { get; set; } + + public string addressOfficialCountryCode { get; set; } + } + + public class Phone + { + public string phoneOfficeAreaCode { get; set; } + + public string phoneOfficeNumber { get; set; } + } + + public class Taxident + { + } + + public class Recommendation + { + public string type { get; set; } + + public bool shouldSurfaceToUser { get; set; } + } + + public Data data { get; set; } + } +} diff --git a/AppleBatch_June.Model/SubscriptionModel.cs b/AppleBatch_June.Model/SubscriptionModel.cs new file mode 100644 index 0000000..b2a0d86 --- /dev/null +++ b/AppleBatch_June.Model/SubscriptionModel.cs @@ -0,0 +1,49 @@ +namespace AppleBatch_June.Model +{ + public class SubscriptionModel + { + public class Userinfo + { + public bool shouldShowSharingMasterToggle { get; set; } + + public bool isInFamily { get; set; } + } + + public class Subscription + { + public long expirationTimestamp { get; set; } + + public Latestplan latestPlan { get; set; } + + public bool isAutoRenewEnabled { get; set; } + + public string subscriptionId { get; set; } + + public string publicationName { get; set; } + } + + public class Latestplan + { + public string paidPrice { get; set; } + } + + public class Coverart + { + public int width { get; set; } + + public string backgroundColor { get; set; } + + public bool isTemplateUrl { get; set; } + + public string url { get; set; } + + public string platform { get; set; } + + public int height { get; set; } + } + + public Subscription[] subscriptions { get; set; } + + public int status { get; set; } + } +} diff --git a/AppleBatch_June.Model/TaskRunModel.cs b/AppleBatch_June.Model/TaskRunModel.cs new file mode 100644 index 0000000..6bb4816 --- /dev/null +++ b/AppleBatch_June.Model/TaskRunModel.cs @@ -0,0 +1,9 @@ +namespace AppleBatch_June.Model +{ + public class TaskRunModel + { + public string guid { get; set; } + + public bool isRuning { get; set; } + } +} diff --git a/AppleBatch_June.Model/Verification.cs b/AppleBatch_June.Model/Verification.cs new file mode 100644 index 0000000..9ff71d3 --- /dev/null +++ b/AppleBatch_June.Model/Verification.cs @@ -0,0 +1,22 @@ +namespace AppleBatch_June.Model +{ + internal class Verification + { + public class Appleid + { + public string name { get; set; } + + public string formattedAccountName { get; set; } + } + + public bool requiresFamilyOrganizerApproval { get; set; } + + public Appleid appleID { get; set; } + + public string verificationId { get; set; } + + public bool canGenerateNew { get; set; } + + public int length { get; set; } + } +} diff --git a/AppleBatch_June.Model/VerificationCodeConfig.cs b/AppleBatch_June.Model/VerificationCodeConfig.cs new file mode 100644 index 0000000..08f3938 --- /dev/null +++ b/AppleBatch_June.Model/VerificationCodeConfig.cs @@ -0,0 +1,21 @@ +namespace AppleBatch_June.Model +{ + public class VerificationCodeConfig + { + public string WinTitle { get; set; } + + public string content { get; set; } + + public string tipMag { get; set; } + + public int verifiLength { get; set; } + + public VerificationCodeConfig() + { + WinTitle = "需要输入双重验证码"; + tipMag = "请输入显示的验证码"; + content = "--"; + verifiLength = 6; + } + } +} diff --git a/AppleBatch_June.Model/WebLoginInitRespon.cs b/AppleBatch_June.Model/WebLoginInitRespon.cs new file mode 100644 index 0000000..9f257b4 --- /dev/null +++ b/AppleBatch_June.Model/WebLoginInitRespon.cs @@ -0,0 +1,15 @@ +namespace AppleBatch_June.Model +{ + public class WebLoginInitRespon + { + public int iteration { get; set; } + + public string salt { get; set; } + + public string protocol { get; set; } + + public string b { get; set; } + + public string c { get; set; } + } +} diff --git a/AppleBatch_June.Model/getiTunesAccountPaymentInfoPostModel.cs b/AppleBatch_June.Model/getiTunesAccountPaymentInfoPostModel.cs new file mode 100644 index 0000000..f217ba0 --- /dev/null +++ b/AppleBatch_June.Model/getiTunesAccountPaymentInfoPostModel.cs @@ -0,0 +1,11 @@ +namespace AppleBatch_June.Model +{ + public class getiTunesAccountPaymentInfoPostModel + { + public string organizerDSID { get; set; } + + public string userAction { get; set; } + + public bool sendSMS { get; set; } + } +} diff --git a/AppleBatch_June.Model/iCloudVerifyCVVModel.cs b/AppleBatch_June.Model/iCloudVerifyCVVModel.cs new file mode 100644 index 0000000..f604658 --- /dev/null +++ b/AppleBatch_June.Model/iCloudVerifyCVVModel.cs @@ -0,0 +1,15 @@ +namespace AppleBatch_June.Model +{ + public class iCloudVerifyCVVModel + { + public string creditCardId { get; set; } + + public string creditCardLastFourDigits { get; set; } + + public string securityCode { get; set; } + + public string verificationType { get; set; } + + public string billingType { get; set; } + } +} diff --git a/AppleBatch_June.Properties/Resources.cs b/AppleBatch_June.Properties/Resources.cs new file mode 100644 index 0000000..08ff5d8 --- /dev/null +++ b/AppleBatch_June.Properties/Resources.cs @@ -0,0 +1,71 @@ +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Drawing; +using System.Globalization; +using System.IO; +using System.Resources; +using System.Runtime.CompilerServices; + +namespace AppleBatch_June.Properties +{ + [GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] + [DebuggerNonUserCode] + [CompilerGenerated] + internal class Resources + { + private static ResourceManager resourceMan; + + private static CultureInfo resourceCulture; + + [EditorBrowsable(EditorBrowsableState.Advanced)] + internal static ResourceManager ResourceManager + { + get + { + if (resourceMan == null) + { + resourceMan = new ResourceManager("AppleBatch_June.Properties.Resources", typeof(Resources).Assembly); + } + return resourceMan; + } + } + + [EditorBrowsable(EditorBrowsableState.Advanced)] + internal static CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + + internal static Bitmap _111 => (Bitmap)ResourceManager.GetObject("111", resourceCulture); + + internal static Bitmap _57fb35f0371a6 => (Bitmap)ResourceManager.GetObject("57fb35f0371a6", resourceCulture); + + internal static byte[] AppleDB => (byte[])ResourceManager.GetObject("AppleDB", resourceCulture); + + internal static string key => ResourceManager.GetString("key", resourceCulture); + + internal static byte[] localizedResources => (byte[])ResourceManager.GetObject("localizedResources", resourceCulture); + + internal static byte[] nationalData => (byte[])ResourceManager.GetObject("nationalData", resourceCulture); + + internal static string province => ResourceManager.GetString("province", resourceCulture); + + internal static Bitmap QQ截图20190402024037 => (Bitmap)ResourceManager.GetObject("QQ截图20190402024037", resourceCulture); + + internal static UnmanagedMemoryStream UI_success => ResourceManager.GetStream("UI_success", resourceCulture); + + internal static Bitmap weChat => (Bitmap)ResourceManager.GetObject("weChat", resourceCulture); + + internal Resources() + { + } + } +} diff --git a/AppleBatch_June.Properties/Settings.cs b/AppleBatch_June.Properties/Settings.cs new file mode 100644 index 0000000..7e49c06 --- /dev/null +++ b/AppleBatch_June.Properties/Settings.cs @@ -0,0 +1,55 @@ +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Configuration; +using System.Diagnostics; +using System.Runtime.CompilerServices; + +namespace AppleBatch_June.Properties +{ + [CompilerGenerated] + [GeneratedCode("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.0.0")] + internal sealed class Settings : ApplicationSettingsBase + { + private static Settings defaultInstance = (Settings)SettingsBase.Synchronized(new Settings()); + + public static Settings Default => defaultInstance; + + [UserScopedSetting] + [DebuggerNonUserCode] + [DefaultSettingValue("False")] + public bool ShowGiftcardBalance + { + get + { + return (bool)this["ShowGiftcardBalance"]; + } + set + { + this["ShowGiftcardBalance"] = value; + } + } + + [UserScopedSetting] + [DebuggerNonUserCode] + [DefaultSettingValue("False")] + public bool HideGiftcardBalanceInfo + { + get + { + return (bool)this["HideGiftcardBalanceInfo"]; + } + set + { + this["HideGiftcardBalanceInfo"] = value; + } + } + + private void SettingChangingEventHandler(object sender, SettingChangingEventArgs e) + { + } + + private void SettingsSavingEventHandler(object sender, CancelEventArgs e) + { + } + } +} diff --git a/AppleBatch_June.SMS/ISms.cs b/AppleBatch_June.SMS/ISms.cs new file mode 100644 index 0000000..ec99bb5 --- /dev/null +++ b/AppleBatch_June.SMS/ISms.cs @@ -0,0 +1,21 @@ +namespace AppleBatch_June.SMS +{ + public interface ISms + { + string smsCountry { get; set; } + + string smsName { get; } + + string smsLink { get; } + + SmsRespon getInfo(); + + SmsRespon getMolieNumber(ref string phone); + + SmsRespon getSms(string phone); + + SmsRespon releasePhone(string phone); + + SmsRespon blackPhone(string phone); + } +} diff --git a/AppleBatch_June.SMS/SMSFactory.cs b/AppleBatch_June.SMS/SMSFactory.cs new file mode 100644 index 0000000..411c4e6 --- /dev/null +++ b/AppleBatch_June.SMS/SMSFactory.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; + +namespace AppleBatch_June.SMS +{ + public static class SMSFactory + { + public static List getSmsItems() + { + return new List { "SmsYun", "Uomsg", "Yezi", "Us_Sms" }; + } + + public static ISms GetSms(string smsName, string token, string srojectId, string chennl) + { + return smsName switch + { + "Us_Sms" => new Us_Sms(token, srojectId, chennl), + "Yezi" => new YeziMsm(token, srojectId, chennl), + "Uomsg" => new UomsgMsm(token, srojectId, chennl), + "SmsYun" => new SmsYun(token, srojectId, chennl), + _ => null, + }; + } + } +} diff --git a/AppleBatch_June.SMS/SmsRespon.cs b/AppleBatch_June.SMS/SmsRespon.cs new file mode 100644 index 0000000..28c7366 --- /dev/null +++ b/AppleBatch_June.SMS/SmsRespon.cs @@ -0,0 +1,11 @@ +namespace AppleBatch_June.SMS +{ + public class SmsRespon + { + public string code { get; set; } + + public string Data { get; set; } + + public string ErrMessage { get; set; } + } +} diff --git a/AppleBatch_June.SMS/SmsYun.cs b/AppleBatch_June.SMS/SmsYun.cs new file mode 100644 index 0000000..00728f6 --- /dev/null +++ b/AppleBatch_June.SMS/SmsYun.cs @@ -0,0 +1,178 @@ +using System.Collections.Generic; +using System.Net; +using DotNet.Utilities; + +namespace AppleBatch_June.SMS +{ + public class SmsYun : ISms + { + private string token { get; set; } + + private string host { get; } = ""; + + + public string channel { get; } = "1"; + + + public string project_id { get; } = "1098"; + + + public string smsCountry { get; set; } = "CN"; + + + public string smsName => "SmsYun"; + + public string smsLink { get; set; } + + public SmsYun(string _token, string _project_id, string _channel) + { + token = _token; + project_id = _project_id; + channel = _channel; + } + + public SmsRespon getInfo() + { + string uRL = host + "api/get_myinfo?token=" + token; + HttpResult html = new HttpHelper().GetHtml(new HttpItem + { + URL = uRL, + Timeout = 10000 + }); + if (html.StatusCode == HttpStatusCode.OK) + { + return new SmsRespon + { + code = "0000", + ErrMessage = "", + Data = html.Html + }; + } + return new SmsRespon + { + code = "9999", + ErrMessage = html.Html, + Data = html.Html + }; + } + + public SmsRespon getMolieNumber(ref string phone) + { + string text = "1"; + string uRL = host + "api/get_mobile?token=" + token + "&project_id=" + project_id + "&channel=" + channel + "&operation=" + text + "&phone=" + phone; + HttpResult html = new HttpHelper().GetHtml(new HttpItem + { + URL = uRL, + Timeout = 10000 + }); + if (html.StatusCode == HttpStatusCode.OK) + { + Dictionary dictionary = Tools.Todejosn>(html.Html); + if ((int)(dynamic)dictionary["code"] == 200) + { + dynamic val = dictionary["data"]; + phone = val["phone"]; + return new SmsRespon + { + code = "0000", + ErrMessage = "ok", + Data = phone + }; + } + string text2 = (dynamic)dictionary["msg"]; + return new SmsRespon + { + code = "9999", + ErrMessage = "获取手机号码失败:" + text2, + Data = html.Html + }; + } + return new SmsRespon + { + code = "9999", + ErrMessage = "error:获取手机号码返回:" + html.StatusCode, + Data = html.Html + }; + } + + public SmsRespon getSms(string phone) + { + string uRL = host + "api/get_sms?token=" + token + "&project_id=" + project_id + "&channel=" + channel + "&phone=" + phone; + HttpResult html = new HttpHelper().GetHtml(new HttpItem + { + URL = uRL, + Timeout = 10000 + }); + if (html.StatusCode == HttpStatusCode.OK) + { + Dictionary dictionary = Tools.Todejosn>(html.Html); + if ((int)(dynamic)dictionary["code"] == 200) + { + dynamic val = dictionary["text"]; + return new SmsRespon + { + code = "0000", + ErrMessage = "ok", + Data = val + }; + } + } + return new SmsRespon + { + code = "9999", + ErrMessage = "未收到", + Data = html.Html + }; + } + + public SmsRespon releasePhone(string phone) + { + string uRL = host + "api/release_phone?token=" + token + "&project_id=" + project_id + "&channel=" + channel + "&phone=" + phone; + HttpResult html = new HttpHelper().GetHtml(new HttpItem + { + URL = uRL, + Timeout = 10000 + }); + if (html.StatusCode == HttpStatusCode.OK) + { + return new SmsRespon + { + code = "0000", + ErrMessage = "", + Data = html.Html + }; + } + return new SmsRespon + { + code = "9999", + ErrMessage = html.Html, + Data = html.Html + }; + } + + public SmsRespon blackPhone(string phone) + { + string uRL = host + "api/black_phone?token=" + token + "&project_id=" + project_id + "&channel=" + channel + "&phone=" + phone; + HttpResult html = new HttpHelper().GetHtml(new HttpItem + { + URL = uRL, + Timeout = 10000 + }); + if (html.StatusCode == HttpStatusCode.OK) + { + return new SmsRespon + { + code = "0000", + ErrMessage = "", + Data = html.Html + }; + } + return new SmsRespon + { + code = "9999", + ErrMessage = html.Html, + Data = html.Html + }; + } + } +} diff --git a/AppleBatch_June.SMS/UomsgMsm.cs b/AppleBatch_June.SMS/UomsgMsm.cs new file mode 100644 index 0000000..88e1705 --- /dev/null +++ b/AppleBatch_June.SMS/UomsgMsm.cs @@ -0,0 +1,176 @@ +using System.Net; +using DotNet.Utilities; + +namespace AppleBatch_June.SMS +{ + public class UomsgMsm : ISms + { + private string token { get; set; } + + private string host { get; } + + public string channel { get; } = "1"; + + + public string project_id { get; } = "1098"; + + + public string smsCountry { get; set; } = "CN"; + + + public string smsName => "Uomsg"; + + public string smsLink { get; set; } + + public UomsgMsm(string _token, string _project_id, string _channel) + { + token = _token; + project_id = _project_id; + channel = _channel; + } + + public SmsRespon getInfo() + { + string uRL = host + "code=leftAmount&token=" + token; + HttpResult html = new HttpHelper().GetHtml(new HttpItem + { + URL = uRL, + Timeout = 10000 + }); + if (html.StatusCode == HttpStatusCode.OK) + { + return new SmsRespon + { + code = "0000", + ErrMessage = "", + Data = html.Html + }; + } + return new SmsRespon + { + code = "9999", + ErrMessage = html.Html, + Data = html.Html + }; + } + + public SmsRespon getMolieNumber(ref string phone) + { + string uRL = host + "code=getPhone&token=" + token + "&cardType=全部&phone=" + phone; + HttpResult html = new HttpHelper().GetHtml(new HttpItem + { + URL = uRL, + Timeout = 10000 + }); + if (html.StatusCode == HttpStatusCode.OK) + { + if (!html.Html.Contains("ERROR") && !string.IsNullOrEmpty(html.Html) && long.TryParse(html.Html, out var _)) + { + phone = html.Html; + return new SmsRespon + { + code = "0000", + ErrMessage = "ok", + Data = html.Html + }; + } + return new SmsRespon + { + code = "9999", + ErrMessage = "获取手机号码失败:" + html.Html, + Data = html.Html + }; + } + return new SmsRespon + { + code = "9999", + ErrMessage = "error:获取手机号码返回:" + html.StatusCode, + Data = html.Html + }; + } + + public SmsRespon getSms(string phone) + { + string uRL = host + "code=getMsg&token=" + token + "&keyWord=" + Tools.ToUrlEncode("apple") + "&phone=" + phone; + HttpResult html = new HttpHelper().GetHtml(new HttpItem + { + URL = uRL, + Timeout = 10000 + }); + if (html.StatusCode == HttpStatusCode.OK) + { + if (!html.Html.Contains("尚未收到") && !string.IsNullOrEmpty(html.Html)) + { + return new SmsRespon + { + code = "0000", + ErrMessage = "ok", + Data = html.Html.Replace(phone, "") + }; + } + return new SmsRespon + { + code = "9999", + ErrMessage = "获取手机号码失败:" + html.Html, + Data = html.Html + }; + } + return new SmsRespon + { + code = "9999", + ErrMessage = "未收到", + Data = html.Html + }; + } + + public SmsRespon releasePhone(string phone) + { + string uRL = host + "code=release&token=" + token + "&phone=" + phone; + HttpResult html = new HttpHelper().GetHtml(new HttpItem + { + URL = uRL, + Timeout = 10000 + }); + if (html.StatusCode == HttpStatusCode.OK) + { + return new SmsRespon + { + code = "0000", + ErrMessage = "", + Data = html.Html + }; + } + return new SmsRespon + { + code = "9999", + ErrMessage = html.Html, + Data = html.Html + }; + } + + public SmsRespon blackPhone(string phone) + { + string uRL = host + "code=block&token=" + token + "&phone=" + phone; + HttpResult html = new HttpHelper().GetHtml(new HttpItem + { + URL = uRL, + Timeout = 10000 + }); + if (html.StatusCode == HttpStatusCode.OK) + { + return new SmsRespon + { + code = "0000", + ErrMessage = "", + Data = html.Html + }; + } + return new SmsRespon + { + code = "9999", + ErrMessage = html.Html, + Data = html.Html + }; + } + } +} diff --git a/AppleBatch_June.SMS/Us_Sms.cs b/AppleBatch_June.SMS/Us_Sms.cs new file mode 100644 index 0000000..62a16a8 --- /dev/null +++ b/AppleBatch_June.SMS/Us_Sms.cs @@ -0,0 +1,168 @@ +using System.Net; +using DotNet.Utilities; + +namespace AppleBatch_June.SMS +{ + public class Us_Sms : ISms + { + private string token { get; set; } + + private string host { get; } + + public string channel { get; } = "sms999"; + + + public string project_id { get; } = "1098"; + + + public string smsCountry { get; set; } = "US"; + + + public string smsName => "Us_Sms"; + + public string smsLink { get; set; } + + public Us_Sms(string _token, string _project_id, string _channel) + { + token = _token; + if (!string.IsNullOrEmpty(_project_id)) + { + smsCountry = _project_id; + } + project_id = _project_id; + if (!string.IsNullOrEmpty(_channel)) + { + channel = _channel; + } + } + + public SmsRespon getInfo() + { + return new SmsRespon + { + code = "0000", + ErrMessage = "", + Data = "没有数据....号码国家:" + smsCountry + ",通道:" + channel + }; + } + + public SmsRespon getMolieNumber(ref string phone) + { + string uRL = host + "getPhone?token=" + token + "&cardType=全部&phone=" + phone + "&smsCountry=" + smsCountry + "&channel=" + channel; + HttpResult html = new HttpHelper().GetHtml(new HttpItem + { + URL = uRL, + Timeout = 10000 + }); + if (html.StatusCode == HttpStatusCode.OK) + { + if (!html.Html.Contains("ERROR") && !string.IsNullOrEmpty(html.Html) && long.TryParse(html.Html.Trim().ToString(), out var _)) + { + phone = html.Html; + return new SmsRespon + { + code = "0000", + ErrMessage = "ok", + Data = html.Html + }; + } + return new SmsRespon + { + code = "9999", + ErrMessage = "获取手机号码失败:" + html.Html, + Data = html.Html + }; + } + return new SmsRespon + { + code = "9999", + ErrMessage = "error:获取手机号码返回:" + html.StatusCode, + Data = html.Html + }; + } + + public SmsRespon getSms(string phone) + { + string uRL = host + "getmsg?token=" + token + "&keyWord=" + Tools.ToUrlEncode("apple") + "&phone=" + phone + "&smsCountry=" + smsCountry + "&channel=" + channel; + HttpResult html = new HttpHelper().GetHtml(new HttpItem + { + URL = uRL, + Timeout = 10000 + }); + if (html.StatusCode == HttpStatusCode.OK) + { + if (!html.Html.Contains("尚未收到") && !string.IsNullOrEmpty(html.Html)) + { + return new SmsRespon + { + code = "0000", + ErrMessage = "ok", + Data = html.Html.Replace(phone, "") + }; + } + return new SmsRespon + { + code = "9999", + ErrMessage = "获取手机号码失败:" + html.Html, + Data = html.Html + }; + } + return new SmsRespon + { + code = "9999", + ErrMessage = "未收到", + Data = html.Html + }; + } + + public SmsRespon releasePhone(string phone) + { + string uRL = host + "release?token=" + token + "&phone=" + phone + "&smsCountry=" + smsCountry + "&channel=" + channel; + HttpResult html = new HttpHelper().GetHtml(new HttpItem + { + URL = uRL, + Timeout = 10000 + }); + if (html.StatusCode == HttpStatusCode.OK) + { + return new SmsRespon + { + code = "0000", + ErrMessage = "", + Data = html.Html + }; + } + return new SmsRespon + { + code = "9999", + ErrMessage = html.Html, + Data = html.Html + }; + } + + public SmsRespon blackPhone(string phone) + { + string uRL = host + "block?token=" + token + "&phone=" + phone + "&smsCountry=" + smsCountry + "&channel=" + channel; + HttpResult html = new HttpHelper().GetHtml(new HttpItem + { + URL = uRL, + Timeout = 10000 + }); + if (html.StatusCode == HttpStatusCode.OK) + { + return new SmsRespon + { + code = "0000", + ErrMessage = "", + Data = html.Html + }; + } + return new SmsRespon + { + code = "9999", + ErrMessage = html.Html, + Data = html.Html + }; + } + } +} diff --git a/AppleBatch_June.SMS/YeziMsm.cs b/AppleBatch_June.SMS/YeziMsm.cs new file mode 100644 index 0000000..e3776b7 --- /dev/null +++ b/AppleBatch_June.SMS/YeziMsm.cs @@ -0,0 +1,214 @@ +using System; +using System.Collections.Generic; +using System.Net; +using DotNet.Utilities; + +namespace AppleBatch_June.SMS +{ + public class YeziMsm : ISms + { + public static DateTime nowYiFenzhong = DateTime.Now.AddDays(-1.0); + + public string smsCountry { get; set; } = "CN"; + + + private string token { get; set; } + + public string smsName => "Yezi"; + + public string smsLink { get; set; } + + private string host { get; } + + public string channel { get; } = "1"; + + + public string project_id { get; } = "1098"; + + + public YeziMsm(string _token, string _project_id, string _channel) + { + token = _token; + project_id = _project_id; + channel = _channel; + } + + public SmsRespon blackPhone(string phone) + { + string uRL = host + "api/add_blacklist?token=" + token + "&project_id=" + project_id + "&phone_num=" + phone; + HttpResult html = new HttpHelper().GetHtml(new HttpItem + { + URL = uRL, + Timeout = 10000 + }); + if (html.StatusCode == HttpStatusCode.OK) + { + return new SmsRespon + { + code = "0000", + ErrMessage = "", + Data = html.Html + }; + } + return new SmsRespon + { + code = "9999", + ErrMessage = html.Html, + Data = html.Html + }; + } + + public SmsRespon getInfo() + { + string uRL = host + "api/get_myinfo?token=" + token; + HttpResult html = new HttpHelper().GetHtml(new HttpItem + { + URL = uRL, + Timeout = 10000 + }); + if (html.StatusCode == HttpStatusCode.OK) + { + return new SmsRespon + { + code = "0000", + ErrMessage = "", + Data = html.Html + }; + } + return new SmsRespon + { + code = "9999", + ErrMessage = html.Html, + Data = html.Html + }; + } + + public SmsRespon getMolieNumber(ref string phone) + { + if (nowYiFenzhong > DateTime.Now.AddMinutes(-3.0)) + { + return new SmsRespon + { + code = "9999", + ErrMessage = "失败:1分钟内剩余取卡数少于10,请过3分钟后再试。" + }; + } + string uRL = host + "api/get_mobile?token=" + token + "&project_id=" + project_id + "&phone_num=" + phone + "&operator=" + channel; + HttpResult html = new HttpHelper().GetHtml(new HttpItem + { + URL = uRL, + Timeout = 10000 + }); + if (html.StatusCode == HttpStatusCode.OK) + { + if (html.Html.Contains("message\":\"ok") && !string.IsNullOrEmpty(html.Html)) + { + Dictionary dictionary = Tools.Todejosn>(html.Html); + string text = (dynamic)dictionary["mobile"]; + try + { + if (long.TryParse((dynamic)dictionary["1分钟内剩余取卡数:"], out long result) && result <= 10L) + { + nowYiFenzhong = DateTime.Now; + return new SmsRespon + { + code = "9999", + ErrMessage = "失败:1分钟内剩余取卡数少于10,请过5分钟后再试。" + html.Html, + Data = html.Html + }; + } + } + catch (Exception) + { + } + if (long.TryParse(text, out var _)) + { + phone = text; + return new SmsRespon + { + code = "0000", + ErrMessage = "ok", + Data = html.Html + }; + } + } + return new SmsRespon + { + code = "9999", + ErrMessage = "获取手机号码失败:" + html.Html, + Data = html.Html + }; + } + return new SmsRespon + { + code = "9999", + ErrMessage = "error:获取手机号码返回:" + html.StatusCode, + Data = html.Html + }; + } + + public SmsRespon getSms(string phone) + { + string uRL = host + "api/get_message?token=" + token + "&project_id=" + project_id + "&phone_num=" + phone; + HttpResult html = new HttpHelper().GetHtml(new HttpItem + { + URL = uRL, + Timeout = 10000 + }); + if (html.StatusCode == HttpStatusCode.OK) + { + if (html.Html.Contains("短信还未到达")) + { + return new SmsRespon + { + code = "9999", + ErrMessage = "未收到", + Data = html.Html + }; + } + if (html.Html.Contains("message\":\"ok") && !string.IsNullOrEmpty(html.Html)) + { + Dictionary dictionary = Tools.Todejosn>(html.Html); + string data = ((dynamic)dictionary["data"])[0]["modle"]; + return new SmsRespon + { + code = "0000", + ErrMessage = "ok", + Data = data + }; + } + } + return new SmsRespon + { + code = "9999", + ErrMessage = "未收到", + Data = html.Html + }; + } + + public SmsRespon releasePhone(string phone) + { + string uRL = host + "api/free_mobile?token=" + token + "&project_id=" + project_id + "&phone_num=" + phone; + HttpResult html = new HttpHelper().GetHtml(new HttpItem + { + URL = uRL, + Timeout = 10000 + }); + if (html.StatusCode == HttpStatusCode.OK) + { + return new SmsRespon + { + code = "0000", + ErrMessage = "", + Data = html.Html + }; + } + return new SmsRespon + { + code = "9999", + ErrMessage = html.Html, + Data = html.Html + }; + } + } +} diff --git a/AppleBatch_June.StartTaskModel/BaseFormTaskRunState.cs b/AppleBatch_June.StartTaskModel/BaseFormTaskRunState.cs new file mode 100644 index 0000000..468df10 --- /dev/null +++ b/AppleBatch_June.StartTaskModel/BaseFormTaskRunState.cs @@ -0,0 +1,36 @@ +using AppleBatch_June.ExecuteTasks; + +namespace AppleBatch_June.StartTaskModel +{ + public class BaseFormTaskRunState : ITaskRunState + { + private bool _taskIsRun; + + public string TaskName { get; set; } + + public bool TaskIsRun + { + get + { + return _taskIsRun; + } + set + { + _taskIsRun = value; + AppleExecuteTask.SetTaskIsRun(TaskName, _taskIsRun); + } + } + + public bool isRun { get; set; } + + public BaseFormTaskRunState(string _TaskName) + { + TaskName = _TaskName; + } + + public void Stop() + { + isRun = false; + } + } +} diff --git a/AppleBatch_June.StartTaskModel/BaseTask.cs b/AppleBatch_June.StartTaskModel/BaseTask.cs new file mode 100644 index 0000000..b4c0cff --- /dev/null +++ b/AppleBatch_June.StartTaskModel/BaseTask.cs @@ -0,0 +1,293 @@ +using System; +using System.Collections.Generic; +using System.Net; +using System.Threading; +using System.Threading.Tasks; +using AppleBatch_June.ExecuteTasks; +using AppleBatch_June.Model; +using AppleBatch_June.Utils; +using DotNet.Utilities; + +namespace AppleBatch_June.StartTaskModel +{ + public class BaseTask : ITaskRunState + { + private bool _taskIsRun; + + private AppleItunesLogin itunesLoginOld; + + public virtual string TaskName { get; set; } + + public bool TaskIsRun + { + get + { + return _taskIsRun; + } + set + { + _taskIsRun = value; + AppleExecuteTask.SetTaskIsRun(TaskName, _taskIsRun); + } + } + + public bool isRun { get; set; } + + protected Action baseEndTakAct { get; set; } + + public BaseTask() + { + TaskName = "BaseTask"; + } + + public BaseTask(string _taskName) + { + TaskName = _taskName; + } + + protected AppleItunesLogin getItunesLogin(AppleAcount account, int type, Action _action, ItunesUtlis utlis, int isStore = 0, string newNotiyeKey = "") + { + if (string.IsNullOrEmpty(utlis.ProxyIp)) + { + utlis.ProxyIp = ProxyAccountCache.getProxyAccountIP(account.appleId); + } + AppleItunesLogin appleItunesLogin = iTunesAccountLoginCache.getLoginIdUserInfo(account.appleId, account.applePwd); + if (appleItunesLogin == null || isStore == 2) + { + if (!string.IsNullOrEmpty(newNotiyeKey)) + { + utlis.notyKey = newNotiyeKey; + } + appleItunesLogin = utlis.getItunesLogin(account, type, _action, isStore); + if (appleItunesLogin != null) + { + iTunesAccountLoginCache.addReddemUserInfo(account.appleId, appleItunesLogin); + } + } + return appleItunesLogin; + } + + public AppleItunesLogin getItunesNewLogin(AppleAcount account, string notyKey, int type, Action _action, ItunesUtlis utlis, bool isAgent = false) + { + _action?.Invoke(notyKey, DisplyType.xinxi, "正在处理"); + HttpResult isLogin = APIUtlis.getIsLogin(type); + if (isLogin.StatusCode == HttpStatusCode.OK) + { + dynamic val = Tools.Todejosn(isLogin.Html); + if (val["Code"] == "0000") + { + if (val["Data"]["integral"] >= AppSysConfig.getTypeById(type).consNum) + { + if (AppSysConfig.iTunesisRemoteLogin) + { + _action?.Invoke(notyKey, DisplyType.chongzhi, ""); + Dictionary data = new Dictionary + { + { "appleId", account.appleId }, + { + "applePwd", + account.applePwd + (account.isDoubleModl ? account.DoublePwd : "") + }, + { "type", "newLogion" } + }; + HttpResult httpResult = APIUtlis.serviceSend(Tools.Toenjson(data)); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + dynamic val2 = Tools.Todejosn(httpResult.Html); + if (val2["Code"] != "0000") + { + int num = 0; + bool flag; + do + { + httpResult = APIUtlis.serviceSend(Tools.Toenjson(data)); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + val2 = Tools.Todejosn(httpResult.Html); + } + } + while ((!(flag = num < 2)) ? ((object)flag) : (flag & (val2["Code"] != "0000"))); + } + if (val2["Code"] == "0000") + { + dynamic val3 = val2["Data"]; + AppleItunesLogin appleItunesLogin = Tools.Todejosn(val3); + if (!string.IsNullOrEmpty(appleItunesLogin.xtoken)) + { + appleItunesLogin.serverIndex = val2["serverIndex"]; + appleItunesLogin.account = account.appleId; + appleItunesLogin.pwd = account.applePwd; + itunesLoginOld = appleItunesLogin; + if (account.isDoubleModl) + { + if (AppSysConfig.DoubleGuid.ContainsKey(account.appleId)) + { + AppSysConfig.DoubleGuid[account.appleId] = appleItunesLogin.Guid; + } + else + { + AppSysConfig.DoubleGuid.TryAdd(account.appleId, appleItunesLogin.Guid); + } + } + return appleItunesLogin; + } + if (appleItunesLogin.msg == "0000") + { + return getItunesNewLogin(account, notyKey, type, _action, utlis); + } + _action?.Invoke(notyKey, DisplyType.xinxi, appleItunesLogin.msg); + } + else + { + _action?.Invoke(notyKey, DisplyType.xinxi, val2["Message"]); + } + } + else + { + if (!isAgent) + { + return getItunesNewLogin(account, notyKey, type, _action, utlis, isAgent: true); + } + _action?.Invoke(notyKey, DisplyType.xinxi, "网络请求失败"); + } + } + else + { + string msgReust = ""; + if (string.IsNullOrEmpty(utlis.ProxyIp)) + { + utlis.ProxyIp = ProxyAccountCache.getProxyAccountIP(account.appleId); + } + bool isAppleSuccess; + AppleItunesLogin appleItunesLogin2 = utlis.appleLogin(account.appleId, account.applePwd + (account.isDoubleModl ? account.DoublePwd : ""), 2, ref msgReust, out isAppleSuccess); + if (appleItunesLogin2 != null) + { + appleItunesLogin2.account = account.appleId; + appleItunesLogin2.pwd = account.applePwd; + if (account.isDoubleModl) + { + appleItunesLogin2.pwd = account.applePwd; + } + itunesLoginOld = appleItunesLogin2; + return appleItunesLogin2; + } + _action?.Invoke(notyKey, DisplyType.xinxi, msgReust); + } + } + else + { + _action?.Invoke(notyKey, DisplyType.xinxi, "点数不足,请联系客服充值"); + } + } + else + { + _action?.Invoke(notyKey, DisplyType.xinxi, val["Message"]); + } + } + else + { + _action?.Invoke(notyKey, DisplyType.xinxi, "网络请求失败"); + } + return null; + } + + public static bool startRuning(TaskRunModel runModel, Action _action, string appleId) + { + if (Tools.ToNetWorkInt(ConfigUtlis.getConfigValue("comNetworkConfig"), 0) == 3) + { + int num = Tools.ToInt(ConfigUtlis.getConfigValue("txtAdslIdCount"), 10); + if (AppleExecuteTask.TaskRunAppleIdCount >= num) + { + _action?.Invoke(appleId, DisplyType.xinxi, "等待拨号..."); + bool flag = false; + do + { + flag = false; + foreach (TaskRunModel taskRunModel in AppleExecuteTask.TaskRunModels) + { + if (taskRunModel.isRuning) + { + flag = true; + break; + } + } + Thread.Sleep(new Random().Next(100, 300)); + } + while (flag); + lock (AppleExecuteTask.obj) + { + if (AppleExecuteTask.TaskRunAppleIdCount >= num) + { + string configValue = ConfigUtlis.getConfigValue("txtAdslUserName"); + string configValue2 = ConfigUtlis.getConfigValue("txtAdslPwd"); + Thread.Sleep(new Random().Next(500, 1000)); + _action?.Invoke(appleId, DisplyType.xinxi, "断开宽带连接"); + RasTools.Disconnect(); + Thread.Sleep(new Random().Next(200, 500)); + _action?.Invoke(appleId, DisplyType.xinxi, "开始宽带重新拨号"); + if (!RasTools.Connect(configValue, configValue2, out var errMsg)) + { + _action?.Invoke(appleId, DisplyType.xinxi, "拨号失败:" + errMsg); + return false; + } + _action?.Invoke(appleId, DisplyType.xinxi, "重新拨号成功"); + Thread.Sleep(new Random().Next(500, 1000)); + AppleExecuteTask.TaskRunAppleIdCount = 0L; + } + } + } + AppleExecuteTask.TaskRunAppleIdCount++; + } + runModel.isRuning = true; + return true; + } + + public static void endRuning(TaskRunModel runModel) + { + runModel.isRuning = false; + } + + public void Stop() + { + isRun = false; + Task.Run(delegate + { + try + { + int num = 0; + while (TaskIsRun) + { + Thread.Sleep(500); + num++; + if (num >= 80 && !isRun) + { + break; + } + } + if (TaskIsRun && !isRun) + { + TaskIsRun = false; + baseEndTakAct?.Invoke(); + } + } + catch (Exception) + { + } + }); + } + + public T getDicValue(Dictionary data, string key) + { + if (data.ContainsKey(key)) + { + return data[key]; + } + return default(T); + } + + public void ApiApplyAct(int type, string typeName) + { + APIUtlis.ApiApplyAct(type, typeName); + } + } +} diff --git a/AppleBatch_June.Utils/APPLEHCHelp.cs b/AppleBatch_June.Utils/APPLEHCHelp.cs new file mode 100644 index 0000000..9817ddb --- /dev/null +++ b/AppleBatch_June.Utils/APPLEHCHelp.cs @@ -0,0 +1,95 @@ +using System; +using System.Diagnostics; +using System.Security.Cryptography; + +namespace AppleBatch_June.Utils +{ + public static class APPLEHCHelp + { + private static byte[] NumberBybeyes = new byte[10] { 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 }; + + public static string getIframeId() + { + try + { + string text = "auth-" + new Random(Guid.NewGuid().GetHashCode()).NextDouble().DToAny(36).Substring(2, 8); + for (int i = 1; 3 >= i; i++) + { + text = text + "-" + new Random(Guid.NewGuid().GetHashCode()).NextDouble().DToAny(36).Substring(2, 4); + } + return text = text + "-" + new Random(Guid.NewGuid().GetHashCode()).NextDouble().DToAny(36).Substring(2, 8); + } + catch (Exception) + { + } + return "auth-kg8m7tma-vnev-mvm2-afu5-g7azyeu4"; + } + + public static int getHkCode(string palinData) + { + Console.WriteLine("开始运行。" + DateTime.Now.ToString()); + Stopwatch stopwatch = Stopwatch.StartNew(); + int num = int.Parse(palinData.Split(':')[1]); + int num2 = 0; + int[] array = new int[20]; + byte[] array2 = new byte[palinData.Length + "1000000".Length]; + for (int i = 0; i < palinData.Length; i++) + { + array2[i] = (byte)palinData[i]; + } + int length = palinData.Length; + using (SHA1 sHA = new SHA1CryptoServiceProvider()) + { + do + { + length = 54; + string text = num2.ToString(); + foreach (int num3 in text) + { + array2[length] = (byte)num3; + length++; + } + byte[] array3 = sHA.ComputeHash(array2, 0, length); + int num4 = 0; + byte[] array4 = array3; + foreach (byte b in array4) + { + array[num4] = b; + num4++; + } + if (getDomaiHkJudge(array) < num) + { + num2++; + continue; + } + break; + } + while (num2 <= 1000000); + } + Array.Clear(array2, 0, array2.Length); + Array.Clear(array, 0, 20); + array2 = null; + array = null; + stopwatch.Stop(); + Console.WriteLine(stopwatch.Elapsed.TotalSeconds); + Console.WriteLine("end运行。" + DateTime.Now.ToString() + ",data=" + palinData + ",cout=" + num2); + return num2; + } + + public static int getDomaiHkJudge(int[] e) + { + int num = 0; + int num2 = 0; + for (int i = 0; i < e.Length; i++) + { + int num3; + num += (num2 = (((num3 = e[i]) >= 0) ? ((num3 < 1) ? 8 : ((num3 < 2) ? 7 : ((num3 < 4) ? 6 : ((num3 < 8) ? 5 : ((num3 < 16) ? 4 : ((num3 < 32) ? 3 : ((num3 < 64) ? 2 : ((num3 < 128) ? 1 : 0)))))))) : 0)); + if (8 != num2) + { + break; + } + } + return num; + } + } +} diff --git a/AppleBatch_June.Utils/AppleGuidManage.cs b/AppleBatch_June.Utils/AppleGuidManage.cs new file mode 100644 index 0000000..19f17d3 --- /dev/null +++ b/AppleBatch_June.Utils/AppleGuidManage.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.Web; + +namespace AppleBatch_June.Utils +{ + public static class AppleGuidManage + { + private static Dictionary GuidIdKeyLists = new Dictionary(); + + private static readonly object GuidIdKeyLock = new object(); + + public static string getIndeedApplePwd(string applePwd) + { + try + { + if (applePwd.Length <= 8) + { + return applePwd; + } + if (applePwd.Length >= 14 && int.TryParse(applePwd.Substring(applePwd.Length - 6), out var _)) + { + return applePwd.Substring(0, applePwd.Length - 6); + } + return applePwd; + } + catch (Exception) + { + return applePwd; + } + } + + public static string getIdGuid(string appleid, string pwd) + { + string mD5_ = Tools.GetMD5_32(appleid.Trim() + "|" + getIndeedApplePwd(pwd.Trim()) + "|liuyue_Bach_201ls"); + lock (GuidIdKeyLock) + { + if (GuidIdKeyLists.ContainsKey(mD5_)) + { + return GuidIdKeyLists[mD5_]; + } + } + return ""; + } + + public static void UpIdGuid(string appleid, string pwd) + { + string mD5_ = Tools.GetMD5_32(appleid.Trim() + "|" + getIndeedApplePwd(pwd.Trim()) + "|liuyue_Bach_201ls"); + string value = Tools.GenerateTimeStamp().ToString(); + bool flag = false; + lock (GuidIdKeyLock) + { + if (GuidIdKeyLists.ContainsKey(mD5_)) + { + GuidIdKeyLists[mD5_] = value; + } + else + { + GuidIdKeyLists.Add(mD5_, value); + flag = true; + } + } + try + { + Dictionary dictionary = new Dictionary(); + dictionary.Add("addTime", value); + if (flag) + { + dictionary.Add("type", "guidManage"); + dictionary.Add("value1", mD5_); + SqliteHelper.ExecuteInsert("itunes_db", dictionary); + } + else + { + Dictionary dictionary2 = new Dictionary(); + dictionary2.Add("value1", mD5_); + SqliteHelper.ExecuteUpdate("itunes_db", dictionary2, dictionary); + } + } + catch (Exception) + { + } + } + + public static void InitAppleGuid() + { + string text = "guidManage"; + string total = ""; + string fields = "addTime,value1"; + foreach (DataRow row in SqliteHelper.QueryTable("itunes_db", ref total, fields, "type='" + text + "' and (value16 ='" + Tools.GetMD5_32(HttpUtility.UrlEncode(AppSysConfig.userName) + "aaa").Substring(10) + "' or value16 IS NULL ) ", "id desc", "").Rows) + { + long? num = row["addTime"] as long?; + string key = row["value1"] as string; + if (!GuidIdKeyLists.ContainsKey(key)) + { + GuidIdKeyLists.Add(key, num.Value.ToString()); + } + } + } + } +} diff --git a/AppleBatch_June.Utils/CaptchaModel.cs b/AppleBatch_June.Utils/CaptchaModel.cs new file mode 100644 index 0000000..e12acff --- /dev/null +++ b/AppleBatch_June.Utils/CaptchaModel.cs @@ -0,0 +1,9 @@ +namespace AppleBatch_June.Utils +{ + public class CaptchaModel + { + public string getWkUrl { get; set; } + + public string yzmUrl { get; set; } + } +} diff --git a/AppleBatch_June.Utils/ClientInfoCode.cs b/AppleBatch_June.Utils/ClientInfoCode.cs new file mode 100644 index 0000000..f1a73ec --- /dev/null +++ b/AppleBatch_June.Utils/ClientInfoCode.cs @@ -0,0 +1,246 @@ +using System.Collections.Generic; +using System.Globalization; +using System.Text.RegularExpressions; + +namespace AppleBatch_June.Utils +{ + public class ClientInfoCode + { + private Dictionary dict_w; + + private string key_A = ".0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"; + + private string[] dict_y = new string[31] + { + "%20", ";;;", "%3B", "%2C", "und", "fin", "ed;", "%28", "%29", "%3A", + "/53", "ike", "Web", "0;", ".0", "e;", "on", "il", "ck", "01", + "in", "Mo", "fa", "00", "32", "la", ".1", "ri", "it", "%u", + "le" + }; + + private string[] unicode_list = new string[31] + { + "\u0001", "\u0002", "\u0003", "\u0004", "\u0005", "\u0006", "\a", "\b", "\t", "\n", + "\v", "\f", "\r", "\u000e", "\u000f", "\u0010", "\u0011", "\u0012", "\u0013", "\u0014", + "\u0015", "\u0016", "\u0017", "\u0018", "\u0019", "\u001a", "\u001b", "\u001c", "\u001d", "\u001e", + "\u001f" + }; + + private string this_n = ""; + + private int this_r; + + private int this_o; + + public ClientInfoCode() + { + dict_w = new Dictionary(); + dict_w.Add(0, new int[2] { 16, 44928 }); + dict_w.Add(1, new int[2] { 4, 15 }); + dict_w.Add(2, new int[2] { 5, 3 }); + dict_w.Add(3, new int[2] { 6, 4 }); + dict_w.Add(4, new int[2] { 7, 110 }); + dict_w.Add(5, new int[2] { 7, 107 }); + dict_w.Add(6, new int[2] { 7, 104 }); + dict_w.Add(7, new int[2] { 7, 97 }); + dict_w.Add(8, new int[2] { 7, 72 }); + dict_w.Add(9, new int[2] { 7, 71 }); + dict_w.Add(10, new int[2] { 7, 63 }); + dict_w.Add(11, new int[2] { 8, 181 }); + dict_w.Add(12, new int[2] { 8, 170 }); + dict_w.Add(13, new int[2] { 8, 117 }); + dict_w.Add(14, new int[2] { 6, 24 }); + dict_w.Add(15, new int[2] { 7, 91 }); + dict_w.Add(16, new int[2] { 7, 88 }); + dict_w.Add(17, new int[2] { 7, 73 }); + dict_w.Add(18, new int[2] { 7, 69 }); + dict_w.Add(19, new int[2] { 7, 57 }); + dict_w.Add(20, new int[2] { 7, 16 }); + dict_w.Add(21, new int[2] { 7, 31 }); + dict_w.Add(22, new int[2] { 7, 33 }); + dict_w.Add(23, new int[2] { 7, 18 }); + dict_w.Add(24, new int[2] { 7, 45 }); + dict_w.Add(25, new int[2] { 8, 232 }); + dict_w.Add(26, new int[2] { 8, 210 }); + dict_w.Add(27, new int[2] { 8, 179 }); + dict_w.Add(28, new int[2] { 8, 178 }); + dict_w.Add(29, new int[2] { 8, 174 }); + dict_w.Add(30, new int[2] { 8, 172 }); + dict_w.Add(31, new int[2] { 8, 158 }); + dict_w.Add(37, new int[2] { 7, 44 }); + dict_w.Add(42, new int[2] { 15, 22465 }); + dict_w.Add(43, new int[2] { 9, 45 }); + dict_w.Add(45, new int[2] { 7, 96 }); + dict_w.Add(46, new int[2] { 6, 51 }); + dict_w.Add(47, new int[2] { 6, 14 }); + dict_w.Add(48, new int[2] { 6, 33 }); + dict_w.Add(49, new int[2] { 5, 5 }); + dict_w.Add(50, new int[2] { 5, 10 }); + dict_w.Add(51, new int[2] { 5, 9 }); + dict_w.Add(52, new int[2] { 5, 1 }); + dict_w.Add(53, new int[2] { 5, 6 }); + dict_w.Add(54, new int[2] { 5, 0 }); + dict_w.Add(55, new int[2] { 6, 37 }); + dict_w.Add(56, new int[2] { 7, 117 }); + dict_w.Add(57, new int[2] { 7, 118 }); + dict_w.Add(59, new int[2] { 5, 23 }); + dict_w.Add(64, new int[2] { 16, 44929 }); + dict_w.Add(65, new int[2] { 7, 68 }); + dict_w.Add(66, new int[2] { 8, 64 }); + dict_w.Add(67, new int[2] { 7, 56 }); + dict_w.Add(68, new int[2] { 9, 318 }); + dict_w.Add(69, new int[2] { 7, 60 }); + dict_w.Add(70, new int[2] { 7, 10 }); + dict_w.Add(71, new int[2] { 8, 233 }); + dict_w.Add(72, new int[2] { 8, 180 }); + dict_w.Add(73, new int[2] { 8, 23 }); + dict_w.Add(74, new int[2] { 8, 238 }); + dict_w.Add(75, new int[2] { 7, 17 }); + dict_w.Add(76, new int[2] { 7, 46 }); + dict_w.Add(77, new int[2] { 7, 70 }); + dict_w.Add(78, new int[2] { 8, 124 }); + dict_w.Add(79, new int[2] { 8, 116 }); + dict_w.Add(80, new int[2] { 7, 61 }); + dict_w.Add(81, new int[2] { 9, 350 }); + dict_w.Add(82, new int[2] { 9, 422 }); + dict_w.Add(83, new int[2] { 6, 26 }); + dict_w.Add(84, new int[2] { 6, 38 }); + dict_w.Add(85, new int[2] { 8, 38 }); + dict_w.Add(86, new int[2] { 8, 39 }); + dict_w.Add(87, new int[2] { 9, 44 }); + dict_w.Add(88, new int[2] { 10, 703 }); + dict_w.Add(89, new int[2] { 12, 2809 }); + dict_w.Add(90, new int[2] { 14, 11233 }); + dict_w.Add(95, new int[2] { 8, 94 }); + dict_w.Add(97, new int[2] { 6, 50 }); + dict_w.Add(98, new int[2] { 8, 171 }); + dict_w.Add(99, new int[2] { 7, 84 }); + dict_w.Add(100, new int[2] { 7, 78 }); + dict_w.Add(101, new int[2] { 5, 28 }); + dict_w.Add(102, new int[2] { 9, 319 }); + dict_w.Add(103, new int[2] { 9, 423 }); + dict_w.Add(104, new int[2] { 7, 111 }); + dict_w.Add(105, new int[2] { 6, 54 }); + dict_w.Add(106, new int[2] { 7, 30 }); + dict_w.Add(107, new int[2] { 13, 5617 }); + dict_w.Add(108, new int[2] { 6, 17 }); + dict_w.Add(109, new int[2] { 7, 106 }); + dict_w.Add(110, new int[2] { 8, 239 }); + dict_w.Add(111, new int[2] { 6, 49 }); + dict_w.Add(112, new int[2] { 6, 40 }); + dict_w.Add(113, new int[2] { 11, 1405 }); + dict_w.Add(114, new int[2] { 6, 27 }); + dict_w.Add(115, new int[2] { 6, 25 }); + dict_w.Add(116, new int[2] { 6, 32 }); + dict_w.Add(117, new int[2] { 6, 41 }); + dict_w.Add(118, new int[2] { 8, 173 }); + dict_w.Add(119, new int[2] { 7, 59 }); + dict_w.Add(120, new int[2] { 8, 65 }); + dict_w.Add(121, new int[2] { 8, 125 }); + dict_w.Add(122, new int[2] { 8, 95 }); + } + + public void t(int[] e) + { + this_r = (this_r << e[0]) | e[1]; + this_o += e[0]; + while (this_o >= 6) + { + int num = (this_r >> this_o - 6) & 0x3F; + this_n += key_A.Substring(num, 1); + this_r ^= num << (this_o -= 6); + } + } + + public string do_l(string e) + { + int[] e2 = new int[2] + { + 6, + ((7 & e.Length) << 3) | 0 + }; + t(e2); + int[] e3 = new int[2] + { + 6, + (0x38 & e.Length) | 1 + }; + t(e3); + int num = 0; + while (true) + { + if (num < e.Length) + { + if (dict_w.ContainsKey(e[num])) + { + if (dict_w[e[num]] == null) + { + break; + } + t(dict_w[e[num]]); + num++; + continue; + } + return ""; + } + t(dict_w[0]); + if (this_o > 0) + { + int[] e4 = new int[2] + { + 6 - this_o, + 0 + }; + t(e4); + } + return this_n; + } + return ""; + } + + public string UnicodeDecode(string unicodeStr) + { + int result; + if (!string.IsNullOrWhiteSpace(unicodeStr) && (unicodeStr.Contains("\\u") || unicodeStr.Contains("\\U"))) + { + return Regex.Replace(unicodeStr, "\\\\[uU](.{4})", (Match m) => int.TryParse(m.Groups[1].Value, NumberStyles.HexNumber, null, out result) ? ((char)result).ToString() : m.Groups[0].Value, RegexOptions.Singleline); + } + return unicodeStr; + } + + public string f(string e) + { + string text = e; + for (int i = 0; i < dict_y.Length; i++) + { + string oldValue = dict_y[i]; + string unicodeStr = unicode_list[i]; + string newValue = UnicodeDecode(unicodeStr); + text = text.Replace(oldValue, newValue); + } + string text2 = do_l(text); + if (text2 == null) + { + return e; + } + int num = 65535; + for (int j = 0; j < e.Length; j++) + { + num = 0xFFFF & ((num >> 8) | (num << 8)); + num ^= 0xFF & e[j]; + num ^= (0xFF & num) >> 4; + num ^= (num << 12) & 0xFFFF; + num ^= ((0xFF & num) << 5) & 0xFFFF; + } + num = 0xFFFF & num; + e = ""; + int index = num >> 12; + e += key_A[index]; + int index2 = (num >> 6) & 0x3F; + e += key_A[index2]; + int index3 = 0x3F & num; + e += key_A[index3]; + return text2 + e; + } + } +} diff --git a/AppleBatch_June.Utils/FDClientInfoHelp.cs b/AppleBatch_June.Utils/FDClientInfoHelp.cs new file mode 100644 index 0000000..d96f8ff --- /dev/null +++ b/AppleBatch_June.Utils/FDClientInfoHelp.cs @@ -0,0 +1,20 @@ +using System; + +namespace AppleBatch_June.Utils +{ + public class FDClientInfoHelp + { + private const string soureJsData = "var w = {\r\n 1: [4, 15],\r\n 110: [8, 239],\r\n 74: [8, 238],\r\n 57: [7, 118],\r\n 56: [7, 117],\r\n 71: [8, 233],\r\n 25: [8, 232],\r\n 101: [5, 28],\r\n 104: [7, 111],\r\n 4: [7, 110],\r\n 105: [6, 54],\r\n 5: [7, 107],\r\n 109: [7, 106],\r\n 103: [9, 423],\r\n 82: [9, 422],\r\n 26: [8, 210],\r\n 6: [7, 104],\r\n 46: [6, 51],\r\n 97: [6, 50],\r\n 111: [6, 49],\r\n 7: [7, 97],\r\n 45: [7, 96],\r\n 59: [5, 23],\r\n 15: [7, 91],\r\n 11: [8, 181],\r\n 72: [8, 180],\r\n 27: [8, 179],\r\n 28: [8, 178],\r\n 16: [7, 88],\r\n 88: [10, 703],\r\n 113: [11, 1405],\r\n 89: [12, 2809],\r\n 107: [13, 5617],\r\n 90: [14, 11233],\r\n 42: [15, 22465],\r\n 64: [16, 44929],\r\n 0: [16, 44928],\r\n 81: [9, 350],\r\n 29: [8, 174],\r\n 118: [8, 173],\r\n 30: [8, 172],\r\n 98: [8, 171],\r\n 12: [8, 170],\r\n 99: [7, 84],\r\n 117: [6, 41],\r\n 112: [6, 40],\r\n 102: [9, 319],\r\n 68: [9, 318],\r\n 31: [8, 158],\r\n 100: [7, 78],\r\n 84: [6, 38],\r\n 55: [6, 37],\r\n 17: [7, 73],\r\n 8: [7, 72],\r\n 9: [7, 71],\r\n 77: [7, 70],\r\n 18: [7, 69],\r\n 65: [7, 68],\r\n 48: [6, 33],\r\n 116: [6, 32],\r\n 10: [7, 63],\r\n 121: [8, 125],\r\n 78: [8, 124],\r\n 80: [7, 61],\r\n 69: [7, 60],\r\n 119: [7, 59],\r\n 13: [8, 117],\r\n 79: [8, 116],\r\n 19: [7, 57],\r\n 67: [7, 56],\r\n 114: [6, 27],\r\n 83: [6, 26],\r\n 115: [6, 25],\r\n 14: [6, 24],\r\n 122: [8, 95],\r\n 95: [8, 94],\r\n 76: [7, 46],\r\n 24: [7, 45],\r\n 37: [7, 44],\r\n 50: [5, 10],\r\n 51: [5, 9],\r\n 108: [6, 17],\r\n 22: [7, 33],\r\n 120: [8, 65],\r\n 66: [8, 64],\r\n 21: [7, 31],\r\n 106: [7, 30],\r\n 47: [6, 14],\r\n 53: [5, 6],\r\n 49: [5, 5],\r\n 86: [8, 39],\r\n 85: [8, 38],\r\n 23: [7, 18],\r\n 75: [7, 17],\r\n 20: [7, 16],\r\n 2: [5, 3],\r\n 73: [8, 23],\r\n 43: [9, 45],\r\n 87: [9, 44],\r\n 70: [7, 10],\r\n 3: [6, 4],\r\n 52: [5, 1],\r\n 54: [5, 0]\r\n };\r\n\t\t\t\r\n\t\t\tvar A = \".0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\";\r\n\t\t\tvar y=[\"%20\", \";;;\", \"%3B\", \"%2C\", \"und\", \"fin\", \"ed;\", \"%28\", \"%29\", \"%3A\", \"/53\", \"ike\", \"Web\", \"0;\", \".0\", \"e;\", \"on\", \"il\", \"ck\", \"01\", \"in\", \"Mo\", \"fa\", \"00\", \"32\", \"la\", \".1\", \"ri\", \"it\", \"%u\", \"le\"];\r\n\t\t\t\r\n function l(e) {\r\n function t(e) {\r\n for (r = r << e[0] | e[1],\r\n o += e[0]; o >= 6; )\r\n e = r >> o - 6 & 63,\r\n n += A.substring(e, e + 1),\r\n r ^= e << (o -= 6)\r\n }\r\n var n = \"\"\r\n , r = 0\r\n , o = 0;\r\n t([6, (7 & e.length) << 3 | 0]),\r\n t([6, 56 & e.length | 1]);\r\n for (var i = 0; i < e.length; i++) {\r\n if (null == w[e.charCodeAt(i)])\r\n return;\r\n t(w[e.charCodeAt(i)])\r\n }\r\n return t(w[0]),\r\n o > 0 && t([6 - o, 0]),\r\n n\r\n };\r\n\t\t\tfunction f(e) {\r\n for (var t = l, n = e, r = 0; y[r]; r++)\r\n n = n.split(y[r]).join(String.fromCharCode(r + 1));\r\n if (null == (t = t(n)))\r\n return e;\r\n for (n = 65535,\r\n r = 0; r < e.length; r++)\r\n n = 65535 & (n >>> 8 | n << 8),\r\n n ^= 255 & e.charCodeAt(r),\r\n n ^= (255 & n) >> 4,\r\n n ^= n << 12 & 65535,\r\n n ^= (255 & n) << 5 & 65535;\r\n return n &= 65535,\r\n e = \"\",\r\n e += A.charAt(n >>> 12),\r\n e += A.charAt(n >>> 6 & 63),\r\n t += e += A.charAt(63 & n)\r\n };\r\n\t\t\t"; + + public static string getAppleIFDClientInfo(string userAction) + { + int num = new Random(Guid.NewGuid().GetHashCode()).Next(100, 4000); + string @string = DateTime.Now.AddMilliseconds(-num).ToString(" HH:mm:ss"); + string text = DateTime.Now.AddMilliseconds(-num).ToString("yyyy/MM/dd"); + long timestamp = Tools.GetTimestamp2(); + string e = "TF1;020;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;false;false;" + timestamp + ";8;2005/6/7%2021%3A33%3A44;;;;;;;;;" + num + ";-480;-480;" + text + Tools.ToEscape(@string) + ";;;;;;;;;;;;;;;;;;;;;;;;25;;;;;;;;;;;;;;;5.6.1-0;;"; + string text2 = new ClientInfoCode().f(e); + return "{\"U\":\"" + userAction + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"" + text2 + "\"}"; + } + } +} diff --git a/AppleBatch_June.Utils/GetGameUtils.cs b/AppleBatch_June.Utils/GetGameUtils.cs new file mode 100644 index 0000000..f02d433 --- /dev/null +++ b/AppleBatch_June.Utils/GetGameUtils.cs @@ -0,0 +1,545 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text.RegularExpressions; +using System.Threading; +using System.Web; +using AppleBatch_June.ExecuteTasks; +using AppleBatch_June.Model; +using DotNet.Utilities; + +namespace AppleBatch_June.Utils +{ + public class GetGameUtils : ItunesUtlis + { + public GetGameUtils(ITaskRunState _taskState, string _notyKey, Action _action = null, bool _OpenVpn = false) + : base(_taskState, _notyKey, _action, _OpenVpn) + { + } + + public int getNewGameByUrl3(string url, AppleItunesLogin itunesLogin) + { + string html = ""; + string[] gameDataInfo = getGameDataInfo(url, itunesLogin, ref html); + if (gameDataInfo != null) + { + string buyParams = gameDataInfo[0]; + Dictionary dictionary = null; + bool flag = false; + try + { + dictionary = Tools.Todejosn>(gameDataInfo[1]); + } + catch (Exception) + { + flag = true; + } + if (flag) + { + return getGameByUrl(url, itunesLogin); + } + string text = (dynamic)dictionary["pageId"]; + _ = (string)(dynamic)dictionary["page"]; + string text2 = (dynamic)dictionary["pageType"]; + Dictionary dataSource = ConveDicTobuyParams(buyParams); + dataSource.getDicVal("productType", ""); + string dicVal = dataSource.getDicVal("appExtVrsId", ""); + string dicVal2 = dataSource.getDicVal("salableAdamId", ""); + string dicVal3 = dataSource.getDicVal("productType", ""); + string dicVal4 = dataSource.getDicVal("pg", ""); + string dicVal5 = dataSource.getDicVal("pricingParameters", ""); + string dicVal6 = dataSource.getDicVal("price", "0"); + string text3 = "appExtVrsId=" + dicVal + "&"; + if (string.IsNullOrEmpty(dicVal)) + { + text3 = ""; + } + string postData = text3 + "clientBuyId=1&guid=[guid]&kbsync=[kbsync]&mtApp=com.apple.AppStore&mtClientId=[xp_ci]&mtEventTime=" + Tools.GetTimestamp2() + "&mtPageContext=App Store&mtPageId=" + text + "&mtPageType=" + text2 + "&mtPrevPage=page_" + dicVal + "&mtRequestId=[mtRequestId]&mtTopic=xp_its_main&needDiv=1&pg=" + dicVal4 + "&price=" + dicVal6 + "&pricingParameters=" + dicVal5 + "&productType=" + dicVal3 + "&salableAdamId=" + dicVal2; + string getWkUrl = ""; + string yzmUrl = ""; + string gamaInfoConvert = GetGamaInfoConvert(itunesLogin, postData, url, "1", itunesLogin.serverIndex, ref yzmUrl, ref getWkUrl); + if (gamaInfoConvert == "0000") + { + return 1; + } + if (gamaInfoConvert.StartsWith("sign")) + { + return 99; + } + if (gamaInfoConvert.StartsWith("1122") && VerificationGame(yzmUrl, getWkUrl, itunesLogin, dicVal2)) + { + gamaInfoConvert = GetGamaInfoConvert(itunesLogin, postData, url, "1", itunesLogin.serverIndex, ref yzmUrl, ref getWkUrl); + if (gamaInfoConvert == "0000") + { + return 1; + } + appGameUrlLog(itunesLogin.account, "链接:" + HttpUtility.UrlDecode(url) + "\n " + gamaInfoConvert + "[" + itunesLogin.serverIndex + "]"); + return 0; + } + appGameUrlLog(itunesLogin.account, "链接:" + HttpUtility.UrlDecode(url) + "\n " + gamaInfoConvert + "[" + itunesLogin.serverIndex + "]"); + return 0; + } + string keyValue = GetKeyValue("explanation", "", "", html); + if (!string.IsNullOrEmpty(keyValue)) + { + appGameUrlLog(itunesLogin.account, "链接:" + HttpUtility.UrlDecode(url) + "\n 失败:" + keyValue); + } + else if (!html.Contains("product-dv") && !html.Contains("product-dv-product")) + { + appGameUrlLog(itunesLogin.account, "链接:" + HttpUtility.UrlDecode(url) + "\n 失败:没有购买参数,请检查ID和应用国家是否一致"); + } + else + { + appGameUrlLog(itunesLogin.account, "链接:" + HttpUtility.UrlDecode(url) + "\n 失败:请检查ID和应用国家是否一致[-]"); + } + return 0; + } + + public string GameVerification(string appleId, string pic_str, string wkInt, string salableAdamId, string count, int serverIndex, ref string yzmUrl, ref string getWkUrl, bool isAgent = false) + { + if (pic_str == "99999") + { + new Dictionary(); + } + return ""; + } + + public int getGameByUrl(string url, AppleItunesLogin itunesLogin) + { + Dictionary dictionary = new Dictionary(); + dictionary.Add("X-Apple-Store-Front", itunesLogin.software.Split(',')[0] + ",28"); + string userAgent = itunesLogin.UserAgent; + itunesLogin.UserAgent = "iTunes/12.0.1 (Macintosh; OS X 10.10) AppleWebKit/600.1.3.41"; + HttpResult itunesWebContext = getItunesWebContext(url, "", itunesLogin, dictionary, addToken: false); + itunesLogin.UserAgent = userAgent; + if (itunesWebContext.StatusCode == (HttpStatusCode)0) + { + int num = 0; + do + { + Thread.Sleep(1000); + num++; + itunesWebContext = getItunesWebContext(url, "", itunesLogin, dictionary, addToken: false); + } + while (itunesWebContext.StatusCode == (HttpStatusCode)0 && num < 5); + } + if (itunesWebContext.StatusCode == HttpStatusCode.OK) + { + _ = itunesLogin.cookis.Where((KeyValuePair c) => c.Key == "xp_ci").FirstOrDefault().Value; + GameDataInfo gameDataInfo = ParsingGameData(itunesWebContext.Html, url); + if (gameDataInfo != null) + { + try + { + Dictionary dataSource = ConveDicTobuyParams(gameDataInfo.buyParams2); + string dicVal = dataSource.getDicVal("appExtVrsId", ""); + string dicVal2 = dataSource.getDicVal("salableAdamId", ""); + string dicVal3 = dataSource.getDicVal("productType", ""); + string dicVal4 = dataSource.getDicVal("pg", ""); + string dicVal5 = dataSource.getDicVal("pricingParameters", ""); + string dicVal6 = dataSource.getDicVal("price", "0"); + string pageId = gameDataInfo.pageId; + _ = gameDataInfo.page; + string pageType = gameDataInfo.pageType; + string text = "appExtVrsId=" + dicVal + "&"; + if (string.IsNullOrEmpty(dicVal)) + { + text = ""; + } + string postData = text + "clientBuyId=1&guid=[guid]&kbsync=[kbsync]&mtApp=com.apple.AppStore&mtClientId=[xp_ci]&mtEventTime=" + Tools.GetTimestamp2() + "&mtPageContext=App Store&mtPageId=" + pageId + "&mtPageType=" + pageType + "&mtPrevPage=page_" + dicVal + "&mtRequestId=[mtRequestId]&mtTopic=xp_its_main&needDiv=1&pg=" + dicVal4 + "&price=" + dicVal6 + "&pricingParameters=" + dicVal5 + "&productType=" + dicVal3 + "&salableAdamId=" + dicVal2; + string yzmUrl = ""; + string getWkUrl = ""; + string gamaInfoConvert = GetGamaInfoConvert(itunesLogin, postData, url, "1", itunesLogin.serverIndex, ref yzmUrl, ref getWkUrl); + if (gamaInfoConvert == "0000") + { + return 1; + } + if (gamaInfoConvert.StartsWith("sign")) + { + return 99; + } + if (gamaInfoConvert.StartsWith("1122") && VerificationGame(yzmUrl, getWkUrl, itunesLogin, dicVal2)) + { + gamaInfoConvert = GetGamaInfoConvert(itunesLogin, postData, url, "1", itunesLogin.serverIndex, ref yzmUrl, ref getWkUrl); + if (gamaInfoConvert == "0000") + { + return 1; + } + appGameUrlLog(itunesLogin.account, "链接:" + HttpUtility.UrlDecode(url) + "\n " + gamaInfoConvert); + return 0; + } + appGameUrlLog(itunesLogin.account, "链接:" + HttpUtility.UrlDecode(url) + "\n " + gamaInfoConvert); + return 0; + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + appGameUrlLog(itunesLogin.account, "链接:" + HttpUtility.UrlDecode(url) + "\n 失败:" + ex.Message); + return 0; + } + } + string keyValue = GetKeyValue("explanation", "", "", itunesWebContext.Html); + if (!string.IsNullOrEmpty(keyValue)) + { + if (keyValue.ToLower().StartsWith("sign")) + { + return 99; + } + appGameUrlLog(itunesLogin.account, "链接:" + HttpUtility.UrlDecode(url) + "\n 失败:" + keyValue); + } + else if (!itunesWebContext.Html.Contains("product-dv") && !itunesWebContext.Html.Contains("product-dv-product")) + { + appGameUrlLog(itunesLogin.account, "链接:" + HttpUtility.UrlDecode(url) + "\n 失败:没有购买参数,请检查ID和应用国家是否一致"); + } + else + { + appGameUrlLog(itunesLogin.account, "链接:" + HttpUtility.UrlDecode(url) + "\n 失败:请检查ID和应用国家是否一致[" + itunesWebContext.StatusCode.ToString() + "]"); + } + return 0; + } + appGameUrlLog(itunesLogin.account, "链接:" + HttpUtility.UrlDecode(url) + "\n 失败:网络请求失败"); + return 0; + } + + public string GetGamaInfoConvert(AppleItunesLogin itunesLogin, string postData, string gameUrl, string gameType, int serverIndex, ref string yzmUrl, ref string getWkUrl) + { + postData += "&wasWarnedAboutFirstTimeBuy=true"; + string gamaInfo = GetGamaInfo(itunesLogin, postData, gameUrl, serverIndex); + if (!string.IsNullOrEmpty(gamaInfo)) + { + dynamic val = Tools.Todejosn(gamaInfo); + if (gamaInfo.Contains("captchaModel")) + { + dynamic val2 = val["captchaModel"]; + if (val2 != null) + { + yzmUrl = val2["yzmUrl"]; + getWkUrl = val2["getWkUrl"]; + } + } + return val["msg"]; + } + return "获取失败"; + } + + public string GetGamaInfo(AppleItunesLogin itunesLogin, string postData, string gameUrl, int serverIndex, bool isxieyi = false, bool paySwit = false) + { + Dictionary dictionary = new Dictionary(); + string url = "https://p" + itunesLogin.ServerId + "-buy.itunes.apple.com/WebObjects/MZBuy.woa/wa/buyProduct?guid=" + itunesLogin.Guid; + Dictionary dictionary2 = new Dictionary(); + dictionary2.Add("X-Apple-Store-Front", itunesLogin.software.Split(',')[0] + ",13"); + string text = (from c in postData.Split('&') + where c.Split('=')[0] == "price" + select c.Split('=')[1]).FirstOrDefault(); + bool flag = false; + if (text != null) + { + if (text.Trim() == "0") + { + itunesLogin.UserAgent = "iBooks/2.0 (Macintosh; OS X 12.10) AppleWebKit/600.1.3.41"; + } + else + { + flag = true; + if (paySwit) + { + itunesLogin.UserAgent = "iBooks/2.0 (Macintosh; OS X 12.10) AppleWebKit/600.1.3.41"; + } + else + { + itunesLogin.UserAgent = "MacAppStore/2.0 (Macintosh; OS X 12.10) AppleWebKit/600.1.3.41"; + } + } + } + string value = itunesLogin.cookis.Where((KeyValuePair c) => c.Key == "xp_ci").FirstOrDefault().Value; + string reqIda = ""; + string guidNow = ""; + string appleKbsync = getAppleKbsync(itunesLogin, ref reqIda, ref guidNow); + postData = postData.Replace("[kbsync]", appleKbsync); + string newValue = value + reqIda; + postData = postData.Replace("[guid]", guidNow); + postData = postData.Replace("[xp_ci]", value); + postData = postData.Replace("[mtRequestId]", newValue); + (from c in postData.Split('&') + where c.Split('=')[0] == "salableAdamId" + select c.Split('=')[1]).FirstOrDefault(); + HttpResult httpResult = postItunesWebContext(url, postData, gameUrl, itunesLogin, dictionary2); + if (httpResult.StatusCode == (HttpStatusCode)0) + { + int num = 0; + do + { + Thread.Sleep(1000); + num++; + httpResult = postItunesWebContext(url, postData, gameUrl, itunesLogin, dictionary2); + } + while (httpResult.StatusCode == (HttpStatusCode)0 && num < 3); + } + if (httpResult.StatusCode == HttpStatusCode.OK) + { + if (httpResult.Html.Contains("purchaseSuccess")) + { + dictionary.AddOrUpdateObj("msg", "0000"); + return Tools.Toenjson(dictionary); + } + if (!httpResult.Html.Contains("Downloading Item") && !httpResult.Html.Contains("MZCommerceSoftware.OwnsAllUnfulfilledFailureSoftwareApplication") && !httpResult.Html.Contains("MZCommerceSoftware.OwnsCurrentMinorSoftwareApplicationForUpdate") && !httpResult.Html.Contains("MZCommerceSoftware.OwnsSupersededMinorSoftwareApplicationForUpdate") && !httpResult.Html.Contains("MZCommerceSong.OwnsSongForRedownload")) + { + if (httpResult.Html.Contains("termsPage?") && !isxieyi) + { + string text2 = "https://buy.itunes.apple.com/WebObjects/MZFinance.woa/wa/getTermsByCountryAndTypeSrv?cc=" + itunesLogin.AreaCode + "&termsType=MZStore.NewTermsAndConditionsStatement"; + HttpResult itunesWebContext = getItunesWebContext(text2, "", itunesLogin, null, addToken: true); + if (itunesWebContext.StatusCode != HttpStatusCode.OK) + { + dictionary.AddOrUpdateObj("msg", "失败:协议处理失败"); + return Tools.Toenjson(dictionary); + } + string token = AppleNetworkBase.GetToken(itunesWebContext.Html, "termsVersionId\":", ","); + string postData2 = "{\"id\":\"" + itunesLogin.dsis + "\",\"accepted\":" + token + "}"; + string url2 = "https://p" + itunesLogin.ServerId + "-buy.itunes.apple.com/WebObjects/MZFinance.woa/wa/termsCheckSrv"; + httpResult = postUrlencodedItunesWebContext(url2, postData2, text2, itunesLogin, null); + if (httpResult.StatusCode == HttpStatusCode.OK && httpResult.Html.Contains("status")) + { + return GetGamaInfo(itunesLogin, postData, gameUrl, serverIndex, isxieyi: true); + } + } + string keyValue = GetKeyValue("url", "", "", httpResult.Html); + if (keyValue.Contains("finance-app.itunes.apple.com/challenge")) + { + string text3 = (from c in postData.Split('&') + where c.Split('=')[0] == "salableAdamId" + select c.Split('=')[1]).FirstOrDefault(); + if (!string.IsNullOrEmpty(text3)) + { + CaptchaModel captchaModel = LoadCaptcha(keyValue, text3, itunesLogin, 0); + if (captchaModel != null) + { + dictionary.AddOrUpdateObj("msg", "1122,需要进行验证码识别"); + dictionary.AddOrUpdateObj("captchaModel", captchaModel); + return Tools.Toenjson(dictionary); + } + } + } + string keyValue2 = GetKeyValue("customerMessage", "", "", httpResult.Html); + string keyValue3 = GetKeyValue("explanation", "", "", httpResult.Html); + if (!string.IsNullOrEmpty(keyValue2)) + { + if (httpResult.Html.Contains("MZCommerce.OsIncompatible") && flag && !paySwit) + { + return GetGamaInfo(itunesLogin, postData, gameUrl, serverIndex, isxieyi: true, paySwit: true); + } + if ((httpResult.Html.Contains("LoginRequired") || httpResult.Html.Contains("authorization")) && !isxieyi) + { + dictionary.AddOrUpdateObj("msg", "sign"); + return Tools.Toenjson(dictionary); + } + dictionary.AddOrUpdateObj("msg", "失败:" + keyValue2 + "【" + keyValue3 + "】[" + isxieyi + "]"); + return Tools.Toenjson(dictionary); + } + string keyValue4 = GetKeyValue("message", "", "", httpResult.Html); + if (!string.IsNullOrEmpty(keyValue4)) + { + if ((httpResult.Html.Contains("LoginRequired") || httpResult.Html.Contains("authorization")) && !isxieyi) + { + dictionary.AddOrUpdateObj("msg", "sign"); + return Tools.Toenjson(dictionary); + } + dictionary.AddOrUpdateObj("msg", "失败:" + keyValue4 + "【" + keyValue3 + "】[" + isxieyi + "]"); + return Tools.Toenjson(dictionary); + } + dictionary.AddOrUpdateObj("msg", "失败:未知异常"); + return Tools.Toenjson(dictionary); + } + dictionary.AddOrUpdateObj("msg", "0000"); + return Tools.Toenjson(dictionary); + } + dictionary.AddOrUpdateObj("msg", "失败:网络请求失败,无法请求完成"); + return Tools.Toenjson(dictionary); + } + + public bool VerificationGame(string yzmUrl, string getWkUrl, AppleItunesLogin itunesLogin, string salableAdamId) + { + Dictionary dictionary = new Dictionary(); + dictionary.Add("X-Apple-Store-Front", itunesLogin.software); + bool flag = false; + bool flag2 = false; + for (int i = 0; i < 4; i++) + { + try + { + action?.Invoke(base.notyKey, DisplyType.xinxi, "正在识别验证码" + (i + 1) + "..."); + HttpResult itunesWebContext = getItunesWebContext(yzmUrl, "", itunesLogin, dictionary, addToken: false, ResultType.Byte); + HttpResult itunesWebContext2 = getItunesWebContext(getWkUrl, "", itunesLogin, dictionary, addToken: true); + string value = new Regex("wk\":([\\s\\S]*?)}").Match(itunesWebContext2.Html).Groups[1].Value; + if (itunesWebContext.StatusCode != HttpStatusCode.OK) + { + continue; + } + if (itunesWebContext.ResultByte == null) + { + if (!GameVerification(itunesLogin.account, "99999", value, salableAdamId, "0", itunesLogin.serverIndex, ref yzmUrl, ref getWkUrl).StartsWith("1122")) + { + break; + } + continue; + } + string imageContent = Convert.ToBase64String(itunesWebContext.ResultByte); + HttpResult captcha = APIUtlis.getCaptcha(1, imageContent, flag2); + if (captcha.StatusCode != HttpStatusCode.OK) + { + continue; + } + dynamic val = Tools.Todejosn(captcha.Html); + if (val["Code"] == "0000") + { + string pic_str = val["Data"]; + string text = GameVerification(itunesLogin.account, pic_str, value, salableAdamId, "0", itunesLogin.serverIndex, ref yzmUrl, ref getWkUrl); + if (text == "0000") + { + APIUtlis.getCaptcha(3, imageContent); + flag = true; + break; + } + if (text.StartsWith("1122")) + { + APIUtlis.getCaptcha(2, imageContent); + } + } + else + { + flag2 = !flag2; + } + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + action?.Invoke(base.notyKey, DisplyType.xinxi, "正在识别验证码" + (i + 1) + "..."); + } + } + if (flag) + { + action?.Invoke(base.notyKey, DisplyType.xinxi, "验证成功"); + } + else + { + action?.Invoke(base.notyKey, DisplyType.xinxi, "验证失败"); + } + return flag; + } + + public CaptchaModel LoadCaptcha(string yanzhegnUrl, string salableAdamId, AppleItunesLogin itunesLogin, int count) + { + try + { + if (count > 2) + { + return null; + } + Dictionary dictionary = new Dictionary(); + dictionary.Add("X-Apple-Store-Front", itunesLogin.software); + string url = "https://play.itunes.apple.com/WebObjects/MZPlay.woa/wa/nuDataShowCaptchaSrv?X-Token=" + itunesLogin.xtoken + "&guid=" + itunesLogin.Guid + "&salableAdamId=" + salableAdamId; + HttpResult itunesWebContext = getItunesWebContext(url, "", itunesLogin, dictionary, addToken: true); + if (itunesWebContext.StatusCode == HttpStatusCode.OK) + { + dynamic val = Tools.Todejosn(itunesWebContext.Html); + string text = val["nuDetectInfo"]["html"]; + dynamic val2 = Tools.Todejosn(new Regex("try{ndwti\\(([\\s\\S]*?)\\)").Match(text).Groups[1].Value); + if (val2 != null) + { + return VerificationCodeIdentification(yanzhegnUrl, text, salableAdamId, itunesLogin, 0); + } + } + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + return LoadCaptcha(yanzhegnUrl, salableAdamId, itunesLogin, count + 1); + } + return null; + } + + public CaptchaModel VerificationCodeIdentification(string yanzhegnUrl, string nuDetectInfo, string salableAdamId, AppleItunesLogin itunesLogin, int count) + { + Dictionary suosou = new Dictionary(); + suosou.AddOrUpdate("yanzhegnUrl", yanzhegnUrl); + dynamic val = Tools.Todejosn(new Regex("try{ndwti\\(([\\s\\S]*?)\\)").Match(nuDetectInfo).Groups[1].Value); + string value = val["fd"]["s"]; + suosou.AddOrUpdate("ndpd-s", value); + string value2 = val["fd"]["f"]; + suosou.AddOrUpdate("ndpd-f", value2); + string value3 = val["fd"]["fm"]; + suosou.AddOrUpdate("ndpd-fm", value3); + string value4 = val["fd"]["w"]; + suosou.AddOrUpdate("ndpd-w", value4); + string text = new Random().Next(107742, 740782).ToString(); + string value5 = CreatMdpdipr(); + suosou.AddOrUpdate("ndpd-ipr", value5); + string value6 = "d1-ac04327a26f1ac9"; + suosou.AddOrUpdate("ndpd-di", value6); + string value7 = "b2|1920x1080 1920x1052 24 24|-480|zh-CN|bp1-9fa0b15534448358|true||Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36|Not Supported"; + suosou.AddOrUpdate("ndpd-bi", value7); + string value8 = Regex.Match(nuDetectInfo, "(?<=\\ array2[i] || array3[i] < array[i]) + { + flag = false; + break; + } + } + result = flag; + } + return result; + } + + private static void TryParseRanges(string ranges, out int count, out string start_ip, out string end_ip) + { + string[] array = ranges.Split('-'); + if (array.Count() != 2 && array.Count() != 1) + { + throw new ApplicationException("IP范围指定格式不正确,可以指定一个IP,如果是一个范围请用“-”分隔"); + } + count = array.Count(); + start_ip = array[0]; + end_ip = ""; + try + { + IPAddress.Parse(array[0]); + } + catch (Exception) + { + throw new ApplicationException("IP地址无效"); + } + if (array.Count() == 2) + { + end_ip = array[1]; + try + { + IPAddress.Parse(array[1]); + } + catch (Exception) + { + throw new ApplicationException("IP地址无效"); + } + } + } + + private static byte[] Get4Byte(string ip) + { + string[] array = ip.Split('.'); + List list = new List(); + string[] array2 = array; + foreach (string value in array2) + { + list.Add(Convert.ToByte(value)); + } + return list.ToArray(); + } + } +} diff --git a/AppleBatch_June.Utils/ProxyAccountCache.cs b/AppleBatch_June.Utils/ProxyAccountCache.cs new file mode 100644 index 0000000..ccd185a --- /dev/null +++ b/AppleBatch_June.Utils/ProxyAccountCache.cs @@ -0,0 +1,279 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.Sockets; + +namespace AppleBatch_June.Utils +{ + public class ProxyAccountCache + { + [Serializable] + public class LockCounts + { + public int Count { get; set; } + } + + public static ConcurrentDictionary proxyAccountCacheInfos = new ConcurrentDictionary(); + + public static readonly Dictionary objReddemLockS = new Dictionary(); + + public static int maxAddCount = 50; + + public static void addwebProxyIp(string appleId, string ip, string userAgent, string iframeId) + { + if (string.IsNullOrEmpty(appleId) || AppSysConfig.isLowMemoryModel || proxyAccountCacheInfos.Count >= maxAddCount) + { + return; + } + initLock(appleId); + lock (objReddemLockS[appleId.Trim()]) + { + if (proxyAccountCacheInfos.ContainsKey(appleId.Trim())) + { + proxyAccountCacheInfos[appleId.Trim()].ProxyIp = ip; + return; + } + ProxyAccountModel ReddemUserInfos = new ProxyAccountModel + { + ProxyIp = ip, + accountWebUserAgent = userAgent + }; + proxyAccountCacheInfos.AddOrUpdate(appleId.Trim(), ReddemUserInfos, (string c, ProxyAccountModel d) => ReddemUserInfos); + } + } + + public static void addProxyIp(string appleId, string ip) + { + if (string.IsNullOrEmpty(appleId) || AppSysConfig.isLowMemoryModel) + { + return; + } + initLock(appleId); + lock (objReddemLockS[appleId.Trim()]) + { + if (proxyAccountCacheInfos.ContainsKey(appleId.Trim())) + { + proxyAccountCacheInfos[appleId.Trim()].ProxyIp = ip; + return; + } + ProxyAccountModel ReddemUserInfos = new ProxyAccountModel + { + ProxyIp = ip + }; + proxyAccountCacheInfos.AddOrUpdate(appleId.Trim(), ReddemUserInfos, (string c, ProxyAccountModel d) => ReddemUserInfos); + } + } + + public static List GetProxyAccountModel(string oldIp) + { + List list = new List(); + if (!string.IsNullOrEmpty(oldIp) && !AppSysConfig.isLowMemoryModel) + { + lock (objReddemLockS) + { + foreach (KeyValuePair item in proxyAccountCacheInfos.Where((KeyValuePair c) => c.Value.ProxyIp == oldIp)) + { + if (item.Key != null) + { + list.Add(item.Value); + } + } + return list; + } + } + return list; + } + + public static void ReclassifyAccountAll() + { + lock (objReddemLockS) + { + foreach (KeyValuePair proxyAccountCacheInfo in proxyAccountCacheInfos) + { + string proxyIp = "rest_ip," + proxyAccountCacheInfo.Key.ToLower(); + proxyAccountCacheInfo.Value.ProxyIp = proxyIp; + proxyAccountCacheInfo.Value.expirationTime = null; + } + } + } + + public static void ReclassifyAccountIp(string appleId) + { + if (string.IsNullOrEmpty(appleId)) + { + return; + } + lock (objReddemLockS) + { + if (proxyAccountCacheInfos.ContainsKey(appleId.Trim())) + { + string proxyIp = "rest_ip," + appleId.ToLower(); + proxyAccountCacheInfos[appleId.Trim()].ProxyIp = proxyIp; + proxyAccountCacheInfos[appleId.Trim()].expirationTime = null; + } + } + } + + public static ProxyAccountModel getProxyAccountInfo(string appleId, int maxCount = 0) + { + ProxyAccountModel proxyAccountModel = null; + string text = ""; + if (!string.IsNullOrEmpty(appleId) && !AppSysConfig.isLowMemoryModel) + { + initLock(appleId.Trim()); + lock (objReddemLockS[appleId.Trim()]) + { + if (proxyAccountCacheInfos.ContainsKey(appleId.Trim())) + { + proxyAccountModel = proxyAccountCacheInfos[appleId.Trim()]; + if (proxyAccountModel != null) + { + if (maxCount > 0 && proxyAccountModel.getIpCount > maxCount) + { + string proxyIp = "rest_ip," + appleId.ToLower(); + proxyAccountModel.expirationTime = null; + proxyAccountModel.ProxyIp = proxyIp; + return proxyAccountModel; + } + proxyAccountModel.getIpCount++; + if (proxyAccountModel.expirationTime.HasValue) + { + if (!(proxyAccountModel.expirationTime.Value.AddSeconds(-15.0) > DateTime.Now)) + { + string proxyIp2 = "rest_ip," + appleId.ToLower(); + proxyAccountModel.ProxyIp = proxyIp2; + return proxyAccountModel; + } + text = proxyAccountModel.ProxyIp; + } + else + { + text = proxyAccountModel.ProxyIp; + } + } + } + } + if (!string.IsNullOrEmpty(text)) + { + lock (objReddemLockS[appleId.Trim()]) + { + using Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + string[] array = text.Substring(text.IndexOf('@') + 1).Split(':'); + if (array.Length != 2) + { + return proxyAccountModel; + } + if (!array[0].Contains("|")) + { + string ipString = array[0]; + int port = Tools.ToInt(array[1].Trim(), 0); + if (socket.BeginConnect(new IPEndPoint(IPAddress.Parse(ipString), port), null, null).AsyncWaitHandle.WaitOne(2000, exitContext: true)) + { + return proxyAccountModel; + } + string proxyIp3 = "rest_ip," + appleId.ToLower(); + lock (objReddemLockS[appleId.Trim()]) + { + if (proxyAccountCacheInfos.ContainsKey(appleId.Trim())) + { + proxyAccountCacheInfos[appleId.Trim()].ProxyIp = proxyIp3; + proxyAccountCacheInfos[appleId.Trim()].expirationTime = null; + } + } + return proxyAccountModel; + } + return proxyAccountModel; + } + } + } + return proxyAccountModel; + } + + public static string getProxyAccountIP(string appleId, int maxCount = 0) + { + try + { + ProxyAccountModel proxyAccountInfo = getProxyAccountInfo(appleId.Trim(), maxCount); + if (proxyAccountInfo != null) + { + return proxyAccountInfo.ProxyIp; + } + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + } + return ""; + } + + public static void RestAllot(string newIp) + { + if (string.IsNullOrEmpty(newIp)) + { + return; + } + lock (objReddemLockS) + { + KeyValuePair keyValuePair = proxyAccountCacheInfos.Where((KeyValuePair c) => c.Value.ProxyIp == "").FirstOrDefault(); + if (keyValuePair.Key != null) + { + keyValuePair.Value.ProxyIp = newIp; + } + } + } + + public static void removeReddemUserInfo(string appleId) + { + if (string.IsNullOrEmpty(appleId)) + { + return; + } + lock (objReddemLockS) + { + if (proxyAccountCacheInfos.ContainsKey(appleId.Trim())) + { + proxyAccountCacheInfos.TryRemove(appleId, out var _); + } + } + removeLock(appleId); + } + + private static void removeLock(string appleId) + { + if (string.IsNullOrEmpty(appleId)) + { + return; + } + lock (objReddemLockS) + { + if (objReddemLockS.ContainsKey(appleId.Trim())) + { + objReddemLockS.Remove(appleId.Trim()); + } + } + } + + private static LockCounts initLock(string appleId) + { + if (!string.IsNullOrEmpty(appleId.Trim())) + { + lock (objReddemLockS) + { + if (!objReddemLockS.ContainsKey(appleId.Trim())) + { + LockCounts lockCounts = new LockCounts + { + Count = 0 + }; + objReddemLockS.Add(appleId.Trim(), lockCounts); + return lockCounts; + } + return objReddemLockS[appleId.Trim()]; + } + } + return null; + } + } +} diff --git a/AppleBatch_June.Utils/ProxyAccountModel.cs b/AppleBatch_June.Utils/ProxyAccountModel.cs new file mode 100644 index 0000000..75a9ab4 --- /dev/null +++ b/AppleBatch_June.Utils/ProxyAccountModel.cs @@ -0,0 +1,46 @@ +using System; +using System.Linq; +using AppleBatch_June.ExecuteTasks; +using AppleBatch_June.Model; + +namespace AppleBatch_June.Utils +{ + public class ProxyAccountModel + { + public string _ProxyIp = ""; + + public string ProxyIp + { + get + { + return _ProxyIp; + } + set + { + if (!string.IsNullOrEmpty(value)) + { + ProxyIpModel proxyIpModel = (from c in ProxyRunService.incProxyExpirationTimeModels.ToArray() + where c.prixyIp == value + select c).FirstOrDefault(); + if (proxyIpModel != null) + { + expirationTime = proxyIpModel.expirationTime; + } + getIpCount = 0L; + AddTime = DateTime.Now; + _ProxyIp = value; + } + } + } + + public DateTime AddTime { get; set; } = DateTime.Now; + + + public DateTime? expirationTime { get; set; } + + public long getIpCount { get; set; } + + public string accountWebUserAgent { get; set; } = ""; + + } +} diff --git a/AppleBatch_June.Utils/iCloudAccountLoginCache.cs b/AppleBatch_June.Utils/iCloudAccountLoginCache.cs new file mode 100644 index 0000000..2f979e8 --- /dev/null +++ b/AppleBatch_June.Utils/iCloudAccountLoginCache.cs @@ -0,0 +1,188 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using AppleBatch_June.Model; + +namespace AppleBatch_June.Utils +{ + public class iCloudAccountLoginCache + { + private class LockCounts + { + public int Count { get; set; } + } + + private static int timeGetInfoCountMax = 500000; + + public static ConcurrentDictionary> iTunesReddemUserInfos = new ConcurrentDictionary>(); + + private static readonly Dictionary objReddemLockS = new Dictionary(); + + public static int maxAddCount = 50; + + public static void addReddemUserInfo(string appleId, AppleiCloundLogin users) + { + if (iTunesReddemUserInfos.Count >= maxAddCount) + { + lock (objReddemLockS) + { + KeyValuePair> keyValuePair = iTunesReddemUserInfos.FirstOrDefault(); + if (keyValuePair.Value != null) + { + if (keyValuePair.Value.Count > 0) + { + removeReddemUserInfo(keyValuePair.Key, keyValuePair.Value.First().Key); + } + else + { + removeReddemUserInfo(keyValuePair.Key, ""); + } + } + } + } + if (string.IsNullOrEmpty(appleId) || AppSysConfig.isLowMemoryModel) + { + return; + } + initLock(appleId); + lock (objReddemLockS[appleId.Trim()]) + { + if (users == null || !(users.mmeAuthToken != "0") || string.IsNullOrEmpty(users.mmeAuthToken)) + { + return; + } + ConcurrentDictionary ReddemUserInfos = null; + if (iTunesReddemUserInfos.ContainsKey(appleId.Trim())) + { + ReddemUserInfos = iTunesReddemUserInfos[appleId.Trim()]; + } + else + { + ReddemUserInfos = new ConcurrentDictionary(); + iTunesReddemUserInfos.AddOrUpdate(appleId.Trim(), ReddemUserInfos, (string c, ConcurrentDictionary d) => ReddemUserInfos); + } + users.StdndbyKeyGuid = Guid.NewGuid().ToString("n"); + ReddemUserInfos.AddOrUpdate(users.StdndbyKeyGuid, users, (string c, AppleiCloundLogin d) => users); + } + } + + public static AppleiCloundLogin getLoginIdUserInfo(string appleId, string applePwd) + { + if (!string.IsNullOrEmpty(appleId) && !AppSysConfig.isLowMemoryModel) + { + LockCounts lockCounts = initLock(appleId); + lock (objReddemLockS[appleId.Trim()]) + { + if (iTunesReddemUserInfos.ContainsKey(appleId.Trim())) + { + ConcurrentDictionary source = iTunesReddemUserInfos[appleId.Trim()]; + string nowTimeCheck = DateTime.Now.ToString("yyMMddHHmm"); + List> list = source.Where((KeyValuePair c) => ((c.Value.timeCheck == nowTimeCheck && c.Value.timeCheckCount < timeGetInfoCountMax) || c.Value.timeCheck != nowTimeCheck) && long.Parse(nowTimeCheck) >= long.Parse(c.Value.timeCheck)).ToList(); + if (list != null && list.Count > 0) + { + int index = lockCounts.Count % list.Count; + lockCounts.Count++; + AppleiCloundLogin value = list[index].Value; + if (value.timeCheck == nowTimeCheck) + { + value.timeCheckCount++; + } + else + { + value.timeCheckCount = 1; + value.timeCheck = DateTime.Now.ToString("yyMMddHHmm"); + } + if (value.account.Trim() == appleId.Trim() && value.pwd.Trim() == applePwd.Trim() && value.mmeAuthToken != "0" && !string.IsNullOrEmpty(value.mmeAuthToken)) + { + if (DateTime.Now.AddMinutes(-14.0) < value.LoginTime) + { + return value; + } + } + else + { + removeReddemUserInfo(appleId, value.StdndbyKeyGuid); + } + } + } + } + } + return null; + } + + public static void removeUserInfoByAppleId(string appleId, string applePwd) + { + AppleiCloundLogin loginIdUserInfo = getLoginIdUserInfo(appleId, applePwd); + if (loginIdUserInfo != null) + { + removeReddemUserInfo(loginIdUserInfo.account, loginIdUserInfo.StdndbyKeyGuid); + } + } + + public static void removeReddemUserInfo(string appleId, string guid) + { + if (string.IsNullOrEmpty(appleId) || AppSysConfig.isLowMemoryModel) + { + return; + } + initLock(appleId); + int num = 0; + lock (objReddemLockS[appleId.Trim()]) + { + ConcurrentDictionary concurrentDictionary = null; + if (iTunesReddemUserInfos.ContainsKey(appleId.Trim())) + { + concurrentDictionary = iTunesReddemUserInfos[appleId.Trim()]; + if (concurrentDictionary.ContainsKey(guid)) + { + concurrentDictionary.TryRemove(guid, out var _); + } + num = concurrentDictionary.Count; + } + } + if (num == 0) + { + iTunesReddemUserInfos.TryRemove(appleId.Trim(), out var _); + removeLock(appleId); + ProxyAccountCache.removeReddemUserInfo(appleId); + } + } + + private static void removeLock(string appleId) + { + if (string.IsNullOrEmpty(appleId)) + { + return; + } + lock (objReddemLockS) + { + if (objReddemLockS.ContainsKey(appleId.Trim())) + { + objReddemLockS.Remove(appleId.Trim()); + } + } + } + + private static LockCounts initLock(string appleId) + { + if (!string.IsNullOrEmpty(appleId)) + { + lock (objReddemLockS) + { + if (!objReddemLockS.ContainsKey(appleId.Trim())) + { + LockCounts lockCounts = new LockCounts + { + Count = 0 + }; + objReddemLockS.Add(appleId.Trim(), lockCounts); + return lockCounts; + } + return objReddemLockS[appleId.Trim()]; + } + } + return null; + } + } +} diff --git a/AppleBatch_June.Utils/iTunesAccountLoginCache.cs b/AppleBatch_June.Utils/iTunesAccountLoginCache.cs new file mode 100644 index 0000000..e9729ed --- /dev/null +++ b/AppleBatch_June.Utils/iTunesAccountLoginCache.cs @@ -0,0 +1,189 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using AppleBatch_June.Model; + +namespace AppleBatch_June.Utils +{ + public class iTunesAccountLoginCache + { + public class LockCounts + { + public int Count { get; set; } + } + + private static int timeGetInfoCountMax = 500000; + + public static ConcurrentDictionary> iTunesReddemUserInfos = new ConcurrentDictionary>(); + + public static readonly Dictionary objReddemLockS = new Dictionary(); + + public static int maxAddCount = 50; + + public static void addReddemUserInfo(string appleId, AppleItunesLogin users) + { + if (iTunesReddemUserInfos.Count >= maxAddCount) + { + lock (objReddemLockS) + { + KeyValuePair> keyValuePair = iTunesReddemUserInfos.FirstOrDefault(); + if (keyValuePair.Value != null) + { + if (keyValuePair.Value.Count > 0) + { + removeReddemUserInfo(keyValuePair.Key, keyValuePair.Value.First().Key); + } + else + { + removeReddemUserInfo(keyValuePair.Key, ""); + } + } + } + } + if (string.IsNullOrEmpty(appleId) || AppSysConfig.isLowMemoryModel) + { + return; + } + initLock(appleId); + lock (objReddemLockS[appleId.Trim()]) + { + if (users == null || !(users.ServerId != "0") || string.IsNullOrEmpty(users.ServerId) || string.IsNullOrEmpty(users.xtoken)) + { + return; + } + ConcurrentDictionary ReddemUserInfos = null; + if (iTunesReddemUserInfos.ContainsKey(appleId.Trim())) + { + ReddemUserInfos = iTunesReddemUserInfos[appleId.Trim()]; + } + else + { + ReddemUserInfos = new ConcurrentDictionary(); + iTunesReddemUserInfos.AddOrUpdate(appleId.Trim(), ReddemUserInfos, (string c, ConcurrentDictionary d) => ReddemUserInfos); + } + users.StdndbyKeyGuid = Guid.NewGuid().ToString("n"); + ReddemUserInfos.Clear(); + ReddemUserInfos.AddOrUpdate(users.StdndbyKeyGuid, users, (string c, AppleItunesLogin d) => users); + } + } + + public static AppleItunesLogin getLoginIdUserInfo(string appleId, string applePwd) + { + if (!string.IsNullOrEmpty(appleId) && !AppSysConfig.isLowMemoryModel) + { + LockCounts lockCounts = initLock(appleId); + lock (objReddemLockS[appleId.Trim()]) + { + if (iTunesReddemUserInfos.ContainsKey(appleId.Trim())) + { + ConcurrentDictionary source = iTunesReddemUserInfos[appleId.Trim()]; + string nowTimeCheck = DateTime.Now.ToString("yyMMddHHmm"); + List> list = (from c in source + orderby c.Value.LoginTime descending + where ((c.Value.timeCheck == nowTimeCheck && c.Value.timeCheckCount < timeGetInfoCountMax) || c.Value.timeCheck != nowTimeCheck) && long.Parse(nowTimeCheck) >= long.Parse(c.Value.timeCheck) + select c).ToList(); + if (list != null && list.Count > 0) + { + int index = lockCounts.Count % list.Count; + lockCounts.Count++; + AppleItunesLogin value = list[index].Value; + if (value.timeCheck == nowTimeCheck) + { + value.timeCheckCount++; + } + else + { + value.timeCheckCount = 1; + value.timeCheck = DateTime.Now.ToString("yyMMddHHmm"); + } + if (value.account.Trim() == appleId.Trim() && value.pwd.Trim() == applePwd.Trim() && value.ServerId != "0" && !string.IsNullOrEmpty(value.ServerId)) + { + if (DateTime.Now.AddMinutes(-14.0) < value.LoginTime) + { + return value; + } + } + else + { + removeReddemUserInfo(appleId, value.StdndbyKeyGuid); + } + } + } + } + } + return null; + } + + public static void removeReddemUserInfo(string appleId, string guid) + { + try + { + if (string.IsNullOrEmpty(appleId) || AppSysConfig.isLowMemoryModel) + { + return; + } + initLock(appleId); + int num = 0; + lock (objReddemLockS[appleId.Trim()]) + { + ConcurrentDictionary concurrentDictionary = null; + if (iTunesReddemUserInfos.ContainsKey(appleId.Trim())) + { + concurrentDictionary = iTunesReddemUserInfos[appleId.Trim()]; + if (concurrentDictionary.ContainsKey(guid)) + { + concurrentDictionary.TryRemove(guid, out var _); + } + num = concurrentDictionary.Count; + } + } + if (num == 0) + { + iTunesReddemUserInfos.TryRemove(appleId.Trim(), out var _); + removeLock(appleId); + ProxyAccountCache.removeReddemUserInfo(appleId); + } + } + catch (Exception) + { + } + } + + private static void removeLock(string appleId) + { + if (string.IsNullOrEmpty(appleId)) + { + return; + } + lock (objReddemLockS) + { + if (objReddemLockS.ContainsKey(appleId.Trim())) + { + objReddemLockS.Remove(appleId.Trim()); + } + } + } + + private static LockCounts initLock(string appleId) + { + if (!string.IsNullOrEmpty(appleId)) + { + lock (objReddemLockS) + { + if (!objReddemLockS.ContainsKey(appleId.Trim())) + { + LockCounts lockCounts = new LockCounts + { + Count = 0 + }; + objReddemLockS.Add(appleId.Trim(), lockCounts); + return lockCounts; + } + return objReddemLockS[appleId.Trim()]; + } + } + return null; + } + } +} diff --git a/AppleBatch_June.Views/DoubleBufferListView.cs b/AppleBatch_June.Views/DoubleBufferListView.cs new file mode 100644 index 0000000..6e76849 --- /dev/null +++ b/AppleBatch_June.Views/DoubleBufferListView.cs @@ -0,0 +1,31 @@ +using System.Windows.Forms; + +namespace AppleBatch_June.Views +{ + public class DoubleBufferListView : ListView + { + protected override CreateParams CreateParams + { + get + { + CreateParams obj = base.CreateParams; + obj.ExStyle |= 33554432; + return obj; + } + } + + public DoubleBufferListView() + { + SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.DoubleBuffer | ControlStyles.OptimizedDoubleBuffer, value: true); + UpdateStyles(); + } + + protected override void OnNotifyMessage(Message m) + { + if (m.Msg != 20) + { + base.OnNotifyMessage(m); + } + } + } +} diff --git a/AppleBatch_June.csproj b/AppleBatch_June.csproj new file mode 100644 index 0000000..f8cb534 --- /dev/null +++ b/AppleBatch_June.csproj @@ -0,0 +1,32 @@ + + + AppleBatch_June + False + WinExe + True + net45 + True + + + 8.0 + True + + + app.ico + + + + + bin\Debug\net45\DotRas.dll + + + + + + + + + + + + \ No newline at end of file diff --git a/AppleBatch_June.sln b/AppleBatch_June.sln new file mode 100644 index 0000000..a3f58a7 --- /dev/null +++ b/AppleBatch_June.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.35026.282 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AppleBatch_June", "AppleBatch_June.csproj", "{D7E018FC-0746-4D4E-B8DE-9D854A8D8D24}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D7E018FC-0746-4D4E-B8DE-9D854A8D8D24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D7E018FC-0746-4D4E-B8DE-9D854A8D8D24}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D7E018FC-0746-4D4E-B8DE-9D854A8D8D24}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D7E018FC-0746-4D4E-B8DE-9D854A8D8D24}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {CFA3E97F-8263-4AEC-83AD-B2B7A97E4E6E} + EndGlobalSection +EndGlobal diff --git a/AppleBatch_June/APIUtlis.cs b/AppleBatch_June/APIUtlis.cs new file mode 100644 index 0000000..c7f3c4c --- /dev/null +++ b/AppleBatch_June/APIUtlis.cs @@ -0,0 +1,550 @@ +using System; +using System.Collections.Generic; +using System.Net; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using AppleBatch_June.ExecuteTasks; +using AppleBatch_June.Model; +using AppleBatch_June.Utils; +using DotNet.Utilities; + +namespace AppleBatch_June +{ + public static class APIUtlis + { + private class DeductioCoun + { + public long useCount { get; set; } + + public long deductioCount { get; set; } + } + + private static Dictionary UserDeductioCounts = new Dictionary(); + + private static StringBuilder requestHtml { get; set; } = new StringBuilder(4000, 4000); + + + public static string requestUrl { get; set; } = ""; + + + public static void AddUserDeductio(int fun, int type) + { + lock (UserDeductioCounts) + { + if (UserDeductioCounts.ContainsKey(fun)) + { + if (type == 1) + { + UserDeductioCounts[fun].useCount = UserDeductioCounts[fun].useCount + 1L; + } + else + { + UserDeductioCounts[fun].deductioCount = UserDeductioCounts[fun].deductioCount + 1L; + } + return; + } + DeductioCoun deductioCoun = new DeductioCoun(); + if (type == 1) + { + deductioCoun.useCount = 1L; + } + else + { + deductioCoun.deductioCount = 1L; + } + UserDeductioCounts.Add(fun, deductioCoun); + } + } + + public static string getUserDeductioInfo(int fun) + { + lock (UserDeductioCounts) + { + if (UserDeductioCounts.ContainsKey(fun)) + { + DeductioCoun deductioCoun = UserDeductioCounts[fun]; + return deductioCoun.useCount + "-" + deductioCoun.deductioCount; + } + } + return "-"; + } + + public static async void rechargeCodeAsync(string code, Action invoke) + { + invoke(await Task.Run(delegate + { + Dictionary postData = new Dictionary + { + { + "token", + AppSysConfig.userToken + }, + { "code", code } + }; + return new ApiNetReq().doPost(postData, "ApiCodeRecharge"); + })); + } + + public static async void getIsLogin(Action invoke) + { + HttpResult httpResult = await Task.Run(delegate + { + Dictionary postData = new Dictionary + { + { + "token", + AppSysConfig.userToken + }, + { "type", 0 } + }; + return new ApiNetReq().doPost(postData, "ApiIsLogin"); + }); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + invoke(httpResult); + } + else + { + MessageBox.Show("网络请求失败"); + } + } + + public static HttpResult getIsLogin(int type) + { + AddUserDeductio(type, 1); + ProxyRunService.nowFun = type; + Dictionary postData = new Dictionary + { + { + "token", + AppSysConfig.userToken + }, + { "type", type } + }; + HttpResult httpResult = new ApiNetReq().doPost(postData, "ApiIsLogin"); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + try + { + dynamic val = Tools.Todejosn(httpResult.Html); + if (!((val["Code"] == "0000") ? true : false)) + { + return httpResult; + } + AppSysConfig.integral = val["Data"]["integral"]; + return httpResult; + } + catch (Exception) + { + return httpResult; + } + } + return httpResult; + } + + public static HttpResult ApiInitNewProxy(IpInfoModel info) + { + Dictionary postData = new Dictionary + { + { + "token", + AppSysConfig.userToken + }, + { + "isp", + Tools.ToUrlEncode(info.isp) + }, + { + "myipTopIip", + Tools.ToUrlEncode(info.ip) + }, + { + "country", + Tools.ToUrlEncode(info.country) + } + }; + return new ApiNetReq().doPost(postData, "ApiInitNewProxy"); + } + + public static HttpResult ApiProxyIp(IpInfoModel info, int routeLine, int type) + { + string text = info?.isp + "," + ProxyRunService.nowFun; + text = text + "," + getUserDeductioInfo(ProxyRunService.nowFun); + Dictionary postData = new Dictionary + { + { + "token", + AppSysConfig.userToken + }, + { "type", type }, + { + "routeLine", + routeLine.ToString() + }, + { + "isp", + Tools.ToUrlEncode(text) + }, + { + "myipTopIip", + Tools.ToUrlEncode(info?.ip) + }, + { + "country", + Tools.ToUrlEncode(info?.country) + } + }; + return new ApiNetReq().doPost(postData, "ApiProxyIp"); + } + + public static HttpResult ApiCheckUseIP(string platformName, List ipLists) + { + Dictionary postData = new Dictionary + { + { + "token", + AppSysConfig.userToken + }, + { "platformName", platformName }, + { "ipLists", ipLists } + }; + return new ApiNetReq().doPost(postData, "ApiCheckUseIP"); + } + + public static HttpResult getCaptcha(int type, string imageContent, bool standby = false) + { + Dictionary postData = new Dictionary + { + { + "token", + AppSysConfig.userToken + }, + { "type", type }, + { + "imageContent", + (type == 1) ? imageContent : "111" + }, + { + "captchaId", + Tools.GetMD5_32(imageContent) + }, + { + "standby", + standby ? 1 : 0 + } + }; + return new ApiNetReq().doPost(postData, "ApiCaptcha"); + } + + public static async void outLogin() + { + await Task.Run(delegate + { + Dictionary postData = new Dictionary { + { + "token", + AppSysConfig.userToken + } }; + return new ApiNetReq().doPost(postData, "ApiOutLogin"); + }); + } + + public static void ApiApplyAct(int type, string typeName) + { + //AddUserDeductio(type, 2); + //Task.Run(delegate + //{ + // AppSysConfig.integral -= AppSysConfig.getTypeById(type).consNum; + // Dictionary postData = new Dictionary + // { + // { + // "token", + // AppSysConfig.userToken + // }, + // { "type", type }, + // { "reqData", typeName } + // }; + // new ApiNetReq().doPost(postData, "ApiApplyAct"); + //}); + } + + public static void AppRequestHtml(string html) + { + try + { + requestHtml.Clear(); + if (html.Length > 4000) + { + requestHtml.Append(html, 0, 4000); + } + else + { + requestHtml.Append(html, 0, html.Length); + } + } + catch (Exception) + { + } + } + + public static void ApiSeriveError(Exception ex, string title = "") + { + if (ex.Message.Contains("停止执行")) + { + return; + } + Task.Run(delegate + { + try + { + string text = ErrorMessage(ex); + if (!text.Contains("system.data.sqlite") && !text.Contains("System.Data.SQLite")) + { + if (!string.IsNullOrEmpty(title)) + { + long totalMemory = GC.GetTotalMemory(forceFullCollection: true); + title = title + "[" + totalMemory + "]"; + } + if (text.Contains("System.OutOfMemoryException") || text.Contains("内存不足") || text.Contains("没有足够的内存")) + { + GC.Collect(); + GC.WaitForPendingFinalizers(); + GC.GetTotalMemory(forceFullCollection: true); + } + text = title + text + "\n url=" + requestUrl + "\n html=" + requestHtml.ToString(); + string value = ApiNetReq.startNowFun.ToString(); + Dictionary postData = new Dictionary + { + { + "token", + AppSysConfig.userToken + }, + { + "errMeeges", + Tools.ToUrlEncode(text) + }, + { + "versions", + FormLogin.versions + }, + { "funNum", value } + }; + new ApiNetReq().doPost(postData, "ApiSeriveError"); + } + } + catch (Exception) + { + } + }); + } + + private static string ErrorMessage(Exception exception) + { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.AppendLine("【Message】:" + exception.Message); + stringBuilder.AppendLine("【Source】:" + exception.Source); + stringBuilder.AppendLine("【TargetSite】:" + ((exception.TargetSite != null) ? exception.TargetSite.Name : "无")); + stringBuilder.AppendLine("【StackTrace】:" + exception.StackTrace); + stringBuilder.AppendLine("【exception】:" + exception); + if (exception.InnerException != null) + { + stringBuilder.AppendLine("----INNER EXCEPTION----"); + stringBuilder.AppendLine("【Message】:" + exception.InnerException.Message); + stringBuilder.AppendLine("【Source】:" + exception.InnerException.Source); + stringBuilder.AppendLine("【TargetSite】:" + ((exception.InnerException.TargetSite != null) ? exception.InnerException.TargetSite.Name : "无")); + stringBuilder.AppendLine("【StackTrace】:" + exception.InnerException.StackTrace); + stringBuilder.AppendLine("【InnerException】:" + exception.InnerException); + } + return stringBuilder.ToString().Replace("/r", "").Replace("/n", "") + .TrimEnd('\n'); + } + + public static HttpResult QueryInfo(string account, string pwd, string type) + { + string idGuid = AppleGuidManage.getIdGuid(account, pwd); + if (!string.IsNullOrEmpty(idGuid)) + { + pwd = pwd + ":{" + idGuid + "}"; + } + Dictionary postData = new Dictionary + { + { + "token", + AppSysConfig.userToken + }, + { "account", account }, + { "pwd", pwd }, + { "type", type } + }; + HttpResult httpResult = new ApiNetReq().doPost(postData, "ApiBannaQuery"); + if (httpResult.StatusCode == (HttpStatusCode)0) + { + httpResult = new ApiNetReq().doPost(postData, "ApiBannaQuery"); + } + return httpResult; + } + + public static HttpResult getItunesLogin(string account, string pwd, int isStore) + { + string value = ""; + if (AppSysConfig.DoubleGuid.ContainsKey(account)) + { + value = AppSysConfig.DoubleGuid[account]; + } + if (AppSysConfig.ReddemVerifyGuid.ContainsKey(account)) + { + value = AppSysConfig.ReddemVerifyGuid[account]; + } + int num = -1; + if (isStore == 1 && AppSysConfig.ReddemStoreSeriveIndex.ContainsKey(account)) + { + num = AppSysConfig.ReddemStoreSeriveIndex[account]; + } + string idGuid = AppleGuidManage.getIdGuid(account, pwd); + if (!string.IsNullOrEmpty(idGuid)) + { + pwd = pwd + ":{" + idGuid + "}"; + } + Dictionary postData = new Dictionary + { + { + "token", + AppSysConfig.userToken + }, + { "account", account }, + { "pwd", pwd }, + { "isStore", isStore }, + { "guid", value }, + { "serviceIpIndex", num } + }; + return new ApiNetReq().doPost(postData, "ApiItunesLogin"); + } + + public static HttpResult serviceSend(string message) + { + dynamic val = Tools.Todejosn(message); + val["timeStamp"] = Tools.GetTimestamp2(); + Tools.Toenjson(val); + return new ApiNetReq().doPost(message, "ApiServiceSend"); + } + + public static HttpResult serviceOtherSend(string message) + { + dynamic val = Tools.Todejosn(message); + val["timeStamp"] = Tools.GetTimestamp2(); + Tools.Toenjson(val); + return new ApiNetReq().doPost(message, "ApiServiceSendOther"); + } + + public static string ApiGetCodeHC(string value) + { + return APPLEHCHelp.getHkCode(value).ToString(); + } + + public static Dictionary ApiGetInitLoginPwd(string type, string privateData, string salt, string serverPublicValue, string account, string accountPwd, string iteration, string protocol) + { + Dictionary postData = new Dictionary + { + { + "token", + AppSysConfig.userToken + }, + { "type", type }, + { "privateData", privateData }, + { "salt", salt }, + { "serverPublicValue", serverPublicValue }, + { "account", account }, + { "accountPwd", accountPwd }, + { "iteration", iteration }, + { "protocol", protocol } + }; + HttpResult httpResult = new ApiNetReq().doPost(postData, "ApiGetInitLoginPwd"); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + dynamic val = Tools.Todejosn(httpResult.Html); + if (val["Code"] == "0000") + { + string obj = val["Data"]; + Dictionary dictionary = new Dictionary(); + string[] array = obj.Split('\n'); + foreach (string text in array) + { + string[] array2 = text.Split('='); + if (array2.Length >= 2) + { + string text2 = array2[0].Trim(); + array2[1].Trim(); + if (!dictionary.ContainsKey(text2)) + { + dictionary.Add(text2, text.Replace(text2 + "=", "")); + } + } + } + return dictionary; + } + } + return new Dictionary(); + } + + public static Dictionary ApiNasQualify(int nasType) + { + Dictionary postData = new Dictionary + { + { + "token", + AppSysConfig.userToken + }, + { "type", "get" }, + { "nasType", nasType } + }; + HttpResult httpResult = new ApiNetReq().doPost(postData, "ApiNasQualify"); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + dynamic val = Tools.Todejosn(httpResult.Html); + if (val["Code"] == "0000") + { + string value = val["Data"]["clientInfo"]; + string value2 = val["Data"]["nasQualify"]; + string value3 = val["Data"]["postData"]; + string value4 = val["Data"]["userAgent"]; + return new Dictionary + { + { "clientInfo", value }, + { "nasQualify", value2 }, + { "postData", value3 }, + { "userAgent", value4 } + }; + } + } + return new Dictionary(); + } + + public static GetIpProxyModel.ProxyModel[] ApiGetIpProxy(int number, int type) + { + if (number > 20) + { + number = 20; + } + Dictionary postData = new Dictionary + { + { + "token", + AppSysConfig.userToken + }, + { "number", number }, + { "type", type } + }; + HttpResult httpResult = new ApiNetReq().doPost(postData, "ApiGetIpProxy"); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + GetIpProxyModel getIpProxyModel = Tools.Todejosn(httpResult.Html); + if (getIpProxyModel.Code == "0000") + { + return getIpProxyModel.Data; + } + } + return null; + } + } +} diff --git a/AppleBatch_June/AddIntegral.cs b/AppleBatch_June/AddIntegral.cs new file mode 100644 index 0000000..c275b26 --- /dev/null +++ b/AppleBatch_June/AddIntegral.cs @@ -0,0 +1,4 @@ +namespace AppleBatch_June +{ + public delegate void AddIntegral(); +} diff --git a/AppleBatch_June/ApiNetReq.cs b/AppleBatch_June/ApiNetReq.cs new file mode 100644 index 0000000..e613ead --- /dev/null +++ b/AppleBatch_June/ApiNetReq.cs @@ -0,0 +1,124 @@ +using System; +using System.Diagnostics; +using System.Linq; +using System.Net; +using System.Text; +using System.Web; +using System.Windows.Forms; +using AppleBatch_June.Properties; +using DotNet.Utilities; + +namespace AppleBatch_June +{ + public class ApiNetReq + { + private static readonly object reqObj = new object(); + + public static string host { get; set; } = ""; + + + private static int reqCount { get; set; } = new Random().Next(0, 90); + + + public static int startNowFun { get; set; } = 0; + + + public void Transpond(HttpItem httpItem) + { + httpItem.Header = null; + httpItem.ProtocolVersion = null; + httpItem.WebProxy = null; + string postdata = Tools.Toenjson(httpItem); + HttpItem item = new HttpItem + { + URL = "http://localhost:5000/home/Transpond", + Method = "post", + Postdata = postdata, + UserAgent = "liuyeu_AppleBatch_June", + ContentType = "application/json", + Timeout = 35000, + KeepAlive = true + }; + new HttpHelper().GetHtml(item); + } + + public HttpResult doPost(object postData, string type, bool retry = false) + { + MessageBox.Show(postData.ToString()); + using HttpHelper httpHelper = new HttpHelper(); + Stopwatch stopwatch = Stopwatch.StartNew(); + string text = ""; + lock (reqObj) + { + if (reqCount >= 99) + { + reqCount = 0; + } + reqCount++; + text = (Tools.GenerateTimeStamp() + reqCount + AppSysConfig.uid.ToString().PadLeft(4, '0') + reqCount).PadLeft(16, '0'); + } + if (text.Length > 16) + { + text = text.Substring(text.Length - 16, 16); + } + string mD5_ = Tools.GetMD5_32(AppSysConfig.saffMac + "by六月的风"); + string key = "7a588e60045849a1"; + string text2 = "90e7b0dc3ef2134c"; + string text3 = DESEncrypt.Encrypt(Tools.a(Tools.Toenjson(postData), key, text, operation: false, text2), text, text2).Trim(); + string text4 = "authentiString=" + HttpUtility.UrlEncode(Tools.EncodeBase64(Encoding.UTF8.GetBytes(text3))); + string mD5_2 = Tools.GetMD5_32(text3 + type + mD5_ + "by六月的风_联系qq:1023092054"); + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("timestamp", text); + webHeaderCollection.Add("mac", mD5_); + webHeaderCollection.Add("startNowFun", startNowFun.ToString()); + if (!string.IsNullOrEmpty(AppSysConfig.userToken)) + { + string s = DESEncrypt.Encrypt(AppSysConfig.userToken, text, text2).Trim(); + webHeaderCollection.Add("token", HttpUtility.UrlEncode(Tools.EncodeBase64(Encoding.UTF8.GetBytes(s)))); + } + webHeaderCollection.Add("version", FormLogin.versions); + HttpItem httpItem = new HttpItem(); + httpItem.URL = host + "/AppleClientApi/requestApi"; + httpItem.Method = "post"; + httpItem.Postdata = text4 + "&sign=" + mD5_2 + "&type=" + type; + httpItem.UserAgent = "liuyeu_AppleBatch_June"; + httpItem.ContentType = "application/x-www-form-urlencoded"; + httpItem.Header = webHeaderCollection; + httpItem.Timeout = 35000; + httpItem.KeepAlive = true; + HttpItem httpItem2 = httpItem; + HttpResult html = httpHelper.GetHtml(httpItem2); + MessageBox.Show(html.Html.ToString()); + stopwatch.Stop(); + if (html.StatusCode == HttpStatusCode.OK) + { + if (html.Header.AllKeys.Contains("sign")) + { + string text5 = html.Header["sign"]; + if (Tools.GetMD5_32("abc_" + html.Html + text + "by六月的风_联系qq:1023092054") != text5) + { + html.Html = ""; + html.StatusCode = HttpStatusCode.NotFound; + } + } + else + { + html.Html = ""; + html.StatusCode = HttpStatusCode.NotFound; + } + } + else if ((html.StatusCode == HttpStatusCode.NotFound || html.StatusCode == (HttpStatusCode)0) && !retry) + { + return doPost(postData, type, retry: true); + } + APIUtlis.AppRequestHtml(html.Html); + APIUtlis.requestUrl = "ApiNetReq_" + type; + if (httpItem2 != null) + { + httpItem2.Postdata = string.Empty; + } + httpItem2 = null; + return html; + } + } +} diff --git a/AppleBatch_June/AppSysConfig.cs b/AppleBatch_June/AppSysConfig.cs new file mode 100644 index 0000000..58d8349 --- /dev/null +++ b/AppleBatch_June/AppSysConfig.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using AppleBatch_June.Model; + +namespace AppleBatch_June +{ + public static class AppSysConfig + { + private static Dictionary configDic = new Dictionary(); + + public static readonly object reddemLock = new object(); + + public static bool iTunesisRemoteLogin = true; + + public static bool webProtocolS2k = false; + + public static ConcurrentDictionary DoubleGuid = new ConcurrentDictionary(); + + public static ConcurrentDictionary ReddemVerifyGuid = new ConcurrentDictionary(); + + public static ConcurrentDictionary ReddemStoreSeriveIndex = new ConcurrentDictionary(); + + private static DateTime getIpUpTime = DateTime.Now.AddMinutes(-1.0); + + private static Dictionary typeDic = new Dictionary(); + + public static string saffMac { get; set; } + + public static string newSaffMac { get; set; } + + public static string userToken { get; set; } + + public static int integral { get; set; } + + public static int freezeIntegral { get; set; } + + public static string userName { get; set; } + + public static string userNumber { get; set; } + + public static string guid { get; set; } + + public static long uid { get; set; } + + public static string userPwd { get; set; } + + public static string userType { get; set; } + + public static DateTime expirationTime { get; set; } + + public static bool ckShowTime { get; set; } = false; + + + public static byte[] AditionalEntropy { get; set; } + + public static Stack proxyModels { get; set; } = new Stack(); + + + public static bool isLowMemoryModel { get; set; } = false; + + + public static int CheckCodeDelay { get; set; } = 5; + + + public static bool loadConfig(string data) + { + configDic.Clear(); + typeDic.Clear(); + ConfigModel configModel = Tools.Todejosn(data); + if (configModel.Code == "0000") + { + Listconfig[] listConfig = configModel.Data.listConfig; + foreach (Listconfig listconfig in listConfig) + { + configDic.Add(listconfig.code, listconfig.value); + } + Listtype[] listTypes = configModel.Data.listTypes; + foreach (Listtype listtype in listTypes) + { + typeDic.Add(listtype.id, listtype); + } + return true; + } + return false; + } + + public static Listtype getTypeById(int id) + { + if (typeDic.ContainsKey(id)) + { + return typeDic[id]; + } + return new Listtype + { + consNum = 1, + name = "错误", + code = "123", + state = 0 + }; + } + + public static string getConfig(string code) + { + if (configDic.ContainsKey(code)) + { + return configDic[code]; + } + return ""; + } + } +} diff --git a/AppleBatch_June/AppleAcount.cs b/AppleBatch_June/AppleAcount.cs new file mode 100644 index 0000000..07b1f2a --- /dev/null +++ b/AppleBatch_June/AppleAcount.cs @@ -0,0 +1,66 @@ +namespace AppleBatch_June +{ + public class AppleAcount + { + public int index { get; set; } + + public string lvItemGuid { get; set; } + + public string appleId { get; set; } + + public string applePwd { get; set; } + + public string appleQt1 { get; set; } + + public string appleQt2 { get; set; } + + public string appleQt3 { get; set; } + + public string birthday { get; set; } = ""; + + + public string reddemCode { get; set; } + + public bool isAct { get; set; } + + public string overflow { get; set; } + + public string addres { get; set; } = ""; + + + public string newAppleId { get; set; } + + public string newApplePopPwd { get; set; } + + public string moblie { get; set; } = ""; + + + public bool isDoubleModl { get; set; } + + public string appleOriginalPwd { get; set; } + + public string DoublePwd { get; set; } = ""; + + + public string reddemQts { get; set; } + + public string reddeemLockTaskGuid { get; set; } = ""; + + + public string sourceInputData { get; set; } = ""; + + + public bool isHsa2 { get; set; } + + public bool notAuthen { get; set; } + + public string guidTag { get; set; } = ""; + + + public bool notRepeatPwd { get; set; } + + public bool isAccountException { get; set; } + + public bool multipleStore { get; set; } + } +} diff --git a/AppleBatch_June/AppleExecuteTask.cs b/AppleBatch_June/AppleExecuteTask.cs new file mode 100644 index 0000000..3062127 --- /dev/null +++ b/AppleBatch_June/AppleExecuteTask.cs @@ -0,0 +1,122 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using AppleBatch_June.Model; + +namespace AppleBatch_June +{ + public class AppleExecuteTask + { + private static Dictionary TaskIsRunAlls = new Dictionary(); + + public static List TaskRunModels = new List(); + + public static readonly object obj = new object(); + + public static long TaskRunAppleIdCount = 0L; + + public static bool isRun { get; set; } = false; + + + public static string[] TaskIsRun + { + get + { + try + { + return (from c in TaskIsRunAlls + where c.Value + select c.Key).ToArray(); + } + catch (Exception) + { + return new string[0]; + } + } + } + + public static bool SetTaskIsRun(string name, bool state) + { + try + { + lock (TaskIsRunAlls) + { + if (TaskIsRunAlls.ContainsKey(name)) + { + TaskIsRunAlls[name] = state; + } + else + { + TaskIsRunAlls.Add(name, state); + } + } + } + catch (Exception) + { + } + return true; + } + + private bool startRuning(TaskRunModel runModel, Action _action, string appleId) + { + if (Tools.ToNetWorkInt(ConfigUtlis.getConfigValue("comNetworkConfig"), 0) == 3) + { + int num = Tools.ToInt(ConfigUtlis.getConfigValue("txtAdslIdCount"), 10); + if (TaskRunAppleIdCount >= num) + { + _action?.Invoke(appleId, DisplyType.xinxi, "等待拨号..."); + bool flag = false; + do + { + flag = false; + foreach (TaskRunModel taskRunModel in TaskRunModels) + { + if (taskRunModel.isRuning) + { + flag = true; + break; + } + } + Thread.Sleep(new Random().Next(100, 300)); + } + while (flag); + lock (obj) + { + if (TaskRunAppleIdCount >= num) + { + string configValue = ConfigUtlis.getConfigValue("txtAdslUserName"); + string configValue2 = ConfigUtlis.getConfigValue("txtAdslPwd"); + Thread.Sleep(new Random().Next(500, 1000)); + _action?.Invoke(appleId, DisplyType.xinxi, "断开宽带连接"); + RasTools.Disconnect(); + Thread.Sleep(new Random().Next(200, 500)); + _action?.Invoke(appleId, DisplyType.xinxi, "开始宽带重新拨号"); + if (!RasTools.Connect(configValue, configValue2, out var errMsg)) + { + _action?.Invoke(appleId, DisplyType.xinxi, "拨号失败:" + errMsg); + return false; + } + _action?.Invoke(appleId, DisplyType.xinxi, "重新拨号成功"); + Thread.Sleep(new Random().Next(500, 1000)); + TaskRunAppleIdCount = 0L; + } + } + } + TaskRunAppleIdCount++; + } + runModel.isRuning = true; + return true; + } + + private void endRuning(TaskRunModel runModel) + { + runModel.isRuning = false; + } + + public static void Stop() + { + isRun = false; + } + } +} diff --git a/AppleBatch_June/AppleItunesDoLogin.cs b/AppleBatch_June/AppleItunesDoLogin.cs new file mode 100644 index 0000000..f6cc1e8 --- /dev/null +++ b/AppleBatch_June/AppleItunesDoLogin.cs @@ -0,0 +1,607 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Data; +using System.Globalization; +using System.IO; +using System.IO.Compression; +using System.Net; +using System.Text; +using AppleBatch_June.Login; + +namespace AppleBatch_June +{ + public class AppleItunesDoLogin + { + private DataTable dataTable_0; + + public iTunesUserInfo Login(string strAppleId, string strPassword, string strMachineName, bool fag, string usrage, string siv, IWebProxy webProxy = null) + { + iTunesUserInfo iTunesUserInfo = new iTunesUserInfo(); + iTunesUserInfo.UserAgent = usrage; + iTunesUserInfo.UserName = strAppleId; + iTunesUserInfo.Password = strPassword; + iTunesUserInfo.MachineName = strMachineName; + iTunesUserInfo.siv = siv; + if (string.IsNullOrEmpty(iTunesUserInfo.StoredDescrption)) + { + iTunesUserInfo.StoredDescrption = "143465-19,17"; + } + Random random = new Random(); + iTunesUserInfo.ServerId = random.Next(25, 50).ToString(); + iTunesUserInfo.Guid = strMachineName; + if (iTunesUserInfo.Area.Length == 0) + { + iTunesUserInfo.Area = GetAreaByDescription(iTunesUserInfo.StoredDescrption); + } + if (iTunesUserInfo.Area.Length == 0) + { + iTunesUserInfo.Area = "CN"; + } + iTunesUserInfo.Boundary = Guid.NewGuid().ToString("N").ToUpper(CultureInfo.InvariantCulture); + iTunesUserInfo.State = LoginApp(iTunesUserInfo, usrage, webProxy); + iTunesUserInfo.PasswordToken = GetKeyValue("passwordToken", "", "", iTunesUserInfo.PlistContent); + iTunesUserInfo.Dsid = GetKeyValue("dsPersonId", "", "", iTunesUserInfo.PlistContent); + iTunesUserInfo.Credit = GetKeyValue("creditDisplay", "", "", iTunesUserInfo.PlistContent); + iTunesUserInfo.Balance = GetKeyValue("creditDisplayInternal", "", "", iTunesUserInfo.PlistContent); + return iTunesUserInfo; + } + + private iTunesDownloadErrorState LoginApp(iTunesUserInfo user, string usrage, IWebProxy webProxy) + { + iTunesDownloadErrorState result = iTunesDownloadErrorState.Succeed; + Dictionary dictionary = new Dictionary(); + dictionary.Add("appleId", user.UserName); + dictionary.Add("attempt", "1"); + dictionary.Add("createSession", true); + dictionary.Add("guid", user.Guid); + dictionary.Add("password", user.Password.Trim()); + dictionary.Add("why", "purchase"); + string s = CreatePlistString(dictionary); + do + { + user.IsAreaChanged = false; + DateTime now = DateTime.Now; + while (DateTime.Now.Subtract(now).TotalSeconds < 120.0) + { + string text = "https://p" + user.ServerId + "-buy.itunes.apple.com/WebObjects/MZFinance.woa/wa/authenticate?Pod=" + user.ServerId + "&PRH=" + user.ServerId; + _ = "https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewGrouping?cc=" + GetAreaByDescription(user.StoredDescrption) + "&mt=8"; + byte[] bytes = Encoding.UTF8.GetBytes(s); + string empty = string.Empty; + HttpWebRequest httpWebRequest = SetiTunesHtppHeaders(text, bytes, text, user.StoredDescrption, empty, user, usrage, webProxy); + httpWebRequest.ContentType = "application/x-apple-plist"; + string string_ = ""; + string text2 = GetiTunesHtpp(httpWebRequest, ref string_, user); + if (string.IsNullOrEmpty(text2) || !(string_ == "")) + { + user.ServerId = GetServerId(string_); + httpWebRequest = null; + continue; + } + if (text2 != string.Empty) + { + user.PlistContent = text2; + } + httpWebRequest = null; + break; + } + } + while (user.IsAreaChanged && user.PlistContent == string.Empty); + if (user.PlistContent.Length == 0) + { + result = iTunesDownloadErrorState.WebCannotAnalyse; + } + else + { + string keyValue = GetKeyValue("failureType", "", "", user.PlistContent); + string keyValue2 = GetKeyValue("customerMessage", "", "", user.PlistContent); + if (GetKeyValue("dialogId", "", "", user.PlistContent) == "MZFinance.DisabledAndFraudLocked") + { + return iTunesDownloadErrorState.BeenLocked; + } + if (keyValue2.Length <= 0 && keyValue.Length <= 0) + { + if (keyValue2.Length > 0) + { + result = (keyValue2.Contains("https://iforgot.apple.com") ? iTunesDownloadErrorState.LoginiTunesDisable : iTunesDownloadErrorState.UnKnow); + } + else if (keyValue.Length == 0 && keyValue2.Length == 0) + { + string keyValue3 = GetKeyValue("message", "", "", user.PlistContent); + if (keyValue3.Length > 0 && keyValue3.StartsWith("This Apple ID is only valid for purchases")) + { + result = iTunesDownloadErrorState.Succeed; + } + } + } + else + { + result = ((keyValue == "-5000") ? iTunesDownloadErrorState.LoginException : iTunesDownloadErrorState.UnKnow); + } + } + return result; + } + + private HttpWebRequest SetiTunesHtppHeaders(string string_3, byte[] byte_2, string string_4, string string_5, string string_6, iTunesUserInfo user, string usrage, IWebProxy webProxy = null) + { + HttpWebRequest httpWebRequest = WebRequest.Create(new Uri(string_3)) as HttpWebRequest; + httpWebRequest.Method = "POST"; + httpWebRequest.UserAgent = usrage; + if (string_4.Length > 0) + { + httpWebRequest.Referer = string_4; + } + httpWebRequest.AllowAutoRedirect = true; + httpWebRequest.ServicePoint.Expect100Continue = false; + httpWebRequest.AllowAutoRedirect = false; + httpWebRequest.AllowWriteStreamBuffering = true; + httpWebRequest.KeepAlive = true; + if (webProxy != null) + { + httpWebRequest.Proxy = webProxy; + } + httpWebRequest.Timeout = 60000; + if (user.PcookieContainer.Count <= 0) + { + httpWebRequest.Headers.Add("Cookie", "mzf_in=072381; itspod=" + user.ServerId + "; s_vi=" + user.siv + "; itsMetricsR=Genre-CN-Mobile%20Software%20Applications-29099@@Mobile%20Software%20Applications-main@@@@; Pod=" + user.ServerId + "; s_vnum_n2_us=0%7C1"); + } + else + { + httpWebRequest.CookieContainer = user.PcookieContainer; + } + addLoginhttp(httpWebRequest, user); + if (!string.IsNullOrEmpty(string_6)) + { + httpWebRequest.Headers.Add("X-Apple-ActionSignature", string_6); + } + using Stream stream = httpWebRequest.GetRequestStream(); + stream.Write(byte_2, 0, byte_2.Length); + return httpWebRequest; + } + + private void addLoginhttp(HttpWebRequest httpWebRequest_0, iTunesUserInfo rsaccount_0) + { + httpWebRequest_0.Accept = "*/*"; + httpWebRequest_0.Headers.Add("Accept-Encoding", "gzip"); + httpWebRequest_0.Headers.Add("Accept-Language", "en;q=0"); + httpWebRequest_0.Headers.Add("X-Apple-Client-Versions", "GameCenter/2.0"); + httpWebRequest_0.Headers.Add("X-Apple-Connection-Type", "WiFi"); + httpWebRequest_0.Headers.Add("X-Apple-Client-Application", "Software"); + httpWebRequest_0.Headers.Add("X-Apple-Partner", "origin.0"); + httpWebRequest_0.Headers.Add("X-Token-T", "M"); + httpWebRequest_0.Headers.Add("X-Apple-Tz", "28800"); + if (rsaccount_0 != null) + { + httpWebRequest_0.Headers.Add("X-Apple-Store-Front", "143465-19,17"); + } + } + + public string GetiTunesHtpp(HttpWebRequest httpWebRequest_0, ref string string_3, iTunesUserInfo user) + { + Stream stream = null; + HttpWebResponse httpWebResponse = null; + string outstring = ""; + try + { + httpWebResponse = httpWebRequest_0.GetResponse() as HttpWebResponse; + if (httpWebResponse.StatusCode != HttpStatusCode.OK) + { + string_3 = httpWebResponse.Headers["location"]; + return ""; + } + stream = httpWebResponse.GetResponseStream(); + byte[] array = new byte[8192]; + MemoryStream memoryStream = new MemoryStream(); + int num = stream.Read(array, 0, array.Length); + int num2 = 0 + num; + while (num != 0) + { + num = stream.Read(array, 0, array.Length); + num2 += num; + } + memoryStream.Write(array, 0, num2); + StringBuilder stringBuilder = new StringBuilder(); + try + { + ReadZip(memoryStream, 0, (int)memoryStream.Length, stringBuilder, ref outstring); + outstring = stringBuilder.ToString().Replace("\0", ""); + } + catch + { + outstring = Encoding.UTF8.GetString(memoryStream.ToArray()); + } + memoryStream.Close(); + string_3 = ""; + if (user != null) + { + string[] values = httpWebResponse.Headers.GetValues("x-set-apple-store-front"); + if (values == null || values.Length == 0) + { + return outstring; + } + string text = values[0]; + if (string.Compare(user.StoredDescrption, text, ignoreCase: true) != 0) + { + user.IsAreaChanged = true; + user.StoredDescrption = text; + user.Area = GetAreaByDescription(text); + } + } + return outstring; + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + return outstring; + } + finally + { + SetCookieByResponseHeader(user.PcookieContainer, httpWebResponse, ".apple.com", user); + httpWebRequest_0.GetResponse().GetResponseStream().Close(); + if (stream != null) + { + stream.Close(); + stream = null; + } + } + } + + public void SetCookieByResponseHeader(CookieContainer cookieContainer_0, HttpWebResponse httpWebResponse_0, string string_0, iTunesUserInfo user) + { + if (string.IsNullOrEmpty(httpWebResponse_0.Headers["Set-Cookie"])) + { + return; + } + string[] array = httpWebResponse_0.Headers["Set-Cookie"].Replace("Expires", "expires").Split(','); + string empty = string.Empty; + string empty2 = string.Empty; + string path = string.Empty; + string text = string.Empty; + for (int i = 0; i < array.Length; i++) + { + if (array[i].IndexOf("expires=") != -1) + { + array[i] = array[i] + "," + array[i + 1]; + string[] array2 = array[i].Split(';'); + if (array2.Length < 2) + { + continue; + } + empty = array2[0].Split('=')[0]; + empty2 = array2[0].Substring(empty.Length + 1); + for (int j = 1; j < array2.Length; j++) + { + if (array2[j].IndexOf("path=") != -1) + { + path = array2[j].Split('=')[1]; + } + else if (array2[j].IndexOf("domain=") != -1) + { + text = array2[j].Split('=')[1]; + } + } + if (string.IsNullOrEmpty(text)) + { + text = httpWebResponse_0.ResponseUri.Host; + } + if (!string.IsNullOrEmpty(string_0)) + { + text = string_0; + } + if (empty == "s_vi") + { + user.siv = empty2; + } + if (empty2 != string.Empty) + { + Cookie cookie = new Cookie(empty, empty2, path, text); + if (array[i].IndexOf("secure") > -1) + { + cookie.Secure = true; + } + if (array[i].IndexOf("HttpOnly") > -1) + { + cookie.HttpOnly = true; + } + cookieContainer_0.Add(cookie); + } + i++; + continue; + } + string[] array3 = array[i].Split(';'); + if (array3.Length < 2) + { + continue; + } + empty = array3[0].Split('=')[0]; + empty2 = array3[0].Substring(empty.Length + 1); + for (int k = 1; k < array3.Length; k++) + { + if (array3[k].IndexOf("path=") != -1) + { + path = array3[k].Split('=')[1]; + } + else if (array3[k].IndexOf("domain=") != -1) + { + text = array3[k].Split('=')[1]; + } + } + if (string.IsNullOrEmpty(text)) + { + text = httpWebResponse_0.ResponseUri.Host; + } + if (!string.IsNullOrEmpty(string_0)) + { + text = string_0; + } + if (empty2 != string.Empty) + { + Cookie cookie2 = new Cookie(empty, empty2, path, text); + if (array[i].IndexOf("secure") > -1) + { + cookie2.Secure = true; + } + if (array[i].IndexOf("HttpOnly") > -1) + { + cookie2.HttpOnly = true; + } + cookieContainer_0.Add(cookie2); + } + } + } + + private static bool ReadZip(MemoryStream memoryStream, int intsize, int readcount, StringBuilder stringBuilder_0, ref string outstring) + { + memoryStream.Seek(0L, SeekOrigin.Begin); + GZipStream gZipStream = new GZipStream(memoryStream, CompressionMode.Decompress); + do + { + byte[] array = new byte[readcount]; + intsize = gZipStream.Read(array, 0, readcount); + outstring = Encoding.UTF8.GetString(array); + stringBuilder_0.Append(outstring); + } + while (intsize > 0); + return true; + } + + public string GetServerId(string UrlValue) + { + int num = UrlValue.IndexOf("https://p", StringComparison.InvariantCulture); + string text = UrlValue.Substring(num + "https://p".Length); + num = text.IndexOf("-buy"); + if (num >= 0) + { + text = text.Substring(0, num); + } + return Convert.ToUInt64(text).ToString(); + } + + public string CreatePlistString(Dictionary string_0) + { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.Append("\n\n\t\n"); + foreach (KeyValuePair item in string_0) + { + stringBuilder.Append("\t\t"); + stringBuilder.Append(item.Key.ToString()); + stringBuilder.Append("\n"); + stringBuilder.Append("\t\t"); + stringBuilder.Append(item.Value.ToString()); + stringBuilder.Append("\n"); + } + stringBuilder.Append("\t\n"); + return stringBuilder.ToString(); + } + + public string GetKeyValue(string itemKey, string valueKey1, string valueKey2, string plist) + { + string text = ""; + bool num = plist.Contains(itemKey); + int num2 = 0; + if (num) + { + try + { + num2 = plist.IndexOf(itemKey, StringComparison.InvariantCulture); + text = plist.Substring(num2 + itemKey.Length); + num2 = text.IndexOf(valueKey1, StringComparison.InvariantCulture); + text = text.Substring(num2 + valueKey1.Length); + num2 = text.IndexOf(valueKey2, StringComparison.InvariantCulture); + text = text.Substring(0, num2); + } + catch (ArgumentNullException) + { + } + } + return text.Trim(); + } + + public string GetAreaByDescription(string description) + { + if (string.IsNullOrEmpty(description)) + { + return string.Empty; + } + LoadCountryCode(); + string storeId = description; + int num = description.IndexOf("-"); + if (num < 0) + { + num = description.IndexOf(","); + } + if (num > -1) + { + storeId = description.Substring(0, num); + } + return GetAreaByStoreId(storeId); + } + + private void LoadCountryCode() + { + if (dataTable_0 == null || dataTable_0.Rows.Count == 0) + { + dataTable_0 = new DataTable(); + dataTable_0.Columns.Clear(); + dataTable_0.Columns.Add("id", typeof(string)); + dataTable_0.Columns.Add("area", typeof(string)); + dataTable_0.Columns.Add("description", typeof(string)); + dataTable_0.Rows.Add("143465", "cn", "143465-19,12"); + dataTable_0.Rows.Add("143465", "cn", "143465-19,17"); + dataTable_0.Rows.Add("143470", "tw", "143470-18,12"); + dataTable_0.Rows.Add("143463", "hk", "143463-18,12"); + dataTable_0.Rows.Add("1434515", "mo", "1434515-18,12"); + dataTable_0.Rows.Add("143441", "us", "143441-1,12"); + dataTable_0.Rows.Add("143455", "ca", "143455-6,12"); + dataTable_0.Rows.Add("143466", "kr", "143466,12"); + dataTable_0.Rows.Add("143462", "jp", "143462-9,12"); + dataTable_0.Rows.Add("143464", "sg", "143464-1,12"); + dataTable_0.Rows.Add("143460", "au", "143460-27,17"); + dataTable_0.Rows.Add("143560", "bn", "143560,12"); + dataTable_0.Rows.Add("143476", "id", "143476-2,12"); + dataTable_0.Rows.Add("143517", "kz", "143517,12"); + dataTable_0.Rows.Add("143473", "my", "143473-2,12"); + dataTable_0.Rows.Add("143461", "nz", "143461,12"); + dataTable_0.Rows.Add("143477", "pk", "143477,12"); + dataTable_0.Rows.Add("143474", "ph", "143474,12"); + dataTable_0.Rows.Add("143486", "lk", "143486,12"); + dataTable_0.Rows.Add("143475", "th", "143475,12"); + dataTable_0.Rows.Add("143566", "uz", "143566,12"); + dataTable_0.Rows.Add("143471", "vn", "143471-2,12"); + dataTable_0.Rows.Add("143565", "by", "143565,12"); + dataTable_0.Rows.Add("143446", "be", "143446-2,12"); + dataTable_0.Rows.Add("143526", "bg", "143526,12"); + dataTable_0.Rows.Add("143494", "hr", "143494,12"); + dataTable_0.Rows.Add("143557", "cy", "143557,12"); + dataTable_0.Rows.Add("143489", "cz", "143489,12"); + dataTable_0.Rows.Add("143458", "dk", "143458-2,12"); + dataTable_0.Rows.Add("143443", "de", "143443,12"); + dataTable_0.Rows.Add("143454", "es", "143454-8,12"); + dataTable_0.Rows.Add("143518", "ee", "143518,12"); + dataTable_0.Rows.Add("143447", "fi", "143447-2,12"); + dataTable_0.Rows.Add("143442", "fr", "143442,12"); + dataTable_0.Rows.Add("143448", "gr", "143448,12"); + dataTable_0.Rows.Add("143482", "hu", "143482,12"); + dataTable_0.Rows.Add("143558", "is", "143558,12"); + dataTable_0.Rows.Add("143449", "ie", "143449,12"); + dataTable_0.Rows.Add("143450", "it", "143450,12"); + dataTable_0.Rows.Add("143519", "lv", "143519,12"); + dataTable_0.Rows.Add("143520", "lt", "143520,12"); + dataTable_0.Rows.Add("143451", "lu", "143451-2,12"); + dataTable_0.Rows.Add("143530", "mk", "143530,12"); + dataTable_0.Rows.Add("143521", "mt", "143521,12"); + dataTable_0.Rows.Add("143523", "md", "143523,12"); + dataTable_0.Rows.Add("143452", "nl", "143452,12"); + dataTable_0.Rows.Add("143457", "no", "143457-2,12"); + dataTable_0.Rows.Add("143445", "at", "143445,12"); + dataTable_0.Rows.Add("143478", "pl", "143478,12"); + dataTable_0.Rows.Add("143453", "pt", "143453-2,12"); + dataTable_0.Rows.Add("143487", "ro", "143487,12"); + dataTable_0.Rows.Add("143496", "sk", "143496,12"); + dataTable_0.Rows.Add("143499", "si", "143499,12"); + dataTable_0.Rows.Add("143456", "se", "143456-2,12"); + dataTable_0.Rows.Add("143459", "ch", "143459-2,12"); + dataTable_0.Rows.Add("143480", "tr", "143480-2,12"); + dataTable_0.Rows.Add("143444", "gb", "143444,12"); + dataTable_0.Rows.Add("143469", "ru", "143469,12"); + dataTable_0.Rows.Add("143563", "dz", "143563,12"); + dataTable_0.Rows.Add("143564", "ao", "143564,12"); + dataTable_0.Rows.Add("143524", "am", "143524,12"); + dataTable_0.Rows.Add("143568", "az", "143568,12"); + dataTable_0.Rows.Add("143559", "bh", "143559,12"); + dataTable_0.Rows.Add("143525", "bw", "143525,12"); + dataTable_0.Rows.Add("143516", "eg", "143516,12"); + dataTable_0.Rows.Add("143573", "gh", "143573,12"); + dataTable_0.Rows.Add("143467", "in", "143467,12"); + dataTable_0.Rows.Add("143491", "il", "143491,12"); + dataTable_0.Rows.Add("143528", "jo", "143528,12"); + dataTable_0.Rows.Add("143529", "ke", "143529,12"); + dataTable_0.Rows.Add("143493", "kw", "143493,12"); + dataTable_0.Rows.Add("143497", "lb", "143497,12"); + dataTable_0.Rows.Add("143531", "mg", "143531,12"); + dataTable_0.Rows.Add("143532", "ml", "143532,12"); + dataTable_0.Rows.Add("143533", "mu", "143533,12"); + dataTable_0.Rows.Add("143534", "ne", "143534,12"); + dataTable_0.Rows.Add("143561", "ng", "143561,12"); + dataTable_0.Rows.Add("143562", "om", "143562,12"); + dataTable_0.Rows.Add("143498", "qa", "143498,12"); + dataTable_0.Rows.Add("143479", "sa", "143479,12"); + dataTable_0.Rows.Add("143535", "sn", "143535,12"); + dataTable_0.Rows.Add("143472", "za", "143472,12"); + dataTable_0.Rows.Add("143572", "tz", "143572,12"); + dataTable_0.Rows.Add("143536", "tn", "143536,12"); + dataTable_0.Rows.Add("143481", "ae", "143481,12"); + dataTable_0.Rows.Add("143537", "ug", "143537,12"); + dataTable_0.Rows.Add("143571", "ye", "143571,12"); + dataTable_0.Rows.Add("143538", "ai", "143538,12"); + dataTable_0.Rows.Add("143540", "ag", "143540,12"); + dataTable_0.Rows.Add("143505", "ar", "143505-2,12"); + dataTable_0.Rows.Add("143539", "bs", "143539,12"); + dataTable_0.Rows.Add("143541", "bb", "143541,12"); + dataTable_0.Rows.Add("143555", "bz", "143555-2,12"); + dataTable_0.Rows.Add("143542", "bm", "143542,12"); + dataTable_0.Rows.Add("143556", "bo", "143556-2,12"); + dataTable_0.Rows.Add("143503", "br", "143503,12"); + dataTable_0.Rows.Add("143543", "vg", "143543,12"); + dataTable_0.Rows.Add("143544", "ky", "143544,12"); + dataTable_0.Rows.Add("143483", "cl", "143483-2,12"); + dataTable_0.Rows.Add("143501", "co", "143501-2,12"); + dataTable_0.Rows.Add("143495", "cr", "143495-2,12"); + dataTable_0.Rows.Add("143545", "dm", "143545,12"); + dataTable_0.Rows.Add("143508", "do", "143508-2,12"); + dataTable_0.Rows.Add("143509", "ec", "143509-2,12"); + dataTable_0.Rows.Add("143506", "sv", "143506-2,12"); + dataTable_0.Rows.Add("143546", "gd", "143546,12"); + dataTable_0.Rows.Add("143504", "gt", "143504-2,12"); + dataTable_0.Rows.Add("143553", "gy", "143553,12"); + dataTable_0.Rows.Add("143510", "hn", "143510-2,12"); + dataTable_0.Rows.Add("143511", "jm", "143511,12"); + dataTable_0.Rows.Add("143468", "mx", "143468,12"); + dataTable_0.Rows.Add("143547", "ms", "143547,12"); + dataTable_0.Rows.Add("143512", "ni", "143512-2,12"); + dataTable_0.Rows.Add("143485", "pa", "143485-2,12"); + dataTable_0.Rows.Add("143513", "py", "143513-2,12"); + dataTable_0.Rows.Add("143507", "pe", "143507-2,12"); + dataTable_0.Rows.Add("143548", "kn", "143548,12"); + dataTable_0.Rows.Add("143549", "lc", "143549,12"); + dataTable_0.Rows.Add("143550", "vc", "143550,12"); + dataTable_0.Rows.Add("143554", "sr", "143554-2,12"); + dataTable_0.Rows.Add("143551", "tt", "143551,12"); + dataTable_0.Rows.Add("143552", "tc", "143552,12"); + dataTable_0.Rows.Add("143514", "uy", "143514-2,12"); + dataTable_0.Rows.Add("143502", "ve", "143502-2,12"); + } + } + + private string GetAreaByStoreId(string storeId) + { + IEnumerator enumerator = null; + if (string.IsNullOrEmpty(storeId)) + { + return string.Empty; + } + string result = string.Empty; + try + { + enumerator = dataTable_0.Rows.GetEnumerator(); + while (enumerator.MoveNext()) + { + DataRow dataRow = (DataRow)enumerator.Current; + string strB = dataRow["id"].ToString(); + if (string.Compare(storeId, strB, ignoreCase: true) == 0) + { + result = dataRow["area"].ToString(); + } + } + return result; + } + finally + { + if (enumerator is IDisposable) + { + (enumerator as IDisposable).Dispose(); + } + } + } + } +} diff --git a/AppleBatch_June/AppleManageWebUtlis.cs b/AppleBatch_June/AppleManageWebUtlis.cs new file mode 100644 index 0000000..37037e7 --- /dev/null +++ b/AppleBatch_June/AppleManageWebUtlis.cs @@ -0,0 +1,3609 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Web; +using System.Web.Script.Serialization; +using AppleBatch_June.AppleWebServace; +using AppleBatch_June.ExecuteTasks; +using AppleBatch_June.Model; +using AppleBatch_June.Utils; +using DotNet.Utilities; + +namespace AppleBatch_June +{ + public class AppleManageWebUtlis : AppleWebBase + { + private class CaptchaModel + { + public class Payload + { + public string contentType { get; set; } + + public string content { get; set; } + } + + public Payload payload { get; set; } + + public string token { get; set; } + + public string type { get; set; } + + public int id { get; set; } + + public string reust { get; set; } = ""; + + } + + private static string homeLanguage = "zh_CN"; + + public string Apple_Widget_Key = "af1139274f266b22b68c2a3e7ad932cb3c0bbe854e13a79af78dcc73136882c3"; + + private string loginAuthUrl = "https://idmsa.apple.com/appleauth/auth/signin"; + + private string verifyquestionsUrl = "https://idmsa.apple.com/appleauth/auth/verify/questions"; + + private string appleHomeUrl = "https://appleid.apple.com/account/manage"; + + private AvailableSecurityQuestions securityQuestions; + + private LoginAppleInfo loginAppleInfo; + + public string _appleId = ""; + + public AppleChangeItem _changeItem; + + private bool isPwdViey; + + private bool isViey; + + private bool isVieyBirthday; + + private AppleAcount acount = new AppleAcount(); + + private Func getCodeAct_; + + private bool isError; + + public string checkDisableScnt = ""; + + public string widgKey = string.Empty; + + private string dataR = ""; + + private static readonly object lockSendMsmObj = new object(); + + public bool AuthenDoubleOpenState; + + private string redirectURI = "https://appleid.apple.com"; + + private string language = "zh_CN"; + + private string authUrl => "https://idmsa.apple.com/appleauth/auth/signin?widgetKey=" + Apple_Widget_Key + "&language=" + homeLanguage; + + private string iframeId { get; set; } = "auth-w78m90aa-d7ll-rirf-04xy-rsvumkpw"; + + + public bool CheckAppleId { get; set; } + + public string appleId + { + get + { + return _appleId; + } + set + { + _appleId = value; + } + } + + public bool idIsNormal { get; set; } + + private string accountFirstName { get; set; } + + private string accountLastName { get; set; } + + private string XAppleIDAccountCountry { get; set; } = ""; + + + public bool openHsa2 { get; set; } + + public bool isChangAppleId { get; set; } + + private string scnt { get; set; } + + public AppleManageWebUtlis(Action _action, Action _applyAtion, ITaskRunState _taskState) + : base(_action, _applyAtion, _taskState) + { + taskState = _taskState ?? throw new Exception("任务运行状态不能是空的"); + action = _action; + applyAtion = _applyAtion; + base.userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"; + base.userAgent = Tools.GetRandomUserAgent(); + iframeId = APPLEHCHelp.getIframeId(); + } + + public bool applyChangeAcount(AppleAcount acount, AppleChangeItem changeItem, bool errorGoint, bool _openVpn, string _noticeKey, ref string accountName) + { + if (string.IsNullOrEmpty(base.ProxyIp)) + { + ProxyAccountModel proxyAccountInfo = ProxyAccountCache.getProxyAccountInfo(acount.appleId); + if (proxyAccountInfo != null) + { + base.ProxyIp = proxyAccountInfo.ProxyIp; + if (string.IsNullOrEmpty(proxyAccountInfo.accountWebUserAgent)) + { + proxyAccountInfo.accountWebUserAgent = base.userAgent; + } + else + { + base.userAgent = proxyAccountInfo.accountWebUserAgent; + } + } + } + base.noticeKey = _noticeKey; + base.openVpn = _openVpn; + listCookie.Add(new CookieItem + { + Key = "idclient", + Value = "web" + }); + this.acount = acount; + appleId = acount.appleId; + try + { + _changeItem = changeItem; + string errMsg = ""; + if (authsignin(this.acount.appleId, this.acount.applePwd, ref errMsg)) + { + if (!handelDic.ContainsKey("scnt")) + { + base.ProxyIp = ""; + authsignin(this.acount.appleId, this.acount.applePwd, ref errMsg); + if (!handelDic.ContainsKey("scnt")) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "登录初始化失败,请重试"); + return false; + } + } + if (isPwdViey) + { + changeItem.newPwd = ""; + } + if (isViey) + { + acount.appleQt1 = changeItem.newQt1; + acount.appleQt2 = changeItem.newQt2; + acount.appleQt3 = changeItem.newQt3; + changeItem.newQt1 = ""; + if (isPwdViey && isChangAppleId && isVieyBirthday) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "账号修改完成"); + return true; + } + isViey = false; + handelDic.Clear(); + return applyChangeAcount(this.acount, _changeItem, errorGoint, base.openVpn, base.noticeKey, ref accountName); + } + if (appleauthAuth(acount)) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "登录成功"); + ProxyAccountCache.addProxyIp(acount.appleId, base.ProxyIp); + if (intoHome()) + { + manageFamily(); + bool flag = true; + getSecuritydevices(); + if (changeItem.CreatePin) + { + flag = CreateSupportpin(appleHomeUrl); + } + if (!string.IsNullOrEmpty(changeItem.newQt1)) + { + if (!(flag = changQuestions(changeItem.newQt1, changeItem.newQt2, changeItem.newQt3))) + { + flag = false; + } + if (!flag && !errorGoint) + { + return false; + } + } + if (!string.IsNullOrEmpty(changeItem.newPwd)) + { + if (!(flag = changePwd(acount.applePwd, changeItem.newPwd))) + { + flag = false; + } + if (!flag && !errorGoint) + { + return false; + } + } + if (loginAppleInfo != null && !string.IsNullOrEmpty(loginAppleInfo?.security?.rescueEmail) && changeItem.isRemoveRescueEmail) + { + flag = RemoveRescueEmail(); + } + if (!string.IsNullOrEmpty(changeItem.newshengri) && !isVieyBirthday) + { + if (!(flag = changeBirthDate(changeItem.newshengri))) + { + flag = false; + } + if (!flag && !errorGoint) + { + return false; + } + } + if (!string.IsNullOrEmpty(changeItem.editAddrs)) + { + flag = editAddrs(changeItem.editAddrs); + } + if (!string.IsNullOrEmpty(acount.newAppleId) && !isChangAppleId) + { + flag = setAccnount(acount.newAppleId, acount.newApplePopPwd, "cbf64fd6843ee630b463f358ea0b707b"); + } + if (changeItem.pay != null) + { + flag = changenPayment(changeItem.pay); + } + if (flag && !string.IsNullOrEmpty(base.ProxyIp)) + { + AppSysConfig.proxyModels.Push(new ProxyModel2 + { + prixyIp = base.ProxyIp, + applyDate = DateTime.Now + }); + } + return flag; + } + } + } + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + action?.Invoke(base.noticeKey, DisplyType.xinxi, ex.Message); + } + finally + { + accountName = appleId; + try + { + signout(); + } + catch (Exception) + { + } + } + return false; + } + + public bool CreateSupportpin(string appleHomeUrl) + { + string postData = "{}"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-I-TimeZone", "Asia/Shanghai"); + webHeaderCollection.Add("X-Apple-I-Request-Context", "ca"); + if (handelDic.ContainsKey("scnt")) + { + webHeaderCollection.Add("scnt", handelDic["scnt"]); + } + webHeaderCollection.Add("X-Apple-Api-Key", base.apiKey.Trim()); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + HttpResult httpResult = postWebContent("https://appleid.apple.com/account/manage/supportpin", postData, "https://appleid.apple.com/account/manage", webHeaderCollection); + if (httpResult.StatusCode == HttpStatusCode.BadRequest || httpResult.StatusCode == HttpStatusCode.Unauthorized) + { + ServiceErrorsModel serviceErrorsModel = Tools.Todejosn(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + } + if (httpResult.StatusCode == HttpStatusCode.OK) + { + Dictionary dataSource = Tools.Todejosn>(httpResult.Html); + string dicVal = dataSource.getDicVal("pin", ""); + string dicVal2 = dataSource.getDicVal("localizedDate", ""); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "支持 PIN:" + dicVal + ",有效期:" + dicVal2); + string[] allKeys = httpResult.Header.AllKeys; + foreach (string text in allKeys) + { + if (!handelDic.ContainsKey(text)) + { + handelDic.TryAddDic(text, httpResult.Header[text]); + } + else + { + handelDic[text] = httpResult.Header[text]; + } + } + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "获取PIN码失败,未知异常"); + return false; + } + + public bool applyQueryAuthBalance(AppleAcount acount, bool _openVpn) + { + Apple_Widget_Key = "04659e25236376d440c224638c1cdd6a001abdd7f186cdcfa120abf35417efab"; + base.openVpn = _openVpn; + listCookie.Add(new CookieItem + { + Key = "idclient", + Value = "web" + }); + this.acount = acount; + appleId = acount.appleId; + try + { + HttpResult webContent = getWebContent("https://privacy.apple.com/account", ""); + if (webContent.StatusCode == HttpStatusCode.OK) + { + string value = new Regex(AppSysConfig.getConfig("Regex_apply_CsrfToken")).Match(webContent.Html).Groups[1].Value.Trim(); + string errMsg = ""; + if (authsignin(this.acount.appleId, this.acount.applePwd, ref errMsg) && appleauthAuth(acount)) + { + string value2 = ""; + handelDic.TryGetValue("X-Apple-OAuth-Grant-Code", out value2); + string value3 = Tools.EncodeBase64(Encoding.UTF8.GetBytes(Apple_Widget_Key + ":" + value2)); + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("x-csrf-token", value); + webHeaderCollection.Add("x-apple-authentication", value3); + getWebJsonContent("https://privacy.apple.com/session/create", "https://privacy.apple.com/account", webHeaderCollection, "application/json, text/plain, */*"); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在获取余额"); + HttpResult webJsonContent = getWebJsonContent("https://privacy.apple.com/section/delete-account", "https://privacy.apple.com/account", webHeaderCollection, "application/json, text/plain, */*"); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + if (webJsonContent.Html.Contains("store_balance")) + { + string text = new Regex(AppSysConfig.getConfig("Regex_applyQueryAuthBalance")).Match(webJsonContent.Html).Groups[1].Value.Trim().TrimEnd(','); + JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); + if (string.IsNullOrEmpty(text)) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "余额解析失败"); + return false; + } + Dictionary dictionary = javaScriptSerializer.Deserialize>("{" + text + "}"); + decimal num = (dynamic)dictionary["balance"]; + string text2 = (dynamic)dictionary["currency"]; + action?.Invoke(base.noticeKey, DisplyType.balance, num + " " + text2); + } + else + { + action?.Invoke(base.noticeKey, DisplyType.balance, "0"); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "查询完成"); + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在重新获取余额"); + webJsonContent = getWebJsonContent("https://privacy.apple.com/section/deactivate-account", "https://privacy.apple.com/account"); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + if (webJsonContent.Html.Contains("store_balance")) + { + string text3 = new Regex(AppSysConfig.getConfig("Regex_applyQueryAuthBalance")).Match(webJsonContent.Html).Groups[1].Value.Trim().TrimEnd(','); + JavaScriptSerializer javaScriptSerializer2 = new JavaScriptSerializer(); + if (string.IsNullOrEmpty(text3)) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "余额解析失败"); + return false; + } + Dictionary dictionary2 = javaScriptSerializer2.Deserialize>("{" + text3 + "}"); + decimal num2 = (dynamic)dictionary2["balance"]; + string text4 = (dynamic)dictionary2["currency"]; + action?.Invoke(base.noticeKey, DisplyType.balance, num2 + " " + text4); + } + else + { + action?.Invoke(base.noticeKey, DisplyType.balance, "0"); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "查询完成"); + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "余额获取失败"); + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "页面加载失败#1"); + } + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + action?.Invoke(base.noticeKey, DisplyType.xinxi, ex.Message); + } + finally + { + try + { + priveSignout(); + } + catch (Exception) + { + } + } + return false; + } + + public bool OpenAuthen(AppleAcount acount, AppleChangeItem changeItem, bool _openVpn, Func getCodeAct, string _noticeKey) + { + if (string.IsNullOrEmpty(base.ProxyIp)) + { + base.ProxyIp = ProxyAccountCache.getProxyAccountIP(acount.appleId); + } + base.noticeKey = _noticeKey; + base.openVpn = _openVpn; + listCookie.Add(new CookieItem + { + Key = "idclient", + Value = "web" + }); + this.acount = acount; + appleId = acount.appleId; + _changeItem = changeItem; + string errMsg = ""; + getCodeAct_ = getCodeAct; + openHsa2 = true; + try + { + if (authsignin(this.acount.appleId, this.acount.applePwd, ref errMsg)) + { + if (appleauthAuth(acount) && !AuthenDoubleOpenState) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "登录成功"); + ProxyAccountCache.addProxyIp(acount.appleId, base.ProxyIp); + if (intoHome()) + { + if (string.IsNullOrEmpty(acount.moblie)) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "请先导入手机号码"); + return false; + } + getSecuritydevices(); + AuthenDoubleOpenState = OpenHsa2Act(_changeItem.mode, _changeItem.countryCode, base.apiKey); + } + } + return AuthenDoubleOpenState; + } + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + action?.Invoke(base.noticeKey, DisplyType.xinxi, ex.Message); + } + finally + { + try + { + signout(); + } + catch (Exception) + { + } + } + return false; + } + + public bool editAddrs(string addres) + { + Dictionary dictionary = new Dictionary(); + Dictionary dictionary2 = new Dictionary(); + string[] array = addres.Split('|'); + foreach (string text in array) + { + if (string.IsNullOrEmpty(text)) + { + continue; + } + string[] array2 = text.Split(':'); + if (array2.Length != 2) + { + continue; + } + string text2 = array2[0]; + if (!(text2 == "姓氏")) + { + if (!(text2 == "名字")) + { + dictionary2.Add(ConverUTF8(array2[0].Trim()), ConverUTF8(array2[1].Trim())); + } + else + { + dictionary.Add("firstName", ConverUTF8(array2[1].Trim())); + } + } + else + { + dictionary.Add("lastName", ConverUTF8(array2[1].Trim())); + } + } + if (dictionary.Count > 0) + { + if (dictionary.Count == 1) + { + if (dictionary.ContainsKey("firstName")) + { + dictionary.Add("lastName", accountLastName); + } + else + { + dictionary.Add("firstName", accountFirstName); + } + } + dictionary.Add("middleName", ""); + JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); + EditMangName(javaScriptSerializer.Serialize(dictionary)); + } + return EditAddres(dictionary2); + } + + public bool EditMangName(string putJson) + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Domain-Id", "1"); + if (handelDic.ContainsKey("scnt")) + { + webHeaderCollection.Add("scnt", handelDic["scnt"]); + } + webHeaderCollection.Add("X-Apple-Api-Key", base.apiKey.Trim()); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/manage/name", putJson, appleHomeUrl, webHeaderCollection); + if (httpResult.StatusCode == HttpStatusCode.BadRequest || httpResult.StatusCode == HttpStatusCode.Unauthorized) + { + ServiceErrorsModel serviceErrorsModel = new JavaScriptSerializer().Deserialize(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "名称修改失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "名称修改失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + } + if (httpResult.StatusCode == HttpStatusCode.OK) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "名称修改完成"); + return true; + } + if (httpResult.StatusCode == HttpStatusCode.Forbidden) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "名称修改失败,请求错误"); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "名称修改失败,未知异常"); + return false; + } + + public string getDicValue(Dictionary suos, string key, string dfValue) + { + if (suos.ContainsKey(key)) + { + return suos[key].Trim(); + } + return dfValue; + } + + private string ConverUTF8(string value) + { + return Encoding.UTF8.GetString(Encoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(value))); + } + + public bool EditAddres(Dictionary pairs) + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Domain-Id", "1"); + webHeaderCollection.Add("X-Apple-Api-Key", base.apiKey.Trim()); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + HttpResult webJsonContent = getWebJsonContent("https://appleid.apple.com/account/manage/payment", "https://appleid.apple.com/account/manage", webHeaderCollection); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在修改内容"); + string text = "ownerName"; + JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); + ManagePayment managePayment = javaScriptSerializer.Deserialize(webJsonContent.Html); + string text2 = ""; + if (pairs.ContainsKey("税号")) + { + text2 = "\"taxId\":\"" + getDicValue(pairs, "税号", "") + "\","; + } + else if (managePayment.primaryPaymentMethod.taxId != null) + { + text2 = "\"taxId\":\"" + managePayment.primaryPaymentMethod.taxId + "\","; + } + string text3 = ""; + if (pairs.ContainsKey("卡号")) + { + text3 = text3 + "\"number\":\"" + getDicValue(pairs, "卡号", "") + "\","; + text = "nameOnCard"; + } + else if (managePayment.primaryPaymentMethod.number != null) + { + text3 = text3 + "\"number\":\"" + managePayment.primaryPaymentMethod.number + "\","; + } + if (pairs.ContainsKey("有效期限年")) + { + text3 = text3 + "\"expirationYear\":\"" + getDicValue(pairs, "有效期限年", "") + "\","; + } + else if (managePayment.primaryPaymentMethod.expirationYear.HasValue) + { + text3 = text3 + "\"expirationYear\":\"" + managePayment.primaryPaymentMethod.expirationYear + "\","; + } + if (pairs.ContainsKey("有效期限月")) + { + text3 = text3 + "\"expirationMonth\":\"" + getDicValue(pairs, "有效期限月", "") + "\","; + } + else if (managePayment.primaryPaymentMethod.expirationMonth.HasValue) + { + text3 = text3 + "\"expirationMonth\":\"" + managePayment.primaryPaymentMethod.expirationMonth + "\","; + } + if (pairs.ContainsKey("安全码")) + { + text3 = text3 + "\"cvv\":\"" + getDicValue(pairs, "安全码", "") + "\","; + } + if (managePayment.primaryPaymentMethod.nameOnCard != null) + { + text = "nameOnCard"; + } + string putData = string.Concat("{\"" + text + "\":{\"firstName\":\"" + getDicValue(pairs, "账单名字", managePayment.primaryPaymentMethod.ownerName.firstName) + "\",\"lastName\":\"" + getDicValue(pairs, "账单姓氏", managePayment.primaryPaymentMethod.ownerName.lastName) + "\"},\"phoneNumber\":{\"areaCode\":\"" + (getDicValue(pairs, "电话", managePayment.primaryPaymentMethod.phoneNumber.number).Contains(getDicValue(pairs, "区号", managePayment.primaryPaymentMethod.phoneNumber.areaCode)) ? "" : getDicValue(pairs, "区号", managePayment.primaryPaymentMethod.phoneNumber.areaCode)) + "\",\"number\":\"" + getDicValue(pairs, "电话", managePayment.primaryPaymentMethod.phoneNumber.number).Replace("(", "").Replace(")", "").Replace("-", "") + .Replace(" ", "") + "\",\"countryCode\":\"" + managePayment.primaryPaymentMethod.phoneNumber.countryCode + "\"},\"billingAddress\":{\"line1\":\"" + getDicValue(pairs, "街道地址", managePayment.primaryPaymentMethod.billingAddress.line1) + "\",\"line2\":\"" + getDicValue(pairs, "楼号单元", managePayment.primaryPaymentMethod.billingAddress.line2) + "\",\"line3\":\"", "\",\"suburb\":\"", getDicValue(pairs, "区", managePayment.primaryPaymentMethod.billingAddress.suburb), "\",\"county\":\"", getDicValue(pairs, "县", managePayment.primaryPaymentMethod.billingAddress.county), "\",\"city\":\"", getDicValue(pairs, "城市", managePayment.primaryPaymentMethod.billingAddress.city), "\",\"countryCode\":\"", managePayment.primaryPaymentMethod.billingAddress.countryCode, "\",\"postalCode\":\"", getDicValue(pairs, "邮编", managePayment.primaryPaymentMethod.billingAddress.postalCode), "\",\"stateProvinceName\":\"", getDicValue(pairs, "省/市", managePayment.primaryPaymentMethod.billingAddress.stateProvinceCode), "\"},", text2, text3, "\"id\":1}"); + WebHeaderCollection webHeaderCollection2 = new WebHeaderCollection(); + webHeaderCollection2.Add("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection2.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection2.Add("X-Apple-Domain-Id", "1"); + if (handelDic.ContainsKey("scnt")) + { + webHeaderCollection2.Add("scnt", handelDic["scnt"]); + } + webHeaderCollection2.Add("X-Apple-Api-Key", base.apiKey.Trim()); + webHeaderCollection2.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/manage/payment/method/" + ((text == "nameOnCard") ? "card" : "none") + "/1", putData, appleHomeUrl, webHeaderCollection2); + if (httpResult.StatusCode == HttpStatusCode.BadRequest || httpResult.StatusCode == HttpStatusCode.Unauthorized) + { + ServiceErrorsModel serviceErrorsModel = javaScriptSerializer.Deserialize(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "账单信息修改失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "账单信息修改失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + } + if (httpResult.StatusCode == HttpStatusCode.OK) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "信息修改完成"); + action?.Invoke(base.noticeKey, DisplyType.lostBillNo, ""); + return true; + } + if (httpResult.StatusCode == HttpStatusCode.Forbidden) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "账单信息修改失败,请求错误"); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "信息修改失败,未知异常:" + httpResult.StatusCode); + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "网络异常,修改失败"); + return false; + } + + public bool checkDisable(bool _openVpn, string appleId, string pwd, string _notityKey) + { + this.appleId = appleId; + base.openVpn = _openVpn; + base.noticeKey = _notityKey; + string postData = "{\"accountName\":\"" + appleId + "\",\"password\":\"" + pwd + "\",\"rememberMe\":false}"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Apple-Domain-Id", "1"); + webHeaderCollection.Add("X-Apple-App-Id", "1879"); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Locale", "ZH-CN"); + webHeaderCollection.Add("Origin", "https://idmsa.apple.com"); + webHeaderCollection.Add("X-Apple-Widget-Key", "16452abf721961a1728885bef033f28e"); + widgKey = "16452abf721961a1728885bef033f28e"; + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + HttpResult httpResult = postWebContent("https://idmsa.apple.com/appleauth/auth/signin", postData, "https://idmsa.apple.com/appleauth/auth/signin?widgetKey=16452abf721961a1728885bef033f28e&language=ZH-CN&appId=1879", webHeaderCollection); + if (httpResult.StatusCode == HttpStatusCode.Unauthorized) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "ID 或密码不正确"); + string.IsNullOrEmpty(base.ProxyIp); + return true; + } + if (httpResult.StatusCode == HttpStatusCode.Forbidden) + { + RespErrorJson respErrorJson = new JavaScriptSerializer().Deserialize(httpResult.Html); + if (respErrorJson != null && respErrorJson.serviceErrors != null && respErrorJson.serviceErrors.Length != 0) + { + string message = respErrorJson.serviceErrors[0].message; + action?.Invoke(base.noticeKey, DisplyType.xinxi, message); + return false; + } + return false; + } + if (httpResult.StatusCode == HttpStatusCode.OK) + { + string[] allKeys = httpResult.Header.AllKeys; + foreach (string text in allKeys) + { + if (text == "X-Apple-ID-Session-Id") + { + handelDic.TryAddDic("X-Apple-ID-Session-Id", httpResult.Header[text]); + } + if (text == "X-Apple-ID-Account-Country") + { + handelDic.TryAddDic("X-Apple-ID-Account-Country", httpResult.Header[text]); + } + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密码验证成功"); + if (httpResult.Header.AllKeys.Contains("X-Apple-ID-Account-Country")) + { + action?.Invoke(base.noticeKey, DisplyType.area, AppleUtlis.GetAreaByCode(httpResult.Header["X-Apple-ID-Account-Country"].ToString())); + } + return reportaproblem(appleId); + } + if (httpResult.StatusCode == HttpStatusCode.PreconditionFailed) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "阅读协议"); + string[] allKeys = httpResult.Header.AllKeys; + foreach (string text2 in allKeys) + { + if (text2 == "X-Apple-Repair-Session-Token") + { + if (!handelDic.ContainsKey(text2)) + { + handelDic.TryAddDic(text2, httpResult.Header[text2]); + } + else + { + handelDic[text2] = httpResult.Header[text2]; + } + } + if (text2 == "scnt") + { + checkDisableScnt = httpResult.Header[text2]; + if (!handelDic.ContainsKey(text2)) + { + handelDic.TryAddDic(text2, httpResult.Header[text2]); + } + else + { + handelDic[text2] = httpResult.Header[text2]; + } + } + if (text2 == "X-Apple-App-Id") + { + if (!handelDic.ContainsKey(text2)) + { + handelDic.TryAddDic(text2, httpResult.Header[text2]); + } + else + { + handelDic[text2] = httpResult.Header[text2]; + } + } + if (text2 == "X-Apple-Frame-Id") + { + if (!handelDic.ContainsKey(text2)) + { + handelDic.TryAddDic(text2, httpResult.Header[text2]); + } + else + { + handelDic[text2] = httpResult.Header[text2]; + } + } + if (text2 == "X-Apple-Locale") + { + if (!handelDic.ContainsKey(text2)) + { + handelDic.TryAddDic(text2, httpResult.Header[text2]); + } + else + { + handelDic[text2] = httpResult.Header[text2]; + } + } + } + try + { + if (repair()) + { + return reportaproblem(appleId); + } + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + if (isError) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, ex.Message); + return false; + } + isError = true; + } + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "未知错误"); + return false; + } + + public bool priveSignout() + { + return true; + } + + public bool signout() + { + return true; + } + + public bool reportSingOut() + { + return true; + } + + public bool sponsorRefund(string appleId, string amountSpik) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在查询订单"); + HttpResult webJsonContent = getWebJsonContent("https://reportaproblem.apple.com/invoices/weborderIds.json?size=60&entityType=invoices&category=all&batchSize=60&r=" + dataR, "https://reportaproblem.apple.com"); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + string text = ""; + string text2 = ""; + foreach (KeyValuePair item in Tools.Todejosn>(webJsonContent.Html)["idToHint"] as Dictionary) + { + text = text + item.Key + ","; + text2 = (string)(text2 + ((dynamic)item.Value + ",")); + } + text = text.TrimEnd(','); + text2 = text2.TrimEnd(','); + string url = "https://reportaproblem.apple.com/invoices/summaries/" + text + ".html?h=" + text2 + "&t=-480&r=" + dataR; + webJsonContent = getWebJsonContent(url, "https://reportaproblem.apple.com"); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + decimal result2; + decimal[] array = (from c in amountSpik.Split(',') + where decimal.TryParse(c, out result2) + select decimal.Parse(c)).ToArray(); + List list = new List(); + foreach (Match item2 in Regex.Matches(webJsonContent.Html, "ph-row([\\s\\S]*?)invoice-container")) + { + string value = new Regex("data-id=\"([\\s\\S]*?)\"").Match(item2.Groups[1].Value).Groups[1].Value; + string value2 = new Regex("data-t=\"([\\s\\S]*?)\"").Match(item2.Groups[1].Value).Groups[1].Value; + string value3 = new Regex("class=\"extra\">([\\s\\S]*?)").Match(item2.Groups[1].Value).Groups[1].Value; + string value4 = new Regex("class=\"total\">([\\s\\S]*?)").Match(item2.Groups[1].Value).Groups[1].Value; + PurchaseLineItems purchaseLineItems = new PurchaseLineItems + { + dataT = value2, + extra = value3, + title = value, + total = value4 + }; + string text3 = value4.Replace(",", "."); + if (value4.Contains(",")) + { + purchaseLineItems.monetary = ","; + } + else + { + purchaseLineItems.monetary = "."; + } + string text4 = Regex.Replace(text3, "[^\\d.\\d]", ""); + if (Regex.IsMatch(text4, "^[+-]?\\d*[.]?\\d*$")) + { + Regex regex = new Regex("(\\p{Sc})?"); + string currency = text3.Replace(text4, "").TrimStart(); + if (decimal.TryParse(regex.Replace(text4, ""), out var result)) + { + purchaseLineItems.currency = currency; + purchaseLineItems.money = result; + if (result <= 0m || (array.Length != 0 && !array.Contains(result))) + { + continue; + } + } + } + list.Add(purchaseLineItems); + } + string text5 = ""; + foreach (IGrouping item3 in from c in list + group c by c.extra) + { + foreach (IGrouping item4 in from c in item3 + group c by c.total) + { + text5 = text5 + item3.Key + " " + item4.Key + ":"; + foreach (PurchaseLineItems item5 in item4) + { + text5 = text5 + item5.title + ","; + } + text5 = text5.TrimEnd(',') + " "; + } + } + action?.Invoke(base.noticeKey, DisplyType.lostBillNo, text5); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "查询完成"); + return true; + } + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "网络异常,请重新检测"); + return false; + } + + public bool reportaproblem(string appleId) + { + HttpResult webContent = getWebContent("https://reportaproblem.apple.com", "https://idmsa.apple.com/IDMSWebAuth/signin?appIdKey=6f59402f11d3e2234be5b88bf1c96e1e453a875aec205272add55157582a9f61&language=US-EN"); + if (webContent.StatusCode == HttpStatusCode.OK) + { + HttpResult webJsonContent = getWebJsonContent("https://reportaproblem.apple.com/api/login", webContent.ResponseUri); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + applyAtion?.Invoke(base.noticeKey, DisplyType.normal, "正常"); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "查询完成"); + string.IsNullOrEmpty(base.ProxyIp); + idIsNormal = true; + dataR = new Regex(AppSysConfig.getConfig("Regex_reportaproblem")).Match(webContent.Html).Groups[1].Value; + return true; + } + string token = AppleNetworkBase.GetToken(webJsonContent.Html, "messageBodyLocKey\":\"", "\""); + if (!string.IsNullOrEmpty(token)) + { + if (AppSysConfig.getConfig("MessageBodyLocKey").Split(',').Contains(token)) + { + applyAtion?.Invoke(base.noticeKey, DisplyType.forbidden, "禁用"); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "查询完成"); + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,错误码:" + token); + return false; + } + applyAtion?.Invoke(base.noticeKey, DisplyType.normal, "正常"); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "查询完成"); + return true; + } + if (webContent.StatusCode != HttpStatusCode.Found && webContent.StatusCode != HttpStatusCode.MovedPermanently) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "未知异常,请重新检测"); + return false; + } + string.IsNullOrEmpty(base.ProxyIp); + if (webContent.RedirectUrl.ToLower().Contains("accountdisabled")) + { + applyAtion?.Invoke(base.noticeKey, DisplyType.forbidden, "禁用"); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "查询完成"); + return true; + } + if (webContent.RedirectUrl.ToLower().Contains("https://reportaproblem.apple.com")) + { + applyAtion?.Invoke(base.noticeKey, DisplyType.normal, "正常"); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "查询完成"); + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "未知异常,请重新检测"); + return false; + } + + private void manageSecurity() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Domain-Id", "1"); + webHeaderCollection.Add("X-Apple-Api-Key", base.apiKey.Trim()); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + getWebContent("https://appleid.apple.com/account/manage/security", "https://appleid.apple.com/account/manage", webHeaderCollection, "application/json"); + } + + private void manageFamily() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Domain-Id", "1"); + webHeaderCollection.Add("X-Apple-Api-Key", base.apiKey.Trim()); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + getWebJsonContent("https://appleid.apple.com/account/manage/family", "https://appleid.apple.com/account/manage", webHeaderCollection); + } + + private bool authenticatePassword(string pwd) + { + string url = "https://appleid.apple.com/authenticate/password"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Apple-Api-Key", base.apiKey); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Domain-Id", "1"); + webHeaderCollection.Add("scnt", handelDic["scnt"]); + webHeaderCollection.Add("X-Apple-Locale", homeLanguage); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + HttpResult httpResult = postWebContent(url, "{\"password\":\"" + pwd + "\"}", appleHomeUrl, webHeaderCollection); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.NoContent) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密码验证成功"); + return true; + } + if (httpResult.StatusCode == HttpStatusCode.PreconditionFailed) + { + string[] allKeys = httpResult.Header.AllKeys; + foreach (string text in allKeys) + { + if (text == "X-Apple-Repair-Session-Token") + { + if (!handelDic.ContainsKey(text)) + { + handelDic.TryAddDic(text, httpResult.Header[text]); + } + else + { + handelDic[text] = httpResult.Header[text]; + } + } + if (text == "scnt") + { + if (!handelDic.ContainsKey(text)) + { + handelDic.TryAddDic(text, httpResult.Header[text]); + } + else + { + handelDic[text] = httpResult.Header[text]; + } + } + } + if (httpResult.Header.AllKeys.Contains("X-Apple-ID-Account-Country")) + { + XAppleIDAccountCountry = AppleUtlis.GetAreaByCode(httpResult.Header["X-Apple-ID-Account-Country"].ToString()); + action?.Invoke(base.noticeKey, DisplyType.area, XAppleIDAccountCountry); + } + } + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密码错误"); + return false; + } + + private bool changQuestions(string newqt1, string newqt2, string newqt3) + { + string text = ""; + JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); + try + { + if (securityQuestions != null) + { + AothQuestions aothQuestions = new AothQuestions(); + aothQuestions.questions = new AothQuestions.Question[3]; + aothQuestions.questions[0] = new AothQuestions.Question + { + id = 130, + answer = newqt1, + number = 1, + question = securityQuestions.availableSecurityQuestions[0][0].question + }; + aothQuestions.questions[1] = new AothQuestions.Question + { + id = 136, + answer = newqt2, + number = 2, + question = securityQuestions.availableSecurityQuestions[1][0].question + }; + aothQuestions.questions[2] = new AothQuestions.Question + { + id = 142, + answer = newqt3, + number = 3, + question = securityQuestions.availableSecurityQuestions[2][0].question + }; + text = javaScriptSerializer.Serialize(aothQuestions); + } + else + { + text = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes("{\"questions\":[{\"id\":130,\"question\":\"你少年时代最好的朋友叫什么名字?\",\"number\":1,\"answer\":\"" + newqt1 + "\"},{\"id\":136,\"question\":\"你的理想工作是什么?\",\"number\":2,\"answer\":\"" + newqt2 + "\"},{\"id\":142,\"question\":\"你的父母是在哪里认识的?\",\"number\":3,\"answer\":\"" + newqt3 + "\"}]}")); + } + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + text = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes("{\"questions\":[{\"id\":130,\"question\":\"你少年时代最好的朋友叫什么名字?\",\"number\":1,\"answer\":\"" + newqt1 + "\"},{\"id\":136,\"question\":\"你的理想工作是什么?\",\"number\":2,\"answer\":\"" + newqt2 + "\"},{\"id\":142,\"question\":\"你的父母是在哪里认识的?\",\"number\":3,\"answer\":\"" + newqt3 + "\"}]}")); + } + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Domain-Id", "1"); + if (handelDic.ContainsKey("scnt")) + { + webHeaderCollection.Add("scnt", handelDic["scnt"]); + } + webHeaderCollection.Add("X-Apple-Api-Key", base.apiKey.Trim()); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/manage/security/questions", text, appleHomeUrl, webHeaderCollection, "application/json"); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.OK) + { + applyAtion?.Invoke(base.noticeKey, DisplyType.qt1, newqt1); + applyAtion?.Invoke(base.noticeKey, DisplyType.qt2, newqt2); + applyAtion?.Invoke(base.noticeKey, DisplyType.qt3, newqt3); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密保修改成功"); + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密保修改失败,未知异常"); + return false; + } + ServiceErrorsModel serviceErrorsModel = javaScriptSerializer.Deserialize(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密保修改失败"); + return false; + } + + private bool changenPayment(PaymentInfo pay) + { + string putData = "{\"ownerName\":{\"firstName\":\"" + pay.ownerName.firstName + "\",\"lastName\":\"" + pay.ownerName.lastName + "\"},\"phoneNumber\":{\"areaCode\":\"" + pay.phoneNumber.areaCode + "\",\"number\":\"" + pay.phoneNumber.number + "\",\"countryCode\":\"" + pay.phoneNumber.countryCode + "\"},\"billingAddress\":{\"line1\":\"" + pay.billingAddress.line1 + "\",\"line2\":\"" + pay.billingAddress.line2 + "\",\"line3\":\"" + pay.billingAddress.line3 + "\",\"suburb\":\"" + pay.billingAddress.suburb + "\",\"county\":\"" + pay.billingAddress.county + "\",\"city\":\"" + pay.billingAddress.city + "\",\"countryCode\":\"" + pay.billingAddress.countryCode + "\",\"postalCode\":\"" + pay.billingAddress.postalCode + "\",\"stateProvinceName\":\"" + pay.billingAddress.stateProvinceName + "\"},\"id\":1}"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Domain-Id", "1"); + if (handelDic.ContainsKey("scnt")) + { + webHeaderCollection.Add("scnt", handelDic["scnt"]); + } + webHeaderCollection.Add("X-Apple-Api-Key", base.apiKey.Trim()); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/manage/payment/method/none/1", putData, appleHomeUrl, webHeaderCollection); + if (httpResult.StatusCode == HttpStatusCode.BadRequest || httpResult.StatusCode == HttpStatusCode.Unauthorized) + { + ServiceErrorsModel serviceErrorsModel = new JavaScriptSerializer().Deserialize(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + } + if (httpResult.StatusCode == HttpStatusCode.OK) + { + applyAtion?.Invoke(base.noticeKey, DisplyType.guojia, pay.billingAddress.countryCode); + AppleItunesLogin loginIdUserInfo = iTunesAccountLoginCache.getLoginIdUserInfo(acount.appleId, acount.applePwd); + if (loginIdUserInfo != null) + { + loginIdUserInfo.Area = AppleUtlis.GetAreaCodeByCode(pay.billingAddress.countryCode); + loginIdUserInfo.software = AppleUtlis.GetStoreIdByCode(pay.billingAddress.countryCode); + iTunesAccountLoginCache.removeReddemUserInfo(loginIdUserInfo.account, loginIdUserInfo.StdndbyKeyGuid); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "国家修改完成"); + return true; + } + if (httpResult.StatusCode == HttpStatusCode.Forbidden) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "国家修改失败,请求错误"); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "国家修改失败,未知异常"); + return false; + } + + private bool changeBirthDate(string fullBirthDate) + { + string putData = "{\"fullBirthDate\":\"" + fullBirthDate + "\"}"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Domain-Id", "1"); + if (handelDic.ContainsKey("scnt")) + { + webHeaderCollection.Add("scnt", handelDic["scnt"]); + } + webHeaderCollection.Add("X-Apple-Api-Key", base.apiKey.Trim()); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/manage/security/birthday", putData, appleHomeUrl, webHeaderCollection); + if (httpResult.StatusCode == HttpStatusCode.BadRequest || httpResult.StatusCode == HttpStatusCode.Unauthorized) + { + ServiceErrorsModel serviceErrorsModel = new JavaScriptSerializer().Deserialize(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + } + if (httpResult.StatusCode == HttpStatusCode.OK) + { + applyAtion?.Invoke(base.noticeKey, DisplyType.shengri, fullBirthDate); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "生日修改完成"); + return true; + } + _ = httpResult.StatusCode; + action?.Invoke(base.noticeKey, DisplyType.xinxi, "生日修改失败,未知异常"); + return false; + } + + private bool RemoveRescueEmail() + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在移除救援邮箱"); + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + if (handelDic.ContainsKey("scnt")) + { + webHeaderCollection.AddWebHander("scnt", handelDic["scnt"]); + } + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.AddWebHander("X-Apple-Api-Key", base.apiKey); + webHeaderCollection.AddWebHander("Origin", "https://appleid.apple.com"); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + HttpResult httpResult = DeleteWebContent("https://appleid.apple.com/account/manage/security/email/rescue", "", "https://appleid.apple.com/", webHeaderCollection); + if (httpResult.StatusCode != HttpStatusCode.OK && httpResult.StatusCode != HttpStatusCode.NoContent) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "除救援邮箱移除失败"); + return false; + } + action?.Invoke(base.noticeKey, DisplyType.balance, "已移除"); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "除救援邮箱移除成功"); + return true; + } + + protected new HttpResult DeleteWebContent(string url, string putData, string referer, WebHeaderCollection webHeader = null, string accept = "") + { + byte[] bytes = Encoding.UTF8.GetBytes(putData); + HttpItem httpItem = new HttpItem + { + URL = url, + Method = "DELETE", + UserAgent = base.userAgent, + Cookie = listCookie.toFonmtCookie(), + Accept = ((accept.Length == 0) ? "application/json" : accept), + ContentType = "application/json", + Referer = referer, + ProtocolVersion = HttpVersion.Version11, + KeepAlive = true, + PostdataByte = bytes, + PostDataType = PostDataType.Byte, + ResultType = ResultType.String, + WebProxy = WebRequest.DefaultWebProxy + }; + if (webHeader != null) + { + httpItem.Header = webHeader; + } + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + Array.Clear(bytes, 0, bytes.Length); + if (httpReuslt.StatusCode == (HttpStatusCode)451 && authenticatePassword(acount.applePwd)) + { + return DeleteWebContent(url, putData, referer, webHeader, accept); + } + Array.Clear(bytes, 0, bytes.Length); + return httpReuslt; + } + + private bool changePwd(string oldPwd, string newPwd) + { + string putData = "{\"currentPassword\":\"" + oldPwd + "\",\"newPassword\":\"" + newPwd + "\"}"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Domain-Id", "1"); + if (handelDic.ContainsKey("scnt")) + { + webHeaderCollection.Add("scnt", handelDic["scnt"]); + } + webHeaderCollection.Add("X-Apple-Api-Key", base.apiKey.Trim()); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/manage/security/password", putData, appleHomeUrl, webHeaderCollection); + if (httpResult.StatusCode == HttpStatusCode.BadRequest || httpResult.StatusCode == HttpStatusCode.Unauthorized) + { + ServiceErrorsModel serviceErrorsModel = new JavaScriptSerializer().Deserialize(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + } + if (httpResult.StatusCode == HttpStatusCode.OK) + { + acount.applePwd = newPwd; + applyAtion?.Invoke(base.noticeKey, DisplyType.mima, newPwd); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密码修改成功"); + string[] allKeys = httpResult.Header.AllKeys; + foreach (string text in allKeys) + { + if (!handelDic.ContainsKey(text)) + { + handelDic.TryAddDic(text, httpResult.Header[text]); + } + else + { + handelDic[text] = httpResult.Header[text]; + } + } + return true; + } + _ = httpResult.StatusCode; + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密码修改失败,未知异常"); + return false; + } + + private bool intoHome() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Apple-I-Request-Context", "ca"); + webHeaderCollection.Add("scnt", handelDic["scnt"]); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + HttpResult webContent = getWebContent(appleHomeUrl, "https://appleid.apple.com/", webHeaderCollection, "application/json, text/plain", "application/json"); + if (webContent.StatusCode == HttpStatusCode.OK) + { + string[] allKeys = webContent.Header.AllKeys; + foreach (string text in allKeys) + { + if (!handelDic.ContainsKey(text)) + { + handelDic.TryAddDic(text, webContent.Header[text]); + } + else + { + handelDic[text] = webContent.Header[text]; + } + } + string text2 = new Regex(AppSysConfig.getConfig("Regex_intoHome_jsonData")).Match(webContent.Html).Groups[1].Value.Trim().TrimEnd(','); + JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); + if (!string.IsNullOrEmpty(text2)) + { + loginAppleInfo = javaScriptSerializer.Deserialize(text2); + action?.Invoke(base.noticeKey, DisplyType.shengri, loginAppleInfo.security.birthday); + if (loginAppleInfo.person.primaryAddress != null && loginAppleInfo.person.primaryAddress.countryName != null) + { + action?.Invoke(base.noticeKey, DisplyType.guojia, loginAppleInfo.person.primaryAddress.countryName); + } + accountFirstName = loginAppleInfo.person.name.firstName; + accountLastName = loginAppleInfo.person.name.lastName; + if (loginAppleInfo.person.name.middleName != null) + { + accountLastName = accountLastName + " " + loginAppleInfo.person.name.middleName; + } + decimal? num = loginAppleInfo.person.reachableAtOptions.primaryEmailAddress.createdDate as decimal?; + if (num.HasValue) + { + string arg = Tools.GetTimeByTimeStamp((long)num.Value).ToString("yyyy-MM-dd HH:mm:ss"); + action?.Invoke(base.noticeKey, DisplyType.lostBillNo, arg); + } + action?.Invoke(base.noticeKey, DisplyType.xiaofeiriqiNow, accountLastName + " " + accountFirstName); + if (!string.IsNullOrEmpty(loginAppleInfo.security.rescueEmail)) + { + action?.Invoke(base.noticeKey, DisplyType.balance, loginAppleInfo.security.rescueEmail); + } + else + { + action?.Invoke(base.noticeKey, DisplyType.balance, "无"); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "账号获取完成"); + } + string value = new Regex(AppSysConfig.getConfig("Regex_intoHome_jsonDataQuestions")).Match(webContent.Html).Groups[0].Value; + if (!string.IsNullOrEmpty(value)) + { + text2 = "{" + value.TrimEnd('"').TrimEnd(',') + "}"; + securityQuestions = javaScriptSerializer.Deserialize(text2); + } + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "获取账号信息网络异常"); + return false; + } + + private bool verifyAuthQuestions(AothQuestions questions, string[] question) + { + AothQuestions.Question[] questions2 = questions.questions; + int num = 0; + while (true) + { + if (num < questions2.Length) + { + AothQuestions.Question question2 = questions2[num]; + int anwerId_Index = Tools.getAnwerId_Index(question2.id); + if (anwerId_Index == 0) + { + break; + } + question2.answer = question[anwerId_Index - 1]; + num++; + continue; + } + string postData = new JavaScriptSerializer().Serialize(questions); + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Domain-Id", "1"); + webHeaderCollection.Add("scnt", handelDic["scnt"]); + webHeaderCollection.Add("X-Apple-ID-Session-Id", handelDic["X-Apple-ID-Session-Id"]); + webHeaderCollection.Add("X-Apple-Locale", homeLanguage); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + HttpResult httpResult = postWebContent(verifyquestionsUrl, postData, authUrl, webHeaderCollection); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.NoContent) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密保验证成功"); + return true; + } + if (httpResult.StatusCode == HttpStatusCode.PreconditionFailed) + { + string[] allKeys = httpResult.Header.AllKeys; + foreach (string text in allKeys) + { + if (text == "X-Apple-Repair-Session-Token") + { + if (!handelDic.ContainsKey(text)) + { + handelDic.TryAddDic(text, httpResult.Header[text]); + } + else + { + handelDic[text] = httpResult.Header[text]; + } + } + if (text == "scnt") + { + if (!handelDic.ContainsKey(text)) + { + handelDic.TryAddDic(text, httpResult.Header[text]); + } + else + { + handelDic[text] = httpResult.Header[text]; + } + } + } + if (httpResult.Header.AllKeys.Contains("X-Apple-ID-Account-Country")) + { + XAppleIDAccountCountry = AppleUtlis.GetAreaByCode(httpResult.Header["X-Apple-ID-Account-Country"].ToString()); + action?.Invoke(base.noticeKey, DisplyType.area, XAppleIDAccountCountry); + } + return repair(); + } + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密保错误"); + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "非正常密保问题,无法识别"); + return false; + } + + private bool repair() + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "获取阅读协议"); + string text = "zh_CN_CHN"; + if (handelDic.ContainsKey("X-Apple-Locale")) + { + text = handelDic["X-Apple-Locale"]; + } + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("Upgrade-Insecure-Requests", "1"); + string apple_Widget_Key = Apple_Widget_Key; + if (widgKey != string.Empty) + { + apple_Widget_Key = widgKey; + } + webHeaderCollection.Add("X-Apple-Widget-Key", apple_Widget_Key); + HttpItem httpItem = new HttpItem + { + URL = "https://appleid.apple.com/widget/account/repair?widgetKey=" + apple_Widget_Key + "&rv=1&language=" + text, + Method = "get", + Timeout = 120000, + ReadWriteTimeout = 30000, + UserAgent = base.userAgent, + Cookie = listCookie.toFonmtCookie(), + ContentType = "text/html;charset=UTF-8", + Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", + Referer = "https://idmsa.apple.com/appleauth/auth/signin?widgetKey=" + apple_Widget_Key + "&language=zh_CN&rv=1", + ResultType = ResultType.String, + ProtocolVersion = HttpVersion.Version11, + WebProxy = WebRequest.DefaultWebProxy + }; + httpItem.Header = webHeaderCollection; + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + if (httpReuslt.StatusCode == HttpStatusCode.OK) + { + try + { + string text2 = ""; + JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); + string value = new Regex(AppSysConfig.getConfig("Regex_repair_jsonDataQuestions")).Match(httpReuslt.Html).Groups[0].Value; + if (!string.IsNullOrEmpty(value)) + { + text2 = "{" + value.TrimEnd('"').TrimEnd(',') + "}"; + securityQuestions = javaScriptSerializer.Deserialize(text2); + } + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + } + string value2 = new Regex(AppSysConfig.getConfig("Regex_repair_sessionId")).Match(httpReuslt.Html).Groups[1].Value.Trim().Replace("\n", "").Replace("\r", "") + .Replace("\"", "") + .TrimStart(':') + .Trim(); + string key = "repairSessionId"; + if (!handelDic.ContainsKey(key)) + { + handelDic.TryAddDic(key, value2); + } + else + { + handelDic[key] = value2; + } + string[] allKeys = httpReuslt.Header.AllKeys; + foreach (string text3 in allKeys) + { + if (text3 == "scnt") + { + if (!handelDic.ContainsKey(text3)) + { + handelDic.TryAddDic(text3, httpReuslt.Header[text3]); + } + else + { + handelDic[text3] = httpReuslt.Header[text3]; + } + } + if (text3 == "X-Apple-Repair-Session-Token") + { + if (!handelDic.ContainsKey(text3)) + { + handelDic.TryAddDic(text3, httpReuslt.Header[text3]); + } + else + { + handelDic[text3] = httpReuslt.Header[text3]; + } + } + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "协议获取成功"); + return options(); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "协议获取失败"); + return false; + } + + private bool options(bool skieprderPrivacy = false) + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("scnt", handelDic["scnt"]); + if (openHsa2) + { + webHeaderCollection.Add("X-Apple-Skip-Repair-Attributes", "[]"); + } + else + { + webHeaderCollection.Add("X-Apple-Skip-Repair-Attributes", "[\"hsa2_enrollment\"]"); + } + webHeaderCollection.Add("X-Apple-Session-Token", handelDic["X-Apple-Repair-Session-Token"]); + webHeaderCollection.Add("X-Apple-Locale", homeLanguage); + string apple_Widget_Key = Apple_Widget_Key; + if (widgKey != string.Empty) + { + webHeaderCollection.Add("X-Apple-Repair-App-Id", "1879"); + apple_Widget_Key = widgKey; + } + webHeaderCollection.Add("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + webHeaderCollection.Add("X-Apple-Widget-Key", apple_Widget_Key); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + string text = "https://appleid.apple.com/account/manage/repair/options"; + if (acount?.appleQt3 == "changAccount" && !string.IsNullOrEmpty(_changeItem.newPwd)) + { + text += "?passwordRepairType=w"; + } + HttpItem httpItem = new HttpItem + { + URL = text, + Method = "get", + Timeout = 120000, + ReadWriteTimeout = 30000, + UserAgent = base.userAgent, + Cookie = listCookie.toFonmtCookie(), + ContentType = "application/json; charset=utf-8", + Accept = "application/json, text/javascript, */*; q=0.01", + Referer = "https://appleid.apple.com/widget/account/repair?widgetKey=" + apple_Widget_Key + "&rv=1&language=zh_CN_CHN", + ResultType = ResultType.String, + ProtocolVersion = HttpVersion.Version11, + WebProxy = WebRequest.DefaultWebProxy + }; + httpItem.Header = webHeaderCollection; + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + if (httpReuslt.StatusCode == HttpStatusCode.OK) + { + string[] allKeys = httpReuslt.Header.AllKeys; + foreach (string text2 in allKeys) + { + if (text2 == "X-Apple-Session-Token") + { + if (!handelDic.ContainsKey(text2)) + { + handelDic.TryAddDic(text2, httpReuslt.Header[text2]); + } + else + { + handelDic[text2] = httpReuslt.Header[text2]; + } + } + if (openHsa2 && text2 == "scnt") + { + if (!handelDic.ContainsKey(text2)) + { + handelDic.TryAddDic(text2, httpReuslt.Header[text2]); + } + else + { + handelDic[text2] = httpReuslt.Header[text2]; + } + } + } + Dictionary dictionary = Tools.Todejosn>(httpReuslt.Html); + if (httpReuslt.Html.Contains("requiredSteps")) + { + foreach (object item in (dynamic)dictionary["requiredSteps"]) + { + string text3 = (string)(dynamic)item; + if (!(text3 == "hsa2_enrollment") || !openHsa2) + { + if (text3 == "account_name") + { + if (_changeItem == null) + { + int num = Tools.ToNetWorkInt(ConfigUtlis.getConfigValue("comNetworkConfig"), 0); + if (AppSysConfig.getConfig("oldAccountApply") == "1" && base.openVpn && num == 0) + { + APIUtlis.ApiApplyAct(38, "查询老帐号"); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "需要设置账号#1"); + return false; + } + if (string.IsNullOrEmpty(acount.newAppleId) || string.IsNullOrEmpty(acount.newApplePopPwd)) + { + int num2 = Tools.ToNetWorkInt(ConfigUtlis.getConfigValue("comNetworkConfig"), 0); + if (AppSysConfig.getConfig("oldAccountApply") == "1" && base.openVpn && num2 == 0) + { + APIUtlis.ApiApplyAct(38, "查询老帐号"); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "需要设置账号#2"); + return false; + } + if (!setAccnount(acount.newAppleId, acount.newApplePopPwd, Apple_Widget_Key)) + { + return false; + } + } + if (text3 == "weak_password") + { + if (_changeItem == null) + { + int num3 = Tools.ToNetWorkInt(ConfigUtlis.getConfigValue("comNetworkConfig"), 0); + if (AppSysConfig.getConfig("oldAccountApply") == "1" && base.openVpn && num3 == 0) + { + APIUtlis.ApiApplyAct(38, "查询老帐号"); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "需要设置新密码#2"); + return false; + } + if (string.IsNullOrEmpty(_changeItem.newPwd)) + { + int num4 = Tools.ToNetWorkInt(ConfigUtlis.getConfigValue("comNetworkConfig"), 0); + if (AppSysConfig.getConfig("oldAccountApply") == "1" && base.openVpn && num4 == 0) + { + APIUtlis.ApiApplyAct(38, "查询老帐号"); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "需要设置新密码#2"); + return false; + } + if (!setWeakPassword(_changeItem.newPwd)) + { + return false; + } + } + if (text3 == "missing_data") + { + if (_changeItem == null) + { + int num5 = Tools.ToNetWorkInt(ConfigUtlis.getConfigValue("comNetworkConfig"), 0); + if (AppSysConfig.getConfig("oldAccountApply") == "1" && base.openVpn && num5 == 0) + { + APIUtlis.ApiApplyAct(38, "查询老帐号"); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "需要设置生日#1"); + return false; + } + if (string.IsNullOrEmpty(_changeItem.newshengri)) + { + int num6 = Tools.ToNetWorkInt(ConfigUtlis.getConfigValue("comNetworkConfig"), 0); + if (AppSysConfig.getConfig("oldAccountApply") == "1" && base.openVpn && num6 == 0) + { + APIUtlis.ApiApplyAct(38, "查询老帐号"); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "需要设置生日#2"); + return false; + } + if (!setBirthday(_changeItem.newshengri)) + { + return false; + } + isVieyBirthday = true; + } + if (text3 == "challenge_response") + { + if (_changeItem == null) + { + int num7 = Tools.ToNetWorkInt(ConfigUtlis.getConfigValue("comNetworkConfig"), 0); + if (AppSysConfig.getConfig("oldAccountApply") == "1" && base.openVpn && num7 == 0) + { + APIUtlis.ApiApplyAct(38, "查询老帐号"); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "需要设置密保#1"); + return false; + } + if (string.IsNullOrEmpty(_changeItem.newQt1)) + { + int num8 = Tools.ToNetWorkInt(ConfigUtlis.getConfigValue("comNetworkConfig"), 0); + if (AppSysConfig.getConfig("oldAccountApply") == "1" && base.openVpn && num8 == 0) + { + APIUtlis.ApiApplyAct(38, "查询老帐号"); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "需要设置密保#2"); + return false; + } + if (!setQuestions(_changeItem.newQt1, _changeItem.newQt2, _changeItem.newQt3)) + { + return false; + } + isViey = true; + } + if (!(text3 == "phoneNumber") || SkipPhoneNumber()) + { + if (!(text3 == "crossBorderPrivacyConsent") || skieprderPrivacy) + { + if (text3 == "privacy_consent" && !accept()) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "协议阅读失败#2"); + return false; + } + continue; + } + bool gcbdCrossBorderPrivacyConsentRequired = false; + bool appleCrossBorderPrivacyConsentRequired = false; + try + { + dynamic val = dictionary["repairContext"]; + gcbdCrossBorderPrivacyConsentRequired = val["privacyConsentRequirement"]["gcbdCrossBorderPrivacyConsentRequired"]; + appleCrossBorderPrivacyConsentRequired = val["privacyConsentRequirement"]["appleCrossBorderPrivacyConsentRequired"]; + } + catch (Exception) + { + } + if (!CrossBorderPrivacyConsent(gcbdCrossBorderPrivacyConsentRequired, appleCrossBorderPrivacyConsentRequired)) + { + return false; + } + return options(skieprderPrivacy: true); + } + return false; + } + if (string.IsNullOrEmpty(acount.moblie)) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "请先导入手机号码"); + return false; + } + getSecurityUpgrade(); + return OpenHsa2Act(_changeItem.mode, _changeItem.countryCode, Apple_Widget_Key); + } + } + return complete(); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "协议获取失败#2"); + return false; + } + + public bool CrossBorderPrivacyConsent(bool gcbdCrossBorderPrivacyConsentRequired, bool appleCrossBorderPrivacyConsentRequired) + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.AddWebHander("X-Requested-With", "XMLHttpRequest"); + string apple_Widget_Key = Apple_Widget_Key; + if (widgKey != string.Empty) + { + webHeaderCollection.AddWebHander("X-Apple-Repair-App-Id", "1879"); + apple_Widget_Key = widgKey; + } + webHeaderCollection.AddWebHander("X-Apple-Widget-Key", apple_Widget_Key); + webHeaderCollection.AddWebHander("scnt", handelDic["scnt"]); + webHeaderCollection.AddWebHander("X-Apple-Skip-Repair-Attributes", "[]"); + if (handelDic.ContainsKey("X-Apple-Session-Token")) + { + webHeaderCollection.AddWebHander("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + } + webHeaderCollection.AddWebHander("X-Apple-Locale", homeLanguage); + if (handelDic.ContainsKey("repairSessionId")) + { + webHeaderCollection.AddWebHander("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + } + webHeaderCollection.AddWebHander("X-Apple-OAuth-Context", handelDic.getDicVal("X-Apple-OAuth-Context", "")); + string appleIFDClientInfo = FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent); + webHeaderCollection.AddWebHander("X-Apple-I-FD-Client-Info", appleIFDClientInfo); + string postData = "{\"account\":{\"preferences\":{\"privacyPreferences\":{\"appleCrossBorderPrivacyNoticeAccepted\":true}}},\"completedSteps\":[],\"requiredSteps\":[\"crossBorderPrivacyConsent\"],\"repairContext\":{\"repairType\":\"crossBorderPrivacyConsent\",\"repairItems\":[\"crossBorderPrivacyConsent\"]}}"; + if (gcbdCrossBorderPrivacyConsentRequired) + { + postData = "{\"account\":{\"preferences\":{\"privacyPreferences\":{\"gcbdCrossBorderPrivacyNoticeAccepted\":true}}},\"completedSteps\":[],\"requiredSteps\":[\"crossBorderPrivacyConsent\"],\"repairContext\":{\"repairType\":\"crossBorderPrivacyConsent\",\"repairItems\":[\"crossBorderPrivacyConsent\"]}}"; + } + if (gcbdCrossBorderPrivacyConsentRequired && appleCrossBorderPrivacyConsentRequired) + { + postData = "{\"account\":{\"preferences\":{\"privacyPreferences\":{\"appleCrossBorderPrivacyNoticeAccepted\":true,\"gcbdCrossBorderPrivacyNoticeAccepted\":true}}},\"completedSteps\":[],\"requiredSteps\":[\"crossBorderPrivacyConsent\"],\"repairContext\":{\"repairType\":\"crossBorderPrivacyConsent\",\"repairItems\":[\"crossBorderPrivacyConsent\"]}}"; + } + if (postWebContent("https://appleid.apple.com/account/manage/repair/privacy/consent", postData, "https://appleid.apple.com/", webHeaderCollection).StatusCode == HttpStatusCode.OK) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "同意数据隐私协议"); + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "跳过隐私协议失败"); + return false; + } + + public bool OpenHsa2Act(string mode, string countryCode, string widgetWey) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "发送验证码中"); + JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + if (widgKey != string.Empty) + { + webHeaderCollection.Add("X-Apple-Repair-App-Id", "1879"); + } + webHeaderCollection.Add("X-Apple-Widget-Key", widgetWey); + webHeaderCollection.Add("scnt", handelDic["scnt"]); + webHeaderCollection.Add("X-Apple-Skip-Repair-Attributes", "[]"); + if (handelDic.ContainsKey("X-Apple-Session-Token")) + { + webHeaderCollection.Add("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + } + webHeaderCollection.Add("X-Apple-Locale", homeLanguage); + if (handelDic.ContainsKey("repairSessionId")) + { + webHeaderCollection.Add("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + } + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + string text = string.Empty; + int msmId = 0; + lock (lockSendMsmObj) + { + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/security/upgrade/verify/phone", "{\"phoneNumberVerification\":{\"phoneNumber\":{\"number\":\"" + acount.moblie + "\",\"countryCode\":\"" + countryCode + "\"},\"mode\":\"" + mode + "\"}}", "https://appleid.apple.com/widget/account/repair?widgetKey=af1139274f266b22b68c2a3e7ad932cb3c0bbe854e13a79af78dcc73136882c3&rv=1&language=zh_CN_CHN", webHeaderCollection); + if (httpResult.StatusCode == (HttpStatusCode)423) + { + dynamic val = javaScriptSerializer.Deserialize(httpResult.Html); + string text2 = val["phoneNumberVerification"]?["serviceErrors"]?[0]["message"]; + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + text2); + return false; + } + if (httpResult.StatusCode == HttpStatusCode.BadRequest || httpResult.StatusCode == HttpStatusCode.Unauthorized) + { + ServiceErrorsModel serviceErrorsModel = javaScriptSerializer.Deserialize(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + return false; + } + if (httpResult.StatusCode != HttpStatusCode.OK) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "发送验证码失败,未知异常"); + return false; + } + dynamic val2 = javaScriptSerializer.Deserialize(httpResult.Html); + msmId = val2["phoneNumberVerification"]?["phoneNumber"]?["id"]; + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证码发送成功"); + text = getCodeAct_?.Invoke("请输入账号 " + acount.appleId + "\n发送至 " + acount.moblie + " 的验证码", 1); + if (text == null || string.IsNullOrEmpty(text)) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证码未输入"); + return false; + } + if (text.Trim().Length != 6) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证码输入不正确"); + return false; + } + } + return verifyCode(msmId, text, acount.moblie, countryCode, mode, widgetWey); + } + + public bool verifyCode(int msmId, string code, string moblie, string countryCode, string mode, string widgetWey) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在验证"); + JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + if (widgKey != string.Empty) + { + webHeaderCollection.Add("X-Apple-Repair-App-Id", "1879"); + } + webHeaderCollection.Add("X-Apple-Widget-Key", widgetWey); + webHeaderCollection.Add("scnt", handelDic["scnt"]); + webHeaderCollection.Add("X-Apple-Skip-Repair-Attributes", "[]"); + if (handelDic.ContainsKey("X-Apple-Session-Token")) + { + webHeaderCollection.Add("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + } + webHeaderCollection.Add("X-Apple-Locale", homeLanguage); + if (handelDic.ContainsKey("repairSessionId")) + { + webHeaderCollection.Add("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + } + webHeaderCollection.Add("X-Apple-I-Request-Context", "ca"); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + string postData = "{\"phoneNumberVerification\":{\"phoneNumber\":{\"id\":" + msmId + ",\"number\":\"" + moblie + "\",\"countryCode\":\"" + countryCode + "\",\"nonFTEU\":true},\"securityCode\":{\"code\":\"" + code + "\"},\"mode\":\"" + mode + "\"}}"; + HttpResult httpResult = postWebContent("https://appleid.apple.com/account/security/upgrade", postData, "https://appleid.apple.com/widget/account/repair?widgetKey=af1139274f266b22b68c2a3e7ad932cb3c0bbe854e13a79af78dcc73136882c3&rv=1&language=zh_CN_CHN", webHeaderCollection); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.OK) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "双重开启成功"); + AuthenDoubleOpenState = true; + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证失败,未知异常"); + return false; + } + ServiceErrorsModel serviceErrorsModel = javaScriptSerializer.Deserialize(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "开启失败,未知异常"); + } + return false; + } + + public bool SkipPhoneNumber() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + string apple_Widget_Key = Apple_Widget_Key; + if (widgKey != string.Empty) + { + webHeaderCollection.Add("X-Apple-Repair-App-Id", "1879"); + apple_Widget_Key = widgKey; + } + webHeaderCollection.Add("X-Apple-Widget-Key", apple_Widget_Key); + webHeaderCollection.Add("scnt", handelDic["scnt"]); + webHeaderCollection.Add("X-Apple-Skip-Repair-Attributes", "[\"phoneNumber\"]"); + if (handelDic.ContainsKey("X-Apple-Session-Token")) + { + webHeaderCollection.Add("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + } + webHeaderCollection.Add("X-Apple-Locale", homeLanguage); + if (handelDic.ContainsKey("repairSessionId")) + { + webHeaderCollection.Add("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + } + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + if (getWebJsonContent("https://appleid.apple.com/account/manage/repair/options", "https://appleid.apple.com/widget/account/repair?widgetKey=af1139274f266b22b68c2a3e7ad932cb3c0bbe854e13a79af78dcc73136882c3&rv=1&language=zh_CN_CHN", webHeaderCollection).StatusCode == HttpStatusCode.OK) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "跳过手机号码成功"); + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "跳过手机号码失败"); + return false; + } + + public bool setAccnount(string newAccount, string popPwd, string newwidgKey) + { + JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + if (widgKey != string.Empty) + { + webHeaderCollection.Add("X-Apple-Repair-App-Id", "1879"); + newwidgKey = widgKey; + } + webHeaderCollection.Add("X-Apple-Widget-Key", newwidgKey); + webHeaderCollection.Add("scnt", handelDic["scnt"]); + webHeaderCollection.Add("X-Apple-Skip-Repair-Attributes", "[]"); + if (handelDic.ContainsKey("X-Apple-Session-Token")) + { + webHeaderCollection.Add("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + } + webHeaderCollection.Add("X-Apple-Locale", homeLanguage); + if (handelDic.ContainsKey("repairSessionId")) + { + webHeaderCollection.Add("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + } + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + HttpResult httpResult = postWebContent("https://appleid.apple.com/account/manage/appleid/verification", "\"" + newAccount + "\"", "https://appleid.apple.com/widget/account/repair?widgetKey=af1139274f266b22b68c2a3e7ad932cb3c0bbe854e13a79af78dcc73136882c3&rv=1&language=zh_CN_CHN", webHeaderCollection); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.OK) + { + string text = ""; + Verification verification = javaScriptSerializer.Deserialize(httpResult.Html); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "邮件验证码发送成功"); + Thread.Sleep(new Random().Next(AppSysConfig.CheckCodeDelay * 1000, AppSysConfig.CheckCodeDelay * 1000 + 1000)); + int num = 0; + do + { + if (taskState.isRun) + { + num++; + HttpItem item = new HttpItem + { + URL = "http://localhost:47513/?email=" + HttpUtility.UrlEncode(acount.newAppleId) + "&popPwd=" + HttpUtility.UrlEncode(acount.newApplePopPwd), + Method = "GET", + Timeout = 100000, + ReadWriteTimeout = 30000, + ResultType = ResultType.String + }; + HttpResult html = new HttpHelper().GetHtml(item); + if (html.StatusCode == HttpStatusCode.OK) + { + Dictionary dictionary = javaScriptSerializer.Deserialize>(html.Html); + if (dictionary["code"] == "1") + { + text = dictionary["vieyCode"]; + if (!string.IsNullOrEmpty(text)) + { + break; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证码获取第" + num + "次,失败"); + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证码获取第" + num + "次,失败"); + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证码获取第" + num + "次,失败"); + } + Thread.Sleep(5000); + continue; + } + throw new Exception("停止执行"); + } + while (num < 5); + if (!string.IsNullOrEmpty(text)) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证码获取成功"); + return setAccountName(newAccount, verification?.verificationId, text); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "获取验证码失败超过最大次数"); + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "发送邮件验证码失败,未知异常"); + return false; + } + ServiceErrorsModel serviceErrorsModel = javaScriptSerializer.Deserialize(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + return false; + } + + public bool setAccountName(string accountName, string verificationId, string answer) + { + JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); + string putData = "{\"name\":\"" + accountName + "\",\"verificationInfo\":{\"id\":\"" + verificationId + "\",\"answer\":\"" + answer + "\"}}"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + string apple_Widget_Key = Apple_Widget_Key; + if (widgKey != string.Empty) + { + webHeaderCollection.Add("X-Apple-Repair-App-Id", "1879"); + apple_Widget_Key = widgKey; + } + webHeaderCollection.Add("X-Apple-Widget-Key", apple_Widget_Key); + webHeaderCollection.Add("scnt", handelDic["scnt"]); + webHeaderCollection.Add("X-Apple-Skip-Repair-Attributes", "[]"); + if (handelDic.ContainsKey("X-Apple-Session-Token")) + { + webHeaderCollection.Add("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + } + webHeaderCollection.Add("X-Apple-Locale", homeLanguage); + if (handelDic.ContainsKey("repairSessionId")) + { + webHeaderCollection.Add("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + } + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/manage/appleid/verification", putData, "https://appleid.apple.com/widget/account/repair?widgetKey=af1139274f266b22b68c2a3e7ad932cb3c0bbe854e13a79af78dcc73136882c3&rv=1&language=zh_CN_CHN", webHeaderCollection); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.OK) + { + applyAtion?.Invoke(base.noticeKey, DisplyType.newAccount, accountName); + appleId = accountName; + acount.appleId = accountName; + action?.Invoke(base.noticeKey, DisplyType.xinxi, "新账号设置成功"); + isChangAppleId = true; + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "新账号设置失败,未知异常:" + (int)httpResult.StatusCode); + return false; + } + ServiceErrorsModel serviceErrorsModel = javaScriptSerializer.Deserialize(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + return false; + } + + public bool setWeakPassword(string newPwd) + { + JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); + string putData = "{\"currentPassword\":\"" + acount.applePwd + "\",\"newPassword\":\"" + newPwd + "\"}"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + string apple_Widget_Key = Apple_Widget_Key; + if (widgKey != string.Empty) + { + webHeaderCollection.Add("X-Apple-Repair-App-Id", "1879"); + apple_Widget_Key = widgKey; + } + webHeaderCollection.Add("X-Apple-Widget-Key", apple_Widget_Key); + webHeaderCollection.Add("scnt", handelDic["scnt"]); + webHeaderCollection.Add("X-Apple-Skip-Repair-Attributes", "[]"); + webHeaderCollection.Add("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + webHeaderCollection.Add("X-Apple-Locale", homeLanguage); + webHeaderCollection.Add("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/manage/security/password", putData, "https://appleid.apple.com/widget/account/repair?widgetKey=af1139274f266b22b68c2a3e7ad932cb3c0bbe854e13a79af78dcc73136882c3&rv=1&language=zh_CN_CHN", webHeaderCollection); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.OK) + { + acount.applePwd = newPwd; + isPwdViey = true; + applyAtion?.Invoke(base.noticeKey, DisplyType.mima, newPwd); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "新密码设置成功"); + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "新密码设置失败,未知异常"); + return false; + } + ServiceErrorsModel serviceErrorsModel = javaScriptSerializer.Deserialize(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "新密码失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "新密码失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + return false; + } + + public bool setBirthday(string newBirthday) + { + JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); + string putData = "{\"security\":{\"birthday\":\"" + newBirthday + "\"}}"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + string apple_Widget_Key = Apple_Widget_Key; + if (widgKey != string.Empty) + { + webHeaderCollection.Add("X-Apple-Repair-App-Id", "1879"); + apple_Widget_Key = widgKey; + } + webHeaderCollection.Add("X-Apple-Widget-Key", apple_Widget_Key); + webHeaderCollection.Add("scnt", handelDic["scnt"]); + webHeaderCollection.Add("X-Apple-Skip-Repair-Attributes", "[]"); + webHeaderCollection.Add("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + webHeaderCollection.Add("X-Apple-Locale", homeLanguage); + webHeaderCollection.Add("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/manage/repair", putData, "https://appleid.apple.com/widget/account/repair?widgetKey=af1139274f266b22b68c2a3e7ad932cb3c0bbe854e13a79af78dcc73136882c3&rv=1&language=zh_CN_CHN", webHeaderCollection); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.OK) + { + applyAtion?.Invoke(base.noticeKey, DisplyType.shengri, newBirthday); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "生日设置成功"); + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "生日修改设置失败,未知异常"); + return false; + } + ServiceErrorsModel serviceErrorsModel = javaScriptSerializer.Deserialize(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "生日修改设置失败"); + return false; + } + + private bool setQuestions(string newqt1, string newqt2, string newqt3) + { + string text = ""; + JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); + if (securityQuestions != null) + { + AothQuestions aothQuestions = new AothQuestions(); + aothQuestions.questions = new AothQuestions.Question[3]; + aothQuestions.questions[0] = new AothQuestions.Question + { + id = 130, + answer = newqt1, + number = 1, + question = securityQuestions.availableSecurityQuestions[0][0].question + }; + aothQuestions.questions[1] = new AothQuestions.Question + { + id = 136, + answer = newqt2, + number = 2, + question = securityQuestions.availableSecurityQuestions[1][0].question + }; + aothQuestions.questions[2] = new AothQuestions.Question + { + id = 142, + answer = newqt3, + number = 3, + question = securityQuestions.availableSecurityQuestions[2][0].question + }; + Dictionary obj = new Dictionary { { "security", aothQuestions } }; + text = javaScriptSerializer.Serialize(obj); + } + else + { + text = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes("{\"questions\":[{\"id\":130,\"question\":\"你少年时代最好的朋友叫什么名字?\",\"number\":1,\"answer\":\"" + newqt1 + "\"},{\"id\":136,\"question\":\"你的理想工作是什么?\",\"number\":2,\"answer\":\"" + newqt2 + "\"},{\"id\":142,\"question\":\"你的父母是在哪里认识的?\",\"number\":3,\"answer\":\"" + newqt3 + "\"}]}")); + } + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + string apple_Widget_Key = Apple_Widget_Key; + if (widgKey != string.Empty) + { + webHeaderCollection.Add("X-Apple-Repair-App-Id", "1879"); + apple_Widget_Key = widgKey; + } + webHeaderCollection.Add("X-Apple-Widget-Key", apple_Widget_Key); + webHeaderCollection.Add("scnt", handelDic["scnt"]); + webHeaderCollection.Add("X-Apple-Skip-Repair-Attributes", "[]"); + webHeaderCollection.Add("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + webHeaderCollection.Add("X-Apple-Locale", homeLanguage); + webHeaderCollection.Add("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/manage/repair/questions", text, "https://appleid.apple.com/widget/account/repair?widgetKey=af1139274f266b22b68c2a3e7ad932cb3c0bbe854e13a79af78dcc73136882c3&rv=1&language=zh_CN_CHN", webHeaderCollection); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.OK) + { + applyAtion?.Invoke(base.noticeKey, DisplyType.qt1, newqt1); + applyAtion?.Invoke(base.noticeKey, DisplyType.qt2, newqt2); + applyAtion?.Invoke(base.noticeKey, DisplyType.qt3, newqt3); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密保修改成功"); + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密保修改失败,未知异常"); + return false; + } + ServiceErrorsModel serviceErrorsModel = javaScriptSerializer.Deserialize(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密保修改失败"); + return false; + } + + public void getSecurityUpgrade() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Domain-Id", "1"); + webHeaderCollection.Add("X-Apple-Locale", homeLanguage); + webHeaderCollection.Add("scnt", handelDic["scnt"]); + webHeaderCollection.Add("X-Apple-Skip-Repair-Attributes", "[]"); + webHeaderCollection.Add("X-Apple-Session-Token", handelDic["X-Apple-Repair-Session-Token"]); + webHeaderCollection.Add("X-Apple-ID-Session-Id", handelDic["X-Apple-ID-Session-Id"]); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + HttpResult webJsonContent = getWebJsonContent("https://appleid.apple.com/account/security/upgrade", "https://appleid.apple.com/", webHeaderCollection); + if (webJsonContent.StatusCode != HttpStatusCode.OK) + { + return; + } + try + { + string html = webJsonContent.Html; + JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); + if (!string.IsNullOrEmpty(html)) + { + SecurityUpgradeModel securityUpgradeModel = javaScriptSerializer.Deserialize(html); + action?.Invoke(base.noticeKey, DisplyType.shengri, securityUpgradeModel.account.security.birthday); + action?.Invoke(base.noticeKey, DisplyType.guojia, securityUpgradeModel.account.person.primaryAddress.countryName); + } + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + } + } + + private bool accept() + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在同意协议"); + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + string apple_Widget_Key = Apple_Widget_Key; + if (widgKey != string.Empty) + { + webHeaderCollection.Add("X-Apple-Repair-App-Id", "1879"); + apple_Widget_Key = widgKey; + } + webHeaderCollection.Add("X-Apple-Widget-Key", apple_Widget_Key); + webHeaderCollection.Add("scnt", handelDic["scnt"]); + webHeaderCollection.Add("X-Apple-Skip-Repair-Attributes", "[]"); + webHeaderCollection.Add("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + webHeaderCollection.Add("X-Apple-Locale", homeLanguage); + webHeaderCollection.Add("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + HttpItem httpItem = new HttpItem + { + URL = "https://appleid.apple.com/account/manage/privacy/accept", + Method = "put", + UserAgent = base.userAgent, + Cookie = listCookie.toFonmtCookie(), + ContentType = "application/json; charset=utf-8", + Accept = "application/json, text/javascript, */*; q=0.01", + Referer = "https://appleid.apple.com/widget/account/repair?widgetKey=" + apple_Widget_Key + "&rv=1&language=zh_CN_CHN", + ProtocolVersion = HttpVersion.Version11, + WebProxy = WebRequest.DefaultWebProxy + }; + httpItem.Header = webHeaderCollection; + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + if (httpReuslt.StatusCode != HttpStatusCode.OK && httpReuslt.StatusCode != HttpStatusCode.MethodNotAllowed) + { + return false; + } + return true; + } + + private bool complete() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + string value = checkDisableScnt; + if (handelDic.ContainsKey("scnt2")) + { + value = handelDic["scnt2"]; + } + webHeaderCollection.Add("X-Apple-Domain-Id", "1"); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Locale", homeLanguage); + if (string.IsNullOrEmpty(value) && handelDic.ContainsKey("scnt")) + { + value = handelDic["scnt"]; + } + webHeaderCollection.Add("scnt", value); + if (handelDic.ContainsKey("repairSessionId")) + { + webHeaderCollection.Add("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + } + string apple_Widget_Key = Apple_Widget_Key; + if (widgKey != string.Empty) + { + webHeaderCollection.Add("X-Apple-Repair-App-Id", "1879"); + apple_Widget_Key = widgKey; + } + webHeaderCollection.Add("X-Apple-Repair-Session-Token", handelDic["X-Apple-Repair-Session-Token"]); + webHeaderCollection.Add("Origin", "https://idmsa.apple.com"); + webHeaderCollection.Add("X-Apple-Widget-Key", apple_Widget_Key); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + webHeaderCollection.Add("X-Apple-OAuth-Require-Grant-Code", "true"); + HttpItem httpItem = new HttpItem + { + URL = "https://idmsa.apple.com/appleauth/auth/repair/complete", + Method = "post", + UserAgent = base.userAgent, + Cookie = listCookie.toFonmtCookie(), + ContentType = "application/json; charset=utf-8", + Accept = "application/json, text/javascript, */*; q=0.01", + Referer = "https://idmsa.apple.com/appleauth/auth/signin?widgetKey=" + apple_Widget_Key + "&language=zh_CN&rv=1", + ResultType = ResultType.String, + Postdata = "", + ProtocolVersion = HttpVersion.Version11, + WebProxy = WebRequest.DefaultWebProxy + }; + httpItem.Header = webHeaderCollection; + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + if (httpReuslt.StatusCode != HttpStatusCode.OK && httpReuslt.StatusCode != HttpStatusCode.NoContent) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "协议阅读失败"); + return false; + } + string[] allKeys = httpReuslt.Header.AllKeys; + foreach (string text in allKeys) + { + if (text == "X-Apple-OAuth-Grant-Code") + { + if (!handelDic.ContainsKey(text)) + { + handelDic.TryAddDic(text, httpReuslt.Header[text]); + } + else + { + handelDic[text] = httpReuslt.Header[text]; + } + } + } + if (httpReuslt.Header.AllKeys.Contains("X-Apple-ID-Account-Country")) + { + action?.Invoke(base.noticeKey, DisplyType.area, AppleUtlis.GetAreaByCode(httpReuslt.Header["X-Apple-ID-Account-Country"].ToString())); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "协议阅读成功"); + return true; + } + + private bool appleauthAuth(AppleAcount acount) + { + if (isViey) + { + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证密保问题"); + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + string url = "https://idmsa.apple.com/appleauth/auth"; + WebHeaderCollection webHeader = new WebHeaderCollection + { + { "X-Apple-Widget-Key", Apple_Widget_Key }, + { "X-Requested-With", "XMLHttpRequest" }, + { "X-Apple-Domain-Id", "1" }, + { "X-Apple-Locale", homeLanguage }, + { + "scnt", + handelDic["scnt"] + }, + { + "X-Apple-ID-Session-Id", + handelDic["X-Apple-ID-Session-Id"] + } + }; + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + HttpResult webContent = getWebContent(url, authUrl, webHeader, "text/html", "application/json"); + if (webContent.StatusCode == HttpStatusCode.OK) + { + string input = new Regex(AppSysConfig.getConfig("Regex_appleauthAuth")).Match(webContent.Html).Groups[1].Value.Trim() + "}"; + AothQuestions questions = new JavaScriptSerializer().Deserialize(input); + return verifyAuthQuestions(questions, new string[3] { acount.appleQt1, acount.appleQt2, acount.appleQt3 }); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密保获取失败"); + return false; + } + + public bool authsignin(string appleId, string applePwd, ref string errMsg) + { + handelDic.Clear(); + string url = "https://idmsa.apple.com/appleauth/auth/authorize/signin?frame_id=" + Tools.ToUrlEncode(iframeId) + "&language=zh_CN&skVersion=7&iframeId=" + Tools.ToUrlEncode(iframeId) + "&client_id=" + Apple_Widget_Key + "&redirect_uri=" + Tools.ToUrlEncode(redirectURI) + "&response_type=code&response_mode=web_message&state=" + Tools.ToUrlEncode(iframeId) + "&authVersion=latest"; + string referer = "https://appleid.apple.com"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("Upgrade-Insecure-Requests", "1"); + HttpResult webContent = getWebContent(url, referer, webHeaderCollection, "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3", "application/x-www-form-urlencoded"); + if (webContent.StatusCode == HttpStatusCode.OK) + { + string value = ""; + if (webContent.Header.AllKeys.Contains("X-Apple-Auth-Attributes")) + { + string text = "X-Apple-Auth-Attributes"; + handelDic.TryAddDic(text, webContent.Header[text]); + } + if (webContent.Header.AllKeys.Contains("X-Apple-HC-Bits") && webContent.Header.AllKeys.Contains("X-Apple-HC-Challenge")) + { + string text2 = webContent.Header["X-Apple-HC-Bits"]; + string text3 = webContent.Header["X-Apple-HC-Challenge"]; + string text4 = "1:" + text2 + ":" + DateTime.UtcNow.ToString("yyyyMMddHHmmss") + ":" + text3 + "::"; + string text5 = APIUtlis.ApiGetCodeHC(text4); + if (!string.IsNullOrEmpty(text5)) + { + value = text4 + text5; + } + else + { + text5 = APIUtlis.ApiGetCodeHC(text4); + if (!string.IsNullOrEmpty(text5)) + { + value = text4 + text5; + } + } + } + if (!string.IsNullOrEmpty(value)) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证登录密码"); + string postData = "{\"accountName\":\"" + appleId + "\",\"rememberMe\":false,\"password\":\"" + applePwd + "\"}"; + errMsg = "未知错误"; + WebHeaderCollection webHeaderCollection2 = new WebHeaderCollection(); + webHeaderCollection2.Add("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection2.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection2.Add("X-APPLE-HC", value); + webHeaderCollection2.Add("X-Apple-Domain-Id", "1"); + webHeaderCollection2.Add("X-Apple-Locale", homeLanguage); + webHeaderCollection2.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + HttpResult httpResult = postWebContent(loginAuthUrl, postData, authUrl, webHeaderCollection2); + if (httpResult.StatusCode == HttpStatusCode.BadGateway) + { + errMsg = "服务器拒绝,请使用代理,IP可能已被拉黑"; + action?.Invoke(base.noticeKey, DisplyType.xinxi, errMsg); + return false; + } + if (httpResult.StatusCode != HttpStatusCode.Unauthorized && httpResult.StatusCode != HttpStatusCode.Forbidden) + { + string[] allKeys; + if (httpResult.StatusCode != HttpStatusCode.Conflict && httpResult.StatusCode != HttpStatusCode.OK) + { + if (httpResult.StatusCode == HttpStatusCode.PreconditionFailed) + { + allKeys = httpResult.Header.AllKeys; + foreach (string text6 in allKeys) + { + if (text6 == "X-Apple-Repair-Session-Token") + { + if (!handelDic.ContainsKey(text6)) + { + handelDic.TryAddDic(text6, httpResult.Header[text6]); + } + else + { + handelDic[text6] = httpResult.Header[text6]; + } + } + if (text6 == "scnt") + { + if (!handelDic.ContainsKey(text6)) + { + handelDic.TryAddDic(text6, httpResult.Header[text6]); + handelDic.TryAddDic("scnt2", httpResult.Header[text6]); + } + else + { + handelDic[text6] = httpResult.Header[text6]; + } + } + } + return repair(); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, errMsg + "(" + (int)httpResult.StatusCode + ")"); + return false; + } + allKeys = httpResult.Header.AllKeys; + foreach (string text7 in allKeys) + { + if (text7 == "scnt") + { + handelDic.TryAddDic("scnt", httpResult.Header[text7]); + handelDic.TryAddDic("scnt2", httpResult.Header[text7]); + } + if (text7 == "X-Apple-ID-Session-Id") + { + handelDic.TryAddDic("X-Apple-ID-Session-Id", httpResult.Header[text7]); + } + if (text7 == "X-Apple-ID-Account-Country") + { + handelDic.TryAddDic("X-Apple-ID-Account-Country", httpResult.Header[text7]); + } + } + if (httpResult.Html.Contains("hsa2")) + { + if (openHsa2) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "双重已存在,无需开启"); + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "双重验证账号暂不支持更改"); + } + return false; + } + return true; + } + LoginErrorModel loginErrorModel = new JavaScriptSerializer().Deserialize(httpResult.Html); + if (loginErrorModel.serviceErrors != null) + { + if (loginErrorModel.serviceErrors.Length != 0) + { + errMsg = loginErrorModel.serviceErrors[0].message; + action?.Invoke(base.noticeKey, DisplyType.xinxi, loginErrorModel.serviceErrors[0].message); + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, errMsg); + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, errMsg); + } + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "登录失败#2:AppleService返回:" + (int)webContent.StatusCode); + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "登录失败:AppleService返回:" + (int)webContent.StatusCode); + return false; + } + + protected new virtual HttpResult putWebContent(string url, string putData, string referer, WebHeaderCollection webHeader = null, string accept = "") + { + byte[] bytes = Encoding.UTF8.GetBytes(putData); + HttpItem httpItem = new HttpItem + { + URL = url, + Method = "PUT", + UserAgent = base.userAgent, + Cookie = listCookie.toFonmtCookie(), + Accept = ((accept.Length == 0) ? "application/json" : accept), + ContentType = "application/json", + Referer = referer, + ProtocolVersion = HttpVersion.Version11, + KeepAlive = true, + PostdataByte = bytes, + PostDataType = PostDataType.Byte, + ResultType = ResultType.String, + WebProxy = WebRequest.DefaultWebProxy + }; + if (webHeader != null) + { + httpItem.Header = webHeader; + } + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + if (httpReuslt.StatusCode == (HttpStatusCode)451 && authenticatePassword(acount.applePwd)) + { + return putWebContent(url, putData, referer, webHeader, accept); + } + addCookle(httpReuslt.Cookie); + Array.Clear(bytes, 0, bytes.Length); + return httpReuslt; + } + + public HttpResult postWebContent(string url, string postData, string referer, WebHeaderCollection webHeader = null, string accept = "application/json, text/javascript, */*; q=0.01", string contentType = "application/json") + { + byte[] bytes = Encoding.UTF8.GetBytes(postData); + HttpItem httpItem = new HttpItem + { + URL = url, + Method = "POST", + UserAgent = base.userAgent, + Cookie = listCookie.toFonmtCookie(), + Accept = accept, + ContentType = contentType, + Referer = referer, + ProtocolVersion = HttpVersion.Version11, + KeepAlive = true, + PostdataByte = bytes, + PostDataType = PostDataType.Byte, + ResultType = ResultType.String, + WebProxy = WebRequest.DefaultWebProxy + }; + if (webHeader != null) + { + httpItem.Header = webHeader; + } + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + if (httpReuslt.StatusCode == (HttpStatusCode)451 && authenticatePassword(acount.applePwd)) + { + return postWebContent(url, postData, referer, webHeader, accept); + } + Array.Clear(bytes, 0, bytes.Length); + return httpReuslt; + } + + public bool getSecuritydevices() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Api-Key", base.apiKey); + webHeaderCollection.Add("Origin", "https://appleid.apple.com"); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + HttpResult webJsonContent = getWebJsonContent("https://appleid.apple.com/account/manage/security/devices", "https://appleid.apple.com/account/manage", webHeaderCollection); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "设备获取成功"); + string[] allKeys = webJsonContent.Header.AllKeys; + foreach (string text in allKeys) + { + if (!handelDic.ContainsKey(text)) + { + handelDic.TryAddDic(text, webJsonContent.Header[text]); + } + else + { + handelDic[text] = webJsonContent.Header[text]; + } + } + if (_changeItem.isDeleteDevice) + { + Securitydevices securitydevices = Tools.Todejosn(webJsonContent.Html); + int num = 1; + Securitydevices.Device[] array = securitydevices?.devices; + foreach (Securitydevices.Device device in array) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在删除第" + num + "个设备"); + deleteDevice(device.id); + num++; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "设备删除完成"); + } + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "设备获取异常"); + return false; + } + + public bool deleteDevice(string id) + { + bool flag = true; + DevicesInfo devices = GetDevices(id); + if (devices != null) + { + flag = devices.allowRemoval; + } + if (flag) + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + if (handelDic.ContainsKey("scnt")) + { + webHeaderCollection.Add("scnt", handelDic["scnt"]); + } + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Api-Key", base.apiKey); + webHeaderCollection.Add("Origin", "https://appleid.apple.com"); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + HttpResult httpResult = DeleteWebContent("https://appleid.apple.com/account/manage/security/devices/" + id, "", "https://appleid.apple.com/account/manage", webHeaderCollection); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + string[] allKeys = httpResult.Header.AllKeys; + foreach (string text in allKeys) + { + if (!handelDic.ContainsKey(text)) + { + handelDic.TryAddDic(text, httpResult.Header[text]); + } + else + { + handelDic[text] = httpResult.Header[text]; + } + } + if (Tools.Todejosn(httpResult.Html)?.removedDevice.id == id) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "设备删除成功"); + return true; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "设备删除失败"); + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "设备删除失败"); + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "改设备无法删除"); + } + return false; + } + + private DevicesInfo GetDevices(string id) + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Api-Key", base.apiKey); + webHeaderCollection.Add("Origin", "https://appleid.apple.com"); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + HttpResult webJsonContent = getWebJsonContent("https://appleid.apple.com/account/manage/security/devices/" + id, "https://appleid.apple.com/account/manage", webHeaderCollection); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + string[] allKeys = webJsonContent.Header.AllKeys; + foreach (string text in allKeys) + { + if (!handelDic.ContainsKey(text)) + { + handelDic.TryAddDic(text, webJsonContent.Header[text]); + } + else + { + handelDic[text] = webJsonContent.Header[text]; + } + } + return Tools.Todejosn(webJsonContent.Html); + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "设备信息获取失败"); + return null; + } + + public bool RetrievePassword(bool _openVpn, AppleAcount acount, string newPwd, string _notityKey, bool isCloseAuthen = false, bool ckTailNumber = false) + { + if (string.IsNullOrEmpty(base.ProxyIp)) + { + base.ProxyIp = ProxyAccountCache.getProxyAccountIP(acount.appleId); + } + appleId = acount.appleId; + base.noticeKey = _notityKey; + base.openVpn = _openVpn; + string url = "https://iforgot.apple.com/password/verify/appleid?language=" + language; + listCookie.Add(new CookieItem + { + Key = "idclient", + Value = "web" + }); + if (acount.birthday.Split('-').Length == 3) + { + HttpResult webContent = getWebContent(url, ""); + if (webContent.StatusCode == HttpStatusCode.OK) + { + string text = new Regex(AppSysConfig.getConfig("Regex_RetrievePassword")).Match(AppleNetworkBase.GetToken(webContent.Html, "boot_args", "script")).Groups[1].Value.Replace("\"", "").Replace(":", "").Replace(" ", "") + .Trim(); + if (!string.IsNullOrEmpty(text)) + { + text = HttpUtility.UrlEncode(text); + bool num = verifyAppleid(text, acount, newPwd, isCloseAuthen, 0, ckTailNumber); + if (num) + { + ProxyAccountCache.addProxyIp(appleId, base.ProxyIp); + } + return num; + } + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "未知错误"); + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "生日未导入或者格式错误"); + } + return false; + } + + private CaptchaModel getCaptcha(string sstt) + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + webHeaderCollection.Add("sstt", sstt); + HttpResult httpResult = postWebContent("https://iforgot.apple.com/captcha", "{\"type\":\"IMAGE\"}", "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + return Tools.Todejosn(httpResult.Html); + } + return null; + } + + private bool verifyAppleid(string sstt, AppleAcount acount, string newPwd, bool isCloseAuthen, int RetryCount = 0, bool ckTailNumber = false) + { + if (RetryCount >= 3) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证码获取失败,#3"); + return false; + } + int num = 0; + CaptchaModel captchaModel = null; + bool flag = false; + do + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "获取验证码.." + (num + 1)); + captchaModel = getCaptcha(sstt); + if (captchaModel == null) + { + Thread.Sleep(500); + } + else if (!string.IsNullOrEmpty(captchaModel.payload.content)) + { + HttpResult captcha = APIUtlis.getCaptcha(1, captchaModel.payload.content, flag); + if (captcha.StatusCode == HttpStatusCode.OK) + { + dynamic val = Tools.Todejosn(captcha.Html); + if (val["Code"] == "0000") + { + string reust = val["Data"]; + captchaModel.reust = reust; + break; + } + flag = !flag; + } + Thread.Sleep(500); + } + num++; + } + while (num <= 5); + if (captchaModel != null) + { + if (!string.IsNullOrEmpty(captchaModel.reust)) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在验证账号"); + string postData = "{\"id\":\"" + acount.appleId + "\",\"captcha\":{\"id\":" + captchaModel.id + ",\"answer\":\"" + captchaModel.reust + "\",\"token\":\"" + captchaModel.token + "\"}}"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + webHeaderCollection.Add("sstt", sstt); + HttpResult httpResult = postWebContent("https://iforgot.apple.com/password/verify/appleid", postData, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + APIUtlis.getCaptcha(3, captchaModel.payload.content); + ServiceErrorsModel serviceErrorsModel = new JavaScriptSerializer().Deserialize(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "不是有效的AppleId"); + } + AppSysConfig.proxyModels.Push(new ProxyModel2 + { + prixyIp = base.ProxyIp, + applyDate = DateTime.Now + }); + return false; + } + if (httpResult.StatusCode == HttpStatusCode.Found) + { + httpResult.Header.AllKeys.Contains("sstt"); + APIUtlis.getCaptcha(3, captchaModel.payload.content); + string redirectUrl = httpResult.RedirectUrl; + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + HttpResult webJsonContent = getWebJsonContent(redirectUrl, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + if (isCloseAuthen) + { + if (redirectUrl.ToLower().StartsWith("https://iforgot.apple.com/password/verify/phone")) + { + if (ckTailNumber) + { + if (webJsonContent.Html.Contains("trustedPhones")) + { + IforgotVerifyPhoneModel iforgotVerifyPhoneModel = Tools.Todejosn(webJsonContent.Html); + if (iforgotVerifyPhoneModel != null) + { + string text = ""; + IforgotVerifyPhoneModel.Trustedphone[] array = iforgotVerifyPhoneModel?.trustedPhones; + foreach (IforgotVerifyPhoneModel.Trustedphone trustedphone in array) + { + if (trustedphone != null) + { + text = text + "," + trustedphone.number; + } + } + text = ((!iforgotVerifyPhoneModel.recoverable) ? (text.TrimStart(',') + ", 无法关闭") : (text.TrimStart(',') + ", 可以关闭")); + APIUtlis.ApiApplyAct(44, "尾号查询"); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "查询到号码:" + text); + return false; + } + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "手机号码获取失败"); + return false; + } + sstt = webJsonContent.Header["sstt"]; + bool num2 = unenrollment(sstt, acount, newPwd); + if (num2) + { + AppSysConfig.proxyModels.Push(new ProxyModel2 + { + prixyIp = base.ProxyIp, + applyDate = DateTime.Now + }); + } + return num2; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "没有双重认证"); + AppSysConfig.proxyModels.Push(new ProxyModel2 + { + prixyIp = base.ProxyIp, + applyDate = DateTime.Now + }); + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在获取重设方式"); + if (webJsonContent.Html.Contains("reset_password") && webJsonContent.Header.AllKeys.Contains("sstt")) + { + sstt = webJsonContent.Header["sstt"]; + webHeaderCollection["sstt"] = sstt; + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + HttpResult httpResult2 = postWebContent("https://iforgot.apple.com/recovery/options", "{\"recoveryOption\":\"reset_password\"}", "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (httpResult2.StatusCode == HttpStatusCode.Found) + { + webJsonContent = getWebJsonContent(httpResult2.RedirectUrl, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (webJsonContent.StatusCode == HttpStatusCode.OK && !webJsonContent.Html.Contains("questions") && !webJsonContent.RedirectUrl.ToLower().StartsWith("https://iforgot.apple.com/password/verify/birthday")) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "没有重设密码的方式"); + return false; + } + } + } + if (!webJsonContent.Html.Contains("questions") && !webJsonContent.RedirectUrl.ToLower().StartsWith("https://iforgot.apple.com/password/verify/birthday")) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "没有重设密码的方式"); + return false; + } + sstt = webJsonContent.Header["sstt"]; + webHeaderCollection["sstt"] = sstt; + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + if (!webJsonContent.Html.Contains("questions")) + { + return VerifyBirthday(webJsonContent.RedirectUrl, acount, newPwd, webHeaderCollection); + } + HttpResult httpResult3 = postWebContent("https://iforgot.apple.com/password/authenticationmethod", "{\"type\":\"questions\"}", "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (httpResult3.StatusCode == HttpStatusCode.Found) + { + return VerifyBirthday(httpResult3.RedirectUrl, acount, newPwd, webHeaderCollection); + } + } + } + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "未知错误#2"); + return false; + } + if (httpResult.Html.Contains("captchaAnswer.Invalid")) + { + APIUtlis.getCaptcha(2, captchaModel.payload.content); + return verifyAppleid(sstt, acount, newPwd, isCloseAuthen, RetryCount + 1, ckTailNumber); + } + ServiceErrorsModel serviceErrorsModel2 = new JavaScriptSerializer().Deserialize(httpResult.Html); + if (serviceErrorsModel2 != null) + { + if (serviceErrorsModel2.validationErrors != null && serviceErrorsModel2.validationErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel2.validationErrors[0].message); + return false; + } + if (serviceErrorsModel2.service_errors != null && serviceErrorsModel2.service_errors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel2.service_errors[0].message); + return false; + } + if (serviceErrorsModel2.serviceErrors != null && serviceErrorsModel2.serviceErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel2.serviceErrors[0].message); + return false; + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "请求失败"); + } + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证码获取失败#2"); + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证码获取失败"); + return false; + } + + public bool unenrollment(string sstt, AppleAcount acount, string newPwd) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在关闭双重认证"); + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + webHeaderCollection.Add("sstt", sstt); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + HttpResult webContent = getWebContent("https://iforgot.apple.com/password/verify/phone", "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (webContent.StatusCode == HttpStatusCode.OK) + { + sstt = new Regex(AppSysConfig.getConfig("Regex_unenrollment")).Match(AppleNetworkBase.GetToken(webContent.Html, "boot_args", "script")).Groups[1].Value.Replace("\"", "").Replace(":", "").Replace(" ", "") + .Trim(); + if (!string.IsNullOrEmpty(sstt)) + { + sstt = HttpUtility.UrlEncode(sstt); + webHeaderCollection["sstt"] = sstt; + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + HttpResult httpResult = postWebContent("https://iforgot.apple.com/password/verify/phone/unenrollment", "", "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (httpResult.StatusCode == HttpStatusCode.NotFound) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "该账户双重无法关闭"); + return false; + } + if (httpResult.StatusCode == HttpStatusCode.Found) + { + HttpResult webJsonContent = getWebJsonContent(httpResult.RedirectUrl, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + sstt = webJsonContent.Header["sstt"]; + webHeaderCollection["sstt"] = sstt; + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在验证生日信息"); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + sstt = webJsonContent.Header["sstt"]; + webHeaderCollection["sstt"] = sstt; + string[] array = acount.birthday.Split('-'); + string postData = "{\"monthOfYear\":\"" + array[1].PadLeft(2, '0') + "\",\"dayOfMonth\":\"" + array[2].PadLeft(2, '0') + "\",\"year\":\"" + array[0] + "\"}"; + HttpResult httpResult2 = postWebContent("https://iforgot.apple.com/unenrollment/verify/birthday", postData, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (httpResult2.StatusCode != HttpStatusCode.Found) + { + if (httpResult2.StatusCode == HttpStatusCode.BadRequest) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "生日错误"); + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "网络异常...2#Birthday," + (int)httpResult2.StatusCode); + return false; + } + HttpResult webJsonContent2 = getWebJsonContent(httpResult2.RedirectUrl, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (webJsonContent2.StatusCode != HttpStatusCode.OK) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证密保获取失败"); + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在验证密保"); + sstt = webJsonContent2.Header["sstt"]; + webHeaderCollection["sstt"] = sstt; + AothQuestions aothQuestions = Tools.Todejosn(webJsonContent2.Html); + string[] array2 = new string[3] { acount.appleQt1, acount.appleQt2, acount.appleQt3 }; + AothQuestions aothQuestions2 = new AothQuestions(); + aothQuestions2.questions = new AothQuestions.Question[2]; + int num = 0; + AothQuestions.Question[] questions = aothQuestions.questions; + foreach (AothQuestions.Question question in questions) + { + string answer = array2[Tools.getAnwerId_Index(question.id) - 1]; + aothQuestions2.questions[num] = new AothQuestions.Question + { + id = question.id, + answer = answer, + number = question.number, + question = question.question + }; + num++; + } + string postData2 = Tools.Toenjson(aothQuestions2); + HttpResult httpResult3 = postWebContent("https://iforgot.apple.com/unenrollment/verify/questions", postData2, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (httpResult3.StatusCode == HttpStatusCode.Found) + { + return unenrollmentRestPwd(httpResult3.RedirectUrl, newPwd, webHeaderCollection); + } + if (httpResult3.StatusCode == HttpStatusCode.BadRequest) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密保错误"); + return false; + } + } + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "网络异常"); + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "网络异常"); + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "双重手机号码认证失败"); + } + } + else + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "双重手机号码获取失败"); + } + return false; + } + + private bool unenrollmentRestPwd(string RedirectUrl, string newPwd, WebHeaderCollection webHeader) + { + HttpResult webJsonContent = getWebJsonContent(RedirectUrl, "https://iforgot.apple.com/unenrollment/verify/appleid?language=" + language, webHeader); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + string value = webJsonContent.Header["sstt"]; + webHeader["sstt"] = value; + webHeader.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + HttpResult httpResult = postWebContent("https://iforgot.apple.com/unenrollment", "", "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (httpResult.StatusCode == HttpStatusCode.Found) + { + value = httpResult.Header["sstt"]; + webHeader["sstt"] = value; + webHeader.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在设置新密码"); + HttpResult httpResult2 = postWebContent("https://iforgot.apple.com/unenrollment/reset", "{\"password\":\"" + newPwd + "\"}", "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader, "application/json, text/javascript, *; q=0.01"); + if (httpResult2.StatusCode == HttpStatusCode.BadRequest || httpResult2.StatusCode == HttpStatusCode.Unauthorized) + { + ServiceErrorsModel serviceErrorsModel = new JavaScriptSerializer().Deserialize(httpResult2.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "请求失败"); + return false; + } + if (httpResult2.StatusCode == (HttpStatusCode)260) + { + acount.applePwd = newPwd; + action?.Invoke(base.noticeKey, DisplyType.mima, newPwd); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "双重关闭成功,密码重置完成"); + return true; + } + } + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "未知错误"); + return false; + } + + private bool VerifyBirthday(string RedirectUrl, AppleAcount acount, string newPwd, WebHeaderCollection webHeader) + { + string text = ""; + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在验证生日"); + HttpResult webJsonContent = getWebJsonContent(RedirectUrl, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + text = webJsonContent.Header["sstt"]; + webHeader["sstt"] = text; + string[] array = acount.birthday.Split('-'); + string postData = "{\"monthOfYear\":\"" + array[1] + "\",\"dayOfMonth\":\"" + array[2] + "\",\"year\":\"" + array[0] + "\"}"; + HttpResult httpResult = postWebContent("https://iforgot.apple.com/password/verify/birthday", postData, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (httpResult.StatusCode != HttpStatusCode.Found) + { + if (httpResult.StatusCode == HttpStatusCode.BadRequest) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "生日错误"); + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "网络异常...#Birthday," + (int)httpResult.StatusCode); + return false; + } + if (!httpResult.RedirectUrl.ToLower().StartsWith("https://iforgot.apple.com/password/authenticationmethod")) + { + return VerifyQuestions(httpResult.RedirectUrl, acount, newPwd, webHeader); + } + webHeader.Add("X-Apple-I-FD-Client-Info", FDClientInfoHelp.getAppleIFDClientInfo(base.userAgent)); + HttpResult webJsonContent2 = getWebJsonContent(httpResult.RedirectUrl, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (webJsonContent2.StatusCode != HttpStatusCode.OK) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密保获取失败2"); + return false; + } + if (!webJsonContent2.Html.Contains("questions")) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "没有重设密码的方式#2"); + return false; + } + text = webJsonContent2.Header["sstt"]; + webHeader["sstt"] = text; + HttpResult httpResult2 = postWebContent("https://iforgot.apple.com/password/authenticationmethod", "{\"type\":\"questions\"}", "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (httpResult2.StatusCode == HttpStatusCode.Found) + { + return VerifyQuestions(httpResult2.RedirectUrl, acount, newPwd, webHeader); + } + } + return false; + } + + public bool VerifyQuestions(string RedirectUrl, AppleAcount acount, string newPwd, WebHeaderCollection webHeader) + { + string text = ""; + HttpResult webJsonContent = getWebJsonContent(RedirectUrl, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在验证密保"); + text = webJsonContent.Header["sstt"]; + webHeader["sstt"] = text; + AothQuestions aothQuestions = Tools.Todejosn(webJsonContent.Html); + string[] array = new string[3] { acount.appleQt1, acount.appleQt2, acount.appleQt3 }; + AothQuestions aothQuestions2 = new AothQuestions(); + aothQuestions2.questions = new AothQuestions.Question[2]; + int num = 0; + AothQuestions.Question[] questions = aothQuestions.questions; + foreach (AothQuestions.Question question in questions) + { + string answer = array[Tools.getAnwerId_Index(question.id) - 1]; + aothQuestions2.questions[num] = new AothQuestions.Question + { + id = question.id, + answer = answer, + number = question.number, + question = question.question + }; + num++; + } + string postData = Tools.Toenjson(aothQuestions2); + HttpResult httpResult = postWebContent("https://iforgot.apple.com/password/verify/questions", postData, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (httpResult.StatusCode == HttpStatusCode.Found) + { + HttpResult webJsonContent2 = getWebJsonContent(httpResult.RedirectUrl, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (webJsonContent2.StatusCode == HttpStatusCode.Found) + { + text = httpResult.Header["sstt"]; + webHeader["sstt"] = text; + return restPwd(webJsonContent2.RedirectUrl, newPwd, webHeader); + } + if (webJsonContent2.StatusCode == HttpStatusCode.OK && webJsonContent2.Html.Contains("unlock_account")) + { + text = webJsonContent2.Header["sstt"]; + webHeader["sstt"] = text; + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在解锁密码"); + HttpResult httpResult2 = postWebContent("https://iforgot.apple.com/password/reset/options", "{\"type\":\"unlock_account\"}", "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (httpResult2.StatusCode == HttpStatusCode.Found) + { + HttpResult webJsonContent3 = getWebJsonContent(httpResult2.RedirectUrl, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (webJsonContent3.StatusCode == HttpStatusCode.OK) + { + text = webJsonContent3.Header["sstt"]; + webHeader["sstt"] = text; + HttpResult httpResult3 = postWebContent("https://iforgot.apple.com/password/unlock/forgot", "{}", "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (httpResult3.StatusCode == HttpStatusCode.Found) + { + return restPwd(httpResult3.RedirectUrl, newPwd, webHeader); + } + } + } + } + } + else if (httpResult.StatusCode == HttpStatusCode.BadRequest) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密保错误"); + return false; + } + return false; + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "验证密保获取失败"); + return false; + } + + private bool restPwd(string RedirectUrl, string newPwd, WebHeaderCollection webHeader) + { + HttpResult webJsonContent = getWebJsonContent(RedirectUrl, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + string value = webJsonContent.Header["sstt"]; + webHeader["sstt"] = value; + action?.Invoke(base.noticeKey, DisplyType.xinxi, "正在设置新密码"); + HttpResult httpResult = postWebContent("https://iforgot.apple.com/password/reset", "{\"password\":\"" + newPwd + "\"}", "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (httpResult.StatusCode == HttpStatusCode.BadRequest || httpResult.StatusCode == HttpStatusCode.Unauthorized) + { + ServiceErrorsModel serviceErrorsModel = new JavaScriptSerializer().Deserialize(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(base.noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "请求失败"); + return false; + } + if (httpResult.StatusCode == (HttpStatusCode)260) + { + action?.Invoke(base.noticeKey, DisplyType.mima, newPwd); + action?.Invoke(base.noticeKey, DisplyType.xinxi, "密码重置完成"); + AppSysConfig.proxyModels.Push(new ProxyModel2 + { + prixyIp = base.ProxyIp, + applyDate = DateTime.Now + }); + return true; + } + } + action?.Invoke(base.noticeKey, DisplyType.xinxi, "未知错误"); + return false; + } + } +} diff --git a/AppleBatch_June/AppleManageWebUtlis2.cs b/AppleBatch_June/AppleManageWebUtlis2.cs new file mode 100644 index 0000000..ef341c2 --- /dev/null +++ b/AppleBatch_June/AppleManageWebUtlis2.cs @@ -0,0 +1,3976 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Reflection; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Web; +using System.Web.Script.Serialization; +using AppleBatch_June.Domain; +using AppleBatch_June.ExecuteTasks; +using AppleBatch_June.Model; +using AppleBatch_June.Utils; +using DotNet.Utilities; + +namespace AppleBatch_June +{ + public class AppleManageWebUtlis2 + { + private List listCookie = new List(); + + private Dictionary handelDic = new Dictionary(); + + private static string homeLanguage = "zh_CN"; + + private string Apple_Widget_Key = "af1139274f266b22b68c2a3e7ad932cb3c0bbe854e13a79af78dcc73136882c3"; + + private string DomainId = "1"; + + private string loginAuthUrl = "https://idmsa.apple.com/appleauth/auth/signin?isRememberMeEnabled=true"; + + private string verifyquestionsUrl = "https://idmsa.apple.com/appleauth/auth/verify/questions"; + + private string appleHomeUrl = "https://appleid.apple.com/account/manage"; + + private string apiKey = "cbf64fd6843ee630b463f358ea0b707b"; + + private AvailableSecurityQuestions securityQuestions; + + private LoginAppleInfo loginAppleInfo; + + protected Action action; + + protected Action applyAtion; + + public ITaskRunState taskState; + + public AppleChangeItem _changeItem; + + private bool isPwdViey; + + private bool isViey; + + private bool isVieyBirthday; + + protected bool openVpn; + + private AppleAcount acount; + + private string X_Apple_Auth_Attributes = ""; + + private Func getCodeAct_; + + private bool isError; + + public string checkDisableScnt = ""; + + public string widgKey = string.Empty; + + private string dataR = ""; + + private static readonly object lockSendMsmObj = new object(); + + private string redirectURI = "https://appleid.apple.com"; + + private string iframeId = "auth-w78m90aa-d7ll-rirf-04xy-rsvumkpw"; + + private string language = "zh_CN"; + + private string userAgent { get; set; } + + private string authUrl => "https://idmsa.apple.com/appleauth/auth/signin?widgetKey=" + Apple_Widget_Key + "&language=" + homeLanguage; + + private string appleId { get; set; } + + public string noticeKey { get; set; } + + public bool idIsNormal { get; set; } + + private string accountFirstName { get; set; } + + private string accountLastName { get; set; } + + private string XAppleIDAccountCountry { get; set; } = ""; + + + public bool openHsa2 { get; set; } + + public bool isChangAppleId { get; set; } + + private string Apple_ID_Account_Country { get; set; } = ""; + + + private string ProxyIp { get; set; } + + private string scnt { get; set; } + + public AppleManageWebUtlis2(Action _action, Action _applyAtion, ITaskRunState _taskState) + { + taskState = _taskState ?? throw new Exception("任务运行状态不能是空的"); + action = _action; + applyAtion = _applyAtion; + userAgent = "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"; + AppleUtlis.getAppleWenUserAgent(); + } + + public bool applyChangeAcount(AppleAcount acount, AppleChangeItem changeItem, bool errorGoint, bool _openVpn, ref string accountName) + { + if (string.IsNullOrEmpty(ProxyIp)) + { + ProxyIp = ProxyAccountCache.getProxyAccountIP(acount.appleId); + } + openVpn = _openVpn; + listCookie.Add(new CookieItem + { + Key = "idclient", + Value = "web" + }); + this.acount = acount; + appleId = acount.appleId; + accountName = appleId; + try + { + _changeItem = changeItem; + string errMsg = ""; + if (authsignin(this.acount.appleId, this.acount.applePwd, ref errMsg)) + { + if (!handelDic.ContainsKey("scnt")) + { + ProxyIp = ""; + authsignin(this.acount.appleId, this.acount.applePwd, ref errMsg); + if (!handelDic.ContainsKey("scnt")) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "登录初始化失败,请重试"); + return false; + } + } + if (isPwdViey) + { + changeItem.newPwd = ""; + } + if (isViey) + { + acount.appleQt1 = changeItem.newQt1; + acount.appleQt2 = changeItem.newQt2; + acount.appleQt3 = changeItem.newQt3; + handelDic.Clear(); + changeItem.newQt1 = ""; + isViey = false; + return applyChangeAcount(this.acount, _changeItem, errorGoint, openVpn, ref accountName); + } + if (appleauthAuth(acount)) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "登录成功"); + ProxyAccountCache.addProxyIp(acount.appleId, ProxyIp); + if (intoHome()) + { + manageFamily(); + bool flag = true; + getSecuritydevices(); + if (!string.IsNullOrEmpty(changeItem.newQt1)) + { + if (!(flag = changQuestions(changeItem.newQt1, changeItem.newQt2, changeItem.newQt3))) + { + flag = false; + } + if (!flag && !errorGoint) + { + return false; + } + } + if (!string.IsNullOrEmpty(changeItem.newPwd)) + { + if (!(flag = changePwd(acount.applePwd, changeItem.newPwd))) + { + flag = false; + } + if (!flag && !errorGoint) + { + return false; + } + } + if (!string.IsNullOrEmpty(changeItem.newshengri) && !isVieyBirthday) + { + if (!(flag = changeBirthDate(changeItem.newshengri))) + { + flag = false; + } + if (!flag && !errorGoint) + { + return false; + } + } + if (!string.IsNullOrEmpty(changeItem.editAddrs)) + { + flag = editAddrs(changeItem.editAddrs); + } + if (!string.IsNullOrEmpty(acount.newAppleId) && !isChangAppleId) + { + flag = setAccnount(acount.newAppleId, acount.newApplePopPwd, "cbf64fd6843ee630b463f358ea0b707b"); + } + if (changeItem.pay != null) + { + flag = changenPayment(changeItem.pay); + } + if (flag && !string.IsNullOrEmpty(ProxyIp)) + { + AppSysConfig.proxyModels.Push(new ProxyModel2 + { + prixyIp = ProxyIp, + applyDate = DateTime.Now + }); + } + return flag; + } + } + } + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + action?.Invoke(noticeKey, DisplyType.xinxi, ex.Message); + } + finally + { + try + { + signout(); + } + catch (Exception) + { + } + } + return false; + } + + private bool getInitWeb() + { + HttpResult webContent = getWebContent("https://appleid.apple.com", "", null, "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3", "text/html"); + if (webContent.StatusCode == HttpStatusCode.OK) + { + string text = new Regex(AppSysConfig.getConfig("Regex_WebIframeId")).Match(webContent.Html).Groups[1].Value.Trim().TrimEnd(','); + string text2 = new Regex(AppSysConfig.getConfig("Regex_WebState")).Match(webContent.Html).Groups[1].Value.Trim().TrimEnd(','); + string url = "https://idmsa.apple.com/appleauth/auth/authorize/signin?frame_id=" + text + "&language=zh_CN&iframeId=" + text + "&client_id=af1139274f266b22b68c2a3e7ad932cb3c0bbe854e13a79af78dcc73136882c3&redirect_uri=" + Tools.ToUrlEncode(redirectURI) + "&response_type=code&response_mode=web_message&state=" + text2 + "&rv=1&authVersion=latest"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("Upgrade-Insecure-Requests", "1"); + if (getWebContent(url, "https://appleid.apple.com", webHeaderCollection, "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3", "text/html").StatusCode == HttpStatusCode.OK) + { + string[] allKeys = webContent.Header.AllKeys; + for (int i = 0; i < allKeys.Length; i++) + { + X_Apple_Auth_Attributes = webContent.Header["X-Apple-Auth-Attributes"]; + } + } + } + else + { + action?.Invoke(noticeKey, DisplyType.xinxi, "页面加载失败"); + } + return false; + } + + private string NowUCTFormat() + { + return DateTime.Now.ToString("yyyy/MM/dd ttHH:mm:ss"); + } + + private string getDate() + { + return ((DateTime.Now.ToUniversalTime().Ticks - 621355968000000000L) / 10000L).ToString(); + } + + public string GetAdditionaFieldsn(string Account_Country) + { + string[] array = new SelectShippingOptionNullData().getSelectShippingAdditionaFieldsn().Split('\n'); + int num = 0; + string[] array2; + while (true) + { + if (num < array.Length) + { + string text = array[num]; + if (!string.IsNullOrEmpty(text)) + { + array2 = text.Split(':'); + if (array2.Length == 2 && array2[0].Trim() == Account_Country) + { + break; + } + } + num++; + continue; + } + return ""; + } + return array2[1].Trim(); + } + + public string SelectShippingOptionNullData(string rreustHtml, NationalList payment, string redirectURI, WebHeaderCollection webHeader) + { + try + { + string text = ""; + string result = ""; + string selectShippingOption = new SelectShippingOptionNullData().getSelectShippingOption(); + foreach (Match item in new Regex("#st([\\s\\S]*?)#end").Matches(selectShippingOption)) + { + string value = item.Groups[1].Value; + if (string.IsNullOrEmpty(value)) + { + continue; + } + string value2 = ""; + string text2 = ""; + string text3 = ""; + string text4 = ""; + string text5 = ""; + string text6 = ""; + string[] array = value.Split(';'); + for (int i = 0; i < array.Length; i++) + { + string[] array2 = array[i].Split('!'); + if (array2.Length == 2) + { + string text7 = array2[1].Trim(); + switch (array2[0].Trim()) + { + case "r": + text6 = text7; + break; + case "value": + text5 = text7; + break; + case "param": + text4 = text7; + break; + case "post": + text3 = text7; + break; + case "url": + text2 = text7; + break; + case "key": + value2 = text7; + break; + } + } + } + if (string.IsNullOrEmpty(value2) || !rreustHtml.Contains(value2) || payment == null) + { + continue; + } + text = text3; + PropertyInfo[] properties = payment.payment.billingAddress.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public); + int num = 0; + string[] array3 = text5.Split(','); + array = text4.Split(','); + foreach (string text8 in array) + { + string valueItem = array3[num]; + string value3 = ""; + if (valueItem.Contains("p.")) + { + PropertyInfo propertyInfo = properties.Where((PropertyInfo c) => c.Name == valueItem.Replace("p.", "")).FirstOrDefault(); + if (propertyInfo != null) + { + value3 = propertyInfo.GetValue(payment.payment.billingAddress, null) as string; + } + } + if (valueItem.Contains("r.") && int.TryParse(valueItem.Replace("r.", ""), out var result2)) + { + string[] array4 = text6.Split('|')[result2].Split('-'); + if (array4.Length == 1) + { + string value4 = new Regex(array4[0]).Match(rreustHtml).Groups[1].Value; + if (!string.IsNullOrEmpty(value4)) + { + value3 = value4; + } + } + if (array4.Length == 2) + { + string value5 = new Regex(array4[0]).Match(rreustHtml).Groups[1].Value; + if (!string.IsNullOrEmpty(value5)) + { + foreach (Match item2 in new Regex(array4[1]).Matches(value5)) + { + string value6 = item2.Groups[1].Value; + if (!string.IsNullOrEmpty(value6)) + { + value3 = value6; + break; + } + } + } + } + } + if (!string.IsNullOrEmpty(value3)) + { + text = text.Replace("{" + text8 + "}", Tools.ToUrlEncode(value3)); + } + num++; + } + if (!text.Contains("{")) + { + result = postWebContent(redirectURI + text2, text, redirectURI + "/shop/checkout?_s=Shipping-init", webHeader, "application/json, text/javascript, */*; q=0.01", "application/x-www-form-urlencoded").Html; + break; + } + } + return result; + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + Console.WriteLine(ex.Message); + return rreustHtml; + } + } + + public bool AppleQueryStoreBalance(AppleAcount acount, bool _openVpn, bool agent = false) + { + if (string.IsNullOrEmpty(ProxyIp)) + { + ProxyIp = ProxyAccountCache.getProxyAccountIP(acount.appleId); + } + listCookie.Clear(); + handelDic.Clear(); + Apple_Widget_Key = "a797929d224abb1cc663bb187bbcd02f7172ca3a84df470380522a7c6092118b"; + DomainId = "21"; + openVpn = _openVpn; + listCookie.Add(new CookieItem + { + Key = "idclient", + Value = "web" + }); + listCookie.Add(new CookieItem + { + Key = "geo", + Value = "CN" + }); + action?.Invoke(noticeKey, DisplyType.xinxi, "正在登录.."); + this.acount = acount; + appleId = acount.appleId; + iframeId = "auth-" + Guid.NewGuid().ToString("n").Substring(0, 8) + "-" + Guid.NewGuid().ToString("n").Substring(0, 4) + "-" + Guid.NewGuid().ToString("n").Substring(0, 4) + "-" + Guid.NewGuid().ToString("n").Substring(0, 4) + "-" + Guid.NewGuid().ToString("n").Substring(0, 8); + try + { + string errMsg = ""; + string text = ""; + if (!authsignin(this.acount.appleId, this.acount.applePwd, ref errMsg, "https://idmsa.apple.com/")) + { + return false; + } + string apple_ID_Account_Country = Apple_ID_Account_Country; + text = AppleUtlis.GetAreaCodeByCode(apple_ID_Account_Country); + if (AppSysConfig.getConfig("ShopBanalNotSupportedCountries").Split(',').Contains(apple_ID_Account_Country)) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "该 ID 国家不支持"); + return false; + } + text = ((!(text == "us")) ? (text + "/") : ""); + string text2 = "https://www.apple.com/" + text + "shop/"; + int num = 0; + do + { + HttpResult webContent = getWebContent(text2 + "beacon/atb", text2 + "beacon/atb"); + if (webContent.StatusCode != HttpStatusCode.MovedPermanently) + { + break; + } + text2 = webContent.RedirectUrl.Replace("beacon/atb", ""); + } + while (num < 3); + WebHeaderCollection webHeader = new WebHeaderCollection + { + { "Sec-Fetch-Site", "same-origin" }, + { "Sec-Fetch-Mode", "navigate" }, + { "Sec-Fetch-Dest", "document" }, + { "Sec-Fetch-User", "?1" } + }; + HttpResult webContent2 = getWebContent(text2 + "watch/bands", text2 + "watch/bands"); + AppSysConfig.getConfig("partNumberRegex"); + string text3 = new Regex("\"partNumber\":\"([\\s\\S]*?)\"").Match(webContent2.Html).Groups[1].Value.Trim(); + string text4 = Tools.ToUrlEncode(text3); + CookieItem cookieItem = listCookie.Where((CookieItem c) => c.Key == "as_atb").FirstOrDefault(); + string text5 = ((cookieItem != null) ? cookieItem.Value.Split('|')[2] : null); + string postData = "add-to-cart=add-to-cart&product=" + text4 + "&atbtoken=" + text5; + postWebContent(text2 + "pdpAddToBag/" + text3, postData, text2 + "product/" + text3 + "/49mm-kumquat-solo-loop-size-1", webHeader, "application/json, text/javascript, */*; q=0.01", "application/x-www-form-urlencoded"); + action?.Invoke(noticeKey, DisplyType.xinxi, "加载登录页面."); + HttpResult webContent3 = getWebContent(text2 + "bag", text2 + "bag"); + bool flag2; + object obj4; + if (webContent3.StatusCode == HttpStatusCode.OK) + { + string value = new Regex("x-aos-stk\":\"([\\s\\S]*?)\"").Match(webContent3.Html).Groups[1].Value; + string value2 = new Regex("cart-items-item-([\\s\\S]*?)\"").Match(webContent3.Html).Groups[1].Value; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection + { + { "syntax", "graviton" }, + { "X-Requested-With", "Fetch" }, + { "modelVersion", "v2" } + }; + webHeaderCollection.Add("x-aos-stk", value); + webHeaderCollection.Add("x-aos-model-page", "cart"); + string postData2 = "shoppingCart.recommendations.recommendedItem.part=&shoppingCart.items.item-" + value2 + ".isIntentToGift=false&shoppingCart.items.item-" + value2 + ".itemQuantity.quantity=1&shoppingCart.locationConsent.locationConsent=false&shoppingCart.summary.promoCode.promoCode=&shoppingCart.actions.fcscounter=&shoppingCart.actions.fcsdata="; + dynamic val = Tools.Todejosn(postWebContent(text2 + "bagx/checkout_now?_a=checkout&_m=shoppingCart.actions", postData2, text2 + "bag", webHeaderCollection, "application/json, text/javascript, */*; q=0.01", "application/x-www-form-urlencoded").Html); + string text6 = val["head"]["data"]["url"]; + HttpResult webContent4 = getWebContent(text6, text2 + "bag"); + if (webContent4.StatusCode == HttpStatusCode.Found || webContent4.StatusCode == HttpStatusCode.SeeOther) + { + getWebContent(webContent4.RedirectUrl, text6); + text6 = webContent4.RedirectUrl; + } + redirectURI = text6.Substring(0, text6.IndexOf("/shop/")); + text = new Regex("apple.com/([\\s\\S]*?)shop").Match(text6).Groups[1].Value.Trim(); + string errMsg2 = ""; + if (authsignin(this.acount.appleId, this.acount.applePwd, ref errMsg2, "https://idmsa.apple.com/")) + { + string postData3 = ""; + WebHeaderCollection webHeaderCollection2 = new WebHeaderCollection + { + { "syntax", "graviton" }, + { "X-Requested-With", "Fetch" }, + { "modelVersion", "v2" } + }; + webHeaderCollection2.Add("x-aos-stk", value); + webHeaderCollection2.Add("x-aos-model-page", "signInPage"); + string text7 = text6.Replace("signIn", "signIn/idms/authx"); + HttpResult httpResult = postWebContent(text7 + "&up=true", postData3, text6, webHeaderCollection2, "application/json, text/javascript, */*; q=0.01", "application/x-www-form-urlencoded"); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "登录成功"); + dynamic val2 = Tools.Todejosn(httpResult.Html); + string text8 = val2["head"]["data"]["url"]; + string text9 = val2["head"]["data"]["args"]["pltn"]; + string url = text8; + postData2 = "pltn=" + text9; + WebHeaderCollection webHeader2 = new WebHeaderCollection + { + { "Sec-Fetch-Site", "same-origin" }, + { "Upgrade-Insecure-Requests", "1" }, + { "Sec-Fetch-Mode", "navigate" }, + { "Sec-Fetch-Dest", "document" }, + { "Sec-Fetch-User", "?1" } + }; + HttpResult httpResult2 = postWebContent(url, postData2, text6, webHeader2, "application/json, text/javascript, */*; q=0.01", "application/x-www-form-urlencoded"); + action?.Invoke(noticeKey, DisplyType.xinxi, "正在查询余额"); + if (httpResult2.StatusCode != HttpStatusCode.Found && webContent4.StatusCode != HttpStatusCode.SeeOther) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "查询失败"); + if (!agent) + { + return AppleQueryStoreBalance(acount, _openVpn, agent: true); + } + } + else + { + HttpResult webContent5 = getWebContent(httpResult2.RedirectUrl, text6); + if (webContent5.StatusCode == HttpStatusCode.OK) + { + string text10 = webContent5.Html; + value = new Regex("x-aos-stk\":\"([\\s\\S]*?)\"").Match(webContent5.Html).Groups[1].Value; + WebHeaderCollection webHeaderCollection3 = new WebHeaderCollection + { + { "Sec-Fetch-Site", "same-origin" }, + { "Upgrade-Insecure-Requests", "1" }, + { "Sec-Fetch-Mode", "cors" }, + { "Sec-Fetch-Dest", "empty" }, + { "syntax", "graviton" }, + { "X-Requested-With", "Fetch" }, + { "modelVersion", "v2" } + }; + webHeaderCollection3.Add("x-aos-stk", value); + webHeaderCollection3.Add("x-aos-model-page", "checkoutPage"); + string value3 = new Regex("\"selectShippingOption\":\"([\\s\\S]*?)\"").Match(text10).Groups[1].Value.Trim(); + NationalList nationalList = (from c in new NationalData().getMation() + where c.payment?.billingAddress?.countryCode == Apple_ID_Account_Country + select c).FirstOrDefault(); + if (string.IsNullOrEmpty(value3)) + { + text10 = SelectShippingOptionNullData(text10, nationalList, redirectURI, webHeaderCollection3); + } + value3 = new Regex("\"selectShippingOption\":\"([\\s\\S]*?)\"").Match(text10).Groups[1].Value.Trim(); + if (string.IsNullOrEmpty(value3)) + { + value3 = "E2"; + } + postData2 = "checkout.fulfillment.deliveryTab.delivery.shipmentGroups.shipmentGroup-1.shipmentOptionsGroups.shipmentOptionsGroup-1.shippingOptions.selectShippingOption=" + value3 + "&checkout.fulfillment.fulfillmentOptions.selectFulfillmentLocation=HOME"; + HttpResult httpResult3 = postWebContent(redirectURI + "/shop/checkoutx?_a=continueFromFulfillmentToShipping&_m=checkout.fulfillment", postData2, redirectURI + "/shop/checkout?_s=Shipping-init", webHeaderCollection3, "application/json, text/javascript, *; q=0.01", "application/x-www-form-urlencoded"); + if (nationalList != null) + { + postData2 = "checkout.shipping.addressContactEmail.address.emailAddress=" + Tools.ToUrlEncode(acount.appleId) + "&checkout.shipping.addressContactPhone.address.fullDaytimePhone=(334)%20334-4334&checkout.shipping.addressNotification.address.emailAddress=&checkout.shipping.addressSelector.selectAddress=newAddr&checkout.shipping.addressSelector.newAddress.saveToAddressBook=true&checkout.shipping.addressSelector.newAddress.address.street2=&checkout.shipping.addressSelector.newAddress.address.lastName=wu&checkout.shipping.addressSelector.newAddress.address.firstName=wang&checkout.shipping.addressSelector.newAddress.address.companyName=&checkout.shipping.addressSelector.newAddress.address.street=109%23&checkout.shipping.addressSelector.newAddress.address.isBusinessAddress=false&checkout.shipping.addressSelector.newAddress.address.zipLookup.postalCode=70068-2260&checkout.shipping.addressSelector.newAddress.address.zipLookup.zipLookupCityState=La%20Place%2C%20LA&checkout.shipping.addressSelector.newAddress.address.zipLookup.countryCode=US"; + string value4 = new Regex("/abs.Address([\\s\\S]*?)}}}},").Match(httpResult3.Html).Groups[1].Value; + List list = new List(); + string text11 = "checkout.shipping.addressSelector.newAddress.address"; + if (!string.IsNullOrEmpty(value4)) + { + foreach (Match item in new Regex("\"name\":\"([\\s\\S]*?)\"").Matches(value4)) + { + string value5 = item.Groups[1].Value; + if (!string.IsNullOrEmpty(value5)) + { + list.Add(value5); + } + if (list.Count > 15) + { + break; + } + } + string value6 = new Regex("\"id\":\"([\\s\\S]*?)\"").Match(value4).Groups[1].Value; + if (!string.IsNullOrEmpty(value6)) + { + text11 = value6.Replace("-", ".") + ".address"; + } + } + if (string.IsNullOrEmpty(nationalList.payment.billingAddress.line2)) + { + nationalList.payment.billingAddress.line2 = "aabbcc"; + } + StringBuilder stringBuilder = new StringBuilder(); + if (string.IsNullOrEmpty(nationalList.payment.phoneNumber.areaCode)) + { + stringBuilder.Append("checkout.shipping.addressContactPhone.address.fullDaytimePhone=" + Tools.ToUrlEncode(nationalList.payment.phoneNumber.number)); + } + else + { + stringBuilder.Append("checkout.shipping.addressContactPhone.address.daytimePhoneAreaCode=" + Tools.ToUrlEncode(nationalList.payment.phoneNumber.areaCode)); + stringBuilder.Append("&checkout.shipping.addressContactPhone.address.daytimePhone=" + Tools.ToUrlEncode(nationalList.payment.phoneNumber.number)); + stringBuilder.Append("&checkout.shipping.addressContactPhone.address.isDaytimePhoneSelected=true"); + } + stringBuilder.Append("&checkout.shipping.addressNotification.address.emailAddress="); + stringBuilder.Append("&checkout.shipping.addressSelector.selectAddress=newAddr"); + stringBuilder.Append("&checkout.shipping.addressSelector.newAddress.address.street2=" + Tools.ToUrlEncode(nationalList.payment.billingAddress.line2)); + stringBuilder.Append("&checkout.shipping.addressSelector.newAddress.address.lastName=" + Tools.ToUrlEncode(nationalList.payment.ownerName.lastName)); + stringBuilder.Append("&checkout.shipping.addressSelector.newAddress.address.firstName=" + Tools.ToUrlEncode(nationalList.payment.ownerName.firstName)); + stringBuilder.Append("&checkout.shipping.addressSelector.newAddress.address.companyName="); + stringBuilder.Append("&checkout.shipping.addressSelector.newAddress.address.street=" + Tools.ToUrlEncode(nationalList.payment.billingAddress.line1)); + stringBuilder.Append("&checkout.shipping.addressSelector.newAddress.address.isBusinessAddress=false"); + if (list.Contains("state")) + { + stringBuilder.Append("&" + text11 + ".state=" + Tools.ToUrlEncode(nationalList.payment.billingAddress.stateProvinceName)); + } + if (list.Contains("postalCode")) + { + stringBuilder.Append("&" + text11 + ".postalCode=" + Tools.ToUrlEncode(nationalList.payment.billingAddress.postalCode)); + } + if (list.Contains("city")) + { + stringBuilder.Append("&" + text11 + ".city=" + Tools.ToUrlEncode(nationalList.payment.billingAddress.city)); + } + if (httpResult3.Html.Contains("checkout-shipping-addressSelector-newAddress-cityTypeAhead")) + { + stringBuilder.Append("&checkout.shipping.addressSelector.newAddress.address.cityTypeAhead.city=" + Tools.ToUrlEncode(nationalList.payment.billingAddress.stateProvinceName)); + } + if (httpResult3.Html.Contains("zipLookup")) + { + if (Apple_ID_Account_Country == "USA") + { + text = "US"; + } + stringBuilder.Append("&checkout.shipping.addressSelector.newAddress.address.zipLookup.city=" + Tools.ToUrlEncode(nationalList.payment.billingAddress.stateProvinceName)); + stringBuilder.Append("&checkout.shipping.addressSelector.newAddress.address.zipLookup.state=" + Tools.ToUrlEncode(nationalList.payment.billingAddress.stateProvinceName)); + stringBuilder.Append("&checkout.shipping.addressSelector.newAddress.address.zipLookup.postalCode=" + Tools.ToUrlEncode(nationalList.payment.billingAddress.postalCode)); + stringBuilder.Append("&checkout.shipping.addressSelector.newAddress.address.zipLookup.countryCode=" + text.TrimEnd('/').ToUpper()); + } + string[] array = GetAdditionaFieldsn(Apple_ID_Account_Country).Split('&'); + foreach (string text12 in array) + { + if (string.IsNullOrEmpty(text12)) + { + continue; + } + string value7 = "&" + text12; + bool flag = false; + string[] array2 = stringBuilder.ToString().Split('&'); + foreach (string text13 in array2) + { + if (text13.StartsWith(text12.Split('=')[0])) + { + stringBuilder.Replace(text13, text12); + flag = true; + break; + } + } + if (!flag) + { + stringBuilder.Append(value7); + } + } + postData2 = stringBuilder.ToString(); + } + HttpResult httpResult4 = postWebContent(redirectURI + "/shop/checkoutx?_a=continueFromShippingToBilling&_m=checkout.shipping", postData2, redirectURI + "/shop/checkout?_s=Shipping-init", webHeaderCollection3, "application/json, text/javascript, *; q=0.01", "application/x-www-form-urlencoded"); + string config = AppSysConfig.getConfig("ContinueWithSelectedAddressKeyWord"); + if (!httpResult4.Html.Contains(config) && !httpResult4.Html.Contains("availableAppleBalance")) + { + postData2 = "checkout.shipping.addressContactPhone.address.isDaytimePhoneSelected=true&checkout.shipping.addressNotification.address.emailAddress=&checkout.shipping.addressSelector.selectAddress=address-0"; + string additionaFieldsn = GetAdditionaFieldsn(Apple_ID_Account_Country); + if (!string.IsNullOrEmpty(additionaFieldsn)) + { + string[] array = additionaFieldsn.Split('&'); + foreach (string text14 in array) + { + postData2 = postData2 + "&" + text14; + } + } + httpResult4 = postWebContent(redirectURI + "/shop/checkoutx?_a=continueFromShippingToBilling&_m=checkout.shipping", postData2, redirectURI + "/shop/checkout?_s=Shipping-init", webHeaderCollection3, "application/json, text/javascript, *; q=0.01", "application/x-www-form-urlencoded"); + } + postData2 = ""; + string text15 = new Regex(AppSysConfig.getConfig("ContinueWithSelectedAddressRegex")).Match(httpResult4.Html).Groups[1].Value.Trim(); + HttpResult httpResult5 = postWebContent(string.Concat(str1: (!string.IsNullOrEmpty(text15)) ? text15.Replace(text, "") : "/shop/checkoutx?_a=continueWithSelected&_m=checkout.shipping.addressVerification.selectedAddress", str0: redirectURI), postData2, redirectURI + "/shop/checkout?_s=Shipping-init", webHeaderCollection3, "application/json, text/javascript, */*; q=0.01", "application/x-www-form-urlencoded"); + if (httpResult5.StatusCode == HttpStatusCode.OK) + { + flag2 = false; + ShopBillModel shopBillModel = Tools.Todejosn(httpResult5.Html); + string text16 = shopBillModel?.body?.checkout?.billing?.billingOptions?.selectedBillingOptions?.appleBalance?.appleBalanceInput?.d?.availableAppleBalance; + if (!string.IsNullOrEmpty(text16)) + { + Action obj2 = action; + if (obj2 == null) + { + if (shopBillModel == null) + { + goto IL_1672; + } + } + else + { + obj2(noticeKey, DisplyType.balance, text16); + if (shopBillModel == null) + { + goto IL_1672; + } + } + } + else + { + Action obj3 = action; + if (obj3 == null) + { + if (shopBillModel == null) + { + goto IL_1672; + } + } + else + { + obj3(noticeKey, DisplyType.balance, ""); + if (shopBillModel == null) + { + goto IL_1672; + } + } + } + obj4 = shopBillModel.body?.checkout?.billing?.billingOptions?.d?.options; + goto IL_16b7; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "余额获取失败"); + if (!agent) + { + return AppleQueryStoreBalance(acount, _openVpn, agent: true); + } + } + else + { + action?.Invoke(noticeKey, DisplyType.xinxi, "查询失败#2"); + if (!agent) + { + return AppleQueryStoreBalance(acount, _openVpn, agent: true); + } + } + } + } + else + { + action?.Invoke(noticeKey, DisplyType.xinxi, "商城页面登录失败"); + if (!agent) + { + return AppleQueryStoreBalance(acount, _openVpn, agent: true); + } + } + } + } + else + { + action?.Invoke(noticeKey, DisplyType.xinxi, "页面加载失败"); + if (!agent) + { + return AppleQueryStoreBalance(acount, _openVpn, agent: true); + } + } + goto end_IL_01a6; + IL_1672: + obj4 = null; + goto IL_16b7; + IL_16b7: + ShopBillModel.Option[] array3 = (ShopBillModel.Option[])obj4; + if (array3 != null) + { + ShopBillModel.Option[] array4 = array3; + foreach (ShopBillModel.Option option in array4) + { + if (!(option.value.ToUpper() == "APPLE_BALANCE".ToUpper())) + { + continue; + } + if (option.disabled) + { + action?.Invoke(noticeKey, DisplyType.error, "不可用"); + flag2 = true; + } + else if (option.disabledMessage != null) + { + bool flag3 = false; + string[] array = AppSysConfig.getConfig("ShopBanaldisabledMessage").Split(','); + foreach (string value8 in array) + { + if (option.disabledMessage.Contains(value8)) + { + action?.Invoke(noticeKey, DisplyType.error, "不可用"); + flag3 = true; + flag2 = true; + break; + } + } + if (!flag3) + { + action?.Invoke(noticeKey, DisplyType.forbidden, "正常"); + flag2 = true; + } + } + else + { + action?.Invoke(noticeKey, DisplyType.forbidden, "正常"); + flag2 = true; + } + break; + } + if (!flag2) + { + action?.Invoke(noticeKey, DisplyType.forbidden, "正常"); + } + } + else + { + action?.Invoke(noticeKey, DisplyType.reddemUNlock, "未知"); + } + action?.Invoke(noticeKey, DisplyType.xinxi, "查询完成"); + return true; + end_IL_01a6:; + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + action?.Invoke(noticeKey, DisplyType.xinxi, ex.Message); + } + return false; + } + + public bool applyQueryAuthBalance(AppleAcount acount, bool _openVpn, string _notityKey) + { + Apple_Widget_Key = "04659e25236376d440c224638c1cdd6a001abdd7f186cdcfa120abf35417efab"; + redirectURI = "https://privacy.apple.com"; + openVpn = _openVpn; + listCookie.Add(new CookieItem + { + Key = "idclient", + Value = "web" + }); + listCookie.Add(new CookieItem + { + Key = "geo", + Value = "CN" + }); + this.acount = acount; + string text2 = (appleId = acount.appleId); + noticeKey = text2; + noticeKey = _notityKey; + iframeId = "auth-" + Guid.NewGuid().ToString("n").Substring(0, 8) + "-" + Guid.NewGuid().ToString("n").Substring(0, 4) + "-" + Guid.NewGuid().ToString("n").Substring(0, 4) + "-" + Guid.NewGuid().ToString("n").Substring(0, 4) + "-" + Guid.NewGuid().ToString("n").Substring(0, 8); + try + { + HttpResult webContent = getWebContent("https://privacy.apple.com/account", ""); + if (webContent.StatusCode == HttpStatusCode.OK) + { + string errMsg = ""; + if (authsignin(this.acount.appleId, this.acount.applePwd, ref errMsg, "https://privacy.apple.com/account") && appleauthAuth(acount)) + { + string value = new Regex(AppSysConfig.getConfig("Regex_apply_CsrfToken")).Match(webContent.Html).Groups[1].Value.Trim(); + string value2 = ""; + handelDic.TryGetValue("X-Apple-OAuth-Grant-Code", out value2); + string value3 = Tools.EncodeBase64(Encoding.UTF8.GetBytes(Apple_Widget_Key + ":" + value2)); + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("x-csrf-token", value); + webHeaderCollection.Add("x-apple-authentication", value3); + action?.Invoke(noticeKey, DisplyType.xinxi, "正在获取余额"); + HttpResult webJsonContent = getWebJsonContent("https://privacy.apple.com/session/create", "https://privacy.apple.com/", webHeaderCollection); + if (webJsonContent.StatusCode == HttpStatusCode.OK || webJsonContent.StatusCode == HttpStatusCode.Created) + { + WebHeaderCollection webHeaderCollection2 = new WebHeaderCollection(); + webHeaderCollection2.Add("x-csrf-token", value); + HttpResult webJsonContent2 = getWebJsonContent("https://privacy.apple.com/section/delete-account", "https://privacy.apple.com/account", webHeaderCollection2); + if (webJsonContent2.Html.Contains("store_balance")) + { + string text3 = new Regex(AppSysConfig.getConfig("Regex_applyQueryAuthBalance")).Match(webJsonContent2.Html).Groups[1].Value.Trim().TrimEnd(','); + JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); + if (string.IsNullOrEmpty(text3)) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "余额解析失败"); + return false; + } + Dictionary dictionary = javaScriptSerializer.Deserialize>("{" + text3 + "}"); + decimal num = (dynamic)dictionary["balance"]; + string text4 = (dynamic)dictionary["currency"]; + action?.Invoke(noticeKey, DisplyType.balance, num + " " + text4); + } + else + { + action?.Invoke(noticeKey, DisplyType.balance, "0"); + } + action?.Invoke(noticeKey, DisplyType.xinxi, "查询完成"); + return true; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "正在重新获取余额"); + webJsonContent = getWebJsonContent("https://privacy.apple.com/session/create", "https://privacy.apple.com/", webHeaderCollection); + if (webJsonContent.StatusCode == HttpStatusCode.OK || webJsonContent.StatusCode == HttpStatusCode.Created) + { + WebHeaderCollection webHeaderCollection3 = new WebHeaderCollection(); + webHeaderCollection3.Add("x-csrf-token", value); + HttpResult webJsonContent3 = getWebJsonContent("https://privacy.apple.com/section/delete-account", "https://privacy.apple.com/account", webHeaderCollection3); + if (webJsonContent3.Html.Contains("store_balance")) + { + string text5 = new Regex(AppSysConfig.getConfig("Regex_applyQueryAuthBalance")).Match(webJsonContent3.Html).Groups[1].Value.Trim().TrimEnd(','); + JavaScriptSerializer javaScriptSerializer2 = new JavaScriptSerializer(); + if (string.IsNullOrEmpty(text5)) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "余额解析失败"); + return false; + } + Dictionary dictionary2 = javaScriptSerializer2.Deserialize>("{" + text5 + "}"); + decimal num2 = (dynamic)dictionary2["balance"]; + string text6 = (dynamic)dictionary2["currency"]; + action?.Invoke(noticeKey, DisplyType.balance, num2 + " " + text6); + } + else + { + action?.Invoke(noticeKey, DisplyType.balance, "0"); + } + action?.Invoke(noticeKey, DisplyType.xinxi, "查询完成"); + return true; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "余额获取失败"); + } + } + else + { + action?.Invoke(noticeKey, DisplyType.xinxi, "页面加载失败"); + } + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + action?.Invoke(noticeKey, DisplyType.xinxi, ex.Message); + } + finally + { + try + { + priveSignout(); + } + catch (Exception) + { + } + } + return false; + } + + public bool OpenAuthen(AppleAcount acount, AppleChangeItem changeItem, bool _openVpn, Func getCodeAct) + { + openVpn = _openVpn; + listCookie.Add(new CookieItem + { + Key = "idclient", + Value = "web" + }); + this.acount = acount; + appleId = acount.appleId; + _changeItem = changeItem; + string errMsg = ""; + getCodeAct_ = getCodeAct; + openHsa2 = true; + try + { + if (authsignin(this.acount.appleId, this.acount.applePwd, ref errMsg)) + { + return appleauthAuth(acount); + } + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + action?.Invoke(noticeKey, DisplyType.xinxi, ex.Message); + } + finally + { + try + { + signout(); + } + catch (Exception) + { + } + } + return false; + } + + public bool editAddrs(string addres) + { + Dictionary dictionary = new Dictionary(); + Dictionary dictionary2 = new Dictionary(); + string[] array = addres.Split(','); + foreach (string text in array) + { + if (string.IsNullOrEmpty(text)) + { + continue; + } + string[] array2 = text.Split(':'); + if (array2.Length != 2) + { + continue; + } + string text2 = array2[0]; + if (!(text2 == "姓氏")) + { + if (!(text2 == "名字")) + { + dictionary2.Add(ConverUTF8(array2[0].Trim()), ConverUTF8(array2[1].Trim())); + } + else + { + dictionary.Add("firstName", ConverUTF8(array2[1].Trim())); + } + } + else + { + dictionary.Add("lastName", ConverUTF8(array2[1].Trim())); + } + } + if (dictionary.Count > 0) + { + if (dictionary.Count == 1) + { + if (dictionary.ContainsKey("firstName")) + { + dictionary.Add("lastName", accountLastName); + } + else + { + dictionary.Add("firstName", accountFirstName); + } + } + dictionary.Add("middleName", ""); + JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); + EditMangName(javaScriptSerializer.Serialize(dictionary)); + } + return EditAddres(dictionary2); + } + + public bool EditMangName(string putJson) + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Domain-Id", "1"); + if (handelDic.ContainsKey("scnt")) + { + webHeaderCollection.Add("scnt", handelDic["scnt"]); + } + webHeaderCollection.Add("X-Apple-Api-Key", apiKey.Trim()); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"cOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_2QnI9fhOVvTpZHgfLMC7AeLd7FmrpwoNN5uQ4s5uQ.gEx4xUC541jlS7spjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_2QnI9fhOVvTpZHgfLMC7Afyz.sUAuyPBDK43xhDnmccbguaDeyjaY2ftckuyPBDjaY1HGOg3ZLQ0ISNFmau_WuevMurJhBR.uMukAm4.f282pvEodUW2RjOI0NTg7lrCU.6elV2pNK1e3sdmHzL0TFc4NO7TjOz1_y_WFQ_v9NA14WX3NlY5DuY25BNnOVgw24uy.4dS\"}"); + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/manage/name", putJson, appleHomeUrl, webHeaderCollection); + if (httpResult.StatusCode == HttpStatusCode.BadRequest || httpResult.StatusCode == HttpStatusCode.Unauthorized) + { + ServiceErrorsModel serviceErrorsModel = new JavaScriptSerializer().Deserialize(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "名称修改失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "名称修改失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + } + if (httpResult.StatusCode == HttpStatusCode.OK) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "名称修改完成"); + return true; + } + if (httpResult.StatusCode == HttpStatusCode.Forbidden) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "名称修改失败,请求错误"); + } + action?.Invoke(noticeKey, DisplyType.xinxi, "名称修改失败,未知异常"); + return false; + } + + public string getDicValue(Dictionary suos, string key, string dfValue) + { + if (suos.ContainsKey(key)) + { + return suos[key].Trim(); + } + return dfValue; + } + + private string ConverUTF8(string value) + { + return Encoding.UTF8.GetString(Encoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(value))); + } + + public bool EditAddres(Dictionary pairs) + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Domain-Id", "1"); + webHeaderCollection.Add("X-Apple-Api-Key", apiKey.Trim()); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"cOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_2QnI9fhOdAvLG9mhORoVidPZW2AUMnGWVQdgMVQdg1kzoMpwoNJ9z4oYYLzZ1kzDlSgyyITL5q8sgEV18u1.BUs_43wuZPup_nH2t05oaYAhrcpMxE6DBUr5xj6KkuJCjCBeipaZjhO3f9p_nH1uzjkD6myjaY2_GGEQIgwe98vDdYejftckuyPBDjaY2ftckZZLQ084akJldTeF_C90GfxQeLaD.SAxN4t1VKWZWuxbuJjkWiMgdVgEL3NvWjV2pNk0ug97SYY642xN4t1VKWZWumjkeUd_icCmx_B4W1kl1BNlY6SGWY5BOgkLT0XxU..3mj\"}"); + HttpResult webJsonContent = getWebJsonContent("https://appleid.apple.com/account/manage/payment", "https://appleid.apple.com/account/manage", webHeaderCollection); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "正在修改内容"); + JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); + ManagePayment managePayment = javaScriptSerializer.Deserialize(webJsonContent.Html); + string text = ""; + if (pairs.ContainsKey("税号")) + { + text = "\"taxId\":\"" + getDicValue(pairs, "税号", "") + "\","; + } + else if (managePayment.primaryPaymentMethod.taxId != null) + { + text = "\"taxId\":\"" + managePayment.primaryPaymentMethod.taxId + "\","; + } + string text2 = ""; + if (pairs.ContainsKey("卡号")) + { + text2 = text2 + "\"number\":\"" + getDicValue(pairs, "卡号", "") + "\","; + } + else if (managePayment.primaryPaymentMethod.number != null) + { + text2 = text2 + "\"number\":\"" + managePayment.primaryPaymentMethod.number + "\","; + } + if (pairs.ContainsKey("有效期限年")) + { + text2 = text2 + "\"expirationYear\":\"" + getDicValue(pairs, "有效期限年", "") + "\","; + } + else if (managePayment.primaryPaymentMethod.expirationYear.HasValue) + { + text2 = text2 + "\"expirationYear\":\"" + managePayment.primaryPaymentMethod.expirationYear + "\","; + } + if (pairs.ContainsKey("有效期限月")) + { + text2 = text2 + "\"expirationMonth\":\"" + getDicValue(pairs, "有效期限月", "") + "\","; + } + else if (managePayment.primaryPaymentMethod.expirationMonth.HasValue) + { + text2 = text2 + "\"expirationMonth\":\"" + managePayment.primaryPaymentMethod.expirationMonth + "\","; + } + if (pairs.ContainsKey("安全码")) + { + text2 = text2 + "\"cvv\":\"" + getDicValue(pairs, "安全码", "") + "\","; + } + string text3 = "ownerName"; + if (managePayment.primaryPaymentMethod.nameOnCard != null) + { + text3 = "nameOnCard"; + } + string putData = string.Concat("{\"" + text3 + "\":{\"firstName\":\"" + getDicValue(pairs, "账单名字", managePayment.primaryPaymentMethod.ownerName.firstName) + "\",\"lastName\":\"" + getDicValue(pairs, "账单姓氏", managePayment.primaryPaymentMethod.ownerName.lastName) + "\"},\"phoneNumber\":{\"areaCode\":\"" + getDicValue(pairs, "区号", managePayment.primaryPaymentMethod.phoneNumber.areaCode) + "\",\"number\":\"" + getDicValue(pairs, "电话", managePayment.primaryPaymentMethod.phoneNumber.number) + "\",\"countryCode\":\"" + managePayment.primaryPaymentMethod.phoneNumber.countryCode + "\"},\"billingAddress\":{\"line1\":\"" + getDicValue(pairs, "街道地址", managePayment.primaryPaymentMethod.billingAddress.line1) + "\",\"line2\":\"" + getDicValue(pairs, "楼号单元", managePayment.primaryPaymentMethod.billingAddress.line2) + "\",\"line3\":\"", "\",\"suburb\":\"", getDicValue(pairs, "区", managePayment.primaryPaymentMethod.billingAddress.suburb), "\",\"county\":\"", getDicValue(pairs, "县", managePayment.primaryPaymentMethod.billingAddress.county), "\",\"city\":\"", getDicValue(pairs, "城市", managePayment.primaryPaymentMethod.billingAddress.city), "\",\"countryCode\":\"", managePayment.primaryPaymentMethod.billingAddress.countryCode, "\",\"postalCode\":\"", getDicValue(pairs, "邮编", managePayment.primaryPaymentMethod.billingAddress.postalCode), "\",\"stateProvinceName\":\"", getDicValue(pairs, "省/市", managePayment.primaryPaymentMethod.billingAddress.stateProvinceCode), "\"},", text, text2, "\"id\":1}"); + WebHeaderCollection webHeaderCollection2 = new WebHeaderCollection(); + webHeaderCollection2.Add("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection2.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection2.Add("X-Apple-Domain-Id", "1"); + if (handelDic.ContainsKey("scnt")) + { + webHeaderCollection2.Add("scnt", handelDic["scnt"]); + } + webHeaderCollection2.Add("X-Apple-Api-Key", apiKey.Trim()); + webHeaderCollection2.Add("X-Apple-I-FD-Client-Info", "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"cOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_WhtdBbfbAAvLG9mhORoVidPZW2AUMnGWVQdgMVQdg1kzoMpwoNJ9z4oYYLzZ1kzDlSgyyITL5q8sgEV18u1.BUs_43wuZPup_nH2t05oaYAhrcpMxE6DBUr5xj6KkuL5raZmTiRgjhO3f9p_nH1uzjkD6myjaY2_GGEQIgwe98vDdYejftckuyPBDjaY2ftckZZLQ084akJkHaKqu3aAqjpidPNs0ojpVMZ90L5H6fqUdHz15tTma1kxNGYiJhw.Tf5.EKWG2eRJdojpVMZBHgBZEKIx8buZrJ5tTma1kWNNW5BNlYicklY5BqNAE.lTjV.2nd\"}"); + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/manage/payment/method/" + managePayment.primaryPaymentMethod.paymentMethodOption.name + "/1", putData, appleHomeUrl, webHeaderCollection2); + if (httpResult.StatusCode == HttpStatusCode.BadRequest || httpResult.StatusCode == HttpStatusCode.Unauthorized) + { + ServiceErrorsModel serviceErrorsModel = javaScriptSerializer.Deserialize(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "账单信息修改失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "账单信息修改失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + } + if (httpResult.StatusCode == HttpStatusCode.OK) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "信息修改完成"); + action?.Invoke(noticeKey, DisplyType.lostBillNo, ""); + return true; + } + if (httpResult.StatusCode == HttpStatusCode.Forbidden) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "账单信息修改失败,请求错误"); + } + action?.Invoke(noticeKey, DisplyType.xinxi, "信息修改失败,未知异常:" + httpResult.StatusCode); + return false; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "网络异常,修改失败"); + return false; + } + + public bool checkDisable(bool _openVpn, string appleId, string pwd) + { + this.appleId = appleId; + openVpn = _openVpn; + string postData = "{\"accountName\":\"" + appleId + "\",\"password\":\"" + pwd + "\",\"rememberMe\":false}"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Apple-Domain-Id", "1"); + webHeaderCollection.Add("X-Apple-App-Id", "1879"); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Locale", "ZH-CN"); + webHeaderCollection.Add("Origin", "https://idmsa.apple.com"); + webHeaderCollection.Add("X-Apple-Widget-Key", "16452abf721961a1728885bef033f28e"); + widgKey = "16452abf721961a1728885bef033f28e"; + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"kOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_WhtdBbfbAAvLG9mhORoVidPZW2AUMnGWVQdgMVQdg1kzoMpwoNJ9z4oYYLzZ1kzDlSgyyITL5q8sgEV18u1.BUs_43wuZPup_nH2t05oaYAhrcpMxE6DBUr5xj6KkuL5raZmTiRgjhO3f9p_nH1uzjkD6myjaY2hDpBtOtJJIqSI6KUMnGWpwoNSUC56MnGW87gq1HACVdVe9ZjN6NdVMurJhBR.uMukAm4.f282pvEodUW2RjOI0NTg7lr91y.EKY.6ekcWpD9JscUf.j7N_NO7TdMtinxMPuVrAqJkL3A237lY5BSp55BNlan0Os5Apw.EDJ\"}"); + HttpResult httpResult = postWebContent("https://idmsa.apple.com/appleauth/auth/signin", postData, "https://idmsa.apple.com/appleauth/auth/signin?widgetKey=16452abf721961a1728885bef033f28e&language=ZH-CN&appId=1879", webHeaderCollection); + if (httpResult.StatusCode == HttpStatusCode.Unauthorized) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "ID 或密码不正确"); + string.IsNullOrEmpty(ProxyIp); + return true; + } + if (httpResult.StatusCode == HttpStatusCode.Forbidden) + { + RespErrorJson respErrorJson = new JavaScriptSerializer().Deserialize(httpResult.Html); + if (respErrorJson != null && respErrorJson.serviceErrors != null && respErrorJson.serviceErrors.Length != 0) + { + string message = respErrorJson.serviceErrors[0].message; + action?.Invoke(noticeKey, DisplyType.xinxi, message); + return false; + } + return false; + } + if (httpResult.StatusCode == HttpStatusCode.OK) + { + string[] allKeys = httpResult.Header.AllKeys; + foreach (string text in allKeys) + { + if (text == "X-Apple-ID-Session-Id") + { + handelDic.TryAddDic("X-Apple-ID-Session-Id", httpResult.Header[text]); + } + if (text == "X-Apple-ID-Account-Country") + { + handelDic.TryAddDic("X-Apple-ID-Account-Country", httpResult.Header[text]); + } + } + action?.Invoke(noticeKey, DisplyType.xinxi, "密码验证成功"); + if (httpResult.Header.AllKeys.Contains("X-Apple-ID-Account-Country")) + { + action?.Invoke(noticeKey, DisplyType.area, AppleUtlis.GetAreaByCode(httpResult.Header["X-Apple-ID-Account-Country"].ToString())); + } + return reportaproblem(appleId); + } + if (httpResult.StatusCode == HttpStatusCode.PreconditionFailed) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "阅读协议"); + string[] allKeys = httpResult.Header.AllKeys; + foreach (string text2 in allKeys) + { + if (text2 == "X-Apple-Repair-Session-Token") + { + if (!handelDic.ContainsKey(text2)) + { + handelDic.TryAddDic(text2, httpResult.Header[text2]); + } + else + { + handelDic[text2] = httpResult.Header[text2]; + } + } + if (text2 == "scnt") + { + checkDisableScnt = httpResult.Header[text2]; + if (!handelDic.ContainsKey(text2)) + { + handelDic.TryAddDic(text2, httpResult.Header[text2]); + } + else + { + handelDic[text2] = httpResult.Header[text2]; + } + } + if (text2 == "X-Apple-App-Id") + { + if (!handelDic.ContainsKey(text2)) + { + handelDic.TryAddDic(text2, httpResult.Header[text2]); + } + else + { + handelDic[text2] = httpResult.Header[text2]; + } + } + if (text2 == "X-Apple-Frame-Id") + { + if (!handelDic.ContainsKey(text2)) + { + handelDic.TryAddDic(text2, httpResult.Header[text2]); + } + else + { + handelDic[text2] = httpResult.Header[text2]; + } + } + if (text2 == "X-Apple-Locale") + { + if (!handelDic.ContainsKey(text2)) + { + handelDic.TryAddDic(text2, httpResult.Header[text2]); + } + else + { + handelDic[text2] = httpResult.Header[text2]; + } + } + } + try + { + if (repair()) + { + return reportaproblem(appleId); + } + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + if (isError) + { + action?.Invoke(noticeKey, DisplyType.xinxi, ex.Message); + return false; + } + isError = true; + } + } + action?.Invoke(noticeKey, DisplyType.xinxi, "未知错误"); + return false; + } + + public bool priveSignout() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("Upgrade-Insecure-Requests", "1"); + getWebContent("https://privacy.apple.com/signout", "https://privacy.apple.com/account", webHeaderCollection); + return true; + } + + public bool signout() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("Upgrade-Insecure-Requests", "1"); + getWebContent("https://appleid.apple.com/signout?signOutMessage", "https://appleid.apple.com/account/manage", webHeaderCollection); + return true; + } + + public bool reportSingOut() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("Upgrade-Insecure-Requests", "1"); + getWebContent("https://reportaproblem.apple.com/logout", "https://reportaproblem.apple.com/", webHeaderCollection); + getWebContent("https://reportaproblem.apple.com/", "https://reportaproblem.apple.com/", webHeaderCollection); + return true; + } + + public bool sponsorRefund(string appleId, string amountSpik) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "正在查询订单"); + HttpResult webJsonContent = getWebJsonContent("https://reportaproblem.apple.com/invoices/weborderIds.json?size=60&entityType=invoices&category=all&batchSize=60&r=" + dataR, "https://reportaproblem.apple.com"); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + string text = ""; + string text2 = ""; + foreach (KeyValuePair item in Tools.Todejosn>(webJsonContent.Html)["idToHint"] as Dictionary) + { + text = text + item.Key + ","; + text2 = (string)(text2 + ((dynamic)item.Value + ",")); + } + text = text.TrimEnd(','); + text2 = text2.TrimEnd(','); + string url = "https://reportaproblem.apple.com/invoices/summaries/" + text + ".html?h=" + text2 + "&t=-480&r=" + dataR; + webJsonContent = getWebJsonContent(url, "https://reportaproblem.apple.com"); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + decimal result2; + decimal[] array = (from c in amountSpik.Split(',') + where decimal.TryParse(c, out result2) + select decimal.Parse(c)).ToArray(); + List list = new List(); + foreach (Match item2 in Regex.Matches(webJsonContent.Html, "ph-row([\\s\\S]*?)invoice-container")) + { + string value = new Regex("data-id=\"([\\s\\S]*?)\"").Match(item2.Groups[1].Value).Groups[1].Value; + string value2 = new Regex("data-t=\"([\\s\\S]*?)\"").Match(item2.Groups[1].Value).Groups[1].Value; + string value3 = new Regex("class=\"extra\">([\\s\\S]*?)").Match(item2.Groups[1].Value).Groups[1].Value; + string value4 = new Regex("class=\"total\">([\\s\\S]*?)").Match(item2.Groups[1].Value).Groups[1].Value; + PurchaseLineItems purchaseLineItems = new PurchaseLineItems + { + dataT = value2, + extra = value3, + title = value, + total = value4 + }; + string text3 = value4.Replace(",", "."); + if (value4.Contains(",")) + { + purchaseLineItems.monetary = ","; + } + else + { + purchaseLineItems.monetary = "."; + } + string text4 = Regex.Replace(text3, "[^\\d.\\d]", ""); + if (Regex.IsMatch(text4, "^[+-]?\\d*[.]?\\d*$")) + { + Regex regex = new Regex("(\\p{Sc})?"); + string currency = text3.Replace(text4, "").TrimStart(); + if (decimal.TryParse(regex.Replace(text4, ""), out var result)) + { + purchaseLineItems.currency = currency; + purchaseLineItems.money = result; + if (result <= 0m || (array.Length != 0 && !array.Contains(result))) + { + continue; + } + } + } + list.Add(purchaseLineItems); + } + string text5 = ""; + foreach (IGrouping item3 in from c in list + group c by c.extra) + { + foreach (IGrouping item4 in from c in item3 + group c by c.total) + { + text5 = text5 + item3.Key + " " + item4.Key + ":"; + foreach (PurchaseLineItems item5 in item4) + { + text5 = text5 + item5.title + ","; + } + text5 = text5.TrimEnd(',') + " "; + } + } + action?.Invoke(noticeKey, DisplyType.lostBillNo, text5); + action?.Invoke(noticeKey, DisplyType.xinxi, "查询完成"); + return true; + } + } + action?.Invoke(noticeKey, DisplyType.xinxi, "网络异常,请重新检测"); + return false; + } + + public bool reportaproblem(string appleId) + { + HttpResult webContent = getWebContent("https://reportaproblem.apple.com", "https://idmsa.apple.com/IDMSWebAuth/signin?appIdKey=6f59402f11d3e2234be5b88bf1c96e1e453a875aec205272add55157582a9f61&language=US-EN"); + if (webContent.StatusCode == HttpStatusCode.OK) + { + applyAtion?.Invoke(appleId, DisplyType.normal, "正常"); + action?.Invoke(noticeKey, DisplyType.xinxi, "查询完成"); + string.IsNullOrEmpty(ProxyIp); + idIsNormal = true; + dataR = new Regex(AppSysConfig.getConfig("Regex_reportaproblem")).Match(webContent.Html).Groups[1].Value; + return true; + } + if (webContent.StatusCode != HttpStatusCode.Found && webContent.StatusCode != HttpStatusCode.MovedPermanently) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "未知异常,请重新检测"); + return false; + } + string.IsNullOrEmpty(ProxyIp); + if (webContent.RedirectUrl.ToLower().Contains("accountdisabled")) + { + applyAtion?.Invoke(appleId, DisplyType.forbidden, "禁用"); + action?.Invoke(noticeKey, DisplyType.xinxi, "查询完成"); + return true; + } + if (webContent.RedirectUrl.ToLower().Contains("https://reportaproblem.apple.com")) + { + applyAtion?.Invoke(appleId, DisplyType.normal, "正常"); + action?.Invoke(noticeKey, DisplyType.xinxi, "查询完成"); + return true; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "未知异常,请重新检测"); + return false; + } + + private void manageSecurity() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Domain-Id", "1"); + webHeaderCollection.Add("X-Apple-Api-Key", apiKey.Trim()); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"VOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_CQnIAA2OfUPm8LKfAaZ4pAJZ7OQuyPBB2SCXw2SCVL6yXyjaY1WMsiZRPrwVL6tqAhbrmQmkqlE4Ww.GEFF0Yz3ccbbJYMLgiPFU77qZoOSix5ezdstlYysrhsui6Hahtd__WgpjhO3f9p_nH1uzjkD6myjaY2_GGEQIgwe98vDdYejftckuyPBDjaY2ftckZZLQ084akJrN9HmkVJ_EPzLu_dYV6HzL0TFc4NO7TjOy_Aw7Q_v9NA2pW5DzPy.EKY.6eke4J8odlNUf.j7N_NO7TdMtXjsKMJ5tTma1kWNNW5BNlYicklY5BqNAE.lTjV.4x4\"}"); + getWebContent("https://appleid.apple.com/account/manage/security", "https://appleid.apple.com/account/manage", webHeaderCollection, "application/json"); + } + + private void manageFamily() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Domain-Id", "1"); + webHeaderCollection.Add("X-Apple-Api-Key", apiKey.Trim()); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"VOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_2QnI9fhOdAvLG9mhORoVidPZW2AUMnGWVQdgMVQdg1kzoMpwoNJ9z4oYYLzZ1kzDlSgyyITL5q8sgEV18u1.BUs_43wuZPup_nH2t05oaYAhrcpMxE6DBUr5xj6KkuJCjCBeipaZjhO3f9p_nH1uzjkD6myjaY2_GGEQIgwe98vDdYejftckuyPBDjaY2ftckZZLQ084akJldTeFWudukgSQeLaD.SAxN4t1VKWZWuxbuJjkWiMgdVgEL3NvdjV2pNk0ug97SYY642xN4t1VKWZWumjkxMw9Qe2RjOI0NFgBFY5BNlrJNNlY5QB4bVNjMk.8ob\"}"); + getWebJsonContent("https://appleid.apple.com/account/manage/family", "https://appleid.apple.com/account/manage", webHeaderCollection); + } + + private bool changQuestions(string newqt1, string newqt2, string newqt3) + { + string text = ""; + JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); + try + { + AothQuestions aothQuestions = new AothQuestions(); + aothQuestions.questions = new AothQuestions.Question[3]; + aothQuestions.questions[0] = new AothQuestions.Question + { + id = 130, + answer = newqt1, + number = 1, + question = securityQuestions.availableSecurityQuestions[0][0].question + }; + aothQuestions.questions[1] = new AothQuestions.Question + { + id = 136, + answer = newqt2, + number = 2, + question = securityQuestions.availableSecurityQuestions[1][0].question + }; + aothQuestions.questions[2] = new AothQuestions.Question + { + id = 142, + answer = newqt3, + number = 3, + question = securityQuestions.availableSecurityQuestions[2][0].question + }; + text = javaScriptSerializer.Serialize(aothQuestions); + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + text = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes("{\"questions\":[{\"id\":130,\"question\":\"你少年时代最好的朋友叫什么名字?\",\"number\":1,\"answer\":\"" + newqt1 + "\"},{\"id\":136,\"question\":\"你的理想工作是什么?\",\"number\":2,\"answer\":\"" + newqt2 + "\"},{\"id\":142,\"question\":\"你的父母是在哪里认识的?\",\"number\":3,\"answer\":\"" + newqt3 + "\"}]}")); + } + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Domain-Id", "1"); + if (handelDic.ContainsKey("scnt")) + { + webHeaderCollection.Add("scnt", handelDic["scnt"]); + } + webHeaderCollection.Add("X-Apple-Api-Key", apiKey.Trim()); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"VOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_WhtdBbfbAAvLG9mhORoVidPZW2AUMnGWVQdgMVQdg1kzoMpwoNJ9z4oYYLzZ1kzDlSgyyITL5q8sgEV18u1.BUs_43wuZPup_nH2t05oaYAhrcpMxE6DBUr5xj6KkuL5raZmTiRgjhO3f9p_nH1uzjkD6myjaY2_GGEQIgwe98vDdYejftckuyPBDjaY2ftckZZLQ084akJkHW2A92g4A6Lu_dYV6HzL0TFc4NO7TjOy_Aw7Q_v9NA2pW5Dwhw.Tf5.EKWG2eRJdkEf.j7N_NO7TeMtVEsTpp0iMgdVg7L57GY5BNveBBNlYCa1nkBMfs.8wj\"}"); + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/manage/security/questions", text, appleHomeUrl, webHeaderCollection, "application/json"); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.OK) + { + applyAtion?.Invoke(appleId, DisplyType.qt1, newqt1); + applyAtion?.Invoke(appleId, DisplyType.qt2, newqt2); + applyAtion?.Invoke(appleId, DisplyType.qt3, newqt3); + action?.Invoke(noticeKey, DisplyType.xinxi, "密保修改成功"); + return true; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "密保修改失败,未知异常"); + return false; + } + ServiceErrorsModel serviceErrorsModel = javaScriptSerializer.Deserialize(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + action?.Invoke(noticeKey, DisplyType.xinxi, "密保修改失败"); + return false; + } + + private bool changenPayment(PaymentInfo pay) + { + string putData = "{\"ownerName\":{\"firstName\":\"" + pay.ownerName.firstName + "\",\"lastName\":\"" + pay.ownerName.lastName + "\"},\"phoneNumber\":{\"areaCode\":\"" + pay.phoneNumber.areaCode + "\",\"number\":\"" + pay.phoneNumber.number + "\",\"countryCode\":\"" + pay.phoneNumber.countryCode + "\"},\"billingAddress\":{\"line1\":\"" + pay.billingAddress.line1 + "\",\"line2\":\"" + pay.billingAddress.line2 + "\",\"line3\":\"" + pay.billingAddress.line3 + "\",\"suburb\":\"" + pay.billingAddress.suburb + "\",\"county\":\"" + pay.billingAddress.county + "\",\"city\":\"" + pay.billingAddress.city + "\",\"countryCode\":\"" + pay.billingAddress.countryCode + "\",\"postalCode\":\"" + pay.billingAddress.postalCode + "\",\"stateProvinceName\":\"" + pay.billingAddress.stateProvinceName + "\"},\"id\":1}"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Domain-Id", "1"); + if (handelDic.ContainsKey("scnt")) + { + webHeaderCollection.Add("scnt", handelDic["scnt"]); + } + webHeaderCollection.Add("X-Apple-Api-Key", apiKey.Trim()); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"cOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_WhtdBbfbAAvLG9mhORoVidPZW2AUMnGWVQdgMVQdg1kzoMpwoNJ9z4oYYLzZ1kzDlSgyyITL5q8sgEV18u1.BUs_43wuZPup_nH2t05oaYAhrcpMxE6DBUr5xj6KkuL5raZmTiRgjhO3f9p_nH1uzjkD6myjaY2_GGEQIgwe98vDdYejftckuyPBDjaY2ftckZZLQ084akJkHaKqu3aAqjpidPNs0ojpVMZ90L5H6fqUdHz15tTma1kxNGYiJhw.Tf5.EKWG2eRJdojpVMZBHgBZEKIx8buZrJ5tTma1kWNNW5BNlYicklY5BqNAE.lTjV.2nd\"}"); + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/manage/payment/method/none/1", putData, appleHomeUrl, webHeaderCollection); + if (httpResult.StatusCode == HttpStatusCode.BadRequest || httpResult.StatusCode == HttpStatusCode.Unauthorized) + { + ServiceErrorsModel serviceErrorsModel = new JavaScriptSerializer().Deserialize(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + } + if (httpResult.StatusCode == HttpStatusCode.OK) + { + applyAtion?.Invoke(appleId, DisplyType.guojia, pay.billingAddress.countryCode); + action?.Invoke(noticeKey, DisplyType.xinxi, "国家修改完成"); + return true; + } + if (httpResult.StatusCode == HttpStatusCode.Forbidden) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "国家修改失败,请求错误"); + } + action?.Invoke(noticeKey, DisplyType.xinxi, "国家修改失败,未知异常"); + return false; + } + + private bool changeBirthDate(string fullBirthDate) + { + string putData = "{\"fullBirthDate\":\"" + fullBirthDate + "\"}"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Domain-Id", "1"); + if (handelDic.ContainsKey("scnt")) + { + webHeaderCollection.Add("scnt", handelDic["scnt"]); + } + webHeaderCollection.Add("X-Apple-Api-Key", apiKey.Trim()); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"VOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_WhtdBbfOkexf7_OLgiPFMJhHFW_jftckkCoqAkCoq0NUuAuyPB94UXuGlfUm0NUbNiqUU8jA2Q3wL6k03x0.5EwHXXTSHCSPmtd0wVYPIG_qvoPfybYb5EvYTrYesSA2QnHOELnWKvLG9mhORoVijvw2WwjftcktJJIqovE9XXTneNufuyPBDjaY2ftckuyPB884akHGOg4B4FOTWPfePzLu_dYV6HzL0TFc4NO7TjOy_Aw7Q_v9NA2pW5DzLy.EKY.6ekcWpD9JsjMukAm58L5H6eKIw76sL40iMgdVg7L57GY5BNveBBNlYCa1nkBMfs.7dy\"}"); + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/manage/security/birthday", putData, appleHomeUrl, webHeaderCollection); + if (httpResult.StatusCode == HttpStatusCode.BadRequest || httpResult.StatusCode == HttpStatusCode.Unauthorized) + { + ServiceErrorsModel serviceErrorsModel = new JavaScriptSerializer().Deserialize(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + } + if (httpResult.StatusCode == HttpStatusCode.OK) + { + applyAtion?.Invoke(appleId, DisplyType.shengri, fullBirthDate); + action?.Invoke(noticeKey, DisplyType.xinxi, "生日修改完成"); + return true; + } + _ = httpResult.StatusCode; + action?.Invoke(noticeKey, DisplyType.xinxi, "生日修改失败,未知异常"); + return false; + } + + private bool changePwd(string oldPwd, string newPwd) + { + string putData = "{\"currentPassword\":\"" + oldPwd + "\",\"newPassword\":\"" + newPwd + "\"}"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Domain-Id", "1"); + if (handelDic.ContainsKey("scnt")) + { + webHeaderCollection.Add("scnt", handelDic["scnt"]); + } + webHeaderCollection.Add("X-Apple-Api-Key", apiKey.Trim()); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"cOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_WhtdBbfbAAvLG9mhORoVidPZW2AUMnGWVQdgMVQdg1kzoMpwoNJ9z4oYYLzZ1kzDlSgyyITL5q8sgEV18u1.BUs_43wuZPup_nH2t05oaYAhrcpMxE6DBUr5xj6KkuL5raZmTiRgjhO3f9p_nH1uzjkD6myjaY2_GGEQIgwe98vDdYejftckuyPBDjaY2ftckZZLQ084akJkHW2AA93rMhUfSHolk2dUf.j7J1gBZEMgzH_y3Cmx_B4WukY6UhU.6elV2pNJFub49R2ukAm58L5H6e_yN2wcQe2RjOI0NFgBFY5BNlrJNNlY5QB4bVNjMk.._O\"}"); + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/manage/security/password", putData, appleHomeUrl, webHeaderCollection); + if (httpResult.StatusCode == HttpStatusCode.BadRequest || httpResult.StatusCode == HttpStatusCode.Unauthorized) + { + ServiceErrorsModel serviceErrorsModel = new JavaScriptSerializer().Deserialize(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + } + if (httpResult.StatusCode == HttpStatusCode.OK) + { + applyAtion?.Invoke(appleId, DisplyType.mima, newPwd); + action?.Invoke(noticeKey, DisplyType.xinxi, "密码修改成功"); + string[] allKeys = httpResult.Header.AllKeys; + foreach (string text in allKeys) + { + if (!handelDic.ContainsKey(text)) + { + handelDic.TryAddDic(text, httpResult.Header[text]); + } + else + { + handelDic[text] = httpResult.Header[text]; + } + } + return true; + } + _ = httpResult.StatusCode; + action?.Invoke(noticeKey, DisplyType.xinxi, "密码修改失败,未知异常"); + return false; + } + + private bool intoHome() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Apple-I-Request-Context", "ca"); + webHeaderCollection.Add("scnt", handelDic["scnt"]); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"NOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_WhtdBbfO_Wxf7_OLgiPFMJhHFW_jftckkCoqAkCoq0NUuAuyPB94UXuGlfUm0NUbNiqUU8jA2Q3wL6k03x0.5EwHXXTSHCSPmtd0wVYPIG_qvoPfybYb5EvYTrYesSA2QnHOELnA2vLG9mhORoVijvw2WwjftckvIhIDLTK43xbJlpMpwoNSUC56MnGWpwoNHHACVZXnN9NkONFeA9OJhyhpAI6.D_yg1wWF9kmFxTnx9MsFrAqJkL6f1BSnMk0ugN.xL43DlkIijpVMZ90L5H6edyJ2wohp0iMgdVg7L57GY5BNveBBNlYCa1nkBMfs.0SX\"}"); + HttpResult webContent = getWebContent(appleHomeUrl, "https://appleid.apple.com/", webHeaderCollection, "application/json, text/plain", "application/json"); + if (webContent.StatusCode == HttpStatusCode.OK) + { + string[] allKeys = webContent.Header.AllKeys; + foreach (string text in allKeys) + { + if (!handelDic.ContainsKey(text)) + { + handelDic.TryAddDic(text, webContent.Header[text]); + } + else + { + handelDic[text] = webContent.Header[text]; + } + } + string text2 = new Regex(AppSysConfig.getConfig("Regex_intoHome_jsonData")).Match(webContent.Html).Groups[1].Value.Trim().TrimEnd(','); + JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); + if (!string.IsNullOrEmpty(text2)) + { + loginAppleInfo = javaScriptSerializer.Deserialize(text2 + "}"); + action?.Invoke(noticeKey, DisplyType.shengri, loginAppleInfo.security.birthday); + action?.Invoke(noticeKey, DisplyType.guojia, loginAppleInfo.person.primaryAddress.countryName); + accountFirstName = loginAppleInfo.person.name.firstName; + accountLastName = loginAppleInfo.person.name.lastName; + action?.Invoke(noticeKey, DisplyType.xinxi, "账号获取完成"); + } + string value = new Regex(AppSysConfig.getConfig("Regex_intoHome_jsonDataQuestions")).Match(webContent.Html).Groups[0].Value; + if (!string.IsNullOrEmpty(value)) + { + text2 = "{" + value.TrimEnd('"').TrimEnd(',') + "}"; + securityQuestions = javaScriptSerializer.Deserialize(text2); + } + return true; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "获取账号信息网络异常"); + return false; + } + + private bool verifyAuthQuestions(AothQuestions questions, string[] question) + { + AothQuestions.Question[] questions2 = questions.questions; + int num = 0; + while (true) + { + if (num < questions2.Length) + { + AothQuestions.Question question2 = questions2[num]; + int anwerId_Index = Tools.getAnwerId_Index(question2.id); + if (anwerId_Index == 0) + { + break; + } + question2.answer = question[anwerId_Index - 1]; + num++; + continue; + } + string postData = new JavaScriptSerializer().Serialize(questions); + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Apple-Auth-Attributes", X_Apple_Auth_Attributes); + webHeaderCollection.Add("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Domain-Id", "1"); + webHeaderCollection.Add("scnt", handelDic["scnt"]); + webHeaderCollection.Add("X-Apple-ID-Session-Id", handelDic["X-Apple-ID-Session-Id"]); + webHeaderCollection.Add("X-Apple-Locale", homeLanguage); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"NOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_WhtdBbfO_Wxf7_OLgiPFMJhHFW_jftckkCoqAkCoq0NUuAuyPB94UXuGlfUm0NUbNiqUU8jA2Q3wL6k03x0.5EwHXXTSHCSPmtd0wVYPIG_qvoPfybYb5EvYTrYesSA2QnHOELnA2vLG9mhORoVijvw2WwjftckvIhIDLTK43xbJlpMpwoNSUC56MnGWpwoNHHACVZXnN9NkONFeA9OJhyhpAI6.D_yg1wWF9kmFxTnx9MsFrAqJkL6f1BSnMk0ugN.xL43DlkIijpVMZ90L5H6edyJ2wohp0iMgdVg7L57GY5BNveBBNlYCa1nkBMfs.0SX\"}"); + webHeaderCollection.Add("X-Apple-OAuth-Redirect-URI", redirectURI); + webHeaderCollection.Add("X-Apple-OAuth-Client-Id", Apple_Widget_Key); + webHeaderCollection.Add("X-Apple-OAuth-Client-Type", "firstPartyAuth"); + webHeaderCollection.Add("X-Apple-OAuth-Response-Mode", "web_message"); + webHeaderCollection.Add("X-Apple-OAuth-Response-Type", "code"); + webHeaderCollection.Add("X-Apple-Frame-Id", iframeId); + webHeaderCollection.Add("X-Apple-OAuth-State", iframeId); + webHeaderCollection.Add("X-Apple-OAuth-Require-Grant-Code", "true"); + HttpResult httpResult = postWebContent(verifyquestionsUrl, postData, authUrl, webHeaderCollection); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.NoContent) + { + string[] allKeys = httpResult.Header.AllKeys; + foreach (string text in allKeys) + { + if (text == "X-Apple-OAuth-Grant-Code") + { + if (!handelDic.ContainsKey(text)) + { + handelDic.TryAddDic(text, httpResult.Header[text]); + } + else + { + handelDic[text] = httpResult.Header[text]; + } + } + } + if (httpResult.Header.AllKeys.Contains("X-Apple-ID-Account-Country")) + { + XAppleIDAccountCountry = AppleUtlis.GetAreaByCode(httpResult.Header["X-Apple-ID-Account-Country"].ToString()); + action?.Invoke(noticeKey, DisplyType.area, XAppleIDAccountCountry); + } + action?.Invoke(noticeKey, DisplyType.xinxi, "密保验证成功"); + return true; + } + if (httpResult.StatusCode == HttpStatusCode.PreconditionFailed) + { + string[] allKeys = httpResult.Header.AllKeys; + foreach (string text2 in allKeys) + { + if (text2 == "X-Apple-Repair-Session-Token") + { + if (!handelDic.ContainsKey(text2)) + { + handelDic.TryAddDic(text2, httpResult.Header[text2]); + } + else + { + handelDic[text2] = httpResult.Header[text2]; + } + } + if (text2 == "scnt") + { + if (!handelDic.ContainsKey(text2)) + { + handelDic.TryAddDic(text2, httpResult.Header[text2]); + } + else + { + handelDic[text2] = httpResult.Header[text2]; + } + } + } + if (httpResult.Header.AllKeys.Contains("X-Apple-ID-Account-Country")) + { + XAppleIDAccountCountry = AppleUtlis.GetAreaByCode(httpResult.Header["X-Apple-ID-Account-Country"].ToString()); + action?.Invoke(noticeKey, DisplyType.area, XAppleIDAccountCountry); + } + return repair(); + } + return false; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "密保错误"); + return false; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "非正常密保问题,无法识别"); + return false; + } + + private bool repair() + { + action?.Invoke(noticeKey, DisplyType.xinxi, "获取阅读协议"); + string text = "zh_CN_CHN"; + if (handelDic.ContainsKey("X-Apple-Locale")) + { + text = handelDic["X-Apple-Locale"]; + } + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("Upgrade-Insecure-Requests", "1"); + string apple_Widget_Key = Apple_Widget_Key; + if (widgKey != string.Empty) + { + apple_Widget_Key = widgKey; + } + webHeaderCollection.Add("X-Apple-Widget-Key", apple_Widget_Key); + HttpItem httpItem = new HttpItem + { + URL = "https://appleid.apple.com/widget/account/repair?widgetKey=" + apple_Widget_Key + "&rv=1&language=" + text, + Method = "get", + Timeout = 120000, + ReadWriteTimeout = 30000, + UserAgent = userAgent, + Cookie = listCookie.toFonmtCookie(), + ContentType = "text/html;charset=UTF-8", + Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", + Referer = "https://idmsa.apple.com/appleauth/auth/signin?widgetKey=" + apple_Widget_Key + "&language=zh_CN&rv=1", + ResultType = ResultType.String, + ProtocolVersion = HttpVersion.Version11, + WebProxy = WebRequest.DefaultWebProxy + }; + httpItem.Header = webHeaderCollection; + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + addCookle(httpReuslt.Cookie); + if (httpReuslt.StatusCode == HttpStatusCode.OK) + { + try + { + string text2 = ""; + JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); + string value = new Regex(AppSysConfig.getConfig("Regex_repair_jsonDataQuestions")).Match(httpReuslt.Html).Groups[0].Value; + if (!string.IsNullOrEmpty(value)) + { + text2 = "{" + value.TrimEnd('"').TrimEnd(',') + "}"; + securityQuestions = javaScriptSerializer.Deserialize(text2); + } + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + } + string value2 = new Regex(AppSysConfig.getConfig("Regex_repair_sessionId")).Match(httpReuslt.Html).Groups[1].Value.Trim().Replace("\n", "").Replace("\r", "") + .Replace("\"", "") + .TrimStart(':') + .Trim(); + string key = "repairSessionId"; + if (!handelDic.ContainsKey(key)) + { + handelDic.TryAddDic(key, value2); + } + else + { + handelDic[key] = value2; + } + string[] allKeys = httpReuslt.Header.AllKeys; + foreach (string text3 in allKeys) + { + if (text3 == "scnt") + { + if (!handelDic.ContainsKey(text3)) + { + handelDic.TryAddDic(text3, httpReuslt.Header[text3]); + } + else + { + handelDic[text3] = httpReuslt.Header[text3]; + } + } + if (text3 == "X-Apple-Repair-Session-Token") + { + if (!handelDic.ContainsKey(text3)) + { + handelDic.TryAddDic(text3, httpReuslt.Header[text3]); + } + else + { + handelDic[text3] = httpReuslt.Header[text3]; + } + } + } + action?.Invoke(noticeKey, DisplyType.xinxi, "协议获取成功"); + return options(); + } + action?.Invoke(noticeKey, DisplyType.xinxi, "协议获取失败"); + return false; + } + + private bool options() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("scnt", handelDic["scnt"]); + if (openHsa2) + { + webHeaderCollection.Add("X-Apple-Skip-Repair-Attributes", "[]"); + } + else + { + webHeaderCollection.Add("X-Apple-Skip-Repair-Attributes", "[\"hsa2_enrollment\"]"); + } + webHeaderCollection.Add("X-Apple-Session-Token", handelDic["X-Apple-Repair-Session-Token"]); + webHeaderCollection.Add("X-Apple-Locale", homeLanguage); + string apple_Widget_Key = Apple_Widget_Key; + if (widgKey != string.Empty) + { + webHeaderCollection.Add("X-Apple-Repair-App-Id", "1879"); + apple_Widget_Key = widgKey; + } + webHeaderCollection.Add("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + webHeaderCollection.Add("X-Apple-Widget-Key", apple_Widget_Key); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\".Ga44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZrVglE4YcA.0Yz3ccbbJYMLgiPFU77qZoOSix5ezdstlYysrhsui6.KQnu7KOmaxf7_OLgiPFMJhHFW_jftckkCoqAkCoq0NUuAuyPB94UXuGlfUm0NUbNiqUU8j0OXTA6FL.26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD.erboFen_CvLG9mhORoVijvw2WwjftcktJJIqovE9XXTneNufuyPBDjaY2ftckuyPB884akHGOg4BKPQeOMNkDpyhpAI6.D_yg1wWF9kmFxTnx9MsFrAqJkL6f1BStQs.xLB.Tf1X3dlHbHzL0TFc4NO7TjKy4Iy6hSFQ_v9NA14WX3NlY5DuV25BNnOVgw24uy.Bp1\"}"); + string text = "https://appleid.apple.com/account/manage/repair/options"; + if (acount?.appleQt3 == "changAccount" && !string.IsNullOrEmpty(_changeItem.newPwd)) + { + text += "?passwordRepairType=w"; + } + HttpItem httpItem = new HttpItem + { + URL = text, + Method = "get", + Timeout = 120000, + ReadWriteTimeout = 30000, + UserAgent = userAgent, + Cookie = listCookie.toFonmtCookie(), + ContentType = "application/json; charset=utf-8", + Accept = "application/json, text/javascript, */*; q=0.01", + Referer = "https://appleid.apple.com/widget/account/repair?widgetKey=" + apple_Widget_Key + "&rv=1&language=zh_CN_CHN", + ResultType = ResultType.String, + ProtocolVersion = HttpVersion.Version11, + WebProxy = WebRequest.DefaultWebProxy + }; + httpItem.Header = webHeaderCollection; + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + addCookle(httpReuslt.Cookie); + if (httpReuslt.StatusCode == HttpStatusCode.OK) + { + string[] allKeys = httpReuslt.Header.AllKeys; + foreach (string text2 in allKeys) + { + if (text2 == "X-Apple-Session-Token") + { + if (!handelDic.ContainsKey(text2)) + { + handelDic.TryAddDic(text2, httpReuslt.Header[text2]); + } + else + { + handelDic[text2] = httpReuslt.Header[text2]; + } + } + if (openHsa2 && text2 == "scnt") + { + if (!handelDic.ContainsKey(text2)) + { + handelDic.TryAddDic(text2, httpReuslt.Header[text2]); + } + else + { + handelDic[text2] = httpReuslt.Header[text2]; + } + } + } + Dictionary dictionary = Tools.Todejosn>(httpReuslt.Html); + if (openHsa2 && !httpReuslt.Html.Contains("hsa2_enrollment")) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "该账号无法开启双重验证#2"); + return false; + } + if (httpReuslt.Html.Contains("requiredSteps")) + { + foreach (object item in (dynamic)dictionary["requiredSteps"]) + { + string text3 = (string)(dynamic)item; + if (!(text3 == "hsa2_enrollment") || !openHsa2) + { + if (text3 == "account_name") + { + if (_changeItem == null) + { + if (AppSysConfig.getConfig("oldAccountApply") == "1") + { + APIUtlis.ApiApplyAct(38, "查询老帐号"); + } + action?.Invoke(noticeKey, DisplyType.xinxi, "需要设置账号#2"); + return false; + } + if (string.IsNullOrEmpty(acount.newAppleId) || string.IsNullOrEmpty(acount.newApplePopPwd)) + { + if (AppSysConfig.getConfig("oldAccountApply") == "1") + { + APIUtlis.ApiApplyAct(38, "查询老帐号"); + } + action?.Invoke(noticeKey, DisplyType.xinxi, "需要设置账号#2"); + return false; + } + if (!setAccnount(acount.newAppleId, acount.newApplePopPwd, Apple_Widget_Key)) + { + return false; + } + } + if (text3 == "weak_password") + { + if (_changeItem == null) + { + if (AppSysConfig.getConfig("oldAccountApply") == "1") + { + APIUtlis.ApiApplyAct(38, "查询老帐号"); + } + action?.Invoke(noticeKey, DisplyType.xinxi, "需要设置新密码#2"); + return false; + } + if (string.IsNullOrEmpty(_changeItem.newPwd)) + { + if (AppSysConfig.getConfig("oldAccountApply") == "1") + { + APIUtlis.ApiApplyAct(38, "查询老帐号"); + } + action?.Invoke(noticeKey, DisplyType.xinxi, "需要设置新密码#1"); + return false; + } + if (!setWeakPassword(_changeItem.newPwd)) + { + return false; + } + } + if (text3 == "missing_data") + { + if (_changeItem == null) + { + if (AppSysConfig.getConfig("oldAccountApply") == "1") + { + APIUtlis.ApiApplyAct(38, "查询老帐号"); + } + action?.Invoke(noticeKey, DisplyType.xinxi, "需要设置生日#2"); + return false; + } + if (string.IsNullOrEmpty(_changeItem.newshengri)) + { + if (AppSysConfig.getConfig("oldAccountApply") == "1") + { + APIUtlis.ApiApplyAct(38, "查询老帐号"); + } + action?.Invoke(noticeKey, DisplyType.xinxi, "需要设置生日#2"); + return false; + } + if (!setBirthday(_changeItem.newshengri)) + { + return false; + } + isVieyBirthday = true; + } + if (text3 == "challenge_response") + { + if (_changeItem == null) + { + if (AppSysConfig.getConfig("oldAccountApply") == "1") + { + APIUtlis.ApiApplyAct(38, "查询老帐号"); + } + action?.Invoke(noticeKey, DisplyType.xinxi, "需要设置密保#1"); + return false; + } + if (string.IsNullOrEmpty(_changeItem.newQt1)) + { + if (AppSysConfig.getConfig("oldAccountApply") == "1") + { + APIUtlis.ApiApplyAct(38, "查询老帐号"); + } + action?.Invoke(noticeKey, DisplyType.xinxi, "需要设置密保#2"); + return false; + } + if (!setQuestions(_changeItem.newQt1, _changeItem.newQt2, _changeItem.newQt3)) + { + return false; + } + isViey = true; + } + if (!(text3 == "phoneNumber") || SkipPhoneNumber()) + { + if (text3 == "privacy_consent" && !accept()) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "协议阅读失败#2"); + return false; + } + continue; + } + return false; + } + if (string.IsNullOrEmpty(acount.moblie)) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "请先导入手机号码"); + return false; + } + return OpenHsa2Act(_changeItem.mode, _changeItem.countryCode); + } + } + return complete(); + } + action?.Invoke(noticeKey, DisplyType.xinxi, "协议获取失败#2"); + return false; + } + + public bool OpenHsa2Act(string mode, string countryCode) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "发送验证码中"); + JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + if (widgKey != string.Empty) + { + webHeaderCollection.Add("X-Apple-Repair-App-Id", "1879"); + } + webHeaderCollection.Add("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.Add("scnt", handelDic["scnt"]); + webHeaderCollection.Add("X-Apple-Skip-Repair-Attributes", "[]"); + if (handelDic.ContainsKey("X-Apple-Session-Token")) + { + webHeaderCollection.Add("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + } + webHeaderCollection.Add("X-Apple-Locale", homeLanguage); + if (handelDic.ContainsKey("repairSessionId")) + { + webHeaderCollection.Add("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + } + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"FOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_2QnI9fhOdAvLG9mhORoVidPZW2AUMnGWVQdgMVQdg1kzoMpwoNJ9z4oYYLzZ1kzDlSgyyITL5q8sgEV18u1.BUs_43wuZPup_nH2t05oaYAhrcpMxE6DBUr5xj6KkuJCjCBeipaZjhO3f9p_nH1uzjkD6myjaY2_GGEQIgwe98vDdYejftckuyPBDjaY2ftckZZLQ084akJk231kaJK8QxQeLaD.SAxN4t1VKWZWuxbuJjkWiMgdVgEL3Nvxfs.xLB.Tf1X6NveRQukAm4.f282pvEmmjyXuVrAqJkL3A237lY5BSp55BNlan0Os5Apw.C4E\"}"); + string text = string.Empty; + int msmId = 0; + lock (lockSendMsmObj) + { + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/security/upgrade/verify/phone", "{\"phoneNumberVerification\":{\"phoneNumber\":{\"number\":\"" + acount.moblie + "\",\"countryCode\":\"" + countryCode + "\"},\"mode\":\"" + mode + "\"}}", "https://appleid.apple.com/widget/account/repair?widgetKey=af1139274f266b22b68c2a3e7ad932cb3c0bbe854e13a79af78dcc73136882c3&rv=1&language=zh_CN_CHN", webHeaderCollection); + if (httpResult.StatusCode == (HttpStatusCode)423) + { + dynamic val = javaScriptSerializer.Deserialize(httpResult.Html); + string text2 = val["phoneNumberVerification"]?["serviceErrors"]?[0]["message"]; + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + text2); + return false; + } + if (httpResult.StatusCode == HttpStatusCode.BadRequest || httpResult.StatusCode == HttpStatusCode.Unauthorized) + { + ServiceErrorsModel serviceErrorsModel = javaScriptSerializer.Deserialize(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + return false; + } + if (httpResult.StatusCode != HttpStatusCode.OK) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "发送验证码失败,未知异常"); + return false; + } + dynamic val2 = javaScriptSerializer.Deserialize(httpResult.Html); + msmId = val2["phoneNumberVerification"]?["phoneNumber"]?["id"]; + action?.Invoke(noticeKey, DisplyType.xinxi, "验证码发送成功"); + text = getCodeAct_?.Invoke("请输入账号 " + acount.appleId + "\n发送至 " + acount.moblie + " 的验证码", 1); + if (text == null || string.IsNullOrEmpty(text)) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "验证码未输入"); + return false; + } + if (text.Trim().Length != 6) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "验证码输入不正确"); + return false; + } + } + return verifyCode(msmId, text, acount.moblie, countryCode, mode); + } + + public bool verifyCode(int msmId, string code, string moblie, string countryCode, string mode) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "正在验证"); + JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + if (widgKey != string.Empty) + { + webHeaderCollection.Add("X-Apple-Repair-App-Id", "1879"); + } + webHeaderCollection.Add("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.Add("scnt", handelDic["scnt"]); + webHeaderCollection.Add("X-Apple-Skip-Repair-Attributes", "[]"); + if (handelDic.ContainsKey("X-Apple-Session-Token")) + { + webHeaderCollection.Add("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + } + webHeaderCollection.Add("X-Apple-Locale", homeLanguage); + if (handelDic.ContainsKey("repairSessionId")) + { + webHeaderCollection.Add("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + } + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"FOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_2QnI9fhOdAvLG9mhORoVidPZW2AUMnGWVQdgMVQdg1kzoMpwoNJ9z4oYYLzZ1kzDlSgyyITL5q8sgEV18u1.BUs_43wuZPup_nH2t05oaYAhrcpMxE6DBUr5xj6KkuJCjCBeipaZjhO3f9p_nH1uzjkD6myjaY2_GGEQIgwe98vDdYejftckuyPBDjaY2ftckZZLQ084akJk231kaJK8QxQeLaD.SAxN4t1VKWZWuxbuJjkWiMgdVgEL3Nvxfs.xLB.Tf1X6NveRQukAm4.f282pvEmmjyXuVrAqJkL3A237lY5BSp55BNlan0Os5Apw.C4E\"}"); + string postData = "{\"phoneNumberVerification\":{\"phoneNumber\":{\"id\":" + msmId + ",\"number\":\"" + moblie + "\",\"countryCode\":\"" + countryCode + "\",\"nonFTEU\":true},\"securityCode\":{\"code\":\"" + code + "\"},\"mode\":\"" + mode + "\"}}"; + HttpResult httpResult = postWebContent("https://appleid.apple.com/account/security/upgrade", postData, "https://appleid.apple.com/widget/account/repair?widgetKey=af1139274f266b22b68c2a3e7ad932cb3c0bbe854e13a79af78dcc73136882c3&rv=1&language=zh_CN_CHN", webHeaderCollection); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.OK) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "双重开启成功"); + return true; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "验证失败,未知异常"); + return false; + } + ServiceErrorsModel serviceErrorsModel = javaScriptSerializer.Deserialize(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + return false; + } + + public bool SkipPhoneNumber() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + string apple_Widget_Key = Apple_Widget_Key; + if (widgKey != string.Empty) + { + webHeaderCollection.Add("X-Apple-Repair-App-Id", "1879"); + apple_Widget_Key = widgKey; + } + webHeaderCollection.Add("X-Apple-Widget-Key", apple_Widget_Key); + webHeaderCollection.Add("scnt", handelDic["scnt"]); + webHeaderCollection.Add("X-Apple-Skip-Repair-Attributes", "[\"phoneNumber\"]"); + if (handelDic.ContainsKey("X-Apple-Session-Token")) + { + webHeaderCollection.Add("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + } + webHeaderCollection.Add("X-Apple-Locale", homeLanguage); + if (handelDic.ContainsKey("repairSessionId")) + { + webHeaderCollection.Add("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + } + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"FOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_2QnI9fhOdAvLG9mhORoVidPZW2AUMnGWVQdgMVQdg1kzoMpwoNJ9z4oYYLzZ1kzDlSgyyITL5q8sgEV18u1.BUs_43wuZPup_nH2t05oaYAhrcpMxE6DBUr5xj6KkuJCjCBeipaZjhO3f9p_nH1uzjkD6myjaY2_GGEQIgwe98vDdYejftckuyPBDjaY2ftckZZLQ084akJk231kaJK8QxQeLaD.SAxN4t1VKWZWuxbuJjkWiMgdVgEL3Nvxfs.xLB.Tf1X6NveRQukAm4.f282pvEmmjyXuVrAqJkL3A237lY5BSp55BNlan0Os5Apw.C4E\"}"); + if (getWebJsonContent("https://appleid.apple.com/account/manage/repair/options", "https://appleid.apple.com/widget/account/repair?widgetKey=af1139274f266b22b68c2a3e7ad932cb3c0bbe854e13a79af78dcc73136882c3&rv=1&language=zh_CN_CHN", webHeaderCollection).StatusCode == HttpStatusCode.OK) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "跳过手机号码成功"); + return true; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "跳过手机号码失败"); + return false; + } + + public bool setAccnount(string newAccount, string popPwd, string newwidgKey) + { + JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + if (widgKey != string.Empty) + { + webHeaderCollection.Add("X-Apple-Repair-App-Id", "1879"); + newwidgKey = widgKey; + } + webHeaderCollection.Add("X-Apple-Widget-Key", newwidgKey); + webHeaderCollection.Add("scnt", handelDic["scnt"]); + webHeaderCollection.Add("X-Apple-Skip-Repair-Attributes", "[]"); + if (handelDic.ContainsKey("X-Apple-Session-Token")) + { + webHeaderCollection.Add("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + } + webHeaderCollection.Add("X-Apple-Locale", homeLanguage); + if (handelDic.ContainsKey("repairSessionId")) + { + webHeaderCollection.Add("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + } + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"FOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_2QnI9fhOdAvLG9mhORoVidPZW2AUMnGWVQdgMVQdg1kzoMpwoNJ9z4oYYLzZ1kzDlSgyyITL5q8sgEV18u1.BUs_43wuZPup_nH2t05oaYAhrcpMxE6DBUr5xj6KkuJCjCBeipaZjhO3f9p_nH1uzjkD6myjaY2_GGEQIgwe98vDdYejftckuyPBDjaY2ftckZZLQ084akJk231kaJK8QxQeLaD.SAxN4t1VKWZWuxbuJjkWiMgdVgEL3Nvxfs.xLB.Tf1X6NveRQukAm4.f282pvEmmjyXuVrAqJkL3A237lY5BSp55BNlan0Os5Apw.C4E\"}"); + HttpResult httpResult = postWebContent("https://appleid.apple.com/account/manage/appleid/verification", "\"" + newAccount + "\"", "https://appleid.apple.com/widget/account/repair?widgetKey=af1139274f266b22b68c2a3e7ad932cb3c0bbe854e13a79af78dcc73136882c3&rv=1&language=zh_CN_CHN", webHeaderCollection); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.OK) + { + string text = ""; + Verification verification = javaScriptSerializer.Deserialize(httpResult.Html); + action?.Invoke(noticeKey, DisplyType.xinxi, "邮件验证码发送成功"); + Thread.Sleep(new Random().Next(AppSysConfig.CheckCodeDelay * 1000, AppSysConfig.CheckCodeDelay * 1000 + 1000)); + int num = 0; + do + { + num++; + HttpItem item = new HttpItem + { + URL = "http://localhost:47513/?email=" + acount.newAppleId + "&popPwd=" + acount.newApplePopPwd, + Method = "GET", + Timeout = 100000, + ReadWriteTimeout = 30000, + ResultType = ResultType.String + }; + HttpResult html = new HttpHelper().GetHtml(item); + if (html.StatusCode != HttpStatusCode.OK) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "验证码获取第" + num + "次,失败"); + } + else + { + Dictionary dictionary = javaScriptSerializer.Deserialize>(html.Html); + if (dictionary["code"] == "1") + { + text = dictionary["vieyCode"]; + if (!string.IsNullOrEmpty(text)) + { + break; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "验证码获取第" + num + "次,失败"); + } + else + { + action?.Invoke(noticeKey, DisplyType.xinxi, "验证码获取第" + num + "次,失败"); + } + } + Thread.Sleep(5000); + } + while (num < 5); + if (!string.IsNullOrEmpty(text)) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "验证码获取成功"); + return setAccountName(newAccount, verification?.verificationId, text); + } + action?.Invoke(noticeKey, DisplyType.xinxi, "获取验证码失败超过最大次数"); + return false; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "发送邮件验证码失败,未知异常"); + return false; + } + ServiceErrorsModel serviceErrorsModel = javaScriptSerializer.Deserialize(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + return false; + } + + public bool setAccountName(string accountName, string verificationId, string answer) + { + JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); + string putData = "{\"name\":\"" + accountName + "\",\"verificationInfo\":{\"id\":\"" + verificationId + "\",\"answer\":\"" + answer + "\"}}"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + string apple_Widget_Key = Apple_Widget_Key; + if (widgKey != string.Empty) + { + webHeaderCollection.Add("X-Apple-Repair-App-Id", "1879"); + apple_Widget_Key = widgKey; + } + webHeaderCollection.Add("X-Apple-Widget-Key", apple_Widget_Key); + webHeaderCollection.Add("scnt", handelDic["scnt"]); + webHeaderCollection.Add("X-Apple-Skip-Repair-Attributes", "[]"); + if (handelDic.ContainsKey("X-Apple-Session-Token")) + { + webHeaderCollection.Add("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + } + webHeaderCollection.Add("X-Apple-Locale", homeLanguage); + if (handelDic.ContainsKey("repairSessionId")) + { + webHeaderCollection.Add("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + } + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"FOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_2QnI9fhOdAvLG9mhORoVidPZW2AUMnGWVQdgMVQdg1kzoMpwoNJ9z4oYYLzZ1kzDlSgyyITL5q8sgEV18u1.BUs_43wuZPup_nH2t05oaYAhrcpMxE6DBUr5xj6KkuJCjCBeipaZjhO3f9p_nH1uzjkD6myjaY2_GGEQIgwe98vDdYejftckuyPBDjaY2ftckZZLQ084akJk231kaJK8QxQeLaD.SAxN4t1VKWZWuxbuJjkWiMgdVgEL3Nvxfs.xLB.Tf1X6NveRQukAm4.f282pvEmmjyXuVrAqJkL3A237lY5BSp55BNlan0Os5Apw.C4E\"}"); + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/manage/appleid/verification", putData, "https://appleid.apple.com/widget/account/repair?widgetKey=af1139274f266b22b68c2a3e7ad932cb3c0bbe854e13a79af78dcc73136882c3&rv=1&language=zh_CN_CHN", webHeaderCollection); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.OK) + { + applyAtion?.Invoke(appleId, DisplyType.newAccount, accountName); + appleId = accountName; + acount.appleId = accountName; + action?.Invoke(noticeKey, DisplyType.xinxi, "新账号设置成功"); + isChangAppleId = true; + return true; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "新账号设置失败,未知异常"); + return false; + } + ServiceErrorsModel serviceErrorsModel = javaScriptSerializer.Deserialize(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + return false; + } + + public bool setWeakPassword(string newPwd) + { + JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); + string putData = "{\"currentPassword\":\"" + acount.applePwd + "\",\"newPassword\":\"" + newPwd + "\"}"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + string apple_Widget_Key = Apple_Widget_Key; + if (widgKey != string.Empty) + { + webHeaderCollection.Add("X-Apple-Repair-App-Id", "1879"); + apple_Widget_Key = widgKey; + } + webHeaderCollection.Add("X-Apple-Widget-Key", apple_Widget_Key); + webHeaderCollection.Add("scnt", handelDic["scnt"]); + webHeaderCollection.Add("X-Apple-Skip-Repair-Attributes", "[]"); + webHeaderCollection.Add("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + webHeaderCollection.Add("X-Apple-Locale", homeLanguage); + webHeaderCollection.Add("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"FOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_2QnI9fhOdAvLG9mhORoVidPZW2AUMnGWVQdgMVQdg1kzoMpwoNJ9z4oYYLzZ1kzDlSgyyITL5q8sgEV18u1.BUs_43wuZPup_nH2t05oaYAhrcpMxE6DBUr5xj6KkuJCjCBeipaZjhO3f9p_nH1uzjkD6myjaY2_GGEQIgwe98vDdYejftckuyPBDjaY2ftckZZLQ084akJk231kaJK8QxQeLaD.SAxN4t1VKWZWuxbuJjkWiMgdVgEL3Nvxfs.xLB.Tf1X6NveRQukAm4.f282pvEmmjyXuVrAqJkL3A237lY5BSp55BNlan0Os5Apw.C4E\"}"); + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/manage/security/password", putData, "https://appleid.apple.com/widget/account/repair?widgetKey=af1139274f266b22b68c2a3e7ad932cb3c0bbe854e13a79af78dcc73136882c3&rv=1&language=zh_CN_CHN", webHeaderCollection); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.OK) + { + acount.applePwd = newPwd; + isPwdViey = true; + applyAtion?.Invoke(appleId, DisplyType.mima, newPwd); + action?.Invoke(noticeKey, DisplyType.xinxi, "新密码设置成功"); + return true; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "新密码设置失败,未知异常"); + return false; + } + ServiceErrorsModel serviceErrorsModel = javaScriptSerializer.Deserialize(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "新密码失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "新密码失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + return false; + } + + public bool setBirthday(string newBirthday) + { + JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); + string putData = "{\"security\":{\"birthday\":\"" + newBirthday + "\"}}"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + string apple_Widget_Key = Apple_Widget_Key; + if (widgKey != string.Empty) + { + webHeaderCollection.Add("X-Apple-Repair-App-Id", "1879"); + apple_Widget_Key = widgKey; + } + webHeaderCollection.Add("X-Apple-Widget-Key", apple_Widget_Key); + webHeaderCollection.Add("scnt", handelDic["scnt"]); + webHeaderCollection.Add("X-Apple-Skip-Repair-Attributes", "[]"); + webHeaderCollection.Add("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + webHeaderCollection.Add("X-Apple-Locale", homeLanguage); + webHeaderCollection.Add("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"FOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_2QnI9fhOdAvLG9mhORoVidPZW2AUMnGWVQdgMVQdg1kzoMpwoNJ9z4oYYLzZ1kzDlSgyyITL5q8sgEV18u1.BUs_43wuZPup_nH2t05oaYAhrcpMxE6DBUr5xj6KkuJCjCBeipaZjhO3f9p_nH1uzjkD6myjaY2_GGEQIgwe98vDdYejftckuyPBDjaY2ftckZZLQ084akJk231kaJK8QxQeLaD.SAxN4t1VKWZWuxbuJjkWiMgdVgEL3Nvxfs.xLB.Tf1X6NveRQukAm4.f282pvEmmjyXuVrAqJkL3A237lY5BSp55BNlan0Os5Apw.C4E\"}"); + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/manage/repair", putData, "https://appleid.apple.com/widget/account/repair?widgetKey=af1139274f266b22b68c2a3e7ad932cb3c0bbe854e13a79af78dcc73136882c3&rv=1&language=zh_CN_CHN", webHeaderCollection); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.OK) + { + applyAtion?.Invoke(appleId, DisplyType.shengri, newBirthday); + action?.Invoke(noticeKey, DisplyType.xinxi, "生日设置成功"); + return true; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "生日修改设置失败,未知异常"); + return false; + } + ServiceErrorsModel serviceErrorsModel = javaScriptSerializer.Deserialize(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + action?.Invoke(noticeKey, DisplyType.xinxi, "生日修改设置失败"); + return false; + } + + private bool setQuestions(string newqt1, string newqt2, string newqt3) + { + AothQuestions aothQuestions = new AothQuestions(); + aothQuestions.questions = new AothQuestions.Question[3]; + aothQuestions.questions[0] = new AothQuestions.Question + { + id = 130, + answer = newqt1, + number = 1, + question = securityQuestions.availableSecurityQuestions[0][0].question + }; + aothQuestions.questions[1] = new AothQuestions.Question + { + id = 136, + answer = newqt2, + number = 2, + question = securityQuestions.availableSecurityQuestions[1][0].question + }; + aothQuestions.questions[2] = new AothQuestions.Question + { + id = 142, + answer = newqt3, + number = 3, + question = securityQuestions.availableSecurityQuestions[2][0].question + }; + Dictionary obj = new Dictionary { { "security", aothQuestions } }; + JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); + string putData = javaScriptSerializer.Serialize(obj); + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + string apple_Widget_Key = Apple_Widget_Key; + if (widgKey != string.Empty) + { + webHeaderCollection.Add("X-Apple-Repair-App-Id", "1879"); + apple_Widget_Key = widgKey; + } + webHeaderCollection.Add("X-Apple-Widget-Key", apple_Widget_Key); + webHeaderCollection.Add("scnt", handelDic["scnt"]); + webHeaderCollection.Add("X-Apple-Skip-Repair-Attributes", "[]"); + webHeaderCollection.Add("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + webHeaderCollection.Add("X-Apple-Locale", homeLanguage); + webHeaderCollection.Add("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"cOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_WhtdBbfO_Wxf7_OLgiPFMJhHFW_jftckkCoqAkCoq0NUuAuyPB94UXuGlfUm0NUbNiqUU8jA2Q3wL6k03x0.5EwHXXTSHCSPmtd0wVYPIG_qvoPfybYb5EvYTrYesSA2QnHOELnA2vLG9mhORoVijvw2WwjftcktJJIqovE9XXTneNufuyPBDjaY2ftckuyPB884akHGOg4BN.45_.Jc3rurJhBR.uMukAm4.f282pvEodUW2RjOI0NTg7lrurk0ugN.xL43DlkIZkzL0TFc4NO7TjKz1dy3hp0iMgdVg7L57GY5BNveBBNlYCa1nkBMfs.7Nd\"}"); + HttpResult httpResult = putWebContent("https://appleid.apple.com/account/manage/repair/questions", putData, "https://appleid.apple.com/widget/account/repair?widgetKey=af1139274f266b22b68c2a3e7ad932cb3c0bbe854e13a79af78dcc73136882c3&rv=1&language=zh_CN_CHN", webHeaderCollection); + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + if (httpResult.StatusCode == HttpStatusCode.OK) + { + applyAtion?.Invoke(appleId, DisplyType.qt1, newqt1); + applyAtion?.Invoke(appleId, DisplyType.qt2, newqt2); + applyAtion?.Invoke(appleId, DisplyType.qt3, newqt3); + action?.Invoke(noticeKey, DisplyType.xinxi, "密保修改成功"); + return true; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "密保修改失败,未知异常"); + return false; + } + ServiceErrorsModel serviceErrorsModel = javaScriptSerializer.Deserialize(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + action?.Invoke(noticeKey, DisplyType.xinxi, "密保修改失败"); + return false; + } + + private bool accept() + { + action?.Invoke(noticeKey, DisplyType.xinxi, "正在同意协议"); + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + string apple_Widget_Key = Apple_Widget_Key; + if (widgKey != string.Empty) + { + webHeaderCollection.Add("X-Apple-Repair-App-Id", "1879"); + apple_Widget_Key = widgKey; + } + webHeaderCollection.Add("X-Apple-Widget-Key", apple_Widget_Key); + webHeaderCollection.Add("scnt", handelDic["scnt"]); + webHeaderCollection.Add("X-Apple-Skip-Repair-Attributes", "[]"); + webHeaderCollection.Add("X-Apple-Session-Token", handelDic["X-Apple-Session-Token"]); + webHeaderCollection.Add("X-Apple-Locale", homeLanguage); + webHeaderCollection.Add("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\".Ga44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZrVglE4YcA.0Yz3ccbbJYMLgiPFU77qZoOSix5ezdstlYysrhsui6.KQnu7KOmaxf7_OLgiPFMJhHFW_jftckkCoqAkCoq0NUuAuyPB94UXuGlfUm0NUbNiqUU8j0OXTA6FL.26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD.erboFen_CvLG9mhORoVijvw2WwjftcktJJIqovE9XXTneNufuyPBDjaY2ftckuyPB884akHGOg4BKPQeOMNkDpyhpAI6.D_yg1wWF9kmFxTnx9MsFrAqJkL6f1BStQs.xLB.Tf1X3dlHbHzL0TFc4NO7TjKy4Iy6hSFQ_v9NA14WX3NlY5DuV25BNnOVgw24uy.Bp1\"}"); + HttpItem httpItem = new HttpItem + { + URL = "https://appleid.apple.com/account/manage/privacy/accept", + Method = "put", + UserAgent = userAgent, + Cookie = listCookie.toFonmtCookie(), + ContentType = "application/json; charset=utf-8", + Accept = "application/json, text/javascript, */*; q=0.01", + Referer = "https://appleid.apple.com/widget/account/repair?widgetKey=" + apple_Widget_Key + "&rv=1&language=zh_CN_CHN", + ProtocolVersion = HttpVersion.Version11, + WebProxy = WebRequest.DefaultWebProxy + }; + httpItem.Header = webHeaderCollection; + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + addCookle(httpReuslt.Cookie); + if (httpReuslt.StatusCode != HttpStatusCode.OK && httpReuslt.StatusCode != HttpStatusCode.MethodNotAllowed) + { + return false; + } + return true; + } + + private bool complete() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + string value = checkDisableScnt; + if (handelDic.ContainsKey("scnt2")) + { + value = handelDic["scnt2"]; + } + webHeaderCollection.Add("X-Apple-Domain-Id", "1"); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Locale", homeLanguage); + if (string.IsNullOrEmpty(value) && handelDic.ContainsKey("scnt")) + { + value = handelDic["scnt"]; + } + webHeaderCollection.Add("scnt", value); + if (handelDic.ContainsKey("repairSessionId")) + { + webHeaderCollection.Add("X-Apple-ID-Session-Id", handelDic["repairSessionId"]); + } + string apple_Widget_Key = Apple_Widget_Key; + if (widgKey != string.Empty) + { + webHeaderCollection.Add("X-Apple-Repair-App-Id", "1879"); + apple_Widget_Key = widgKey; + } + webHeaderCollection.Add("X-Apple-Auth-Attributes", X_Apple_Auth_Attributes); + webHeaderCollection.Add("X-Apple-Repair-Session-Token", handelDic["X-Apple-Repair-Session-Token"]); + webHeaderCollection.Add("Origin", "https://idmsa.apple.com"); + webHeaderCollection.Add("X-Apple-Widget-Key", apple_Widget_Key); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"FWa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRDCphtdWKqgmkypZHgfLMC7ETIhEkscAB1irPu_eH3BhxUC550ialT0iakA2zGUMnGWFfwMHDCQyFA2wv4qnvtCtNQNbXky.7bc7.lzXJJIneGffLMC7EZ3QHPBirTYKUowRslzRQqwSM2YSQTPNKSfBgEhO3f9p_nH2rZvIwD91n.fhqijvw2WwjftckvIhIDLTK43xbJlpMv.jq0T0ialftckZZLQ084akJlKeXd_02q0UfTgJhT9Laf4AM_NOt95gJhT.f4AM_N1L6fL9Lj8PlHptL.BwCL9LjEf4AMXXpX_flzL9Lj3df4AMYygJhT02RjOI0NTg7lruAs.xLB.Tf4NdPwJF_f4AM_NOt95gJhT4AL9Lj9k3gELgJhTHpX_fmg.OsPgJhTUL9Lj1kpX_flzL9Lj49f4AMYygJhT50SFQ_v9NA14YMnGWpwoRb25BNlrJ.NlY5QB4bVNjMk.1IS\"}"); + webHeaderCollection.Add("X-Apple-OAuth-Redirect-URI", redirectURI); + webHeaderCollection.Add("X-Apple-OAuth-Client-Id", Apple_Widget_Key); + webHeaderCollection.Add("X-Apple-OAuth-Client-Type", "firstPartyAuth"); + webHeaderCollection.Add("X-Apple-OAuth-Response-Mode", "web_message"); + webHeaderCollection.Add("X-Apple-OAuth-Response-Type", "code"); + webHeaderCollection.Add("X-Apple-Frame-Id", iframeId); + webHeaderCollection.Add("X-Apple-OAuth-State", iframeId); + webHeaderCollection.Add("X-Apple-OAuth-Require-Grant-Code", "true"); + HttpItem httpItem = new HttpItem + { + URL = "https://idmsa.apple.com/appleauth/auth/repair/complete", + Method = "post", + UserAgent = userAgent, + Cookie = listCookie.toFonmtCookie(), + ContentType = "application/json; charset=utf-8", + Accept = "application/json, text/javascript, */*; q=0.01", + Referer = "https://idmsa.apple.com/appleauth/auth/signin?widgetKey=" + apple_Widget_Key + "&language=zh_CN&rv=1", + ResultType = ResultType.String, + Postdata = "", + ProtocolVersion = HttpVersion.Version11, + WebProxy = WebRequest.DefaultWebProxy + }; + httpItem.Header = webHeaderCollection; + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + addCookle(httpReuslt.Cookie); + if (httpReuslt.StatusCode != HttpStatusCode.OK && httpReuslt.StatusCode != HttpStatusCode.NoContent) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "协议阅读失败"); + return false; + } + string[] allKeys = httpReuslt.Header.AllKeys; + foreach (string text in allKeys) + { + if (text == "X-Apple-OAuth-Grant-Code") + { + if (!handelDic.ContainsKey(text)) + { + handelDic.TryAddDic(text, httpReuslt.Header[text]); + } + else + { + handelDic[text] = httpReuslt.Header[text]; + } + } + } + if (httpReuslt.Header.AllKeys.Contains("X-Apple-ID-Account-Country")) + { + action?.Invoke(noticeKey, DisplyType.area, AppleUtlis.GetAreaByCode(httpReuslt.Header["X-Apple-ID-Account-Country"].ToString())); + } + action?.Invoke(noticeKey, DisplyType.xinxi, "协议阅读成功"); + return true; + } + + private bool appleauthAuth(AppleAcount acount) + { + if (isViey) + { + return true; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "验证密保问题"); + string url = "https://idmsa.apple.com/appleauth/auth"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Domain-Id", "1"); + webHeaderCollection.Add("X-Apple-Locale", homeLanguage); + webHeaderCollection.Add("scnt", handelDic["scnt"]); + webHeaderCollection.Add("X-Apple-ID-Session-Id", handelDic["X-Apple-ID-Session-Id"]); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\".Ga44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZrVglE4YcA.0Yz3ccbbJYMLgiPFU77qZoOSix5ezdstlYysrhsui6.KQnu7KOmaxf7_OLgiPFMJhHFW_jftckkCoqAkCoq0NUuAuyPB94UXuGlfUm0NUbNiqUU8j0OXTA6FL.26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD.erboFen_CvLG9mhORoVijvw2WwjftcktJJIqovE9XXTneNufuyPBDjaY2ftckuyPB884akHGOg4BKPQeOMNkDpyhpAI6.D_yg1wWF9kmFxTnx9MsFrAqJkL6f1BStQs.xLB.Tf1X3dlHbHzL0TFc4NO7TjKy4Iy6hSFQ_v9NA14WX3NlY5DuV25BNnOVgw24uy.Bp1\"}"); + webHeaderCollection.Add("X-Apple-Auth-Attributes", X_Apple_Auth_Attributes); + webHeaderCollection.Add("X-Apple-OAuth-Redirect-URI", redirectURI); + webHeaderCollection.Add("X-Apple-OAuth-Client-Id", Apple_Widget_Key); + webHeaderCollection.Add("X-Apple-OAuth-Client-Type", "firstPartyAuth"); + webHeaderCollection.Add("X-Apple-OAuth-Response-Mode", "web_message"); + webHeaderCollection.Add("X-Apple-OAuth-Response-Type", "code"); + webHeaderCollection.Add("X-Apple-Frame-Id", iframeId); + webHeaderCollection.Add("X-Apple-OAuth-State", iframeId); + webHeaderCollection.Add("X-Apple-OAuth-Require-Grant-Code", "true"); + HttpResult webContent = getWebContent(url, authUrl, webHeaderCollection, "text/html", "application/json"); + if (webContent.StatusCode == HttpStatusCode.OK) + { + string input = new Regex(AppSysConfig.getConfig("Regex_appleauthAuth")).Match(webContent.Html).Groups[1].Value.Trim() + "}"; + AothQuestions questions = new JavaScriptSerializer().Deserialize(input); + return verifyAuthQuestions(questions, new string[3] { acount.appleQt1, acount.appleQt2, acount.appleQt3 }); + } + action?.Invoke(noticeKey, DisplyType.xinxi, "密保获取失败"); + return false; + } + + private bool authFederate(string appleId, ref string errMsg, string home = "https://appleid.apple.com") + { + string postData = "{\"accountName\":\"" + appleId + "\",\"rememberMe\":false}"; + errMsg = "未知错误"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + string value = iframeId; + string url = "https://idmsa.apple.com/appleauth/auth/authorize/signin?frame_id=" + Tools.ToUrlEncode(iframeId) + "&language=zh_CN&iframeId=" + Tools.ToUrlEncode(iframeId) + "&client_id=" + Apple_Widget_Key + "&redirect_uri=" + Tools.ToUrlEncode(redirectURI) + "&response_type=code&response_mode=web_message&state=" + Tools.ToUrlEncode(value) + "&authVersion=latest"; + webHeaderCollection.Add("Upgrade-Insecure-Requests", "1"); + HttpResult webContent = getWebContent(url, home, webHeaderCollection, "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3", "application/x-www-form-urlencoded"); + if (webContent.StatusCode == HttpStatusCode.OK) + { + webContent.Header["Date"].Split(' '); + if (webContent.Header.AllKeys.Contains("X-Apple-Auth-Attributes")) + { + string value2 = webContent.Header["X-Apple-Auth-Attributes"]; + handelDic.TryAddDic("X-Apple-Auth-Attributes", value2); + } + if (webContent.Header.AllKeys.Contains("X-Apple-HC-Bits") && webContent.Header.AllKeys.Contains("X-Apple-HC-Challenge")) + { + string value3 = webContent.Header["X-Apple-HC-Bits"]; + string value4 = webContent.Header["X-Apple-HC-Challenge"]; + handelDic.TryAddDic("Bits", value3); + handelDic.TryAddDic("Challenge", value4); + } + webHeaderCollection.Add("X-Apple-OAuth-Redirect-URI", redirectURI); + webHeaderCollection.Add("X-Apple-OAuth-Client-Id", Apple_Widget_Key); + webHeaderCollection.Add("X-Apple-OAuth-Client-Type", "firstPartyAuth"); + webHeaderCollection.Add("X-Apple-OAuth-Response-Mode", "web_message"); + webHeaderCollection.Add("X-Apple-OAuth-Response-Type", "code"); + webHeaderCollection.Add("X-Apple-Frame-Id", iframeId); + webHeaderCollection.Add("X-Apple-OAuth-State", iframeId); + webHeaderCollection.Add("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Domain-Id", DomainId); + webHeaderCollection.Add("X-Apple-Locale", homeLanguage); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"NOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_WhtdBbfO_Wxf7_OLgiPFMJhHFW_jftckkCoqAkCoq0NUuAuyPB94UXuGlfUm0NUbNiqUU8jA2Q3wL6k03x0.5EwHXXTSHCSPmtd0wVYPIG_qvoPfybYb5EvYTrYesSA2QnHOELnA2vLG9mhORoVijvw2WwjftckvIhIDLTK43xbJlpMpwoNSUC56MnGWpwoNHHACVZXnN9NkONFeA9OJhyhpAI6.D_yg1wWF9kmFxTnx9MsFrAqJkL6f1BSnMk0ugN.xL43DlkIijpVMZ90L5H6edyJ2wohp0iMgdVg7L57GY5BNveBBNlYCa1nkBMfs.0SX\"}"); + HttpResult httpResult = postWebContent("https://idmsa.apple.com/appleauth/auth/federate?isRememberMeEnabled=true", postData, authUrl, webHeaderCollection); + if (httpResult.StatusCode == HttpStatusCode.BadGateway) + { + errMsg = "服务器拒绝,请使用代理,IP可能已被拉黑"; + action?.Invoke(noticeKey, DisplyType.xinxi, errMsg); + return false; + } + if (httpResult.StatusCode == HttpStatusCode.OK) + { + string[] allKeys = httpResult.Header.AllKeys; + foreach (string text in allKeys) + { + if (text == "scnt") + { + handelDic.TryAddDic("scnt", httpResult.Header[text]); + handelDic.TryAddDic("scnt2", httpResult.Header[text]); + } + } + return true; + } + action?.Invoke(noticeKey, DisplyType.xinxi, errMsg); + return false; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "登录失败:AppleService返回:" + (int)webContent.StatusCode); + return false; + } + + private bool authsignin(string appleId, string applePwd, ref string errMsg, string home = "https://appleid.apple.com") + { + action?.Invoke(noticeKey, DisplyType.xinxi, "验证登录密码"); + string postData = "{\"accountName\":\"" + appleId + "\",\"rememberMe\":false,\"password\":\"" + applePwd + "\"}"; + errMsg = "未知错误"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("Upgrade-Insecure-Requests", "1"); + authFederate(appleId, ref errMsg, home); + if (handelDic.ContainsKey("X-Apple-Auth-Attributes")) + { + webHeaderCollection.Add("X-Apple-Auth-Attributes", handelDic["X-Apple-Auth-Attributes"]); + } + if (handelDic.ContainsKey("Bits")) + { + string text = handelDic["Bits"]; + string text2 = handelDic["Challenge"]; + string text3 = "1:" + text + ":" + DateTime.UtcNow.ToString("yyyyMMddHHmmss") + ":" + text2 + "::"; + string text4 = APIUtlis.ApiGetCodeHC(text3); + webHeaderCollection.Add("X-APPLE-HC", text3 + text4); + } + webHeaderCollection.Add("scnt", handelDic["scnt"].Replace("\n", "")); + webHeaderCollection.Add("X-Apple-OAuth-Redirect-URI", redirectURI); + webHeaderCollection.Add("X-Apple-OAuth-Client-Id", Apple_Widget_Key); + webHeaderCollection.Add("X-Apple-OAuth-Client-Type", "firstPartyAuth"); + webHeaderCollection.Add("X-Apple-OAuth-Response-Mode", "web_message"); + webHeaderCollection.Add("X-Apple-OAuth-Response-Type", "code"); + webHeaderCollection.Add("X-Apple-Frame-Id", iframeId); + webHeaderCollection.Add("X-Apple-OAuth-State", iframeId); + webHeaderCollection.Add("X-Apple-Widget-Key", Apple_Widget_Key); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Domain-Id", DomainId); + webHeaderCollection.Add("X-Apple-Locale", homeLanguage); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"NOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_WhtdBbfO_Wxf7_OLgiPFMJhHFW_jftckkCoqAkCoq0NUuAuyPB94UXuGlfUm0NUbNiqUU8jA2Q3wL6k03x0.5EwHXXTSHCSPmtd0wVYPIG_qvoPfybYb5EvYTrYesSA2QnHOELnA2vLG9mhORoVijvw2WwjftckvIhIDLTK43xbJlpMpwoNSUC56MnGWpwoNHHACVZXnN9NkONFeA9OJhyhpAI6.D_yg1wWF9kmFxTnx9MsFrAqJkL6f1BSnMk0ugN.xL43DlkIijpVMZ90L5H6edyJ2wohp0iMgdVg7L57GY5BNveBBNlYCa1nkBMfs.0SX\"}"); + HttpResult httpResult = postWebContent(loginAuthUrl, postData, authUrl, webHeaderCollection); + if (httpResult.StatusCode == HttpStatusCode.BadGateway) + { + errMsg = "服务器拒绝,请使用代理,IP可能已被拉黑"; + action?.Invoke(noticeKey, DisplyType.xinxi, errMsg); + return false; + } + if (httpResult.StatusCode != HttpStatusCode.Unauthorized && httpResult.StatusCode != HttpStatusCode.Forbidden) + { + string[] allKeys; + if (httpResult.StatusCode != HttpStatusCode.Conflict && httpResult.StatusCode != HttpStatusCode.OK) + { + if (httpResult.StatusCode == HttpStatusCode.PreconditionFailed) + { + allKeys = httpResult.Header.AllKeys; + foreach (string text5 in allKeys) + { + if (text5 == "X-Apple-Repair-Session-Token") + { + if (!handelDic.ContainsKey(text5)) + { + handelDic.TryAddDic(text5, httpResult.Header[text5]); + } + else + { + handelDic[text5] = httpResult.Header[text5]; + } + } + if (text5 == "scnt") + { + if (!handelDic.ContainsKey(text5)) + { + handelDic.TryAddDic(text5, httpResult.Header[text5]); + handelDic.TryAddDic("scnt2", httpResult.Header[text5]); + } + else + { + handelDic[text5] = httpResult.Header[text5]; + } + } + } + return repair(); + } + action?.Invoke(noticeKey, DisplyType.xinxi, errMsg); + return false; + } + if (httpResult.Header.AllKeys.Contains("X-Apple-ID-Account-Country")) + { + Apple_ID_Account_Country = httpResult.Header["X-Apple-ID-Account-Country"].ToString(); + action?.Invoke(noticeKey, DisplyType.area, AppleUtlis.GetAreaByCode(httpResult.Header["X-Apple-ID-Account-Country"].ToString())); + } + allKeys = httpResult.Header.AllKeys; + foreach (string text6 in allKeys) + { + if (text6 == "X-Apple-Auth-Attributes") + { + X_Apple_Auth_Attributes = httpResult.Header["X-Apple-Auth-Attributes"]; + } + if (text6 == "scnt") + { + handelDic.TryAddDic("scnt", httpResult.Header[text6]); + handelDic.TryAddDic("scnt2", httpResult.Header[text6]); + } + if (text6 == "X-Apple-ID-Session-Id") + { + handelDic.TryAddDic("X-Apple-ID-Session-Id", httpResult.Header[text6]); + } + if (text6 == "X-Apple-ID-Account-Country") + { + handelDic.TryAddDic("X-Apple-ID-Account-Country", httpResult.Header[text6]); + } + } + if (httpResult.Html.Contains("hsa2")) + { + if (openHsa2) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "双重已存在,无需开启"); + } + else + { + action?.Invoke(noticeKey, DisplyType.xinxi, "双重验证账号暂不支持"); + } + return false; + } + return true; + } + LoginErrorModel loginErrorModel = new JavaScriptSerializer().Deserialize(httpResult.Html); + if (loginErrorModel.serviceErrors != null) + { + if (loginErrorModel.serviceErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, loginErrorModel.serviceErrors[0].message); + } + else + { + action?.Invoke(noticeKey, DisplyType.xinxi, errMsg); + } + } + else + { + action?.Invoke(noticeKey, DisplyType.xinxi, errMsg); + } + return false; + } + + protected HttpResult DeleteWebContent(string url, string putData, string referer, WebHeaderCollection webHeader = null, string accept = "") + { + byte[] bytes = Encoding.UTF8.GetBytes(putData); + HttpItem httpItem = new HttpItem + { + URL = url, + Method = "DELETE", + UserAgent = userAgent, + Cookie = listCookie.toFonmtCookie(), + Accept = ((accept.Length == 0) ? "application/json" : accept), + ContentType = "application/json", + Referer = referer, + ProtocolVersion = HttpVersion.Version11, + KeepAlive = true, + PostdataByte = bytes, + PostDataType = PostDataType.Byte, + ResultType = ResultType.String, + WebProxy = WebRequest.DefaultWebProxy + }; + if (webHeader != null) + { + httpItem.Header = webHeader; + } + addHander(httpItem); + return GetHttpReuslt(httpItem); + } + + protected HttpResult putWebContent(string url, string putData, string referer, WebHeaderCollection webHeader = null, string accept = "") + { + byte[] bytes = Encoding.UTF8.GetBytes(putData); + HttpItem httpItem = new HttpItem + { + URL = url, + Method = "PUT", + UserAgent = userAgent, + Cookie = listCookie.toFonmtCookie(), + Accept = ((accept.Length == 0) ? "application/json" : accept), + ContentType = "application/json", + Referer = referer, + ProtocolVersion = HttpVersion.Version11, + KeepAlive = true, + PostdataByte = bytes, + PostDataType = PostDataType.Byte, + ResultType = ResultType.String, + WebProxy = WebRequest.DefaultWebProxy + }; + if (webHeader != null) + { + httpItem.Header = webHeader; + } + addHander(httpItem); + return GetHttpReuslt(httpItem); + } + + protected HttpResult postWebContent(string url, string postData, string referer, WebHeaderCollection webHeader = null, string accept = "application/json, text/javascript, */*; q=0.01", string contentType = "application/json") + { + byte[] bytes = Encoding.UTF8.GetBytes(postData); + HttpItem httpItem = new HttpItem + { + URL = url, + Method = "POST", + UserAgent = userAgent, + Cookie = listCookie.toFonmtCookie(), + Accept = accept, + ContentType = contentType, + Referer = referer, + ProtocolVersion = HttpVersion.Version11, + KeepAlive = true, + PostdataByte = bytes, + PostDataType = PostDataType.Byte, + ResultType = ResultType.String, + WebProxy = WebRequest.DefaultWebProxy + }; + if (webHeader != null) + { + httpItem.Header = webHeader; + } + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + addCookle(httpReuslt.Cookie); + return httpReuslt; + } + + protected HttpResult getWebContent(string url, string referer, WebHeaderCollection webHeader = null, string accept = "", string ContentType = "") + { + HttpItem httpItem = new HttpItem + { + URL = url, + Method = "GET", + UserAgent = userAgent, + Cookie = listCookie.toFonmtCookie(), + Accept = ((accept.Length == 0) ? "*/*" : accept), + Referer = referer, + ProtocolVersion = HttpVersion.Version11, + KeepAlive = true, + ContentType = ((ContentType.Length == 0) ? null : ContentType), + ResultType = ResultType.String, + WebProxy = WebRequest.DefaultWebProxy + }; + if (webHeader != null) + { + httpItem.Header = webHeader; + } + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + addCookle(httpReuslt.Cookie); + return httpReuslt; + } + + protected HttpResult GetHttpReuslt(HttpItem item) + { + if (!taskState.isRun) + { + throw new Exception("停止执行"); + } + using HttpHelper httpHelper = new HttpHelper(); + HttpResult httpResult = null; + int num = Tools.ToNetWorkInt(ConfigUtlis.getConfigValue("comNetworkConfig"), 0); + if (openVpn && num < 3) + { + bool flag = false; + int num2 = 1; + List proxyAccountModel = ProxyAccountCache.GetProxyAccountModel(ProxyIp); + do + { + flag = false; + if (num == 0 || num == 1) + { + if (!string.IsNullOrEmpty(ProxyIp) && !ProxyRunService.CheckIpAlive(ProxyIp)) + { + ProxyIp = ""; + } + if (string.IsNullOrEmpty(ProxyIp)) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "正在获取代理IP..." + num2); + ProxyIp = ProxyRunService.getProxyIp(taskState, num2); + if (string.IsNullOrEmpty(ProxyIp)) + { + if (taskState.isRun) + { + break; + } + throw new Exception("停止执行"); + } + foreach (ProxyAccountModel item2 in proxyAccountModel) + { + item2.ProxyIp = ProxyIp; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "代理IP获取成功..." + num2); + } + if (ProxyIp.Split('|').Length == 4) + { + string[] array = ProxyIp.Split('|'); + WebProxy webProxy = new WebProxy(); + webProxy.Address = new Uri($"http://{array[0].Trim()}:{array[1].Trim()}"); + webProxy.Credentials = new NetworkCredential(array[2].Trim(), array[3].Trim()); + item.WebProxy = webProxy; + item.KeepAlive = false; + } + else if (!string.IsNullOrEmpty(ProxyIp)) + { + item.WebProxy = new WebProxy(ProxyIp); + } + } + else if (num == 2) + { + WebProxy webProxy2 = new WebProxy(); + webProxy2.Address = new Uri(string.Format("http://{0}:{1}", ConfigUtlis.getConfigValue("txtTpsHost"), ConfigUtlis.getConfigValue("txtTpsPort"))); + webProxy2.Credentials = new NetworkCredential(ConfigUtlis.getConfigValue("txtTpsUserName"), ConfigUtlis.getConfigValue("txtTpsPwd")); + item.WebProxy = webProxy2; + } + item.Timeout = 35000; + item.ReadWriteTimeout = 30000; + if (num2 >= 2) + { + item.KeepAlive = false; + } + httpResult = httpHelper.GetHtml(item); + if (httpResult.StatusCode != 0 && httpResult.StatusCode != (HttpStatusCode)441 && httpResult.StatusCode != HttpStatusCode.BadGateway && httpResult.StatusCode != HttpStatusCode.RequestTimeout && httpResult.StatusCode != HttpStatusCode.ServiceUnavailable && !(httpResult.Html == "操作已超时。")) + { + if ((item.Method == "POST" || item.Method == "PUT") && (httpResult.Html.Contains("如需帮助") || httpResult.Html.Contains("发生未知错误") || httpResult.Html.Contains("Page Not Found"))) + { + ProxyRunService.removeIp(ProxyIp); + flag = true; + ProxyIp = string.Empty; + } + } + else + { + ProxyRunService.removeIp(ProxyIp); + action?.Invoke(noticeKey, DisplyType.xinxi, "重新获取代理IP"); + flag = true; + ProxyIp = string.Empty; + } + if (proxyAccountModel.Count == 0 && !string.IsNullOrEmpty(ProxyIp)) + { + ProxyAccountCache.RestAllot(ProxyIp); + } + num2++; + if (num2 > 50) + { + httpResult = null; + break; + } + } + while (flag && taskState.isRun); + } + else + { + item.Timeout = 30000; + item.ReadWriteTimeout = 30000; + item.WebProxy = WebRequest.DefaultWebProxy; + httpResult = httpHelper.GetHtml(item); + } + if (httpResult == null) + { + item.Timeout = 30000; + item.ReadWriteTimeout = 30000; + item.WebProxy = WebRequest.DefaultWebProxy; + httpResult = httpHelper.GetHtml(item); + } + if (!string.IsNullOrEmpty(httpResult.Html)) + { + APIUtlis.AppRequestHtml(httpResult.Html); + APIUtlis.requestUrl = item.URL; + } + return httpResult; + } + + protected HttpResult getWebJsonContent(string url, string referer, WebHeaderCollection webHeader = null, string accept = "") + { + HttpItem httpItem = new HttpItem + { + URL = url, + Method = "GET", + UserAgent = userAgent, + Cookie = listCookie.toFonmtCookie(), + Accept = ((accept.Length == 0) ? "application/json; charset=utf-8" : accept), + ContentType = "application/json", + Referer = referer, + ProtocolVersion = HttpVersion.Version11, + KeepAlive = true, + ResultType = ResultType.String, + WebProxy = WebRequest.DefaultWebProxy + }; + if (webHeader != null) + { + httpItem.Header = webHeader; + } + addHander(httpItem); + HttpResult httpReuslt = GetHttpReuslt(httpItem); + addCookle(httpReuslt.Cookie); + return httpReuslt; + } + + private void addHander(HttpItem item) + { + item.Header.Add("Accept-Encoding", "gzip, deflate"); + item.Header.Add("Accept-Language", "zh-CN,zh;q=0.9"); + } + + public bool getSecuritydevices() + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Api-Key", apiKey); + webHeaderCollection.Add("Origin", "https://appleid.apple.com"); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\".Ga44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZrVglE4YcA.0Yz3ccbbJYMLgiPFU77qZoOSix5ezdstlYysrhsui6.KQnu7KOmaxf7_OLgiPFMJhHFW_jftckkCoqAkCoq0NUuAuyPB94UXuGlfUm0NUbNiqUU8j0OXTA6FL.26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD.erboFen_CvLG9mhORoVijvw2WwjftcktJJIqovE9XXTneNufuyPBDjaY2ftckuyPB884akHGOg4BKPQeOMNkDpyhpAI6.D_yg1wWF9kmFxTnx9MsFrAqJkL6f1BStQs.xLB.Tf1X3dlHbHzL0TFc4NO7TjKy4Iy6hSFQ_v9NA14WX3NlY5DuV25BNnOVgw24uy.Bp1\"}"); + HttpResult webJsonContent = getWebJsonContent("https://appleid.apple.com/account/manage/security/devices", "https://appleid.apple.com/account/manage", webHeaderCollection); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "设备获取成功"); + string[] allKeys = webJsonContent.Header.AllKeys; + foreach (string text in allKeys) + { + if (!handelDic.ContainsKey(text)) + { + handelDic.TryAddDic(text, webJsonContent.Header[text]); + } + else + { + handelDic[text] = webJsonContent.Header[text]; + } + } + if (_changeItem.isDeleteDevice) + { + Securitydevices securitydevices = Tools.Todejosn(webJsonContent.Html); + int num = 1; + Securitydevices.Device[] array = securitydevices?.devices; + foreach (Securitydevices.Device device in array) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "正在删除第" + num + "个设备"); + deleteDevice(device.id); + num++; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "设备删除完成"); + } + return true; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "设备获取异常"); + return false; + } + + public bool deleteDevice(string id) + { + bool flag = true; + DevicesInfo devices = GetDevices(id); + if (devices != null) + { + flag = devices.allowRemoval; + } + if (flag) + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Api-Key", apiKey); + webHeaderCollection.Add("Origin", "https://appleid.apple.com"); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"kOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_vLwoxVagokypZHgfLMC7AeLd7FmrpwoNN5uQ4s5uQ.gEx4xUC541jlS7spjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_vLwoxVagokypZHgfLMC7Afyz.sUAuyPBDK43xhDnmccbguaDeyjaY2ftckuyPBDjaY1HGOg3ZLQ0ISOHx_SVe.ZhyhpAI6.D_yg1wWF9kmFxTnx9MsFrAqJkL6f1BSkrk0ugN.xL4FeWD1RMfxN4t1VKWZWueUaBz1euVrAqJkL3A237lY5BSp55BNlan0Os5Apw.B8p\"}"); + HttpResult httpResult = DeleteWebContent("https://appleid.apple.com/account/manage/security/devices/" + id, "", "https://appleid.apple.com/account/manage", webHeaderCollection); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + if (Tools.Todejosn(httpResult.Html)?.removedDevice.id == id) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "设备删除成功"); + return true; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "设备删除失败"); + } + else + { + action?.Invoke(noticeKey, DisplyType.xinxi, "设备删除失败"); + } + } + else + { + action?.Invoke(noticeKey, DisplyType.xinxi, "改设备无法删除"); + } + return false; + } + + private DevicesInfo GetDevices(string id) + { + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + webHeaderCollection.Add("X-Apple-Api-Key", apiKey); + webHeaderCollection.Add("Origin", "https://appleid.apple.com"); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"kOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_vLwoxVagokypZHgfLMC7AeLd7FmrpwoNN5uQ4s5uQ.gEx4xUC541jlS7spjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_vLwoxVagokypZHgfLMC7Afyz.sUAuyPBDK43xhDnmccbguaDeyjaY2ftckuyPBDjaY1HGOg3ZLQ0ISOHx_S_0_B5zLu_dYV6HzL0TFc4NO7TjOy_Aw7Q_v9NA2pW5Dtfs.xLB.Tf1cKFb0DApyg1wWF9kmFxKEn5Ue2SFQ_v9NA14WX3NlY5DuY25BNnOVgw24uy.Ezi\"}"); + HttpResult webJsonContent = getWebJsonContent("https://appleid.apple.com/account/manage/security/devices/" + id, "https://appleid.apple.com/account/manage", webHeaderCollection); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + return Tools.Todejosn(webJsonContent.Html); + } + action?.Invoke(noticeKey, DisplyType.xinxi, "设备信息获取失败"); + return null; + } + + public bool RetrievePassword(bool _openVpn, AppleAcount acount, string newPwd, bool isCloseAuthen = false) + { + appleId = acount.appleId; + openVpn = _openVpn; + string url = "https://iforgot.apple.com/password/verify/appleid?language=" + language; + listCookie.Add(new CookieItem + { + Key = "idclient", + Value = "web" + }); + HttpResult webContent = getWebContent(url, ""); + if (webContent.StatusCode == HttpStatusCode.OK) + { + string text = new Regex(AppSysConfig.getConfig("Regex_RetrievePassword")).Match(AppleNetworkBase.GetToken(webContent.Html, "boot_args", "script")).Groups[1].Value.Replace("\"", "").Replace(":", "").Replace(" ", "") + .Trim(); + if (!string.IsNullOrEmpty(text)) + { + text = HttpUtility.UrlEncode(text); + return verifyAppleid(text, acount, newPwd, isCloseAuthen); + } + } + action?.Invoke(noticeKey, DisplyType.xinxi, "未知错误"); + return false; + } + + private bool verifyAppleid(string sstt, AppleAcount acount, string newPwd, bool isCloseAuthen) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "正在验证账号"); + string postData = "{\"id\":\"" + acount.appleId + "\"}"; + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"Vla44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA6FL.26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD0qhtd2q_gpjhO3f9p_nH1u_eH3BhxUC550ialT0iakA2zGUMnGWFfwMHDCQyFA2wv4qnvtCtNQNbXlo4V.lzXJJIneGffLMC7EZ3QHPBirTYKUowRslzRQqwSM2VSfTPFxdQCQvLG9mhORoVijvw2WwjftckvIz4jIskOtJJIqSI6KUMnGWpwoNSUC56MnGW87gq1HACVdVSJx_eOHW2UfSHolk2dUf.j7J1gBZEMgzH_y3Cmx_B4WugMKqhYjTLy.EKY.6ekcWqDv64IxN4t1VKWZWu_9zB_yPLuVrAqJkL3A237lhQwMAj9htsfHOrf8M2Lz4mvmfTT9oaSzevLzQW5BSsqpGj4b5UkA7YnlNUbNiqUYRbQOTxobrYUXhayIz40xuYIdnumKlroNCIAjKFCGWY5BOgkLT0XxU..3UM\"}"); + webHeaderCollection.Add("sstt", sstt); + HttpResult httpResult = postWebContent("https://iforgot.apple.com/password/verify/appleid", postData, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "不是有效的AppleId"); + AppSysConfig.proxyModels.Push(new ProxyModel2 + { + prixyIp = ProxyIp, + applyDate = DateTime.Now + }); + return false; + } + if (httpResult.StatusCode == HttpStatusCode.Found) + { + httpResult.Header.AllKeys.Contains("sstt"); + string redirectUrl = httpResult.RedirectUrl; + webHeaderCollection["X-Apple-I-FD-Client-Info"] = "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"cla44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA6FL.26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD0qhtd2q_gpjhO3f9p_nH1u_eH3BhxUC550ialT0iakA2zGUMnGWFfwMHDCQyFA2wv4qnvtCtNQNbXlo4V.lzXJJIneGffLMC7EZ3QHPBirTYKUowRslzRQqwSM2VSfTPFxdQCQvLG9mhORoVijvw2WwjftckvIz4jIskOtJJIqSI6KUMnGWpwoNSUC56MnGW87gq1HACVdVSJx_FevSK9jpidPNs0ojpVMZ90L5H6fqUdHz15tTma1kxLAevLlrjAU.6elV2pNJFv6SYXWyg1wWXKWZWu_JzK9zWvMJ5tTma1kWNNW5CfUXtStKjE4PIDxO9sPrsiMTKQnlLZnjxMPrvR7lYj5qeCsgsny0O3TTA2wv4qnwQZvQAriZywQwKgrmUscEjJPSDULHiDyY0eOSue0eBBNlYCa1nkBMfs.BJv\"}"; + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + HttpResult webJsonContent = getWebJsonContent(redirectUrl, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + if (isCloseAuthen) + { + if (redirectUrl.ToLower().StartsWith("https://iforgot.apple.com/password/verify/phone")) + { + sstt = webJsonContent.Header["sstt"]; + bool num = unenrollment(sstt, acount, newPwd); + if (num) + { + AppSysConfig.proxyModels.Push(new ProxyModel2 + { + prixyIp = ProxyIp, + applyDate = DateTime.Now + }); + } + return num; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "没有双重认证"); + AppSysConfig.proxyModels.Push(new ProxyModel2 + { + prixyIp = ProxyIp, + applyDate = DateTime.Now + }); + return false; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "正在获取重设方式"); + if (webJsonContent.Html.Contains("reset_password") && webJsonContent.Header.AllKeys.Contains("sstt")) + { + sstt = webJsonContent.Header["sstt"]; + webHeaderCollection["sstt"] = sstt; + webHeaderCollection["X-Apple-I-FD-Client-Info"] = "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"Vla44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA6FL.26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD0qhtd2q_gpjhO3f9p_nH1u_eH3BhxUC550ialT0iakA2zGUMnGWFfwMHDCQyFA2wv4qnvtCtNQNbXlo4V.lzXJJIneGffLMC7EZ3QHPBirTYKUowRslzRQqwSM2VSfTPFxdQCQvLG9mhORoVijvw2WwjftckvIz4jIskOtJJIqSI6KUMnGWpwoNSUC56MnGW87gq1HACVdVSJx_FdWvSihyhpAI6.D_yg1wWF9kmFxTnx9MsFrAqJkL6elSMPqDxkMk0ugN.xL43DlrNscUf.j7N_NO7TdKEpHjmg92RjOI0NFgBFY5pjlRiwerbXh8bTg_RCQwMAj9htsfHOryfhQxi3NlrYQK5wLROz.gXEE4WySXvOyCmSh_vrHUTCy9qQtEwJ6reCDbEf8M6UGVpBixK.p55BNlan0Os5Apw.1eB\"}"; + HttpResult httpResult2 = postWebContent("https://iforgot.apple.com/recovery/options", "{\"recoveryOption\":\"reset_password\"}", "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (httpResult2.StatusCode == HttpStatusCode.Found) + { + webJsonContent = getWebJsonContent(httpResult2.RedirectUrl, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (webJsonContent.StatusCode == HttpStatusCode.OK && !webJsonContent.Html.Contains("questions") && !webJsonContent.RedirectUrl.ToLower().StartsWith("https://iforgot.apple.com/password/verify/birthday")) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "没有重设密码的方式"); + return false; + } + } + } + if (!webJsonContent.Html.Contains("questions") && !webJsonContent.RedirectUrl.ToLower().StartsWith("https://iforgot.apple.com/password/verify/birthday")) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "没有重设密码的方式"); + return false; + } + sstt = webJsonContent.Header["sstt"]; + webHeaderCollection["sstt"] = sstt; + webHeaderCollection["X-Apple-I-FD-Client-Info"] = "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"cOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_0QnIpWvLUGvLG9mhORoVidPZW2AUMnGWVQdgMVQdg1kzoMpwoNJ9z4oYYLzZ1kzDlSgyyITL5q8sgEV18u1.BUs_43wuZPup_nH2t05oaYAhrcpMxE6DBUr5xj6KkuJ4jCEL6hOx6hO3f9p_nH1uzjkD6myjaY2hEwLxEY0b_GGEOpBSKxUC56MnGWpwoNSUC53ZXnN87gq1a0p.3oEN8VxfxQeLaD.SAxN4t1VKWZWuxbuJjkWiMgdVgEL3NvdjV2pNk0ug97SYillFUL0TFc4NO7TdNMsFjn0icCmx_B4W1kl1BNlY6SGWY5BOgkLT0XxU..7TF\"}"; + if (!webJsonContent.Html.Contains("questions")) + { + return VerifyBirthday(webJsonContent.RedirectUrl, acount, newPwd, webHeaderCollection); + } + HttpResult httpResult3 = postWebContent("https://iforgot.apple.com/password/authenticationmethod", "{\"type\":\"questions\"}", "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (httpResult3.StatusCode == HttpStatusCode.Found) + { + return VerifyBirthday(httpResult3.RedirectUrl, acount, newPwd, webHeaderCollection); + } + } + } + if (httpResult.StatusCode != HttpStatusCode.BadRequest && httpResult.StatusCode != HttpStatusCode.Unauthorized) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "未知错误"); + return false; + } + ServiceErrorsModel serviceErrorsModel = new JavaScriptSerializer().Deserialize(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + action?.Invoke(noticeKey, DisplyType.xinxi, "请求失败"); + return false; + } + + public bool unenrollment(string sstt, AppleAcount acount, string newPwd) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "正在关闭双重认证"); + WebHeaderCollection webHeaderCollection = new WebHeaderCollection(); + webHeaderCollection.Add("X-Apple-I-FD-Client-Info", "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"sOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_2QnI9fhOVvTpZHgfLMC7AeLd7FmrpwoNN5uQ4s5uQ.gEx4xUC541jlS7spjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_2QnI9fhOVvTpZHgfLMC7Afyz.sUAuyPBDozlQoyB5TK43xbJlpMpwoNSUC56MnGWpwoNHHACVZXnN9PMeQe536OMJhyhpAI6.D_yg1wWF9kmFxTnx9MsFrAqJkL6f1BSork0ugN.xL4FeWD9Sqyg1wWF9kmFxH_Ud1zKqicCmx_B4W1kl1BNlY6SGWY5BOgkLT0XxU..0jY\"}"); + webHeaderCollection.Add("sstt", sstt); + webHeaderCollection.Add("X-Requested-With", "XMLHttpRequest"); + HttpResult webContent = getWebContent("https://iforgot.apple.com/password/verify/phone", "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (webContent.StatusCode == HttpStatusCode.OK) + { + sstt = new Regex(AppSysConfig.getConfig("Regex_unenrollment")).Match(AppleNetworkBase.GetToken(webContent.Html, "boot_args", "script")).Groups[1].Value.Replace("\"", "").Replace(":", "").Replace(" ", "") + .Trim(); + if (!string.IsNullOrEmpty(sstt)) + { + sstt = HttpUtility.UrlEncode(sstt); + webHeaderCollection["sstt"] = sstt; + webHeaderCollection["X-Apple-I-FD-Client-Info"] = "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"sOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_2QnI9fhOVvTpZHgfLMC7AeLd7FmrpwoNN5uQ4s5uQ.gEx4xUC541jlS7spjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_2QnI9fhOVvTpZHgfLMC7Afyz.sUAuyPBDozlQoyB5TK43xbJlpMpwoNSUC56MnGWpwoNHHACVZXnN9PMeQe56e.eIMurJhBR.uMukAm4.f282pvEodUW2RjOI0NTg7lrIU.6elV2pNK1e3sdrQukAm4.f282p9KyZAw7Ae2RjOI0NFgBFY5BNlrJNNlY5QB4bVNjMk.DBF\"}"; + HttpResult httpResult = postWebContent("https://iforgot.apple.com/password/verify/phone/unenrollment", "", "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (httpResult.StatusCode == HttpStatusCode.NotFound) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "该账户双重无法关闭"); + return false; + } + if (httpResult.StatusCode == HttpStatusCode.Found) + { + HttpResult webJsonContent = getWebJsonContent(httpResult.RedirectUrl, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + sstt = webJsonContent.Header["sstt"]; + webHeaderCollection["sstt"] = sstt; + webHeaderCollection["X-Apple-I-FD-Client-Info"] = "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"sOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_2QnI9fhOVvTpZHgfLMC7AeLd7FmrpwoNN5uQ4s5uQ.gEx4xUC541jlS7spjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_2QnI9fhOVvTpZHgfLMC7Afyz.sUAuyPBDozlQoyB5TK43xbJlpMpwoNSUC56MnGWpwoNHHACVZXnN9PMeQf9PKBeYMurJhBR.uMukAm4.f282pvEodUW2RjOI0NTg7lrIU.6elV2pNK1e3sdlNUf.j7N_NO7TdKEyWyOCp0iMgdVg7L57GY5BNveBBNlYCa1nkBMfs.2gi\"}"; + HttpResult httpResult2 = postWebContent("https://iforgot.apple.com/unenrollment", "", "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (httpResult2.StatusCode == HttpStatusCode.Found) + { + sstt = httpResult2.Header["sstt"]; + webHeaderCollection["sstt"] = sstt; + webHeaderCollection["X-Apple-I-FD-Client-Info"] = "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"sOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_2QnI9fhOVvTpZHgfLMC7AeLd7FmrpwoNN5uQ4s5uQ.gEx4xUC541jlS7spjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_2QnI9fhOVvTpZHgfLMC7Afyz.sUAuyPBDozlQoyB5TK43xbJlpMpwoNSUC56MnGWpwoNHHACVZXnN9PMeQf9PKBeYMurJhBR.uMukAm4.f282pvEodUW2RjOI0NTg7lrIU.6elV2pNK1e3sdlNUf.j7N_NO7TdKEyWyOCp0iMgdVg7L57GY5BNveBBNlYCa1nkBMfs.2gi\"}"; + action?.Invoke(noticeKey, DisplyType.xinxi, "正在验证生日信息"); + HttpResult webJsonContent2 = getWebJsonContent(httpResult2.RedirectUrl, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (webJsonContent2.StatusCode == HttpStatusCode.OK) + { + sstt = webJsonContent2.Header["sstt"]; + webHeaderCollection["sstt"] = sstt; + string[] array = acount.birthday.Split('-'); + string postData = "{\"monthOfYear\":\"" + array[1] + "\",\"dayOfMonth\":\"" + array[2] + "\",\"year\":\"" + array[0] + "\"}"; + HttpResult httpResult3 = postWebContent("https://iforgot.apple.com/unenrollment/verify/birthday", postData, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (httpResult3.StatusCode != HttpStatusCode.Found) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "生日错误"); + return false; + } + HttpResult webJsonContent3 = getWebJsonContent(httpResult3.RedirectUrl, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (webJsonContent3.StatusCode != HttpStatusCode.OK) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "验证密保获取失败"); + return false; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "正在验证密保"); + sstt = webJsonContent3.Header["sstt"]; + webHeaderCollection["sstt"] = sstt; + AothQuestions aothQuestions = Tools.Todejosn(webJsonContent3.Html); + string[] array2 = new string[3] { acount.appleQt1, acount.appleQt2, acount.appleQt3 }; + AothQuestions aothQuestions2 = new AothQuestions(); + aothQuestions2.questions = new AothQuestions.Question[2]; + int num = 0; + AothQuestions.Question[] questions = aothQuestions.questions; + foreach (AothQuestions.Question question in questions) + { + string answer = array2[Tools.getAnwerId_Index(question.id) - 1]; + aothQuestions2.questions[num] = new AothQuestions.Question + { + id = question.id, + answer = answer, + number = question.number, + question = question.question + }; + num++; + } + string postData2 = Tools.Toenjson(aothQuestions2); + HttpResult httpResult4 = postWebContent("https://iforgot.apple.com/unenrollment/verify/questions", postData2, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeaderCollection); + if (httpResult4.StatusCode == HttpStatusCode.Found) + { + return unenrollmentRestPwd(httpResult4.RedirectUrl, newPwd, webHeaderCollection); + } + if (httpResult4.StatusCode == HttpStatusCode.BadRequest) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "密保错误"); + return false; + } + } + } + } + action?.Invoke(noticeKey, DisplyType.xinxi, "网络异常"); + } + else + { + action?.Invoke(noticeKey, DisplyType.xinxi, "网络异常"); + } + } + else + { + action?.Invoke(noticeKey, DisplyType.xinxi, "双重手机号码认证失败"); + } + } + else + { + action?.Invoke(noticeKey, DisplyType.xinxi, "双重手机号码获取失败"); + } + return false; + } + + private bool unenrollmentRestPwd(string RedirectUrl, string newPwd, WebHeaderCollection webHeader) + { + HttpResult webJsonContent = getWebJsonContent(RedirectUrl, "https://iforgot.apple.com/unenrollment/verify/appleid?language=" + language, webHeader); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + string value = webJsonContent.Header["sstt"]; + webHeader["sstt"] = value; + webHeader["X-Apple-I-FD-Client-Info"] = "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"VOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_vLwoxVagokypZHgfLMC7AeLd7FmrpwoNN5uQ4s5uQ.gEx4xUC541jlS7spjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_vLwoxVagokypZHgfLMC7Afyz.sUAuyPBDozlQoyB5TK43xbJlpMpwoNSUC56MnGWpwoNHHACVZXnN9QeJc7IS38_MurJhBR.uMukAm4.f282pvEodUW2RjOI0NTg7lr2U.6elV2pNK1e3tGrMukAm4.f282p_U_BzuAe2RjOI0NFgBFY5BNlrJNNlY5QB4bVNjMk.4IF\"}"; + action?.Invoke(noticeKey, DisplyType.xinxi, "正在设置新密码"); + HttpResult httpResult = postWebContent("https://iforgot.apple.com/unenrollment/reset", "{\"password\":\"" + newPwd + "\"}", "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (httpResult.StatusCode == HttpStatusCode.BadRequest || httpResult.StatusCode == HttpStatusCode.Unauthorized) + { + ServiceErrorsModel serviceErrorsModel = new JavaScriptSerializer().Deserialize(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + action?.Invoke(noticeKey, DisplyType.xinxi, "请求失败"); + return false; + } + if (httpResult.StatusCode == (HttpStatusCode)260) + { + action?.Invoke(noticeKey, DisplyType.mima, newPwd); + action?.Invoke(noticeKey, DisplyType.xinxi, "双重关闭成功,密码重置完成"); + return true; + } + } + action?.Invoke(noticeKey, DisplyType.xinxi, "未知错误"); + return false; + } + + private bool VerifyBirthday(string RedirectUrl, AppleAcount acount, string newPwd, WebHeaderCollection webHeader) + { + string text = ""; + action?.Invoke(noticeKey, DisplyType.xinxi, "正在验证生日"); + HttpResult webJsonContent = getWebJsonContent(RedirectUrl, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + text = webJsonContent.Header["sstt"]; + webHeader["sstt"] = text; + string[] array = acount.birthday.Split('-'); + string postData = "{\"monthOfYear\":\"" + array[1] + "\",\"dayOfMonth\":\"" + array[2] + "\",\"year\":\"" + array[0] + "\"}"; + HttpResult httpResult = postWebContent("https://iforgot.apple.com/password/verify/birthday", postData, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (httpResult.StatusCode != HttpStatusCode.Found) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "生日错误"); + return false; + } + if (!httpResult.RedirectUrl.ToLower().StartsWith("https://iforgot.apple.com/password/authenticationmethod")) + { + return VerifyQuestions(httpResult.RedirectUrl, acount, newPwd, webHeader); + } + webHeader["X-Apple-I-FD-Client-Info"] = "{\"U\":\"" + userAgent + "\",\"L\":\"zh-CN\",\"Z\":\"GMT+08:00\",\"V\":\"1.1\",\"F\":\"cOa44j1e3NlY5BSo9z4ofjb75PaK4Vpjt.gEngMQEjZr_WhXTA2s.XTVV26y8GGEDd5ihORoVyFGh8cmvSuCKzIlnY6xljQlpRD_0QnIpWvLUGvLG9mhORoVidPZW2AUMnGWVQdgMVQdg1kzoMpwoNJ9z4oYYLzZ1kzDlSgyyITL5q8sgEV18u1.BUs_43wuZPup_nH2t05oaYAhrcpMxE6DBUr5xj6KkuJ4jCEL6hOx6hO3f9p_nH1uzjkD6myjaY2hEwLxEY0b_GGEOpBSKxUC56MnGWpwoNSUC53ZXnN87gq1a0p.3oEN8VxfxQeLaD.SAxN4t1VKWZWuxbuJjkWiMgdVgEL3NvdjV2pNk0ug97SYillFUL0TFc4NO7TdNMsFjn0icCmx_B4W1kl1BNlY6SGWY5BOgkLT0XxU..7TF\"}"; + HttpResult webJsonContent2 = getWebJsonContent(httpResult.RedirectUrl, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (webJsonContent2.StatusCode != HttpStatusCode.OK) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "密保获取失败2"); + return false; + } + if (!webJsonContent2.Html.Contains("questions")) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "没有重设密码的方式#2"); + return false; + } + text = webJsonContent2.Header["sstt"]; + webHeader["sstt"] = text; + HttpResult httpResult2 = postWebContent("https://iforgot.apple.com/password/authenticationmethod", "{\"type\":\"questions\"}", "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (httpResult2.StatusCode == HttpStatusCode.Found) + { + return VerifyQuestions(httpResult2.RedirectUrl, acount, newPwd, webHeader); + } + } + return false; + } + + public bool VerifyQuestions(string RedirectUrl, AppleAcount acount, string newPwd, WebHeaderCollection webHeader) + { + string text = ""; + HttpResult webJsonContent = getWebJsonContent(RedirectUrl, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "正在验证密保"); + text = webJsonContent.Header["sstt"]; + webHeader["sstt"] = text; + AothQuestions aothQuestions = Tools.Todejosn(webJsonContent.Html); + string[] array = new string[3] { acount.appleQt1, acount.appleQt2, acount.appleQt3 }; + AothQuestions aothQuestions2 = new AothQuestions(); + aothQuestions2.questions = new AothQuestions.Question[2]; + int num = 0; + AothQuestions.Question[] questions = aothQuestions.questions; + foreach (AothQuestions.Question question in questions) + { + string answer = array[Tools.getAnwerId_Index(question.id) - 1]; + aothQuestions2.questions[num] = new AothQuestions.Question + { + id = question.id, + answer = answer, + number = question.number, + question = question.question + }; + num++; + } + string postData = Tools.Toenjson(aothQuestions2); + HttpResult httpResult = postWebContent("https://iforgot.apple.com/password/verify/questions", postData, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (httpResult.StatusCode == HttpStatusCode.Found) + { + HttpResult webJsonContent2 = getWebJsonContent(httpResult.RedirectUrl, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (webJsonContent2.StatusCode == HttpStatusCode.Found) + { + text = httpResult.Header["sstt"]; + webHeader["sstt"] = text; + return restPwd(webJsonContent2.RedirectUrl, newPwd, webHeader); + } + if (webJsonContent2.StatusCode == HttpStatusCode.OK && webJsonContent2.Html.Contains("unlock_account")) + { + text = webJsonContent2.Header["sstt"]; + webHeader["sstt"] = text; + action?.Invoke(noticeKey, DisplyType.xinxi, "正在解锁密码"); + HttpResult httpResult2 = postWebContent("https://iforgot.apple.com/password/reset/options", "{\"type\":\"unlock_account\"}", "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (httpResult2.StatusCode == HttpStatusCode.Found) + { + HttpResult webJsonContent3 = getWebJsonContent(httpResult2.RedirectUrl, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (webJsonContent3.StatusCode == HttpStatusCode.OK) + { + text = webJsonContent3.Header["sstt"]; + webHeader["sstt"] = text; + HttpResult httpResult3 = postWebContent("https://iforgot.apple.com/password/unlock/forgot", "{}", "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (httpResult3.StatusCode == HttpStatusCode.Found) + { + return restPwd(httpResult3.RedirectUrl, newPwd, webHeader); + } + } + } + } + } + else if (httpResult.StatusCode == HttpStatusCode.BadRequest) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "密保错误"); + return false; + } + return false; + } + action?.Invoke(noticeKey, DisplyType.xinxi, "验证密保获取失败"); + return false; + } + + private bool restPwd(string RedirectUrl, string newPwd, WebHeaderCollection webHeader) + { + HttpResult webJsonContent = getWebJsonContent(RedirectUrl, "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (webJsonContent.StatusCode == HttpStatusCode.OK) + { + string value = webJsonContent.Header["sstt"]; + webHeader["sstt"] = value; + action?.Invoke(noticeKey, DisplyType.xinxi, "正在设置新密码"); + HttpResult httpResult = postWebContent("https://iforgot.apple.com/password/reset", "{\"password\":\"" + newPwd + "\"}", "https://iforgot.apple.com/password/verify/appleid?language=" + language, webHeader); + if (httpResult.StatusCode == HttpStatusCode.BadRequest || httpResult.StatusCode == HttpStatusCode.Unauthorized) + { + ServiceErrorsModel serviceErrorsModel = new JavaScriptSerializer().Deserialize(httpResult.Html); + if (serviceErrorsModel != null) + { + if (serviceErrorsModel.validationErrors != null && serviceErrorsModel.validationErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.validationErrors[0].message); + return false; + } + if (serviceErrorsModel.service_errors != null && serviceErrorsModel.service_errors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.service_errors[0].message); + return false; + } + if (serviceErrorsModel.serviceErrors != null && serviceErrorsModel.serviceErrors.Length != 0) + { + action?.Invoke(noticeKey, DisplyType.xinxi, "失败,异常:" + serviceErrorsModel.serviceErrors[0].message); + return false; + } + } + action?.Invoke(noticeKey, DisplyType.xinxi, "请求失败"); + return false; + } + if (httpResult.StatusCode == (HttpStatusCode)260) + { + action?.Invoke(noticeKey, DisplyType.mima, newPwd); + action?.Invoke(noticeKey, DisplyType.xinxi, "密码重置完成"); + AppSysConfig.proxyModels.Push(new ProxyModel2 + { + prixyIp = ProxyIp, + applyDate = DateTime.Now + }); + return true; + } + } + action?.Invoke(noticeKey, DisplyType.xinxi, "未知错误"); + return false; + } + + private void addCookle(string cookies) + { + if (cookies == null || string.IsNullOrEmpty(cookies.Trim())) + { + return; + } + foreach (CookieItem item in HttpCookieHelper.GetCookieList(cookies)) + { + if (!(item.Key == "Max-Age") && !(item.Key == "Path") && !(item.Key == "Expires") && !(item.Key == "domain") && !(item.Key == "Domain") && !(item.Key == "path")) + { + CookieItem cookieItem = listCookie.Where((CookieItem c) => c.Key == item.Key).FirstOrDefault(); + if (cookieItem == null) + { + listCookie.Add(item); + } + else if (!string.IsNullOrEmpty(item.Value.Trim())) + { + cookieItem.Value = item.Value.Trim(); + } + } + } + } + } +} diff --git a/AppleBatch_June/AppleUtlis.cs b/AppleBatch_June/AppleUtlis.cs new file mode 100644 index 0000000..a1b017c --- /dev/null +++ b/AppleBatch_June/AppleUtlis.cs @@ -0,0 +1,557 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Data; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Web; +using AppleBatch_June.Domain; + +namespace AppleBatch_June +{ + public class AppleUtlis + { + private static string[] UserAgents = new string[20] + { + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4098.3 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3872.400 QQBrowser/10.8.4455.400", "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1", + "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 LBBROWSER", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/2.0 Safari/536.11", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36", "Opera/9.80 (Windows NT 6.1; WOW64; U; en) Presto/2.10.229 Version/11.62", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0", "Mozilla/5.0 (compatible; WOW64; MSIE 10.0; Windows NT 6.2)" + }; + + public static DataTable dataTable_0 { get; set; } + + public static DataTable dataTable_2 { get; set; } + + public static string GetAreaByArea(string area) + { + LoadCountryCode(); + IEnumerator enumerator = null; + if (string.IsNullOrEmpty(area)) + { + return string.Empty; + } + string result = area; + try + { + foreach (DataRow row in dataTable_0.Rows) + { + string strB = row["area"].ToString(); + if (string.Compare(area, strB, ignoreCase: true) == 0) + { + result = row["name"].ToString(); + } + } + return result; + } + finally + { + if (enumerator is IDisposable) + { + (enumerator as IDisposable).Dispose(); + } + } + } + + public static string GetAreaByCode(string code, bool addArer = false) + { + LoadCountryCode(); + IEnumerator enumerator = null; + if (string.IsNullOrEmpty(code)) + { + return string.Empty; + } + string result = code; + try + { + foreach (DataRow row in dataTable_0.Rows) + { + string strB = row["code"].ToString(); + if (string.Compare(code, strB, ignoreCase: true) == 0) + { + result = ((!addArer) ? row["name"].ToString() : (row["area"].ToString().ToUpper() + "-" + row["name"].ToString())); + } + } + return result; + } + finally + { + if (enumerator is IDisposable) + { + (enumerator as IDisposable).Dispose(); + } + } + } + + public static string GetNameBydisplayName(string displayName) + { + LoadCountryCode(); + IEnumerator enumerator = null; + if (string.IsNullOrEmpty(displayName)) + { + return string.Empty; + } + string result = displayName; + try + { + foreach (DataRow row in dataTable_0.Rows) + { + string strB = row["displayName"].ToString(); + if (string.Compare(displayName, strB, ignoreCase: true) == 0) + { + result = row["area"].ToString().ToUpper() + "-" + row["name"].ToString(); + } + } + return result; + } + finally + { + if (enumerator is IDisposable) + { + (enumerator as IDisposable).Dispose(); + } + } + } + + public static string GetAreaCodeByCode(string code) + { + LoadCountryCode(); + IEnumerator enumerator = null; + if (string.IsNullOrEmpty(code)) + { + return string.Empty; + } + string result = code; + try + { + foreach (DataRow row in dataTable_0.Rows) + { + string strB = row["code"].ToString(); + if (string.Compare(code, strB, ignoreCase: true) == 0) + { + result = row["area"].ToString(); + } + } + return result; + } + finally + { + if (enumerator is IDisposable) + { + (enumerator as IDisposable).Dispose(); + } + } + } + + public static string GetStoreIdByCode(string code) + { + LoadCountryCode(); + IEnumerator enumerator = null; + if (string.IsNullOrEmpty(code)) + { + return string.Empty; + } + string result = code; + try + { + foreach (DataRow row in dataTable_0.Rows) + { + string strB = row["code"].ToString(); + if (string.Compare(code, strB, ignoreCase: true) == 0) + { + result = row["description"].ToString(); + } + } + return result; + } + finally + { + if (enumerator is IDisposable) + { + (enumerator as IDisposable).Dispose(); + } + } + } + + public static string GetCountryCodeByArea(string area) + { + LoadCountryCode(); + IEnumerator enumerator = null; + if (string.IsNullOrEmpty(area)) + { + return string.Empty; + } + string result = area; + try + { + foreach (DataRow row in dataTable_0.Rows) + { + string strB = row["area"].ToString(); + if (string.Compare(area, strB, ignoreCase: true) == 0) + { + result = row["code"].ToString(); + } + } + return result; + } + finally + { + if (enumerator is IDisposable) + { + (enumerator as IDisposable).Dispose(); + } + } + } + + public static void LoadCountryCode2() + { + if (dataTable_2 == null || dataTable_2.Rows.Count == 0) + { + dataTable_2 = new CountryCodeData().getDataBriefTable(); + } + } + + private static string GetAreaByStoreId(string storeId) + { + IEnumerator enumerator = null; + if (string.IsNullOrEmpty(storeId)) + { + return string.Empty; + } + string result = string.Empty; + try + { + enumerator = dataTable_2.Rows.GetEnumerator(); + while (enumerator.MoveNext()) + { + DataRow dataRow = (DataRow)enumerator.Current; + string strB = dataRow["id"].ToString(); + if (string.Compare(storeId, strB, ignoreCase: true) == 0) + { + result = dataRow["area"].ToString(); + } + } + return result; + } + finally + { + if (enumerator is IDisposable) + { + (enumerator as IDisposable).Dispose(); + } + } + } + + public static string GetAreaByDescription(string description) + { + LoadCountryCode2(); + string storeId = description; + int num = description.IndexOf("-"); + if (num < 0) + { + num = description.IndexOf(","); + } + if (num > -1) + { + storeId = description.Substring(0, num); + } + return GetAreaByStoreId(storeId); + } + + public static List restTxt(string patch) + { + try + { + if (!string.IsNullOrEmpty(patch) && File.Exists(patch)) + { + return (from c in Tools.readFile(patch, Encoding.UTF8).Split('\n') + where !string.IsNullOrEmpty(c) && (c.Contains("itunes.apple.com") || c.Contains("apps.apple.com") || c.Contains("music.apple.com") || c.Contains("books.apple.com")) + select c).ToList(); + } + } + catch (Exception) + { + } + return new List(); + } + + public static void LoadCountryCode() + { + if (dataTable_0 == null || dataTable_0.Rows.Count == 0) + { + dataTable_0 = new CountryCodeData().getDataTable(); + LoadCountryCode2(); + } + } + + public static string Html2Text(string htmlStr, bool isEmorp = true) + { + if (string.IsNullOrEmpty(htmlStr)) + { + return ""; + } + htmlStr = HttpUtility.HtmlDecode(htmlStr); + string pattern = "]*?>[\\s\\S]*?<\\/style>"; + string pattern2 = "]*?>[\\s\\S]*?<\\/script>"; + string pattern3 = "<[^>]+>"; + htmlStr = Regex.Replace(htmlStr, pattern, ""); + htmlStr = Regex.Replace(htmlStr, pattern2, ""); + htmlStr = Regex.Replace(htmlStr, pattern3, ""); + if (isEmorp) + { + htmlStr = Regex.Replace(htmlStr, "\\s*|\t|\r|\n", ""); + htmlStr = htmlStr.Replace(" ", ""); + } + htmlStr = htmlStr.Replace("\"", ""); + return htmlStr.Trim(); + } + + public static List accountInput(string input, string[] guidFields = null, bool removePwd = false, bool isdeWeight = true, bool forceAotuIdent = false) + { + List list = new List(); + string config = AppSysConfig.getConfig("AccountInputRegex"); + string configValue = ConfigUtlis.getConfigValue("txtSeparator"); + string configValue2 = ConfigUtlis.getConfigValue("ckReplace"); + string text = ConfigUtlis.getConfigValue("ckAotuIdent"); + if (forceAotuIdent) + { + text = "True"; + } + Dictionary dictionary = new Dictionary(); + string[] array = input.Split('\n'); + foreach (string text2 in array) + { + if (string.IsNullOrEmpty(text2)) + { + continue; + } + string text3 = text2.Trim(); + string pattern = "(\\d{4})(-)(\\d{1,2})(-)(\\d{1,2})"; + string text4 = Regex.Match(text3, config).Value; + string value = Regex.Match(text3, pattern).Value; + if (string.IsNullOrEmpty(value)) + { + pattern = "(\\d{4})(/)(\\d{1,2})(/)(\\d{1,2})"; + value = Regex.Match(text3, pattern).Value; + } + char separator = '-'; + bool flag = false; + if (!string.IsNullOrEmpty(configValue) && configValue2 == "True") + { + separator = configValue[0]; + flag = true; + } + string text5 = text3; + if (!string.IsNullOrEmpty(value)) + { + text5 = text3.Trim().Replace(value, ""); + } + if (!text5.Contains("\t") && !text5.Contains(separator.ToString())) + { + text5 = text5.Replace(" ", separator.ToString()); + } + text5 = text5.Trim().Replace("\t", separator.ToString()).Replace("\r", ""); + if (text != "False") + { + text5 = text5.Replace("账号:", "").Replace("密码:", "").Replace("问题1:", "") + .Replace("问题2:", "") + .Replace("问题3:", "") + .Replace("密码", "") + .Replace("密保:", "") + .Replace("密保", "") + .Replace("朋友", "") + .Replace("问题1", "") + .Replace("问题2", "") + .Replace("问题3", "") + .Replace("工作", "") + .Replace("父母", "") + .Replace("手机号码", ""); + } + if (!string.IsNullOrEmpty(text4) && text4.Contains(".") && !(text == "False")) + { + if (text5.Length > text4.Length) + { + text5 = text5.Substring(text4.Length); + } + } + else + { + text4 = ((!text5.Contains("----") || flag) ? text5.Split(separator)[0] : text5.Replace("----", "/").Split('/')[0]); + if (text5.Length > text4.Length) + { + text5 = text5.Substring(text4.Length); + } + } + if (text4 == "xxxx@xxx.com") + { + continue; + } + string[] array2 = (from c in text5.Replace("[-]", "{\0}").Replace("{-}", "{\0}").Split(separator) + where !string.IsNullOrEmpty(c.Trim()) + select c.Replace("{\0}", separator.ToString())).ToArray(); + if (array2.Length == 0 || array2[0].Length < 1) + { + continue; + } + AppleAcount appleAcount = new AppleAcount(); + appleAcount.sourceInputData = text2; + appleAcount.appleId = text4.Trim(); + if (!removePwd) + { + appleAcount.applePwd = array2[0].Trim().Split(' ')[0]; + if (array2.Length >= 4) + { + appleAcount.appleQt1 = array2[1].Trim(); + appleAcount.appleQt2 = array2[2].Trim(); + appleAcount.appleQt3 = array2[3].Trim(); + string text6 = ""; + for (int j = 4; j < array2.Length; j++) + { + text6 = text6 + array2[j] + "-"; + } + appleAcount.overflow = ((text6.Length > 0) ? text6.TrimEnd('-') : ""); + } + else + { + string text7 = ""; + for (int k = 1; k < array2.Length; k++) + { + text7 = text7 + array2[k] + "-"; + } + appleAcount.overflow = ((text7.Length > 0) ? text7.TrimEnd('-') : ""); + } + } + else + { + appleAcount.applePwd = ""; + if (array2.Length >= 3) + { + appleAcount.appleQt1 = array2[0].Trim(); + appleAcount.appleQt2 = array2[1].Trim(); + appleAcount.appleQt3 = array2[2].Trim(); + string text8 = ""; + for (int l = 3; l < array2.Length; l++) + { + text8 = text8 + array2[l] + "-"; + } + appleAcount.overflow = ((text8.Length > 0) ? text8.TrimEnd('-') : ""); + } + else + { + string text9 = ""; + for (int m = 0; m < array2.Length; m++) + { + text9 = text9 + array2[m] + "-"; + } + appleAcount.overflow = ((text9.Length > 0) ? text9.TrimEnd('-') : ""); + } + } + appleAcount.birthday = value; + if (guidFields != null && guidFields.Length != 0) + { + StringBuilder stringBuilder = new StringBuilder(); + foreach (string name in guidFields) + { + object obj = appleAcount.GetType().GetProperty(name)?.GetValue(appleAcount); + if (obj != null && obj is string) + { + stringBuilder.Append((obj as string) + "|"); + } + } + if (stringBuilder.Length > 0) + { + appleAcount.lvItemGuid = Tools.GetMD5_32(stringBuilder.ToString()); + } + else + { + appleAcount.lvItemGuid = Tools.GetMD5_32(Tools.Toenjson(appleAcount)); + } + } + else + { + appleAcount.lvItemGuid = Tools.GetMD5_32(Tools.Toenjson(appleAcount)); + } + if (isdeWeight) + { + if (!dictionary.TryGetValue(appleAcount.appleId, out var _)) + { + dictionary.Add(appleAcount.appleId, appleAcount.appleId); + list.Add(appleAcount); + } + } + else + { + list.Add(appleAcount); + } + } + return list; + } + + public static string getAppleWenUserAgent() + { + int num = new Random(Guid.NewGuid().GetHashCode()).Next(0, UserAgents.Length); + return UserAgents[num]; + } + + public static DateTime toDate(string invoicedate) + { + byte[] bytes = new byte[2] { 194, 160 }; + string @string = Encoding.GetEncoding("UTF-8").GetString(bytes); + string text = invoicedate.ToUpper().Replace("JAN", "1").Replace("FEB", "2") + .Replace("MAR", "3") + .Replace("APR", "4") + .Replace("MAY", "5") + .Replace("JUN", "6") + .Replace("JUL", "7") + .Replace("AUG", "8") + .Replace("SEP", "9") + .Replace("OCT", "10") + .Replace("NOV", "11") + .Replace("DEC", "12") + .Replace(' ', '-') + .Replace(@string, "-") + .Replace(",", ""); + string text2 = ""; + string[] array = text.Split('-'); + foreach (string text3 in array) + { + text2 = ((text3.Length > 1) ? (text2 + text3 + "-") : (text2 + text3.PadLeft(2, '0') + "-")); + } + text2 = text2.TrimEnd('-'); + DateTime result = DateTime.Now; + try + { + result = DateTime.ParseExact(text2, "MM-dd-yyyy", CultureInfo.InvariantCulture); + return result; + } + catch (Exception) + { + return result; + } + } + + public static List getYears(Dictionary obj, int selectIndex) + { + List list = new List(); + foreach (object item in obj["data"]["attributes"]["dates"]["years"]) + { + foreach (string key in ((Dictionary)(dynamic)item).Keys) + { + if (selectIndex == 0) + { + if (key != "last90Days") + { + list.Add(key + "-all"); + } + } + else if (key == "last90Days") + { + list.Add(key); + } + } + } + return list; + } + } +} diff --git a/AppleBatch_June/BaseForm.cs b/AppleBatch_June/BaseForm.cs new file mode 100644 index 0000000..b70f834 --- /dev/null +++ b/AppleBatch_June/BaseForm.cs @@ -0,0 +1,471 @@ +using System; +using System.Drawing; +using System.Net; +using System.Text; +using System.Threading; +using System.Windows.Forms; +using AppleBatch_June.ExecuteTasks; +using AppleBatch_June.Forms; +using AppleBatch_June.Model; +using AppleBatch_June.StartTaskModel; +using AppleBatch_June.Utils; +using DotNet.Utilities; +using Microsoft.VisualBasic; + +namespace AppleBatch_June +{ + public class BaseForm : Form + { + private ListView lvLogList; + + protected ITaskRunState taskState { get; set; } + + public virtual string TaskName { get; set; } + + protected ListView listData { get; set; } + + protected Button startBtn { get; set; } + + protected Label labCout { get; set; } + + public BaseForm() + { + TaskName = "BaseForm"; + } + + public BaseForm(string _taskName) + { + TaskName = _taskName; + } + + public BaseForm(string _taskName, ITaskRunState _taskState) + { + TaskName = _taskName; + base.FormClosing += BaseForm_FormClosing; + if (_taskState == null) + { + taskState = new BaseFormTaskRunState(TaskName); + } + else + { + taskState = _taskState; + } + } + + public void asynTaskRunState(ITaskRunState state) + { + } + + protected virtual void BaseForm_FormClosing(object sender, FormClosingEventArgs e) + { + if (taskState.TaskIsRun && MessageBox.Show("该任务在运行,确定退出吗?", "提示", MessageBoxButtons.OKCancel) != DialogResult.OK) + { + e.Cancel = true; + return; + } + taskState.TaskIsRun = false; + taskState.Stop(); + } + + public void InitLv(ListView _lvLogList) + { + if (_lvLogList != null) + { + lvLogList = _lvLogList; + lvLogList.ColumnClick += lv_ColumnClick; + } + } + + public void BindMenuPaste(RichTextBox obj) + { + ContextMenuStrip contextMenuStrip = new ContextMenuStrip(); + ToolStripMenuItem toolStripMenuItem = new ToolStripMenuItem + { + Text = "粘贴", + Size = new Size(124, 22) + }; + contextMenuStrip.Items.AddRange(new ToolStripItem[1] { toolStripMenuItem }); + toolStripMenuItem.Tag = obj; + toolStripMenuItem.Click += DelmunItem_Click1; + obj.ContextMenuStrip = contextMenuStrip; + } + + private void DelmunItem_Click1(object sender, EventArgs e) + { + try + { + ToolStripMenuItem toolStripMenuItem = sender as ToolStripMenuItem; + IDataObject dataObject = Clipboard.GetDataObject(); + if (dataObject.GetDataPresent(DataFormats.Text) && toolStripMenuItem != null && toolStripMenuItem.Tag is RichTextBox) + { + (toolStripMenuItem.Tag as RichTextBox).Text = (string)dataObject.GetData(DataFormats.Text); + } + } + catch (Exception) + { + MessageBox.Show("粘贴失败"); + } + } + + public void BindMenuStrip(bool addTwoFactor = false, ToolStripMenuItem[] toolStripAdds = null, bool shouItems = false) + { + ContextMenuStrip contextMenuStrip = new ContextMenuStrip(); + ToolStripMenuItem toolStripMenuItem = new ToolStripMenuItem + { + Text = "删除", + Size = new Size(124, 22) + }; + ToolStripMenuItem toolStripMenuItem2 = new ToolStripMenuItem + { + Text = "重新执行", + Size = new Size(124, 22) + }; + ToolStripMenuItem toolStripMenuItem3 = new ToolStripMenuItem + { + Text = "复制账号信息", + Size = new Size(124, 22) + }; + contextMenuStrip.Items.AddRange(new ToolStripItem[3] { toolStripMenuItem, toolStripMenuItem2, toolStripMenuItem3 }); + if (addTwoFactor) + { + ToolStripMenuItem toolStripMenuItem4 = new ToolStripMenuItem + { + Text = "输入双重验证码", + Size = new Size(124, 22) + }; + toolStripMenuItem4.Click += TwoFactorItem_Click; + contextMenuStrip.Items.Add(toolStripMenuItem4); + } + if (toolStripAdds != null) + { + foreach (ToolStripMenuItem value in toolStripAdds) + { + contextMenuStrip.Items.Add(value); + } + } + if (shouItems && lvLogList != null) + { + ToolStripMenuItem toolStripMenuItem5 = new ToolStripMenuItem + { + Text = "设置显示列", + Size = new Size(124, 22) + }; + toolStripMenuItem5.Click += ShouItemsIndex_Click; + contextMenuStrip.Items.Add(toolStripMenuItem5); + } + toolStripMenuItem3.Click += Copy_Click; + toolStripMenuItem.Click += DelmunItem_Click; + toolStripMenuItem2.Click += ReExecute_Click; + contextMenuStrip.Size = new Size(125, 70); + contextMenuStrip.ResumeLayout(performLayout: false); + contextMenuStrip.SuspendLayout(); + lvLogList.ContextMenuStrip = contextMenuStrip; + } + + private void TwoFactorItem_Click(object sender, EventArgs e) + { + string text = Interaction.InputBox("请输入ID双重验证码", "请输入ID双重验证码"); + if (!string.IsNullOrEmpty(text)) + { + TwoFactorItem_over_Click(text); + } + } + + public virtual void TwoFactorItem_over_Click(string reust) + { + throw new NotImplementedException(); + } + + public void ShouItemsIndex_Click(object sender, EventArgs e) + { + FormEditListViewHander formEditListViewHander = new FormEditListViewHander(); + formEditListViewHander.lvData = lvLogList; + formEditListViewHander.isAstrict = false; + formEditListViewHander.ShowDialog(); + } + + public virtual void ReExecute_Click(object sender, EventArgs e) + { + throw new NotImplementedException(); + } + + protected virtual void DelmunItem_Click(object sender, EventArgs e) + { + try + { + foreach (ListViewItem selectedItem in lvLogList.SelectedItems) + { + lvLogList.Items.Remove(selectedItem); + } + if (labCout != null) + { + labCout.Text = lvLogList.Items.Count.ToString(); + } + } + catch (Exception) + { + } + } + + private void Copy_Click(object sender, EventArgs e) + { + copy(); + } + + public void copy() + { + if (lvLogList == null) + { + MessageBox.Show("请先调用InitLv"); + return; + } + ListView listView = lvLogList; + StringBuilder stringBuilder = new StringBuilder(); + int num = 0; + foreach (ListViewItem selectedItem in listView.SelectedItems) + { + num = 0; + foreach (ListViewItem.ListViewSubItem subItem in selectedItem.SubItems) + { + if (num != 0 && listView.Columns.Count > num && listView.Columns[num].Width > 0) + { + if (num > 2) + { + if (listView.Columns.Count > num) + { + stringBuilder.Append(listView.Columns[num].Text + subItem.Text + "-"); + } + } + else + { + stringBuilder.Append(subItem.Text + "----"); + } + } + num++; + } + stringBuilder.Append("\n"); + } + if (stringBuilder.Length <= 0) + { + return; + } + try + { + Clipboard.SetText(stringBuilder.ToString()); + MessageBox.Show("复制成功"); + } + catch (Exception) + { + MessageBox.Show("复制失败"); + } + } + + private void lv_ColumnClick(object sender, ColumnClickEventArgs e) + { + if (lvLogList.Tag == null) + { + lvLogList.Tag = "1"; + } + if (lvLogList.Tag.ToString() == "1") + { + lvLogList.ListViewItemSorter = new ListViewItemComparer(e.Column, 1); + lvLogList.Tag = "0"; + } + else + { + lvLogList.ListViewItemSorter = new ListViewItemComparer(e.Column, 0); + lvLogList.Tag = "1"; + } + lvLogList.Sort(); + } + + public void UpdataUi(Action act) + { + if (base.IsHandleCreated && !base.IsDisposed) + { + try + { + BeginInvoke(act); + } + catch (Exception) + { + } + } + } + + public void startAct() + { + UpdataUi(delegate + { + startBtn.Text = "停止"; + startBtn.ForeColor = Color.Red; + }); + } + + public void endTakAct() + { + UpdataUi(delegate + { + startBtn.Tag = null; + startBtn.Text = "开始执行"; + startBtn.ForeColor = Color.Green; + }); + } + + public void ApiApplyAct(int type, string typeName) + { + APIUtlis.ApiApplyAct(type, typeName); + } + + public void ExperList(ListView lv) + { + FromExper fromExper = new FromExper(); + StringBuilder stringBuilder = new StringBuilder(); + int num = 0; + foreach (ColumnHeader column in lv.Columns) + { + if (num != 0 && column.Width > 10) + { + stringBuilder.Append(column.Text + "\t"); + } + num++; + } + stringBuilder.Append("\n"); + foreach (ListViewItem item in lv.Items) + { + num = 0; + foreach (ListViewItem.ListViewSubItem subItem in item.SubItems) + { + if (num != 0 && lv.Columns.Count > num && lv.Columns[num].Width > 10) + { + stringBuilder.Append(subItem.Text + "\t"); + } + num++; + } + stringBuilder.Append("\n"); + } + fromExper.txtInfo = stringBuilder.ToString(); + fromExper.Show(); + } + + protected void endRuning(TaskRunModel runModel) + { + runModel.isRuning = false; + } + + protected bool startRuning(TaskRunModel runModel, Action _action, string appleId) + { + if (Tools.ToNetWorkInt(ConfigUtlis.getConfigValue("comNetworkConfig"), 0) == 3) + { + int num = Tools.ToInt(ConfigUtlis.getConfigValue("txtAdslIdCount"), 10); + if (AppleExecuteTask.TaskRunAppleIdCount >= num) + { + _action?.Invoke(appleId, DisplyType.xinxi, "等待拨号..."); + bool flag = false; + do + { + flag = false; + foreach (TaskRunModel taskRunModel in AppleExecuteTask.TaskRunModels) + { + if (taskRunModel.isRuning) + { + flag = true; + break; + } + } + Thread.Sleep(new Random().Next(100, 300)); + } + while (flag); + lock (AppleExecuteTask.obj) + { + if (AppleExecuteTask.TaskRunAppleIdCount >= num) + { + string configValue = ConfigUtlis.getConfigValue("txtAdslUserName"); + string configValue2 = ConfigUtlis.getConfigValue("txtAdslPwd"); + Thread.Sleep(new Random().Next(500, 1000)); + _action?.Invoke(appleId, DisplyType.xinxi, "断开宽带连接"); + RasTools.Disconnect(); + Thread.Sleep(new Random().Next(200, 500)); + _action?.Invoke(appleId, DisplyType.xinxi, "开始宽带重新拨号"); + if (!RasTools.Connect(configValue, configValue2, out var errMsg)) + { + _action?.Invoke(appleId, DisplyType.xinxi, "拨号失败:" + errMsg); + return false; + } + _action?.Invoke(appleId, DisplyType.xinxi, "重新拨号成功"); + Thread.Sleep(new Random().Next(500, 1000)); + AppleExecuteTask.TaskRunAppleIdCount = 0L; + } + } + } + AppleExecuteTask.TaskRunAppleIdCount++; + } + runModel.isRuning = true; + return true; + } + + public AppleItunesLogin getItunesLogin(bool openVpn, AppleAcount account, int type, ItunesUtlis utlis, ref string msg, int isStore = 0, string notityKey = "", HttpResult httpReust = null) + { + if (httpReust == null) + { + httpReust = APIUtlis.getIsLogin(type); + } + if (httpReust.StatusCode == HttpStatusCode.OK) + { + dynamic val = Tools.Todejosn(httpReust.Html); + if (val["Code"] == "0000") + { + if (val["Data"]["integral"] >= AppSysConfig.getTypeById(type).consNum) + { + string msgReust = ""; + AppleItunesLogin appleItunesLogin = iTunesAccountLoginCache.getLoginIdUserInfo(account.appleId, account.applePwd); + if (string.IsNullOrEmpty(utlis.ProxyIp)) + { + utlis.ProxyIp = ProxyAccountCache.getProxyAccountIP(account.appleId); + } + if (appleItunesLogin == null || isStore == 2) + { + appleItunesLogin = ((!AppSysConfig.iTunesisRemoteLogin) ? utlis.appleLogin(account.appleId, account.applePwd + (account.isDoubleModl ? account.DoublePwd : ""), 1, ref msgReust, out var _) : utlis.remoteAppleLogin(account.appleId, account.applePwd + (account.isDoubleModl ? account.DoublePwd : ""), ref msgReust, isStore)); + if (appleItunesLogin != null) + { + if (account.isDoubleModl) + { + appleItunesLogin.pwd = account.applePwd; + } + iTunesAccountLoginCache.addReddemUserInfo(account.appleId, appleItunesLogin); + } + } + if (appleItunesLogin != null) + { + return appleItunesLogin; + } + msg = msgReust; + } + else + { + msg = "点数不足,请联系客服充值"; + } + } + else + { + msg = val["Message"]; + } + } + else + { + msg = "网络请求失败"; + } + return null; + } + + public virtual void insertLog(string txt) + { + throw new NotImplementedException(); + } + + private void InitializeComponent() + { + base.SuspendLayout(); + } + } +} diff --git a/AppleBatch_June/CheckRealNameType.cs b/AppleBatch_June/CheckRealNameType.cs new file mode 100644 index 0000000..c5f1e8e --- /dev/null +++ b/AppleBatch_June/CheckRealNameType.cs @@ -0,0 +1,9 @@ +namespace AppleBatch_June +{ + public enum CheckRealNameType + { + Need, + DonTneed, + Unknown + } +} diff --git a/AppleBatch_June/ConfigUtlis.cs b/AppleBatch_June/ConfigUtlis.cs new file mode 100644 index 0000000..7df5a18 --- /dev/null +++ b/AppleBatch_June/ConfigUtlis.cs @@ -0,0 +1,145 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security.Cryptography; +using System.Text; + +namespace AppleBatch_June +{ + public class ConfigUtlis + { + private static StringBuilder FilText = new StringBuilder(); + + private static string[] encConfigKeys = new string[18] + { + "txtCycleLoadAccount", "txtGiftcardInfoLoadAccount", "txtLoadAccount", "txtGiftcardLoadAccount", "txtNewpwd", "txtShengRi", "txtQt1", "txtQt2", "txtQt3", "comLoadAccounts", + "txtActivaPwd", "txtChangAccountPwd", "txtChangAccountQt1", "txtChangAccountQt2", "txtChangAccountQt3", "txtChangAccountShengri", "txtRecoveryPwd", "txtCloseAuthenPwd" + }; + + public static string path => AppDomain.CurrentDomain.BaseDirectory; + + private static string configPath => path + "config.ini"; + + public static void saveConfigKey(string key, string value) + { + try + { + if (encConfigKeys.Contains(key)) + { + value = Tools.EncodeBase64(ProtectedData.Protect(Encoding.UTF8.GetBytes(DESEncrypt.Encrypt(value, Tools.GetMD5_32(AppSysConfig.newSaffMac + "123123").Substring(16), Tools.GetMD5_32(AppSysConfig.newSaffMac + "123111123").Substring(16))), AppSysConfig.AditionalEntropy, DataProtectionScope.LocalMachine)) + ";v3"; + } + StringBuilder stringBuilder = new StringBuilder(); + if (File.Exists(configPath)) + { + if (FilText.Length == 0 && File.Exists(configPath)) + { + FilText.Append(Tools.readFile(configPath, Encoding.UTF8)); + } + string[] array = FilText.ToString().Split('\n'); + bool flag = true; + List list = new List(); + string[] array2 = array; + foreach (string text in array2) + { + string[] array3 = text.Split('='); + if (array3.Length < 2) + { + continue; + } + string text2 = text.Substring(text.IndexOf('=') + 1); + if (array3[0] == key) + { + flag = false; + if (!list.Contains(array3[0])) + { + stringBuilder.Append(key + "=" + value + "\n"); + list.Add(array3[0]); + } + } + else if (!list.Contains(array3[0])) + { + stringBuilder.Append(array3[0] + "=" + text2 + "\n"); + list.Add(array3[0]); + } + } + if (flag) + { + stringBuilder.Append(key + "=" + value + "\n"); + } + } + else + { + stringBuilder.Append(key + "=" + value + "\n"); + } + File.WriteAllText(configPath, stringBuilder.ToString(), Encoding.UTF8); + FilText.Clear(); + FilText.Append(stringBuilder.ToString()); + } + catch (Exception) + { + } + } + + public static string getConfigValue(string key) + { + try + { + if (FilText.Length == 0 && File.Exists(configPath)) + { + FilText.Append(Tools.readFile(configPath, Encoding.UTF8)); + } + string iv = Tools.GetMD5_32(AppSysConfig.saffMac + "123111123").Substring(16); + string key2 = Tools.GetMD5_32(AppSysConfig.saffMac + "123123").Substring(16); + string iv2 = Tools.GetMD5_32(AppSysConfig.newSaffMac + "123111123").Substring(16); + string key3 = Tools.GetMD5_32(AppSysConfig.newSaffMac + "123123").Substring(16); + string[] array = FilText.ToString().Split('\n'); + foreach (string text in array) + { + string[] array2 = text.Split('='); + if (array2.Length < 2 || !(array2[0] == key)) + { + continue; + } + string text2 = text.Substring(text.IndexOf('=') + 1); + if (encConfigKeys.Contains(key)) + { + string text3 = text2; + if (text3.Contains(";v2")) + { + try + { + text3 = text3.Replace(";v2", ""); + byte[] bytes = ProtectedData.Unprotect(Tools.DecodeBase64(text3), AppSysConfig.AditionalEntropy, DataProtectionScope.LocalMachine); + return DESEncrypt.Decrypt(Encoding.UTF8.GetString(bytes), key2, iv).Replace("\0", ""); + } + catch (Exception) + { + return ""; + } + } + if (text3.Contains(";v3")) + { + try + { + text3 = text3.Replace(";v3", ""); + byte[] bytes2 = ProtectedData.Unprotect(Tools.DecodeBase64(text3), AppSysConfig.AditionalEntropy, DataProtectionScope.LocalMachine); + return DESEncrypt.Decrypt(Encoding.UTF8.GetString(bytes2), key3, iv2).Replace("\0", ""); + } + catch (Exception) + { + return ""; + } + } + return text2; + } + return text2; + } + } + catch (Exception) + { + } + return ""; + } + } +} diff --git a/AppleBatch_June/CountryOptions.cs b/AppleBatch_June/CountryOptions.cs new file mode 100644 index 0000000..562aed4 --- /dev/null +++ b/AppleBatch_June/CountryOptions.cs @@ -0,0 +1,151 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Web.Script.Serialization; +using System.Windows.Forms; +using AppleBatch_June.Domain; +using AppleBatch_June.Model; +using AppleBatch_June.Properties; + +namespace AppleBatch_June +{ + public class CountryOptions : Form + { + private CountriesReachableAt reachableAt; + + private IContainer components; + + private Button button2; + + private ListView listView1; + + private ColumnHeader columnHeader1; + + private ColumnHeader columnHeader3; + + private Button button1; + + public CountryOptions() + { + InitializeComponent(); + } + + private void button1_Click(object sender, EventArgs e) + { + if (new addMaterial().ShowDialog() == DialogResult.OK) + { + load(); + } + } + + private void CountryOptions_Load(object sender, EventArgs e) + { + string @string = Encoding.UTF8.GetString(Resources.localizedResources); + JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); + reachableAt = javaScriptSerializer.Deserialize(@string); + load(); + } + + private void load() + { + listView1.Items.Clear(); + List mation = new UserNationalData().getMation(); + int num = 0; + foreach (NationalList item in mation) + { + num++; + ListViewItem listViewItem = new ListViewItem(num.ToString()); + listViewItem.SubItems.Add(item.name); + string guoaji = item.payment.billingAddress.countryCode; + CountriesReachableAt.Smssupportedcountriesreachableat smssupportedcountriesreachableat = reachableAt.smsSupportedCountriesReachableAt.Where((CountriesReachableAt.Smssupportedcountriesreachableat c) => c.code == guoaji).FirstOrDefault(); + if (smssupportedcountriesreachableat != null) + { + listViewItem.SubItems.Add(smssupportedcountriesreachableat.name); + } + else + { + listViewItem.SubItems.Add("未知国家"); + } + listViewItem.SubItems.Add(item.payment.ownerName.lastName + item.payment.ownerName.firstName); + listViewItem.SubItems.Add(item.Id); + listView1.Items.Add(listViewItem); + } + } + + private void button2_Click(object sender, EventArgs e) + { + if (MessageBox.Show("删除选中资料?", "提示", MessageBoxButtons.OKCancel) != DialogResult.OK || listView1.SelectedItems.Count <= 0) + { + return; + } + UserNationalData userNationalData = new UserNationalData(); + foreach (ListViewItem selectedItem in listView1.SelectedItems) + { + string code = selectedItem.SubItems[4].Text; + userNationalData.removeMation(code); + } + load(); + } + + protected override void Dispose(bool disposing) + { + if (disposing && components != null) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.button2 = new System.Windows.Forms.Button(); + this.listView1 = new System.Windows.Forms.ListView(); + this.columnHeader1 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader3 = new System.Windows.Forms.ColumnHeader(); + this.button1 = new System.Windows.Forms.Button(); + base.SuspendLayout(); + this.button2.Location = new System.Drawing.Point(132, 24); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(81, 24); + this.button2.TabIndex = 5; + this.button2.Text = "删除"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(button2_Click); + this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[2] { this.columnHeader1, this.columnHeader3 }); + this.listView1.FullRowSelect = true; + this.listView1.Location = new System.Drawing.Point(12, 66); + this.listView1.Name = "listView1"; + this.listView1.Size = new System.Drawing.Size(402, 273); + this.listView1.TabIndex = 4; + this.listView1.UseCompatibleStateImageBehavior = false; + this.listView1.View = System.Windows.Forms.View.Details; + this.columnHeader1.Text = "序号"; + this.columnHeader3.Text = "自定义国家"; + this.columnHeader3.Width = 200; + this.button1.Location = new System.Drawing.Point(12, 24); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(100, 24); + this.button1.TabIndex = 3; + this.button1.Text = "新增国家资料"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(button1_Click); + base.AutoScaleDimensions = new System.Drawing.SizeF(6f, 12f); + base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + base.ClientSize = new System.Drawing.Size(457, 376); + base.Controls.Add(this.button2); + base.Controls.Add(this.listView1); + base.Controls.Add(this.button1); + base.MaximizeBox = false; + base.MinimizeBox = false; + base.Name = "CountryOptions"; + base.ShowIcon = false; + base.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "新增国家"; + base.Load += new System.EventHandler(CountryOptions_Load); + base.ResumeLayout(false); + } + } +} diff --git a/AppleBatch_June/DESEncrypt.cs b/AppleBatch_June/DESEncrypt.cs new file mode 100644 index 0000000..dec8de0 --- /dev/null +++ b/AppleBatch_June/DESEncrypt.cs @@ -0,0 +1,39 @@ +using System; +using System.Security.Cryptography; +using System.Text; + +namespace AppleBatch_June +{ + public class DESEncrypt + { + public static string Encrypt(string toEncrypt, string key, string iv) + { + byte[] bytes = Encoding.UTF8.GetBytes(key); + byte[] bytes2 = Encoding.UTF8.GetBytes(iv); + byte[] bytes3 = Encoding.UTF8.GetBytes(toEncrypt); + byte[] array = new RijndaelManaged + { + Key = bytes, + IV = bytes2, + Mode = CipherMode.CBC, + Padding = PaddingMode.Zeros + }.CreateEncryptor().TransformFinalBlock(bytes3, 0, bytes3.Length); + return Convert.ToBase64String(array, 0, array.Length); + } + + public static string Decrypt(string toDecrypt, string key, string iv) + { + byte[] bytes = Encoding.UTF8.GetBytes(key); + byte[] bytes2 = Encoding.UTF8.GetBytes(iv); + byte[] array = Convert.FromBase64String(toDecrypt); + using RijndaelManaged rijndaelManaged = new RijndaelManaged(); + rijndaelManaged.Key = bytes; + rijndaelManaged.IV = bytes2; + rijndaelManaged.Mode = CipherMode.CBC; + rijndaelManaged.Padding = PaddingMode.Zeros; + using ICryptoTransform cryptoTransform = rijndaelManaged.CreateDecryptor(); + byte[] bytes3 = cryptoTransform.TransformFinalBlock(array, 0, array.Length); + return Encoding.UTF8.GetString(bytes3); + } + } +} diff --git a/AppleBatch_June/DelCountdownEnd.cs b/AppleBatch_June/DelCountdownEnd.cs new file mode 100644 index 0000000..424b2c2 --- /dev/null +++ b/AppleBatch_June/DelCountdownEnd.cs @@ -0,0 +1,6 @@ +using System.Collections.Generic; + +namespace AppleBatch_June +{ + public delegate void DelCountdownEnd(List appleIds, int autoRedeemState); +} diff --git a/AppleBatch_June/DisplyState.cs b/AppleBatch_June/DisplyState.cs new file mode 100644 index 0000000..44fd727 --- /dev/null +++ b/AppleBatch_June/DisplyState.cs @@ -0,0 +1,9 @@ +namespace AppleBatch_June +{ + public enum DisplyState + { + Disply, + None, + Unknown + } +} diff --git a/AppleBatch_June/FindAppListOptions.cs b/AppleBatch_June/FindAppListOptions.cs new file mode 100644 index 0000000..6924064 --- /dev/null +++ b/AppleBatch_June/FindAppListOptions.cs @@ -0,0 +1,313 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Windows.Forms; + +namespace AppleBatch_June +{ + public class FindAppListOptions : Form + { + private Dictionary countriesList = new Dictionary(); + + private IContainer components; + + private Button button2; + + private ListView listView1; + + private ColumnHeader columnHeader1; + + private ColumnHeader columnHeader3; + + private LinkLabel linkLabel1; + + private TextBox txtFilePach; + + private Label label4; + + private ColumnHeader columnHeader2; + + private ColumnHeader columnHeader4; + + private Label label1; + + private ContextMenuStrip contextMenuStrip1; + + private ToolStripMenuItem 打开链接ToolStripMenuItem; + + private ToolStripMenuItem 复制链接ToolStripMenuItem; + + private ToolStripMenuItem 删除链接ToolStripMenuItem; + + public string filePatch { get; set; } + + public FindAppListOptions() + { + InitializeComponent(); + } + + private void FindAppListOptions_Load(object sender, EventArgs e) + { + txtFilePach.Text = filePatch; + foreach (DataRow row in AppleUtlis.dataTable_0.Rows) + { + string text = row["area"].ToString(); + string value = row["name"].ToString(); + if (!countriesList.ContainsKey(text)) + { + countriesList.Add(text.ToLower(), value); + } + } + LoadFile(); + } + + private void LoadFile() + { + List list = AppleUtlis.restTxt(filePatch); + listView1.Items.Clear(); + int num = 0; + Dictionary dictionary = new Dictionary(); + foreach (string item in list) + { + if (!string.IsNullOrEmpty(item)) + { + num++; + string[] array = item.Split('\t'); + string input = array[0].Split(' ')[0]; + string text = ""; + if (array.Length > 1) + { + text = array[1]; + } + if (array[0].Split(' ').Length > 1) + { + text = array[0].Split(' ')[1]; + } + string key = new Regex("com/([\\s\\S]*?)/").Match(input).Groups[1].Value.ToLower(); + ListViewItem listViewItem = new ListViewItem(num.ToString()); + listViewItem.SubItems.Add(input); + if (countriesList.ContainsKey(key)) + { + key = countriesList[key]; + } + if (dictionary.ContainsKey(key)) + { + dictionary[key]++; + } + else + { + dictionary.Add(key, 1); + } + listViewItem.SubItems.Add(key); + listViewItem.SubItems.Add(text); + listView1.Items.Add(listViewItem); + } + } + label1.Text = "当前应用文件共有应用 " + num + " 个"; + if (num <= 0) + { + return; + } + label1.Text += ",其中 "; + foreach (KeyValuePair item2 in dictionary) + { + label1.Text = label1.Text + item2.Key + "有 " + item2.Value + " 个,"; + } + label1.Text = label1.Text.TrimEnd(','); + } + + private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + OpenFileDialog openFileDialog = new OpenFileDialog(); + openFileDialog.Filter = "文本txt|*.txt"; + if (openFileDialog.ShowDialog() == DialogResult.OK) + { + string text = (txtFilePach.Text = openFileDialog.FileName); + filePatch = text; + LoadFile(); + } + } + + private void 打开链接ToolStripMenuItem_Click(object sender, EventArgs e) + { + foreach (ListViewItem selectedItem in listView1.SelectedItems) + { + Process.Start(selectedItem.SubItems[1].Text); + } + } + + private void 复制链接ToolStripMenuItem_Click(object sender, EventArgs e) + { + string text = ""; + foreach (ListViewItem selectedItem in listView1.SelectedItems) + { + string text2 = selectedItem.SubItems[1].Text; + text = text + text2 + "\n"; + } + if (text.Length > 0) + { + Clipboard.SetText(text); + MessageBox.Show("复制成功"); + } + } + + private void 删除链接ToolStripMenuItem_Click(object sender, EventArgs e) + { + deleOption(); + } + + private void deleOption() + { + string text = Tools.readFile(filePatch, Encoding.UTF8); + int count = listView1.SelectedItems.Count; + if (count <= 0 || MessageBox.Show("删除选中的" + count + "个应用地址", "提示", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + foreach (ListViewItem selectedItem in listView1.SelectedItems) + { + string value = selectedItem.SubItems[1].Text; + string[] array = text.Split('\n'); + foreach (string text2 in array) + { + if (text2.StartsWith(value)) + { + text = text.Replace(text2 + "\n", ""); + text = text.Replace(text2, ""); + } + } + } + File.WriteAllText(filePatch, text, Encoding.UTF8); + LoadFile(); + } + + private void button2_Click(object sender, EventArgs e) + { + deleOption(); + } + + protected override void Dispose(bool disposing) + { + if (disposing && components != null) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.button2 = new System.Windows.Forms.Button(); + this.listView1 = new System.Windows.Forms.ListView(); + this.columnHeader1 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader3 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader2 = new System.Windows.Forms.ColumnHeader(); + this.linkLabel1 = new System.Windows.Forms.LinkLabel(); + this.txtFilePach = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.columnHeader4 = new System.Windows.Forms.ColumnHeader(); + this.label1 = new System.Windows.Forms.Label(); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.打开链接ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.复制链接ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.删除链接ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.contextMenuStrip1.SuspendLayout(); + base.SuspendLayout(); + this.button2.Font = new System.Drawing.Font("微软雅黑", 10.5f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.button2.ForeColor = System.Drawing.Color.Brown; + this.button2.Location = new System.Drawing.Point(567, 10); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(109, 34); + this.button2.TabIndex = 6; + this.button2.Text = "删除选中应用"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(button2_Click); + this.listView1.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[4] { this.columnHeader1, this.columnHeader3, this.columnHeader4, this.columnHeader2 }); + this.listView1.ContextMenuStrip = this.contextMenuStrip1; + this.listView1.FullRowSelect = true; + this.listView1.HideSelection = false; + this.listView1.Location = new System.Drawing.Point(21, 73); + this.listView1.Name = "listView1"; + this.listView1.Size = new System.Drawing.Size(767, 365); + this.listView1.TabIndex = 7; + this.listView1.UseCompatibleStateImageBehavior = false; + this.listView1.View = System.Windows.Forms.View.Details; + this.columnHeader1.Text = "序号"; + this.columnHeader1.Width = 40; + this.columnHeader3.Text = "URL地址"; + this.columnHeader3.Width = 350; + this.columnHeader2.Text = "应用名称"; + this.columnHeader2.Width = 250; + this.linkLabel1.AutoSize = true; + this.linkLabel1.Location = new System.Drawing.Point(491, 15); + this.linkLabel1.Name = "linkLabel1"; + this.linkLabel1.Size = new System.Drawing.Size(53, 12); + this.linkLabel1.TabIndex = 13; + this.linkLabel1.TabStop = true; + this.linkLabel1.Text = "选择文件"; + this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(linkLabel1_LinkClicked); + this.txtFilePach.Location = new System.Drawing.Point(102, 12); + this.txtFilePach.Name = "txtFilePach"; + this.txtFilePach.ReadOnly = true; + this.txtFilePach.Size = new System.Drawing.Size(383, 21); + this.txtFilePach.TabIndex = 12; + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(37, 15); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(53, 12); + this.label4.TabIndex = 11; + this.label4.Text = "文本地址"; + this.columnHeader4.Text = "应用国家"; + this.columnHeader4.Width = 100; + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.label1.ForeColor = System.Drawing.Color.Chocolate; + this.label1.Location = new System.Drawing.Point(36, 44); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(372, 17); + this.label1.TabIndex = 14; + this.label1.Text = "当前应用文件共有应用120个,其中 中国大陆有100个,美国有 20个"; + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[3] { this.打开链接ToolStripMenuItem, this.复制链接ToolStripMenuItem, this.删除链接ToolStripMenuItem }); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(125, 70); + this.打开链接ToolStripMenuItem.Name = "打开链接ToolStripMenuItem"; + this.打开链接ToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.打开链接ToolStripMenuItem.Text = "打开链接"; + this.打开链接ToolStripMenuItem.Click += new System.EventHandler(打开链接ToolStripMenuItem_Click); + this.复制链接ToolStripMenuItem.Name = "复制链接ToolStripMenuItem"; + this.复制链接ToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.复制链接ToolStripMenuItem.Text = "复制链接"; + this.复制链接ToolStripMenuItem.Click += new System.EventHandler(复制链接ToolStripMenuItem_Click); + this.删除链接ToolStripMenuItem.Name = "删除链接ToolStripMenuItem"; + this.删除链接ToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.删除链接ToolStripMenuItem.Text = "删除链接"; + this.删除链接ToolStripMenuItem.Click += new System.EventHandler(删除链接ToolStripMenuItem_Click); + base.AutoScaleDimensions = new System.Drawing.SizeF(6f, 12f); + base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + base.ClientSize = new System.Drawing.Size(800, 450); + base.Controls.Add(this.label1); + base.Controls.Add(this.linkLabel1); + base.Controls.Add(this.txtFilePach); + base.Controls.Add(this.label4); + base.Controls.Add(this.listView1); + base.Controls.Add(this.button2); + base.MaximizeBox = false; + base.Name = "FindAppListOptions"; + base.ShowIcon = false; + base.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "编辑文件应用列表"; + base.Load += new System.EventHandler(FindAppListOptions_Load); + this.contextMenuStrip1.ResumeLayout(false); + base.ResumeLayout(false); + base.PerformLayout(); + } + } +} diff --git a/AppleBatch_June/FormCancelSubscriptions.cs b/AppleBatch_June/FormCancelSubscriptions.cs new file mode 100644 index 0000000..17ef1d3 --- /dev/null +++ b/AppleBatch_June/FormCancelSubscriptions.cs @@ -0,0 +1,737 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Linq; +using System.Net; +using System.Threading.Tasks; +using System.Windows.Forms; +using AppleBatch_June.Model; +using AppleBatch_June.Utils; +using DotNet.Utilities; + +namespace AppleBatch_June +{ + public class FormCancelSubscriptions : BaseForm + { + private IContainer components; + + private CheckBox ckCancelSubscriptionVpn; + + private Label labRemovePayDianShu; + + private Label label31; + + private GroupBox groupBox5; + + private Button btnStopRemovePay; + + private Button btnRemovePayLog; + + private Button btnStartRemovePay; + + private TextBox textBox1; + + private Label label6; + + private GroupBox groupBox4; + + private RichTextBox txtAppleId; + + private TextBox txtSubscribeFilter; + + private Label label1; + + private Label label2; + + private TextBox textBox3; + + private TabControl tabControl1; + + private TabPage tabPage1; + + private RichTextBox txtLog; + + private TabPage tabPage2; + + private ListView lvLogList; + + private ColumnHeader columnHeader5; + + private ColumnHeader columnHeader1; + + private ColumnHeader columnHeader2; + + private ColumnHeader columnHeader3; + + private ColumnHeader columnHeader4; + + private Label label5; + + private Button btnExportLogList; + + private Button btnEmptyLogList; + + private CheckBox ckSubscribeOnlyQuery; + + public FormCancelSubscriptions() + : base("取消订阅", null) + { + InitializeComponent(); + } + + private void FormCancelSubscriptions_Load(object sender, EventArgs e) + { + labRemovePayDianShu.Text = AppSysConfig.getTypeById(24).consNum.ToString(); + ckCancelSubscriptionVpn.Checked = ((ConfigUtlis.getConfigValue("ckCancelSubscriptionVpn") == "True") ? true : false); + ckSubscribeOnlyQuery.Checked = ((ConfigUtlis.getConfigValue("ckSubscribeOnlyQuery") == "True") ? true : false); + txtSubscribeFilter.Enabled = !ckSubscribeOnlyQuery.Checked; + txtSubscribeFilter.Text = ConfigUtlis.getConfigValue("txtSubscribeFilter"); + InitLv(lvLogList); + BindMenuPaste(txtAppleId); + } + + public override void insertLog(string logText) + { + if (!base.IsHandleCreated || base.IsDisposed) + { + return; + } + try + { + BeginInvoke((Action)delegate + { + txtLog.Text = txtLog.Text.Insert(0, DateTime.Now.ToString("HH:mm:ss") + " " + logText + "\n"); + }); + } + catch (Exception) + { + } + } + + private void btnStartRemovePay_Click(object sender, EventArgs e) + { + List list = AppleUtlis.accountInput(txtAppleId.Text.Trim()); + if (list.Count == 0) + { + MessageBox.Show("请按正确格式输入ID"); + return; + } + string subscribeFilter = txtSubscribeFilter.Text.Trim(); + ConfigUtlis.saveConfigKey("ckCancelSubscriptionVpn", ckCancelSubscriptionVpn.Checked.ToString()); + ConfigUtlis.saveConfigKey("txtSubscribeFilter", txtSubscribeFilter.Text); + ConfigUtlis.saveConfigKey("ckSubscribeOnlyQuery", ckSubscribeOnlyQuery.Checked.ToString()); + int id = 24; + int count = list.Count; + if (AppSysConfig.integral < count * AppSysConfig.getTypeById(24).consNum) + { + MessageBox.Show("账号点数不足 , 执行账号数量:" + count + " ,至少需要 " + count * AppSysConfig.getTypeById(id).consNum + " 点数。"); + } + else if (!base.taskState.TaskIsRun) + { + btnStartRemovePay.Enabled = false; + startRemovePay(list, ckCancelSubscriptionVpn.Checked, ckSubscribeOnlyQuery.Checked, subscribeFilter); + } + else + { + MessageBox.Show("请先点停止,或者等待任务执行完毕"); + } + } + + public async void startRemovePay(List appleIds, bool startVpn, bool subscribeOnlyQuery, string subscribeFilter) + { + ApiNetReq.startNowFun = 24; + insertLog("-------开始执行---------"); + insertLog("Id 数量:" + appleIds.Count); + if (!string.IsNullOrEmpty(subscribeFilter) && !subscribeOnlyQuery) + { + insertLog("需要取消的订阅关键字: " + subscribeFilter); + } + int taskSize = Tools.getTaskSize(startVpn, appleIds.Count); + base.taskState.isRun = true; + base.taskState.TaskIsRun = true; + AppleExecuteTask.TaskRunAppleIdCount = 0L; + AppleExecuteTask.TaskRunModels.Clear(); + Task[] array = new Task[taskSize]; + for (int i = 0; i < taskSize; i++) + { + array[i] = Task.Run(delegate + { + string guid = Guid.NewGuid().ToString("n"); + TaskRunModel taskRunModel = new TaskRunModel + { + guid = guid, + isRuning = false + }; + AppleExecuteTask.TaskRunModels.Add(taskRunModel); + while (base.taskState.isRun) + { + try + { + AppleAcount item = null; + lock (appleIds) + { + item = appleIds.Where((AppleAcount c) => !c.isAct).FirstOrDefault(); + if (item == null) + { + break; + } + item.isAct = true; + } + if (startRuning(taskRunModel, delegate(string appleid, DisplyType reustType, string dasReust2) + { + insertLog(dasReust2); + }, item.appleId)) + { + string applePwd = item.applePwd; + ItunesUtlis utlis = new ItunesUtlis(base.taskState, item.appleId, delegate(string appleKey, DisplyType type, string reust) + { + insertLog(appleKey + "," + reust); + }, startVpn); + insertLog("正在登录" + item.appleId + ",密码:" + item.applePwd); + string msg = ""; + AppleItunesLogin itunesLogin = getItunesLogin(startVpn, item, 24, utlis, ref msg, 1); + if (msg.Contains("需要提供 Apple ID 验证码才能登录")) + { + insertLog("登录失败:" + msg); + object obj = Invoke((Func)delegate + { + VerificationCodeFrom verificationCodeFrom = new VerificationCodeFrom(); + verificationCodeFrom.AppleId = "Apple账号:" + item.appleId; + verificationCodeFrom.ShowDialog(); + return verificationCodeFrom.reustCode; + }); + if (obj.ToString().Length == 6) + { + insertLog("正在使用验证码登录"); + item.applePwd += obj.ToString(); + itunesLogin = getItunesLogin(startVpn, item, 24, utlis, ref msg); + } + } + if (itunesLogin != null) + { + insertLog("登录成功,国家:" + itunesLogin.Area); + string reustMsg = ""; + string subscriptionsAll = ""; + if (!base.taskState.isRun) + { + break; + } + if (CancelSubscription(startVpn, itunesLogin, utlis, item, subscribeFilter, subscribeOnlyQuery, ref subscriptionsAll, ref reustMsg)) + { + if (!reustMsg.Contains("没有需要取消的订阅项目")) + { + APIUtlis.ApiApplyAct(24, "取消订阅"); + } + if (base.IsHandleCreated) + { + BeginInvoke((Action)delegate + { + string[] array2 = txtAppleId.Text.Split('\n'); + foreach (string text in array2) + { + if (text.StartsWith(item.appleId)) + { + txtAppleId.Text = txtAppleId.Text.Replace(text, ""); + } + } + }); + } + } + iniserTodb(item.appleId, applePwd, subscriptionsAll, reustMsg); + } + else + { + insertLog(item.appleId + ",ID登录失败:" + msg); + } + goto IL_0384; + } + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + insertLog("请求失败:" + ex.Message); + goto IL_0384; + } + continue; + IL_0384: + endRuning(taskRunModel); + } + }); + } + await Task.WhenAll(array); + AppleExecuteTask.TaskRunModels.Clear(); + base.taskState.isRun = false; + base.taskState.TaskIsRun = false; + btnStartRemovePay.Enabled = true; + insertLog("-------处理结束---------"); + } + + private void iniserTodb(string appleId, string applePwd, string subscriptionsAll, string reustMsg) + { + Dictionary dictionary = new Dictionary(); + dictionary.Add("type", "cancelSubscription"); + dictionary.Add("addTime", Tools.GenerateTimeStamp().ToString()); + dictionary.Add("value1", appleId); + dictionary.Add("value2", applePwd); + dictionary.Add("value3", subscriptionsAll); + dictionary.Add("value4", reustMsg); + SqliteHelper.ExecuteInsert("itunes_db", dictionary); + lock (lvLogList) + { + BeginInvoke((Action)delegate + { + ListViewItem value = new ListViewItem((lvLogList.Items.Count + 1).ToString()) + { + SubItems = { appleId, applePwd, subscriptionsAll, reustMsg } + }; + lvLogList.Items.Add(value); + }); + } + } + + public bool CancelSubscription(bool startVpn, AppleItunesLogin itunesLogin, ItunesUtlis utlis, AppleAcount acount, string subscribeFilter, bool subscribeOnlyQuery, ref string subscriptionsAll, ref string reustMsg, bool isRetry = false) + { + bool result = false; + if (itunesLogin != null) + { + insertLog(itunesLogin.account + ",正在查询订阅.."); + Dictionary dictionary = new Dictionary(); + dictionary.Add("X-Apple-Store-Front", itunesLogin.software); + string url = "https://p" + itunesLogin.ServerId + "-buy.itunes.apple.com/commerce/account/subscriptions?prevpage=accountsettings&version=2.0"; + HttpResult jsonItunesWebContext = utlis.getJsonItunesWebContext(url, "https://finance-app.itunes.apple.com/", itunesLogin, dictionary, addToken: true); + if (jsonItunesWebContext.StatusCode == HttpStatusCode.OK) + { + SubscriptionModel subscriptionModel = Tools.Todejosn(jsonItunesWebContext.Html); + if (subscriptionModel.status == 0) + { + string text = ""; + int num = 0; + int num2 = 0; + SubscriptionModel.Subscription[] array = subscriptionModel?.subscriptions; + foreach (SubscriptionModel.Subscription subscription in array) + { + string text2 = ""; + if (subscription.latestPlan != null && subscription.latestPlan.paidPrice != null) + { + text2 = subscription.latestPlan.paidPrice; + } + DateTime timeByJsTimeStamp = Tools.GetTimeByJsTimeStamp(subscription.expirationTimestamp); + text = text + subscription.publicationName + " (" + text2 + ") [" + timeByJsTimeStamp.ToString("yyyy-MM-dd HH:mm"); + if (subscription.isAutoRenewEnabled) + { + text += " 续订"; + num++; + } + else + { + text += " 到期"; + } + text += "] ,"; + } + text = "可取消数量:" + num + "," + text; + insertLog(string.Concat(str2: subscriptionsAll = text.TrimEnd(','), str0: itunesLogin.account, str1: ",")); + string[] array2 = subscribeFilter.Split('-'); + int num3 = 0; + if (!subscribeOnlyQuery) + { + array = subscriptionModel?.subscriptions; + foreach (SubscriptionModel.Subscription subscription2 in array) + { + if (!base.taskState.isRun) + { + break; + } + if (!subscription2.isAutoRenewEnabled) + { + continue; + } + bool flag = false; + if (!string.IsNullOrEmpty(subscribeFilter)) + { + string[] array3 = array2; + foreach (string value in array3) + { + if (subscription2.publicationName.Contains(value)) + { + flag = true; + break; + } + } + } + else + { + flag = true; + } + if (flag) + { + insertLog(itunesLogin.account + ",正在取消 " + subscription2.publicationName); + string text3 = utlis.CancelSubscription(subscription2.subscriptionId, itunesLogin); + if (text3 == "0000") + { + num2++; + insertLog(itunesLogin.account + "," + subscription2.publicationName + ",订阅取消成功"); + reustMsg = reustMsg + "【" + subscription2.publicationName + ",订阅取消成功】"; + continue; + } + insertLog(itunesLogin.account + "," + subscription2.publicationName + ",订阅取消失败:" + text3); + reustMsg = reustMsg + "【" + subscription2.publicationName + ",订阅取消失败:" + text3 + "】"; + } + else + { + num3++; + } + } + if (num2 > 0) + { + reustMsg = "成功取消数量:" + num2 + "," + reustMsg; + } + if (num == 0) + { + insertLog(itunesLogin.account + ",没有需要取消的订阅项目"); + reustMsg = "没有需要取消的订阅项目"; + result = true; + } + else if (num3 != num) + { + result = ((num2 == num || num == num2 + num3) ? true : false); + } + else + { + insertLog(itunesLogin.account + ",没有符合关键字【" + subscribeFilter + "】的订阅项目"); + reustMsg = "没有符合关键字【" + subscribeFilter + "】的订阅项目"; + result = true; + } + } + else + { + reustMsg = "只查询"; + result = true; + } + } + else + { + if (!isRetry) + { + string msg = ""; + iTunesAccountLoginCache.removeReddemUserInfo(itunesLogin.account, itunesLogin.StdndbyKeyGuid); + itunesLogin = getItunesLogin(startVpn, acount, 24, utlis, ref msg); + if (itunesLogin != null) + { + return CancelSubscription(startVpn, itunesLogin, utlis, acount, subscribeFilter, subscribeOnlyQuery, ref subscriptionsAll, ref reustMsg, isRetry: true); + } + insertLog(itunesLogin.account + ",登录失败:" + msg); + } + insertLog(itunesLogin.account + ",订阅查询失败....(" + (int)jsonItunesWebContext.StatusCode + ")"); + reustMsg = "订阅查询失败"; + } + } + else + { + insertLog(itunesLogin.account + ",订阅查询失败....(" + (int)jsonItunesWebContext.StatusCode + ")"); + reustMsg = "订阅查询失败"; + } + } + return result; + } + + private void btnStopRemovePay_Click(object sender, EventArgs e) + { + base.taskState.Stop(); + insertLog("正在请求停止,请稍后"); + } + + private void btnRemovePayLog_Click(object sender, EventArgs e) + { + FromDBDataQuery fromDBDataQuery = new FromDBDataQuery(); + fromDBDataQuery.sqlTitle = new Dictionary + { + { "value1", "账号|200" }, + { "value2", "密码|100" }, + { "value3", "订阅信息|250" }, + { "value4", "信息|250" } + }; + fromDBDataQuery.type = "cancelSubscription"; + fromDBDataQuery.typeName = "Apple取消订阅"; + fromDBDataQuery.Show(); + } + + private void btnEmptyLogList_Click(object sender, EventArgs e) + { + if (MessageBox.Show("确认清空列表数据吗", "提示", MessageBoxButtons.OKCancel) == DialogResult.OK) + { + lvLogList.Items.Clear(); + } + } + + private void btnExportLogList_Click(object sender, EventArgs e) + { + ExperList(lvLogList); + } + + private void ckSubscribeOnlyQuery_CheckedChanged(object sender, EventArgs e) + { + txtSubscribeFilter.Enabled = !ckSubscribeOnlyQuery.Checked; + } + + protected override void Dispose(bool disposing) + { + if (disposing && components != null) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.ckCancelSubscriptionVpn = new System.Windows.Forms.CheckBox(); + this.labRemovePayDianShu = new System.Windows.Forms.Label(); + this.label31 = new System.Windows.Forms.Label(); + this.groupBox5 = new System.Windows.Forms.GroupBox(); + this.btnStopRemovePay = new System.Windows.Forms.Button(); + this.btnRemovePayLog = new System.Windows.Forms.Button(); + this.btnStartRemovePay = new System.Windows.Forms.Button(); + this.label5 = new System.Windows.Forms.Label(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); + this.groupBox4 = new System.Windows.Forms.GroupBox(); + this.txtAppleId = new System.Windows.Forms.RichTextBox(); + this.txtSubscribeFilter = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.textBox3 = new System.Windows.Forms.TextBox(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.lvLogList = new System.Windows.Forms.ListView(); + this.columnHeader5 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader1 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader2 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader3 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader4 = new System.Windows.Forms.ColumnHeader(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.txtLog = new System.Windows.Forms.RichTextBox(); + this.btnExportLogList = new System.Windows.Forms.Button(); + this.btnEmptyLogList = new System.Windows.Forms.Button(); + this.ckSubscribeOnlyQuery = new System.Windows.Forms.CheckBox(); + this.groupBox5.SuspendLayout(); + this.groupBox4.SuspendLayout(); + this.tabControl1.SuspendLayout(); + this.tabPage2.SuspendLayout(); + this.tabPage1.SuspendLayout(); + base.SuspendLayout(); + this.ckCancelSubscriptionVpn.AutoSize = true; + this.ckCancelSubscriptionVpn.ForeColor = System.Drawing.Color.Red; + this.ckCancelSubscriptionVpn.Location = new System.Drawing.Point(469, 273); + this.ckCancelSubscriptionVpn.Name = "ckCancelSubscriptionVpn"; + this.ckCancelSubscriptionVpn.Size = new System.Drawing.Size(108, 16); + this.ckCancelSubscriptionVpn.TabIndex = 34; + this.ckCancelSubscriptionVpn.Text = "使用随机IP代理"; + this.ckCancelSubscriptionVpn.UseVisualStyleBackColor = true; + this.labRemovePayDianShu.AutoSize = true; + this.labRemovePayDianShu.Font = new System.Drawing.Font("微软雅黑", 10.5f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.labRemovePayDianShu.ForeColor = System.Drawing.Color.Crimson; + this.labRemovePayDianShu.Location = new System.Drawing.Point(669, 271); + this.labRemovePayDianShu.Name = "labRemovePayDianShu"; + this.labRemovePayDianShu.Size = new System.Drawing.Size(18, 19); + this.labRemovePayDianShu.TabIndex = 32; + this.labRemovePayDianShu.Text = "0"; + this.label31.AutoSize = true; + this.label31.Location = new System.Drawing.Point(598, 276); + this.label31.Name = "label31"; + this.label31.Size = new System.Drawing.Size(65, 12); + this.label31.TabIndex = 31; + this.label31.Text = "消耗点数:"; + this.groupBox5.Controls.Add(this.btnStopRemovePay); + this.groupBox5.Controls.Add(this.btnRemovePayLog); + this.groupBox5.Controls.Add(this.btnStartRemovePay); + this.groupBox5.Controls.Add(this.label5); + this.groupBox5.Location = new System.Drawing.Point(591, 29); + this.groupBox5.Name = "groupBox5"; + this.groupBox5.Size = new System.Drawing.Size(200, 208); + this.groupBox5.TabIndex = 29; + this.groupBox5.TabStop = false; + this.groupBox5.Text = "操作"; + this.btnStopRemovePay.Location = new System.Drawing.Point(33, 98); + this.btnStopRemovePay.Name = "btnStopRemovePay"; + this.btnStopRemovePay.Size = new System.Drawing.Size(130, 24); + this.btnStopRemovePay.TabIndex = 8; + this.btnStopRemovePay.Text = "停止执行"; + this.btnStopRemovePay.UseVisualStyleBackColor = true; + this.btnStopRemovePay.Click += new System.EventHandler(btnStopRemovePay_Click); + this.btnRemovePayLog.Location = new System.Drawing.Point(33, 140); + this.btnRemovePayLog.Name = "btnRemovePayLog"; + this.btnRemovePayLog.Size = new System.Drawing.Size(130, 23); + this.btnRemovePayLog.TabIndex = 7; + this.btnRemovePayLog.Text = "移除记录"; + this.btnRemovePayLog.UseVisualStyleBackColor = true; + this.btnRemovePayLog.Click += new System.EventHandler(btnRemovePayLog_Click); + this.btnStartRemovePay.Location = new System.Drawing.Point(33, 35); + this.btnStartRemovePay.Name = "btnStartRemovePay"; + this.btnStartRemovePay.Size = new System.Drawing.Size(130, 46); + this.btnStartRemovePay.TabIndex = 6; + this.btnStartRemovePay.Text = "开始执行"; + this.btnStartRemovePay.UseVisualStyleBackColor = true; + this.btnStartRemovePay.Click += new System.EventHandler(btnStartRemovePay_Click); + this.label5.AutoSize = true; + this.label5.ForeColor = System.Drawing.Color.Crimson; + this.label5.Location = new System.Drawing.Point(26, 182); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(161, 12); + this.label5.TabIndex = 33; + this.label5.Text = "订阅全部取消成功才扣除点数"; + this.textBox1.BackColor = System.Drawing.SystemColors.ControlLightLight; + this.textBox1.Location = new System.Drawing.Point(106, 12); + this.textBox1.Name = "textBox1"; + this.textBox1.ReadOnly = true; + this.textBox1.Size = new System.Drawing.Size(332, 21); + this.textBox1.TabIndex = 28; + this.textBox1.Text = "xxx@xx.com----密码"; + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(23, 15); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(89, 12); + this.label6.TabIndex = 27; + this.label6.Text = "输入的ID格式:"; + this.groupBox4.Controls.Add(this.txtAppleId); + this.groupBox4.Location = new System.Drawing.Point(22, 38); + this.groupBox4.Name = "groupBox4"; + this.groupBox4.Size = new System.Drawing.Size(548, 202); + this.groupBox4.TabIndex = 26; + this.groupBox4.TabStop = false; + this.groupBox4.Text = "输入AppleID 多个ID请换行"; + this.txtAppleId.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtAppleId.Location = new System.Drawing.Point(3, 17); + this.txtAppleId.Name = "txtAppleId"; + this.txtAppleId.Size = new System.Drawing.Size(542, 182); + this.txtAppleId.TabIndex = 0; + this.txtAppleId.Text = ""; + this.txtSubscribeFilter.Location = new System.Drawing.Point(48, 270); + this.txtSubscribeFilter.Name = "txtSubscribeFilter"; + this.txtSubscribeFilter.Size = new System.Drawing.Size(278, 21); + this.txtSubscribeFilter.TabIndex = 35; + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(19, 249); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(503, 12); + this.label1.TabIndex = 36; + this.label1.Text = "下方可输入需要取消的订阅名称关键字,留空则全部取消,取消多个订阅可用 - 分割,例如:"; + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(16, 274); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(29, 12); + this.label2.TabIndex = 37; + this.label2.Text = "筛选"; + this.textBox3.Location = new System.Drawing.Point(529, 245); + this.textBox3.Name = "textBox3"; + this.textBox3.ReadOnly = true; + this.textBox3.Size = new System.Drawing.Size(134, 21); + this.textBox3.TabIndex = 38; + this.textBox3.Text = "QQ音乐-爱奇艺"; + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Controls.Add(this.tabPage2); + this.tabControl1.Location = new System.Drawing.Point(18, 297); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(861, 337); + this.tabControl1.TabIndex = 39; + this.tabPage2.Controls.Add(this.lvLogList); + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(853, 311); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "取消订阅结果"; + this.tabPage2.UseVisualStyleBackColor = true; + this.lvLogList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[5] { this.columnHeader5, this.columnHeader1, this.columnHeader2, this.columnHeader3, this.columnHeader4 }); + this.lvLogList.Dock = System.Windows.Forms.DockStyle.Fill; + this.lvLogList.FullRowSelect = true; + this.lvLogList.HideSelection = false; + this.lvLogList.Location = new System.Drawing.Point(3, 3); + this.lvLogList.Name = "lvLogList"; + this.lvLogList.Size = new System.Drawing.Size(847, 305); + this.lvLogList.TabIndex = 1; + this.lvLogList.UseCompatibleStateImageBehavior = false; + this.lvLogList.View = System.Windows.Forms.View.Details; + this.columnHeader5.Text = "序号"; + this.columnHeader1.Text = "账号"; + this.columnHeader1.Width = 150; + this.columnHeader2.Text = "密码"; + this.columnHeader2.Width = 100; + this.columnHeader3.Text = "订阅信息"; + this.columnHeader3.Width = 150; + this.columnHeader4.Text = "取消结果"; + this.columnHeader4.Width = 300; + this.tabPage1.Controls.Add(this.txtLog); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(853, 311); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "日志"; + this.tabPage1.UseVisualStyleBackColor = true; + this.txtLog.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtLog.ForeColor = System.Drawing.Color.LightSeaGreen; + this.txtLog.Location = new System.Drawing.Point(3, 3); + this.txtLog.Name = "txtLog"; + this.txtLog.ReadOnly = true; + this.txtLog.Size = new System.Drawing.Size(847, 305); + this.txtLog.TabIndex = 0; + this.txtLog.Text = ""; + this.btnExportLogList.Location = new System.Drawing.Point(802, 272); + this.btnExportLogList.Name = "btnExportLogList"; + this.btnExportLogList.Size = new System.Drawing.Size(75, 23); + this.btnExportLogList.TabIndex = 41; + this.btnExportLogList.Text = "导出"; + this.btnExportLogList.UseVisualStyleBackColor = true; + this.btnExportLogList.Click += new System.EventHandler(btnExportLogList_Click); + this.btnEmptyLogList.Location = new System.Drawing.Point(716, 272); + this.btnEmptyLogList.Name = "btnEmptyLogList"; + this.btnEmptyLogList.Size = new System.Drawing.Size(75, 23); + this.btnEmptyLogList.TabIndex = 40; + this.btnEmptyLogList.Text = "清空列表"; + this.btnEmptyLogList.UseVisualStyleBackColor = true; + this.btnEmptyLogList.Click += new System.EventHandler(btnEmptyLogList_Click); + this.ckSubscribeOnlyQuery.AutoSize = true; + this.ckSubscribeOnlyQuery.Location = new System.Drawing.Point(343, 273); + this.ckSubscribeOnlyQuery.Name = "ckSubscribeOnlyQuery"; + this.ckSubscribeOnlyQuery.Size = new System.Drawing.Size(96, 16); + this.ckSubscribeOnlyQuery.TabIndex = 42; + this.ckSubscribeOnlyQuery.Text = "只查询不取消"; + this.ckSubscribeOnlyQuery.UseVisualStyleBackColor = true; + this.ckSubscribeOnlyQuery.CheckedChanged += new System.EventHandler(ckSubscribeOnlyQuery_CheckedChanged); + base.AutoScaleDimensions = new System.Drawing.SizeF(6f, 12f); + base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + base.ClientSize = new System.Drawing.Size(891, 633); + base.Controls.Add(this.ckSubscribeOnlyQuery); + base.Controls.Add(this.btnExportLogList); + base.Controls.Add(this.btnEmptyLogList); + base.Controls.Add(this.tabControl1); + base.Controls.Add(this.textBox3); + base.Controls.Add(this.label2); + base.Controls.Add(this.label1); + base.Controls.Add(this.txtSubscribeFilter); + base.Controls.Add(this.ckCancelSubscriptionVpn); + base.Controls.Add(this.labRemovePayDianShu); + base.Controls.Add(this.label31); + base.Controls.Add(this.groupBox5); + base.Controls.Add(this.textBox1); + base.Controls.Add(this.label6); + base.Controls.Add(this.groupBox4); + base.MaximizeBox = false; + base.Name = "FormCancelSubscriptions"; + base.ShowIcon = false; + base.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "查询或取消订阅"; + base.Load += new System.EventHandler(FormCancelSubscriptions_Load); + this.groupBox5.ResumeLayout(false); + this.groupBox5.PerformLayout(); + this.groupBox4.ResumeLayout(false); + this.tabControl1.ResumeLayout(false); + this.tabPage2.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + base.ResumeLayout(false); + base.PerformLayout(); + } + } +} diff --git a/AppleBatch_June/FormCountdown.cs b/AppleBatch_June/FormCountdown.cs new file mode 100644 index 0000000..1226d42 --- /dev/null +++ b/AppleBatch_June/FormCountdown.cs @@ -0,0 +1,499 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using AppleBatch_June.ExecuteTasks; + +namespace AppleBatch_June +{ + public class FormCountdown : Form + { + private bool isMouseDown; + + private Point mouseOffset; + + private Font clostOldFont; + + private IContainer components; + + private Panel panel1; + + private ColumnHeader columnHeader1; + + private ColumnHeader columnHeader2; + + private Label label1; + + private Label label4; + + private CheckBox ckExpireRedeem; + + private Button button1; + + private ListView listCountdownIds; + + private ContextMenuStrip contextMenuStrip1; + + private ToolStripMenuItem 停止ToolStripMenuItem; + + private ToolStripMenuItem 直接兑换ToolStripMenuItem; + + private CheckBox ckFollowMainWin; + + public int countdownSeconds { get; set; } = 65; + + + public bool ischanggeLocation { get; set; } + + public event DelCountdownEnd evCountdownEnd; + + public FormCountdown() + { + InitializeComponent(); + } + + public void addAppleCountdown(string appleId) + { + if (!base.IsDisposed) + { + Invoke((Action)delegate + { + ListViewItem value = new ListViewItem(appleId) + { + SubItems = { countdownSeconds + "秒" }, + UseItemStyleForSubItems = false + }; + listCountdownIds.Items.Add(value); + }); + } + } + + private void FormCountdown_Load(object sender, EventArgs e) + { + clostOldFont = label4.Font; + changgeLocation(isLoad: true); + ckExpireRedeem.Checked = ((!(ConfigUtlis.getConfigValue("ckExpireRedeem") == "False")) ? true : false); + ckFollowMainWin.Checked = ((ConfigUtlis.getConfigValue("ckFollowMainWin") == "True") ? true : false); + if (int.TryParse(AppSysConfig.getConfig("RedeemDelayTime"), out var result)) + { + countdownSeconds = result; + } + label1.Text = label1.Text.Replace("{s}", countdownSeconds + "秒"); + Task.Factory.StartNew(TimeTaskRun, TaskCreationOptions.LongRunning); + } + + public void TimeTaskRun() + { + try + { + do + { + try + { + UpdataMainUi(delegate + { + List list = new List(); + foreach (ListViewItem item in listCountdownIds.Items) + { + if (int.TryParse(item.SubItems[1].Text.Replace("秒", ""), out var result) || item.SubItems[1].Text == "等待兑换结束") + { + result--; + if (result <= 0) + { + if (ckExpireRedeem.Checked) + { + if (!ReddemTask.Instance.isRun && !ReddemTask.Instance.TaskIsRun) + { + item.Remove(); + list.Add(item.SubItems[0].Text); + } + else + { + item.SubItems[1].Text = "等待兑换结束"; + } + } + else + { + item.Remove(); + } + } + else + { + item.SubItems[1].Text = result + "秒"; + } + } + } + this.evCountdownEnd?.Invoke(list, 1); + }); + Thread.Sleep(1000); + } + catch (Exception) + { + } + } + while (!base.IsDisposed && base.IsHandleCreated); + } + catch (Exception) + { + } + } + + public List CountdowningAppleid() + { + try + { + if (!base.IsDisposed && base.IsHandleCreated) + { + return Invoke((Func>)delegate + { + List list = new List(); + foreach (ListViewItem item in listCountdownIds.Items) + { + if (int.TryParse(item.SubItems[1].Text.Replace("秒", ""), out var result) && result > 2) + { + list.Add(item.SubItems[0].Text); + } + } + return list; + }) as List; + } + } + catch (Exception) + { + } + return null; + } + + public void UpdataMainUi(Action act) + { + try + { + if (!base.IsDisposed && base.IsHandleCreated) + { + Invoke(act); + } + } + catch (Exception) + { + } + } + + private void FormCountdown_MouseDown(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + isMouseDown = true; + mouseOffset = new Point(-e.X, -e.Y); + } + } + + public void changgeLocation(bool isLoad = false) + { + if (ckFollowMainWin.Checked || isLoad) + { + int right = Application.OpenForms["FromMain"].Right; + int top = Application.OpenForms["FromMain"].Top; + base.Location = new Point(right, top); + if (!ischanggeLocation) + { + Activate(); + ischanggeLocation = true; + } + } + } + + private void label4_Click(object sender, EventArgs e) + { + base.WindowState = FormWindowState.Minimized; + Close(); + } + + private void label4_MouseEnter(object sender, EventArgs e) + { + clostOldFont = label4.Font; + label4.Font = new Font("微软雅黑", 12.5f, FontStyle.Bold, GraphicsUnit.Point, 134); + } + + private void label4_MouseLeave(object sender, EventArgs e) + { + label4.Font = clostOldFont; + } + + private void label1_MouseMove(object sender, MouseEventArgs e) + { + if (isMouseDown) + { + Point mousePosition = Control.MousePosition; + mousePosition.Offset(mouseOffset.X, mouseOffset.Y); + base.Location = mousePosition; + } + } + + private void checkBox1_MouseMove(object sender, MouseEventArgs e) + { + } + + private void FormCountdown_FormClosed(object sender, FormClosedEventArgs e) + { + this.evCountdownEnd?.Invoke(null, -1); + } + + private void ckExpireRedeem_CheckedChanged(object sender, EventArgs e) + { + ConfigUtlis.saveConfigKey("ckExpireRedeem", ckExpireRedeem.Checked.ToString()); + } + + private void button1_Click(object sender, EventArgs e) + { + lock (listCountdownIds) + { + listCountdownIds.Items.Clear(); + } + } + + private void 停止ToolStripMenuItem_Click(object sender, EventArgs e) + { + foreach (ListViewItem selectedItem in listCountdownIds.SelectedItems) + { + listCountdownIds.Items.Remove(selectedItem); + } + } + + private void 直接兑换ToolStripMenuItem_Click(object sender, EventArgs e) + { + ckExpireRedeem.Checked = true; + foreach (ListViewItem selectedItem in listCountdownIds.SelectedItems) + { + selectedItem.SubItems[1].Text = "0秒"; + } + } + + private void ckFollowMainWin_CheckedChanged(object sender, EventArgs e) + { + if (ckFollowMainWin.Checked) + { + changgeLocation(); + base.TopMost = false; + } + else + { + base.TopMost = true; + } + ConfigUtlis.saveConfigKey("ckFollowMainWin", ckFollowMainWin.Checked.ToString()); + } + + private void ckFollowMainWin_MouseMove(object sender, MouseEventArgs e) + { + if (isMouseDown) + { + Point mousePosition = Control.MousePosition; + mousePosition.Offset(mouseOffset.X, mouseOffset.Y); + base.Location = mousePosition; + } + } + + private void FormCountdown_MouseMove(object sender, MouseEventArgs e) + { + if (isMouseDown) + { + Point mousePosition = Control.MousePosition; + mousePosition.Offset(mouseOffset.X, mouseOffset.Y); + base.Location = mousePosition; + } + } + + private void FormCountdown_MouseUp(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + isMouseDown = false; + } + } + + private void label1_MouseDown(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + isMouseDown = true; + mouseOffset = new Point(-e.X, -e.Y); + } + } + + private void ckFollowMainWin_MouseDown(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + isMouseDown = true; + mouseOffset = new Point(-e.X, -e.Y); + } + } + + private void ckExpireRedeem_MouseDown(object sender, MouseEventArgs e) + { + } + + private void ckExpireRedeem_MouseUp(object sender, MouseEventArgs e) + { + } + + private void label1_MouseUp(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + isMouseDown = false; + } + } + + private void ckFollowMainWin_MouseUp(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + isMouseDown = false; + } + } + + protected override void Dispose(bool disposing) + { + if (disposing && components != null) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.panel1 = new System.Windows.Forms.Panel(); + this.listCountdownIds = new System.Windows.Forms.ListView(); + this.columnHeader1 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader2 = new System.Windows.Forms.ColumnHeader(); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.停止ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.直接兑换ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.label1 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.ckExpireRedeem = new System.Windows.Forms.CheckBox(); + this.button1 = new System.Windows.Forms.Button(); + this.ckFollowMainWin = new System.Windows.Forms.CheckBox(); + this.panel1.SuspendLayout(); + this.contextMenuStrip1.SuspendLayout(); + base.SuspendLayout(); + this.panel1.Controls.Add(this.listCountdownIds); + this.panel1.Location = new System.Drawing.Point(7, 82); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(249, 217); + this.panel1.TabIndex = 0; + this.listCountdownIds.Columns.AddRange(new System.Windows.Forms.ColumnHeader[2] { this.columnHeader1, this.columnHeader2 }); + this.listCountdownIds.ContextMenuStrip = this.contextMenuStrip1; + this.listCountdownIds.Dock = System.Windows.Forms.DockStyle.Fill; + this.listCountdownIds.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.listCountdownIds.FullRowSelect = true; + this.listCountdownIds.HideSelection = false; + this.listCountdownIds.Location = new System.Drawing.Point(0, 0); + this.listCountdownIds.Name = "listCountdownIds"; + this.listCountdownIds.Size = new System.Drawing.Size(249, 217); + this.listCountdownIds.TabIndex = 0; + this.listCountdownIds.UseCompatibleStateImageBehavior = false; + this.listCountdownIds.View = System.Windows.Forms.View.Details; + this.columnHeader1.Text = "账号"; + this.columnHeader1.Width = 150; + this.columnHeader2.Text = "时间"; + this.columnHeader2.Width = 88; + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[2] { this.停止ToolStripMenuItem, this.直接兑换ToolStripMenuItem }); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(125, 48); + this.停止ToolStripMenuItem.Name = "停止ToolStripMenuItem"; + this.停止ToolStripMenuItem.Size = new System.Drawing.Size(124, 22); + this.停止ToolStripMenuItem.Text = "停止计时"; + this.停止ToolStripMenuItem.Click += new System.EventHandler(停止ToolStripMenuItem_Click); + this.直接兑换ToolStripMenuItem.Name = "直接兑换ToolStripMenuItem"; + this.直接兑换ToolStripMenuItem.Size = new System.Drawing.Size(124, 22); + this.直接兑换ToolStripMenuItem.Text = "直接兑换"; + this.直接兑换ToolStripMenuItem.Click += new System.EventHandler(直接兑换ToolStripMenuItem_Click); + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.label1.Location = new System.Drawing.Point(6, 34); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(154, 17); + this.label1.TabIndex = 1; + this.label1.Text = "兑换不可用的账号{s}倒计时"; + this.label1.MouseDown += new System.Windows.Forms.MouseEventHandler(label1_MouseDown); + this.label1.MouseMove += new System.Windows.Forms.MouseEventHandler(label1_MouseMove); + this.label1.MouseUp += new System.Windows.Forms.MouseEventHandler(label1_MouseUp); + this.label4.AutoSize = true; + this.label4.BackColor = System.Drawing.Color.Transparent; + this.label4.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.label4.Font = new System.Drawing.Font("微软雅黑", 10.5f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.label4.ForeColor = System.Drawing.Color.Blue; + this.label4.Location = new System.Drawing.Point(223, 6); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(37, 20); + this.label4.TabIndex = 9; + this.label4.Text = "关闭"; + this.label4.Click += new System.EventHandler(label4_Click); + this.label4.MouseEnter += new System.EventHandler(label4_MouseEnter); + this.label4.MouseLeave += new System.EventHandler(label4_MouseLeave); + this.ckExpireRedeem.AutoSize = true; + this.ckExpireRedeem.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.ckExpireRedeem.ForeColor = System.Drawing.Color.Blue; + this.ckExpireRedeem.Location = new System.Drawing.Point(10, 57); + this.ckExpireRedeem.Name = "ckExpireRedeem"; + this.ckExpireRedeem.Size = new System.Drawing.Size(135, 21); + this.ckExpireRedeem.TabIndex = 10; + this.ckExpireRedeem.Text = "倒计时结束自动兑换"; + this.ckExpireRedeem.UseVisualStyleBackColor = true; + this.ckExpireRedeem.CheckedChanged += new System.EventHandler(ckExpireRedeem_CheckedChanged); + this.ckExpireRedeem.MouseDown += new System.Windows.Forms.MouseEventHandler(ckExpireRedeem_MouseDown); + this.ckExpireRedeem.MouseMove += new System.Windows.Forms.MouseEventHandler(checkBox1_MouseMove); + this.ckExpireRedeem.MouseUp += new System.Windows.Forms.MouseEventHandler(ckExpireRedeem_MouseUp); + this.button1.Location = new System.Drawing.Point(181, 51); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(74, 25); + this.button1.TabIndex = 11; + this.button1.Text = "停止全部"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(button1_Click); + this.ckFollowMainWin.AutoSize = true; + this.ckFollowMainWin.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.ckFollowMainWin.Location = new System.Drawing.Point(7, 6); + this.ckFollowMainWin.Name = "ckFollowMainWin"; + this.ckFollowMainWin.Size = new System.Drawing.Size(87, 21); + this.ckFollowMainWin.TabIndex = 12; + this.ckFollowMainWin.Text = "跟随主窗口"; + this.ckFollowMainWin.UseVisualStyleBackColor = true; + this.ckFollowMainWin.CheckedChanged += new System.EventHandler(ckFollowMainWin_CheckedChanged); + this.ckFollowMainWin.MouseDown += new System.Windows.Forms.MouseEventHandler(ckFollowMainWin_MouseDown); + this.ckFollowMainWin.MouseMove += new System.Windows.Forms.MouseEventHandler(ckFollowMainWin_MouseMove); + this.ckFollowMainWin.MouseUp += new System.Windows.Forms.MouseEventHandler(ckFollowMainWin_MouseUp); + base.AutoScaleDimensions = new System.Drawing.SizeF(6f, 12f); + base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.PowderBlue; + base.ClientSize = new System.Drawing.Size(266, 316); + base.Controls.Add(this.ckFollowMainWin); + base.Controls.Add(this.button1); + base.Controls.Add(this.ckExpireRedeem); + base.Controls.Add(this.label4); + base.Controls.Add(this.label1); + base.Controls.Add(this.panel1); + base.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + base.Name = "FormCountdown"; + base.ShowIcon = false; + base.ShowInTaskbar = false; + this.Text = "FormCountdown"; + base.TopMost = true; + base.FormClosed += new System.Windows.Forms.FormClosedEventHandler(FormCountdown_FormClosed); + base.Load += new System.EventHandler(FormCountdown_Load); + base.MouseDown += new System.Windows.Forms.MouseEventHandler(FormCountdown_MouseDown); + base.MouseMove += new System.Windows.Forms.MouseEventHandler(FormCountdown_MouseMove); + base.MouseUp += new System.Windows.Forms.MouseEventHandler(FormCountdown_MouseUp); + this.panel1.ResumeLayout(false); + this.contextMenuStrip1.ResumeLayout(false); + base.ResumeLayout(false); + base.PerformLayout(); + } + } +} diff --git a/AppleBatch_June/FormFindAppList.cs b/AppleBatch_June/FormFindAppList.cs new file mode 100644 index 0000000..0e38594 --- /dev/null +++ b/AppleBatch_June/FormFindAppList.cs @@ -0,0 +1,689 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.IO; +using System.Net; +using System.Text; +using System.Threading.Tasks; +using System.Web; +using System.Windows.Forms; +using DotNet.Utilities; +using Microsoft.VisualBasic; + +namespace AppleBatch_June +{ + public class FormFindAppList : Form + { + private string type = "software"; + + private ImageList imageList = new ImageList(); + + private readonly object obj = new object(); + + private string Refererurl = ""; + + private string _software = ""; + + private IContainer components; + + private Label label1; + + private TextBox txtKey; + + private Button btnSecher; + + private Label label2; + + private ListView listView1; + + private ComboBox comCountry; + + private Label label3; + + private ColumnHeader columnHeader1; + + private ColumnHeader columnHeader2; + + private ColumnHeader columnHeader4; + + private ContextMenuStrip contextMenuStrip1; + + private ToolStripMenuItem 打开链接ToolStripMenuItem; + + private ToolStripMenuItem 复制链接ToolStripMenuItem; + + private Label label4; + + private TextBox txtFilePach; + + private LinkLabel linkLabel1; + + private ToolStripMenuItem 保存到地址ToolStripMenuItem; + + private Label labGameCount; + + private RadioButton radioButton1; + + private RadioButton radioButton2; + + private LinkLabel linkLabel2; + + private LinkLabel linkLabel3; + + private LinkLabel linkLabel4; + + private RadioButton radioButton3; + + public string newFilePath { get; set; } = ""; + + + public FormFindAppList() + { + InitializeComponent(); + } + + private void FormFindAppList_Load(object sender, EventArgs e) + { + txtFilePach.Text = ConfigUtlis.getConfigValue("txtFilePach"); + restTxt(txtFilePach.Text); + AppleUtlis.LoadCountryCode(); + comCountry.DataSource = AppleUtlis.dataTable_0; + comCountry.DisplayMember = "name"; + comCountry.ValueMember = "description"; + comCountry.SelectedIndex = 0; + listView1.SmallImageList = imageList; + imageList.ImageSize = new Size(50, 50); + } + + private void btnSecher_Click(object sender, EventArgs e) + { + if (txtKey.Text.Length > 0) + { + listView1.Items.Clear(); + btnSecher.Enabled = false; + imageList.Images.Clear(); + string webContext = getWebContext(txtKey.Text, comCountry.SelectedValue.ToString()); + if (!string.IsNullOrEmpty(webContext)) + { + try + { + dynamic val = Tools.Todejosn(webContext); + int num = 0; + List list = new List(); + _ = val["pageData"]["searchPageData"]["bubbles"]; + foreach (object item2 in val["pageData"]["searchPageData"]["bubbles"]) + { + Dictionary dictionary = (Dictionary)(dynamic)item2; + dynamic val2 = dictionary["name"]; + if (!((val2 == type) ? true : false)) + { + continue; + } + foreach (object item3 in (dynamic)dictionary["results"]) + { + Dictionary dictionary2 = (Dictionary)(dynamic)item3; + string item = (dynamic)dictionary2["id"]; + list.Add(item); + num++; + } + } + int num2 = 0; + foreach (string item4 in list) + { + try + { + dynamic val3 = val["storePlatformData"]["lockup-room"]["results"][item4]; + dynamic val4 = val3["artwork"][0]["url"]; + dynamic val5 = val3["offers"][0]["priceFormatted"]; + string text = val3["name"]; + dynamic val6 = val3["url"]; + ListViewItem listViewItem = new ListViewItem((num2 + 1).ToString()); + listViewItem.ImageIndex = -1; + listViewItem.SubItems.Add(text + "【" + val5 + "】"); + listViewItem.SubItems.Add(val6); + listView1.Items.Add(listViewItem); + RendImage(val4, num2); + num2++; + } + catch (Exception) + { + } + } + } + catch (Exception ex2) + { + APIUtlis.requestUrl = "txtKey:" + txtKey.Text; + APIUtlis.AppRequestHtml("comCountry:" + comCountry.SelectedValue.ToString()); + APIUtlis.ApiSeriveError(ex2); + MessageBox.Show("搜索异常:" + ex2.Message); + } + } + else + { + MessageBox.Show("没有搜索结果"); + } + } + else + { + MessageBox.Show("请输入关键字"); + } + btnSecher.Enabled = true; + } + + public async void RendImage(string url, int imgIndex) + { + Image image = await Task.Run(() => getBitUrl(url)); + if (image == null || base.IsDisposed) + { + return; + } + lock (obj) + { + try + { + imageList.Images.Add(image); + listView1.Items[imgIndex].ImageIndex = imageList.Images.Count - 1; + } + catch (Exception) + { + } + } + } + + public string getWebContext(string key, string software) + { + Dictionary dictionary = new Dictionary(); + dictionary.Add("X-Apple-Store-Front", software); + dictionary.Add("X-Apple-Tz", "28800"); + dictionary.Add("Accept-Encoding", "gzip, deflate"); + dictionary.Add("Accept-Language", "zh-CN,zh;q=0.9,en;q=0"); + _software = software; + Refererurl = "https://search.itunes.apple.com/WebObjects/MZStore.woa/wa/search?submit=edit&term=" + HttpUtility.UrlEncode(key); + HttpItem httpItem = new HttpItem + { + URL = "https://search.itunes.apple.com/WebObjects/MZStore.woa/wa/search?submit=edit&term=" + HttpUtility.UrlEncode(key), + Method = "get", + Timeout = 180000, + ReadWriteTimeout = 60000, + UserAgent = "iTunes/12.0.2 (Windows; Microsoft Windows 7 Ultimate Edition Service Pack 1 (Build 7601)) AppleWebKit/537.60.15", + ContentType = "text/html", + Accept = "*/*", + Referer = "https://search.itunes.apple.com/WebObjects/MZStore.woa/wa/search?submit=edit&term=" + HttpUtility.UrlEncode(key), + ProtocolVersion = HttpVersion.Version11, + KeepAlive = true + }; + if (dictionary != null) + { + foreach (KeyValuePair item in dictionary) + { + httpItem.Header.Add(item.Key, item.Value); + } + } + HttpResult html = new HttpHelper().GetHtml(httpItem); + if (html.StatusCode == HttpStatusCode.OK) + { + return GetToken(html.Html, "serverData=", ""); + } + return ""; + } + + private string GetToken(string string_0, string string_1, string string_2) + { + int num = string_0.IndexOf(string_1); + if (num > -1) + { + if (string.IsNullOrEmpty(string_2)) + { + return string_0.Substring(num + string_1.Length, string_0.Length - num - string_1.Length); + } + int num2 = string_0.IndexOf(string_2, num + string_1.Length); + if (num2 > -1) + { + return string_0.Substring(num + string_1.Length, num2 - num - string_1.Length); + } + } + return string.Empty; + } + + private static Image resizeImage(Image imgToResize, Size size) + { + int num = imgToResize.Width; + int num2 = imgToResize.Height; + float num3 = 0f; + float num4 = (float)size.Width / (float)num; + float num5 = (float)size.Height / (float)num2; + num3 = ((!(num5 < num4)) ? num4 : num5); + int num6 = (int)((float)num * num3); + int num7 = (int)((float)num2 * num3); + Bitmap bitmap = new Bitmap(num6, num7); + Graphics graphics = Graphics.FromImage(bitmap); + graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; + graphics.SmoothingMode = SmoothingMode.AntiAlias; + graphics.SmoothingMode = SmoothingMode.HighQuality; + graphics.CompositingQuality = CompositingQuality.HighQuality; + graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; + graphics.DrawImage(imgToResize, 0, 0, num6, num7); + graphics.Dispose(); + return bitmap; + } + + public Image getBitUrl(string url) + { + try + { + Dictionary dictionary = new Dictionary(); + dictionary.Add("X-Apple-Store-Front", _software); + dictionary.Add("X-Apple-Tz", "28800"); + dictionary.Add("Accept-Encoding", "gzip, deflate"); + dictionary.Add("Accept-Language", "zh-CN,zh;q=0.9,en;q=0"); + HttpItem httpItem = new HttpItem + { + URL = url, + Method = "GET", + Timeout = 60000, + ReadWriteTimeout = 30000, + IsToLower = false, + Cookie = "", + UserAgent = "iTunes/11.2.2 (Windows; Microsoft Windows 7 Ultimate Edition Service Pack 1 (Build 7601)) AppleWebKit/537.60.15", + Accept = "text/html, application/xhtml+xml, */*", + ContentType = "text/html", + Referer = Refererurl, + ResultType = ResultType.Byte + }; + if (dictionary != null) + { + foreach (KeyValuePair item in dictionary) + { + httpItem.Header.Add(item.Key, item.Value); + } + } + HttpResult html = new HttpHelper().GetHtml(httpItem); + return byteArrayToImage(html.ResultByte); + } + catch (Exception) + { + return null; + } + } + + private Image byteArrayToImage(byte[] Bytes) + { + return Image.FromStream(new MemoryStream(Bytes), useEmbeddedColorManagement: true); + } + + private void 打开链接ToolStripMenuItem_Click(object sender, EventArgs e) + { + foreach (ListViewItem selectedItem in listView1.SelectedItems) + { + Process.Start(selectedItem.SubItems[2].Text); + } + } + + private void 复制链接ToolStripMenuItem_Click(object sender, EventArgs e) + { + string text = ""; + foreach (ListViewItem selectedItem in listView1.SelectedItems) + { + string text2 = selectedItem.SubItems[2].Text; + text = text + text2 + "\n"; + } + if (text.Length > 0) + { + Clipboard.SetText(text); + MessageBox.Show("复制成功"); + } + } + + private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + OpenFileDialog openFileDialog = new OpenFileDialog(); + openFileDialog.Filter = "文本txt|*.txt"; + if (openFileDialog.ShowDialog() == DialogResult.OK) + { + txtFilePach.Text = openFileDialog.FileName; + restTxt(txtFilePach.Text); + ConfigUtlis.saveConfigKey("txtFilePach", txtFilePach.Text); + } + } + + public void restTxt(string patch) + { + if (File.Exists(patch)) + { + labGameCount.Text = string.Concat(AppleUtlis.restTxt(patch).Count); + } + else + { + txtFilePach.Text = ""; + } + } + + private void 保存到地址ToolStripMenuItem_Click(object sender, EventArgs e) + { + if (!string.IsNullOrEmpty(txtFilePach.Text)) + { + if (!File.Exists(txtFilePach.Text)) + { + return; + } + if (!Tools.readFile(txtFilePach.Text, Encoding.UTF8).EndsWith("\n")) + { + File.AppendAllText(txtFilePach.Text, "\n", Encoding.UTF8); + } + int num = 0; + foreach (ListViewItem selectedItem in listView1.SelectedItems) + { + string text = selectedItem.SubItems[2].Text; + string text2 = selectedItem.SubItems[1].Text; + File.AppendAllText(txtFilePach.Text, text + "\t" + text2 + "\n", Encoding.UTF8); + num++; + } + restTxt(txtFilePach.Text); + if (num > 0) + { + MessageBox.Show("添加完成,添加数量为:" + num); + } + } + else + { + MessageBox.Show("请先选择文件"); + } + } + + private void radioButton2_CheckedChanged(object sender, EventArgs e) + { + type = "song"; + } + + private void radioButton1_CheckedChanged(object sender, EventArgs e) + { + type = "software"; + } + + private void radioButton3_CheckedChanged(object sender, EventArgs e) + { + type = "book"; + } + + private void comCountry_SelectedIndexChanged(object sender, EventArgs e) + { + } + + private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + if (!string.IsNullOrEmpty(txtFilePach.Text)) + { + FindAppListOptions findAppListOptions = new FindAppListOptions(); + findAppListOptions.filePatch = txtFilePach.Text; + findAppListOptions.ShowDialog(); + restTxt(txtFilePach.Text); + } + else + { + MessageBox.Show("请先选择应用文件地址"); + } + } + + private void linkLabel3_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + string text = Interaction.InputBox("请输入创建的应用文本名称", "请输入创建的应用文本名称"); + if (string.IsNullOrEmpty(text)) + { + return; + } + string text2 = ConfigUtlis.path + text + ".txt"; + if (File.Exists(text2)) + { + if (MessageBox.Show("已存在相同名称文件,是否覆盖源文件?", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes) + { + crateFile(text2); + } + } + else + { + crateFile(text2); + } + } + + private void crateFile(string filePath) + { + File.WriteAllText(filePath, "", Encoding.UTF8); + if (MessageBox.Show("创建成功,是否同步新文件到文本地址?", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes) + { + TextBox textBox = txtFilePach; + string text2 = (newFilePath = filePath); + textBox.Text = text2; + restTxt(txtFilePach.Text); + ConfigUtlis.saveConfigKey("txtFilePach", txtFilePach.Text); + } + } + + private void linkLabel4_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + newFilePath = txtFilePach.Text; + MessageBox.Show("已同步到软件 获取游戏功能 中的应用地址文件"); + } + + private void radioButton3_CheckedChanged_1(object sender, EventArgs e) + { + type = "ebook"; + } + + protected override void Dispose(bool disposing) + { + if (disposing && components != null) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.label1 = new System.Windows.Forms.Label(); + this.txtKey = new System.Windows.Forms.TextBox(); + this.btnSecher = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.listView1 = new System.Windows.Forms.ListView(); + this.columnHeader1 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader2 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader4 = new System.Windows.Forms.ColumnHeader(); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.打开链接ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.复制链接ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.保存到地址ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.comCountry = new System.Windows.Forms.ComboBox(); + this.label3 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.txtFilePach = new System.Windows.Forms.TextBox(); + this.linkLabel1 = new System.Windows.Forms.LinkLabel(); + this.labGameCount = new System.Windows.Forms.Label(); + this.radioButton1 = new System.Windows.Forms.RadioButton(); + this.radioButton2 = new System.Windows.Forms.RadioButton(); + this.linkLabel2 = new System.Windows.Forms.LinkLabel(); + this.linkLabel3 = new System.Windows.Forms.LinkLabel(); + this.linkLabel4 = new System.Windows.Forms.LinkLabel(); + this.radioButton3 = new System.Windows.Forms.RadioButton(); + this.contextMenuStrip1.SuspendLayout(); + base.SuspendLayout(); + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(275, 17); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(68, 17); + this.label1.TabIndex = 0; + this.label1.Text = "应用关键字"; + this.txtKey.Location = new System.Drawing.Point(349, 14); + this.txtKey.Name = "txtKey"; + this.txtKey.Size = new System.Drawing.Size(219, 23); + this.txtKey.TabIndex = 1; + this.btnSecher.Location = new System.Drawing.Point(586, 12); + this.btnSecher.Name = "btnSecher"; + this.btnSecher.Size = new System.Drawing.Size(99, 25); + this.btnSecher.TabIndex = 2; + this.btnSecher.Text = "查找"; + this.btnSecher.UseVisualStyleBackColor = true; + this.btnSecher.Click += new System.EventHandler(btnSecher_Click); + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(25, 105); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(405, 17); + this.label2.TabIndex = 3; + this.label2.Text = "搜索列表右键可以复制地址,( 请尽量输入全称,搜索结果只显示前10条 )"; + this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[3] { this.columnHeader1, this.columnHeader2, this.columnHeader4 }); + this.listView1.ContextMenuStrip = this.contextMenuStrip1; + this.listView1.FullRowSelect = true; + this.listView1.HideSelection = false; + this.listView1.Location = new System.Drawing.Point(24, 131); + this.listView1.Name = "listView1"; + this.listView1.Size = new System.Drawing.Size(801, 436); + this.listView1.TabIndex = 4; + this.listView1.UseCompatibleStateImageBehavior = false; + this.listView1.View = System.Windows.Forms.View.Details; + this.columnHeader1.Text = "序号"; + this.columnHeader1.Width = 100; + this.columnHeader2.Text = "应用名称"; + this.columnHeader2.Width = 250; + this.columnHeader4.Text = "链接"; + this.columnHeader4.Width = 400; + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[3] { this.打开链接ToolStripMenuItem, this.复制链接ToolStripMenuItem, this.保存到地址ToolStripMenuItem }); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(185, 70); + this.打开链接ToolStripMenuItem.Name = "打开链接ToolStripMenuItem"; + this.打开链接ToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.打开链接ToolStripMenuItem.Text = "打开链接"; + this.打开链接ToolStripMenuItem.Click += new System.EventHandler(打开链接ToolStripMenuItem_Click); + this.复制链接ToolStripMenuItem.Name = "复制链接ToolStripMenuItem"; + this.复制链接ToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.复制链接ToolStripMenuItem.Text = "复制链接"; + this.复制链接ToolStripMenuItem.Click += new System.EventHandler(复制链接ToolStripMenuItem_Click); + this.保存到地址ToolStripMenuItem.Name = "保存到地址ToolStripMenuItem"; + this.保存到地址ToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.保存到地址ToolStripMenuItem.Text = "保存链接到文本地址"; + this.保存到地址ToolStripMenuItem.Click += new System.EventHandler(保存到地址ToolStripMenuItem_Click); + this.comCountry.FormattingEnabled = true; + this.comCountry.Location = new System.Drawing.Point(128, 13); + this.comCountry.Name = "comCountry"; + this.comCountry.Size = new System.Drawing.Size(137, 25); + this.comCountry.TabIndex = 5; + this.comCountry.SelectedIndexChanged += new System.EventHandler(comCountry_SelectedIndexChanged); + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(39, 17); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(80, 17); + this.label3.TabIndex = 6; + this.label3.Text = "应用商店国家"; + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(63, 71); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(56, 17); + this.label4.TabIndex = 8; + this.label4.Text = "文本地址"; + this.txtFilePach.Location = new System.Drawing.Point(128, 68); + this.txtFilePach.Name = "txtFilePach"; + this.txtFilePach.ReadOnly = true; + this.txtFilePach.Size = new System.Drawing.Size(383, 23); + this.txtFilePach.TabIndex = 9; + this.linkLabel1.AutoSize = true; + this.linkLabel1.Location = new System.Drawing.Point(517, 71); + this.linkLabel1.Name = "linkLabel1"; + this.linkLabel1.Size = new System.Drawing.Size(56, 17); + this.linkLabel1.TabIndex = 10; + this.linkLabel1.TabStop = true; + this.linkLabel1.Text = "选择文件"; + this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(linkLabel1_LinkClicked); + this.labGameCount.AutoSize = true; + this.labGameCount.Location = new System.Drawing.Point(583, 73); + this.labGameCount.Name = "labGameCount"; + this.labGameCount.Size = new System.Drawing.Size(0, 17); + this.labGameCount.TabIndex = 11; + this.radioButton1.AutoSize = true; + this.radioButton1.Checked = true; + this.radioButton1.Location = new System.Drawing.Point(350, 42); + this.radioButton1.Name = "radioButton1"; + this.radioButton1.Size = new System.Drawing.Size(50, 21); + this.radioButton1.TabIndex = 12; + this.radioButton1.TabStop = true; + this.radioButton1.Text = "应用"; + this.radioButton1.UseVisualStyleBackColor = true; + this.radioButton1.CheckedChanged += new System.EventHandler(radioButton1_CheckedChanged); + this.radioButton2.AutoSize = true; + this.radioButton2.Location = new System.Drawing.Point(423, 42); + this.radioButton2.Name = "radioButton2"; + this.radioButton2.Size = new System.Drawing.Size(50, 21); + this.radioButton2.TabIndex = 13; + this.radioButton2.Text = "音乐"; + this.radioButton2.UseVisualStyleBackColor = true; + this.radioButton2.CheckedChanged += new System.EventHandler(radioButton2_CheckedChanged); + this.linkLabel2.AutoSize = true; + this.linkLabel2.Location = new System.Drawing.Point(625, 71); + this.linkLabel2.Name = "linkLabel2"; + this.linkLabel2.Size = new System.Drawing.Size(104, 17); + this.linkLabel2.TabIndex = 15; + this.linkLabel2.TabStop = true; + this.linkLabel2.Text = "编辑文件应用列表"; + this.linkLabel2.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(linkLabel2_LinkClicked); + this.linkLabel3.AutoSize = true; + this.linkLabel3.Font = new System.Drawing.Font("微软雅黑", 10.5f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.linkLabel3.LinkColor = System.Drawing.Color.FromArgb(192, 0, 0); + this.linkLabel3.Location = new System.Drawing.Point(428, 101); + this.linkLabel3.Name = "linkLabel3"; + this.linkLabel3.Size = new System.Drawing.Size(163, 20); + this.linkLabel3.TabIndex = 16; + this.linkLabel3.TabStop = true; + this.linkLabel3.Text = "创建新的应用文本文件?"; + this.linkLabel3.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(linkLabel3_LinkClicked); + this.linkLabel4.AutoSize = true; + this.linkLabel4.Location = new System.Drawing.Point(740, 71); + this.linkLabel4.Name = "linkLabel4"; + this.linkLabel4.Size = new System.Drawing.Size(80, 17); + this.linkLabel4.TabIndex = 17; + this.linkLabel4.TabStop = true; + this.linkLabel4.Text = "同步文本地址"; + this.linkLabel4.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(linkLabel4_LinkClicked); + this.radioButton3.AutoSize = true; + this.radioButton3.Location = new System.Drawing.Point(483, 41); + this.radioButton3.Name = "radioButton3"; + this.radioButton3.Size = new System.Drawing.Size(38, 21); + this.radioButton3.TabIndex = 18; + this.radioButton3.Text = "书"; + this.radioButton3.UseVisualStyleBackColor = true; + this.radioButton3.CheckedChanged += new System.EventHandler(radioButton3_CheckedChanged_1); + base.AcceptButton = this.btnSecher; + base.AutoScaleDimensions = new System.Drawing.SizeF(7f, 17f); + base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + base.ClientSize = new System.Drawing.Size(838, 576); + base.Controls.Add(this.radioButton3); + base.Controls.Add(this.linkLabel4); + base.Controls.Add(this.linkLabel3); + base.Controls.Add(this.linkLabel2); + base.Controls.Add(this.radioButton2); + base.Controls.Add(this.radioButton1); + base.Controls.Add(this.labGameCount); + base.Controls.Add(this.linkLabel1); + base.Controls.Add(this.txtFilePach); + base.Controls.Add(this.label4); + base.Controls.Add(this.label3); + base.Controls.Add(this.comCountry); + base.Controls.Add(this.listView1); + base.Controls.Add(this.label2); + base.Controls.Add(this.btnSecher); + base.Controls.Add(this.txtKey); + base.Controls.Add(this.label1); + this.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + base.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + base.MaximizeBox = false; + base.Name = "FormFindAppList"; + base.ShowIcon = false; + base.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "快速查找iTunes应用地址"; + base.Load += new System.EventHandler(FormFindAppList_Load); + this.contextMenuStrip1.ResumeLayout(false); + base.ResumeLayout(false); + base.PerformLayout(); + } + } +} diff --git a/AppleBatch_June/FormGiftcardBalance.cs b/AppleBatch_June/FormGiftcardBalance.cs new file mode 100644 index 0000000..1953fdb --- /dev/null +++ b/AppleBatch_June/FormGiftcardBalance.cs @@ -0,0 +1,3392 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Drawing; +using System.Linq; +using System.Media; +using System.Net; +using System.Runtime.InteropServices; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using System.Web; +using System.Windows.Forms; +using AppleBatch_June.Domain; +using AppleBatch_June.ExecuteTasks; +using AppleBatch_June.Model; +using AppleBatch_June.Properties; +using AppleBatch_June.StartTaskModel; +using AppleBatch_June.Utils; +using DotNet.Utilities; +using Microsoft.VisualBasic; + +namespace AppleBatch_June +{ + public class FormGiftcardBalance : BaseForm + { + public struct FLASHWINFO + { + public uint cbSize; + + public IntPtr hwnd; + + public uint dwFlags; + + public uint uCount; + + public uint dwTimeout; + } + + private GiftcardBalanceWeb giftcardBalance; + + private List GiftCardCountryList = new List(); + + private Control automatedParent; + + private Control autoIdList; + + private SoundPlayer sp; + + private Action balance_action; + + private Dictionary countriesList = new Dictionary(); + + public bool isLoginSucess; + + public static object loginLockObj = new object(); + + public DateTime loginTime = DateTime.Now.AddHours(-1.0); + + public DateTime loginCheckTime = DateTime.Now.AddHours(-1.0); + + private GiftcardBalanceAotuQueryTask AotuQueryTask; + + public bool isStartRun; + + public DateTime expirationTime = DateTime.Now; + + private bool expirationExecuted; + + private bool isOut; + + public const uint FLASHW_TRAY = 2u; + + public const uint FLASHW_TIMERNOFG = 12u; + + public const uint FLASHW_PARAM2 = 4u; + + private Dictionary FastCountrys = new Dictionary(); + + private IContainer components; + + private CheckBox ckGiftcardBalanceVpn; + + private Label label5; + + private Label labRemovePayDianShu; + + private Label label31; + + private GroupBox groupBox5; + + private Button btnStopRemovePay; + + private Button btnRemovePayLog; + + private Button btnStartRemovePay; + + private RichTextBox txtGiftcard; + + private ListView listGiftcardBalance; + + private ColumnHeader columnHeader8; + + private ColumnHeader columnHeader9; + + private ColumnHeader columnHeader12; + + private ColumnHeader columnHeader14; + + private Label label45; + + private TextBox txtGiftcardLoadAccount; + + private Button button1; + + private Label labError; + + private ContextMenuStrip MenuArea; + + private ToolStripMenuItem ToolAreDelete; + + private ToolStripMenuItem 重新执行ToolStripMenuItem; + + private ToolStripMenuItem 复制账号信息ToolStripMenuItem; + + private ToolStripMenuItem tipInputPwd; + + private ToolStripMenuItem 复制礼品卡代码余额ToolStripMenuItem; + + private ContextMenuStrip contextMenuStrip1; + + private ToolStripMenuItem 粘贴ToolStripMenuItem; + + private ComboBox comCountries; + + private Button btnChange; + + private Label label1; + + private Label label2; + + private Label labNowGiftCardCountry; + + private ColumnHeader columnHeader1; + + private Panel panel1; + + private CheckBox ckAutoTimeCheck; + + private Label label7; + + private Label label6; + + private Label label4; + + private Label label3; + + private TextBox txtSepTime; + + private Button btnExecuted; + + private TabControl tabControl1; + + private TabPage tabPage1; + + private Button btnStartTime; + + private Label label8; + + private ColumnHeader columnHeader2; + + private LinkLabel linkLabel2; + + private Label labfreezeIntegral; + + private Label label11; + + private Label labintegral; + + private Label label9; + + private Label labUserNam; + + private Label label10; + + private Panel panUserInfo; + + private LinkLabel linkLabel1; + + private Button button2; + + private Button btnRelogin; + + private Label labStore; + + private Label label12; + + private Label labGiftBalanceTip; + + private Button btnInputCarkList; + + private TabControl tabLists; + + private TabPage tabPage2; + + private TabPage tabAutoCardList; + + private CheckBox ckCueTone; + + private CheckBox ckAotuLoadId; + + private TabPage tabAutoIdList; + + private Button btnInputIdList; + + private ListView listAotoQueryList; + + private ColumnHeader columnHeader3; + + private ColumnHeader columnHeader4; + + private ColumnHeader columnHeader5; + + private ColumnHeader columnHeader7; + + private ColumnHeader columnHeader11; + + private ColumnHeader columnHeader10; + + private ListView listAotoIdList; + + private ColumnHeader columnHeader13; + + private ColumnHeader columnHeader15; + + private ColumnHeader columnHeader16; + + private ColumnHeader columnHeader17; + + private ColumnHeader columnHeader18; + + private ColumnHeader columnHeader20; + + private ColumnHeader columnHeader21; + + private ToolTip toolTip1; + + private Label label14; + + private CheckBox ckApplyLoop; + + private ColumnHeader columnHeader22; + + private ColumnHeader columnHeader6; + + private ContextMenuStrip contextMenuStrip2; + + private ToolStripMenuItem 删除ToolStripMenuItem; + + private ToolStripMenuItem 查询余额ToolStripMenuItem; + + private ToolStripMenuItem 复制信息ToolStripMenuItem; + + private Label labLoginCount; + + private CheckBox checkBox1; + + private CheckBox ckMultiple; + + private Button btnAddShortcut; + + private ColumnHeader columnHeader19; + + private ColumnHeader columnHeader23; + + private CheckBox checkBox2; + + private ContextMenuStrip contextMenuStrip3; + + private ToolStripMenuItem delFastContel; + + private Button button3; + + private Label label13; + + private CheckBox ckAutoRecog; + + private string _storeAppleHostLists { get; set; } = ""; + + + private int FastCountryCout { get; set; } = 5; + + + public Form login { get; set; } + + public bool panUserInfoShow { get; set; } + + public int AotoQueryNo { get; set; } = 1; + + + public FormGiftcardBalance() + : base("礼品卡查余额", null) + { + InitializeComponent(); + } + + public void InitUserInfo() + { + labUserNam.Text = AppSysConfig.userName; + labfreezeIntegral.Text = AppSysConfig.freezeIntegral.ToString(); + if (AppSysConfig.integral < 0) + { + labintegral.Text = "(负)" + AppSysConfig.integral; + labintegral.ForeColor = Color.Green; + } + else + { + labintegral.Text = AppSysConfig.integral.ToString(); + labintegral.ForeColor = Color.Black; + } + } + + private string getCountriesInfo(string countries) + { + if (countriesList.ContainsKey(countries)) + { + string text = countries; + if (string.IsNullOrEmpty(text)) + { + text = "us"; + } + return text.ToUpper() + "-" + countriesList[countries]; + } + return "--"; + } + + private string getCountriesInfoByName(string countriesName) + { + foreach (KeyValuePair countries in countriesList) + { + if (countries.Value == countriesName) + { + string text = countries.Key; + if (string.IsNullOrEmpty(text)) + { + text = "us"; + } + return text.ToUpper() + "-" + countries.Value; + } + } + return "--"; + } + + private string getCountriesKeyByName(string countriesName) + { + foreach (KeyValuePair countries in countriesList) + { + if (countries.Value == countriesName || countries.Value.StartsWith(countriesName)) + { + string text = countries.Key; + if (string.IsNullOrEmpty(text)) + { + text = "us"; + } + return text; + } + } + return "--"; + } + + private void FormGiftcardBalance_Load(object sender, EventArgs e) + { + balance_action = balance_card_action; + sp = new SoundPlayer(Resources.UI_success); + label14.Text = AppSysConfig.getConfig("AutoGiftBalanceTip"); + panUserInfo.Visible = panUserInfoShow; + string tag = label14.Text; + label14.Text = label14.Tag.ToString(); + label14.Tag = tag; + InitUserInfo(); + automatedParent = tabAutoCardList.Parent; + tabAutoCardList.Parent = null; + autoIdList = tabAutoIdList.Parent; + tabAutoIdList.Parent = null; + btnInputIdList.Enabled = false; + panel1.Visible = false; + if (AppSysConfig.getConfig("IsShowAutoTimeCheck") == "1") + { + ckAutoTimeCheck.Visible = true; + } + else + { + ckAutoTimeCheck.Visible = false; + } + string[] array = AppSysConfig.getConfig("GiftCardCountryCountries").Split('|'); + foreach (string text in array) + { + string text2 = text.Split(',')[0]; + if (!string.IsNullOrEmpty(text2)) + { + comCountries.Items.Add(text2); + GiftCardCountryList.Add(text.Split(',')[1]); + if (!countriesList.ContainsKey(text2)) + { + countriesList.Add(text.Split(',')[1].Trim(), text2); + } + } + } + labGiftBalanceTip.Text = AppSysConfig.getConfig("GiftBalanceTip"); + string data = ConfigUtlis.getConfigValue("comCountries").ToString(); + comCountries.SelectedIndex = 0; + if (Tools.ToInt(data, 0) > 0) + { + comCountries.SelectedIndex = Tools.ToInt(data, 0); + } + labNowGiftCardCountry.Text = comCountries.Text; + labRemovePayDianShu.Text = AppSysConfig.getTypeById(23).consNum.ToString(); + FastCountryCout = Tools.ToInt(AppSysConfig.getConfig("FastCountryCout"), 5); + string newValue = AppSysConfig.getTypeById(48).consNum.ToString(); + string newValue2 = AppSysConfig.getTypeById(49).consNum.ToString(); + toolTip1.SetToolTip(ckMultiple, toolTip1.GetToolTip(ckMultiple).Replace("{0}", newValue)); + label5.Text = label5.Text.Replace("{0}", newValue); + label5.Text = label5.Text.Replace("{1}", newValue2); + txtGiftcardLoadAccount.Text = ConfigUtlis.getConfigValue("txtGiftcardLoadAccount"); + bool flag2 = (ckGiftcardBalanceVpn.Checked = ((ConfigUtlis.getConfigValue("ckGiftcardBalanceVpn") == "True") ? true : false)); + bool giftcardBalanceVpn = flag2; + ckAutoRecog.Checked = ((ConfigUtlis.getConfigValue("ckAutoRecog") == "True") ? true : false); + _storeAppleHostLists = GiftCardCountryList[comCountries.SelectedIndex]; + if (AppSysConfig.getConfig("EnableAutoRecog") == "0") + { + CheckBox checkBox = ckAutoRecog; + CheckBox checkBox2 = ckAutoRecog; + ckAutoRecog.Checked = false; + flag2 = false; + checkBox2.Enabled = false; + checkBox.Visible = false; + } + giftcardBalance = new GiftcardBalanceWeb(_storeAppleHostLists, balance_action, balance_action, base.taskState); + if (string.IsNullOrEmpty(txtGiftcardLoadAccount.Text)) + { + txtGiftcardLoadAccount.Text = "账号输入格式:xxxx@xxx.com----密码"; + } + else + { + List listAccount = AppleUtlis.accountInput(txtGiftcardLoadAccount.Text.Trim()); + if (listAccount.Count == 1) + { + btnRelogin.Enabled = false; + Task.Run(delegate + { + string loginAppleId = listAccount[0].appleId.Trim(); + GiftcardBalanceManage.AddGifStandby(_storeAppleHostLists, loginAppleId, listAccount[0].applePwd); + Console.WriteLine("查卡ID开始运行登录----" + DateTime.Now.ToString() + "_storeAppleHostLists=" + _storeAppleHostLists); + Stopwatch watch = Stopwatch.StartNew(); + if (!base.taskState.isRun) + { + base.taskState.isRun = true; + } + string error; + bool loginReust = giftcardBalance.shopSignIn(loginAppleId, listAccount[0].applePwd, giftcardBalanceVpn, out error); + if (!base.taskState.TaskIsRun) + { + base.taskState.isRun = false; + } + if (base.IsHandleCreated) + { + BeginInvoke((Action)delegate + { + btnRelogin.Enabled = true; + if (loginReust) + { + ProxyAccountCache.addProxyIp(listAccount[0].appleId.Trim(), giftcardBalance.ProxyIp); + GiftcardBalanceStandby standby = GiftcardBalanceManage.GetStandby(_storeAppleHostLists, loginAppleId); + if (standby != null) + { + standby.AddGiftcardBalance(giftcardBalance); + labStore.Text = giftcardBalance.storeAppleHost.Replace(".store.apple.com", ""); + watch.Stop(); + Console.WriteLine("查卡ID登陆完成耗时:" + watch.Elapsed.TotalSeconds); + labError.Text = "ID登陆完成"; + } + isLoginSucess = true; + } + else + { + labError.Text = error; + } + }); + } + }); + } + } + listGiftcardBalance.ColumnClick += lv_ColumnClick; + listAotoQueryList.ColumnClick += lv_ColumnClick; + listAotoIdList.ColumnClick += lv_ColumnClick; + Task.Factory.StartNew(longTask, TaskCreationOptions.LongRunning); + } + + public void longTask() + { + try + { + do + { + try + { + UpdataMainUi(delegate + { + List list = AppleUtlis.accountInput(txtGiftcardLoadAccount.Text.Trim()); + try + { + if (list.Count == 1) + { + bool @checked = ckGiftcardBalanceVpn.Checked; + foreach (KeyValuePair fastCountry in FastCountrys) + { + string countriesName = fastCountry.Value.Tag.ToString(); + GiftcardBalanceStandby standby = GiftcardBalanceManage.GetStandby(getCountriesKeyByName(countriesName), list[0].appleId); + if (standby != null) + { + if (!fastCountry.Value.Enabled) + { + if (standby.GiftcardBalanceCookieItems.Count > 0) + { + fastCountry.Value.Enabled = true; + fastCountry.Value.Text = getCountriesInfoByName(countriesName) + "-" + standby.GiftcardBalanceCookieItems.Count; + RefreshLocation(); + } + else if (isLoginSucess && DateTime.Now.AddMinutes(-1.0) > standby.addGiftcardLostTime) + { + standby.addGiftcardLostTime = DateTime.Now; + standby.RunLoginTask(@checked); + } + } + else + { + if (standby.GiftcardBalanceCookieItems.Count <= 0) + { + fastCountry.Value.Text = getCountriesInfoByName(countriesName) + "-初始化"; + } + else + { + fastCountry.Value.Text = getCountriesInfoByName(countriesName) + "-" + standby.GiftcardBalanceCookieItems.Count; + } + int num = -30; + if (standby.GiftcardBalanceCookieItems.Count <= 3) + { + num = -3; + if (standby.GiftcardBalanceCookieItems.Count <= 1) + { + num = -1; + } + } + if (isLoginSucess && DateTime.Now.AddMinutes(num) > standby.addGiftcardLostTime) + { + standby.addGiftcardLostTime = DateTime.Now; + standby.RunLoginTask(@checked); + } + } + } + } + GiftcardBalanceStandby standby2 = GiftcardBalanceManage.GetStandby(_storeAppleHostLists, list[0].appleId); + if (standby2 != null) + { + labLoginCount.Text = standby2.GiftcardBalanceCookieItems.Count.ToString(); + if (isLoginSucess && standby2.GiftcardBalanceCookieItems.Count > 0) + { + if (!ckAutoRecog.Checked) + { + standby2.check(ckGiftcardBalanceVpn.Checked, balance_action); + } + else if (isLoginSucess && DateTime.Now.AddMinutes(-30.0) > standby2.addGiftcardLostTime) + { + standby2.addGiftcardLostTime = DateTime.Now; + standby2.RunLoginTask(@checked); + } + } + } + else + { + labLoginCount.Text = "0"; + } + } + } + catch (Exception) + { + } + }); + Thread.Sleep(10000); + } + catch (Exception) + { + } + } + while (!base.IsDisposed && base.IsHandleCreated); + } + catch (Exception) + { + } + } + + private void lv_ColumnClick(object sender, ColumnClickEventArgs e) + { + if (sender is ListView listView) + { + if (listView.Tag == null) + { + listView.Tag = "1"; + } + if (listView.Tag.ToString() == "1") + { + listView.ListViewItemSorter = new ListViewItemComparer(e.Column, 1); + listView.Tag = "0"; + } + else + { + listView.ListViewItemSorter = new ListViewItemComparer(e.Column, 0); + listView.Tag = "1"; + } + listView.Sort(); + } + } + + private void balance_card_action(string creadNo, DisplyType type, string reust) + { + try + { + if (base.IsDisposed || !base.IsHandleCreated) + { + return; + } + Invoke((Action)delegate + { + if (type == DisplyType.mima) + { + labLoginCount.Text = reust; + } + IEnumerable enumerable = from ListViewItem c in listGiftcardBalance.Items + where c.Tag.ToString() == creadNo + select c; + new Font(Font, FontStyle.Bold); + foreach (ListViewItem item in enumerable) + { + switch (type) + { + case DisplyType.xinxi: + item.SubItems[6].Text = reust; + break; + case DisplyType.newAccount: + labStore.Text = reust; + break; + case DisplyType.chongzhi: + item.SubItems[3].Text = "-"; + break; + case DisplyType.balance: + { + item.SubItems[3].Text = reust.Replace("#1", "").Replace("#2", ""); + item.SubItems[7].Text = DateTime.Now.ToString("HH:mm:ss"); + Color myColor = Color.Green; + string text = getState(reust, ref myColor); + item.SubItems[5].Text = text; + item.SubItems[5].ForeColor = myColor; + break; + } + case DisplyType.error: + labError.Text = reust; + break; + case DisplyType.bindMoblie: + item.SubItems[2].Text = reust; + break; + case DisplyType.lostBillNo: + item.SubItems[4].Text = reust; + break; + } + } + }); + } + catch (Exception) + { + } + } + + private void aotoAction(string creadNo, DisplyType type, string reust) + { + try + { + if (base.IsDisposed || !base.IsHandleCreated) + { + return; + } + Invoke((Action)delegate + { + if (type == DisplyType.mima) + { + labLoginCount.Text = reust; + } + IEnumerable enumerable = from ListViewItem c in listAotoQueryList.Items + where c.SubItems[1].Text == creadNo + select c; + new Font(Font, FontStyle.Bold); + foreach (ListViewItem item in enumerable) + { + if (int.TryParse(item.SubItems[0].Text, out var result)) + { + AotoQueryNo = result; + } + switch (type) + { + case DisplyType.reddemLose: + item.SubItems[6].Text = item.SubItems[6].Text + "[" + reust + "]"; + break; + case DisplyType.reddemValid: + item.SubItems[6].Text = item.SubItems[6].Text + "[" + reust + "]"; + if (ckApplyLoop.Checked) + { + item.SubItems[3].Text = ""; + } + if (ckAotuLoadId.Checked) + { + plaYpromptTone(); + } + break; + case DisplyType.gameCount: + { + if (int.TryParse(item.SubItems[2].Text, out var result2)) + { + item.SubItems[2].Text = (result2 + 1).ToString(); + } + else + { + item.SubItems[2].Text = "1"; + } + break; + } + case DisplyType.chongzhi: + item.SubItems[3].Text = "-"; + break; + case DisplyType.balance: + item.SubItems[3].Text = reust; + item.SubItems[5].Text = DateTime.Now.ToString("HH:mm:ss"); + if (reust != "无" && !string.IsNullOrEmpty(reust)) + { + bool flag = ckCueTone.Checked; + decimal num = Tools.ConverCurrency(reust); + if (ckAotuLoadId.Checked && num > 0m) + { + flag = AplyReddem(creadNo, num); + } + if (flag && num > 0m) + { + plaYpromptTone(); + } + if (num == 0m) + { + item.SubItems[3].Text = ""; + } + } + break; + case DisplyType.error: + labError.Text = reust; + break; + case DisplyType.xinxi: + item.SubItems[4].Text = reust; + break; + case DisplyType.newAccount: + labStore.Text = reust; + break; + } + } + if (enumerable.Count() == 0 && listAotoQueryList.Items.Count == 0) + { + if (type == DisplyType.error) + { + labError.Text = reust; + } + else if (type == DisplyType.newAccount) + { + labStore.Text = reust; + } + else if (type == DisplyType.xinxi) + { + labError.Text = reust; + } + } + }); + } + catch (Exception) + { + } + } + + public bool AplyReddem(string creadNo, decimal balance) + { + IEnumerable enumerable = from ListViewItem c in listAotoIdList.Items + where decimal.Parse(c.SubItems[4].Text) < decimal.Parse(c.SubItems[3].Text) && string.IsNullOrEmpty(c.SubItems[5].Text) + select c; + List accounts = new List(); + foreach (ListViewItem item in enumerable) + { + accounts.Add(new AppleAcount + { + appleId = item.SubItems[1].Text, + applePwd = item.SubItems[2].Text, + overflow = item.SubItems[3].Text + }); + } + if (accounts.Count > 0) + { + Task.Run(delegate + { + AotuQueryTask?.Reddem(creadNo, accounts, aotoReddemAction); + }); + return false; + } + aotoAction(creadNo, DisplyType.reddemLose, "没有需要兑换的账号"); + return true; + } + + private void aotoReddemAction(string appleId, DisplyType type, string reust) + { + if (base.IsDisposed || !base.IsHandleCreated) + { + return; + } + Invoke((Action)delegate + { + IEnumerable enumerable = from ListViewItem c in listAotoIdList.Items + where c.SubItems[1].Text == appleId + select c; + new Font(Font, FontStyle.Bold); + foreach (ListViewItem item in enumerable) + { + switch (type) + { + case DisplyType.error: + item.SubItems[5].Text = reust; + break; + case DisplyType.reddemValid: + { + decimal result = default(decimal); + if (decimal.TryParse(reust, out result)) + { + item.SubItems[4].Text = (decimal.Parse(item.SubItems[4].Text) + result).ToString(); + if (decimal.Parse(item.SubItems[4].Text) >= decimal.Parse(item.SubItems[3].Text)) + { + item.SubItems[5].Text = "完成"; + } + } + item.SubItems[6].Text = DateTime.Now.ToString("HH:mm:ss"); + break; + } + case DisplyType.xinxi: + item.SubItems[7].Text = reust; + break; + } + } + }); + } + + private void txtLoadAccount_Enter(object sender, EventArgs e) + { + if (txtGiftcardLoadAccount.Text == "账号输入格式:xxxx@xxx.com----密码") + { + txtGiftcardLoadAccount.Text = ""; + } + } + + private void txtLoadAccount_Leave(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(txtGiftcardLoadAccount.Text)) + { + txtGiftcardLoadAccount.Text = "账号输入格式:xxxx@xxx.com----密码"; + } + } + + private void btnStartRemovePay_Click(object sender, EventArgs e) + { + if (txtGiftcardLoadAccount.Text != "账号输入格式:xxxx@xxx.com----密码") + { + List list = AppleUtlis.accountInput(txtGiftcardLoadAccount.Text.Trim()); + if (list.Count == 1) + { + ConfigUtlis.saveConfigKey("ckGiftcardBalanceVpn", ckGiftcardBalanceVpn.Checked.ToString()); + ConfigUtlis.saveConfigKey("txtGiftcardLoadAccount", txtGiftcardLoadAccount.Text.Trim()); + List list2 = new List(); + string[] array = txtGiftcard.Text.Split('\n'); + foreach (string text in array) + { + if (!string.IsNullOrEmpty(text)) + { + list2.Add(new AppleAcount + { + reddemCode = text.Trim() + }); + } + } + if (!base.taskState.TaskIsRun) + { + StartRemovePay(list2, ckGiftcardBalanceVpn.Checked, list[0].appleId, list[0].applePwd); + } + else + { + MessageBox.Show("请点停止,或等待任务结束"); + } + } + else + { + MessageBox.Show("账号输入格式不正确"); + txtGiftcardLoadAccount.Focus(); + } + } + else + { + MessageBox.Show("请输入账号"); + txtGiftcardLoadAccount.Focus(); + } + } + + private string getIngStr(int cont, int maxCount) + { + int totalWidth = cont % maxCount; + return ".".PadRight(totalWidth, '.'); + } + + public string getChak(string code) + { + HttpResult httpResult = APIUtlis.serviceSend(Tools.Toenjson(new Dictionary + { + { "code", code }, + { "type", "IGetCodeCountry" } + })); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + dynamic val = Tools.Todejosn(httpResult.Html); + if (val["Code"] == "0000") + { + dynamic val2 = val["Data"]; + dynamic val3 = Tools.Todejosn(val2); + if (val3["code"] == "0000") + { + return val3["msg"]; + } + } + } + return "卡国家查询失败"; + } + + public string getState(string balance, ref Color myColor) + { + myColor = Color.Green; + string result = "有效 (valid)"; + if (balance.Contains("无")) + { + myColor = Color.Red; + result = "无效 (invalid)"; + if (balance.Contains("#1")) + { + myColor = Color.Black; + result = "未知 (unknown)"; + } + if (balance.Contains("#2")) + { + myColor = Color.Red; + result = "已兑换 (invalid)"; + } + } + else if (balance.Contains("#1")) + { + myColor = Color.Red; + result = "僵尸卡 (invalid)"; + } + return result; + } + + public void passLog(string reddemCode, string balance, string countriesInfo, string giftCardNumber, string xinxi, bool iskouFei) + { + Dictionary dictionary = new Dictionary(); + dictionary.Add("type", "giftcardBalance"); + dictionary.Add("addTime", Tools.GenerateTimeStamp().ToString()); + dictionary.Add("value1", reddemCode); + dictionary.Add("value4", countriesInfo); + dictionary.Add("value2", balance.Replace("#1", "").Replace("#2", "")); + dictionary.Add("value3", xinxi); + dictionary.Add("value5", giftCardNumber); + Color myColor = Color.Green; + dictionary.Add("value6", getState(balance, ref myColor)); + if (iskouFei) + { + APIUtlis.ApiApplyAct(49, "自动识别并测试僵尸卡"); + } + SqliteHelper.ExecuteInsert("itunes_db", dictionary); + } + + public void StartRemovePay(List lvItems, bool startVpn, string LoginAppleId, string LoginApwd, bool isAgain = false) + { + string text = ""; + bool AutoRecog = ckAutoRecog.Checked; + if (ckMultiple.Checked && !isAgain) + { + foreach (KeyValuePair fastCountry in FastCountrys) + { + if (!fastCountry.Value.Checked) + { + continue; + } + string text2 = fastCountry.Value.Tag.ToString(); + foreach (KeyValuePair countries in countriesList) + { + if (text2 == countries.Value) + { + text = ((!string.IsNullOrEmpty(countries.Key)) ? (text + countries.Key + ",") : (text + "us,")); + break; + } + } + } + if (!string.IsNullOrEmpty(text)) + { + text = text.TrimEnd(','); + Console.WriteLine("multipleStoreAppleHostLists=" + text); + string[] array = text.Split(','); + bool multipleStore = false; + if (array.Length >= 2) + { + multipleStore = true; + } + List list = new List(); + int num = 0; + foreach (AppleAcount lvItem in lvItems) + { + int num2 = 0; + string[] array2 = array; + for (int i = 0; i < array2.Length; i++) + { + string addres; + if ((addres = array2[i]) == "us") + { + addres = ""; + } + list.Add(new AppleAcount + { + index = num, + multipleStore = multipleStore, + reddemCode = lvItem.reddemCode, + guidTag = lvItem.guidTag, + addres = addres, + notAuthen = (num2 == 0) + }); + num++; + num2++; + } + } + lvItems = list; + } + else + { + int num3 = 0; + foreach (AppleAcount lvItem2 in lvItems) + { + lvItem2.index = num3; + lvItem2.multipleStore = false; + lvItem2.notAuthen = true; + if (string.IsNullOrEmpty(lvItem2.addres)) + { + lvItem2.addres = _storeAppleHostLists; + } + num3++; + } + } + } + else + { + int num4 = 0; + foreach (AppleAcount lvItem3 in lvItems) + { + lvItem3.index = num4; + lvItem3.notAuthen = true; + if (string.IsNullOrEmpty(lvItem3.addres)) + { + lvItem3.addres = _storeAppleHostLists; + } + num4++; + } + } + btnStartRemovePay.Enabled = false; + Task.Run(delegate + { + int taskSize = Tools.getTaskSize(startVpn, lvItems.Count); + base.taskState.isRun = true; + base.taskState.TaskIsRun = true; + AppleExecuteTask.TaskRunAppleIdCount = 0L; + AppleExecuteTask.TaskRunModels.Clear(); + int cont = 0; + DateTime now = DateTime.Now; + GiftcardBalanceStandby standby = GiftcardBalanceManage.GetStandby(_storeAppleHostLists, LoginAppleId); + if (standby != null) + { + GiftcardBalanceWeb randomGiftcard = standby.GetRandomGiftcard(startVpn, isrunTask: false); + if (randomGiftcard != null) + { + giftcardBalance = randomGiftcard; + } + } + while (giftcardBalance.state == GiftcardBalanceWeb.GiftcardBalancState.busy && DateTime.Now.AddMinutes(-1.5) < now) + { + if (base.IsHandleCreated) + { + Invoke((Action)delegate + { + labError.Text = "ID登录中" + getIngStr(cont, 5); + }); + } + Thread.Sleep(300); + cont++; + } + if (giftcardBalance.state == GiftcardBalanceWeb.GiftcardBalancState.success && !(giftcardBalance.LoginAppleId != LoginAppleId)) + { + if (base.IsHandleCreated && giftcardBalance.state == GiftcardBalanceWeb.GiftcardBalancState.success) + { + BeginInvoke((Action)delegate + { + labError.Text = "ID登陆完成"; + }); + } + } + else + { + isLoginSucess = false; + if (base.IsHandleCreated) + { + Invoke((Action)delegate + { + labError.Text = "正在登陆ID" + getIngStr(3, 4); + }); + } + if (!giftcardBalance.shopSignIn(LoginAppleId, LoginApwd, startVpn, out var error)) + { + giftcardBalance.Reset(); + if (base.IsHandleCreated) + { + Invoke((Action)delegate + { + labError.Text = error; + btnStartRemovePay.Enabled = true; + ITaskRunState taskRunState = base.taskState; + base.taskState.isRun = false; + taskRunState.TaskIsRun = false; + }); + } + return; + } + ProxyAccountCache.addProxyIp(LoginAppleId, giftcardBalance.ProxyIp); + string storeNumber = giftcardBalance.storeAppleHost.Replace(".store.apple.com", ""); + GiftcardBalanceManage.AddGifStandby(_storeAppleHostLists, LoginAppleId, LoginApwd); + if (standby == null) + { + standby = GiftcardBalanceManage.GetStandby(_storeAppleHostLists, LoginAppleId); + } + standby?.AddGiftcardBalance(giftcardBalance); + if (base.IsHandleCreated) + { + Invoke((Action)delegate + { + labError.Text = "ID登陆完成"; + labStore.Text = storeNumber; + isLoginSucess = true; + }); + } + } + ApiNetReq.startNowFun = 23; + Task[] array3 = new Task[taskSize]; + for (int j = 0; j < taskSize; j++) + { + array3[j] = Task.Run(delegate + { + string guid = Guid.NewGuid().ToString("n"); + TaskRunModel taskRunModel = new TaskRunModel + { + guid = guid, + isRuning = false + }; + AppleExecuteTask.TaskRunModels.Add(taskRunModel); + while (base.taskState.isRun) + { + AppleAcount listView = null; + try + { + lock (lvItems) + { + listView = (from c in lvItems + where !c.isAct + orderby c.index + select c).FirstOrDefault(); + if (listView == null) + { + break; + } + listView.isAct = true; + } + string countriesInfoName = ""; + if (!isAgain) + { + listView.guidTag = Tools.GetMD5_32(listView.reddemCode.Trim() + listView.addres); + if (base.IsHandleCreated) + { + Invoke((Action)delegate + { + if (!base.IsDisposed) + { + ListViewItem listViewItem = new ListViewItem((listGiftcardBalance.Items.Count + 1).ToString()) + { + SubItems = { listView.reddemCode.Trim() } + }; + string text8 = getCountriesInfo(listView.addres); + countriesInfoName = getCountriesKeyByName(listView.addres); + if (AutoRecog) + { + text8 = "查询卡国家"; + } + listViewItem.SubItems.Add(text8); + listViewItem.SubItems.Add(""); + listViewItem.SubItems.Add(""); + listViewItem.SubItems.Add(""); + listViewItem.SubItems.Add(""); + listViewItem.SubItems.Add(""); + listViewItem.Tag = listView.guidTag; + listViewItem.UseItemStyleForSubItems = false; + listGiftcardBalance.Items.Add(listViewItem); + string[] array4 = txtGiftcard.Text.Split('\n'); + foreach (string text9 in array4) + { + if (text9.StartsWith(listView.reddemCode) && !string.IsNullOrEmpty(text9)) + { + txtGiftcard.Text = txtGiftcard.Text.Replace(text9 + "\n", ""); + txtGiftcard.Text = txtGiftcard.Text.Replace(text9, ""); + } + } + } + }); + } + } + bool flag; + if (BaseTask.startRuning(taskRunModel, balance_action, listView.guidTag)) + { + balance_action?.Invoke(listView.guidTag, DisplyType.xinxi, "正在处理"); + flag = false; + if (!AutoRecog) + { + goto IL_06ca; + } + string chak = getChak(listView.reddemCode); + if (chak.Contains("商店中兑换")) + { + string value = new Regex("在([\\s\\S]*?)商店").Match(chak).Groups[1].Value; + if (string.IsNullOrEmpty(value)) + { + goto IL_06ca; + } + countriesInfoName = value; + string countriesKeyByName = getCountriesKeyByName(value); + balance_action?.Invoke(listView.guidTag, DisplyType.bindMoblie, value); + string[] source = AppSysConfig.getConfig("PinCodeCountry").Split(','); + if (countriesKeyByName != "--" && !source.Contains(value)) + { + listView.addres = countriesKeyByName; + goto IL_06ca; + } + balance_action?.Invoke(listView.guidTag, DisplyType.balance, "无#1"); + balance_action?.Invoke(listView.guidTag, DisplyType.xinxi, "卡国家不支持"); + passLog(listView.reddemCode, "无", value, "", "卡国家不支持", iskouFei: true); + } + else if (chak.Contains("代码无效")) + { + balance_action?.Invoke(listView.guidTag, DisplyType.bindMoblie, "未知"); + balance_action?.Invoke(listView.guidTag, DisplyType.balance, "无"); + balance_action?.Invoke(listView.guidTag, DisplyType.xinxi, chak); + passLog(listView.reddemCode, "无", "未知", "", chak, iskouFei: true); + } + else if (!chak.Contains("已兑换") && !chak.Contains("被禁用") && !chak.Contains("服务启用")) + { + balance_action?.Invoke(listView.guidTag, DisplyType.bindMoblie, "未知"); + balance_action?.Invoke(listView.guidTag, DisplyType.balance, "无#1"); + balance_action?.Invoke(listView.guidTag, DisplyType.xinxi, "国家查询失败:" + chak); + passLog(listView.reddemCode, "无#1", "未知", "", "国家查询失败:" + chak, iskouFei: false); + } + else + { + string text3 = (countriesInfoName = "美国"); + string countriesKeyByName2 = getCountriesKeyByName(text3); + if (countriesKeyByName2 != "--") + { + listView.addres = countriesKeyByName2; + } + balance_action?.Invoke(listView.guidTag, DisplyType.bindMoblie, text3); + if (!chak.Contains("已兑换")) + { + if (chak.Contains("被禁用")) + { + balance_action?.Invoke(listView.guidTag, DisplyType.balance, ""); + } + if (chak.Contains("服务启用")) + { + flag = true; + balance_action?.Invoke(listView.guidTag, DisplyType.xinxi, "僵尸卡"); + } + goto IL_06ca; + } + balance_action?.Invoke(listView.guidTag, DisplyType.balance, "无#2"); + balance_action?.Invoke(listView.guidTag, DisplyType.xinxi, chak); + passLog(listView.reddemCode, "无#2", text3, "", chak, iskouFei: true); + } + } + goto end_IL_004c; + IL_06ca: + GiftcardBalanceStandby standby2 = GiftcardBalanceManage.GetStandby(listView.addres, LoginAppleId); + if (standby2 == null) + { + GiftcardBalanceManage.AddGifStandby(listView.addres, LoginAppleId, LoginApwd); + standby2 = GiftcardBalanceManage.GetStandby(listView.addres, LoginAppleId); + standby2.GetRandomGiftcard(startVpn); + } + lock (loginLockObj) + { + if (DateTime.Now.AddSeconds(-20.0) > loginCheckTime) + { + loginCheckTime = DateTime.Now; + standby2?.check(startVpn, balance_action); + } + } + int num5 = 23; + HttpResult httpResult = APIUtlis.getIsLogin(23); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + object obj = Tools.Todejosn(httpResult.Html); + if (((dynamic)obj)["Code"] == "0000") + { + if (((dynamic)obj)["Data"]["integral"] >= AppSysConfig.getTypeById(num5).consNum) + { + balance_action?.Invoke(listView.appleId, DisplyType.chongzhi, ""); + bool flag2 = false; + int num6 = 0; + int num7 = 10; + do + { + flag2 = false; + bool flag3 = false; + GiftcardBalanceWeb giftcardBalanceWeb = standby2.GetRandomGiftcard(startVpn); + if (giftcardBalanceWeb == null && standby2.GiftcardBalanceCookieItems.Count > 0) + { + int index = new Random(Guid.NewGuid().GetHashCode()).Next(0, standby2.GiftcardBalanceCookieItems.Count); + giftcardBalanceWeb = standby2.GiftcardBalanceCookieItems.ElementAt(index).Value; + } + if (giftcardBalanceWeb != null) + { + giftcardBalanceWeb.taskState = base.taskState; + giftcardBalanceWeb.isUpProxyAccountCache = true; + giftcardBalanceWeb.ProxyIp = ProxyAccountCache.getProxyAccountIP(LoginAppleId, 18); + giftcardBalanceWeb.action = balance_action; + GiftcardBalanceModel giftcardBalanceModel = giftcardBalanceWeb.giftCardBalanceCheck(listView.reddemCode, startVpn, listView.guidTag); + if (giftcardBalanceModel != null) + { + if (giftcardBalanceModel.head.status == 200 && !giftcardBalanceModel.body.giftCardBalanceCheck.d.maxAttemptReached) + { + string countriesInfo = getCountriesInfo(giftcardBalanceWeb.storeAppleHostLists); + if (!AutoRecog) + { + balance_action?.Invoke(listView.guidTag, DisplyType.bindMoblie, countriesInfo); + Console.WriteLine("storeAppleHostLists=" + listView.addres + ",--" + countriesInfo + ",storeAppleHostLists=" + giftcardBalanceWeb.storeAppleHostLists); + } + Dictionary dictionary = new Dictionary + { + { "type", "giftcardBalance" }, + { + "addTime", + Tools.GenerateTimeStamp().ToString() + }, + { "value1", listView.reddemCode }, + { "value4", countriesInfo } + }; + if (giftcardBalanceModel.body.giftCardBalanceCheck.d.balance != null) + { + string text4 = giftcardBalanceModel.body.giftCardBalanceCheck.d.balance; + if (flag) + { + text4 += "#1"; + } + dictionary.Add("value2", text4.Replace("#1", "")); + dictionary.Add("value3", "查询完成"); + balance_action?.Invoke(listView.guidTag, DisplyType.balance, text4); + string text5 = HttpUtility.HtmlDecode(giftcardBalanceModel.body.giftCardBalanceCheck.d.giftCardNumber); + dictionary.Add("value5", text5); + if (flag) + { + dictionary.Add("value6", "僵尸卡(invalid)"); + } + else + { + dictionary.Add("value6", "有效(valid)"); + } + balance_action?.Invoke(listView.guidTag, DisplyType.lostBillNo, text5); + balance_action?.Invoke(listView.guidTag, DisplyType.xinxi, "查询完成"); + } + else if (giftcardBalanceModel.body.giftCardBalanceCheck.d.alertMessages != null) + { + string text6 = "错误:" + giftcardBalanceModel.body.giftCardBalanceCheck.d.alertMessages[0]; + dictionary.Add("value2", "无"); + dictionary.Add("value3", text6); + dictionary.Add("value5", ""); + dictionary.Add("value6", "未知 (unknown)"); + balance_action?.Invoke(listView.guidTag, DisplyType.balance, "无#1"); + balance_action?.Invoke(listView.guidTag, DisplyType.xinxi, text6); + } + else + { + if (listView.addres == "us") + { + Console.WriteLine(Tools.Toenjson(giftcardBalanceModel)); + } + string text7 = "错误:不是有效的礼品卡"; + dictionary.Add("value2", "无"); + dictionary.Add("value3", text7); + dictionary.Add("value5", ""); + dictionary.Add("value6", "无效 (invalid)"); + balance_action?.Invoke(listView.guidTag, DisplyType.balance, "无"); + balance_action?.Invoke(listView.guidTag, DisplyType.xinxi, text7); + } + if (listView.notAuthen) + { + if (listView.multipleStore || AutoRecog) + { + if (AutoRecog) + { + APIUtlis.ApiApplyAct(49, "自动识别并测试僵尸卡"); + } + else + { + APIUtlis.ApiApplyAct(48, "多选商店查卡余额"); + } + } + else + { + APIUtlis.ApiApplyAct(num5, "礼品卡查余额"); + } + } + SqliteHelper.ExecuteInsert("itunes_db", dictionary); + } + else + { + bool? flag4 = giftcardBalanceModel?.body?.giftCardBalanceCheck?.d?.maxAttemptReached; + if (giftcardBalanceModel.head.status != 302 && (!flag4.HasValue || !flag4.Value)) + { + ProxyAccountCache.ReclassifyAccountIp(LoginAppleId); + standby2.removeGiftcardBalance(giftcardBalanceWeb.StdndbyKey); + flag2 = true; + balance_action?.Invoke(listView.guidTag, DisplyType.xinxi, "未知,等待重新查询.." + (num6 + 1)); + } + else + { + ProxyAccountCache.ReclassifyAccountIp(LoginAppleId); + flag2 = true; + standby2.removeGiftcardBalance(giftcardBalanceWeb.StdndbyKey); + balance_action?.Invoke(listView.guidTag, DisplyType.xinxi, "等待重新查询中..." + (num6 + 1)); + } + } + } + else + { + ProxyAccountCache.ReclassifyAccountIp(LoginAppleId); + balance_action?.Invoke(listView.guidTag, DisplyType.xinxi, "请求错误,请重新查询"); + } + } + else + { + flag2 = true; + balance_action?.Invoke(listView.guidTag, DisplyType.xinxi, countriesInfoName + "初始化登录中..." + (num6 + 1)); + flag3 = true; + } + if (flag2) + { + if (num6 + 1 < num7) + { + int num8 = 2 * num6; + if (flag3) + { + for (int k = 0; k < num8; k++) + { + if (standby2.GiftcardBalanceCookieItems.Count > 0) + { + break; + } + Thread.Sleep(1000); + } + } + else + { + Thread.Sleep(1000 * num8); + } + } + else + { + balance_action?.Invoke(listView.guidTag, DisplyType.xinxi, "查询失败,请重新登录"); + } + } + if (!base.taskState.isRun) + { + balance_action?.Invoke(listView.guidTag, DisplyType.xinxi, "停止执行"); + } + num6++; + } + while (flag2 && num6 < num7 && base.taskState.isRun); + } + else + { + balance_action?.Invoke(listView.guidTag, DisplyType.xinxi, "点数不足,请联系客服充值"); + } + } + else + { + balance_action?.Invoke(listView.guidTag, DisplyType.xinxi, ((dynamic)obj)["Message"]); + } + } + else + { + balance_action?.Invoke(listView.guidTag, DisplyType.xinxi, "网络请求失败"); + } + goto IL_147b; + end_IL_004c:; + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + if (listView != null) + { + balance_action?.Invoke(listView.guidTag, DisplyType.xinxi, "请求失败:" + ex.Message); + } + goto IL_147b; + } + continue; + IL_147b: + BaseTask.endRuning(taskRunModel); + } + }); + } + Task.WaitAll(array3); + AppleExecuteTask.TaskRunModels.Clear(); + base.taskState.isRun = false; + base.taskState.TaskIsRun = false; + if (base.IsHandleCreated) + { + Invoke((Action)delegate + { + btnStartRemovePay.Enabled = true; + }); + } + isLogin(delegate + { + }); + }); + } + + private void btnStopRemovePay_Click(object sender, EventArgs e) + { + base.taskState.Stop(); + } + + private void 粘贴ToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + IDataObject dataObject = Clipboard.GetDataObject(); + if (dataObject.GetDataPresent(DataFormats.Text)) + { + txtGiftcard.Text = (string)dataObject.GetData(DataFormats.Text); + } + } + catch (Exception) + { + MessageBox.Show("粘贴失败"); + } + } + + private void 复制账号信息ToolStripMenuItem_Click(object sender, EventArgs e) + { + ListView listView = listGiftcardBalance; + if (tabLists.SelectedIndex == 1) + { + listView = listAotoQueryList; + } + else if (tabLists.SelectedIndex == 2) + { + listView = listAotoIdList; + } + string text = ""; + int num = 0; + foreach (ListViewItem selectedItem in listView.SelectedItems) + { + num = 0; + foreach (ListViewItem.ListViewSubItem subItem in selectedItem.SubItems) + { + if (num != 0) + { + text = ((num <= 2) ? (text + subItem.Text + "----") : (text + listView.Columns[num].Text + subItem.Text + "-")); + } + num++; + } + text += "\n"; + } + if (text.Length > 0) + { + try + { + Clipboard.SetText(text); + MessageBox.Show("复制成功"); + } + catch (Exception) + { + MessageBox.Show("复制失败"); + } + } + } + + private void tipInputPwd_Click(object sender, EventArgs e) + { + ListView listView = listGiftcardBalance; + if (tabLists.SelectedIndex == 1) + { + listView = listAotoQueryList; + } + string text = ""; + foreach (ListViewItem selectedItem in listView.SelectedItems) + { + text += selectedItem.SubItems[1].Text; + text += "\n"; + } + if (text.Length > 0) + { + try + { + Clipboard.SetText(text); + MessageBox.Show("复制成功"); + } + catch (Exception) + { + MessageBox.Show("复制失败"); + } + } + } + + private void 复制礼品卡代码余额ToolStripMenuItem_Click(object sender, EventArgs e) + { + ListView listView = listGiftcardBalance; + if (tabLists.SelectedIndex == 1) + { + listView = listAotoQueryList; + } + string text = ""; + foreach (ListViewItem selectedItem in listView.SelectedItems) + { + text = ((tabLists.SelectedIndex != 0) ? (text + selectedItem.SubItems[1].Text + " " + selectedItem.SubItems[3].Text) : (text + selectedItem.SubItems[1].Text + " " + selectedItem.SubItems[3].Text)); + text += "\n"; + } + if (text.Length > 0) + { + try + { + Clipboard.SetText(text); + MessageBox.Show("复制成功"); + } + catch (Exception) + { + MessageBox.Show("复制失败"); + } + } + } + + private void ToolAreDelete_Click(object sender, EventArgs e) + { + ListView listView = listGiftcardBalance; + if (tabLists.SelectedIndex == 1) + { + listView = listAotoQueryList; + } + else if (tabLists.SelectedIndex == 2) + { + listView = listAotoIdList; + } + foreach (ListViewItem selectedItem in listView.SelectedItems) + { + listView.Items.Remove(selectedItem); + } + } + + private void 重新执行ToolStripMenuItem_Click(object sender, EventArgs e) + { + if (txtGiftcardLoadAccount.Text != "账号输入格式:xxxx@xxx.com----密码") + { + List list = AppleUtlis.accountInput(txtGiftcardLoadAccount.Text.Trim()); + if (list.Count == 1) + { + ConfigUtlis.saveConfigKey("ckGiftcardBalanceVpn", ckGiftcardBalanceVpn.Checked.ToString()); + ConfigUtlis.saveConfigKey("txtGiftcardLoadAccount", txtGiftcardLoadAccount.Text.Trim()); + List list2 = new List(); + if (tabLists.SelectedIndex == 0) + { + foreach (ListViewItem selectedItem in listGiftcardBalance.SelectedItems) + { + string text = selectedItem.SubItems[2].Text; + string addres = ""; + if (text.Split('-').Length == 2) + { + addres = text.Split('-')[0].ToLower(); + } + list2.Add(new AppleAcount + { + reddemCode = selectedItem.SubItems[1].Text.Trim(), + guidTag = selectedItem.Tag.ToString(), + addres = addres + }); + ListViewItem.ListViewSubItem listViewSubItem = selectedItem.SubItems[3]; + ListViewItem.ListViewSubItem listViewSubItem2 = selectedItem.SubItems[4]; + string text3 = (selectedItem.SubItems[5].Text = ""); + string text5 = (listViewSubItem2.Text = text3); + listViewSubItem.Text = text5; + } + StartRemovePay(list2, ckGiftcardBalanceVpn.Checked, list[0].appleId, list[0].applePwd, isAgain: true); + } + if (tabLists.SelectedIndex != 1) + { + return; + } + foreach (ListViewItem selectedItem2 in listAotoQueryList.SelectedItems) + { + list2.Add(new AppleAcount + { + reddemCode = selectedItem2.SubItems[1].Text, + overflow = selectedItem2.SubItems[2].Text + }); + } + btnExecuted.Enabled = false; + AotuQueryTask.Query(list2, ckGiftcardBalanceVpn.Checked, list[0].appleId, list[0].applePwd, delegate + { + UpdataMainUi(delegate + { + btnExecuted.Enabled = true; + }); + }); + } + else + { + MessageBox.Show("账号输入格式不正确"); + txtGiftcardLoadAccount.Focus(); + } + } + else + { + MessageBox.Show("请输入账号"); + txtGiftcardLoadAccount.Focus(); + } + } + + private void button1_Click(object sender, EventArgs e) + { + ListView lv = listGiftcardBalance; + if (tabLists.SelectedIndex == 1) + { + lv = listAotoQueryList; + } + else if (tabLists.SelectedIndex == 2) + { + lv = listAotoIdList; + } + ExperList(lv); + } + + private void btnRemovePayLog_Click(object sender, EventArgs e) + { + FromDBDataQuery fromDBDataQuery = new FromDBDataQuery(); + fromDBDataQuery.sqlTitle = new Dictionary + { + { "value1", "礼品卡代码|200" }, + { "value4", "查询的商店|80" }, + { "value2", "余额|100" }, + { "value5", "Pin码|80" }, + { "value6", "状态|80" }, + { "value3", "信息|250" } + }; + fromDBDataQuery.type = "giftcardBalance"; + fromDBDataQuery.typeName = "礼品卡余额查询"; + fromDBDataQuery.Show(); + } + + public void btnChangeEvel() + { + _storeAppleHostLists = GiftCardCountryList[comCountries.SelectedIndex]; + giftcardBalance = new GiftcardBalanceWeb(_storeAppleHostLists, balance_action, balance_action, base.taskState); + labNowGiftCardCountry.Text = comCountries.Text; + List list = AppleUtlis.accountInput(txtGiftcardLoadAccount.Text.Trim()); + if (list.Count >= 1 && GiftcardBalanceManage.GetStandby(_storeAppleHostLists, list[0].appleId) == null) + { + GiftcardBalanceManage.AddGifStandby(_storeAppleHostLists, list[0].appleId, list[0].applePwd); + } + ConfigUtlis.saveConfigKey("comCountries", comCountries.SelectedIndex.ToString()); + } + + private void btnChange_Click(object sender, EventArgs e) + { + btnChangeEvel(); + foreach (KeyValuePair fastCountry in FastCountrys) + { + if (comCountries.Text == fastCountry.Value.Tag.ToString()) + { + fastCountry.Value.Checked = true; + } + else + { + fastCountry.Value.Checked = false; + } + } + } + + private void checkBox1_CheckedChanged(object sender, EventArgs e) + { + if (ckAutoTimeCheck.Checked) + { + if (AotuQueryTask == null) + { + AotuQueryTask = new GiftcardBalanceAotuQueryTask(aotoAction, aotoAction); + } + tabAutoCardList.Parent = automatedParent; + tabLists.SelectedTab = tabAutoCardList; + panel1.Visible = true; + string tag = label14.Text; + label14.Text = label14.Tag.ToString(); + label14.Tag = tag; + _storeAppleHostLists = GiftCardCountryList[comCountries.SelectedIndex]; + if (AotuQueryTask != null) + { + AotuQueryTask.storeAppleHostLists = _storeAppleHostLists; + } + label13.Text = comCountries.Text; + ckAotuLoadId_CheckedChanged(null, null); + } + else + { + tabAutoCardList.Parent = null; + tabAutoIdList.Parent = null; + panel1.Visible = false; + isStartRun = false; + string tag2 = label14.Text; + label14.Text = label14.Tag.ToString(); + label14.Tag = tag2; + } + } + + private void btnStartTime_Click(object sender, EventArgs e) + { + if (float.TryParse(txtSepTime.Text, out var result)) + { + if (result > 0f) + { + if (!isStartRun) + { + if (AppleUtlis.accountInput(txtGiftcardLoadAccount.Text.Trim()).Count == 1) + { + StartTime(result); + return; + } + MessageBox.Show("账号输入格式不正确"); + txtGiftcardLoadAccount.Focus(); + } + else + { + expirationExecuted = false; + isStartRun = false; + AotuQueryTask.Stop(); + } + } + else + { + MessageBox.Show("请输入分钟"); + } + } + else + { + MessageBox.Show("请输入正确数值分钟"); + } + } + + public async void StartTime(float timeMinute) + { + isStartRun = true; + btnStartTime.Text = "停止"; + expirationTime = DateTime.Now.AddMinutes(timeMinute); + await Task.Run(delegate + { + do + { + if (!(DateTime.Now >= expirationTime)) + { + UpdateCountdownTime(); + } + else if (!expirationExecuted) + { + expirationExecuted = true; + UpdataMainUi(delegate + { + btnExecuted_Click(null, null); + label7.Text = "正在查询...序号:" + AotoQueryNo; + }); + } + else + { + UpdataMainUi(delegate + { + label7.Text = "正在查询...序号:" + AotoQueryNo; + }); + if (!AotuQueryTask.expirationExecuted) + { + expirationTime = DateTime.Now.AddMinutes(timeMinute); + expirationExecuted = false; + AotoQueryNo = 1; + } + } + Task.Delay(500).Wait(); + } + while (isStartRun); + }); + btnStartTime.Text = "开始计时"; + label7.Text = "未开始"; + isStartRun = false; + } + + public void UpdateCountdownTime() + { + TimeSpan timeSpan = expirationTime - DateTime.Now; + UpdataMainUi(delegate + { + label7.Text = (int)timeSpan.TotalMinutes + "分" + timeSpan.Seconds + "秒"; + }); + } + + public void UpdataMainUi(Action act) + { + try + { + if (!base.IsDisposed && base.IsHandleCreated) + { + Invoke(act); + } + } + catch (Exception) + { + } + } + + private void btnExecuted_Click(object sender, EventArgs e) + { + List list = AppleUtlis.accountInput(txtGiftcardLoadAccount.Text.Trim()); + if (list.Count == 1) + { + new List(); + List lvItems = (from ListViewItem c in listAotoQueryList.Items + where c.SubItems[3].Text == "" || c.SubItems[3].Text == "无" || c.SubItems[3].Text == "-" + select new AppleAcount + { + reddemCode = c.SubItems[1].Text, + overflow = c.SubItems[2].Text + }).ToList(); + btnExecuted.Enabled = false; + AotuQueryTask.Query(lvItems, ckGiftcardBalanceVpn.Checked, list[0].appleId, list[0].applePwd, delegate + { + UpdataMainUi(delegate + { + btnExecuted.Enabled = true; + }); + }); + } + else + { + MessageBox.Show("账号输入格式不正确"); + isStartRun = false; + } + } + + private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + APIUtlis.outLogin(); + isOut = true; + Close(); + if (login != null) + { + login.Show(); + } + } + + private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + linkLabel2.Enabled = false; + isLogin(delegate + { + linkLabel2.Enabled = true; + }); + } + + public void isLogin(Action endAct) + { + APIUtlis.getIsLogin(delegate(HttpResult reust2) + { + dynamic data2 = Tools.Todejosn(reust2.Html); + if (!base.IsDisposed) + { + BeginInvoke((Action)delegate + { + if (data2["Code"] == "0000") + { + AppSysConfig.integral = data2["Data"]["integral"]; + AppSysConfig.freezeIntegral = data2["Data"]["freezeIntegral"]; + if (AppSysConfig.integral < 0) + { + labintegral.Text = "(负)" + AppSysConfig.integral; + labintegral.ForeColor = Color.Green; + } + else + { + labintegral.Text = AppSysConfig.integral.ToString(); + labintegral.ForeColor = Color.Black; + } + labfreezeIntegral.Text = AppSysConfig.freezeIntegral.ToString(); + } + else if (!((data2["Code"] == "2004") ? true : false)) + { + MessageBox.Show(data2["Message"]); + } + else if (MessageBox.Show("账号已掉线,是否重新登录", "登录提示", MessageBoxButtons.YesNo) == DialogResult.Yes) + { + userReLogin(); + } + endAct(); + }); + } + }); + } + + public void userReLogin() + { + string userName = AppSysConfig.userName; + string userPwd = AppSysConfig.userPwd; + Dictionary postData = new Dictionary + { + { "account", userName }, + { "pwd", userPwd } + }; + HttpResult httpResult = new ApiNetReq().doPost(postData, "ApiLogin"); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + dynamic val = Tools.Todejosn(httpResult.Html); + if (val["Code"] == "0000") + { + AppSysConfig.userToken = val["Data"]["token"]; + AppSysConfig.integral = val["Data"]["integral"]; + AppSysConfig.freezeIntegral = val["Data"]["freezeIntegral"]; + if (AppSysConfig.integral < 0) + { + labintegral.Text = "(负)" + AppSysConfig.integral; + labintegral.ForeColor = Color.Green; + } + else + { + labintegral.Text = AppSysConfig.integral.ToString(); + labintegral.ForeColor = Color.Black; + } + labfreezeIntegral.Text = AppSysConfig.freezeIntegral.ToString(); + MessageBox.Show("登录成功"); + } + else if (val["Code"] == "2003") + { + MessageBox.Show(val["Message"]); + string text = Interaction.InputBox("请重新输入账号的登录密码", "请重新输入账号的登录密码"); + if (text.Length != 0) + { + AppSysConfig.userPwd = text; + userReLogin(); + } + } + else + { + MessageBox.Show(val["Message"]); + } + } + else + { + MessageBox.Show("请求错误,请检测网络"); + } + } + + private void FormGiftcardBalance_FormClosing(object sender, FormClosingEventArgs e) + { + if (AotuQueryTask != null && AotuQueryTask.taskState.TaskIsRun && MessageBox.Show("定时查询任务还在运行,确定退出吗?", "提示", MessageBoxButtons.OKCancel) != DialogResult.OK) + { + e.Cancel = true; + } + else if (login != null && !isOut) + { + base.taskState.Stop(); + Application.Exit(); + Environment.Exit(0); + } + } + + private void button2_Click(object sender, EventArgs e) + { + string text = "确认删除列表数据吗"; + ListView listView = listGiftcardBalance; + if (tabLists.SelectedIndex == 1) + { + text = "确认删除【定时查询礼品卡】列表数据吗"; + listView = listAotoQueryList; + } + else if (tabLists.SelectedIndex == 2) + { + text = "确认删除【自动加卡的ID 】列表数据吗"; + listView = listAotoIdList; + } + if (MessageBox.Show(text, "提示", MessageBoxButtons.OKCancel) == DialogResult.OK) + { + listView.Items.Clear(); + } + } + + private void btnRelogin_Click(object sender, EventArgs e) + { + if (txtGiftcardLoadAccount.Text != "账号输入格式:xxxx@xxx.com----密码") + { + btnRelogin.Enabled = false; + List listAccount = AppleUtlis.accountInput(txtGiftcardLoadAccount.Text.Trim()); + if (listAccount.Count != 1) + { + return; + } + isLoginSucess = false; + labError.Text = "正在重新登录.."; + labStore.Text = ""; + Task.Run(delegate + { + if (!base.taskState.isRun) + { + base.taskState.isRun = true; + } + giftcardBalance.Reset(); + string error; + bool loginReust = giftcardBalance.shopSignIn(listAccount[0].appleId.Trim(), listAccount[0].applePwd, ckGiftcardBalanceVpn.Checked, out error); + if (!base.taskState.TaskIsRun) + { + base.taskState.isRun = false; + } + if (base.IsHandleCreated) + { + BeginInvoke((Action)delegate + { + btnRelogin.Enabled = true; + if (loginReust) + { + ConfigUtlis.saveConfigKey("ckGiftcardBalanceVpn", ckGiftcardBalanceVpn.Checked.ToString()); + ConfigUtlis.saveConfigKey("txtGiftcardLoadAccount", txtGiftcardLoadAccount.Text.Trim()); + labStore.Text = giftcardBalance.storeAppleHost.Replace(".store.apple.com", ""); + GiftcardBalanceManage.AddGifStandby(giftcardBalance.storeAppleHostLists, listAccount[0].appleId, listAccount[0].applePwd); + GiftcardBalanceManage.GetStandby(giftcardBalance.storeAppleHostLists, listAccount[0].appleId)?.AddGiftcardBalance(giftcardBalance); + labError.Text = "ID登陆成功"; + isLoginSucess = true; + } + else + { + labStore.Text = ""; + labError.Text = error; + } + }); + } + }); + } + else + { + MessageBox.Show("请输入账号"); + txtGiftcardLoadAccount.Focus(); + } + } + + [DllImport("User32.dll", CharSet = CharSet.Unicode)] + private static extern bool FlashWindowEx(ref FLASHWINFO pwfi); + + private void FlashWin() + { + FLASHWINFO pwfi = default(FLASHWINFO); + pwfi.cbSize = Convert.ToUInt32(Marshal.SizeOf((object)pwfi)); + pwfi.hwnd = base.Handle; + pwfi.dwFlags = 6u; + pwfi.uCount = 5u; + pwfi.dwTimeout = 500u; + FlashWindowEx(ref pwfi); + } + + private void btnInputCarkList_Click(object sender, EventArgs e) + { + FromInputAcount fromInputAcount = new FromInputAcount(); + fromInputAcount.tipMssage = "卡片代码"; + fromInputAcount.isOpenSysVpn = ckGiftcardBalanceVpn.Checked; + if (fromInputAcount.ShowDialog() != DialogResult.OK) + { + return; + } + List list = new List(); + int num = 0; + if (listAotoQueryList.Items.Count > 0 && int.TryParse(listAotoQueryList.Items[listAotoQueryList.Items.Count - 1].SubItems[0].Text, out var result)) + { + num = result; + } + string[] array = fromInputAcount.StrInput.Split('\n'); + foreach (string kamiItem in array) + { + if (!string.IsNullOrEmpty(kamiItem.Trim()) && kamiItem.Length >= 12 && list.Where((string c) => c == kamiItem.Trim()).Count() == 0) + { + list.Add(kamiItem.Trim()); + num++; + ListViewItem listViewItem = new ListViewItem(num.ToString()); + listViewItem.SubItems.Add(kamiItem.Trim()); + listViewItem.SubItems.Add("-"); + listViewItem.SubItems.Add(""); + listViewItem.SubItems.Add(""); + listViewItem.SubItems.Add(""); + listViewItem.SubItems.Add(""); + listViewItem.UseItemStyleForSubItems = false; + listAotoQueryList.Items.Add(listViewItem); + } + } + tabLists.SelectedTab = tabAutoCardList; + } + + public void plaYpromptTone() + { + try + { + sp.Stop(); + sp.Play(); + UpdataMainUi(delegate + { + FlashWin(); + }); + } + catch (Exception) + { + } + } + + private void ckAotuLoadId_CheckedChanged(object sender, EventArgs e) + { + if (ckAotuLoadId.Checked) + { + tabAutoIdList.Parent = autoIdList; + tabLists.SelectedTab = tabAutoIdList; + btnInputIdList.Enabled = true; + } + else + { + tabAutoIdList.Parent = null; + btnInputIdList.Enabled = false; + tabLists.SelectedTab = tabAutoCardList; + } + } + + private void btnInputIdList_Click(object sender, EventArgs e) + { + FromInputAcount fromInputAcount = new FromInputAcount(); + fromInputAcount.tipMssage = "账号---密码--最大加载金额"; + if (fromInputAcount.ShowDialog() != DialogResult.OK) + { + return; + } + List list = AppleUtlis.accountInput(fromInputAcount.StrInput); + int num = 0; + foreach (AppleAcount item in list) + { + if (!string.IsNullOrEmpty(item.overflow) && decimal.TryParse(item.overflow, out var _)) + { + num++; + ListViewItem listViewItem = new ListViewItem(num.ToString()); + listViewItem.SubItems.Add(item.appleId.Trim()); + listViewItem.SubItems.Add(item.applePwd.Trim()); + listViewItem.SubItems.Add(item.overflow); + listViewItem.SubItems.Add("0"); + listViewItem.SubItems.Add(""); + listViewItem.SubItems.Add(""); + listViewItem.SubItems.Add(""); + listViewItem.UseItemStyleForSubItems = false; + listAotoIdList.Items.Add(listViewItem); + } + } + tabLists.SelectedTab = tabAutoIdList; + } + + private void 删除ToolStripMenuItem_Click(object sender, EventArgs e) + { + ListView listView = listAotoIdList; + foreach (ListViewItem selectedItem in listView.SelectedItems) + { + listView.Items.Remove(selectedItem); + } + } + + private void 复制信息ToolStripMenuItem_Click(object sender, EventArgs e) + { + ListView listView = listAotoIdList; + string text = ""; + int num = 0; + foreach (ListViewItem selectedItem in listView.SelectedItems) + { + num = 0; + foreach (ListViewItem.ListViewSubItem subItem in selectedItem.SubItems) + { + if (num != 0) + { + text = ((num <= 2) ? (text + subItem.Text + "----") : (text + listView.Columns[num].Text + subItem.Text + "-")); + } + num++; + } + text += "\n"; + } + if (text.Length > 0) + { + try + { + Clipboard.SetText(text); + MessageBox.Show("复制成功"); + } + catch (Exception) + { + MessageBox.Show("复制失败"); + } + } + } + + private void 查询余额ToolStripMenuItem_Click(object sender, EventArgs e) + { + List list = new List(); + foreach (ListViewItem selectedItem in listAotoIdList.SelectedItems) + { + list.Add(new AppleAcount + { + appleId = selectedItem.SubItems[1].Text, + applePwd = selectedItem.SubItems[2].Text + }); + } + AotuQueryTask.QuertAppleBlance(list, aotoReddemAction); + } + + private void label7_Click(object sender, EventArgs e) + { + string input = label7.Text; + string value = new Regex("序号:([\\d]+)").Match(input).Groups[1].Value; + if (string.IsNullOrEmpty(value) || !int.TryParse(value, out var no)) + { + return; + } + try + { + tabLists.SelectedTab = tabAutoCardList; + foreach (ListViewItem item in from ListViewItem c in listAotoQueryList.Items + where c.SubItems[0].Text == no.ToString() + select c) + { + item.EnsureVisible(); + } + } + catch (Exception) + { + } + } + + private void ckGiftcardBalanceVpn_CheckedChanged(object sender, EventArgs e) + { + List list = AppleUtlis.accountInput(txtGiftcardLoadAccount.Text.Trim()); + if (list.Count >= 1) + { + GiftcardBalanceStandby standby = GiftcardBalanceManage.GetStandby(_storeAppleHostLists, list[0].appleId); + if (standby != null) + { + standby.startVpn = ckGiftcardBalanceVpn.Checked; + } + } + } + + public void RefreshLocation() + { + int num = 0; + foreach (KeyValuePair fastCountry in FastCountrys) + { + fastCountry.Value.Location = new Point(161 + num, 305); + num += fastCountry.Value.GetPreferredSize(fastCountry.Value.Size).Width + 35; + } + } + + public CheckBox CreateCheckBox(string name) + { + CheckBox checkBox = new CheckBox(); + checkBox.Text = getCountriesInfoByName(name) + "-初始化"; + checkBox.AutoSize = true; + checkBox.Tag = name; + checkBox.Enabled = false; + checkBox.ContextMenuStrip = contextMenuStrip3; + checkBox.Location = new Point(161, 305); + checkBox.Font = checkBox1.Font; + checkBox.ForeColor = checkBox1.ForeColor; + checkBox.CheckedChanged += delegate(object sender, EventArgs e) + { + CheckBox checkBox2 = sender as CheckBox; + if (!ckMultiple.Checked && checkBox2.Checked) + { + foreach (KeyValuePair fastCountry in FastCountrys) + { + if (fastCountry.Value != checkBox2) + { + fastCountry.Value.Checked = false; + } + } + } + string selectedItem = checkBox2.Tag.ToString(); + if (checkBox2.Checked) + { + comCountries.SelectedItem = selectedItem; + btnChangeEvel(); + } + if (ckMultiple.Checked) + { + string text = ""; + int num = 0; + foreach (KeyValuePair fastCountry2 in FastCountrys) + { + if (fastCountry2.Value.Checked) + { + text = text + fastCountry2.Value.Tag.ToString() + ","; + num++; + } + } + if (!string.IsNullOrEmpty(text)) + { + labNowGiftCardCountry.Text = text.TrimEnd(','); + } + if (num >= 2) + { + labRemovePayDianShu.Text = AppSysConfig.getTypeById(48).consNum.ToString(); + } + else + { + labRemovePayDianShu.Text = AppSysConfig.getTypeById(23).consNum.ToString(); + } + } + }; + base.Controls.Add(checkBox); + return checkBox; + } + + private void btnAddShortcut_Click(object sender, EventArgs e) + { + if (FastCountrys.Count < FastCountryCout) + { + List list = AppleUtlis.accountInput(txtGiftcardLoadAccount.Text.Trim()); + if (list.Count >= 1) + { + string text = comCountries.Text; + if (!FastCountrys.ContainsKey(text)) + { + MessageBox.Show("添加完成"); + CheckBox value = CreateCheckBox(text); + FastCountrys.Add(text, value); + string countriesKeyByName = getCountriesKeyByName(text); + if (GiftcardBalanceManage.GetStandby(countriesKeyByName, list[0].appleId) == null && GiftcardBalanceManage.AddGifStandby(countriesKeyByName, list[0].appleId, list[0].applePwd)) + { + GiftcardBalanceManage.GetStandby(countriesKeyByName, list[0].appleId).GetRandomGiftcard(ckGiftcardBalanceVpn.Checked); + } + RefreshLocation(); + } + else + { + MessageBox.Show("所选国家存在在,请选择其他国家"); + } + } + else + { + MessageBox.Show("请先填写登录的Apple ID"); + } + } + else + { + MessageBox.Show("失败:查询快捷国家数量最多可以添加 " + FastCountryCout + " 个,请先移除其他的国家,鼠标选中右键可以删除。"); + } + } + + private void delFastContel_Click(object sender, EventArgs e) + { + if (contextMenuStrip3.SourceControl is CheckBox checkBox) + { + base.Controls.Remove(checkBox); + FastCountrys.Remove(checkBox.Tag.ToString()); + } + RefreshLocation(); + if (!ckMultiple.Checked) + { + return; + } + string text = ""; + int num = 0; + foreach (KeyValuePair fastCountry in FastCountrys) + { + if (fastCountry.Value.Checked) + { + text = text + fastCountry.Value.Tag.ToString() + ","; + num++; + } + } + if (!string.IsNullOrEmpty(text)) + { + labNowGiftCardCountry.Text = text.TrimEnd(','); + } + if (num >= 2) + { + labRemovePayDianShu.Text = AppSysConfig.getTypeById(48).consNum.ToString(); + } + else + { + labRemovePayDianShu.Text = AppSysConfig.getTypeById(23).consNum.ToString(); + } + } + + private void ckMultiple_CheckedChanged(object sender, EventArgs e) + { + if (ckMultiple.Checked) + { + return; + } + foreach (KeyValuePair fastCountry in FastCountrys) + { + fastCountry.Value.Checked = false; + } + btnChangeEvel(); + } + + private void button3_Click(object sender, EventArgs e) + { + if (AotuQueryTask != null) + { + AotuQueryTask.storeAppleHostLists = GiftCardCountryList[comCountries.SelectedIndex]; + label13.Text = comCountries.Text; + } + } + + private void ckAutoRecog_CheckedChanged(object sender, EventArgs e) + { + if (ckAutoRecog.Checked) + { + CheckBox checkBox = ckMultiple; + CheckBox checkBox2 = ckMultiple; + Button button = btnChange; + btnAddShortcut.Enabled = false; + button.Enabled = false; + bool flag = false; + checkBox2.Enabled = false; + checkBox.Checked = false; + listGiftcardBalance.Columns[2].Text = "卡国家"; + labNowGiftCardCountry.Text = "自动识别"; + labRemovePayDianShu.Text = AppSysConfig.getTypeById(49).consNum.ToString(); + } + else + { + Button button2 = btnChange; + Button button3 = btnAddShortcut; + bool flag = true; + button3.Enabled = true; + button2.Enabled = true; + listGiftcardBalance.Columns[2].Text = "查询的商店"; + labRemovePayDianShu.Text = AppSysConfig.getTypeById(23).consNum.ToString(); + btnChangeEvel(); + } + ConfigUtlis.saveConfigKey("ckAutoRecog", ckAutoRecog.Checked.ToString()); + } + + protected override void Dispose(bool disposing) + { + if (disposing && components != null) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.ckGiftcardBalanceVpn = new System.Windows.Forms.CheckBox(); + this.label5 = new System.Windows.Forms.Label(); + this.labRemovePayDianShu = new System.Windows.Forms.Label(); + this.label31 = new System.Windows.Forms.Label(); + this.groupBox5 = new System.Windows.Forms.GroupBox(); + this.button1 = new System.Windows.Forms.Button(); + this.btnStopRemovePay = new System.Windows.Forms.Button(); + this.btnRemovePayLog = new System.Windows.Forms.Button(); + this.btnStartRemovePay = new System.Windows.Forms.Button(); + this.txtGiftcard = new System.Windows.Forms.RichTextBox(); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.粘贴ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.listGiftcardBalance = new System.Windows.Forms.ListView(); + this.columnHeader8 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader9 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader19 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader12 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader1 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader23 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader14 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader2 = new System.Windows.Forms.ColumnHeader(); + this.MenuArea = new System.Windows.Forms.ContextMenuStrip(this.components); + this.ToolAreDelete = new System.Windows.Forms.ToolStripMenuItem(); + this.重新执行ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.复制账号信息ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.tipInputPwd = new System.Windows.Forms.ToolStripMenuItem(); + this.复制礼品卡代码余额ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.label45 = new System.Windows.Forms.Label(); + this.txtGiftcardLoadAccount = new System.Windows.Forms.TextBox(); + this.labError = new System.Windows.Forms.Label(); + this.comCountries = new System.Windows.Forms.ComboBox(); + this.btnChange = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.labNowGiftCardCountry = new System.Windows.Forms.Label(); + this.panel1 = new System.Windows.Forms.Panel(); + this.button3 = new System.Windows.Forms.Button(); + this.label13 = new System.Windows.Forms.Label(); + this.ckApplyLoop = new System.Windows.Forms.CheckBox(); + this.btnInputIdList = new System.Windows.Forms.Button(); + this.ckCueTone = new System.Windows.Forms.CheckBox(); + this.ckAotuLoadId = new System.Windows.Forms.CheckBox(); + this.btnInputCarkList = new System.Windows.Forms.Button(); + this.btnStartTime = new System.Windows.Forms.Button(); + this.label8 = new System.Windows.Forms.Label(); + this.btnExecuted = new System.Windows.Forms.Button(); + this.label7 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.txtSepTime = new System.Windows.Forms.TextBox(); + this.ckAutoTimeCheck = new System.Windows.Forms.CheckBox(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.linkLabel2 = new System.Windows.Forms.LinkLabel(); + this.labfreezeIntegral = new System.Windows.Forms.Label(); + this.label11 = new System.Windows.Forms.Label(); + this.labintegral = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.labUserNam = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.panUserInfo = new System.Windows.Forms.Panel(); + this.linkLabel1 = new System.Windows.Forms.LinkLabel(); + this.button2 = new System.Windows.Forms.Button(); + this.btnRelogin = new System.Windows.Forms.Button(); + this.labStore = new System.Windows.Forms.Label(); + this.label12 = new System.Windows.Forms.Label(); + this.labGiftBalanceTip = new System.Windows.Forms.Label(); + this.tabLists = new System.Windows.Forms.TabControl(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.tabAutoCardList = new System.Windows.Forms.TabPage(); + this.listAotoQueryList = new System.Windows.Forms.ListView(); + this.columnHeader3 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader4 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader11 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader5 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader7 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader10 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader22 = new System.Windows.Forms.ColumnHeader(); + this.tabAutoIdList = new System.Windows.Forms.TabPage(); + this.listAotoIdList = new System.Windows.Forms.ListView(); + this.columnHeader13 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader15 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader16 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader17 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader18 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader6 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader20 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader21 = new System.Windows.Forms.ColumnHeader(); + this.contextMenuStrip2 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.删除ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.查询余额ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.复制信息ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); + this.ckMultiple = new System.Windows.Forms.CheckBox(); + this.ckAutoRecog = new System.Windows.Forms.CheckBox(); + this.label14 = new System.Windows.Forms.Label(); + this.labLoginCount = new System.Windows.Forms.Label(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.btnAddShortcut = new System.Windows.Forms.Button(); + this.checkBox2 = new System.Windows.Forms.CheckBox(); + this.contextMenuStrip3 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.delFastContel = new System.Windows.Forms.ToolStripMenuItem(); + this.groupBox5.SuspendLayout(); + this.contextMenuStrip1.SuspendLayout(); + this.MenuArea.SuspendLayout(); + this.panel1.SuspendLayout(); + this.tabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.panUserInfo.SuspendLayout(); + this.tabLists.SuspendLayout(); + this.tabPage2.SuspendLayout(); + this.tabAutoCardList.SuspendLayout(); + this.tabAutoIdList.SuspendLayout(); + this.contextMenuStrip2.SuspendLayout(); + this.contextMenuStrip3.SuspendLayout(); + base.SuspendLayout(); + this.ckGiftcardBalanceVpn.AutoSize = true; + this.ckGiftcardBalanceVpn.ForeColor = System.Drawing.Color.Red; + this.ckGiftcardBalanceVpn.Location = new System.Drawing.Point(17, 267); + this.ckGiftcardBalanceVpn.Name = "ckGiftcardBalanceVpn"; + this.ckGiftcardBalanceVpn.Size = new System.Drawing.Size(108, 16); + this.ckGiftcardBalanceVpn.TabIndex = 34; + this.ckGiftcardBalanceVpn.Text = "使用随机IP代理"; + this.ckGiftcardBalanceVpn.UseVisualStyleBackColor = true; + this.ckGiftcardBalanceVpn.CheckedChanged += new System.EventHandler(ckGiftcardBalanceVpn_CheckedChanged); + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(211, 269); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(365, 12); + this.label5.TabIndex = 33; + this.label5.Text = "同时查两个及以上国家扣{0}点,自动识别国家并测僵尸卡扣 {1} 点"; + this.labRemovePayDianShu.AutoSize = true; + this.labRemovePayDianShu.Font = new System.Drawing.Font("微软雅黑", 10.5f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.labRemovePayDianShu.ForeColor = System.Drawing.Color.Crimson; + this.labRemovePayDianShu.Location = new System.Drawing.Point(185, 265); + this.labRemovePayDianShu.Name = "labRemovePayDianShu"; + this.labRemovePayDianShu.Size = new System.Drawing.Size(18, 19); + this.labRemovePayDianShu.TabIndex = 32; + this.labRemovePayDianShu.Text = "0"; + this.label31.AutoSize = true; + this.label31.Location = new System.Drawing.Point(125, 268); + this.label31.Name = "label31"; + this.label31.Size = new System.Drawing.Size(65, 12); + this.label31.TabIndex = 31; + this.label31.Text = "消耗点数:"; + this.groupBox5.Controls.Add(this.button1); + this.groupBox5.Controls.Add(this.btnStopRemovePay); + this.groupBox5.Controls.Add(this.btnRemovePayLog); + this.groupBox5.Controls.Add(this.btnStartRemovePay); + this.groupBox5.Location = new System.Drawing.Point(443, 72); + this.groupBox5.Name = "groupBox5"; + this.groupBox5.Size = new System.Drawing.Size(156, 187); + this.groupBox5.TabIndex = 29; + this.groupBox5.TabStop = false; + this.groupBox5.Text = "操作"; + this.button1.Location = new System.Drawing.Point(12, 118); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(130, 24); + this.button1.TabIndex = 9; + this.button1.Text = "导出记录"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(button1_Click); + this.btnStopRemovePay.Location = new System.Drawing.Point(12, 80); + this.btnStopRemovePay.Name = "btnStopRemovePay"; + this.btnStopRemovePay.Size = new System.Drawing.Size(130, 24); + this.btnStopRemovePay.TabIndex = 8; + this.btnStopRemovePay.Text = "停止查询"; + this.btnStopRemovePay.UseVisualStyleBackColor = true; + this.btnStopRemovePay.Click += new System.EventHandler(btnStopRemovePay_Click); + this.btnRemovePayLog.Location = new System.Drawing.Point(12, 156); + this.btnRemovePayLog.Name = "btnRemovePayLog"; + this.btnRemovePayLog.Size = new System.Drawing.Size(130, 23); + this.btnRemovePayLog.TabIndex = 7; + this.btnRemovePayLog.Text = "余额查询记录"; + this.btnRemovePayLog.UseVisualStyleBackColor = true; + this.btnRemovePayLog.Click += new System.EventHandler(btnRemovePayLog_Click); + this.btnStartRemovePay.Location = new System.Drawing.Point(12, 20); + this.btnStartRemovePay.Name = "btnStartRemovePay"; + this.btnStartRemovePay.Size = new System.Drawing.Size(130, 46); + this.btnStartRemovePay.TabIndex = 6; + this.btnStartRemovePay.Text = "开始查询"; + this.btnStartRemovePay.UseVisualStyleBackColor = true; + this.btnStartRemovePay.Click += new System.EventHandler(btnStartRemovePay_Click); + this.txtGiftcard.ContextMenuStrip = this.contextMenuStrip1; + this.txtGiftcard.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtGiftcard.Font = new System.Drawing.Font("宋体", 10.5f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.txtGiftcard.Location = new System.Drawing.Point(3, 3); + this.txtGiftcard.Name = "txtGiftcard"; + this.txtGiftcard.Size = new System.Drawing.Size(398, 171); + this.txtGiftcard.TabIndex = 0; + this.txtGiftcard.Text = ""; + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[1] { this.粘贴ToolStripMenuItem }); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(101, 26); + this.粘贴ToolStripMenuItem.Name = "粘贴ToolStripMenuItem"; + this.粘贴ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); + this.粘贴ToolStripMenuItem.Text = "粘贴"; + this.粘贴ToolStripMenuItem.Click += new System.EventHandler(粘贴ToolStripMenuItem_Click); + this.listGiftcardBalance.Columns.AddRange(new System.Windows.Forms.ColumnHeader[8] { this.columnHeader8, this.columnHeader9, this.columnHeader19, this.columnHeader12, this.columnHeader1, this.columnHeader23, this.columnHeader14, this.columnHeader2 }); + this.listGiftcardBalance.ContextMenuStrip = this.MenuArea; + this.listGiftcardBalance.Dock = System.Windows.Forms.DockStyle.Fill; + this.listGiftcardBalance.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.listGiftcardBalance.FullRowSelect = true; + this.listGiftcardBalance.HideSelection = false; + this.listGiftcardBalance.Location = new System.Drawing.Point(3, 3); + this.listGiftcardBalance.Name = "listGiftcardBalance"; + this.listGiftcardBalance.Size = new System.Drawing.Size(1008, 402); + this.listGiftcardBalance.TabIndex = 35; + this.listGiftcardBalance.UseCompatibleStateImageBehavior = false; + this.listGiftcardBalance.View = System.Windows.Forms.View.Details; + this.columnHeader8.Text = "序号"; + this.columnHeader9.Text = "礼品卡代码"; + this.columnHeader9.Width = 200; + this.columnHeader19.Text = "查询的商店"; + this.columnHeader19.Width = 100; + this.columnHeader12.Text = "余额"; + this.columnHeader12.Width = 100; + this.columnHeader1.Text = "PIN礼品卡尾号"; + this.columnHeader1.Width = 100; + this.columnHeader23.Text = "状态"; + this.columnHeader23.Width = 100; + this.columnHeader14.Text = "信息"; + this.columnHeader14.Width = 240; + this.columnHeader2.Text = "时间"; + this.columnHeader2.Width = 89; + this.MenuArea.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.MenuArea.Items.AddRange(new System.Windows.Forms.ToolStripItem[5] { this.ToolAreDelete, this.重新执行ToolStripMenuItem, this.复制账号信息ToolStripMenuItem, this.tipInputPwd, this.复制礼品卡代码余额ToolStripMenuItem }); + this.MenuArea.Name = "MenuArea"; + this.MenuArea.Size = new System.Drawing.Size(194, 114); + this.ToolAreDelete.Name = "ToolAreDelete"; + this.ToolAreDelete.Size = new System.Drawing.Size(193, 22); + this.ToolAreDelete.Text = "删除"; + this.ToolAreDelete.Click += new System.EventHandler(ToolAreDelete_Click); + this.重新执行ToolStripMenuItem.Name = "重新执行ToolStripMenuItem"; + this.重新执行ToolStripMenuItem.Size = new System.Drawing.Size(193, 22); + this.重新执行ToolStripMenuItem.Text = "重新执行"; + this.重新执行ToolStripMenuItem.Click += new System.EventHandler(重新执行ToolStripMenuItem_Click); + this.复制账号信息ToolStripMenuItem.Name = "复制账号信息ToolStripMenuItem"; + this.复制账号信息ToolStripMenuItem.Size = new System.Drawing.Size(193, 22); + this.复制账号信息ToolStripMenuItem.Text = "复制信息"; + this.复制账号信息ToolStripMenuItem.Click += new System.EventHandler(复制账号信息ToolStripMenuItem_Click); + this.tipInputPwd.Name = "tipInputPwd"; + this.tipInputPwd.Size = new System.Drawing.Size(193, 22); + this.tipInputPwd.Text = "复制礼品卡代码"; + this.tipInputPwd.Click += new System.EventHandler(tipInputPwd_Click); + this.复制礼品卡代码余额ToolStripMenuItem.Name = "复制礼品卡代码余额ToolStripMenuItem"; + this.复制礼品卡代码余额ToolStripMenuItem.Size = new System.Drawing.Size(193, 22); + this.复制礼品卡代码余额ToolStripMenuItem.Text = "复制礼品卡代码+余额"; + this.复制礼品卡代码余额ToolStripMenuItem.Click += new System.EventHandler(复制礼品卡代码余额ToolStripMenuItem_Click); + this.label45.AutoSize = true; + this.label45.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.label45.ForeColor = System.Drawing.Color.Firebrick; + this.label45.Location = new System.Drawing.Point(22, 18); + this.label45.Name = "label45"; + this.label45.Size = new System.Drawing.Size(45, 17); + this.label45.TabIndex = 37; + this.label45.Text = "登录ID"; + this.txtGiftcardLoadAccount.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.txtGiftcardLoadAccount.Location = new System.Drawing.Point(73, 15); + this.txtGiftcardLoadAccount.Name = "txtGiftcardLoadAccount"; + this.txtGiftcardLoadAccount.Size = new System.Drawing.Size(338, 23); + this.txtGiftcardLoadAccount.TabIndex = 36; + this.txtGiftcardLoadAccount.Text = "账号输入格式:xxxx@xxx.com----密码"; + this.txtGiftcardLoadAccount.Enter += new System.EventHandler(txtLoadAccount_Enter); + this.txtGiftcardLoadAccount.Leave += new System.EventHandler(txtLoadAccount_Leave); + this.labError.AutoSize = true; + this.labError.Font = new System.Drawing.Font("宋体", 10.5f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.labError.ForeColor = System.Drawing.Color.Red; + this.labError.Location = new System.Drawing.Point(576, 296); + this.labError.Name = "labError"; + this.labError.Size = new System.Drawing.Size(0, 14); + this.labError.TabIndex = 38; + this.comCountries.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comCountries.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.comCountries.FormattingEnabled = true; + this.comCountries.Location = new System.Drawing.Point(608, 25); + this.comCountries.Name = "comCountries"; + this.comCountries.Size = new System.Drawing.Size(225, 25); + this.comCountries.TabIndex = 39; + this.btnChange.Location = new System.Drawing.Point(608, 63); + this.btnChange.Name = "btnChange"; + this.btnChange.Size = new System.Drawing.Size(75, 23); + this.btnChange.TabIndex = 40; + this.btnChange.Text = "更改"; + this.btnChange.UseVisualStyleBackColor = true; + this.btnChange.Click += new System.EventHandler(btnChange_Click); + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(511, 39); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(89, 12); + this.label1.TabIndex = 41; + this.label1.Text = "选择礼品卡国家"; + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(611, 93); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(101, 12); + this.label2.TabIndex = 42; + this.label2.Text = "当前商店国家是:"; + this.labNowGiftCardCountry.AutoSize = true; + this.labNowGiftCardCountry.Font = new System.Drawing.Font("宋体", 9f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.labNowGiftCardCountry.Location = new System.Drawing.Point(715, 94); + this.labNowGiftCardCountry.Name = "labNowGiftCardCountry"; + this.labNowGiftCardCountry.Size = new System.Drawing.Size(0, 12); + this.labNowGiftCardCountry.TabIndex = 43; + this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel1.Controls.Add(this.button3); + this.panel1.Controls.Add(this.label13); + this.panel1.Controls.Add(this.ckApplyLoop); + this.panel1.Controls.Add(this.btnInputIdList); + this.panel1.Controls.Add(this.ckCueTone); + this.panel1.Controls.Add(this.ckAotuLoadId); + this.panel1.Controls.Add(this.btnInputCarkList); + this.panel1.Controls.Add(this.btnStartTime); + this.panel1.Controls.Add(this.label8); + this.panel1.Controls.Add(this.btnExecuted); + this.panel1.Controls.Add(this.label7); + this.panel1.Controls.Add(this.label6); + this.panel1.Controls.Add(this.label4); + this.panel1.Controls.Add(this.label3); + this.panel1.Controls.Add(this.txtSepTime); + this.panel1.Location = new System.Drawing.Point(613, 169); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(412, 123); + this.panel1.TabIndex = 44; + this.button3.Location = new System.Drawing.Point(154, 63); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(88, 23); + this.button3.TabIndex = 14; + this.button3.Text = "更改定时国家"; + this.toolTip1.SetToolTip(this.button3, "导入格式:卡片代码"); + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(button3_Click); + this.label13.AutoSize = true; + this.label13.Font = new System.Drawing.Font("宋体", 9f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.label13.ForeColor = System.Drawing.SystemColors.MenuHighlight; + this.label13.Location = new System.Drawing.Point(152, 42); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(54, 12); + this.label13.TabIndex = 13; + this.label13.Text = "label13"; + this.ckApplyLoop.AutoSize = true; + this.ckApplyLoop.Location = new System.Drawing.Point(277, 43); + this.ckApplyLoop.Name = "ckApplyLoop"; + this.ckApplyLoop.Size = new System.Drawing.Size(132, 16); + this.ckApplyLoop.TabIndex = 12; + this.ckApplyLoop.Text = "兑换完成后继续查询"; + this.toolTip1.SetToolTip(this.ckApplyLoop, "兑换成功后,继续重新查询余额"); + this.ckApplyLoop.UseVisualStyleBackColor = true; + this.btnInputIdList.Location = new System.Drawing.Point(280, 95); + this.btnInputIdList.Name = "btnInputIdList"; + this.btnInputIdList.Size = new System.Drawing.Size(115, 23); + this.btnInputIdList.TabIndex = 11; + this.btnInputIdList.Text = "导入加卡的ID"; + this.toolTip1.SetToolTip(this.btnInputIdList, "导入格式:账号---密码--需加载金额,有双重的账户,需要提前认证双重"); + this.btnInputIdList.UseVisualStyleBackColor = true; + this.btnInputIdList.Click += new System.EventHandler(btnInputIdList_Click); + this.ckCueTone.AutoSize = true; + this.ckCueTone.Checked = true; + this.ckCueTone.CheckState = System.Windows.Forms.CheckState.Checked; + this.ckCueTone.Location = new System.Drawing.Point(277, 3); + this.ckCueTone.Name = "ckCueTone"; + this.ckCueTone.Size = new System.Drawing.Size(108, 16); + this.ckCueTone.TabIndex = 10; + this.ckCueTone.Text = "查到余额提示音"; + this.toolTip1.SetToolTip(this.ckCueTone, "查询到余额播放提示音,勾选自动加卡后则加卡成功才播放提示音"); + this.ckCueTone.UseVisualStyleBackColor = true; + this.ckAotuLoadId.AutoSize = true; + this.ckAotuLoadId.Location = new System.Drawing.Point(277, 23); + this.ckAotuLoadId.Name = "ckAotuLoadId"; + this.ckAotuLoadId.Size = new System.Drawing.Size(132, 16); + this.ckAotuLoadId.TabIndex = 9; + this.ckAotuLoadId.Text = "查询到余额自动加卡"; + this.toolTip1.SetToolTip(this.ckAotuLoadId, "定时查询到余额后,自动加载到的ID里"); + this.ckAotuLoadId.UseVisualStyleBackColor = true; + this.ckAotuLoadId.CheckedChanged += new System.EventHandler(ckAotuLoadId_CheckedChanged); + this.btnInputCarkList.Location = new System.Drawing.Point(154, 94); + this.btnInputCarkList.Name = "btnInputCarkList"; + this.btnInputCarkList.Size = new System.Drawing.Size(111, 23); + this.btnInputCarkList.TabIndex = 8; + this.btnInputCarkList.Text = "导入定时礼品卡"; + this.toolTip1.SetToolTip(this.btnInputCarkList, "导入格式:卡片代码"); + this.btnInputCarkList.UseVisualStyleBackColor = true; + this.btnInputCarkList.Click += new System.EventHandler(btnInputCarkList_Click); + this.btnStartTime.ForeColor = System.Drawing.SystemColors.Highlight; + this.btnStartTime.Location = new System.Drawing.Point(249, 64); + this.btnStartTime.Name = "btnStartTime"; + this.btnStartTime.Size = new System.Drawing.Size(65, 23); + this.btnStartTime.TabIndex = 7; + this.btnStartTime.Text = "开始计时"; + this.btnStartTime.UseVisualStyleBackColor = true; + this.btnStartTime.Click += new System.EventHandler(btnStartTime_Click); + this.label8.AutoSize = true; + this.label8.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.label8.Location = new System.Drawing.Point(4, 5); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(263, 17); + this.label8.TabIndex = 6; + this.label8.Text = "倒计时结束自动执行,定时礼品卡里的礼品卡代码"; + this.btnExecuted.ForeColor = System.Drawing.Color.Firebrick; + this.btnExecuted.Location = new System.Drawing.Point(324, 63); + this.btnExecuted.Name = "btnExecuted"; + this.btnExecuted.Size = new System.Drawing.Size(69, 24); + this.btnExecuted.TabIndex = 5; + this.btnExecuted.Text = "直接执行"; + this.btnExecuted.UseVisualStyleBackColor = true; + this.btnExecuted.Click += new System.EventHandler(btnExecuted_Click); + this.label7.AutoSize = true; + this.label7.Font = new System.Drawing.Font("宋体", 10.5f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.label7.ForeColor = System.Drawing.Color.Green; + this.label7.Location = new System.Drawing.Point(12, 72); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(52, 14); + this.label7.TabIndex = 4; + this.label7.Text = "未开始"; + this.label7.Click += new System.EventHandler(label7_Click); + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(11, 51); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(77, 12); + this.label6.TabIndex = 3; + this.label6.Text = "自动执行计时"; + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(94, 32); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(29, 12); + this.label4.TabIndex = 2; + this.label4.Text = "分钟"; + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(6, 30); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(29, 12); + this.label3.TabIndex = 1; + this.label3.Text = "间隔"; + this.txtSepTime.Location = new System.Drawing.Point(42, 27); + this.txtSepTime.Name = "txtSepTime"; + this.txtSepTime.Size = new System.Drawing.Size(41, 21); + this.txtSepTime.TabIndex = 0; + this.txtSepTime.Text = "10"; + this.ckAutoTimeCheck.AutoSize = true; + this.ckAutoTimeCheck.Location = new System.Drawing.Point(613, 147); + this.ckAutoTimeCheck.Name = "ckAutoTimeCheck"; + this.ckAutoTimeCheck.Size = new System.Drawing.Size(96, 16); + this.ckAutoTimeCheck.TabIndex = 0; + this.ckAutoTimeCheck.Text = "开启定时查询"; + this.toolTip1.SetToolTip(this.ckAutoTimeCheck, "开启后,间隔时间到后,会自动查询定时列表中的卡片信息"); + this.ckAutoTimeCheck.UseVisualStyleBackColor = true; + this.ckAutoTimeCheck.CheckedChanged += new System.EventHandler(checkBox1_CheckedChanged); + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Location = new System.Drawing.Point(25, 56); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(412, 203); + this.tabControl1.TabIndex = 45; + this.tabPage1.Controls.Add(this.txtGiftcard); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(404, 177); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "礼品卡代码"; + this.tabPage1.UseVisualStyleBackColor = true; + this.linkLabel2.AutoSize = true; + this.linkLabel2.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.linkLabel2.Location = new System.Drawing.Point(25, 85); + this.linkLabel2.Name = "linkLabel2"; + this.linkLabel2.Size = new System.Drawing.Size(56, 17); + this.linkLabel2.TabIndex = 52; + this.linkLabel2.TabStop = true; + this.linkLabel2.Text = "刷新点数"; + this.linkLabel2.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(linkLabel2_LinkClicked); + this.labfreezeIntegral.AutoSize = true; + this.labfreezeIntegral.Location = new System.Drawing.Point(78, 67); + this.labfreezeIntegral.Name = "labfreezeIntegral"; + this.labfreezeIntegral.Size = new System.Drawing.Size(11, 12); + this.labfreezeIntegral.TabIndex = 51; + this.labfreezeIntegral.Text = "0"; + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(4, 64); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(77, 12); + this.label11.TabIndex = 50; + this.label11.Text = "已消耗点数:"; + this.labintegral.AutoSize = true; + this.labintegral.Location = new System.Drawing.Point(91, 41); + this.labintegral.Name = "labintegral"; + this.labintegral.Size = new System.Drawing.Size(11, 12); + this.labintegral.TabIndex = 49; + this.labintegral.Text = "0"; + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(4, 41); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(89, 12); + this.label9.TabIndex = 48; + this.label9.Text = "当前剩余点数:"; + this.labUserNam.AutoSize = true; + this.labUserNam.Location = new System.Drawing.Point(73, 14); + this.labUserNam.Name = "labUserNam"; + this.labUserNam.Size = new System.Drawing.Size(41, 12); + this.labUserNam.TabIndex = 47; + this.labUserNam.Text = "label3"; + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(5, 14); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(65, 12); + this.label10.TabIndex = 46; + this.label10.Text = "登录账号:"; + this.panUserInfo.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panUserInfo.Controls.Add(this.linkLabel1); + this.panUserInfo.Controls.Add(this.linkLabel2); + this.panUserInfo.Controls.Add(this.label10); + this.panUserInfo.Controls.Add(this.labUserNam); + this.panUserInfo.Controls.Add(this.label9); + this.panUserInfo.Controls.Add(this.labfreezeIntegral); + this.panUserInfo.Controls.Add(this.labintegral); + this.panUserInfo.Controls.Add(this.label11); + this.panUserInfo.Location = new System.Drawing.Point(853, 8); + this.panUserInfo.Name = "panUserInfo"; + this.panUserInfo.Size = new System.Drawing.Size(175, 108); + this.panUserInfo.TabIndex = 53; + this.linkLabel1.AutoSize = true; + this.linkLabel1.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.linkLabel1.LinkColor = System.Drawing.Color.Red; + this.linkLabel1.Location = new System.Drawing.Point(99, 85); + this.linkLabel1.Name = "linkLabel1"; + this.linkLabel1.Size = new System.Drawing.Size(56, 17); + this.linkLabel1.TabIndex = 53; + this.linkLabel1.TabStop = true; + this.linkLabel1.Text = "退出登录"; + this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(linkLabel1_LinkClicked); + this.button2.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + this.button2.Location = new System.Drawing.Point(929, 318); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(96, 23); + this.button2.TabIndex = 54; + this.button2.Text = "清空列表"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(button2_Click); + this.btnRelogin.Location = new System.Drawing.Point(417, 13); + this.btnRelogin.Name = "btnRelogin"; + this.btnRelogin.Size = new System.Drawing.Size(80, 24); + this.btnRelogin.TabIndex = 55; + this.btnRelogin.Text = "重新登录"; + this.btnRelogin.UseVisualStyleBackColor = true; + this.btnRelogin.Click += new System.EventHandler(btnRelogin_Click); + this.labStore.AutoSize = true; + this.labStore.Font = new System.Drawing.Font("宋体", 10.5f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.labStore.ForeColor = System.Drawing.Color.Blue; + this.labStore.Location = new System.Drawing.Point(543, 14); + this.labStore.Name = "labStore"; + this.labStore.Size = new System.Drawing.Size(0, 14); + this.labStore.TabIndex = 56; + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(509, 15); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(29, 12); + this.label12.TabIndex = 57; + this.label12.Text = "路线"; + this.labGiftBalanceTip.AutoSize = true; + this.labGiftBalanceTip.ForeColor = System.Drawing.Color.Brown; + this.labGiftBalanceTip.Location = new System.Drawing.Point(125, 44); + this.labGiftBalanceTip.Name = "labGiftBalanceTip"; + this.labGiftBalanceTip.Size = new System.Drawing.Size(101, 12); + this.labGiftBalanceTip.TabIndex = 59; + this.labGiftBalanceTip.Text = "优质路线:asfaga"; + this.tabLists.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + this.tabLists.Controls.Add(this.tabPage2); + this.tabLists.Controls.Add(this.tabAutoCardList); + this.tabLists.Controls.Add(this.tabAutoIdList); + this.tabLists.Location = new System.Drawing.Point(10, 347); + this.tabLists.Name = "tabLists"; + this.tabLists.SelectedIndex = 0; + this.tabLists.Size = new System.Drawing.Size(1022, 434); + this.tabLists.TabIndex = 60; + this.tabPage2.Controls.Add(this.listGiftcardBalance); + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(1014, 408); + this.tabPage2.TabIndex = 0; + this.tabPage2.Text = "礼品卡余额查询列表"; + this.tabPage2.UseVisualStyleBackColor = true; + this.tabAutoCardList.Controls.Add(this.listAotoQueryList); + this.tabAutoCardList.Location = new System.Drawing.Point(4, 22); + this.tabAutoCardList.Name = "tabAutoCardList"; + this.tabAutoCardList.Padding = new System.Windows.Forms.Padding(3); + this.tabAutoCardList.Size = new System.Drawing.Size(1014, 408); + this.tabAutoCardList.TabIndex = 1; + this.tabAutoCardList.Text = "定时查询的礼品卡列表"; + this.tabAutoCardList.UseVisualStyleBackColor = true; + this.listAotoQueryList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[7] { this.columnHeader3, this.columnHeader4, this.columnHeader11, this.columnHeader5, this.columnHeader7, this.columnHeader10, this.columnHeader22 }); + this.listAotoQueryList.ContextMenuStrip = this.MenuArea; + this.listAotoQueryList.Dock = System.Windows.Forms.DockStyle.Fill; + this.listAotoQueryList.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.listAotoQueryList.FullRowSelect = true; + this.listAotoQueryList.HideSelection = false; + this.listAotoQueryList.Location = new System.Drawing.Point(3, 3); + this.listAotoQueryList.Name = "listAotoQueryList"; + this.listAotoQueryList.Size = new System.Drawing.Size(1008, 402); + this.listAotoQueryList.TabIndex = 36; + this.listAotoQueryList.UseCompatibleStateImageBehavior = false; + this.listAotoQueryList.View = System.Windows.Forms.View.Details; + this.columnHeader3.Text = "序号"; + this.columnHeader4.Text = "礼品卡代码"; + this.columnHeader4.Width = 150; + this.columnHeader11.Text = "已查询次数"; + this.columnHeader11.Width = 80; + this.columnHeader5.Text = "余额"; + this.columnHeader5.Width = 80; + this.columnHeader7.Text = "信息"; + this.columnHeader7.Width = 250; + this.columnHeader10.Text = "更新时间"; + this.columnHeader10.Width = 100; + this.columnHeader22.Text = "兑换记录"; + this.columnHeader22.Width = 180; + this.tabAutoIdList.Controls.Add(this.listAotoIdList); + this.tabAutoIdList.Location = new System.Drawing.Point(4, 22); + this.tabAutoIdList.Name = "tabAutoIdList"; + this.tabAutoIdList.Size = new System.Drawing.Size(1014, 408); + this.tabAutoIdList.TabIndex = 2; + this.tabAutoIdList.Text = "自动加卡的ID列表"; + this.tabAutoIdList.UseVisualStyleBackColor = true; + this.listAotoIdList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[8] { this.columnHeader13, this.columnHeader15, this.columnHeader16, this.columnHeader17, this.columnHeader18, this.columnHeader6, this.columnHeader20, this.columnHeader21 }); + this.listAotoIdList.ContextMenuStrip = this.contextMenuStrip2; + this.listAotoIdList.Dock = System.Windows.Forms.DockStyle.Fill; + this.listAotoIdList.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.listAotoIdList.FullRowSelect = true; + this.listAotoIdList.HideSelection = false; + this.listAotoIdList.Location = new System.Drawing.Point(0, 0); + this.listAotoIdList.Name = "listAotoIdList"; + this.listAotoIdList.Size = new System.Drawing.Size(1014, 408); + this.listAotoIdList.TabIndex = 37; + this.listAotoIdList.UseCompatibleStateImageBehavior = false; + this.listAotoIdList.View = System.Windows.Forms.View.Details; + this.columnHeader13.Text = "序号"; + this.columnHeader15.Text = "账号"; + this.columnHeader15.Width = 200; + this.columnHeader16.Text = "密码"; + this.columnHeader16.Width = 100; + this.columnHeader17.Text = "需加载金额"; + this.columnHeader17.Width = 80; + this.columnHeader18.Text = "已加载金额"; + this.columnHeader18.Width = 80; + this.columnHeader6.Text = "状态"; + this.columnHeader6.Width = 80; + this.columnHeader20.Text = "时间"; + this.columnHeader20.Width = 100; + this.columnHeader21.Text = "信息"; + this.columnHeader21.Width = 210; + this.contextMenuStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[3] { this.删除ToolStripMenuItem, this.查询余额ToolStripMenuItem, this.复制信息ToolStripMenuItem }); + this.contextMenuStrip2.Name = "contextMenuStrip2"; + this.contextMenuStrip2.Size = new System.Drawing.Size(149, 70); + this.删除ToolStripMenuItem.Name = "删除ToolStripMenuItem"; + this.删除ToolStripMenuItem.Size = new System.Drawing.Size(148, 22); + this.删除ToolStripMenuItem.Text = "删除"; + this.删除ToolStripMenuItem.Click += new System.EventHandler(删除ToolStripMenuItem_Click); + this.查询余额ToolStripMenuItem.Name = "查询余额ToolStripMenuItem"; + this.查询余额ToolStripMenuItem.Size = new System.Drawing.Size(148, 22); + this.查询余额ToolStripMenuItem.Text = "查询账号余额"; + this.查询余额ToolStripMenuItem.Click += new System.EventHandler(查询余额ToolStripMenuItem_Click); + this.复制信息ToolStripMenuItem.Name = "复制信息ToolStripMenuItem"; + this.复制信息ToolStripMenuItem.Size = new System.Drawing.Size(148, 22); + this.复制信息ToolStripMenuItem.Text = "复制信息"; + this.复制信息ToolStripMenuItem.Click += new System.EventHandler(复制信息ToolStripMenuItem_Click); + this.ckMultiple.AutoSize = true; + this.ckMultiple.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.ckMultiple.ForeColor = System.Drawing.SystemColors.MenuHighlight; + this.ckMultiple.Location = new System.Drawing.Point(17, 315); + this.ckMultiple.Name = "ckMultiple"; + this.ckMultiple.Size = new System.Drawing.Size(133, 21); + this.ckMultiple.TabIndex = 68; + this.ckMultiple.Text = "启用多选国家 |-->"; + this.toolTip1.SetToolTip(this.ckMultiple, "勾选 启用后,单张卡将在右侧勾选的商店中同时查询,同时查两个及以上国家扣 {0} 点"); + this.ckMultiple.UseVisualStyleBackColor = true; + this.ckMultiple.CheckedChanged += new System.EventHandler(ckMultiple_CheckedChanged); + this.ckAutoRecog.AutoSize = true; + this.ckAutoRecog.Font = new System.Drawing.Font("微软雅黑", 10.5f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.ckAutoRecog.ForeColor = System.Drawing.Color.DarkRed; + this.ckAutoRecog.Location = new System.Drawing.Point(613, 113); + this.ckAutoRecog.Name = "ckAutoRecog"; + this.ckAutoRecog.Size = new System.Drawing.Size(224, 24); + this.ckAutoRecog.TabIndex = 70; + this.ckAutoRecog.Text = "自动识别国家并测试美区僵尸卡"; + this.toolTip1.SetToolTip(this.ckAutoRecog, "自动识别国家并测试美区僵尸卡"); + this.ckAutoRecog.UseVisualStyleBackColor = true; + this.ckAutoRecog.CheckedChanged += new System.EventHandler(ckAutoRecog_CheckedChanged); + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(17, 294); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(503, 12); + this.label14.TabIndex = 61; + this.label14.Tag = "该功能只能查有效的卡,单张卡可同时查询多个国家商店, 鼠标右键快捷国家 ,可以 移除该快捷国家。"; + this.label14.Text = "定时查询时:第一次查扣10点,第二次以后没查到余额扣2点,查到扣20点,加载到ID扣:50点"; + this.labLoginCount.AutoSize = true; + this.labLoginCount.Location = new System.Drawing.Point(420, 42); + this.labLoginCount.Name = "labLoginCount"; + this.labLoginCount.Size = new System.Drawing.Size(11, 12); + this.labLoginCount.TabIndex = 63; + this.labLoginCount.Text = "0"; + this.checkBox1.AutoSize = true; + this.checkBox1.ContextMenuStrip = this.contextMenuStrip1; + this.checkBox1.Font = new System.Drawing.Font("微软雅黑", 10.5f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.checkBox1.ForeColor = System.Drawing.Color.Green; + this.checkBox1.Location = new System.Drawing.Point(161, 313); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.Size = new System.Drawing.Size(108, 24); + this.checkBox1.TabIndex = 64; + this.checkBox1.Text = "US-美国--12"; + this.checkBox1.UseVisualStyleBackColor = true; + this.checkBox1.Visible = false; + this.btnAddShortcut.Font = new System.Drawing.Font("宋体", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnAddShortcut.ForeColor = System.Drawing.SystemColors.MenuHighlight; + this.btnAddShortcut.Location = new System.Drawing.Point(701, 64); + this.btnAddShortcut.Name = "btnAddShortcut"; + this.btnAddShortcut.Size = new System.Drawing.Size(132, 23); + this.btnAddShortcut.TabIndex = 69; + this.btnAddShortcut.Text = "添加快捷查询国家"; + this.btnAddShortcut.UseVisualStyleBackColor = true; + this.btnAddShortcut.Click += new System.EventHandler(btnAddShortcut_Click); + this.checkBox2.AutoSize = true; + this.checkBox2.Enabled = false; + this.checkBox2.Font = new System.Drawing.Font("微软雅黑", 10.5f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.checkBox2.ForeColor = System.Drawing.Color.Brown; + this.checkBox2.Location = new System.Drawing.Point(650, 313); + this.checkBox2.Name = "checkBox2"; + this.checkBox2.Size = new System.Drawing.Size(142, 24); + this.checkBox2.TabIndex = 67; + this.checkBox2.Text = "US-德国-初始化中"; + this.checkBox2.UseVisualStyleBackColor = true; + this.checkBox2.Visible = false; + this.contextMenuStrip3.Items.AddRange(new System.Windows.Forms.ToolStripItem[1] { this.delFastContel }); + this.contextMenuStrip3.Name = "contextMenuStrip3"; + this.contextMenuStrip3.Size = new System.Drawing.Size(161, 26); + this.delFastContel.Name = "delFastContel"; + this.delFastContel.Size = new System.Drawing.Size(160, 22); + this.delFastContel.Text = "移除该快捷国家"; + this.delFastContel.Click += new System.EventHandler(delFastContel_Click); + base.AutoScaleDimensions = new System.Drawing.SizeF(6f, 12f); + base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + base.ClientSize = new System.Drawing.Size(1038, 793); + base.Controls.Add(this.ckAutoRecog); + base.Controls.Add(this.btnAddShortcut); + base.Controls.Add(this.ckMultiple); + base.Controls.Add(this.checkBox2); + base.Controls.Add(this.checkBox1); + base.Controls.Add(this.labLoginCount); + base.Controls.Add(this.label14); + base.Controls.Add(this.tabLists); + base.Controls.Add(this.labGiftBalanceTip); + base.Controls.Add(this.label12); + base.Controls.Add(this.labStore); + base.Controls.Add(this.btnRelogin); + base.Controls.Add(this.button2); + base.Controls.Add(this.panUserInfo); + base.Controls.Add(this.tabControl1); + base.Controls.Add(this.ckAutoTimeCheck); + base.Controls.Add(this.panel1); + base.Controls.Add(this.labNowGiftCardCountry); + base.Controls.Add(this.label2); + base.Controls.Add(this.label1); + base.Controls.Add(this.btnChange); + base.Controls.Add(this.comCountries); + base.Controls.Add(this.labError); + base.Controls.Add(this.label45); + base.Controls.Add(this.txtGiftcardLoadAccount); + base.Controls.Add(this.ckGiftcardBalanceVpn); + base.Controls.Add(this.label5); + base.Controls.Add(this.labRemovePayDianShu); + base.Controls.Add(this.label31); + base.Controls.Add(this.groupBox5); + base.MaximizeBox = false; + base.Name = "FormGiftcardBalance"; + base.ShowIcon = false; + base.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = " 礼品卡查余额"; + base.FormClosing += new System.Windows.Forms.FormClosingEventHandler(FormGiftcardBalance_FormClosing); + base.Load += new System.EventHandler(FormGiftcardBalance_Load); + this.groupBox5.ResumeLayout(false); + this.contextMenuStrip1.ResumeLayout(false); + this.MenuArea.ResumeLayout(false); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.tabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.panUserInfo.ResumeLayout(false); + this.panUserInfo.PerformLayout(); + this.tabLists.ResumeLayout(false); + this.tabPage2.ResumeLayout(false); + this.tabAutoCardList.ResumeLayout(false); + this.tabAutoIdList.ResumeLayout(false); + this.contextMenuStrip2.ResumeLayout(false); + this.contextMenuStrip3.ResumeLayout(false); + base.ResumeLayout(false); + base.PerformLayout(); + } + } +} diff --git a/AppleBatch_June/FormGiftcardInfo.cs b/AppleBatch_June/FormGiftcardInfo.cs new file mode 100644 index 0000000..2f45858 --- /dev/null +++ b/AppleBatch_June/FormGiftcardInfo.cs @@ -0,0 +1,1272 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Linq; +using System.Net; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using System.Windows.Forms; +using AppleBatch_June.Model; +using AppleBatch_June.Utils; +using DotNet.Utilities; +using Microsoft.VisualBasic; + +namespace AppleBatch_June +{ + public class FormGiftcardInfo : BaseForm + { + private Action appleAction; + + private AppleItunesLogin loginInfo; + + private string selectDsid = ""; + + private string selectAccount = ""; + + private IContainer components; + + private TabControl tabControl1; + + private TabPage tabPage1; + + private RichTextBox txtGiftcard; + + private Label labError; + + private Label label45; + + private TextBox txtGiftcardInfoLoadAccount; + + private ListView listGiftcardInfo; + + private ColumnHeader columnHeader8; + + private ColumnHeader columnHeader9; + + private ColumnHeader columnHeader12; + + private ColumnHeader columnHeader1; + + private ColumnHeader columnHeader14; + + private ColumnHeader columnHeader2; + + private CheckBox ckGiftcardInfoVpn; + + private Label labRemovePayDianShu; + + private Label label31; + + private GroupBox groupBox5; + + private Button btnExprtGiftcardInfo; + + private Button btnStopGiftcardInfo; + + private Button btnGiftcardInfoLog; + + private Button btnStartGiftcardInfo; + + private Label label5; + + private ColumnHeader columnHeader5; + + private ColumnHeader columnHeader3; + + private ColumnHeader columnHeader4; + + private ColumnHeader columnHeader6; + + private Label labMsg; + + private Button button1; + + private TextBox txtDsid; + + private Label label1; + + private Panel panel1; + + private Label label2; + + private CheckBox ckDuplicate; + + private Label label3; + + private Button btnEmptyLogList; + + private ContextMenuStrip contextMenuStrip1; + + private ToolStripMenuItem 删除ToolStripMenuItem; + + private ToolStripMenuItem 重新执行ToolStripMenuItem; + + private ToolStripMenuItem 复制ToolStripMenuItem; + + private ToolStripMenuItem 复制礼品卡代码ToolStripMenuItem; + + private ContextMenuStrip contextMenuStrip2; + + private ToolStripMenuItem 粘贴ToolStripMenuItem1; + + private CheckBox ckMerchModel; + + private Label label4; + + private Button btnGiftcardBalance; + + public FromMain mainFrom { get; set; } + + public FormGiftcardInfo() + : base("查询卡片信息", null) + { + InitializeComponent(); + } + + private void FormGiftcardInfo_Load(object sender, EventArgs e) + { + appleAction = apple_info_Action; + panel1.Visible = false; + labRemovePayDianShu.Text = AppSysConfig.getTypeById(25).consNum.ToString(); + label4.Text = AppSysConfig.getConfig("CardInfoError").Replace("\\n", "\n"); + txtGiftcardInfoLoadAccount.Text = ConfigUtlis.getConfigValue("txtGiftcardInfoLoadAccount"); + ckGiftcardInfoVpn.Checked = ((ConfigUtlis.getConfigValue("ckGiftcardInfoVpn") == "True") ? true : false); + ckMerchModel.Checked = ((ConfigUtlis.getConfigValue("ckMerchModel") == "True") ? true : false); + if (string.IsNullOrEmpty(txtGiftcardInfoLoadAccount.Text)) + { + txtGiftcardInfoLoadAccount.Text = "账号输入格式:xxxx@xxx.com----密码"; + } + else + { + List list = AppleUtlis.accountInput(txtGiftcardInfoLoadAccount.Text.Trim()); + if (list.Count == 1) + { + button1.Enabled = false; + Task tak = SwitchingLoginid(logType: AppSysConfig.getConfig("logTypeLoad"), acount: list[0], startVpn: ckGiftcardInfoVpn.Checked, duplicate: ckDuplicate.Checked, typeAct: 0); + Task.Run(delegate + { + try + { + tak.Wait(); + } + catch (Exception) + { + } + UpdataUi(delegate + { + button1.Enabled = true; + }); + }); + } + } + InitLv(listGiftcardInfo); + } + + public Task SwitchingLoginid(AppleAcount acount, bool startVpn, bool duplicate, int typeAct, string logType = "other") + { + return Task.Run(delegate + { + try + { + if (!base.taskState.isRun) + { + base.taskState.isRun = true; + } + insertLog(acount.appleId + ",正在登录"); + UpUiact(delegate + { + txtDsid.Text = ""; + panel1.Visible = false; + }); + ItunesUtlis itunesUtlis = new ItunesUtlis(base.taskState, acount.appleId, delegate(string appleKey, DisplyType type, string reust) + { + insertLog(appleKey + "," + reust); + }, startVpn); + string msgReust = ""; + AppleItunesLogin itunesLogin = null; + if (logType == "load") + { + AppleItunesLogin loginIdUserInfo = iTunesAccountLoginCache.getLoginIdUserInfo(acount.appleId, acount.applePwd); + if (loginIdUserInfo == null) + { + itunesLogin = itunesUtlis.remoteAppleLogin(acount.appleId, acount.applePwd + (acount.isDoubleModl ? acount.DoublePwd : ""), ref msgReust, 1); + if (itunesLogin != null) + { + if (acount.isDoubleModl) + { + itunesLogin.pwd = acount.applePwd; + } + iTunesAccountLoginCache.addReddemUserInfo(acount.appleId, itunesLogin); + } + } + else + { + itunesLogin = loginIdUserInfo; + } + } + else + { + itunesLogin = getItunesLogin(startVpn, acount, 26, itunesUtlis, ref msgReust, 1); + } + if (itunesLogin != null) + { + insertLog(acount.appleId + ",登录成功 \n\n国家:" + itunesLogin.Area + " \t "); + loginInfo = itunesLogin; + UpUiact(delegate + { + txtDsid.Text = itunesLogin.dsis; + panel1.Visible = true; + }); + if (typeAct == 1) + { + ApiApplyAct(26, "查询dsid"); + } + } + else if (duplicate) + { + object obj = Invoke((Func)(() => Interaction.InputBox("请输入ID双重验证码", "请输入ID双重验证码"))); + if (obj.ToString().Length == 0) + { + insertLog(acount.appleId + ",登录失败:\n" + msgReust); + return; + } + acount.applePwd = acount.applePwd; + acount.isDoubleModl = true; + acount.DoublePwd = string.Concat(obj); + itunesLogin = getItunesLogin(startVpn, acount, 25, itunesUtlis, ref msgReust, 1); + if (itunesLogin != null) + { + if (AppSysConfig.DoubleGuid.ContainsKey(acount.appleId)) + { + AppSysConfig.DoubleGuid[acount.appleId] = itunesLogin.Guid; + } + else + { + AppSysConfig.DoubleGuid.TryAdd(acount.appleId, itunesLogin.Guid); + } + loginInfo = itunesLogin; + insertLog(acount.appleId + ",登录成功 \n\n国家:" + itunesLogin.Area + " \t "); + UpUiact(delegate + { + txtDsid.Text = itunesLogin.dsis; + panel1.Visible = true; + }); + if (typeAct == 1) + { + ApiApplyAct(26, "查询dsid"); + } + } + else + { + insertLog(acount.appleId + ",登录失败:\n" + msgReust); + } + } + else + { + insertLog(acount.appleId + ",登录失败:\n" + msgReust); + } + if (!base.taskState.TaskIsRun) + { + base.taskState.isRun = false; + } + } + catch (Exception ex) + { + insertLog(acount.appleId + ",登录失败:\n" + ex.Message); + } + }); + } + + public override void insertLog(string txt) + { + if (!base.IsHandleCreated || base.IsDisposed) + { + return; + } + try + { + BeginInvoke((Action)delegate + { + labMsg.Text = txt; + }); + } + catch (Exception) + { + } + } + + public void UpUiact(Action act) + { + if (base.IsHandleCreated && !base.IsDisposed) + { + try + { + BeginInvoke(act); + } + catch (Exception) + { + } + } + } + + private void btnStartGiftcardInfo_Click(object sender, EventArgs e) + { + if (txtGiftcardInfoLoadAccount.Text != "账号输入格式:xxxx@xxx.com----密码") + { + List list = AppleUtlis.accountInput(txtGiftcardInfoLoadAccount.Text.Trim()); + if (list.Count == 1) + { + ConfigUtlis.saveConfigKey("ckGiftcardInfoVpn", ckGiftcardInfoVpn.Checked.ToString()); + ConfigUtlis.saveConfigKey("txtGiftcardInfoLoadAccount", txtGiftcardInfoLoadAccount.Text.Trim()); + List list2 = new List(); + string[] array = txtGiftcard.Text.Split('\n'); + foreach (string text in array) + { + if (!string.IsNullOrEmpty(text)) + { + list2.Add(new AppleAcount + { + reddemCode = text.Trim() + }); + } + } + if (!base.taskState.TaskIsRun) + { + btnStartGiftcardInfo.Enabled = false; + StartGiftcardInfo(list2, ckGiftcardInfoVpn.Checked, ckDuplicate.Checked, list[0].appleId, list[0].applePwd); + } + else + { + MessageBox.Show("请点停止或等待任务结束..."); + } + } + else + { + MessageBox.Show("账号输入格式不正确"); + txtGiftcardInfoLoadAccount.Focus(); + } + } + else + { + MessageBox.Show("请输入账号"); + txtGiftcardInfoLoadAccount.Focus(); + } + } + + public async void StartGiftcardInfo(List appleIds, bool startVpn, bool ckDuplicate, string LoginAppleId, string LoginApwd, bool isAgain = false) + { + int TaskSize = Tools.getTaskSize(startVpn, appleIds.Count); + base.taskState.isRun = true; + base.taskState.TaskIsRun = true; + AppleExecuteTask.TaskRunAppleIdCount = 0L; + AppleExecuteTask.TaskRunModels.Clear(); + ApiNetReq.startNowFun = 25; + if (loginInfo == null) + { + await SwitchingLoginid(new AppleAcount + { + appleId = LoginAppleId, + applePwd = LoginApwd + }, startVpn, ckDuplicate, 0); + } + if (loginInfo != null) + { + selectDsid = loginInfo.dsis; + selectAccount = loginInfo.account; + if (AppSysConfig.getConfig("CardInfoSingleThread") == "1") + { + TaskSize = 1; + } + Task[] array = new Task[TaskSize]; + for (int i = 0; i < TaskSize; i++) + { + array[i] = Task.Run(delegate + { + string guid = Guid.NewGuid().ToString("n"); + TaskRunModel taskRunModel = new TaskRunModel + { + guid = guid, + isRuning = false + }; + AppleExecuteTask.TaskRunModels.Add(taskRunModel); + while (base.taskState.isRun) + { + try + { + AppleAcount appleAcount = null; + lock (appleIds) + { + appleAcount = appleIds.Where((AppleAcount c) => !c.isAct).FirstOrDefault(); + if (appleAcount == null) + { + break; + } + appleAcount.isAct = true; + } + if (startRuning(taskRunModel, delegate(string appleid, DisplyType reustType, string dasReust2) + { + insertLog(dasReust2); + }, appleAcount.appleId)) + { + if (!isAgain) + { + appleAction?.Invoke(appleAcount.reddemCode, DisplyType.init, "正在处理"); + } + else + { + appleAction?.Invoke(appleAcount.reddemCode, DisplyType.chongzhi, "正在处理"); + } + ItunesUtlis itunesUtlis = new ItunesUtlis(base.taskState, appleAcount.reddemCode, appleAction, startVpn); + appleAcount.reddemCode = appleAcount.reddemCode.Replace(" ", "").Replace("-", "").Trim(); + int num = 25; + HttpResult isLogin = APIUtlis.getIsLogin(25); + if (isLogin.StatusCode == HttpStatusCode.OK) + { + _ = isLogin.Html; + object obj = Tools.Todejosn(isLogin.Html); + if (((dynamic)obj)["Code"] == "0000") + { + if (((dynamic)obj)["Data"]["integral"] >= AppSysConfig.getTypeById(num).consNum) + { + bool flag = false; + int num2 = 0; + do + { + flag = false; + appleAcount.appleId = LoginAppleId; + appleAcount.applePwd = LoginApwd; + string msg = ""; + AppleItunesLogin itunesLogin = getItunesLogin(startVpn, appleAcount, num, itunesUtlis, ref msg, 1, itunesUtlis.notyKey, isLogin); + if (itunesLogin == null) + { + appleAction?.Invoke(appleAcount.reddemCode, DisplyType.xinxi, msg); + insertLog(LoginAppleId + ",登录失败:\n" + msg); + loginInfo = null; + UpUiact(delegate + { + txtDsid.Text = ""; + panel1.Visible = false; + }); + } + else + { + HttpResult giftCardInfo = getGiftCardInfo(appleAcount.reddemCode, itunesLogin, itunesUtlis); + _ = giftCardInfo.Html; + if (giftCardInfo.StatusCode == HttpStatusCode.OK) + { + object obj2 = Tools.Todejosn(giftCardInfo.Html); + if ((dynamic)obj2 != null) + { + int num3 = ((dynamic)obj2)["status"]; + ApiApplyAct(num, "卡片信息查询"); + if (num3 == 0 && giftCardInfo.Html.Contains("codeInfo")) + { + appleAction?.Invoke(appleAcount.reddemCode, DisplyType.balance, giftCardInfo.Html); + break; + } + if (((dynamic)obj2).ContainsKey("userPresentableErrorMessage")) + { + msg = ((dynamic)obj2)["userPresentableErrorMessage"]; + if (string.IsNullOrEmpty(msg)) + { + msg = new Regex("\"message\":\"([\\s\\S]*?)\"").Match(((dynamic)obj2).Html).Groups[1].Value; + } + } + if (msg.Contains("安全原因")) + { + iTunesAccountLoginCache.removeReddemUserInfo(itunesLogin.account, itunesLogin.StdndbyKeyGuid); + iCloudAccountLoginCache.removeUserInfoByAppleId(itunesLogin.account, itunesLogin.pwd); + } + string text = ""; + if (!(((dynamic)obj2).ContainsKey("errorMessageKey") ? true : false)) + { + msg = AppleUtlis.Html2Text(msg, isEmorp: false); + appleAction?.Invoke(appleAcount.reddemCode, DisplyType.xinxi, msg); + break; + } + text = ((dynamic)obj2)["errorMessageKey"]; + if (!text.ToLower().Contains("sign") && !text.ToLower().Contains("login")) + { + msg = AppleUtlis.Html2Text(msg, isEmorp: false); + appleAction?.Invoke(appleAcount.reddemCode, DisplyType.xinxi, msg); + break; + } + iTunesAccountLoginCache.removeReddemUserInfo(itunesLogin.account, itunesLogin.StdndbyKeyGuid); + flag = true; + } + else + { + appleAction?.Invoke(appleAcount.reddemCode, DisplyType.xinxi, "请求错误,请重新查询"); + flag = true; + } + } + else + { + appleAction?.Invoke(appleAcount.reddemCode, DisplyType.xinxi, "请求错误,请重新查询"); + flag = true; + } + num2++; + } + } + while (flag && base.taskState.isRun && num2 < 1); + } + else + { + appleAction?.Invoke(appleAcount.reddemCode, DisplyType.xinxi, "点数不足,请联系客服充值"); + } + } + else + { + appleAction?.Invoke(appleAcount.reddemCode, DisplyType.xinxi, ((dynamic)obj)["Message"]); + } + } + else + { + appleAction?.Invoke(appleAcount.reddemCode, DisplyType.xinxi, "网络请求失败"); + } + goto IL_0dd2; + } + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + insertLog("请求失败:" + ex.Message); + goto IL_0dd2; + } + continue; + IL_0dd2: + endRuning(taskRunModel); + } + }); + } + await Task.WhenAll(array); + } + AppleExecuteTask.TaskRunModels.Clear(); + base.taskState.isRun = false; + base.taskState.TaskIsRun = false; + btnStartGiftcardInfo.Enabled = true; + } + + private void apple_info_Action(string creadNo, DisplyType type, string reust) + { + if (!base.IsHandleCreated || base.IsDisposed) + { + return; + } + Invoke((Action)delegate + { + try + { + if (type == DisplyType.init) + { + listViewItemInit(creadNo, reust); + } + if (type == DisplyType.balance) + { + Dictionary dictionary = new Dictionary + { + { "type", "giftcardInfo" }, + { + "addTime", + Tools.GenerateTimeStamp().ToString() + }, + { "value1", creadNo }, + { "value2", selectAccount } + }; + object obj = Tools.Todejosn(reust); + if ((int)Tools.GetDynamic((dynamic)obj, "status", -1) == 0) + { + Dictionary dataSource = ((dynamic)obj)["codeInfo"]; + string code = Tools.GetDynamic(dataSource, "code", ""); + string dynamic = Tools.GetDynamic(dataSource, "productTypeDesc", ""); + int dynamic2 = Tools.GetDynamic(dataSource, "status", 0); + decimal dynamic3 = Tools.GetDynamic(dataSource, "amount", 0m); + long dynamic4 = Tools.GetDynamic(dataSource, "recipientDsId", 0L); + if (dynamic4 != 0L) + { + } + string dynamic5 = Tools.GetDynamic(dataSource, "salesOrg", ""); + string[] array = dynamic.Split('-'); + string text = array[array.Length - 1].Trim(); + string text2 = AppleUtlis.GetAreaByCode(text.Trim(), addArer: true); + if (text2 == text) + { + dynamic5 = AppleUtlis.GetNameBydisplayName(dynamic5); + text2 = dynamic5; + } + IEnumerable enumerable = from ListViewItem c in listGiftcardInfo.Items + where c.SubItems[1].Text.ToUpper() == code.ToUpper() + select c; + Color foreColor = Color.Black; + string[] array2 = AppSysConfig.getConfig("CardInfoStatus").Split('|'); + if (ckMerchModel.Checked) + { + array2 = AppSysConfig.getConfig("CardInfoMerchModelStatus").Split('|'); + } + string value = "未知(" + dynamic2 + ")"; + string[] array3 = array2; + for (int i = 0; i < array3.Length; i++) + { + string[] array4 = array3[i].Split(','); + if (array4[0] == dynamic2.ToString()) + { + foreColor = Color.FromName(array4[2]); + value = array4[1]; + break; + } + } + Font font = new Font(Font, FontStyle.Bold); + foreach (ListViewItem item in enumerable) + { + item.SubItems[2].Text = dynamic3.ToString(); + item.SubItems[3].Text = text2; + item.SubItems[4].Text = dynamic; + item.SubItems[5].Text = selectDsid; + if (dynamic4.ToString() == selectDsid) + { + item.SubItems[5].Font = font; + item.SubItems[6].Font = font; + item.SubItems[5].ForeColor = Color.DarkCyan; + item.SubItems[6].ForeColor = Color.DarkCyan; + } + item.SubItems[6].Text = dynamic4.ToString(); + item.SubItems[7].Text = value; + item.SubItems[7].Font = font; + item.SubItems[7].ForeColor = foreColor; + item.SubItems[8].Text = "查询完成"; + item.SubItems[9].Text = DateTime.Now.ToString("MM-dd HH:mm"); + } + dictionary.Add("value3", dynamic3.ToString()); + dictionary.Add("value4", text2); + dictionary.Add("value5", dynamic); + dictionary.Add("value6", selectDsid); + dictionary.Add("value7", dynamic4.ToString()); + dictionary.Add("value8", value); + dictionary.Add("value9", "查询完成"); + } + else + { + string value2 = Tools.GetDynamic((dynamic)obj, "msg", "-"); + foreach (ListViewItem item2 in from ListViewItem c in listGiftcardInfo.Items + where c.SubItems[1].Text.ToUpper() == creadNo.ToUpper() + select c) + { + item2.SubItems[8].Text = value2; + item2.SubItems[9].Text = DateTime.Now.ToString("MM-dd HH:mm"); + } + dictionary.Add("value9", value2); + } + SqliteHelper.ExecuteInsert("itunes_db", dictionary); + } + foreach (ListViewItem item3 in from ListViewItem c in listGiftcardInfo.Items + where c.SubItems[1].Text.ToUpper() == creadNo.ToUpper() + select c) + { + switch (type) + { + case DisplyType.chongzhi: + { + item3.SubItems[2].Text = "-"; + item3.SubItems[3].Text = "-"; + item3.SubItems[4].Text = ""; + item3.SubItems[5].Text = ""; + item3.SubItems[6].Text = ""; + item3.SubItems[7].Text = "-"; + item3.SubItems[7].ForeColor = Color.Black; + Font font2 = new Font(Font, FontStyle.Regular); + item3.Font = font2; + item3.SubItems[8].Text = reust; + item3.SubItems[9].Text = ""; + break; + } + case DisplyType.xinxi: + item3.SubItems[8].Text = reust; + break; + } + } + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + } + }); + } + + private void listViewItemInit(string code, string reust) + { + ListViewItem listViewItem = new ListViewItem((listGiftcardInfo.Items.Count + 1).ToString()); + string text = code.Replace(" ", "").Replace("-", "").Trim(); + listViewItem.SubItems.Add(text.Trim()); + listViewItem.SubItems.Add("-"); + listViewItem.SubItems.Add("-"); + listViewItem.SubItems.Add(""); + listViewItem.SubItems.Add(""); + listViewItem.SubItems.Add(""); + listViewItem.SubItems.Add("-"); + listViewItem.SubItems.Add(reust); + listViewItem.SubItems.Add(""); + listViewItem.UseItemStyleForSubItems = false; + listGiftcardInfo.Items.Insert(0, listViewItem); + string[] array = txtGiftcard.Text.Split('\n'); + foreach (string text2 in array) + { + if (text2.Trim().StartsWith(code)) + { + txtGiftcard.Text = txtGiftcard.Text.Replace(text2 + "\n", ""); + if (!string.IsNullOrEmpty(text2)) + { + txtGiftcard.Text = txtGiftcard.Text.Replace(text2, ""); + } + } + } + } + + public HttpResult getGiftCardInfo(string code, AppleItunesLogin itunesLogin, ItunesUtlis utlis) + { + string text = "https://p" + itunesLogin.ServerId + "-buy.itunes.apple.com/WebObjects/MZFinance.woa/wa/getCodeInfoSrv?code=" + code.Trim() + "&guid=" + itunesLogin.Guid; + Dictionary dictionary = new Dictionary(); + dictionary.Add("X-Apple-Store-Front", itunesLogin.software); + return utlis.getItunesWebContext(text, text, itunesLogin, dictionary, addToken: true); + } + + public HttpResult getGiftCardInfo(string code, string appleId, string applePwd, string guid, int serverIndex) + { + return APIUtlis.serviceSend(Tools.Toenjson(new Dictionary + { + { "appleId", appleId }, + { "applePwd", applePwd }, + { "guid", guid }, + { "code", code }, + { "serviceIndex", serverIndex }, + { "type", "IGetCodeInfoSrv" } + })); + } + + private void txtLoadAccount_Enter(object sender, EventArgs e) + { + if (txtGiftcardInfoLoadAccount.Text == "账号输入格式:xxxx@xxx.com----密码") + { + txtGiftcardInfoLoadAccount.Text = ""; + } + } + + private void txtLoadAccount_Leave(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(txtGiftcardInfoLoadAccount.Text)) + { + txtGiftcardInfoLoadAccount.Text = "账号输入格式:xxxx@xxx.com----密码"; + } + } + + private void btnStopGiftcardInfo_Click(object sender, EventArgs e) + { + base.taskState.Stop(); + } + + private void button1_Click(object sender, EventArgs e) + { + List list = AppleUtlis.accountInput(txtGiftcardInfoLoadAccount.Text.Trim()); + if (list.Count == 1) + { + SwitchingLoginid(list[0], ckGiftcardInfoVpn.Checked, ckDuplicate.Checked, 1); + } + else + { + MessageBox.Show("请在左侧输入账号和密码"); + } + } + + private void btnEmptyLogList_Click(object sender, EventArgs e) + { + if (MessageBox.Show("确认清空列表数据吗", "提示", MessageBoxButtons.OKCancel) == DialogResult.OK) + { + listGiftcardInfo.Items.Clear(); + } + } + + private void btnExprtGiftcardInfo_Click(object sender, EventArgs e) + { + ExperList(listGiftcardInfo); + } + + private void btnGiftcardInfoLog_Click(object sender, EventArgs e) + { + FromDBDataQuery fromDBDataQuery = new FromDBDataQuery(); + fromDBDataQuery.sqlTitle = new Dictionary + { + { "value1", "卡号|150" }, + { "value2", "查询账号|150" }, + { "value3", "初始金额|80" }, + { "value4", "卡国家|80" }, + { "value5", "卡类型|100" }, + { "value6", "查询的Dsid|90" }, + { "value7", "使用的Dsis|90" }, + { "value8", "卡状态|80" }, + { "value9", "信息|100" } + }; + fromDBDataQuery.type = "giftcardInfo"; + fromDBDataQuery.typeName = "礼品卡信息查询"; + fromDBDataQuery.Show(); + } + + private void 删除ToolStripMenuItem_Click(object sender, EventArgs e) + { + ListView listView = listGiftcardInfo; + foreach (ListViewItem selectedItem in listView.SelectedItems) + { + listView.Items.Remove(selectedItem); + } + } + + private void 重新执行ToolStripMenuItem_Click(object sender, EventArgs e) + { + if (txtGiftcardInfoLoadAccount.Text != "账号输入格式:xxxx@xxx.com----密码") + { + List list = AppleUtlis.accountInput(txtGiftcardInfoLoadAccount.Text.Trim()); + if (list.Count == 1) + { + ConfigUtlis.saveConfigKey("ckGiftcardInfoVpn", ckGiftcardInfoVpn.Checked.ToString()); + ConfigUtlis.saveConfigKey("txtGiftcardInfoLoadAccount", txtGiftcardInfoLoadAccount.Text.Trim()); + List list2 = new List(); + foreach (ListViewItem selectedItem in listGiftcardInfo.SelectedItems) + { + list2.Add(new AppleAcount + { + reddemCode = selectedItem.SubItems[1].Text.Trim() + }); + } + StartGiftcardInfo(list2, ckGiftcardInfoVpn.Checked, ckDuplicate.Checked, list[0].appleId, list[0].applePwd, isAgain: true); + } + else + { + MessageBox.Show("账号输入格式不正确"); + txtGiftcardInfoLoadAccount.Focus(); + } + } + else + { + MessageBox.Show("请输入账号"); + txtGiftcardInfoLoadAccount.Focus(); + } + } + + private void 复制礼品卡代码ToolStripMenuItem_Click(object sender, EventArgs e) + { + ListView listView = listGiftcardInfo; + string text = ""; + foreach (ListViewItem selectedItem in listView.SelectedItems) + { + text += selectedItem.SubItems[1].Text; + text += "\n"; + } + if (text.Length > 0) + { + try + { + Clipboard.SetText(text); + MessageBox.Show("复制成功"); + } + catch (Exception) + { + MessageBox.Show("复制失败"); + } + } + } + + private void 粘贴ToolStripMenuItem1_Click(object sender, EventArgs e) + { + try + { + IDataObject dataObject = Clipboard.GetDataObject(); + if (dataObject.GetDataPresent(DataFormats.Text)) + { + txtGiftcard.Text = (string)dataObject.GetData(DataFormats.Text); + } + } + catch (Exception) + { + MessageBox.Show("粘贴失败"); + } + } + + private void 复制ToolStripMenuItem_Click(object sender, EventArgs e) + { + copy(); + } + + private void ckMerchModel_CheckedChanged(object sender, EventArgs e) + { + ConfigUtlis.saveConfigKey("ckMerchModel", ckMerchModel.Checked.ToString()); + } + + private void btnGiftcardBalance_Click(object sender, EventArgs e) + { + if (mainFrom != null) + { + string formKey = "FormGiftcardBalance"; + mainFrom.ShowFromItem(formKey); + } + } + + protected override void Dispose(bool disposing) + { + if (disposing && components != null) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.txtGiftcard = new System.Windows.Forms.RichTextBox(); + this.contextMenuStrip2 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.粘贴ToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.labError = new System.Windows.Forms.Label(); + this.label45 = new System.Windows.Forms.Label(); + this.txtGiftcardInfoLoadAccount = new System.Windows.Forms.TextBox(); + this.listGiftcardInfo = new System.Windows.Forms.ListView(); + this.columnHeader8 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader9 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader12 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader14 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader1 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader5 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader2 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader3 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader6 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader4 = new System.Windows.Forms.ColumnHeader(); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.删除ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.重新执行ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.复制ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.复制礼品卡代码ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.ckGiftcardInfoVpn = new System.Windows.Forms.CheckBox(); + this.labRemovePayDianShu = new System.Windows.Forms.Label(); + this.label31 = new System.Windows.Forms.Label(); + this.groupBox5 = new System.Windows.Forms.GroupBox(); + this.btnExprtGiftcardInfo = new System.Windows.Forms.Button(); + this.btnStopGiftcardInfo = new System.Windows.Forms.Button(); + this.btnGiftcardInfoLog = new System.Windows.Forms.Button(); + this.btnStartGiftcardInfo = new System.Windows.Forms.Button(); + this.label5 = new System.Windows.Forms.Label(); + this.labMsg = new System.Windows.Forms.Label(); + this.button1 = new System.Windows.Forms.Button(); + this.txtDsid = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.panel1 = new System.Windows.Forms.Panel(); + this.label2 = new System.Windows.Forms.Label(); + this.ckDuplicate = new System.Windows.Forms.CheckBox(); + this.label3 = new System.Windows.Forms.Label(); + this.btnEmptyLogList = new System.Windows.Forms.Button(); + this.ckMerchModel = new System.Windows.Forms.CheckBox(); + this.label4 = new System.Windows.Forms.Label(); + this.btnGiftcardBalance = new System.Windows.Forms.Button(); + this.tabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.contextMenuStrip2.SuspendLayout(); + this.contextMenuStrip1.SuspendLayout(); + this.groupBox5.SuspendLayout(); + this.panel1.SuspendLayout(); + base.SuspendLayout(); + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Location = new System.Drawing.Point(19, 44); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(444, 197); + this.tabControl1.TabIndex = 55; + this.tabPage1.Controls.Add(this.txtGiftcard); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(436, 171); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "礼品卡代码"; + this.tabPage1.UseVisualStyleBackColor = true; + this.txtGiftcard.ContextMenuStrip = this.contextMenuStrip2; + this.txtGiftcard.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtGiftcard.Font = new System.Drawing.Font("宋体", 10.5f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.txtGiftcard.Location = new System.Drawing.Point(3, 3); + this.txtGiftcard.Name = "txtGiftcard"; + this.txtGiftcard.Size = new System.Drawing.Size(430, 165); + this.txtGiftcard.TabIndex = 0; + this.txtGiftcard.Text = ""; + this.contextMenuStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[1] { this.粘贴ToolStripMenuItem1 }); + this.contextMenuStrip2.Name = "contextMenuStrip2"; + this.contextMenuStrip2.Size = new System.Drawing.Size(101, 26); + this.粘贴ToolStripMenuItem1.Name = "粘贴ToolStripMenuItem1"; + this.粘贴ToolStripMenuItem1.Size = new System.Drawing.Size(100, 22); + this.粘贴ToolStripMenuItem1.Text = "粘贴"; + this.粘贴ToolStripMenuItem1.Click += new System.EventHandler(粘贴ToolStripMenuItem1_Click); + this.labError.AutoSize = true; + this.labError.Font = new System.Drawing.Font("宋体", 10.5f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.labError.ForeColor = System.Drawing.Color.Red; + this.labError.Location = new System.Drawing.Point(485, 257); + this.labError.Name = "labError"; + this.labError.Size = new System.Drawing.Size(0, 14); + this.labError.TabIndex = 54; + this.label45.AutoSize = true; + this.label45.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.label45.ForeColor = System.Drawing.Color.Firebrick; + this.label45.Location = new System.Drawing.Point(16, 14); + this.label45.Name = "label45"; + this.label45.Size = new System.Drawing.Size(45, 17); + this.label45.TabIndex = 53; + this.label45.Text = "登录ID"; + this.txtGiftcardInfoLoadAccount.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.txtGiftcardInfoLoadAccount.Location = new System.Drawing.Point(67, 11); + this.txtGiftcardInfoLoadAccount.Name = "txtGiftcardInfoLoadAccount"; + this.txtGiftcardInfoLoadAccount.Size = new System.Drawing.Size(372, 23); + this.txtGiftcardInfoLoadAccount.TabIndex = 52; + this.txtGiftcardInfoLoadAccount.Text = "账号输入格式:xxxx@xxx.com----密码"; + this.txtGiftcardInfoLoadAccount.Enter += new System.EventHandler(txtLoadAccount_Enter); + this.txtGiftcardInfoLoadAccount.Leave += new System.EventHandler(txtLoadAccount_Leave); + this.listGiftcardInfo.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + this.listGiftcardInfo.Columns.AddRange(new System.Windows.Forms.ColumnHeader[10] { this.columnHeader8, this.columnHeader9, this.columnHeader12, this.columnHeader14, this.columnHeader1, this.columnHeader5, this.columnHeader2, this.columnHeader3, this.columnHeader6, this.columnHeader4 }); + this.listGiftcardInfo.ContextMenuStrip = this.contextMenuStrip1; + this.listGiftcardInfo.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.listGiftcardInfo.FullRowSelect = true; + this.listGiftcardInfo.HideSelection = false; + this.listGiftcardInfo.Location = new System.Drawing.Point(12, 286); + this.listGiftcardInfo.Name = "listGiftcardInfo"; + this.listGiftcardInfo.Size = new System.Drawing.Size(1037, 327); + this.listGiftcardInfo.TabIndex = 51; + this.listGiftcardInfo.UseCompatibleStateImageBehavior = false; + this.listGiftcardInfo.View = System.Windows.Forms.View.Details; + this.columnHeader8.Text = "序号"; + this.columnHeader8.Width = 50; + this.columnHeader9.Text = "礼品卡代码"; + this.columnHeader9.Width = 150; + this.columnHeader12.Text = "初始金额"; + this.columnHeader12.Width = 80; + this.columnHeader14.Text = "卡国家"; + this.columnHeader14.Width = 80; + this.columnHeader1.Text = "卡类型"; + this.columnHeader1.Width = 80; + this.columnHeader5.Text = "查询的Dsid"; + this.columnHeader5.Width = 100; + this.columnHeader2.Text = "使用者DsId"; + this.columnHeader2.Width = 100; + this.columnHeader3.Text = "状态"; + this.columnHeader3.Width = 110; + this.columnHeader6.Text = "信息"; + this.columnHeader6.Width = 170; + this.columnHeader4.Text = "查询时间"; + this.columnHeader4.Width = 100; + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[4] { this.删除ToolStripMenuItem, this.重新执行ToolStripMenuItem, this.复制ToolStripMenuItem, this.复制礼品卡代码ToolStripMenuItem }); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(161, 92); + this.删除ToolStripMenuItem.Name = "删除ToolStripMenuItem"; + this.删除ToolStripMenuItem.Size = new System.Drawing.Size(160, 22); + this.删除ToolStripMenuItem.Text = "删除"; + this.删除ToolStripMenuItem.Click += new System.EventHandler(删除ToolStripMenuItem_Click); + this.重新执行ToolStripMenuItem.Name = "重新执行ToolStripMenuItem"; + this.重新执行ToolStripMenuItem.Size = new System.Drawing.Size(160, 22); + this.重新执行ToolStripMenuItem.Text = "重新执行"; + this.重新执行ToolStripMenuItem.Click += new System.EventHandler(重新执行ToolStripMenuItem_Click); + this.复制ToolStripMenuItem.Name = "复制ToolStripMenuItem"; + this.复制ToolStripMenuItem.Size = new System.Drawing.Size(160, 22); + this.复制ToolStripMenuItem.Text = "复制"; + this.复制ToolStripMenuItem.Click += new System.EventHandler(复制ToolStripMenuItem_Click); + this.复制礼品卡代码ToolStripMenuItem.Name = "复制礼品卡代码ToolStripMenuItem"; + this.复制礼品卡代码ToolStripMenuItem.Size = new System.Drawing.Size(160, 22); + this.复制礼品卡代码ToolStripMenuItem.Text = "复制礼品卡代码"; + this.复制礼品卡代码ToolStripMenuItem.Click += new System.EventHandler(复制礼品卡代码ToolStripMenuItem_Click); + this.ckGiftcardInfoVpn.AutoSize = true; + this.ckGiftcardInfoVpn.ForeColor = System.Drawing.Color.Red; + this.ckGiftcardInfoVpn.Location = new System.Drawing.Point(19, 255); + this.ckGiftcardInfoVpn.Name = "ckGiftcardInfoVpn"; + this.ckGiftcardInfoVpn.Size = new System.Drawing.Size(108, 16); + this.ckGiftcardInfoVpn.TabIndex = 50; + this.ckGiftcardInfoVpn.Text = "使用随机IP代理"; + this.ckGiftcardInfoVpn.UseVisualStyleBackColor = true; + this.labRemovePayDianShu.AutoSize = true; + this.labRemovePayDianShu.Font = new System.Drawing.Font("微软雅黑", 10.5f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.labRemovePayDianShu.ForeColor = System.Drawing.Color.Crimson; + this.labRemovePayDianShu.Location = new System.Drawing.Point(293, 252); + this.labRemovePayDianShu.Name = "labRemovePayDianShu"; + this.labRemovePayDianShu.Size = new System.Drawing.Size(18, 19); + this.labRemovePayDianShu.TabIndex = 48; + this.labRemovePayDianShu.Text = "0"; + this.label31.AutoSize = true; + this.label31.Location = new System.Drawing.Point(228, 255); + this.label31.Name = "label31"; + this.label31.Size = new System.Drawing.Size(65, 12); + this.label31.TabIndex = 47; + this.label31.Text = "消耗点数:"; + this.groupBox5.Controls.Add(this.btnExprtGiftcardInfo); + this.groupBox5.Controls.Add(this.btnStopGiftcardInfo); + this.groupBox5.Controls.Add(this.btnGiftcardInfoLog); + this.groupBox5.Controls.Add(this.btnStartGiftcardInfo); + this.groupBox5.Location = new System.Drawing.Point(474, 44); + this.groupBox5.Name = "groupBox5"; + this.groupBox5.Size = new System.Drawing.Size(161, 193); + this.groupBox5.TabIndex = 46; + this.groupBox5.TabStop = false; + this.groupBox5.Text = "操作"; + this.btnExprtGiftcardInfo.Location = new System.Drawing.Point(15, 115); + this.btnExprtGiftcardInfo.Name = "btnExprtGiftcardInfo"; + this.btnExprtGiftcardInfo.Size = new System.Drawing.Size(130, 24); + this.btnExprtGiftcardInfo.TabIndex = 9; + this.btnExprtGiftcardInfo.Text = "导出记录"; + this.btnExprtGiftcardInfo.UseVisualStyleBackColor = true; + this.btnExprtGiftcardInfo.Click += new System.EventHandler(btnExprtGiftcardInfo_Click); + this.btnStopGiftcardInfo.Location = new System.Drawing.Point(15, 72); + this.btnStopGiftcardInfo.Name = "btnStopGiftcardInfo"; + this.btnStopGiftcardInfo.Size = new System.Drawing.Size(130, 24); + this.btnStopGiftcardInfo.TabIndex = 8; + this.btnStopGiftcardInfo.Text = "停止查询"; + this.btnStopGiftcardInfo.UseVisualStyleBackColor = true; + this.btnStopGiftcardInfo.Click += new System.EventHandler(btnStopGiftcardInfo_Click); + this.btnGiftcardInfoLog.Location = new System.Drawing.Point(15, 157); + this.btnGiftcardInfoLog.Name = "btnGiftcardInfoLog"; + this.btnGiftcardInfoLog.Size = new System.Drawing.Size(130, 23); + this.btnGiftcardInfoLog.TabIndex = 7; + this.btnGiftcardInfoLog.Text = "信息查询记录"; + this.btnGiftcardInfoLog.UseVisualStyleBackColor = true; + this.btnGiftcardInfoLog.Click += new System.EventHandler(btnGiftcardInfoLog_Click); + this.btnStartGiftcardInfo.Location = new System.Drawing.Point(15, 15); + this.btnStartGiftcardInfo.Name = "btnStartGiftcardInfo"; + this.btnStartGiftcardInfo.Size = new System.Drawing.Size(130, 46); + this.btnStartGiftcardInfo.TabIndex = 6; + this.btnStartGiftcardInfo.Text = "开始查询"; + this.btnStartGiftcardInfo.UseVisualStyleBackColor = true; + this.btnStartGiftcardInfo.Click += new System.EventHandler(btnStartGiftcardInfo_Click); + this.label5.AutoSize = true; + this.label5.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.label5.Location = new System.Drawing.Point(322, 256); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(612, 17); + this.label5.TabIndex = 49; + this.label5.Text = "通过 使用者的Dsid 和 查询的Dsid 对比,可以知道当前ID是否兑换了此代码,查询的Dsid为当前登录的Id的 dsid"; + this.labMsg.AutoSize = true; + this.labMsg.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.labMsg.Location = new System.Drawing.Point(659, 62); + this.labMsg.Name = "labMsg"; + this.labMsg.Size = new System.Drawing.Size(0, 17); + this.labMsg.TabIndex = 56; + this.button1.Location = new System.Drawing.Point(510, 11); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(130, 23); + this.button1.TabIndex = 57; + this.button1.Text = "查询账号 Dsid"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(button1_Click); + this.txtDsid.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.txtDsid.Location = new System.Drawing.Point(52, 10); + this.txtDsid.Name = "txtDsid"; + this.txtDsid.ReadOnly = true; + this.txtDsid.Size = new System.Drawing.Size(121, 23); + this.txtDsid.TabIndex = 58; + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.label1.Location = new System.Drawing.Point(11, 13); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(41, 17); + this.label1.TabIndex = 59; + this.label1.Text = "Dsid :"; + this.panel1.Controls.Add(this.txtDsid); + this.panel1.Controls.Add(this.label1); + this.panel1.Location = new System.Drawing.Point(764, 84); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(190, 47); + this.panel1.TabIndex = 60; + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(658, 17); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(155, 12); + this.label2.TabIndex = 61; + this.label2.Text = "单独查询 Dsid 扣除5个点数"; + this.ckDuplicate.AutoSize = true; + this.ckDuplicate.Location = new System.Drawing.Point(448, 15); + this.ckDuplicate.Name = "ckDuplicate"; + this.ckDuplicate.Size = new System.Drawing.Size(60, 16); + this.ckDuplicate.TabIndex = 62; + this.ckDuplicate.Text = "有双重"; + this.ckDuplicate.UseVisualStyleBackColor = true; + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.label3.Location = new System.Drawing.Point(649, 215); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(268, 34); + this.label3.TabIndex = 63; + this.label3.Text = "请注意:初始金额不等于卡内余额\r\n如需要查询具体金额,请使用 礼品卡查余额 功能"; + this.btnEmptyLogList.Location = new System.Drawing.Point(944, 254); + this.btnEmptyLogList.Name = "btnEmptyLogList"; + this.btnEmptyLogList.Size = new System.Drawing.Size(97, 23); + this.btnEmptyLogList.TabIndex = 64; + this.btnEmptyLogList.Text = "清空列表"; + this.btnEmptyLogList.UseVisualStyleBackColor = true; + this.btnEmptyLogList.Click += new System.EventHandler(btnEmptyLogList_Click); + this.ckMerchModel.AutoSize = true; + this.ckMerchModel.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.ckMerchModel.ForeColor = System.Drawing.SystemColors.HotTrack; + this.ckMerchModel.Location = new System.Drawing.Point(139, 253); + this.ckMerchModel.Name = "ckMerchModel"; + this.ckMerchModel.Size = new System.Drawing.Size(75, 21); + this.ckMerchModel.TabIndex = 65; + this.ckMerchModel.Text = "卡商模式"; + this.ckMerchModel.UseVisualStyleBackColor = true; + this.ckMerchModel.CheckedChanged += new System.EventHandler(ckMerchModel_CheckedChanged); + this.label4.AutoSize = true; + this.label4.Font = new System.Drawing.Font("微软雅黑", 12f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.label4.ForeColor = System.Drawing.Color.Red; + this.label4.Location = new System.Drawing.Point(643, 142); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(74, 22); + this.label4.TabIndex = 66; + this.label4.Text = "功能无效"; + this.btnGiftcardBalance.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnGiftcardBalance.Location = new System.Drawing.Point(863, 195); + this.btnGiftcardBalance.Name = "btnGiftcardBalance"; + this.btnGiftcardBalance.Size = new System.Drawing.Size(178, 29); + this.btnGiftcardBalance.TabIndex = 67; + this.btnGiftcardBalance.Tag = "13"; + this.btnGiftcardBalance.Text = "礼品卡查余额"; + this.btnGiftcardBalance.UseVisualStyleBackColor = true; + this.btnGiftcardBalance.Click += new System.EventHandler(btnGiftcardBalance_Click); + base.AutoScaleDimensions = new System.Drawing.SizeF(6f, 12f); + base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + base.ClientSize = new System.Drawing.Size(1053, 619); + base.Controls.Add(this.btnGiftcardBalance); + base.Controls.Add(this.label4); + base.Controls.Add(this.ckMerchModel); + base.Controls.Add(this.btnEmptyLogList); + base.Controls.Add(this.label3); + base.Controls.Add(this.ckDuplicate); + base.Controls.Add(this.label2); + base.Controls.Add(this.panel1); + base.Controls.Add(this.button1); + base.Controls.Add(this.labMsg); + base.Controls.Add(this.tabControl1); + base.Controls.Add(this.labError); + base.Controls.Add(this.label45); + base.Controls.Add(this.txtGiftcardInfoLoadAccount); + base.Controls.Add(this.listGiftcardInfo); + base.Controls.Add(this.ckGiftcardInfoVpn); + base.Controls.Add(this.label5); + base.Controls.Add(this.labRemovePayDianShu); + base.Controls.Add(this.label31); + base.Controls.Add(this.groupBox5); + base.MaximizeBox = false; + base.Name = "FormGiftcardInfo"; + base.ShowIcon = false; + base.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "礼品卡信息查询"; + base.Load += new System.EventHandler(FormGiftcardInfo_Load); + this.tabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.contextMenuStrip2.ResumeLayout(false); + this.contextMenuStrip1.ResumeLayout(false); + this.groupBox5.ResumeLayout(false); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + base.ResumeLayout(false); + base.PerformLayout(); + } + } +} diff --git a/AppleBatch_June/FormIntervalRedeem.cs b/AppleBatch_June/FormIntervalRedeem.cs new file mode 100644 index 0000000..e1a9e31 --- /dev/null +++ b/AppleBatch_June/FormIntervalRedeem.cs @@ -0,0 +1,1000 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Linq; +using System.Media; +using System.Runtime.InteropServices; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using System.Windows.Forms; +using AppleBatch_June.ExecuteTasks; +using AppleBatch_June.Model; +using AppleBatch_June.Properties; + +namespace AppleBatch_June +{ + public class FormIntervalRedeem : BaseForm + { + public struct FLASHWINFO + { + public uint cbSize; + + public IntPtr hwnd; + + public uint dwFlags; + + public uint uCount; + + public uint dwTimeout; + } + + public List intervalIdModels = new List(); + + private SoundPlayer sp; + + public bool isStartRun; + + public DateTime expirationTime = DateTime.Now; + + private bool expirationExecuted; + + public const uint FLASHW_TRAY = 2u; + + public const uint FLASHW_TIMERNOFG = 12u; + + public const uint FLASHW_PARAM2 = 4u; + + private IContainer components; + + private ListView listcycleRedeemIdList; + + private ColumnHeader columnHeader1; + + private ColumnHeader columnHeader2; + + private GroupBox groupBox1; + + private ColumnHeader columnHeader10; + + private Button btnStartRedeem; + + private CheckBox ckcycleSingleProcessRedeem; + + private CheckBox ckCycleRemoteReddem; + + private CheckBox ckCycleReddenVpn; + + private ColumnHeader columnHeader11; + + private ColumnHeader columnHeader4; + + private CheckBox checkBox2; + + private ColumnHeader columnHeader5; + + private ColumnHeader columnHeader6; + + private Button btnTestAccount; + + private Label label45; + + private TextBox txtCycleLoadAccount; + + private Label label1; + + private Label label3; + + private TextBox txtSepTime; + + private Label label2; + + private Label label4; + + private Label label7; + + private Button btnReddenInput; + + private Button button1; + + private Button btnStopRemovePay; + + private Button button2; + + private Label labCheckAcountMsg; + + private Label labTestDianshu; + + private Label label47; + + private ColumnHeader columnHeader3; + + private Button btnExecuted; + + private Label label14; + + public FormIntervalRedeem() + { + InitializeComponent(); + } + + private void FormIntervalRedeem_Load(object sender, EventArgs e) + { + sp = new SoundPlayer(Resources.UI_success); + labTestDianshu.Text = AppSysConfig.getTypeById(9).consNum.ToString(); + ckCycleReddenVpn.Checked = ((ConfigUtlis.getConfigValue("ckCycleReddenVpn") == "True") ? true : false); + ckCycleRemoteReddem.Checked = ((ConfigUtlis.getConfigValue("ckCycleRemoteReddem") == "True") ? true : false); + ckcycleSingleProcessRedeem.Checked = ((!(ConfigUtlis.getConfigValue("ckcycleSingleProcessRedeem") == "false")) ? true : false); + txtCycleLoadAccount.Text = ConfigUtlis.getConfigValue("txtCycleLoadAccount"); + if (string.IsNullOrEmpty(txtCycleLoadAccount.Text)) + { + txtCycleLoadAccount.Text = "账号输入格式:xxxx@xxx.com----密码"; + } + label14.Text = AppSysConfig.getConfig("cycleRedeemTip"); + InitLv(listcycleRedeemIdList); + BindMenuStrip(); + } + + public override void ReExecute_Click(object sender, EventArgs e) + { + if (CycleReddemTask.Instance.TaskIsRun) + { + MessageBox.Show("兑换进行中, 请等待."); + return; + } + List list = new List(); + foreach (ListViewItem selectedItem in listcycleRedeemIdList.SelectedItems) + { + list.Add(new AppleAcount + { + reddemCode = selectedItem.SubItems[3].Text, + appleId = selectedItem.SubItems[1].Text, + applePwd = selectedItem.SubItems[2].Text, + overflow = selectedItem.SubItems[4].Text + }); + } + applyRedeem(list); + } + + private void btnInpueIdList_Click(object sender, EventArgs e) + { + FromInputAcount fromInputAcount = new FromInputAcount(); + fromInputAcount.tipMssage = "账号---密码"; + fromInputAcount.isOpenSysVpn = ckCycleReddenVpn.Checked; + if (fromInputAcount.ShowDialog() != DialogResult.OK) + { + return; + } + List list = AppleUtlis.accountInput(fromInputAcount.StrInput); + int num = 0; + string text = ""; + foreach (AppleAcount appleItem in list) + { + if (!string.IsNullOrEmpty(appleItem.appleId) && !string.IsNullOrEmpty(appleItem.applePwd)) + { + if (intervalIdModels.Where((IntervalIdModel c) => c.appleId.Trim() == appleItem.appleId.Trim()).FirstOrDefault() == null) + { + num++; + ListViewItem listViewItem = new ListViewItem(num.ToString()); + listViewItem.SubItems.Add(appleItem.appleId.Trim()); + listViewItem.SubItems.Add(appleItem.applePwd.Trim()); + listViewItem.SubItems.Add("0"); + listViewItem.SubItems.Add("0"); + listViewItem.SubItems.Add(""); + listViewItem.UseItemStyleForSubItems = false; + listcycleRedeemIdList.Items.Add(listViewItem); + intervalIdModels.Add(new IntervalIdModel + { + appleId = appleItem.appleId.Trim(), + applePwd = appleItem.applePwd.Trim(), + intervalCarts = new List(), + state = 0, + msg = "" + }); + } + else + { + text = text + appleItem.appleId.Trim() + "已存在,"; + } + } + } + if (!string.IsNullOrEmpty(text.TrimEnd(','))) + { + MessageBox.Show(text); + } + } + + private void btnInputCartAndStart_Click(object sender, EventArgs e) + { + } + + private void listIntervalRedeemIdList_MouseClick(object sender, MouseEventArgs e) + { + } + + private void button1_Click(object sender, EventArgs e) + { + } + + private void btnTestAccount_Click(object sender, EventArgs e) + { + if (txtCycleLoadAccount.Text != "账号输入格式:xxxx@xxx.com----密码") + { + List listAccount = AppleUtlis.accountInput(txtCycleLoadAccount.Text.Trim()); + if (listAccount.Count == 1) + { + labCheckAcountMsg.Text = listAccount[0].appleId + " 正在检测"; + btnTestAccount.Enabled = false; + AccountCheckTask.Instance.appleAccountCheck(listAccount[0], delegate(string message, AppleItunesLogin loginItunes) + { + labCheckAcountMsg.Text = listAccount[0].appleId + " 检测结果: " + message; + btnTestAccount.Enabled = true; + }, null, ckCycleReddenVpn.Checked); + } + else + { + MessageBox.Show("账号输入格式不正确"); + } + } + else + { + MessageBox.Show("请输入账号"); + } + } + + private void txtCycleLoadAccount_Enter(object sender, EventArgs e) + { + if (txtCycleLoadAccount.Text == "账号输入格式:xxxx@xxx.com----密码") + { + txtCycleLoadAccount.Text = ""; + } + } + + private void txtCycleLoadAccount_Leave(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(txtCycleLoadAccount.Text)) + { + txtCycleLoadAccount.Text = "账号输入格式:xxxx@xxx.com----密码"; + } + } + + private void btnReddenInput_Click(object sender, EventArgs e) + { + List list = AppleUtlis.accountInput(txtCycleLoadAccount.Text.Trim()); + FromInputAcount fromInputAcount = new FromInputAcount(); + fromInputAcount.tipMssage = "请按格式导入卡密"; + if (fromInputAcount.ShowDialog() != DialogResult.OK) + { + return; + } + listcycleRedeemIdList.ListViewItemSorter = new ListViewItemComparer(0, 1); + listcycleRedeemIdList.Sort(); + int num = 0; + if (listcycleRedeemIdList.Items.Count > 0 && int.TryParse(listcycleRedeemIdList.Items[listcycleRedeemIdList.Items.Count - 1].SubItems[0].Text, out var result)) + { + num = result; + } + List list2 = new List(); + string[] array = fromInputAcount.StrInput.Split('\n'); + int num2 = 0; + while (true) + { + if (num2 >= array.Length) + { + return; + } + string item = array[num2]; + if (!string.IsNullOrEmpty(item)) + { + string[] array2 = (from c in item.Split('-') + where !string.IsNullOrEmpty(c) + select c).ToArray(); + string text = ""; + string text2 = ""; + string[] array3; + if (array2.Count() == 1) + { + if (list.Count == 0) + { + break; + } + text = list[0].appleId; + text2 = list[0].applePwd; + if (!string.IsNullOrEmpty(list[0].appleQt1)) + { + _ = list[0].appleQt1 + "," + list[0].appleQt2 + "," + list[0].appleQt3; + } + array3 = new string[1] { array2[0] }; + } + else if (array2.Count() >= 3) + { + string config = AppSysConfig.getConfig("AccountInputRegex"); + string text3 = Regex.Match(item, config).Value.Trim(); + if (!string.IsNullOrEmpty(text3)) + { + text = text3; + array2 = (from c in item.Substring(text.Length).Replace("[-]", "{\0}").Replace("{-}", "{\0}") + .Split('-') + where !string.IsNullOrEmpty(c) + select c.Replace("{\0}", "-")).ToArray(); + text2 = array2[0].Trim(); + array3 = array2.Skip(1).ToArray(); + } + else + { + text = array2[0].Trim(); + text2 = array2[1].Trim(); + array3 = array2.Skip(2).ToArray(); + } + } + else + { + array3 = new string[0]; + } + string[] array4 = array3; + foreach (string text4 in array4) + { + if (list2.Where((string c) => c == item.Trim()).Count() == 0) + { + list2.Add(text4.Trim()); + num++; + ListViewItem listViewItem = new ListViewItem(num.ToString()); + listViewItem.SubItems.Add(text.Trim()); + listViewItem.SubItems.Add(text2.Trim()); + listViewItem.SubItems.Add(text4.Trim()); + listViewItem.SubItems.Add("0"); + listViewItem.SubItems.Add("-"); + listViewItem.SubItems.Add("-"); + listViewItem.SubItems.Add(""); + listViewItem.UseItemStyleForSubItems = false; + listcycleRedeemIdList.Items.Add(listViewItem); + } + } + } + num2++; + } + MessageBox.Show("账号输入格式不正确,请在中间账号输入框,输入账号"); + } + + private void button2_Click(object sender, EventArgs e) + { + if (MessageBox.Show("确认删除列表数据吗", "提示", MessageBoxButtons.OKCancel) == DialogResult.OK) + { + listcycleRedeemIdList.Items.Clear(); + } + } + + private void button1_Click_1(object sender, EventArgs e) + { + ExperList(listcycleRedeemIdList); + } + + private void btnStartRedeem_Click(object sender, EventArgs e) + { + if (float.TryParse(txtSepTime.Text, out var result)) + { + if (result > 0f) + { + if (!isStartRun) + { + StartTime(result); + return; + } + expirationExecuted = false; + isStartRun = false; + CycleReddemTask.Instance.Stop(); + } + else + { + MessageBox.Show("请输入分钟"); + } + } + else + { + MessageBox.Show("请输入正确数值分钟"); + } + } + + public async void StartTime(float timeMinute) + { + ConfigUtlis.saveConfigKey("ckCycleReddenVpn", ckCycleReddenVpn.Checked.ToString()); + ConfigUtlis.saveConfigKey("ckCycleRemoteReddem", ckCycleRemoteReddem.Checked.ToString()); + ConfigUtlis.saveConfigKey("ckcycleSingleProcessRedeem", ckcycleSingleProcessRedeem.Checked.ToString()); + ConfigUtlis.saveConfigKey("txtCycleLoadAccount", txtCycleLoadAccount.Text.ToString()); + isStartRun = true; + btnStartRedeem.Text = "停止"; + btnStartRedeem.ForeColor = Color.Red; + expirationTime = DateTime.Now.AddMinutes(timeMinute); + await Task.Run(delegate + { + do + { + if (!(DateTime.Now >= expirationTime)) + { + UpdateCountdownTime(); + } + else if (!expirationExecuted) + { + if (!CycleReddemTask.Instance.TaskIsRun) + { + expirationExecuted = true; + UpdataMainUi(delegate + { + btnExecuted_Click(null, null); + label7.Text = "正在执行兑换..."; + }); + } + else + { + UpdataMainUi(delegate + { + label7.Text = "等待兑换..."; + }); + } + } + else + { + UpdataMainUi(delegate + { + label7.Text = "正在执行兑换..."; + }); + if (!CycleReddemTask.Instance.TaskIsRun) + { + expirationTime = DateTime.Now.AddMinutes(timeMinute); + expirationExecuted = false; + } + } + Task.Delay(500).Wait(); + } + while (isStartRun); + }); + btnStartRedeem.Text = "开始启动兑换"; + btnStartRedeem.ForeColor = Color.Green; + label7.Text = "未开始"; + isStartRun = false; + } + + public void UpdateCountdownTime() + { + TimeSpan timeSpan = expirationTime - DateTime.Now; + UpdataMainUi(delegate + { + label7.Text = (int)timeSpan.TotalMinutes + "分" + timeSpan.Seconds + "秒"; + }); + } + + public void plaYpromptTone() + { + try + { + sp.Stop(); + sp.Play(); + UpdataMainUi(delegate + { + FlashWin(); + }); + } + catch (Exception) + { + } + } + + [DllImport("User32.dll", CharSet = CharSet.Unicode)] + private static extern bool FlashWindowEx(ref FLASHWINFO pwfi); + + private void FlashWin() + { + FLASHWINFO pwfi = default(FLASHWINFO); + pwfi.cbSize = Convert.ToUInt32(Marshal.SizeOf((object)pwfi)); + pwfi.hwnd = base.Handle; + pwfi.dwFlags = 6u; + pwfi.uCount = 5u; + pwfi.dwTimeout = 500u; + FlashWindowEx(ref pwfi); + } + + public void UpdataMainUi(Action act) + { + try + { + if (!base.IsDisposed && base.IsHandleCreated) + { + Invoke(act); + } + } + catch (Exception) + { + } + } + + private void btnStopRemovePay_Click(object sender, EventArgs e) + { + FromDBDataQuery fromDBDataQuery = new FromDBDataQuery(); + fromDBDataQuery.sqlTitle = new Dictionary + { + { "value3", "卡片代码|150" }, + { "value1", "账号|150" }, + { "value2", "密码|100" }, + { "value4", "兑换次数|80" }, + { "value5", "更新时间|150" }, + { "value6", "信息|150" } + }; + fromDBDataQuery.type = "cycleReddem"; + fromDBDataQuery.typeName = "循环卡片兑换记录"; + fromDBDataQuery.Show(); + } + + public void applyRedeem(List lvItems) + { + btnExecuted.Enabled = false; + CycleReddemTask.Instance.AppleCycleReddemTask(2, lvItems, ckCycleReddenVpn.Checked, ckCycleRemoteReddem.Checked, ckcycleSingleProcessRedeem.Checked, delegate + { + if (!base.IsDisposed) + { + Invoke((Action)delegate + { + btnExecuted.Enabled = false; + }); + } + }, delegate + { + if (!base.IsDisposed) + { + Invoke((Action)delegate + { + btnExecuted.Enabled = true; + }); + } + }, delegate(string creadNo, string appleid) + { + UpdataMainUi(delegate + { + ListViewItem listViewItem = (from ListViewItem c in listcycleRedeemIdList.Items + where c.SubItems[3].Text == creadNo && c.SubItems[1].Text == appleid + select c).FirstOrDefault(); + if (listViewItem != null) + { + SqliteHelper.ExecuteInsert("itunes_db", new Dictionary + { + { "type", "cycleReddem" }, + { + "addTime", + Tools.GenerateTimeStamp().ToString() + }, + { + "value1", + listViewItem.SubItems[1].Text + }, + { + "value2", + listViewItem.SubItems[2].Text + }, + { + "value3", + listViewItem.SubItems[3].Text + }, + { + "value4", + listViewItem.SubItems[4].Text + }, + { + "value5", + listViewItem.SubItems[6].Text + }, + { + "value6", + listViewItem.SubItems[7].Text + } + }); + } + }); + }, delegate(string creadNo, DisplyType ditype, string distReust) + { + UpdataMainUi(delegate + { + IEnumerable enumerable2 = from ListViewItem c in listcycleRedeemIdList.Items + where c.SubItems[3].Text == creadNo + select c; + new Font(Font, FontStyle.Bold); + foreach (ListViewItem item in enumerable2) + { + switch (ditype) + { + case DisplyType.chongzhi: + item.SubItems[5].Text = ""; + item.SubItems[5].ForeColor = Color.Black; + break; + case DisplyType.xiaofeiriqiNow: + item.SubItems[5].Text = "-"; + break; + case DisplyType.xinxi: + item.SubItems[7].Text = distReust; + break; + } + } + }); + }, delegate(string creadNo, DisplyType ditype, string appleReust) + { + if (!base.IsDisposed) + { + Invoke((Action)delegate + { + IEnumerable enumerable = from ListViewItem c in listcycleRedeemIdList.Items + where c.SubItems[3].Text == creadNo + select c; + Font font = new Font(Font, FontStyle.Bold); + foreach (ListViewItem item2 in enumerable) + { + item2.SubItems[6].Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + if (int.TryParse(item2.SubItems[4].Text, out var result)) + { + item2.SubItems[4].Text = (result + 1).ToString(); + } + else + { + item2.SubItems[4].Text = "1"; + } + switch (ditype) + { + case DisplyType.reddemLose: + item2.SubItems[5].Text = appleReust; + item2.SubItems[5].ForeColor = Color.Red; + item2.SubItems[5].Font = font; + break; + case DisplyType.reddemValid: + item2.SubItems[5].Text = appleReust; + item2.SubItems[5].ForeColor = Color.Green; + item2.SubItems[5].Font = font; + if (appleReust.Contains("完成") && checkBox2.Checked) + { + plaYpromptTone(); + } + break; + case DisplyType.reddemUNlock: + item2.SubItems[5].Text = appleReust; + item2.SubItems[5].Font = font; + break; + } + } + }); + } + }); + } + + private void btnExecuted_Click(object sender, EventArgs e) + { + IEnumerable enumerable = from ListViewItem c in listcycleRedeemIdList.Items + where c.SubItems[5].Text != "停止" && c.SubItems[5].Text != "完成" + select c; + foreach (ListViewItem item in enumerable) + { + item.SubItems[5].Text = "-"; + } + List lvItems = enumerable.Select((ListViewItem c) => new AppleAcount + { + reddemCode = c.SubItems[3].Text, + appleId = c.SubItems[1].Text, + applePwd = c.SubItems[2].Text, + overflow = c.SubItems[4].Text + }).ToList(); + applyRedeem(lvItems); + } + + private void FormIntervalRedeem_FormClosing(object sender, FormClosingEventArgs e) + { + if ((CycleReddemTask.Instance.TaskIsRun || isStartRun) && MessageBox.Show("该任务在运行,确定退出吗?", "提示", MessageBoxButtons.OKCancel) != DialogResult.OK) + { + e.Cancel = true; + return; + } + CycleReddemTask.Instance.TaskIsRun = false; + CycleReddemTask.Instance.Stop(); + } + + protected override void Dispose(bool disposing) + { + if (disposing && components != null) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.listcycleRedeemIdList = new System.Windows.Forms.ListView(); + this.columnHeader1 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader2 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader4 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader11 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader5 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader3 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader6 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader10 = new System.Windows.Forms.ColumnHeader(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.btnExecuted = new System.Windows.Forms.Button(); + this.label7 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.txtSepTime = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.checkBox2 = new System.Windows.Forms.CheckBox(); + this.ckCycleReddenVpn = new System.Windows.Forms.CheckBox(); + this.ckcycleSingleProcessRedeem = new System.Windows.Forms.CheckBox(); + this.ckCycleRemoteReddem = new System.Windows.Forms.CheckBox(); + this.btnStartRedeem = new System.Windows.Forms.Button(); + this.btnTestAccount = new System.Windows.Forms.Button(); + this.label45 = new System.Windows.Forms.Label(); + this.txtCycleLoadAccount = new System.Windows.Forms.TextBox(); + this.btnReddenInput = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.btnStopRemovePay = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.labCheckAcountMsg = new System.Windows.Forms.Label(); + this.labTestDianshu = new System.Windows.Forms.Label(); + this.label47 = new System.Windows.Forms.Label(); + this.label14 = new System.Windows.Forms.Label(); + this.groupBox1.SuspendLayout(); + base.SuspendLayout(); + this.listcycleRedeemIdList.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + this.listcycleRedeemIdList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[8] { this.columnHeader1, this.columnHeader2, this.columnHeader4, this.columnHeader11, this.columnHeader5, this.columnHeader3, this.columnHeader6, this.columnHeader10 }); + this.listcycleRedeemIdList.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.listcycleRedeemIdList.FullRowSelect = true; + this.listcycleRedeemIdList.HideSelection = false; + this.listcycleRedeemIdList.Location = new System.Drawing.Point(12, 209); + this.listcycleRedeemIdList.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.listcycleRedeemIdList.Name = "listcycleRedeemIdList"; + this.listcycleRedeemIdList.Size = new System.Drawing.Size(941, 434); + this.listcycleRedeemIdList.TabIndex = 0; + this.listcycleRedeemIdList.UseCompatibleStateImageBehavior = false; + this.listcycleRedeemIdList.View = System.Windows.Forms.View.Details; + this.listcycleRedeemIdList.MouseClick += new System.Windows.Forms.MouseEventHandler(listIntervalRedeemIdList_MouseClick); + this.columnHeader1.Text = "序号"; + this.columnHeader1.Width = 40; + this.columnHeader2.Text = "账号"; + this.columnHeader2.Width = 150; + this.columnHeader4.Text = "密码"; + this.columnHeader4.Width = 100; + this.columnHeader11.Text = "礼品卡代码"; + this.columnHeader11.Width = 150; + this.columnHeader5.Text = "次数"; + this.columnHeader5.Width = 50; + this.columnHeader3.Text = "状态"; + this.columnHeader3.Width = 50; + this.columnHeader6.Text = "最近更新时间"; + this.columnHeader6.Width = 140; + this.columnHeader10.Text = "信息"; + this.columnHeader10.Width = 250; + this.groupBox1.Controls.Add(this.btnExecuted); + this.groupBox1.Controls.Add(this.label7); + this.groupBox1.Controls.Add(this.label4); + this.groupBox1.Controls.Add(this.label3); + this.groupBox1.Controls.Add(this.txtSepTime); + this.groupBox1.Controls.Add(this.label2); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Controls.Add(this.checkBox2); + this.groupBox1.Controls.Add(this.ckCycleReddenVpn); + this.groupBox1.Controls.Add(this.ckcycleSingleProcessRedeem); + this.groupBox1.Controls.Add(this.ckCycleRemoteReddem); + this.groupBox1.Controls.Add(this.btnStartRedeem); + this.groupBox1.Location = new System.Drawing.Point(16, 12); + this.groupBox1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Padding = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.groupBox1.Size = new System.Drawing.Size(936, 99); + this.groupBox1.TabIndex = 4; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "配置"; + this.btnExecuted.ForeColor = System.Drawing.Color.Firebrick; + this.btnExecuted.Location = new System.Drawing.Point(398, 60); + this.btnExecuted.Name = "btnExecuted"; + this.btnExecuted.Size = new System.Drawing.Size(69, 24); + this.btnExecuted.TabIndex = 38; + this.btnExecuted.Text = "直接执行"; + this.btnExecuted.UseVisualStyleBackColor = true; + this.btnExecuted.Click += new System.EventHandler(btnExecuted_Click); + this.label7.AutoSize = true; + this.label7.Font = new System.Drawing.Font("宋体", 10.5f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.label7.ForeColor = System.Drawing.Color.Green; + this.label7.Location = new System.Drawing.Point(289, 64); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(52, 14); + this.label7.TabIndex = 37; + this.label7.Text = "未开始"; + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(203, 64); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(80, 17); + this.label4.TabIndex = 36; + this.label4.Text = "执行倒计时:"; + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(332, 28); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(32, 17); + this.label3.TabIndex = 35; + this.label3.Text = "分钟"; + this.txtSepTime.Location = new System.Drawing.Point(268, 25); + this.txtSepTime.Name = "txtSepTime"; + this.txtSepTime.Size = new System.Drawing.Size(58, 23); + this.txtSepTime.TabIndex = 34; + this.txtSepTime.Text = "10"; + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(203, 29); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(59, 17); + this.label2.TabIndex = 33; + this.label2.Text = "间隔时间:"; + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.label1.ForeColor = System.Drawing.SystemColors.Highlight; + this.label1.Location = new System.Drawing.Point(509, 69); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(335, 17); + this.label1.TabIndex = 32; + this.label1.Text = "因现在苹果加卡限制,请一个ID对应5张卡,间隔要超过1分钟"; + this.checkBox2.AutoSize = true; + this.checkBox2.Checked = true; + this.checkBox2.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox2.Font = new System.Drawing.Font("宋体", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.checkBox2.Location = new System.Drawing.Point(515, 18); + this.checkBox2.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.checkBox2.Name = "checkBox2"; + this.checkBox2.Size = new System.Drawing.Size(108, 16); + this.checkBox2.TabIndex = 31; + this.checkBox2.Text = "兑换成功提示音"; + this.checkBox2.UseVisualStyleBackColor = true; + this.ckCycleReddenVpn.AutoSize = true; + this.ckCycleReddenVpn.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.ckCycleReddenVpn.ForeColor = System.Drawing.Color.Red; + this.ckCycleReddenVpn.Location = new System.Drawing.Point(512, 44); + this.ckCycleReddenVpn.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.ckCycleReddenVpn.Name = "ckCycleReddenVpn"; + this.ckCycleReddenVpn.Size = new System.Drawing.Size(111, 21); + this.ckCycleReddenVpn.TabIndex = 30; + this.ckCycleReddenVpn.Text = "使用随机IP代理"; + this.ckCycleReddenVpn.UseVisualStyleBackColor = true; + this.ckcycleSingleProcessRedeem.AutoSize = true; + this.ckcycleSingleProcessRedeem.Checked = true; + this.ckcycleSingleProcessRedeem.CheckState = System.Windows.Forms.CheckState.Checked; + this.ckcycleSingleProcessRedeem.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.ckcycleSingleProcessRedeem.ForeColor = System.Drawing.Color.MediumBlue; + this.ckcycleSingleProcessRedeem.Location = new System.Drawing.Point(759, 45); + this.ckcycleSingleProcessRedeem.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.ckcycleSingleProcessRedeem.Name = "ckcycleSingleProcessRedeem"; + this.ckcycleSingleProcessRedeem.Size = new System.Drawing.Size(137, 21); + this.ckcycleSingleProcessRedeem.TabIndex = 29; + this.ckcycleSingleProcessRedeem.Text = "相同ID以单线程兑换"; + this.ckcycleSingleProcessRedeem.UseVisualStyleBackColor = true; + this.ckCycleRemoteReddem.AutoSize = true; + this.ckCycleRemoteReddem.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.ckCycleRemoteReddem.ForeColor = System.Drawing.Color.Green; + this.ckCycleRemoteReddem.Location = new System.Drawing.Point(647, 45); + this.ckCycleRemoteReddem.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.ckCycleRemoteReddem.Name = "ckCycleRemoteReddem"; + this.ckCycleRemoteReddem.Size = new System.Drawing.Size(99, 21); + this.ckCycleRemoteReddem.TabIndex = 28; + this.ckCycleRemoteReddem.Text = "使用远程网络"; + this.ckCycleRemoteReddem.UseVisualStyleBackColor = true; + this.btnStartRedeem.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.btnStartRedeem.ForeColor = System.Drawing.Color.Green; + this.btnStartRedeem.Location = new System.Drawing.Point(19, 29); + this.btnStartRedeem.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.btnStartRedeem.Name = "btnStartRedeem"; + this.btnStartRedeem.Size = new System.Drawing.Size(164, 49); + this.btnStartRedeem.TabIndex = 1; + this.btnStartRedeem.Text = "开始启动兑换"; + this.btnStartRedeem.UseVisualStyleBackColor = true; + this.btnStartRedeem.Click += new System.EventHandler(btnStartRedeem_Click); + this.btnTestAccount.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnTestAccount.Location = new System.Drawing.Point(536, 157); + this.btnTestAccount.Name = "btnTestAccount"; + this.btnTestAccount.Size = new System.Drawing.Size(111, 23); + this.btnTestAccount.TabIndex = 21; + this.btnTestAccount.Text = "测试账号状态"; + this.btnTestAccount.UseVisualStyleBackColor = true; + this.btnTestAccount.Click += new System.EventHandler(btnTestAccount_Click); + this.label45.AutoSize = true; + this.label45.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.label45.ForeColor = System.Drawing.Color.Firebrick; + this.label45.Location = new System.Drawing.Point(23, 161); + this.label45.Name = "label45"; + this.label45.Size = new System.Drawing.Size(90, 17); + this.label45.TabIndex = 20; + this.label45.Text = "加载Apple账号"; + this.txtCycleLoadAccount.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.txtCycleLoadAccount.Location = new System.Drawing.Point(125, 157); + this.txtCycleLoadAccount.Name = "txtCycleLoadAccount"; + this.txtCycleLoadAccount.Size = new System.Drawing.Size(405, 23); + this.txtCycleLoadAccount.TabIndex = 19; + this.txtCycleLoadAccount.Text = "账号输入格式:xxxx@xxx.com----密码"; + this.txtCycleLoadAccount.Enter += new System.EventHandler(txtCycleLoadAccount_Enter); + this.txtCycleLoadAccount.Leave += new System.EventHandler(txtCycleLoadAccount_Leave); + this.btnReddenInput.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnReddenInput.Location = new System.Drawing.Point(35, 119); + this.btnReddenInput.Name = "btnReddenInput"; + this.btnReddenInput.Size = new System.Drawing.Size(133, 32); + this.btnReddenInput.TabIndex = 22; + this.btnReddenInput.Text = "卡片代码输入"; + this.btnReddenInput.UseVisualStyleBackColor = true; + this.btnReddenInput.Click += new System.EventHandler(btnReddenInput_Click); + this.button1.Location = new System.Drawing.Point(311, 123); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(130, 24); + this.button1.TabIndex = 24; + this.button1.Text = "导出记录"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(button1_Click_1); + this.btnStopRemovePay.Location = new System.Drawing.Point(175, 123); + this.btnStopRemovePay.Name = "btnStopRemovePay"; + this.btnStopRemovePay.Size = new System.Drawing.Size(130, 24); + this.btnStopRemovePay.TabIndex = 23; + this.btnStopRemovePay.Text = "循环兑换纪录查询"; + this.btnStopRemovePay.UseVisualStyleBackColor = true; + this.btnStopRemovePay.Click += new System.EventHandler(btnStopRemovePay_Click); + this.button2.Location = new System.Drawing.Point(877, 179); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(75, 23); + this.button2.TabIndex = 55; + this.button2.Text = "清空列表"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(button2_Click); + this.labCheckAcountMsg.AutoSize = true; + this.labCheckAcountMsg.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.labCheckAcountMsg.Location = new System.Drawing.Point(127, 187); + this.labCheckAcountMsg.Name = "labCheckAcountMsg"; + this.labCheckAcountMsg.Size = new System.Drawing.Size(0, 17); + this.labCheckAcountMsg.TabIndex = 56; + this.labTestDianshu.AutoSize = true; + this.labTestDianshu.Font = new System.Drawing.Font("微软雅黑", 10.5f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.labTestDianshu.ForeColor = System.Drawing.Color.Crimson; + this.labTestDianshu.Location = new System.Drawing.Point(775, 156); + this.labTestDianshu.Name = "labTestDianshu"; + this.labTestDianshu.Size = new System.Drawing.Size(18, 19); + this.labTestDianshu.TabIndex = 57; + this.labTestDianshu.Text = "0"; + this.label47.AutoSize = true; + this.label47.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.label47.Location = new System.Drawing.Point(653, 158); + this.label47.Name = "label47"; + this.label47.Size = new System.Drawing.Size(116, 17); + this.label47.TabIndex = 58; + this.label47.Text = "测试账号消耗点数:"; + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(447, 126); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(452, 17); + this.label14.TabIndex = 62; + this.label14.Text = "循环兑换时:第一次兑换扣10点,第二次以后兑换失败扣3点,加载成功ID扣:50点"; + base.AutoScaleDimensions = new System.Drawing.SizeF(7f, 17f); + base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + base.ClientSize = new System.Drawing.Size(964, 656); + base.Controls.Add(this.label14); + base.Controls.Add(this.labTestDianshu); + base.Controls.Add(this.label47); + base.Controls.Add(this.labCheckAcountMsg); + base.Controls.Add(this.button2); + base.Controls.Add(this.button1); + base.Controls.Add(this.btnStopRemovePay); + base.Controls.Add(this.btnReddenInput); + base.Controls.Add(this.btnTestAccount); + base.Controls.Add(this.label45); + base.Controls.Add(this.txtCycleLoadAccount); + base.Controls.Add(this.groupBox1); + base.Controls.Add(this.listcycleRedeemIdList); + this.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + base.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + base.MaximizeBox = false; + base.Name = "FormIntervalRedeem"; + base.ShowIcon = false; + base.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "批量间隔循环兑换礼品卡"; + base.FormClosing += new System.Windows.Forms.FormClosingEventHandler(FormIntervalRedeem_FormClosing); + base.Load += new System.EventHandler(FormIntervalRedeem_Load); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + base.ResumeLayout(false); + base.PerformLayout(); + } + } +} diff --git a/AppleBatch_June/FormLogin.cs b/AppleBatch_June/FormLogin.cs new file mode 100644 index 0000000..4ac5c35 --- /dev/null +++ b/AppleBatch_June/FormLogin.cs @@ -0,0 +1,699 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.IO.IsolatedStorage; +using System.Net; +using System.Net.Security; +using System.Reflection; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using AppleBatch_June.Properties; +using DotNet.Utilities; + +namespace AppleBatch_June +{ + public class FormLogin : Form + { + public const int WM_SYSCOMMAND = 274; + + public const int SC_MOVE = 61456; + + public const int HTCAPTION = 2; + + private string runTimePatch = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); + + public static string versions = Application.ProductVersion.ToString(); + + private bool isMouseDown; + + private Point mouseOffset; + + private IContainer components; + + private Label label1; + + private TextBox txtUser; + + private TextBox txtPwd; + + private Label label2; + + private Button button1; + + private PictureBox pictureBox1; + + private Label label3; + + private Label label4; + + private string path => AppDomain.CurrentDomain.BaseDirectory; + + private string configPath => path + "account.ini"; + + public FormLogin() + { + InitializeComponent(); + } + + private void Form1_Load(object sender, EventArgs e) + { + if (path.ToLower().Contains("rar$")) + { + MessageBox.Show("检测到程序未解压,请先解压压缩包在打开"); + Environment.Exit(0); + return; + } + ServicePointManager.DefaultConnectionLimit = 512; + ServicePointManager.Expect100Continue = false; + ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; + ServicePointManager.ServerCertificateValidationCallback = (object sender2, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) => true; + try + { + if (!Directory.Exists(runTimePatch + "/AppleBatch")) + { + Directory.CreateDirectory(runTimePatch + "/AppleBatch"); + } + if (!File.Exists(runTimePatch + "/AppleBatch/AppleDB.db")) + { + File.WriteAllBytes(runTimePatch + "/AppleBatch/AppleDB.db", Resources.AppleDB); + } + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + } + txtPwd.ForeColor = SystemColors.MenuHighlight; + txtUser.ForeColor = SystemColors.MenuHighlight; + base.Enabled = false; + init(); + } + + public async void init() + { + Task result = Task.Run(delegate + { + Stopwatch stopwatch = Stopwatch.StartNew(); + MachineCode machineCode = new MachineCode(); + AppSysConfig.saffMac = Tools.GetMD5_32(machineCode.GetMachineCodeString() + "巴拉拉小魔仙"); + AppSysConfig.newSaffMac = Tools.GetMD5_32(machineCode.GetMachineCodeString(moAddress: true) + "LiuYue_Acbse"); + stopwatch.Stop(); + }); + string[] array = new string[3] { "https://gitee.com/liuyueapp/blogsLiuyue/raw/master/assets/aphos.css", "https://meixi2.oss-us-west-1.aliyuncs.com/host.txt", "https://zjzhuanfa.oss-cn-shenzhen.aliyuncs.com/host.txt" }; + int count = 1; + int tCount = 1; + string[] array2 = array; + foreach (string hostItem in array2) + { + HttpHelper http = new HttpHelper(); + HttpResult httpResult = await Task.Run(delegate + { + HttpItem item = new HttpItem + { + URL = hostItem, + Method = "GET", + Timeout = 20000, + UserAgent = AppleUtlis.getAppleWenUserAgent() + }; + return http.GetHtml(item); + }); + if (httpResult.StatusCode != HttpStatusCode.OK || !httpResult.Html.Contains("http://")) + { + count++; + continue; + } + tCount = 1; + string[] array3 = httpResult.Html.Split('\n'); + foreach (string text in array3) + { + if (!string.IsNullOrEmpty(text)) + { + string text2 = text.Split('\n')[0].Trim().TrimEnd('\r'); + if (http.GetHtml(new HttpItem + { + URL = text2 + "/hosy/addbak", + Method = "GET", + Timeout = 10000 + }).StatusCode == HttpStatusCode.NotFound) + { + ApiNetReq.host = text2; + break; + } + } + tCount++; + } + break; + } + await result; + if (!string.IsNullOrEmpty(ApiNetReq.host)) + { + SyncInitConfig(); + return; + } + MessageBox.Show("初始化失败了" + count.ToString() + "#" + tCount); + Environment.Exit(0); + } + + public async void SyncInitConfig() + { + _ = Environment.OSVersion.Version; + string WindowsVersion = "Windows 10 专业版"; + try + { + if (new FileInfo(AppDomain.CurrentDomain.FriendlyName).Length > 8013664L) + { + WindowsVersion = "OtherVersions"; + } + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + } + if (string.IsNullOrEmpty(WindowsVersion)) + { + WindowsVersion = ""; + } + HttpResult httpResult = await Task.Run(() => new ApiNetReq().doPost(new Dictionary + { + { "account", "123" }, + { "pwd", "123" } + }, "ApiSysConfig")); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + base.Enabled = true; + if (!AppSysConfig.loadConfig(httpResult.Html)) + { + MessageBox.Show("初始化失败了#2"); + Environment.Exit(0); + } + string text = AppSysConfig.getConfig("versionsNew").Trim(); + if (text != versions && !string.IsNullOrEmpty(text) && MessageBox.Show("发现新版本,是否更新?" + AppSysConfig.getConfig("versionsTip").Replace("\\n", "\n"), "新版本提示", MessageBoxButtons.OKCancel) == DialogResult.OK) + { + StartProcess("update.exe", new string[2] + { + ApiNetReq.host + "/AppleClientApi/getUpFile?version=" + text + "&windowsVersion=" + Tools.ToUrlEncode(WindowsVersion), + "AppleBatch_June.exe" + }); + Close(); + Environment.Exit(0); + } + } + else + { + MessageBox.Show("初始化加载失败了"); + Environment.Exit(0); + } + loadConfig(); + } + + public Task DownLoadSQLiteInterop() + { + return Task.Run(delegate + { + try + { + string sourceFileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "sqlite.interop.dll"); + string text = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "x64/sqlite.interop.dll"); + if (File.Exists(sourceFileName)) + { + if (!Directory.Exists("x86")) + { + Directory.CreateDirectory("x86"); + } + File.Move(sourceFileName, "x86/sqlite.interop.dll"); + } + if (Environment.Is64BitOperatingSystem) + { + if (File.Exists(text)) + { + FileStream fileStream = new FileStream(text, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); + byte[] array = new byte[fileStream.Length]; + fileStream.Read(array, 0, array.Length); + fileStream.Close(); + if (Tools.GetMD5_32(array) != "0b03a5acd07d99daea0699e5bd8077a1") + { + File.Delete(text); + } + } + if (!File.Exists(text)) + { + Stopwatch stopwatch = new Stopwatch(); + stopwatch.Start(); + if (!Directory.Exists("x64")) + { + Directory.CreateDirectory("x64"); + } + string address = ApiNetReq.host + "/dll/SQLiteInterop/x64/SQLite.Interop.dll"; + string text2 = text; + if (!File.Exists(text2)) + { + string text3 = text2 + ".tmp"; + using (WebClient webClient = new WebClient()) + { + webClient.DownloadFile(address, text3); + } + File.Move(text3, text2); + } + stopwatch.Stop(); + Console.WriteLine($"程序下载耗时:{stopwatch.ElapsedMilliseconds}ms."); + } + } + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + } + }); + } + + public bool StartProcess(string filename, string[] args) + { + try + { + string text = ""; + foreach (string text2 in args) + { + text = text + text2 + " "; + } + text = text.Trim(); + Process process = new Process(); + ProcessStartInfo startInfo = new ProcessStartInfo(filename, text); + process.StartInfo = startInfo; + process.StartInfo.UseShellExecute = false; + process.Start(); + return true; + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + MessageBox.Show("启动应用程序时出错!原因:" + ex.Message); + } + return false; + } + + private void Form1_MouseDown(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + isMouseDown = true; + mouseOffset = new Point(-e.X, -e.Y); + } + } + + public void loadConfig() + { + if (!File.Exists(configPath)) + { + return; + } + string text = Tools.readFile(configPath); + try + { + string imgData = new Regex("userName=([\\s\\S]*?);").Match(text).Groups[1].Value.Trim(); + string imgData2 = new Regex("userPwd=([\\s\\S]*?);").Match(text).Groups[1].Value.Trim(); + string key = Tools.GetMD5_32(AppSysConfig.saffMac + "123123").Substring(16); + string iv = Tools.GetMD5_32(AppSysConfig.saffMac + "123111123").Substring(16); + txtUser.Text = DESEncrypt.Decrypt(Encoding.UTF8.GetString(Tools.DecodeBase64(imgData)), key, iv); + if (!text.Contains(";v2")) + { + txtPwd.Text = DESEncrypt.Decrypt(Encoding.UTF8.GetString(Tools.DecodeBase64(imgData2)), key, iv); + } + else + { + try + { + byte[] bytes = ProtectedData.Unprotect(Tools.DecodeBase64(imgData2), getAditionalEntropy(), DataProtectionScope.LocalMachine); + txtPwd.Text = DESEncrypt.Decrypt(Encoding.UTF8.GetString(bytes), key, iv); + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + txtPwd.Text = ""; + } + } + if (txtPwd.Text.Length > 0) + { + txtPwd.PasswordChar = '*'; + Task.Run(delegate + { + Thread.Sleep(100); + if (!base.IsDisposed) + { + Invoke((Action)delegate + { + button1_Click(null, null); + }); + } + }); + } + else if (txtUser.Text.Length > 0) + { + MessageBox.Show("请重新输入密码"); + } + } + catch (Exception ex2) + { + APIUtlis.ApiSeriveError(ex2); + } + } + + private void pictureBox1_MouseDown(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + isMouseDown = true; + mouseOffset = new Point(-e.X, -e.Y); + } + } + + private void label4_Click(object sender, EventArgs e) + { + base.WindowState = FormWindowState.Minimized; + Close(); + Application.Exit(); + Environment.Exit(0); + } + + private void txtUser_Enter(object sender, EventArgs e) + { + if (txtUser.Text == "用户名") + { + txtUser.Text = ""; + txtUser.ForeColor = Color.Black; + } + } + + private void txtUser_Leave(object sender, EventArgs e) + { + if (txtUser.Text.Length == 0) + { + txtUser.Text = "用户名"; + txtUser.ForeColor = SystemColors.MenuHighlight; + } + } + + private void txtPwd_Leave(object sender, EventArgs e) + { + if (txtPwd.Text.Length == 0) + { + txtPwd.Text = "密码"; + txtPwd.ForeColor = SystemColors.MenuHighlight; + txtPwd.PasswordChar = '\0'; + } + } + + private void txtPwd_Enter(object sender, EventArgs e) + { + txtPwd.PasswordChar = '*'; + if (txtPwd.Text == "密码") + { + txtPwd.Text = ""; + txtPwd.ForeColor = Color.Black; + } + } + + private byte[] getAditionalEntropy() + { + try + { + IsolatedStorageFile machineStoreForDomain = IsolatedStorageFile.GetMachineStoreForDomain(); + string s = machineStoreForDomain.GetType().GetProperty("DomainName", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(machineStoreForDomain) as string; + machineStoreForDomain.Remove(); + machineStoreForDomain.Close(); + machineStoreForDomain.Dispose(); + AppSysConfig.AditionalEntropy = Encoding.UTF8.GetBytes(s); + return AppSysConfig.AditionalEntropy; + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + AppSysConfig.AditionalEntropy = new byte[16] + { + 9, 1, 5, 8, 6, 3, 5, 2, 4, 2, + 1, 7, 3, 9, 2, 1 + }; + return AppSysConfig.AditionalEntropy; + } + } + + private void label3_Click(object sender, EventArgs e) + { + new FromReg().ShowDialog(); + } + + private void button1_Click(object sender, EventArgs e) + { + string[] array = AppSysConfig.getConfig("CaptureNetKeyWork").Split(','); + //foreach (string text in array) + //{ + // if (!string.IsNullOrEmpty(text) && Process.GetProcessesByName(text).Length != 0) + // { + // MessageBox.Show("软件冲突,请先关闭 " + text + "."); + // AppleExecuteTask.Stop(); + // Application.Exit(); + // Environment.Exit(0); + // } + //} + string text2 = txtUser.Text.Trim(); + string text3 = txtPwd.Text; + if (text2.Length >= 3) + { + Dictionary postData = new Dictionary + { + { "account", text2 }, + { "pwd", text3 } + }; + HttpResult httpResult = new ApiNetReq().doPost(postData, "ApiLogin"); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + dynamic val = Tools.Todejosn(httpResult.Html); + if (val["Code"] == "0000") + { + AppSysConfig.userToken = val["Data"]["token"]; + AppSysConfig.userName = val["Data"]["userName"]; + AppSysConfig.userPwd = text3; + AppSysConfig.integral = val["Data"]["integral"]; + AppSysConfig.freezeIntegral = val["Data"]["freezeIntegral"]; + AppSysConfig.userNumber = val["Data"]["userNumber"]; + AppSysConfig.guid = val["Data"]["guid"]; + AppSysConfig.uid = ShareCodeUtils.codeToId(AppSysConfig.userNumber); + Hide(); + saveConfig(); + if (Settings.Default.ShowGiftcardBalance) + { + FormGiftcardBalance formGiftcardBalance = new FormGiftcardBalance(); + formGiftcardBalance.panUserInfoShow = !Settings.Default.HideGiftcardBalanceInfo; + formGiftcardBalance.login = this; + formGiftcardBalance.Show(); + formGiftcardBalance.Activate(); + } + else + { + FromMain fromMain = new FromMain(); + fromMain.login = this; + fromMain.Show(); + fromMain.Activate(); + } + } + else + { + MessageBox.Show(val["Message"]); + } + } + else + { + MessageBox.Show("请求错误,请检测网络"); + } + } + else + { + MessageBox.Show("账号格式不正确"); + } + } + + public void saveConfig() + { + Tools.GetMD5_32(AppSysConfig.saffMac + "123123").Substring(16); + Tools.GetMD5_32(AppSysConfig.saffMac + "123111123").Substring(16); + string text = Tools.EncodeBase64(Encoding.UTF8.GetBytes(DESEncrypt.Encrypt(txtUser.Text, Tools.GetMD5_32(AppSysConfig.saffMac + "123123").Substring(16), Tools.GetMD5_32(AppSysConfig.saffMac + "123111123").Substring(16)))); + try + { + string text2 = Tools.EncodeBase64(ProtectedData.Protect(Encoding.UTF8.GetBytes(DESEncrypt.Encrypt(txtPwd.Text, Tools.GetMD5_32(AppSysConfig.saffMac + "123123").Substring(16), Tools.GetMD5_32(AppSysConfig.saffMac + "123111123").Substring(16))), getAditionalEntropy(), DataProtectionScope.LocalMachine)); + File.WriteAllText(configPath, "userName=" + text + ";\r\nuserPwd=" + text2 + ";v2"); + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + } + } + + private void button2_Click(object sender, EventArgs e) + { + } + + private void pictureBox1_Click(object sender, EventArgs e) + { + } + + private void FormLogin_MouseMove(object sender, MouseEventArgs e) + { + if (isMouseDown) + { + Point mousePosition = Control.MousePosition; + mousePosition.Offset(mouseOffset.X, mouseOffset.Y); + base.Location = mousePosition; + } + } + + private void FormLogin_MouseUp(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + isMouseDown = false; + } + } + + private void pictureBox1_MouseMove(object sender, MouseEventArgs e) + { + if (isMouseDown) + { + Point mousePosition = Control.MousePosition; + mousePosition.Offset(mouseOffset.X, mouseOffset.Y); + base.Location = mousePosition; + } + } + + private void pictureBox1_MouseUp(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + isMouseDown = false; + } + } + + protected override void Dispose(bool disposing) + { + if (disposing && components != null) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AppleBatch_June.FormLogin)); + this.label1 = new System.Windows.Forms.Label(); + this.txtUser = new System.Windows.Forms.TextBox(); + this.txtPwd = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.button1 = new System.Windows.Forms.Button(); + this.label3 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize)this.pictureBox1).BeginInit(); + base.SuspendLayout(); + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(151, 225); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(47, 17); + this.label1.TabIndex = 0; + this.label1.Text = "用户名:"; + this.txtUser.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.txtUser.Location = new System.Drawing.Point(205, 221); + this.txtUser.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.txtUser.Name = "txtUser"; + this.txtUser.Size = new System.Drawing.Size(188, 23); + this.txtUser.TabIndex = 1; + this.txtUser.Text = "用户名"; + this.txtUser.Enter += new System.EventHandler(txtUser_Enter); + this.txtUser.Leave += new System.EventHandler(txtUser_Leave); + this.txtPwd.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.txtPwd.Location = new System.Drawing.Point(205, 261); + this.txtPwd.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.txtPwd.Name = "txtPwd"; + this.txtPwd.Size = new System.Drawing.Size(188, 23); + this.txtPwd.TabIndex = 3; + this.txtPwd.Text = "密码"; + this.txtPwd.Enter += new System.EventHandler(txtPwd_Enter); + this.txtPwd.Leave += new System.EventHandler(txtPwd_Leave); + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(151, 265); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(43, 17); + this.label2.TabIndex = 2; + this.label2.Text = "密 码:"; + this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button1.Location = new System.Drawing.Point(205, 300); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(188, 30); + this.button1.TabIndex = 4; + this.button1.Text = "登录"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(button1_Click); + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(410, 223); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(68, 17); + this.label3.TabIndex = 7; + this.label3.Text = "注册新账号"; + this.label3.Click += new System.EventHandler(label3_Click); + this.label4.AutoSize = true; + this.label4.BackColor = System.Drawing.Color.Transparent; + this.label4.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.label4.ForeColor = System.Drawing.Color.Blue; + this.label4.Location = new System.Drawing.Point(536, 19); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(32, 17); + this.label4.TabIndex = 8; + this.label4.Text = "关闭"; + this.label4.Click += new System.EventHandler(label4_Click); + //this.pictureBox1.Image = AppleBatch_June.Properties.Resources._57fb35f0371a6; + this.pictureBox1.Location = new System.Drawing.Point(-4, -8); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(596, 205); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pictureBox1.TabIndex = 5; + this.pictureBox1.TabStop = false; + this.pictureBox1.Click += new System.EventHandler(pictureBox1_Click); + this.pictureBox1.MouseDown += new System.Windows.Forms.MouseEventHandler(pictureBox1_MouseDown); + this.pictureBox1.MouseMove += new System.Windows.Forms.MouseEventHandler(pictureBox1_MouseMove); + this.pictureBox1.MouseUp += new System.Windows.Forms.MouseEventHandler(pictureBox1_MouseUp); + base.AcceptButton = this.button1; + base.AutoScaleDimensions = new System.Drawing.SizeF(8f, 17f); + base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.WhiteSmoke; + base.ClientSize = new System.Drawing.Size(593, 389); + base.Controls.Add(this.label4); + base.Controls.Add(this.label3); + base.Controls.Add(this.pictureBox1); + base.Controls.Add(this.button1); + base.Controls.Add(this.txtPwd); + base.Controls.Add(this.label2); + base.Controls.Add(this.txtUser); + base.Controls.Add(this.label1); + this.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.ForeColor = System.Drawing.Color.DarkSlateGray; + base.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + base.Icon = (System.Drawing.Icon)resources.GetObject("$this.Icon"); + base.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + base.Name = "FormLogin"; + base.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Form1"; + base.Load += new System.EventHandler(Form1_Load); + base.MouseDown += new System.Windows.Forms.MouseEventHandler(Form1_MouseDown); + base.MouseMove += new System.Windows.Forms.MouseEventHandler(FormLogin_MouseMove); + base.MouseUp += new System.Windows.Forms.MouseEventHandler(FormLogin_MouseUp); + ((System.ComponentModel.ISupportInitialize)this.pictureBox1).EndInit(); + base.ResumeLayout(false); + base.PerformLayout(); + } + } +} diff --git a/AppleBatch_June/FormNetwork.cs b/AppleBatch_June/FormNetwork.cs new file mode 100644 index 0000000..0f6f60d --- /dev/null +++ b/AppleBatch_June/FormNetwork.cs @@ -0,0 +1,1330 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Net; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using AppleBatch_June.ExecuteTasks; +using AppleBatch_June.Model; +using AppleBatch_June.Utils; +using DotNet.Utilities; + +namespace AppleBatch_June +{ + public class FormNetwork : Form + { + private string RadioHttpAgentRouteLine = ""; + + private IContainer components; + + private Label label2; + + private ComboBox comNetworkConfig; + + private Button btnSaveSetting; + + private Button btnClose; + + private TabControl tabConfig; + + private TabPage pageApi; + + private TabPage pageSuidao; + + private TabPage pageBohao; + + private TextBox txtAdslIdCount; + + private Label label8; + + private Button btnAdslTest; + + private TextBox txtAdslPwd; + + private Label label6; + + private TextBox txtAdslUserName; + + private Label label7; + + private TextBox txtTpsPwd; + + private Label label9; + + private Button btnTpsTest; + + private TextBox txtTpsUserName; + + private Label label10; + + private TextBox txtTpsHost; + + private Label label11; + + private Button btnNetWorkApiTest; + + private TextBox txtNetWordApiURL; + + private Label label12; + + private Label label13; + + private Label label14; + + private TextBox txtNowIp; + + private LinkLabel linkLabel1; + + private GroupBox groupBox3; + + private RichTextBox txtLog; + + private TextBox txtTpsPort; + + private Label label1; + + private Button button1; + + private Button button2; + + private Label label3; + + private Label label50; + + private Label labProxyThreadTip; + + private TabPage pageDefault; + + private Label label5; + + private TextBox txtThredSize; + + private TextBox txtApiAccountPwd; + + private Label label4; + + private TextBox txtApiAccountName; + + private Label label16; + + private Label label15; + + private Panel panel1; + + private RadioButton radWebProtocolOld; + + private RadioButton radWebProtocolS2K; + + private RadioButton radWebProtocolDefault; + + public FormNetwork() + { + InitializeComponent(); + } + + private void FormNetwork_Load(object sender, EventArgs e) + { + int selectedIndex = Tools.ToNetWorkInt(ConfigUtlis.getConfigValue("comNetworkConfig"), 0); + txtNetWordApiURL.Text = Tools.ToUrlDecode(ConfigUtlis.getConfigValue("txtNetWordApiURL")); + RadioButton radioButton = radWebProtocolS2K; + RadioButton radioButton2 = radWebProtocolOld; + radWebProtocolDefault.Checked = false; + radioButton2.Checked = false; + radioButton.Checked = false; + string configValue = ConfigUtlis.getConfigValue("webProtocol"); + if (AppSysConfig.getConfig("DefaultWebProtocolType") == "1") + { + radWebProtocolDefault.Text += " (新)"; + } + else + { + radWebProtocolDefault.Text += " (旧)"; + } + if (!string.IsNullOrEmpty(configValue)) + { + if (configValue == "s2k") + { + radWebProtocolS2K.Checked = true; + } + else + { + radWebProtocolOld.Checked = true; + } + } + else + { + radWebProtocolDefault.Checked = true; + } + txtApiAccountName.Text = Tools.ToUrlDecode(ConfigUtlis.getConfigValue("txtApiAccountName")); + txtApiAccountPwd.Text = Tools.ToUrlDecode(ConfigUtlis.getConfigValue("txtApiAccountPwd")); + txtTpsHost.Text = Tools.ToUrlDecode(ConfigUtlis.getConfigValue("txtTpsHost")); + txtTpsPort.Text = ConfigUtlis.getConfigValue("txtTpsPort"); + txtTpsUserName.Text = ConfigUtlis.getConfigValue("txtTpsUserName"); + txtTpsPwd.Text = ConfigUtlis.getConfigValue("txtTpsPwd"); + txtAdslUserName.Text = ConfigUtlis.getConfigValue("txtAdslUserName"); + txtAdslPwd.Text = ConfigUtlis.getConfigValue("txtAdslPwd"); + txtAdslIdCount.Text = ConfigUtlis.getConfigValue("txtAdslIdCount"); + if (string.IsNullOrEmpty(txtAdslIdCount.Text)) + { + txtAdslIdCount.Text = "10"; + } + string configValue2 = ConfigUtlis.getConfigValue("HttpAgentRouteLine"); + int num = Tools.ToInt(ConfigUtlis.getConfigValue("ThredSize"), 4); + txtThredSize.Text = num.ToString(); + int num2 = 0; + string config = AppSysConfig.getConfig("HttpAgentRoute"); + int num3 = 20; + int num4 = 80; + string[] array = config.Split('|'); + for (int i = 0; i < array.Length; i++) + { + string[] array2 = array[i].Split(','); + if (array2.Length == 3) + { + if (!(configValue2 == array2[0]) && (!string.IsNullOrEmpty(configValue2) || num2 != 0)) + { + addCkeckBox(array2[1] + "(" + array2[0] + ")", num3, ckSate: false, array2[0], num4); + } + else + { + addCkeckBox(array2[1] + "(" + array2[0] + ")", num3, ckSate: true, array2[0], num4); + } + num3 += int.Parse(array2[2]); + num2++; + if (num2 == 4) + { + num3 = 20; + num4 = 120; + } + } + } + comNetworkConfig.SelectedIndex = selectedIndex; + string config2 = AppSysConfig.getConfig("SystemProxyThredSize"); + string config3 = AppSysConfig.getConfig("OtherProxyThredSize"); + string config4 = AppSysConfig.getConfig("ThredSizeDefault"); + labProxyThreadTip.Text = labProxyThreadTip.Text.Replace("{sys}", config2).Replace("{other}", config3).Replace("{default}", config4); + getNowIp(); + } + + private async void getNowIp() + { + txtNowIp.Text = "加载中..."; + string text = await Task.Run(delegate + { + IpInfoModel ipInfoModel = ProxyRunService.loadIPInfo(); + return (ipInfoModel == null) ? "获取失败" : ipInfoModel.ip; + }); + txtNowIp.Text = text; + } + + private void tabPage3_Click(object sender, EventArgs e) + { + } + + private void btnNetWorkApiTest_Click(object sender, EventArgs e) + { + if (checkNetApi(txtNetWordApiURL.Text)) + { + HttpHelper httpHelper = new HttpHelper(); + HttpItem httpItem = new HttpItem + { + URL = txtNetWordApiURL.Text, + Method = "GET", + Timeout = 20000, + ReadWriteTimeout = 20000, + UserAgent = "liuyeu_proxy_AppleBatch_June" + }; + httpItem.Header.Add("liyueToken", ProxyRunService.getVerifyToken("checkNetApi")); + HttpResult html = httpHelper.GetHtml(httpItem); + insertLog(string.Concat("测试提取IP返回:", html.StatusCode, "\n", html.Html)); + } + } + + private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + Clipboard.SetText(txtNowIp.Text); + MessageBox.Show("当前IP复制成功"); + } + + private void comNetworkConfig_SelectedIndexChanged(object sender, EventArgs e) + { + hideAllPage(); + switch (comNetworkConfig.SelectedIndex) + { + case 0: + tabConfig.SelectedIndex = 0; + txtThredSize.Enabled = true; + pageDefault.Enabled = true; + tabConfig.SelectedIndex = 0; + break; + case 1: + txtThredSize.Enabled = true; + pageApi.Enabled = true; + tabConfig.SelectedIndex = 1; + break; + case 2: + txtThredSize.Enabled = true; + pageSuidao.Enabled = true; + tabConfig.SelectedIndex = 2; + break; + case 3: + if (!File.Exists(AppDomain.CurrentDomain.BaseDirectory + "DotRas.dll")) + { + if (MessageBox.Show("没有宽带拨号插件,是否下载?下载会关闭程序", "提示", MessageBoxButtons.OKCancel) == DialogResult.OK) + { + StartProcess("update.exe", new string[2] + { + ApiNetReq.host + "/AppleClientApi/getUpFile?version=1.0.0", + "AppleBatch_June.exe" + }); + Close(); + Environment.Exit(0); + } + else + { + pageBohao.Enabled = false; + tabConfig.SelectedIndex = 0; + comNetworkConfig.SelectedIndex = 0; + } + } + else + { + pageBohao.Enabled = true; + tabConfig.SelectedIndex = 3; + } + break; + } + txtThredSize_TextChanged(null, null); + } + + private bool StartProcess(string filename, string[] args) + { + try + { + string text = ""; + foreach (string text2 in args) + { + text = text + text2 + " "; + } + text = text.Trim(); + Process process = new Process(); + ProcessStartInfo startInfo = new ProcessStartInfo(filename, text); + process.StartInfo = startInfo; + process.StartInfo.UseShellExecute = false; + process.Start(); + return true; + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + MessageBox.Show("启动应用程序时出错!原因:" + ex.Message); + } + return false; + } + + private void hideAllPage() + { + pageApi.Enabled = false; + pageBohao.Enabled = false; + pageSuidao.Enabled = false; + txtThredSize.Enabled = false; + pageDefault.Enabled = false; + } + + public void insertLog(string logText) + { + if (!base.IsDisposed && base.IsHandleCreated) + { + BeginInvoke((Action)delegate + { + txtLog.Text = txtLog.Text.Insert(0, DateTime.Now.ToString("HH:mm:ss") + " " + logText + "\n"); + }); + } + } + + private void btnSaveSetting_Click(object sender, EventArgs e) + { + if (MessageBox.Show("确定使用 " + comNetworkConfig.Text + " 吗?", "提示", MessageBoxButtons.OKCancel) != DialogResult.OK) + { + return; + } + Console.WriteLine("DefaultConnectionLimit:" + ServicePointManager.DefaultConnectionLimit); + ProxyRunService.resetProxyData(); + ProxyAccountCache.ReclassifyAccountAll(); + int thredSizeNum = 2; + if (!SaveNetConfig(out thredSizeNum)) + { + return; + } + ConfigUtlis.saveConfigKey("ThredSize", thredSizeNum.ToString()); + ConfigUtlis.saveConfigKey("comNetworkConfig", comNetworkConfig.SelectedIndex.ToString()); + ThreadPool.SetMinThreads(Tools.getTaskSize(openVpn: true, 1000) * 2, Tools.getTaskSize(openVpn: true, 1000)); + string text = radWebProtocolDefault.Text; + if (!radWebProtocolDefault.Checked) + { + text = ((!radWebProtocolS2K.Checked) ? (text = radWebProtocolOld.Text.ToString()) : (text = radWebProtocolS2K.Text.ToString())); + if (radWebProtocolS2K.Checked) + { + AppSysConfig.webProtocolS2k = true; + ConfigUtlis.saveConfigKey("webProtocol", "s2k"); + } + else + { + ConfigUtlis.saveConfigKey("webProtocol", "old"); + AppSysConfig.webProtocolS2k = false; + } + } + else + { + ConfigUtlis.saveConfigKey("webProtocol", ""); + AppSysConfig.webProtocolS2k = ((AppSysConfig.getConfig("DefaultWebProtocolType") == "1") ? true : false); + } + insertLog("配置保存成功,当前使用的代理模式是:" + comNetworkConfig.Text + ",线程数量是:" + Tools.getTaskSize(openVpn: true, 1000) + ",登录协议:" + text + "\n提示:只有勾选 【 使用随机IP代理 】 时才会使用配置的代理 "); + MessageBox.Show("保存成功"); + } + + private bool SaveNetConfig(out int thredSizeNum) + { + int num = 2; + if (comNetworkConfig.SelectedIndex != 1 && comNetworkConfig.SelectedIndex != 2 && comNetworkConfig.SelectedIndex != 0) + { + num = Tools.ToInt(AppSysConfig.getConfig("ThredSizeDefault"), 2); + ConfigUtlis.saveConfigKey("HttpAgentRouteLine", RadioHttpAgentRouteLine); + } + else + { + num = ((!int.TryParse(txtThredSize.Text, out var result)) ? Tools.ToInt(AppSysConfig.getConfig("ThredSizeDefault"), 2) : result); + if (comNetworkConfig.SelectedIndex == 0) + { + ConfigUtlis.saveConfigKey("HttpAgentRouteLine", RadioHttpAgentRouteLine); + } + } + thredSizeNum = num; + switch (comNetworkConfig.SelectedIndex) + { + case 0: + return true; + case 1: + txtNetWordApiURL.Text.Trim(); + if (checkNetApi(txtNetWordApiURL.Text)) + { + ConfigUtlis.saveConfigKey("txtNetWordApiURL", Tools.ToUrlEncode(txtNetWordApiURL.Text.Trim())); + ConfigUtlis.saveConfigKey("txtApiAccountName", txtApiAccountName.Text.Trim()); + ConfigUtlis.saveConfigKey("txtApiAccountPwd", txtApiAccountPwd.Text.Trim()); + return true; + } + break; + case 2: + if (checkTps(txtTpsHost.Text, txtTpsPort.Text, txtTpsUserName.Text, txtTpsPwd.Text)) + { + ConfigUtlis.saveConfigKey("txtTpsHost", Tools.ToUrlEncode(txtTpsHost.Text.Trim())); + ConfigUtlis.saveConfigKey("txtTpsPort", txtTpsPort.Text.Trim()); + ConfigUtlis.saveConfigKey("txtTpsUserName", txtTpsUserName.Text.Trim()); + ConfigUtlis.saveConfigKey("txtTpsPwd", txtTpsPwd.Text.Trim()); + return true; + } + break; + case 3: + if (checkAdsl(txtAdslUserName.Text, txtAdslPwd.Text, txtAdslIdCount.Text)) + { + ConfigUtlis.saveConfigKey("txtAdslUserName", txtAdslUserName.Text.Trim()); + ConfigUtlis.saveConfigKey("txtAdslPwd", txtAdslPwd.Text.Trim()); + ConfigUtlis.saveConfigKey("txtAdslIdCount", txtAdslIdCount.Text.Trim()); + return true; + } + break; + } + return false; + } + + private bool checkNetApi(string netWordApiURL) + { + if (!string.IsNullOrEmpty(netWordApiURL)) + { + if (!netWordApiURL.StartsWith("http://", StringComparison.OrdinalIgnoreCase) && !netWordApiURL.StartsWith("https://", StringComparison.OrdinalIgnoreCase)) + { + MessageBox.Show("API提取地址格式不正确"); + return false; + } + return true; + } + MessageBox.Show("请选输入API提取地址"); + return false; + } + + private bool checkTps(string host, string proty, string userName, string pwd) + { + if (!string.IsNullOrEmpty(host)) + { + if (int.TryParse(proty, out var _)) + { + if (!string.IsNullOrEmpty(host)) + { + if (!string.IsNullOrEmpty(host)) + { + return true; + } + MessageBox.Show("请输入密码"); + } + else + { + MessageBox.Show("请输入用户名"); + } + } + else + { + MessageBox.Show("请输入正确的端口号"); + } + } + else + { + MessageBox.Show("请输入隧道地址"); + } + return false; + } + + private bool checkAdsl(string adslUserName, string adsalPwd, string adslCount) + { + if (!string.IsNullOrEmpty(adslUserName)) + { + if (int.TryParse(adslCount, out var _)) + { + if (!string.IsNullOrEmpty(adslCount)) + { + return true; + } + MessageBox.Show("请输入密码"); + } + else + { + MessageBox.Show("请输入正确的数量"); + } + } + else + { + MessageBox.Show("请输入宽带账号"); + } + return false; + } + + private void btnClose_Click(object sender, EventArgs e) + { + Close(); + } + + private void btnTpsTest_Click(object sender, EventArgs e) + { + if (checkTps(txtTpsHost.Text, txtTpsPort.Text, txtTpsUserName.Text, txtTpsPwd.Text)) + { + WebProxy webProxy = new WebProxy(); + if (!txtTpsHost.Text.StartsWith("http://", StringComparison.OrdinalIgnoreCase) && !txtTpsHost.Text.StartsWith("https://", StringComparison.OrdinalIgnoreCase)) + { + webProxy.Address = new Uri($"http://{txtTpsHost.Text}:{txtTpsPort.Text}"); + } + else + { + webProxy.Address = new Uri($"{txtTpsHost.Text}:{txtTpsPort.Text}"); + } + webProxy.Credentials = new NetworkCredential(txtTpsUserName.Text, txtTpsPwd.Text); + HttpHelper httpHelper = new HttpHelper(); + HttpItem httpItem = new HttpItem + { + URL = "http://myip.top", + Method = "GET", + Timeout = 30000, + ReadWriteTimeout = 30000, + WebProxy = webProxy + }; + httpItem.KeepAlive = false; + HttpResult html = httpHelper.GetHtml(httpItem); + insertLog(string.Concat("隧道地址测试返回: ", html.StatusCode, " \n", html.Html)); + } + } + + private void btnAdslTest_Click(object sender, EventArgs e) + { + if (checkAdsl(txtAdslUserName.Text, txtAdslPwd.Text, txtAdslIdCount.Text)) + { + insertLog("断开宽带连接"); + RasTools.Disconnect(); + insertLog("开始宽带重新拨号"); + if (RasTools.Connect(txtAdslUserName.Text.Trim(), txtAdslPwd.Text.Trim(), out var errMsg)) + { + insertLog("重新拨号成功"); + } + else + { + insertLog("拨号失败:" + errMsg); + } + } + } + + private void button1_Click(object sender, EventArgs e) + { + HttpHelper httpHelper = new HttpHelper(); + HttpItem item = new HttpItem + { + URL = "http://myip.top/", + Method = "GET", + Timeout = 30000, + ReadWriteTimeout = 30000, + WebProxy = WebRequest.DefaultWebProxy + }; + HttpResult html = httpHelper.GetHtml(item); + insertLog(string.Concat("测试获取IP返回: ", html.StatusCode, " \n", html.Html)); + } + + public List getIPListArray(string IpReust, string authenUserInfo) + { + int num = 10; + List list = new List(); + Regex regex = new Regex("((?:(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d))))"); + string value = new Regex("\\[([\\s\\S]*?)\\]").Match(IpReust).Groups[1].Value; + string[] array; + if (!string.IsNullOrEmpty(value)) + { + try + { + dynamic val = Tools.Todejosn(("[" + value + "]").ToLower()); + ApiJsonParameterPase(AppSysConfig.getConfig("GetApiJsonParameter"), out var ipParameter, out var proParameter, out var expireTimeParameter); + foreach (object item in val) + { + Dictionary dictionary = (Dictionary)(dynamic)item; + string text = ""; + array = ipParameter; + foreach (string key in array) + { + if (dictionary.ContainsKey(key)) + { + text = (dynamic)dictionary[key]; + break; + } + } + int num2 = 0; + array = proParameter; + foreach (string key2 in array) + { + if (dictionary.ContainsKey(key2)) + { + dynamic val2 = dictionary[key2]; + if (val2 is int) + { + num2 = val2; + } + else + { + _ = (string)val2; + int.TryParse(val2, out num2); + } + break; + } + } + string text2 = ""; + array = expireTimeParameter; + foreach (string key3 in array) + { + if (dictionary.ContainsKey(key3)) + { + text2 = (dynamic)dictionary[key3]; + break; + } + } + if (string.IsNullOrEmpty(text2) && dictionary.ContainsKey("timeout")) + { + int? num3 = dictionary["timeout"] as int?; + if (num3.HasValue) + { + text2 = DateTime.Now.AddSeconds(num3.Value).ToString("yyyy-MM-dd HH:mm:ss"); + } + } + if (text2.Contains("addMinTime".ToLower())) + { + int num4 = Tools.ToInt(new Regex("\\(([\\s\\S]*?)\\)", RegexOptions.IgnoreCase).Match(text2).Groups[1].Value, 0); + if (num4 > 0) + { + text2 = DateTime.Now.AddMinutes(num4).ToString("yyyy-MM-dd HH:mm:ss"); + } + } + if (num2 > 0 && !text.Contains(":")) + { + text = text + ":" + num2; + } + if (!string.IsNullOrEmpty(authenUserInfo)) + { + text = authenUserInfo + "@" + text; + } + if (text.Substring(text.IndexOf('@') + 1).Split(':').Length == 2 && regex.IsMatch(text.Substring(text.IndexOf('@') + 1).Split(':')[0])) + { + DateTime? expirationTime = null; + if (DateTime.TryParse(text2, out var result)) + { + expirationTime = ((!(result > DateTime.Now.AddMinutes(num))) ? new DateTime?(result) : new DateTime?(DateTime.Now.AddMinutes(num))); + } + list.Add(new ProxyIpModel + { + expirationTime = expirationTime, + type = 0, + userCount = 0, + tunnelProxy = "", + prixyIp = text + }); + } + } + return list; + } + catch (Exception) + { + return list; + } + } + array = IpReust.Split('\n'); + for (int i = 0; i < array.Length; i++) + { + string text3 = array[i].Replace("\r", "").Replace("\n", ""); + if (!string.IsNullOrEmpty(authenUserInfo)) + { + text3 = authenUserInfo + "@" + text3; + } + if (text3.Substring(text3.IndexOf('@') + 1).Split(':').Length == 2 && regex.IsMatch(text3.Substring(text3.IndexOf('@') + 1).Split(':')[0])) + { + list.Add(new ProxyIpModel + { + expirationTime = null, + type = 0, + userCount = 0, + tunnelProxy = "", + prixyIp = text3 + }); + } + } + return list; + } + + private static void ApiJsonParameterPase(string suore, out string[] ipParameter, out string[] proParameter, out string[] expireTimeParameter) + { + ipParameter = new string[1] { "ip" }; + proParameter = new string[1] { "port" }; + expireTimeParameter = new string[1] { "expire_time" }; + string[] array = suore.Split('|'); + foreach (string text in array) + { + if (text.StartsWith("ip=")) + { + ipParameter = text.Split('=')[1].Split(',').ToArray(); + } + if (text.StartsWith("port=")) + { + proParameter = text.Split('=')[1].Split(',').ToArray(); + } + if (text.StartsWith("expireTime=")) + { + expireTimeParameter = text.Split('=')[1].Split(',').ToArray(); + } + } + } + + private void button2_Click(object sender, EventArgs e) + { + if (!checkNetApi(txtNetWordApiURL.Text)) + { + return; + } + HttpHelper httpHelper = new HttpHelper(); + HttpItem httpItem = new HttpItem + { + URL = txtNetWordApiURL.Text, + Method = "GET", + Timeout = 20000, + ReadWriteTimeout = 20000, + UserAgent = "liuyeu_proxy_AppleBatch_June" + }; + httpItem.Header.Add("liyueToken", ProxyRunService.getVerifyToken("checkNetApi")); + HttpResult html = httpHelper.GetHtml(httpItem); + insertLog(string.Concat("测试提取IP返回:", html.StatusCode, "\n", html.Html)); + if (html.StatusCode != HttpStatusCode.OK) + { + return; + } + int num = 0; + string text = txtApiAccountName.Text; + string text2 = txtApiAccountPwd.Text; + string authenUserInfo = ""; + if (!string.IsNullOrEmpty(text) && !string.IsNullOrEmpty(text2)) + { + authenUserInfo = text + ":" + text2; + } + foreach (ProxyIpModel pitem in getIPListArray(html.Html, authenUserInfo)) + { + if (num <= 5) + { + ProxyIpModel ipitem = pitem; + Task.Run(delegate + { + string uRL = "http://myip.top"; + HttpItem item = new HttpItem + { + URL = uRL, + Method = "GET", + Timeout = 30000, + ReadWriteTimeout = 30000, + WebProxy = new WebProxy(ipitem.prixyIp.Replace("\r", "")) + }; + HttpResult html2 = new HttpHelper().GetHtml(item); + insertLog(string.Concat("测试获取IP[", pitem.prixyIp.Replace("\r", ""), "]返回: ", html2.StatusCode, " \n", html2.Html)); + }); + } + num++; + } + } + + private void addCkeckBox(string txt, int pi, bool ckSate, string id, int y) + { + if (ckSate) + { + RadioHttpAgentRouteLine = id; + } + RadioButton radioButton = new RadioButton(); + radioButton.AutoSize = true; + radioButton.Font = new Font("微软雅黑", 10.5f, FontStyle.Regular, GraphicsUnit.Point, 134); + radioButton.Location = new Point(pi, y); + radioButton.Size = new Size(70, 24); + radioButton.TabIndex = 0; + radioButton.Checked = ckSate; + radioButton.Text = txt; + radioButton.Tag = id; + radioButton.UseVisualStyleBackColor = true; + radioButton.CheckedChanged += radioButton1_CheckedChanged; + pageDefault.Controls.Add(radioButton); + } + + private void checkBox1_CheckedChanged(object sender, EventArgs e) + { + } + + private void radioButton1_CheckedChanged(object sender, EventArgs e) + { + if (((RadioButton)sender).Checked) + { + RadioHttpAgentRouteLine = ((RadioButton)sender).Tag.ToString(); + } + } + + private void txtNowIp_TextChanged(object sender, EventArgs e) + { + } + + private void txtThredSize_TextChanged(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(txtThredSize.Text)) + { + return; + } + if (comNetworkConfig.SelectedIndex != 1 && comNetworkConfig.SelectedIndex != 2) + { + if (comNetworkConfig.SelectedIndex != 0) + { + return; + } + string[] array = AppSysConfig.getConfig("SystemProxyThredSize").Split('-'); + if (int.TryParse(array[0].Trim(), out var result) && int.TryParse(array[1].Trim(), out var result2) && int.TryParse(txtThredSize.Text, out var result3)) + { + if (result3 < result) + { + txtThredSize.Text = result.ToString(); + } + if (result3 > result2) + { + txtThredSize.Text = AppSysConfig.getConfig("ThredSizeDefault"); + } + } + return; + } + string[] array2 = AppSysConfig.getConfig("OtherProxyThredSize").Split('-'); + if (int.TryParse(array2[0].Trim(), out var result4) && int.TryParse(array2[1].Trim(), out var result5) && int.TryParse(txtThredSize.Text, out var result6)) + { + if (result6 < result4) + { + txtThredSize.Text = result4.ToString(); + } + if (result6 > result5) + { + txtThredSize.Text = result5.ToString(); + } + } + } + + private void radWebProtocolS2K_CheckedChanged(object sender, EventArgs e) + { + } + + private void radWebProtocolOld_CheckedChanged(object sender, EventArgs e) + { + } + + protected override void Dispose(bool disposing) + { + if (disposing && components != null) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AppleBatch_June.FormNetwork)); + this.label2 = new System.Windows.Forms.Label(); + this.comNetworkConfig = new System.Windows.Forms.ComboBox(); + this.btnSaveSetting = new System.Windows.Forms.Button(); + this.btnClose = new System.Windows.Forms.Button(); + this.tabConfig = new System.Windows.Forms.TabControl(); + this.pageDefault = new System.Windows.Forms.TabPage(); + this.label5 = new System.Windows.Forms.Label(); + this.pageApi = new System.Windows.Forms.TabPage(); + this.txtApiAccountPwd = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.txtApiAccountName = new System.Windows.Forms.TextBox(); + this.label16 = new System.Windows.Forms.Label(); + this.button2 = new System.Windows.Forms.Button(); + this.label13 = new System.Windows.Forms.Label(); + this.btnNetWorkApiTest = new System.Windows.Forms.Button(); + this.txtNetWordApiURL = new System.Windows.Forms.TextBox(); + this.label12 = new System.Windows.Forms.Label(); + this.pageSuidao = new System.Windows.Forms.TabPage(); + this.txtTpsPort = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.txtTpsPwd = new System.Windows.Forms.TextBox(); + this.label9 = new System.Windows.Forms.Label(); + this.btnTpsTest = new System.Windows.Forms.Button(); + this.txtTpsUserName = new System.Windows.Forms.TextBox(); + this.label10 = new System.Windows.Forms.Label(); + this.txtTpsHost = new System.Windows.Forms.TextBox(); + this.label11 = new System.Windows.Forms.Label(); + this.pageBohao = new System.Windows.Forms.TabPage(); + this.label3 = new System.Windows.Forms.Label(); + this.button1 = new System.Windows.Forms.Button(); + this.txtAdslIdCount = new System.Windows.Forms.TextBox(); + this.label8 = new System.Windows.Forms.Label(); + this.btnAdslTest = new System.Windows.Forms.Button(); + this.txtAdslPwd = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); + this.txtAdslUserName = new System.Windows.Forms.TextBox(); + this.label7 = new System.Windows.Forms.Label(); + this.label14 = new System.Windows.Forms.Label(); + this.txtNowIp = new System.Windows.Forms.TextBox(); + this.linkLabel1 = new System.Windows.Forms.LinkLabel(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.txtLog = new System.Windows.Forms.RichTextBox(); + this.label50 = new System.Windows.Forms.Label(); + this.labProxyThreadTip = new System.Windows.Forms.Label(); + this.txtThredSize = new System.Windows.Forms.TextBox(); + this.label15 = new System.Windows.Forms.Label(); + this.panel1 = new System.Windows.Forms.Panel(); + this.radWebProtocolDefault = new System.Windows.Forms.RadioButton(); + this.radWebProtocolOld = new System.Windows.Forms.RadioButton(); + this.radWebProtocolS2K = new System.Windows.Forms.RadioButton(); + this.tabConfig.SuspendLayout(); + this.pageDefault.SuspendLayout(); + this.pageApi.SuspendLayout(); + this.pageSuidao.SuspendLayout(); + this.pageBohao.SuspendLayout(); + this.groupBox3.SuspendLayout(); + this.panel1.SuspendLayout(); + base.SuspendLayout(); + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.label2.ForeColor = System.Drawing.Color.Red; + this.label2.Location = new System.Drawing.Point(9, 18); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(80, 17); + this.label2.TabIndex = 1; + this.label2.Text = "选择代理类型"; + this.comNetworkConfig.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comNetworkConfig.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.comNetworkConfig.FormattingEnabled = true; + this.comNetworkConfig.Items.AddRange(new object[4] { "系统默认代理", "API代理提取", "隧道代理", "宽带拨号" }); + this.comNetworkConfig.Location = new System.Drawing.Point(95, 13); + this.comNetworkConfig.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.comNetworkConfig.Name = "comNetworkConfig"; + this.comNetworkConfig.Size = new System.Drawing.Size(140, 25); + this.comNetworkConfig.TabIndex = 2; + this.comNetworkConfig.SelectedIndexChanged += new System.EventHandler(comNetworkConfig_SelectedIndexChanged); + this.btnSaveSetting.Font = new System.Drawing.Font("微软雅黑", 10.5f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.btnSaveSetting.ForeColor = System.Drawing.Color.Green; + this.btnSaveSetting.Location = new System.Drawing.Point(263, 363); + this.btnSaveSetting.Name = "btnSaveSetting"; + this.btnSaveSetting.Size = new System.Drawing.Size(115, 35); + this.btnSaveSetting.TabIndex = 3; + this.btnSaveSetting.Text = "保存设置"; + this.btnSaveSetting.UseVisualStyleBackColor = true; + this.btnSaveSetting.Click += new System.EventHandler(btnSaveSetting_Click); + this.btnClose.ForeColor = System.Drawing.Color.Red; + this.btnClose.Location = new System.Drawing.Point(83, 364); + this.btnClose.Name = "btnClose"; + this.btnClose.Size = new System.Drawing.Size(106, 35); + this.btnClose.TabIndex = 4; + this.btnClose.Text = "关闭"; + this.btnClose.UseVisualStyleBackColor = true; + this.btnClose.Click += new System.EventHandler(btnClose_Click); + this.tabConfig.Controls.Add(this.pageDefault); + this.tabConfig.Controls.Add(this.pageApi); + this.tabConfig.Controls.Add(this.pageSuidao); + this.tabConfig.Controls.Add(this.pageBohao); + this.tabConfig.Location = new System.Drawing.Point(30, 45); + this.tabConfig.Name = "tabConfig"; + this.tabConfig.SelectedIndex = 0; + this.tabConfig.Size = new System.Drawing.Size(450, 205); + this.tabConfig.TabIndex = 5; + this.pageDefault.Controls.Add(this.label5); + this.pageDefault.Location = new System.Drawing.Point(4, 26); + this.pageDefault.Name = "pageDefault"; + this.pageDefault.Size = new System.Drawing.Size(442, 175); + this.pageDefault.TabIndex = 3; + this.pageDefault.Text = "系统代理路线"; + this.pageDefault.UseVisualStyleBackColor = true; + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(17, 22); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(199, 17); + this.label5.TabIndex = 3; + this.label5.Text = "请选择ip代理路线。默认选择第一个"; + this.pageApi.Controls.Add(this.txtApiAccountPwd); + this.pageApi.Controls.Add(this.label4); + this.pageApi.Controls.Add(this.txtApiAccountName); + this.pageApi.Controls.Add(this.label16); + this.pageApi.Controls.Add(this.button2); + this.pageApi.Controls.Add(this.label13); + this.pageApi.Controls.Add(this.btnNetWorkApiTest); + this.pageApi.Controls.Add(this.txtNetWordApiURL); + this.pageApi.Controls.Add(this.label12); + this.pageApi.Location = new System.Drawing.Point(4, 26); + this.pageApi.Name = "pageApi"; + this.pageApi.Padding = new System.Windows.Forms.Padding(3); + this.pageApi.Size = new System.Drawing.Size(442, 175); + this.pageApi.TabIndex = 0; + this.pageApi.Text = "API代理提取"; + this.pageApi.UseVisualStyleBackColor = true; + this.txtApiAccountPwd.Location = new System.Drawing.Point(250, 67); + this.txtApiAccountPwd.Name = "txtApiAccountPwd"; + this.txtApiAccountPwd.Size = new System.Drawing.Size(119, 23); + this.txtApiAccountPwd.TabIndex = 26; + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(213, 72); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(32, 17); + this.label4.TabIndex = 27; + this.label4.Text = "密码"; + this.txtApiAccountName.Location = new System.Drawing.Point(90, 67); + this.txtApiAccountName.Name = "txtApiAccountName"; + this.txtApiAccountName.Size = new System.Drawing.Size(111, 23); + this.txtApiAccountName.TabIndex = 25; + this.label16.AutoSize = true; + this.label16.Location = new System.Drawing.Point(15, 71); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(68, 17); + this.label16.TabIndex = 24; + this.label16.Text = "认证用户名"; + this.button2.Location = new System.Drawing.Point(148, 100); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(119, 26); + this.button2.TabIndex = 23; + this.button2.Text = "提取并测试访问"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(button2_Click); + this.label13.AutoSize = true; + this.label13.ForeColor = System.Drawing.Color.DarkRed; + this.label13.Location = new System.Drawing.Point(6, 133); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(403, 34); + this.label13.TabIndex = 22; + this.label13.Text = "温馨提示:API选择 数据格式 选 【TXT】 分割符选 【回车换行(\\r\\n)】\r\n 单次提取IP,尽量设置1-5个IP,白名单认证不用填用户名和密码"; + this.btnNetWorkApiTest.Location = new System.Drawing.Point(23, 100); + this.btnNetWorkApiTest.Name = "btnNetWorkApiTest"; + this.btnNetWorkApiTest.Size = new System.Drawing.Size(92, 26); + this.btnNetWorkApiTest.TabIndex = 21; + this.btnNetWorkApiTest.Text = "提取测试"; + this.btnNetWorkApiTest.UseVisualStyleBackColor = true; + this.btnNetWorkApiTest.Click += new System.EventHandler(btnNetWorkApiTest_Click); + this.txtNetWordApiURL.Location = new System.Drawing.Point(23, 33); + this.txtNetWordApiURL.Name = "txtNetWordApiURL"; + this.txtNetWordApiURL.Size = new System.Drawing.Size(405, 23); + this.txtNetWordApiURL.TabIndex = 19; + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(20, 13); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(75, 17); + this.label12.TabIndex = 18; + this.label12.Text = "API提取地址"; + this.pageSuidao.Controls.Add(this.txtTpsPort); + this.pageSuidao.Controls.Add(this.label1); + this.pageSuidao.Controls.Add(this.txtTpsPwd); + this.pageSuidao.Controls.Add(this.label9); + this.pageSuidao.Controls.Add(this.btnTpsTest); + this.pageSuidao.Controls.Add(this.txtTpsUserName); + this.pageSuidao.Controls.Add(this.label10); + this.pageSuidao.Controls.Add(this.txtTpsHost); + this.pageSuidao.Controls.Add(this.label11); + this.pageSuidao.Location = new System.Drawing.Point(4, 26); + this.pageSuidao.Name = "pageSuidao"; + this.pageSuidao.Padding = new System.Windows.Forms.Padding(3); + this.pageSuidao.Size = new System.Drawing.Size(442, 175); + this.pageSuidao.TabIndex = 1; + this.pageSuidao.Text = "隧道代理"; + this.pageSuidao.UseVisualStyleBackColor = true; + this.txtTpsPort.Location = new System.Drawing.Point(100, 52); + this.txtTpsPort.Name = "txtTpsPort"; + this.txtTpsPort.Size = new System.Drawing.Size(101, 23); + this.txtTpsPort.TabIndex = 18; + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(23, 55); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(62, 17); + this.label1.TabIndex = 23; + this.label1.Text = "HTTP端口"; + this.txtTpsPwd.Location = new System.Drawing.Point(312, 85); + this.txtTpsPwd.Name = "txtTpsPwd"; + this.txtTpsPwd.Size = new System.Drawing.Size(119, 23); + this.txtTpsPwd.TabIndex = 20; + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(275, 90); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(32, 17); + this.label9.TabIndex = 21; + this.label9.Text = "密码"; + this.btnTpsTest.Location = new System.Drawing.Point(100, 124); + this.btnTpsTest.Name = "btnTpsTest"; + this.btnTpsTest.Size = new System.Drawing.Size(101, 26); + this.btnTpsTest.TabIndex = 20; + this.btnTpsTest.Text = "访问网页测试"; + this.btnTpsTest.UseVisualStyleBackColor = true; + this.btnTpsTest.Click += new System.EventHandler(btnTpsTest_Click); + this.txtTpsUserName.Location = new System.Drawing.Point(100, 86); + this.txtTpsUserName.Name = "txtTpsUserName"; + this.txtTpsUserName.Size = new System.Drawing.Size(169, 23); + this.txtTpsUserName.TabIndex = 19; + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(17, 89); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(68, 17); + this.label10.TabIndex = 18; + this.label10.Text = "隧道用户名"; + this.txtTpsHost.Location = new System.Drawing.Point(100, 16); + this.txtTpsHost.Name = "txtTpsHost"; + this.txtTpsHost.Size = new System.Drawing.Size(331, 23); + this.txtTpsHost.TabIndex = 17; + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(6, 19); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(91, 17); + this.label11.TabIndex = 16; + this.label11.Text = "隧道地址(Host)"; + this.pageBohao.Controls.Add(this.label3); + this.pageBohao.Controls.Add(this.button1); + this.pageBohao.Controls.Add(this.txtAdslIdCount); + this.pageBohao.Controls.Add(this.label8); + this.pageBohao.Controls.Add(this.btnAdslTest); + this.pageBohao.Controls.Add(this.txtAdslPwd); + this.pageBohao.Controls.Add(this.label6); + this.pageBohao.Controls.Add(this.txtAdslUserName); + this.pageBohao.Controls.Add(this.label7); + this.pageBohao.Location = new System.Drawing.Point(4, 26); + this.pageBohao.Name = "pageBohao"; + this.pageBohao.Size = new System.Drawing.Size(442, 175); + this.pageBohao.TabIndex = 2; + this.pageBohao.Text = "宽带拨号"; + this.pageBohao.UseVisualStyleBackColor = true; + this.pageBohao.Click += new System.EventHandler(tabPage3_Click); + this.label3.AutoSize = true; + this.label3.ForeColor = System.Drawing.Color.DarkRed; + this.label3.Location = new System.Drawing.Point(31, 130); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(223, 17); + this.label3.TabIndex = 23; + this.label3.Text = "使用宽带拨号最好选用Win7 64位的系统"; + this.button1.Location = new System.Drawing.Point(274, 94); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(132, 26); + this.button1.TabIndex = 16; + this.button1.Text = "访问网页测试"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(button1_Click); + this.txtAdslIdCount.Location = new System.Drawing.Point(178, 98); + this.txtAdslIdCount.Name = "txtAdslIdCount"; + this.txtAdslIdCount.Size = new System.Drawing.Size(45, 23); + this.txtAdslIdCount.TabIndex = 12; + this.txtAdslIdCount.Text = "10"; + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(31, 103); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(141, 17); + this.label8.TabIndex = 14; + this.label8.Text = "执行多少个ID后重新拨号"; + this.btnAdslTest.Location = new System.Drawing.Point(274, 57); + this.btnAdslTest.Name = "btnAdslTest"; + this.btnAdslTest.Size = new System.Drawing.Size(76, 26); + this.btnAdslTest.TabIndex = 13; + this.btnAdslTest.Text = "测试拨号"; + this.btnAdslTest.UseVisualStyleBackColor = true; + this.btnAdslTest.Click += new System.EventHandler(btnAdslTest_Click); + this.txtAdslPwd.Location = new System.Drawing.Point(115, 60); + this.txtAdslPwd.Name = "txtAdslPwd"; + this.txtAdslPwd.Size = new System.Drawing.Size(146, 23); + this.txtAdslPwd.TabIndex = 11; + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(47, 64); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(56, 17); + this.label6.TabIndex = 11; + this.label6.Text = "宽带密码"; + this.txtAdslUserName.Location = new System.Drawing.Point(114, 19); + this.txtAdslUserName.Name = "txtAdslUserName"; + this.txtAdslUserName.Size = new System.Drawing.Size(146, 23); + this.txtAdslUserName.TabIndex = 10; + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(46, 23); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(56, 17); + this.label7.TabIndex = 9; + this.label7.Text = "宽带账号"; + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(260, 19); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(55, 17); + this.label14.TabIndex = 6; + this.label14.Text = "当前IP:"; + this.txtNowIp.Location = new System.Drawing.Point(308, 15); + this.txtNowIp.Name = "txtNowIp"; + this.txtNowIp.ReadOnly = true; + this.txtNowIp.Size = new System.Drawing.Size(132, 23); + this.txtNowIp.TabIndex = 7; + this.txtNowIp.TextChanged += new System.EventHandler(txtNowIp_TextChanged); + this.linkLabel1.AutoSize = true; + this.linkLabel1.Location = new System.Drawing.Point(445, 18); + this.linkLabel1.Name = "linkLabel1"; + this.linkLabel1.Size = new System.Drawing.Size(43, 17); + this.linkLabel1.TabIndex = 8; + this.linkLabel1.TabStop = true; + this.linkLabel1.Text = "复制IP"; + this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(linkLabel1_LinkClicked); + this.groupBox3.Controls.Add(this.txtLog); + this.groupBox3.Location = new System.Drawing.Point(12, 406); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(471, 218); + this.groupBox3.TabIndex = 10; + this.groupBox3.TabStop = false; + this.groupBox3.Text = "IP测试日志-----------勾选 使用随机IP代理 时才会使用配置的代理 "; + this.txtLog.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtLog.ForeColor = System.Drawing.Color.LightSeaGreen; + this.txtLog.Location = new System.Drawing.Point(3, 19); + this.txtLog.Name = "txtLog"; + this.txtLog.ReadOnly = true; + this.txtLog.Size = new System.Drawing.Size(465, 196); + this.txtLog.TabIndex = 0; + this.txtLog.Text = ""; + this.label50.AutoSize = true; + this.label50.Location = new System.Drawing.Point(21, 265); + this.label50.Name = "label50"; + this.label50.Size = new System.Drawing.Size(80, 17); + this.label50.TabIndex = 26; + this.label50.Text = "执行线程数量"; + this.labProxyThreadTip.AutoSize = true; + this.labProxyThreadTip.Location = new System.Drawing.Point(175, 252); + this.labProxyThreadTip.Name = "labProxyThreadTip"; + this.labProxyThreadTip.Size = new System.Drawing.Size(320, 51); + this.labProxyThreadTip.TabIndex = 28; + this.labProxyThreadTip.Text = "默认线程数量是【{default}】,调整的线程勾选代理才有效\r\n使用系统代理允许执行 【{sys}】个 线程,\r\n自定义IP代理时, 允许执行【{other}】个线程"; + this.txtThredSize.Location = new System.Drawing.Point(108, 261); + this.txtThredSize.Name = "txtThredSize"; + this.txtThredSize.Size = new System.Drawing.Size(61, 23); + this.txtThredSize.TabIndex = 29; + this.txtThredSize.Text = "4"; + this.txtThredSize.TextChanged += new System.EventHandler(txtThredSize_TextChanged); + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(6, 8); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(126, 17); + this.label15.TabIndex = 30; + this.label15.Text = "Apple网站登录协议:"; + this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel1.Controls.Add(this.radWebProtocolDefault); + this.panel1.Controls.Add(this.radWebProtocolOld); + this.panel1.Controls.Add(this.label15); + this.panel1.Controls.Add(this.radWebProtocolS2K); + this.panel1.ForeColor = System.Drawing.Color.DarkMagenta; + this.panel1.Location = new System.Drawing.Point(22, 314); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(452, 35); + this.panel1.TabIndex = 31; + this.radWebProtocolDefault.AutoSize = true; + this.radWebProtocolDefault.Checked = true; + this.radWebProtocolDefault.Location = new System.Drawing.Point(134, 6); + this.radWebProtocolDefault.Name = "radWebProtocolDefault"; + this.radWebProtocolDefault.Size = new System.Drawing.Size(50, 21); + this.radWebProtocolDefault.TabIndex = 31; + this.radWebProtocolDefault.TabStop = true; + this.radWebProtocolDefault.Text = "默认"; + this.radWebProtocolDefault.UseVisualStyleBackColor = true; + this.radWebProtocolOld.AutoSize = true; + this.radWebProtocolOld.Location = new System.Drawing.Point(336, 6); + this.radWebProtocolOld.Name = "radWebProtocolOld"; + this.radWebProtocolOld.Size = new System.Drawing.Size(86, 21); + this.radWebProtocolOld.TabIndex = 1; + this.radWebProtocolOld.Text = "旧接口协议"; + this.radWebProtocolOld.UseVisualStyleBackColor = true; + this.radWebProtocolOld.CheckedChanged += new System.EventHandler(radWebProtocolOld_CheckedChanged); + this.radWebProtocolS2K.AutoSize = true; + this.radWebProtocolS2K.Location = new System.Drawing.Point(216, 6); + this.radWebProtocolS2K.Name = "radWebProtocolS2K"; + this.radWebProtocolS2K.Size = new System.Drawing.Size(106, 21); + this.radWebProtocolS2K.TabIndex = 0; + this.radWebProtocolS2K.Text = "新协议【s2k】"; + this.radWebProtocolS2K.UseVisualStyleBackColor = true; + this.radWebProtocolS2K.CheckedChanged += new System.EventHandler(radWebProtocolS2K_CheckedChanged); + base.AutoScaleDimensions = new System.Drawing.SizeF(7f, 17f); + base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + base.ClientSize = new System.Drawing.Size(495, 643); + base.Controls.Add(this.panel1); + base.Controls.Add(this.txtThredSize); + base.Controls.Add(this.labProxyThreadTip); + base.Controls.Add(this.label50); + base.Controls.Add(this.groupBox3); + base.Controls.Add(this.linkLabel1); + base.Controls.Add(this.txtNowIp); + base.Controls.Add(this.label14); + base.Controls.Add(this.tabConfig); + base.Controls.Add(this.btnClose); + base.Controls.Add(this.btnSaveSetting); + base.Controls.Add(this.comNetworkConfig); + base.Controls.Add(this.label2); + this.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + base.Icon = (System.Drawing.Icon)resources.GetObject("$this.Icon"); + base.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + base.MaximizeBox = false; + base.MinimizeBox = false; + base.Name = "FormNetwork"; + base.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "网络和线程设置"; + base.Load += new System.EventHandler(FormNetwork_Load); + this.tabConfig.ResumeLayout(false); + this.pageDefault.ResumeLayout(false); + this.pageDefault.PerformLayout(); + this.pageApi.ResumeLayout(false); + this.pageApi.PerformLayout(); + this.pageSuidao.ResumeLayout(false); + this.pageSuidao.PerformLayout(); + this.pageBohao.ResumeLayout(false); + this.pageBohao.PerformLayout(); + this.groupBox3.ResumeLayout(false); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + base.ResumeLayout(false); + base.PerformLayout(); + } + } +} diff --git a/AppleBatch_June/FormRemovePay.cs b/AppleBatch_June/FormRemovePay.cs new file mode 100644 index 0000000..d999039 --- /dev/null +++ b/AppleBatch_June/FormRemovePay.cs @@ -0,0 +1,505 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Linq; +using System.Net; +using System.Threading.Tasks; +using System.Web; +using System.Windows.Forms; +using AppleBatch_June.Model; +using DotNet.Utilities; + +namespace AppleBatch_June +{ + public class FormRemovePay : BaseForm + { + private IContainer components; + + private TextBox textBox1; + + private Label label6; + + private GroupBox groupBox4; + + private RichTextBox txtAppleId; + + private GroupBox groupBox5; + + private Button btnStopRemovePay; + + private Button btnRemovePayLog; + + private Button btnStartRemovePay; + + private CheckBox ckRemovePayVpn; + + private Label label5; + + private Label labRemovePayDianShu; + + private Label label31; + + private GroupBox groupBox3; + + private RichTextBox txtLog; + + private ContextMenuStrip contextMenuStrip1; + + private ToolStripMenuItem 粘贴ToolStripMenuItem; + + public FormRemovePay() + : base("移除支付方式", null) + { + InitializeComponent(); + } + + private void FormRemovePay_Load(object sender, EventArgs e) + { + labRemovePayDianShu.Text = AppSysConfig.getTypeById(19).consNum.ToString(); + ckRemovePayVpn.Checked = ((ConfigUtlis.getConfigValue("ckRemovePayVpn") == "True") ? true : false); + } + + public override void insertLog(string logText) + { + if (!base.IsHandleCreated || base.IsDisposed) + { + return; + } + try + { + BeginInvoke((Action)delegate + { + txtLog.Text = txtLog.Text.Insert(0, DateTime.Now.ToString("HH:mm:ss") + " " + logText + "\n"); + }); + } + catch (Exception) + { + } + } + + private bool getPaymentList(ItunesUtlis utlis, AppleItunesLogin itunesLogin, AppleAcount acount, ref string reustMsg) + { + insertLog("查询支付方式"); + Dictionary dictionary = new Dictionary(); + dictionary.Add("X-Apple-Store-Front", itunesLogin.software); + bool result = false; + string url = "https://p" + itunesLogin.ServerId + "-buy.itunes.apple.com/account/stackable/paymentInfos?managePayments=true&guid=" + itunesLogin.Guid + "&xToken=" + HttpUtility.UrlEncode(itunesLogin.xtoken); + HttpResult jsonItunesWebContext = utlis.getJsonItunesWebContext(url, "https://finance-app.itunes.apple.com/account/manage-payments", itunesLogin, dictionary, addToken: true); + if (jsonItunesWebContext.StatusCode == HttpStatusCode.OK) + { + PaymentList paymentList = Tools.Todejosn(jsonItunesWebContext.Html); + PaymentList.Paymentinfo[] array = paymentList?.data?.attributes?.paymentInfos; + foreach (PaymentList.Paymentinfo paymentinfo in array) + { + if (paymentinfo.paymentMethodType != null && paymentinfo.paymentMethodType != "None") + { + insertLog("正在移除支付方式:" + paymentinfo.translatedDisplayNameForCC); + reustMsg += paymentinfo.translatedDisplayNameForCC; + if (DeletePayApply(utlis, paymentinfo.paymentId, itunesLogin, acount, ref reustMsg)) + { + result = true; + insertLog(acount.appleId + ",移除成功:" + paymentinfo.translatedDisplayNameForCC); + } + reustMsg += ","; + } + } + if (paymentList != null) + { + int? num = paymentList.data?.attributes?.paymentInfos.Where((PaymentList.Paymentinfo c) => c.paymentMethodType != "None").Count(); + int i = 0; + if ((num.GetValueOrDefault() == 0) & num.HasValue) + { + reustMsg += "没有支付方式需要移除"; + insertLog(acount.appleId + ",没有支付方式需要移除"); + return true; + } + } + } + return result; + } + + private bool DeletePayApply(ItunesUtlis utlis, string paymentId, AppleItunesLogin itunesLogin, AppleAcount acount, ref string reustMsg) + { + string referer = "https://finance-app.itunes.apple.com/account/manage-payments/edit-payment/" + paymentId; + string url = "https://p" + itunesLogin.ServerId + "-buy.itunes.apple.com/account/stackable/paymentInfos/" + paymentId + "/delete?guid=" + itunesLogin.Guid; + string postData = ""; + Dictionary dictionary = new Dictionary(); + dictionary.Add("X-Apple-Store-Front", "143465-19,12"); + HttpResult httpResult = utlis.postItunesWebContext(url, postData, referer, itunesLogin, dictionary); + if (httpResult.StatusCode == HttpStatusCode.OK) + { + if (httpResult.Html.Contains("account.edit-billing-stackable")) + { + reustMsg += "移除成功"; + return true; + } + Dictionary dictionary2 = (dynamic)Tools.Todejosn(httpResult.Html); + string text = "原因未知"; + text = ((!dictionary2.ContainsKey("explanation")) ? httpResult.Html : ((string)(dynamic)dictionary2["explanation"])); + reustMsg += text; + insertLog(acount.appleId + ",移除失败:" + text); + } + else + { + insertLog("请求失败,未知错误"); + } + return false; + } + + private void btnStartRemovePay_Click(object sender, EventArgs e) + { + List list = AppleUtlis.accountInput(txtAppleId.Text.Trim()); + if (list.Count == 0) + { + MessageBox.Show("请按正确格式输入ID"); + return; + } + if (base.taskState.TaskIsRun) + { + MessageBox.Show("任务还没结束,请等待"); + return; + } + insertLog("开始执行:数量:" + list.Count); + ConfigUtlis.saveConfigKey("ckRemovePayVpn", ckRemovePayVpn.Checked.ToString()); + btnStartRemovePay.Enabled = false; + base.taskState.isRun = true; + int id = 19; + int count = list.Count; + if (AppSysConfig.integral < count * AppSysConfig.getTypeById(19).consNum) + { + MessageBox.Show("账号点数不足 , 执行账号数量:" + count + " ,至少需要 " + count * AppSysConfig.getTypeById(id).consNum + " 点数。"); + } + else + { + startRemovePay(list, ckRemovePayVpn.Checked); + } + } + + public async void startRemovePay(List appleId, bool startVpn) + { + base.taskState.isRun = true; + base.taskState.TaskIsRun = true; + AppleExecuteTask.TaskRunAppleIdCount = 0L; + AppleExecuteTask.TaskRunModels.Clear(); + await Task.Run(delegate + { + string guid = Guid.NewGuid().ToString("n"); + TaskRunModel taskRunModel = new TaskRunModel + { + guid = guid, + isRuning = false + }; + AppleExecuteTask.TaskRunModels.Add(taskRunModel); + ApiNetReq.startNowFun = 19; + foreach (AppleAcount item in appleId) + { + try + { + if (!base.taskState.isRun) + { + break; + } + if (startRuning(taskRunModel, delegate(string appleid, DisplyType reustType, string dasReust2) + { + insertLog(dasReust2); + }, item.appleId)) + { + string applePwd = item.applePwd; + ItunesUtlis utlis = new ItunesUtlis(base.taskState, item.appleId, delegate(string appleKey, DisplyType type, string reust) + { + insertLog(appleKey + "," + reust); + }, startVpn); + insertLog("正在登录" + item.appleId + ",密码:" + item.applePwd); + string msg = ""; + AppleItunesLogin itunesLogin = getItunesLogin(startVpn, item, 19, utlis, ref msg); + if (msg.Contains("需要提供 Apple ID 验证码才能登录")) + { + insertLog("登录失败:" + msg); + object obj = Invoke((Func)delegate + { + VerificationCodeFrom verificationCodeFrom = new VerificationCodeFrom(); + verificationCodeFrom.AppleId = "Apple账号:" + item.appleId; + verificationCodeFrom.ShowDialog(); + return verificationCodeFrom.reustCode; + }); + if (obj.ToString().Length == 6) + { + insertLog("正在使用验证码登录"); + item.applePwd += obj.ToString(); + itunesLogin = getItunesLogin(startVpn, item, 19, utlis, ref msg); + } + } + if (itunesLogin != null) + { + insertLog("登录成功,国家:" + itunesLogin.Area); + string reustMsg = ""; + if (getPaymentList(utlis, itunesLogin, item, ref reustMsg)) + { + if (!reustMsg.Contains("没有支付方式需要移除")) + { + APIUtlis.ApiApplyAct(19, "移除支付方式"); + } + if (base.IsHandleCreated) + { + BeginInvoke((Action)delegate + { + string[] array = txtAppleId.Text.Split('\n'); + foreach (string text in array) + { + if (text.StartsWith(item.appleId)) + { + txtAppleId.Text = txtAppleId.Text.Replace(text, ""); + } + } + }); + } + } + SqliteHelper.ExecuteInsert("itunes_db", new Dictionary + { + { "type", "removePay" }, + { + "addTime", + Tools.GenerateTimeStamp().ToString() + }, + { "value1", item.appleId }, + { "value2", applePwd }, + { "value3", reustMsg } + }); + } + else + { + insertLog("ID登录失败:" + msg); + } + goto IL_0372; + } + } + catch (Exception ex) + { + APIUtlis.ApiSeriveError(ex); + insertLog("请求失败:" + ex.Message); + goto IL_0372; + } + continue; + IL_0372: + endRuning(taskRunModel); + } + }); + AppleExecuteTask.TaskRunModels.Clear(); + base.taskState.isRun = false; + base.taskState.TaskIsRun = false; + btnStartRemovePay.Enabled = true; + insertLog("执行结束"); + } + + private void btnStopRemovePay_Click(object sender, EventArgs e) + { + base.taskState.Stop(); + insertLog("正在请求停止,请稍后"); + } + + private void btnRemovePayLog_Click(object sender, EventArgs e) + { + FromDBDataQuery fromDBDataQuery = new FromDBDataQuery(); + fromDBDataQuery.sqlTitle = new Dictionary + { + { "value1", "账号|200" }, + { "value2", "密码|100" }, + { "value3", "信息|250" } + }; + fromDBDataQuery.type = "removePay"; + fromDBDataQuery.typeName = "Apple移除支付方式"; + fromDBDataQuery.Show(); + } + + private void 粘贴ToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + IDataObject dataObject = Clipboard.GetDataObject(); + if (dataObject.GetDataPresent(DataFormats.Text)) + { + txtAppleId.Text = (string)dataObject.GetData(DataFormats.Text); + } + } + catch (Exception) + { + MessageBox.Show("粘贴失败"); + } + } + + private void FormRemovePay_FormClosing(object sender, FormClosingEventArgs e) + { + base.taskState.isRun = false; + } + + protected override void Dispose(bool disposing) + { + if (disposing && components != null) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); + this.groupBox4 = new System.Windows.Forms.GroupBox(); + this.txtAppleId = new System.Windows.Forms.RichTextBox(); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.粘贴ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.groupBox5 = new System.Windows.Forms.GroupBox(); + this.btnStopRemovePay = new System.Windows.Forms.Button(); + this.btnRemovePayLog = new System.Windows.Forms.Button(); + this.btnStartRemovePay = new System.Windows.Forms.Button(); + this.ckRemovePayVpn = new System.Windows.Forms.CheckBox(); + this.label5 = new System.Windows.Forms.Label(); + this.labRemovePayDianShu = new System.Windows.Forms.Label(); + this.label31 = new System.Windows.Forms.Label(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.txtLog = new System.Windows.Forms.RichTextBox(); + this.groupBox4.SuspendLayout(); + this.contextMenuStrip1.SuspendLayout(); + this.groupBox5.SuspendLayout(); + this.groupBox3.SuspendLayout(); + base.SuspendLayout(); + this.textBox1.BackColor = System.Drawing.SystemColors.ControlLightLight; + this.textBox1.Location = new System.Drawing.Point(109, 12); + this.textBox1.Name = "textBox1"; + this.textBox1.ReadOnly = true; + this.textBox1.Size = new System.Drawing.Size(332, 21); + this.textBox1.TabIndex = 19; + this.textBox1.Text = "xxx@xx.com----密码"; + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(26, 15); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(89, 12); + this.label6.TabIndex = 18; + this.label6.Text = "输入的ID格式:"; + this.groupBox4.Controls.Add(this.txtAppleId); + this.groupBox4.Location = new System.Drawing.Point(25, 38); + this.groupBox4.Name = "groupBox4"; + this.groupBox4.Size = new System.Drawing.Size(548, 202); + this.groupBox4.TabIndex = 17; + this.groupBox4.TabStop = false; + this.groupBox4.Text = "输入AppleID 多个ID请换行"; + this.txtAppleId.ContextMenuStrip = this.contextMenuStrip1; + this.txtAppleId.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtAppleId.Location = new System.Drawing.Point(3, 17); + this.txtAppleId.Name = "txtAppleId"; + this.txtAppleId.Size = new System.Drawing.Size(542, 182); + this.txtAppleId.TabIndex = 0; + this.txtAppleId.Text = ""; + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[1] { this.粘贴ToolStripMenuItem }); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(101, 26); + this.粘贴ToolStripMenuItem.Name = "粘贴ToolStripMenuItem"; + this.粘贴ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); + this.粘贴ToolStripMenuItem.Text = "粘贴"; + this.粘贴ToolStripMenuItem.Click += new System.EventHandler(粘贴ToolStripMenuItem_Click); + this.groupBox5.Controls.Add(this.btnStopRemovePay); + this.groupBox5.Controls.Add(this.btnRemovePayLog); + this.groupBox5.Controls.Add(this.btnStartRemovePay); + this.groupBox5.Location = new System.Drawing.Point(594, 29); + this.groupBox5.Name = "groupBox5"; + this.groupBox5.Size = new System.Drawing.Size(169, 208); + this.groupBox5.TabIndex = 20; + this.groupBox5.TabStop = false; + this.groupBox5.Text = "操作"; + this.btnStopRemovePay.Location = new System.Drawing.Point(21, 117); + this.btnStopRemovePay.Name = "btnStopRemovePay"; + this.btnStopRemovePay.Size = new System.Drawing.Size(130, 24); + this.btnStopRemovePay.TabIndex = 8; + this.btnStopRemovePay.Text = "停止执行"; + this.btnStopRemovePay.UseVisualStyleBackColor = true; + this.btnStopRemovePay.Click += new System.EventHandler(btnStopRemovePay_Click); + this.btnRemovePayLog.Location = new System.Drawing.Point(21, 161); + this.btnRemovePayLog.Name = "btnRemovePayLog"; + this.btnRemovePayLog.Size = new System.Drawing.Size(86, 23); + this.btnRemovePayLog.TabIndex = 7; + this.btnRemovePayLog.Text = "移除记录"; + this.btnRemovePayLog.UseVisualStyleBackColor = true; + this.btnRemovePayLog.Click += new System.EventHandler(btnRemovePayLog_Click); + this.btnStartRemovePay.Location = new System.Drawing.Point(21, 54); + this.btnStartRemovePay.Name = "btnStartRemovePay"; + this.btnStartRemovePay.Size = new System.Drawing.Size(130, 46); + this.btnStartRemovePay.TabIndex = 6; + this.btnStartRemovePay.Text = "开始执行"; + this.btnStartRemovePay.UseVisualStyleBackColor = true; + this.btnStartRemovePay.Click += new System.EventHandler(btnStartRemovePay_Click); + this.ckRemovePayVpn.AutoSize = true; + this.ckRemovePayVpn.ForeColor = System.Drawing.Color.Red; + this.ckRemovePayVpn.Location = new System.Drawing.Point(28, 263); + this.ckRemovePayVpn.Name = "ckRemovePayVpn"; + this.ckRemovePayVpn.Size = new System.Drawing.Size(108, 16); + this.ckRemovePayVpn.TabIndex = 25; + this.ckRemovePayVpn.Text = "使用随机IP代理"; + this.ckRemovePayVpn.UseVisualStyleBackColor = true; + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(403, 264); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(293, 12); + this.label5.TabIndex = 24; + this.label5.Text = "支付方式移除成功才扣除点数,没有支付方式不扣点数\r\n"; + this.labRemovePayDianShu.AutoSize = true; + this.labRemovePayDianShu.Font = new System.Drawing.Font("微软雅黑", 10.5f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.labRemovePayDianShu.ForeColor = System.Drawing.Color.Crimson; + this.labRemovePayDianShu.Location = new System.Drawing.Point(349, 263); + this.labRemovePayDianShu.Name = "labRemovePayDianShu"; + this.labRemovePayDianShu.Size = new System.Drawing.Size(18, 19); + this.labRemovePayDianShu.TabIndex = 23; + this.labRemovePayDianShu.Text = "0"; + this.label31.AutoSize = true; + this.label31.Location = new System.Drawing.Point(278, 267); + this.label31.Name = "label31"; + this.label31.Size = new System.Drawing.Size(65, 12); + this.label31.TabIndex = 22; + this.label31.Text = "消耗点数:"; + this.groupBox3.Controls.Add(this.txtLog); + this.groupBox3.Location = new System.Drawing.Point(16, 287); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(775, 334); + this.groupBox3.TabIndex = 21; + this.groupBox3.TabStop = false; + this.groupBox3.Text = "日志"; + this.txtLog.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtLog.ForeColor = System.Drawing.Color.LightSeaGreen; + this.txtLog.Location = new System.Drawing.Point(3, 17); + this.txtLog.Name = "txtLog"; + this.txtLog.ReadOnly = true; + this.txtLog.Size = new System.Drawing.Size(769, 314); + this.txtLog.TabIndex = 0; + this.txtLog.Text = ""; + base.AutoScaleDimensions = new System.Drawing.SizeF(6f, 12f); + base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + base.ClientSize = new System.Drawing.Size(800, 633); + base.Controls.Add(this.ckRemovePayVpn); + base.Controls.Add(this.label5); + base.Controls.Add(this.labRemovePayDianShu); + base.Controls.Add(this.label31); + base.Controls.Add(this.groupBox3); + base.Controls.Add(this.groupBox5); + base.Controls.Add(this.textBox1); + base.Controls.Add(this.label6); + base.Controls.Add(this.groupBox4); + base.MaximizeBox = false; + base.MinimizeBox = false; + base.Name = "FormRemovePay"; + base.ShowIcon = false; + base.ShowInTaskbar = false; + base.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "移除支付方式"; + base.FormClosing += new System.Windows.Forms.FormClosingEventHandler(FormRemovePay_FormClosing); + base.Load += new System.EventHandler(FormRemovePay_Load); + this.groupBox4.ResumeLayout(false); + this.contextMenuStrip1.ResumeLayout(false); + this.groupBox5.ResumeLayout(false); + this.groupBox3.ResumeLayout(false); + base.ResumeLayout(false); + base.PerformLayout(); + } + } +} diff --git a/AppleBatch_June/FormTiedCard.cs b/AppleBatch_June/FormTiedCard.cs new file mode 100644 index 0000000..d5f7b90 --- /dev/null +++ b/AppleBatch_June/FormTiedCard.cs @@ -0,0 +1,556 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Linq; +using System.Windows.Forms; +using AppleBatch_June.ExecuteTasks; +using AppleBatch_June.Model; +using AppleBatch_June.Views; + +namespace AppleBatch_June +{ + public class FormTiedCard : BaseForm + { + private IContainer components; + + private GroupBox groupBox9; + + private TextBox textBox2; + + private CheckBox ckTiedCardVpn; + + private Label labTiedCardInter; + + private Label label10; + + private Label label13; + + private GroupBox groupBox10; + + private Label labTiedCardCount; + + private Label label16; + + private Button btnLiteClre; + + private Button btnTiedCardQuery; + + private Button btnTiedCardInput; + + private Button btnTiedCardExper; + + private Button btnTiedCardStart; + + private GroupBox groupBox12; + + private DoubleBufferListView listTiedCard; + + private ColumnHeader columnHeader8; + + private ColumnHeader columnHeader9; + + private ColumnHeader columnHeader10; + + private ColumnHeader columnHeader11; + + private ColumnHeader columnHeader14; + + private ColumnHeader columnHeader1; + + private ColumnHeader columnHeader2; + + private Label label1; + + private Label label3; + + private Label label2; + + private TextBox textBox1; + + public FormTiedCard() + : base("绑定支付方式", TiedCardTask.Instance) + { + InitializeComponent(); + } + + private void btnTiedCardInput_Click(object sender, EventArgs e) + { + FromInputAcount fromInputAcount = new FromInputAcount(); + fromInputAcount.tipMssage = textBox2.Text; + fromInputAcount.isOpenSysVpn = ckTiedCardVpn.Checked; + if (fromInputAcount.ShowDialog() == DialogResult.OK) + { + List list = AppleUtlis.accountInput(fromInputAcount.StrInput); + int num = 0; + base.listData.ListViewItemSorter = new ListViewItemComparer(0, 1); + base.listData.Sort(); + if (base.listData.Items.Count > 0 && int.TryParse(base.listData.Items[base.listData.Items.Count - 1].SubItems[0].Text, out var result)) + { + num = result; + } + foreach (AppleAcount item in list) + { + num++; + ListViewItem listViewItem = new ListViewItem(num.ToString()); + listViewItem.UseItemStyleForSubItems = false; + listViewItem.SubItems.Add(item.appleId); + listViewItem.SubItems.Add(item.applePwd); + listViewItem.SubItems.Add("-"); + if (!string.IsNullOrEmpty(item.appleQt1)) + { + listViewItem.SubItems.Add(item.appleQt1 + "-" + item.appleQt2 + "-" + item.appleQt3); + } + else + { + listViewItem.SubItems.Add(item.overflow); + } + listViewItem.SubItems.Add("-"); + listViewItem.SubItems.Add("-"); + base.listData.Items.Add(listViewItem); + } + } + base.labCout.Text = string.Concat(base.listData.Items.Count); + } + + private void FormTiedCard_Load(object sender, EventArgs e) + { + base.listData = listTiedCard; + base.labCout = labTiedCardCount; + base.startBtn = btnTiedCardStart; + labTiedCardInter.Text = AppSysConfig.getTypeById(28).consNum.ToString(); + ckTiedCardVpn.Checked = ((ConfigUtlis.getConfigValue("ckTiedCardVpn") == "True") ? true : false); + InitLv(base.listData); + BindMenuStrip(addTwoFactor: true); + } + + private void btnTiedCardStart_Click(object sender, EventArgs e) + { + if (!TiedCardTask.Instance.isRun && !TiedCardTask.Instance.TaskIsRun) + { + List lvItems = (from ListViewItem c in base.listData.Items + where c.SubItems[3].Text == "-" + select new AppleAcount + { + appleId = c.SubItems[1].Text, + applePwd = c.SubItems[2].Text, + addres = c.SubItems[4].Text + }).ToList(); + RearTaskRun(lvItems); + return; + } + TiedCardTask.Instance.Stop(); + if (!base.IsDisposed) + { + Invoke((Action)delegate + { + base.startBtn.Text = "正在停止"; + base.startBtn.ForeColor = Color.Red; + }); + } + } + + private void RearTaskRun(List lvItems) + { + int id = 28; + int count = lvItems.Count; + if (AppSysConfig.integral < count * AppSysConfig.getTypeById(28).consNum) + { + MessageBox.Show("账号点数不足 , 执行账号数量:" + count + " ,至少需要 " + count * AppSysConfig.getTypeById(id).consNum + " 点数。"); + } + else + { + ConfigUtlis.saveConfigKey("ckTiedCardVpn", ckTiedCardVpn.Checked.ToString()); + TiedCardTask.Instance.ExecuteTiedCard(2, ckTiedCardVpn.Checked, lvItems, base.startAct, base.endTakAct, sucessAct, _action); + } + } + + public void sucessAct(string AppleId) + { + UpdataUi(delegate + { + ListViewItem listViewItem = (from ListViewItem c in base.listData.Items + where c.SubItems[1].Text == AppleId + select c).FirstOrDefault(); + if (listViewItem != null) + { + SqliteHelper.ExecuteInsert("itunes_db", new Dictionary + { + { "type", "tiedCard" }, + { + "addTime", + Tools.GenerateTimeStamp().ToString() + }, + { + "value1", + listViewItem.SubItems[1].Text + }, + { + "value2", + listViewItem.SubItems[2].Text + }, + { + "value3", + listViewItem.SubItems[3].Text + }, + { + "value4", + listViewItem.SubItems[4].Text + }, + { + "value5", + listViewItem.SubItems[5].Text + }, + { + "value6", + listViewItem.SubItems[6].Text + } + }); + } + }); + } + + public void _action(string key, DisplyType type, string reust) + { + UpdataUi(delegate + { + IEnumerable enumerable = from ListViewItem c in base.listData.Items + where c.SubItems[1].Text == key + select c; + Font font = new Font(Font, FontStyle.Bold); + foreach (ListViewItem item in enumerable) + { + switch (type) + { + case DisplyType.forbidden: + item.SubItems[5].Text = reust; + item.SubItems[5].Font = font; + item.SubItems[5].ForeColor = Color.Green; + break; + case DisplyType.xinxi: + item.SubItems[6].Text = reust; + break; + case DisplyType.error: + item.SubItems[5].Text = reust; + item.SubItems[5].Font = font; + item.SubItems[5].ForeColor = Color.Red; + break; + case DisplyType.chongzhi: + item.SubItems[3].Text = reust; + item.SubItems[5].Text = reust; + item.SubItems[5].ForeColor = Color.Black; + break; + case DisplyType.area: + item.SubItems[3].Text = reust; + break; + } + } + }); + } + + private void btnTiedCardQuery_Click(object sender, EventArgs e) + { + FromDBDataQuery fromDBDataQuery = new FromDBDataQuery(); + fromDBDataQuery.sqlTitle = new Dictionary + { + { "value1", "账号|120" }, + { "value2", "密码|100" }, + { "value3", "国家|60" }, + { "value4", "卡号信息|160" }, + { "value5", "状态|60" }, + { "value6", "信息|150" } + }; + fromDBDataQuery.type = "tiedCard"; + fromDBDataQuery.typeName = "支付方式添加"; + fromDBDataQuery.Show(); + } + + private void btnTiedCardExper_Click(object sender, EventArgs e) + { + ExperList(base.listData); + } + + private void btnLiteClre_Click(object sender, EventArgs e) + { + if (MessageBox.Show("确认删除列表数据吗", "提示", MessageBoxButtons.OKCancel) == DialogResult.OK) + { + base.listData.Items.Clear(); + } + base.labCout.Text = string.Concat(base.listData.Items.Count); + } + + public override void ReExecute_Click(object sender, EventArgs e) + { + if (TiedCardTask.Instance.TaskIsRun) + { + MessageBox.Show("请先停止"); + return; + } + List list = new List(); + foreach (ListViewItem selectedItem in base.listData.SelectedItems) + { + list.Add(new AppleAcount + { + appleId = selectedItem.SubItems[1].Text, + applePwd = selectedItem.SubItems[2].Text, + addres = selectedItem.SubItems[4].Text + }); + } + RearTaskRun(list); + } + + public override void TwoFactorItem_over_Click(string reust) + { + List list = new List(); + foreach (ListViewItem selectedItem in base.listData.SelectedItems) + { + list.Add(new AppleAcount + { + appleId = selectedItem.SubItems[1].Text, + applePwd = selectedItem.SubItems[2].Text + reust.Trim(), + addres = selectedItem.SubItems[4].Text + }); + } + RearTaskRun(list); + } + + protected override void Dispose(bool disposing) + { + if (disposing && components != null) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.groupBox9 = new System.Windows.Forms.GroupBox(); + this.label1 = new System.Windows.Forms.Label(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.ckTiedCardVpn = new System.Windows.Forms.CheckBox(); + this.labTiedCardInter = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.label13 = new System.Windows.Forms.Label(); + this.groupBox10 = new System.Windows.Forms.GroupBox(); + this.labTiedCardCount = new System.Windows.Forms.Label(); + this.label16 = new System.Windows.Forms.Label(); + this.btnLiteClre = new System.Windows.Forms.Button(); + this.btnTiedCardQuery = new System.Windows.Forms.Button(); + this.btnTiedCardInput = new System.Windows.Forms.Button(); + this.btnTiedCardExper = new System.Windows.Forms.Button(); + this.btnTiedCardStart = new System.Windows.Forms.Button(); + this.groupBox12 = new System.Windows.Forms.GroupBox(); + this.listTiedCard = new AppleBatch_June.Views.DoubleBufferListView(); + this.columnHeader8 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader9 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader10 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader2 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader11 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader1 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader14 = new System.Windows.Forms.ColumnHeader(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.groupBox9.SuspendLayout(); + this.groupBox10.SuspendLayout(); + this.groupBox12.SuspendLayout(); + base.SuspendLayout(); + this.groupBox9.Controls.Add(this.label3); + this.groupBox9.Controls.Add(this.label2); + this.groupBox9.Controls.Add(this.textBox1); + this.groupBox9.Controls.Add(this.label1); + this.groupBox9.Controls.Add(this.textBox2); + this.groupBox9.Controls.Add(this.ckTiedCardVpn); + this.groupBox9.Controls.Add(this.labTiedCardInter); + this.groupBox9.Controls.Add(this.label10); + this.groupBox9.Controls.Add(this.label13); + this.groupBox9.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.groupBox9.Location = new System.Drawing.Point(455, 12); + this.groupBox9.Name = "groupBox9"; + this.groupBox9.Size = new System.Drawing.Size(510, 126); + this.groupBox9.TabIndex = 14; + this.groupBox9.TabStop = false; + this.groupBox9.Text = "功能说明"; + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(15, 102); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(290, 17); + this.label1.TabIndex = 15; + this.label1.Text = "绑定卡的有效期是六位数:年份月份,例如:202712"; + this.textBox2.BackColor = System.Drawing.SystemColors.ControlLightLight; + this.textBox2.Location = new System.Drawing.Point(220, 48); + this.textBox2.Name = "textBox2"; + this.textBox2.ReadOnly = true; + this.textBox2.Size = new System.Drawing.Size(272, 23); + this.textBox2.TabIndex = 11; + this.textBox2.Text = "xxx@xx.com----密码-卡号-年份月份-安全码"; + this.ckTiedCardVpn.AutoSize = true; + this.ckTiedCardVpn.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.ckTiedCardVpn.ForeColor = System.Drawing.Color.Red; + this.ckTiedCardVpn.Location = new System.Drawing.Point(18, 76); + this.ckTiedCardVpn.Name = "ckTiedCardVpn"; + this.ckTiedCardVpn.Size = new System.Drawing.Size(111, 21); + this.ckTiedCardVpn.TabIndex = 10; + this.ckTiedCardVpn.Text = "使用随机IP代理"; + this.ckTiedCardVpn.UseVisualStyleBackColor = true; + this.labTiedCardInter.AutoSize = true; + this.labTiedCardInter.Font = new System.Drawing.Font("微软雅黑", 10.5f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.labTiedCardInter.ForeColor = System.Drawing.Color.Crimson; + this.labTiedCardInter.Location = new System.Drawing.Point(103, 52); + this.labTiedCardInter.Name = "labTiedCardInter"; + this.labTiedCardInter.Size = new System.Drawing.Size(18, 19); + this.labTiedCardInter.TabIndex = 2; + this.labTiedCardInter.Text = "0"; + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(15, 54); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(92, 17); + this.label10.TabIndex = 1; + this.label10.Text = "查询消耗点数:"; + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(15, 21); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(440, 17); + this.label13.TabIndex = 0; + this.label13.Text = "添加账号支付方式,绑定信用卡,虚拟卡,严禁利用此功能进行任何违法违规活动\r\n"; + this.groupBox10.Controls.Add(this.labTiedCardCount); + this.groupBox10.Controls.Add(this.label16); + this.groupBox10.Controls.Add(this.btnLiteClre); + this.groupBox10.Controls.Add(this.btnTiedCardQuery); + this.groupBox10.Controls.Add(this.btnTiedCardInput); + this.groupBox10.Controls.Add(this.btnTiedCardExper); + this.groupBox10.Controls.Add(this.btnTiedCardStart); + this.groupBox10.Location = new System.Drawing.Point(12, 12); + this.groupBox10.Name = "groupBox10"; + this.groupBox10.Size = new System.Drawing.Size(437, 126); + this.groupBox10.TabIndex = 13; + this.groupBox10.TabStop = false; + this.groupBox10.Text = "操作"; + this.labTiedCardCount.AutoSize = true; + this.labTiedCardCount.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.labTiedCardCount.ForeColor = System.Drawing.Color.OrangeRed; + this.labTiedCardCount.Location = new System.Drawing.Point(282, 15); + this.labTiedCardCount.Name = "labTiedCardCount"; + this.labTiedCardCount.Size = new System.Drawing.Size(15, 17); + this.labTiedCardCount.TabIndex = 7; + this.labTiedCardCount.Text = "0"; + this.label16.AutoSize = true; + this.label16.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.label16.Location = new System.Drawing.Point(179, 16); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(95, 17); + this.label16.TabIndex = 6; + this.label16.Text = "列表中账号数量:"; + this.btnLiteClre.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnLiteClre.Location = new System.Drawing.Point(325, 75); + this.btnLiteClre.Name = "btnLiteClre"; + this.btnLiteClre.Size = new System.Drawing.Size(96, 23); + this.btnLiteClre.TabIndex = 5; + this.btnLiteClre.Text = "清空账号列表"; + this.btnLiteClre.UseVisualStyleBackColor = true; + this.btnLiteClre.Click += new System.EventHandler(btnLiteClre_Click); + this.btnTiedCardQuery.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnTiedCardQuery.Location = new System.Drawing.Point(179, 42); + this.btnTiedCardQuery.Name = "btnTiedCardQuery"; + this.btnTiedCardQuery.Size = new System.Drawing.Size(140, 23); + this.btnTiedCardQuery.TabIndex = 4; + this.btnTiedCardQuery.Text = "支付方式记录"; + this.btnTiedCardQuery.UseVisualStyleBackColor = true; + this.btnTiedCardQuery.Click += new System.EventHandler(btnTiedCardQuery_Click); + this.btnTiedCardInput.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnTiedCardInput.Location = new System.Drawing.Point(179, 76); + this.btnTiedCardInput.Name = "btnTiedCardInput"; + this.btnTiedCardInput.Size = new System.Drawing.Size(140, 23); + this.btnTiedCardInput.TabIndex = 3; + this.btnTiedCardInput.Text = "账号输入"; + this.btnTiedCardInput.UseVisualStyleBackColor = true; + this.btnTiedCardInput.Click += new System.EventHandler(btnTiedCardInput_Click); + this.btnTiedCardExper.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.btnTiedCardExper.Location = new System.Drawing.Point(325, 42); + this.btnTiedCardExper.Name = "btnTiedCardExper"; + this.btnTiedCardExper.Size = new System.Drawing.Size(96, 23); + this.btnTiedCardExper.TabIndex = 2; + this.btnTiedCardExper.Text = "导出账号"; + this.btnTiedCardExper.UseVisualStyleBackColor = true; + this.btnTiedCardExper.Click += new System.EventHandler(btnTiedCardExper_Click); + this.btnTiedCardStart.Font = new System.Drawing.Font("微软雅黑", 10.5f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.btnTiedCardStart.ForeColor = System.Drawing.Color.Green; + this.btnTiedCardStart.Location = new System.Drawing.Point(18, 33); + this.btnTiedCardStart.Name = "btnTiedCardStart"; + this.btnTiedCardStart.Size = new System.Drawing.Size(110, 65); + this.btnTiedCardStart.TabIndex = 1; + this.btnTiedCardStart.Text = "开始执行"; + this.btnTiedCardStart.UseVisualStyleBackColor = true; + this.btnTiedCardStart.Click += new System.EventHandler(btnTiedCardStart_Click); + this.groupBox12.Controls.Add(this.listTiedCard); + this.groupBox12.Location = new System.Drawing.Point(9, 144); + this.groupBox12.Name = "groupBox12"; + this.groupBox12.Size = new System.Drawing.Size(956, 408); + this.groupBox12.TabIndex = 12; + this.groupBox12.TabStop = false; + this.groupBox12.Text = "Apple账号列表"; + this.listTiedCard.Columns.AddRange(new System.Windows.Forms.ColumnHeader[7] { this.columnHeader8, this.columnHeader9, this.columnHeader10, this.columnHeader2, this.columnHeader11, this.columnHeader1, this.columnHeader14 }); + this.listTiedCard.Dock = System.Windows.Forms.DockStyle.Fill; + this.listTiedCard.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + this.listTiedCard.FullRowSelect = true; + this.listTiedCard.HideSelection = false; + this.listTiedCard.Location = new System.Drawing.Point(3, 17); + this.listTiedCard.Name = "listTiedCard"; + this.listTiedCard.Size = new System.Drawing.Size(950, 388); + this.listTiedCard.TabIndex = 0; + this.listTiedCard.UseCompatibleStateImageBehavior = false; + this.listTiedCard.View = System.Windows.Forms.View.Details; + this.columnHeader8.Text = "序号"; + this.columnHeader9.Text = "账号"; + this.columnHeader9.Width = 150; + this.columnHeader10.Text = "密码"; + this.columnHeader10.Width = 100; + this.columnHeader2.Text = "国家"; + this.columnHeader2.Width = 80; + this.columnHeader11.Text = "卡号信息"; + this.columnHeader11.Width = 200; + this.columnHeader1.Text = "状态"; + this.columnHeader1.Width = 100; + this.columnHeader14.Text = "信息"; + this.columnHeader14.Width = 250; + this.textBox1.BackColor = System.Drawing.SystemColors.ControlLightLight; + this.textBox1.Location = new System.Drawing.Point(220, 76); + this.textBox1.Name = "textBox1"; + this.textBox1.ReadOnly = true; + this.textBox1.Size = new System.Drawing.Size(272, 23); + this.textBox1.TabIndex = 16; + this.textBox1.Text = "xxx@xx.com----密码-安全码"; + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(136, 51); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(80, 17); + this.label2.TabIndex = 17; + this.label2.Text = "添加支付方式"; + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(140, 78); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(68, 17); + this.label3.TabIndex = 18; + this.label3.Text = "激活或验证"; + base.AutoScaleDimensions = new System.Drawing.SizeF(6f, 12f); + base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + base.ClientSize = new System.Drawing.Size(974, 560); + base.Controls.Add(this.groupBox9); + base.Controls.Add(this.groupBox10); + base.Controls.Add(this.groupBox12); + base.MaximizeBox = false; + base.Name = "FormTiedCard"; + base.ShowIcon = false; + base.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "添加或者激活 支付方式(绑卡)"; + base.Load += new System.EventHandler(FormTiedCard_Load); + this.groupBox9.ResumeLayout(false); + this.groupBox9.PerformLayout(); + this.groupBox10.ResumeLayout(false); + this.groupBox10.PerformLayout(); + this.groupBox12.ResumeLayout(false); + base.ResumeLayout(false); + } + } +} diff --git a/AppleBatch_June/FromDBDataQuery.cs b/AppleBatch_June/FromDBDataQuery.cs new file mode 100644 index 0000000..41d21b6 --- /dev/null +++ b/AppleBatch_June/FromDBDataQuery.cs @@ -0,0 +1,812 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Diagnostics; +using System.Drawing; +using System.Linq; +using System.Linq.Expressions; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; +using System.Web; +using System.Windows.Forms; +using AppleBatch_June.Forms; + +namespace AppleBatch_June +{ + public class FromDBDataQuery : Form + { + public Dictionary sqlTitle = new Dictionary(); + + private string filDs = ""; + + private bool MultithreadingQuery; + + private IContainer components; + + private GroupBox groupBox1; + + private ListView listView1; + + private TextBox txtKey; + + private Label label2; + + private Button button1; + + private Button button2; + + private Label label3; + + private Label label4; + + private Label label5; + + private Label label6; + + private TextBox txtCount; + + private ContextMenuStrip contextMenuStrip1; + + private ToolStripMenuItem toolCopy; + + private Label label7; + + private Label label1; + + private Label label8; + + private Label label9; + + private Label label10; + + private TextBox txtPwd; + + private Label label11; + + private ToolStripMenuItem 设置显示列ToolStripMenuItem; + + private CheckBox ckMultithreadingQuery; + + private Label labTip; + + public string type { get; set; } + + public string typeName { get; set; } + + public FromDBDataQuery() + { + InitializeComponent(); + } + + private int getCount() + { + if (int.TryParse(txtCount.Text, out var result)) + { + return result; + } + return 50; + } + + private void FromDBDataQuery_Load(object sender, EventArgs e) + { + bool multithreadingQuery = (ckMultithreadingQuery.Checked = ((ConfigUtlis.getConfigValue("ckMultithreadingQuery") == "True") ? true : false)); + MultithreadingQuery = multithreadingQuery; + label4.Text = typeName; + ColumnHeader columnHeader = new ColumnHeader(); + columnHeader.Text = "序号"; + columnHeader.Width = 60; + listView1.Columns.Add(columnHeader); + foreach (KeyValuePair item in sqlTitle) + { + ColumnHeader columnHeader2 = new ColumnHeader(); + int result = 100; + string[] array = item.Value.Split('|'); + columnHeader2.Text = array[0]; + if (array.Length >= 2) + { + int.TryParse(array[1], out result); + } + columnHeader2.Width = result; + listView1.Columns.Add(columnHeader2); + filDs = filDs + item.Key + ","; + } + filDs += "addTime"; + ColumnHeader columnHeader3 = new ColumnHeader(); + columnHeader3.Text = "时间"; + columnHeader3.Width = 150; + listView1.Columns.Add(columnHeader3); + listView1.ColumnClick += lv_ColumnClick; + string total = ""; + if (SqliteHelper.factory != null) + { + DataTable tables = SqliteHelper.QueryTable("itunes_db", ref total, filDs, "type='" + type + "' and (value16 ='" + Tools.GetMD5_32(HttpUtility.UrlEncode(AppSysConfig.userName) + "aaa").Substring(10) + "' or value16 IS NULL ) ", "id desc", "0," + getCount()); + label7.Text = total; + loadListview(tables); + } + else + { + MessageBox.Show("无法加载 System.Data.SQLite.dll , 请重新下载,并正确解压,在文件夹中打开"); + Close(); + } + } + + private void lv_ColumnClick(object sender, ColumnClickEventArgs e) + { + if (listView1.Tag == null) + { + listView1.Tag = "1"; + } + if (listView1.Tag.ToString() == "1") + { + listView1.ListViewItemSorter = new ListViewItemComparer(e.Column, 1); + listView1.Tag = "0"; + } + else + { + listView1.ListViewItemSorter = new ListViewItemComparer(e.Column, 0); + listView1.Tag = "1"; + } + listView1.Sort(); + } + + public void loadListview(DataTable tables) + { + listView1.Items.Clear(); + int num = 0; + string text = ""; + int num2 = 0; + string guid = AppSysConfig.guid; + foreach (char c in guid) + { + if (num2 % 2 != 0) + { + text += c; + } + num2++; + } + text = text.PadRight(16, 'x'); + List list = new List(); + foreach (DataRow row in tables.Rows) + { + num++; + ListViewItem listViewItem = new ListViewItem(num.ToString()); + foreach (KeyValuePair item in sqlTitle) + { + if (txtPwd.Text == AppSysConfig.userPwd) + { + string text2 = dectValue(item.Key, row[item.Key].ToString(), text); + listViewItem.SubItems.Add(text2); + } + else + { + listViewItem.SubItems.Add("*****"); + } + } + listViewItem.SubItems.Add(Tools.GetTimeByTimeStamp(long.Parse(row["addTime"].ToString())).ToString("yyyy-MM-dd HH:mm:ss")); + list.Add(listViewItem); + } + listView1.Items.AddRange(list.ToArray()); + label8.Text = listView1.Items.Count.ToString(); + tables.Dispose(); + } + + public byte[] CutTail(byte[] byList) + { + if (byList.Length == 0) + { + return byList; + } + int num = 0; + byte[] array = null; + for (int num2 = byList.Length - 1; num2 >= 0; num2--) + { + if (byList[num2] != 0 && num == 0) + { + num = num2; + if (array == null) + { + array = new byte[num + 1]; + } + array[num] = byList[num2]; + num--; + } + else if (array != null) + { + array[num] = byList[num2]; + num--; + } + } + return array; + } + + public string dectValue(string Key, string value, string guid) + { + if (value.StartsWith("key2_")) + { + value = DESEncrypt.Decrypt(value.Substring("key2_".Length), Tools.GetMD5_32(Key + "teluns").Substring(16), "awiaaaecaaguegaa").Replace("\0", ""); + } + if (value.StartsWith("key3_")) + { + value = DESEncrypt.Decrypt(value.Substring("key3_".Length), Tools.GetMD5_32(Key + HttpUtility.UrlEncode(AppSysConfig.userName)).Substring(16), "awiBBBecaaguegaa").Replace("\0", ""); + } + if (value.StartsWith("key4_")) + { + value = DESEncrypt.Decrypt(value.Substring("key4_".Length), Tools.GetMD5_32(Key + HttpUtility.UrlEncode(guid)).Substring(16), "WBiASAWaPcAaLsLa").Replace("\0", ""); + } + return value; + } + + private string dectValueNew(string Key, string value, string guid, Dictionary arrayMeys, byte indexRand) + { + char[] array = value.ToCharArray(); + if (array.Length >= 5) + { + char c = array[3]; + if (array[0] == 'k' && array[1] == 'e' && array[2] == 'y' && (c == '4' || c == '3' || c == '2') && array[4] == '_') + { + byte[][] array2 = new byte[2][]; + byte[] array3 = Convert.FromBase64CharArray(array, 5, array.Length - 5); + int key = c.GetHashCode() + Key.GetHashCode(); + if (arrayMeys.ContainsKey(key)) + { + int num = 0; + byte[][] array4 = arrayMeys[key]; + foreach (byte[] array5 in array4) + { + byte[] array6 = new byte[array5.Length]; + for (int j = 0; j < array5.Length; j++) + { + array6[j] = (byte)(array5[j] ^ (indexRand + 18)); + } + array2[num] = array6; + num++; + } + } + else + { + array2 = c switch + { + '2' => new byte[2][] + { + Encoding.UTF8.GetBytes(Tools.GetMD5_32(Key + "teluns").Substring(16)), + Encoding.UTF8.GetBytes("awiaaaecaaguegaa") + }, + '3' => new byte[2][] + { + Encoding.UTF8.GetBytes(Tools.GetMD5_32(Key + HttpUtility.UrlEncode(AppSysConfig.userName)).Substring(16)), + Encoding.UTF8.GetBytes("awiBBBecaaguegaa") + }, + '4' => new byte[2][] + { + Encoding.UTF8.GetBytes(Tools.GetMD5_32(Key + HttpUtility.UrlEncode(guid)).Substring(16)), + Encoding.UTF8.GetBytes("WBiASAWaPcAaLsLa") + }, + _ => new byte[2][] + { + Encoding.UTF8.GetBytes(Tools.GetMD5_32(Key + "teluns").Substring(16)), + Encoding.UTF8.GetBytes("awiaaaecaaguegaa") + }, + }; + lock (arrayMeys) + { + if (!arrayMeys.ContainsKey(key)) + { + byte[][] array7 = new byte[2][]; + int num2 = 0; + byte[][] array4 = array2; + foreach (byte[] array8 in array4) + { + byte[] array9 = new byte[array8.Length]; + for (int k = 0; k < array8.Length; k++) + { + array9[k] = (byte)(array8[k] ^ (indexRand + 18)); + } + array7[num2] = array9; + num2++; + } + arrayMeys.Add(key, array7); + } + } + } + using RijndaelManaged rijndaelManaged = new RijndaelManaged(); + rijndaelManaged.Key = array2[0]; + rijndaelManaged.IV = array2[1]; + rijndaelManaged.Mode = CipherMode.CBC; + rijndaelManaged.Padding = PaddingMode.Zeros; + using ICryptoTransform cryptoTransform = rijndaelManaged.CreateDecryptor(); + byte[] byList = cryptoTransform.TransformFinalBlock(array3, 0, array3.Length); + Array.Clear(array2[0], 0, array2[0].Length); + Array.Clear(array2[1], 0, array2[1].Length); + array2[0] = null; + array2[1] = null; + array2 = null; + return Encoding.UTF8.GetString(CutTail(byList)); + } + } + return value; + } + + public byte[] Decrypt(byte[] toEncryptArray, byte[] keyArray, byte[] ivArray) + { + using RijndaelManaged rijndaelManaged = new RijndaelManaged(); + rijndaelManaged.Key = keyArray; + rijndaelManaged.IV = ivArray; + rijndaelManaged.Mode = CipherMode.CBC; + rijndaelManaged.Padding = PaddingMode.Zeros; + using ICryptoTransform cryptoTransform = rijndaelManaged.CreateDecryptor(); + return cryptoTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); + } + + private async void button1_Click(object sender, EventArgs e) + { + Console.WriteLine("开始运行。" + DateTime.Now.ToString()); + button1.Enabled = false; + Stopwatch watch = Stopwatch.StartNew(); + try + { + string txtKeyStr = txtKey.Text.Trim(); + List list = await Task.Run(delegate + { + string where = "type='" + type + "' and (value16 ='" + Tools.GetMD5_32(HttpUtility.UrlEncode(AppSysConfig.userName) + "aaa").Substring(10) + "' or value16 IS NULL )"; + string total = ""; + string limit = "0," + getCount(); + if (!string.IsNullOrEmpty(txtKeyStr)) + { + limit = ""; + } + DataTable dataTable = SqliteHelper.QueryTable("itunes_db", ref total, filDs, where, "id desc", limit); + Console.WriteLine("1--" + watch.Elapsed.TotalSeconds + "\n"); + string guid = ""; + int num = 0; + string guid2 = AppSysConfig.guid; + foreach (char c2 in guid2) + { + if (num % 2 != 0) + { + guid += c2; + } + num++; + } + guid = guid.PadRight(16, 'x'); + Console.WriteLine("1-1-" + watch.Elapsed.TotalSeconds + "\n"); + if (MultithreadingQuery) + { + List list2 = new List(); + int num2 = 4; + for (int j = 0; j < num2; j++) + { + DataTable item2 = dataTable.Clone(); + list2.Add(item2); + } + int num3 = 0; + int num4 = 0; + int num5 = dataTable.Rows.Count / num2; + foreach (DataRow row in dataTable.Rows) + { + if (num4 >= num5 && num3 < num2 - 1) + { + num3++; + num4 = 0; + } + list2[num3].ImportRow(row); + num4++; + } + Task[] array = new Task[num2]; + for (int k = 0; k < num2; k++) + { + DataTable runTable = list2[k]; + array[k] = Task.Run(delegate + { + Stopwatch stopwatch2 = Stopwatch.StartNew(); + KeyValuePair[] array2 = sqlTitle.ToArray(); + Dictionary dictionary = new Dictionary(); + byte indexRand = (byte)new Random(Guid.NewGuid().GetHashCode()).Next(0, 210); + foreach (DataRow row2 in runTable.Rows) + { + KeyValuePair[] array3 = array2; + for (int l = 0; l < array3.Length; l++) + { + KeyValuePair keyValuePair = array3[l]; + string value2 = dectValueNew(keyValuePair.Key, row2[keyValuePair.Key].ToString(), guid, dictionary, indexRand); + row2[keyValuePair.Key] = value2; + } + } + dictionary.Clear(); + dictionary = null; + stopwatch2.Stop(); + Console.WriteLine("1-end-" + stopwatch2.Elapsed.TotalSeconds + "---" + runTable.Rows.Count + "\n"); + }); + } + Task.WaitAll(array); + dataTable.Rows.Clear(); + foreach (DataTable item3 in list2) + { + dataTable.Merge(item3); + item3.Dispose(); + } + } + else + { + Stopwatch stopwatch = Stopwatch.StartNew(); + foreach (DataRow row3 in dataTable.Rows) + { + foreach (KeyValuePair item4 in sqlTitle) + { + string value = dectValue(item4.Key, row3[item4.Key].ToString(), guid); + row3[item4.Key] = value; + } + } + stopwatch.Stop(); + Console.WriteLine("1-end-" + stopwatch.Elapsed.TotalSeconds + "---" + dataTable.Rows.Count + "\n"); + } + Console.WriteLine("2--" + watch.Elapsed.TotalSeconds + "\n"); + IQueryable source = dataTable.Rows.Cast().AsQueryable(); + Expression> expression = PredicateBuilder.False(); + foreach (KeyValuePair item in sqlTitle) + { + expression = expression.Or((DataRow c) => c[item.Key].ToString().Contains(txtKeyStr)); + } + List result = source.Where(expression).Take(getCount()).ToList(); + dataTable.Dispose(); + return result; + }); + Console.WriteLine("3--" + watch.Elapsed.TotalSeconds + "\n"); + if (list.Count > 0) + { + loadListview(list.CopyToDataTable()); + } + else + { + listView1.Items.Clear(); + label8.Text = listView1.Items.Count.ToString(); + } + Console.WriteLine("4--" + watch.Elapsed.TotalSeconds + "\n"); + watch.Stop(); + if (watch.Elapsed.TotalSeconds > 5.0 && !MultithreadingQuery) + { + labTip.Visible = true; + } + else + { + labTip.Visible = false; + } + } + catch (Exception) + { + } + finally + { + button1.Enabled = true; + } + } + + private void toolCopy_Click(object sender, EventArgs e) + { + string text = ""; + foreach (ListViewItem selectedItem in listView1.SelectedItems) + { + int num = 0; + foreach (KeyValuePair item in sqlTitle) + { + _ = item; + text = text + listView1.Columns[num + 1].Text + ":" + selectedItem.SubItems[num + 1].Text + " \t"; + num++; + } + text += "\n"; + } + if (text.Length > 0) + { + try + { + Clipboard.SetText(text); + MessageBox.Show("复制成功"); + } + catch (Exception) + { + MessageBox.Show("复制失败"); + } + } + } + + private void button2_Click(object sender, EventArgs e) + { + ExperList(listView1); + } + + public void ExperList(ListView lv) + { + Stopwatch stopwatch = Stopwatch.StartNew(); + FromExper fromExper = new FromExper(); + StringBuilder stringBuilder = new StringBuilder(); + int num = 0; + foreach (ColumnHeader column in lv.Columns) + { + if (num != 0 && column.Width > 10) + { + stringBuilder.Append(column.Text + "\t"); + } + num++; + } + stringBuilder.Append("\n"); + foreach (ListViewItem item in lv.Items) + { + num = 0; + foreach (ListViewItem.ListViewSubItem subItem in item.SubItems) + { + if (num != 0 && lv.Columns[num].Width > 10) + { + stringBuilder.Append(subItem.Text + "\t"); + } + num++; + } + stringBuilder.Append("\n"); + } + fromExper.txtInfo = stringBuilder.ToString(); + stopwatch.Stop(); + fromExper.Show(); + } + + private void txtPwd_TextChanged(object sender, EventArgs e) + { + } + + private void txtPwd_Leave(object sender, EventArgs e) + { + button1_Click(null, null); + } + + private void 设置显示列ToolStripMenuItem_Click(object sender, EventArgs e) + { + FormEditListViewHander formEditListViewHander = new FormEditListViewHander(); + formEditListViewHander.lvData = listView1; + formEditListViewHander.ShowDialog(); + } + + private void FromDBDataQuery_FormClosed(object sender, FormClosedEventArgs e) + { + } + + private void ckMultithreadingQuery_CheckedChanged(object sender, EventArgs e) + { + ConfigUtlis.saveConfigKey("ckMultithreadingQuery", ckMultithreadingQuery.Checked.ToString()); + MultithreadingQuery = ckMultithreadingQuery.Checked; + if (MultithreadingQuery) + { + labTip.Visible = false; + } + } + + protected override void Dispose(bool disposing) + { + if (disposing && components != null) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AppleBatch_June.FromDBDataQuery)); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.label11 = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.txtPwd = new System.Windows.Forms.TextBox(); + this.label8 = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.txtCount = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.button2 = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.txtKey = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.listView1 = new System.Windows.Forms.ListView(); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.toolCopy = new System.Windows.Forms.ToolStripMenuItem(); + this.设置显示列ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.ckMultithreadingQuery = new System.Windows.Forms.CheckBox(); + this.labTip = new System.Windows.Forms.Label(); + this.groupBox1.SuspendLayout(); + this.contextMenuStrip1.SuspendLayout(); + base.SuspendLayout(); + this.groupBox1.Controls.Add(this.labTip); + this.groupBox1.Controls.Add(this.ckMultithreadingQuery); + this.groupBox1.Controls.Add(this.label11); + this.groupBox1.Controls.Add(this.label10); + this.groupBox1.Controls.Add(this.txtPwd); + this.groupBox1.Controls.Add(this.label8); + this.groupBox1.Controls.Add(this.label9); + this.groupBox1.Controls.Add(this.label7); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Controls.Add(this.label6); + this.groupBox1.Controls.Add(this.txtCount); + this.groupBox1.Controls.Add(this.label5); + this.groupBox1.Controls.Add(this.label4); + this.groupBox1.Controls.Add(this.label3); + this.groupBox1.Controls.Add(this.button2); + this.groupBox1.Controls.Add(this.button1); + this.groupBox1.Controls.Add(this.txtKey); + this.groupBox1.Controls.Add(this.label2); + this.groupBox1.Location = new System.Drawing.Point(23, 17); + this.groupBox1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Padding = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.groupBox1.Size = new System.Drawing.Size(886, 139); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "搜索条件"; + this.label11.AutoSize = true; + this.label11.Font = new System.Drawing.Font("微软雅黑", 12f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.label11.ForeColor = System.Drawing.Color.Red; + this.label11.Location = new System.Drawing.Point(187, 85); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(74, 22); + this.label11.TabIndex = 17; + this.label11.Text = "当前软件"; + this.label10.AutoSize = true; + this.label10.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.label10.ForeColor = System.Drawing.Color.Black; + this.label10.Location = new System.Drawing.Point(144, 91); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(280, 17); + this.label10.TabIndex = 16; + this.label10.Text = "请输入 账号的登录密码查看完整数据"; + this.txtPwd.Location = new System.Drawing.Point(427, 88); + this.txtPwd.Name = "txtPwd"; + this.txtPwd.PasswordChar = '*'; + this.txtPwd.Size = new System.Drawing.Size(123, 23); + this.txtPwd.TabIndex = 15; + this.txtPwd.TextChanged += new System.EventHandler(txtPwd_TextChanged); + this.txtPwd.Leave += new System.EventHandler(txtPwd_Leave); + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(90, 91); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(43, 17); + this.label8.TabIndex = 14; + this.label8.Text = "label8"; + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(16, 91); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(80, 17); + this.label9.TabIndex = 13; + this.label9.Text = "列表中数量:"; + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(92, 65); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(43, 17); + this.label7.TabIndex = 12; + this.label7.Text = "label7"; + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(16, 66); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(80, 17); + this.label1.TabIndex = 11; + this.label1.Text = "数据总数量:"; + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(507, 59); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(47, 17); + this.label6.TabIndex = 10; + this.label6.Text = "条数据."; + this.txtCount.Location = new System.Drawing.Point(428, 57); + this.txtCount.Name = "txtCount"; + this.txtCount.Size = new System.Drawing.Size(73, 23); + this.txtCount.TabIndex = 9; + this.txtCount.Text = "50"; + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(362, 61); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(56, 17); + this.label5.TabIndex = 8; + this.label5.Text = "查看最新"; + this.label4.AutoSize = true; + this.label4.Font = new System.Drawing.Font("微软雅黑", 12f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.label4.ForeColor = System.Drawing.SystemColors.Highlight; + this.label4.Location = new System.Drawing.Point(165, 26); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(74, 22); + this.label4.TabIndex = 7; + this.label4.Text = "区域查询"; + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("微软雅黑", 10.5f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.label3.Location = new System.Drawing.Point(11, 29); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(149, 19); + this.label3.TabIndex = 6; + this.label3.Text = "当前查看的缓存库为:"; + this.button2.Location = new System.Drawing.Point(704, 68); + this.button2.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(127, 33); + this.button2.TabIndex = 5; + this.button2.Text = "导出查找数据"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(button2_Click); + this.button1.Location = new System.Drawing.Point(704, 23); + this.button1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(127, 33); + this.button1.TabIndex = 4; + this.button1.Text = "快速查找"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(button1_Click); + this.txtKey.Location = new System.Drawing.Point(427, 23); + this.txtKey.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.txtKey.Name = "txtKey"; + this.txtKey.Size = new System.Drawing.Size(242, 23); + this.txtKey.TabIndex = 3; + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(339, 28); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(80, 17); + this.label2.TabIndex = 2; + this.label2.Text = "查找关键字:"; + this.listView1.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + this.listView1.ContextMenuStrip = this.contextMenuStrip1; + this.listView1.FullRowSelect = true; + this.listView1.HideSelection = false; + this.listView1.Location = new System.Drawing.Point(23, 164); + this.listView1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.listView1.Name = "listView1"; + this.listView1.Size = new System.Drawing.Size(886, 460); + this.listView1.TabIndex = 1; + this.listView1.UseCompatibleStateImageBehavior = false; + this.listView1.View = System.Windows.Forms.View.Details; + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[2] { this.toolCopy, this.设置显示列ToolStripMenuItem }); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(137, 48); + this.toolCopy.Name = "toolCopy"; + this.toolCopy.Size = new System.Drawing.Size(136, 22); + this.toolCopy.Text = "复制信息"; + this.toolCopy.Click += new System.EventHandler(toolCopy_Click); + this.设置显示列ToolStripMenuItem.Name = "设置显示列ToolStripMenuItem"; + this.设置显示列ToolStripMenuItem.Size = new System.Drawing.Size(136, 22); + this.设置显示列ToolStripMenuItem.Text = "设置显示列"; + this.设置显示列ToolStripMenuItem.Click += new System.EventHandler(设置显示列ToolStripMenuItem_Click); + this.ckMultithreadingQuery.AutoSize = true; + this.ckMultithreadingQuery.Location = new System.Drawing.Point(560, 57); + this.ckMultithreadingQuery.Name = "ckMultithreadingQuery"; + this.ckMultithreadingQuery.Size = new System.Drawing.Size(111, 21); + this.ckMultithreadingQuery.TabIndex = 18; + this.ckMultithreadingQuery.Text = "使用多线程查询"; + this.ckMultithreadingQuery.UseVisualStyleBackColor = true; + this.ckMultithreadingQuery.CheckedChanged += new System.EventHandler(ckMultithreadingQuery_CheckedChanged); + this.labTip.AutoSize = true; + this.labTip.ForeColor = System.Drawing.Color.Chocolate; + this.labTip.Location = new System.Drawing.Point(577, 111); + this.labTip.Name = "labTip"; + this.labTip.Size = new System.Drawing.Size(272, 17); + this.labTip.TabIndex = 19; + this.labTip.Text = "当前电脑性能查询速度较慢,建议使用多线程查询"; + this.labTip.Visible = false; + base.AcceptButton = this.button1; + base.AutoScaleDimensions = new System.Drawing.SizeF(7f, 17f); + base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + base.ClientSize = new System.Drawing.Size(933, 637); + base.Controls.Add(this.listView1); + base.Controls.Add(this.groupBox1); + this.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + base.Icon = (System.Drawing.Icon)resources.GetObject("$this.Icon"); + base.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + base.MaximizeBox = false; + base.MinimizeBox = false; + base.Name = "FromDBDataQuery"; + base.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "缓存数据查看"; + base.FormClosed += new System.Windows.Forms.FormClosedEventHandler(FromDBDataQuery_FormClosed); + base.Load += new System.EventHandler(FromDBDataQuery_Load); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.contextMenuStrip1.ResumeLayout(false); + base.ResumeLayout(false); + } + } +} diff --git a/AppleBatch_June/FromDiailong.cs b/AppleBatch_June/FromDiailong.cs new file mode 100644 index 0000000..d3b419f --- /dev/null +++ b/AppleBatch_June/FromDiailong.cs @@ -0,0 +1,62 @@ +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +namespace AppleBatch_June +{ + public class FromDiailong : Form + { + private IContainer components; + + private Button button1; + + private Label label1; + + public FromDiailong() + { + InitializeComponent(); + } + + protected override void Dispose(bool disposing) + { + if (disposing && components != null) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.button1 = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + base.SuspendLayout(); + this.button1.Location = new System.Drawing.Point(97, 143); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(124, 35); + this.button1.TabIndex = 0; + this.button1.Text = "知道了"; + this.button1.UseVisualStyleBackColor = true; + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("宋体", 10.5f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.label1.Location = new System.Drawing.Point(56, 65); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(248, 28); + this.label1.TabIndex = 1; + this.label1.Text = "使用随机代理的时候\r\n清不要变更电脑IP(如开启代理等)"; + base.AutoScaleDimensions = new System.Drawing.SizeF(6f, 12f); + base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + base.ClientSize = new System.Drawing.Size(344, 202); + base.Controls.Add(this.label1); + base.Controls.Add(this.button1); + base.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + base.MaximizeBox = false; + base.MinimizeBox = false; + base.Name = "FromDiailong"; + base.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "注意"; + base.ResumeLayout(false); + base.PerformLayout(); + } + } +} diff --git a/AppleBatch_June/FromExper.cs b/AppleBatch_June/FromExper.cs new file mode 100644 index 0000000..5aab052 --- /dev/null +++ b/AppleBatch_June/FromExper.cs @@ -0,0 +1,139 @@ +using System; +using System.ComponentModel; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.Text; +using System.Windows.Forms; + +namespace AppleBatch_June +{ + public class FromExper : Form + { + public string txtInfo; + + private IContainer components; + + private RichTextBox richTextBox1; + + private ContextMenuStrip contextMenuStrip1; + + private ToolStripMenuItem 全选ToolStripMenuItem; + + private ToolStripMenuItem 复制选中ToolStripMenuItem; + + public FromExper() + { + InitializeComponent(); + } + + private void FromExper_Load(object sender, EventArgs e) + { + try + { + Stopwatch stopwatch = Stopwatch.StartNew(); + string bodyName = Encoding.Default.BodyName; + string config = AppSysConfig.getConfig("QuickExport"); + if (bodyName.ToLower() == "gb2312" && config == "1") + { + byte[] bytes = Encoding.Default.GetBytes(txtInfo.Replace("\u00a0", " ")); + if (bytes.Length > 100000) + { + MemoryStream memoryStream = new MemoryStream(bytes); + richTextBox1.LoadFile(memoryStream, RichTextBoxStreamType.PlainText); + memoryStream.Close(); + } + else + { + richTextBox1.Text = txtInfo; + } + } + else + { + richTextBox1.Text = txtInfo; + } + stopwatch.Stop(); + } + catch (Exception) + { + richTextBox1.Text = txtInfo; + } + richTextBox1.SelectAll(); + } + + private void 复制选中ToolStripMenuItem_Click(object sender, EventArgs e) + { + string selectedText = richTextBox1.SelectedText; + if (selectedText.Length > 0) + { + try + { + Clipboard.SetText(selectedText); + MessageBox.Show("复制成功"); + } + catch (Exception) + { + MessageBox.Show("复制失败"); + } + } + } + + private void 全选ToolStripMenuItem_Click(object sender, EventArgs e) + { + richTextBox1.SelectAll(); + } + + protected override void Dispose(bool disposing) + { + if (disposing && components != null) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AppleBatch_June.FromExper)); + this.richTextBox1 = new System.Windows.Forms.RichTextBox(); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.全选ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.复制选中ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.contextMenuStrip1.SuspendLayout(); + base.SuspendLayout(); + this.richTextBox1.ContextMenuStrip = this.contextMenuStrip1; + this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.richTextBox1.Location = new System.Drawing.Point(0, 0); + this.richTextBox1.Name = "richTextBox1"; + this.richTextBox1.Size = new System.Drawing.Size(800, 450); + this.richTextBox1.TabIndex = 0; + this.richTextBox1.Text = ""; + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[2] { this.全选ToolStripMenuItem, this.复制选中ToolStripMenuItem }); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(181, 70); + this.全选ToolStripMenuItem.Name = "全选ToolStripMenuItem"; + this.全选ToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.全选ToolStripMenuItem.Text = "全选"; + this.全选ToolStripMenuItem.Click += new System.EventHandler(全选ToolStripMenuItem_Click); + this.复制选中ToolStripMenuItem.Name = "复制选中ToolStripMenuItem"; + this.复制选中ToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.复制选中ToolStripMenuItem.Text = "复制选中信息"; + this.复制选中ToolStripMenuItem.Click += new System.EventHandler(复制选中ToolStripMenuItem_Click); + base.AutoScaleDimensions = new System.Drawing.SizeF(6f, 12f); + base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + base.ClientSize = new System.Drawing.Size(800, 450); + base.Controls.Add(this.richTextBox1); + base.Icon = (System.Drawing.Icon)resources.GetObject("$this.Icon"); + base.MaximizeBox = false; + base.MinimizeBox = false; + base.Name = "FromExper"; + base.ShowIcon = false; + base.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "按住Ctrl + C 复制内容粘贴到 EXCEL ,以作 EXCEL 适应"; + base.Load += new System.EventHandler(FromExper_Load); + this.contextMenuStrip1.ResumeLayout(false); + base.ResumeLayout(false); + } + } +} diff --git a/AppleBatch_June/FromFileInput.cs b/AppleBatch_June/FromFileInput.cs new file mode 100644 index 0000000..973a514 --- /dev/null +++ b/AppleBatch_June/FromFileInput.cs @@ -0,0 +1,478 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using System.Web.Script.Serialization; +using System.Windows.Forms; +using AppleBatch_June.Model; +using AppleBatch_June.Properties; +using DotNet.Utilities; + +namespace AppleBatch_June +{ + public class FromFileInput : Form + { + private CountriesReachableAt reachableAt; + + private StringBuilder filetemplate = new StringBuilder(); + + private IContainer components; + + private TextBox txtfilePach; + + private Label label1; + + private Button button1; + + private Label label2; + + private GroupBox groupBox1; + + private Label label3; + + private ComboBox comGuojia; + + private Button btnDownload; + + private Label label4; + + private ComboBox comShengshi; + + private Label label5; + + private TextBox txtShengValue; + + private GroupBox groupBox2; + + private Button button3; + + private Label label6; + + private Label label7; + + private Label labIdCount; + + private Label label8; + + private CheckBox checkBox1; + + public string path { get; set; } + + public FromFileInput() + { + InitializeComponent(); + } + + private void FromFileInput_Load(object sender, EventArgs e) + { + comShengshi.Enabled = false; + btnDownload.Enabled = false; + string @string = Encoding.UTF8.GetString(Resources.localizedResources); + JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); + reachableAt = javaScriptSerializer.Deserialize(@string); + CountriesReachableAt.Smssupportedcountriesreachableat[] smsSupportedCountriesReachableAt = reachableAt.smsSupportedCountriesReachableAt; + foreach (CountriesReachableAt.Smssupportedcountriesreachableat smssupportedcountriesreachableat in smsSupportedCountriesReachableAt) + { + comGuojia.Items.Add(smssupportedcountriesreachableat.name + "-" + smssupportedcountriesreachableat.code); + } + } + + public HttpResult getCitityInfo(string citity) + { + btnDownload.Enabled = false; + HttpHelper httpHelper = new HttpHelper(); + HttpItem httpItem = new HttpItem + { + URL = "https://appleid.apple.com/resources/addressFormat/" + citity, + Method = "GET", + Timeout = 100000, + ReadWriteTimeout = 30000, + IsToLower = false, + Cookie = " dslang=CN-ZH; geo=CN;", + UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36", + Accept = "application/json", + ContentType = "application/json", + Referer = "https://appleid.apple.com/account/manage", + WebProxy = WebRequest.DefaultWebProxy, + ResultType = ResultType.String + }; + httpItem.Header.Add("X-Apple-Api-Key", "cbf64fd6843ee630b463f358ea0b707b"); + httpItem.Header.Add("X-Requested-With", "XMLHttpRequest"); + httpItem.Header.Add("Accept-Encoding", "gzip, deflate"); + return httpHelper.GetHtml(httpItem); + } + + private void btnDownload_Click(object sender, EventArgs e) + { + string text = comGuojia.Text; + if (string.IsNullOrEmpty(text)) + { + MessageBox.Show("请先选择国家"); + return; + } + string text2 = filetemplate.ToString(); + if (text2.Length == 0) + { + MessageBox.Show("请先选择国家"); + return; + } + if (checkBox1.Checked) + { + text2 += ",卡号,有效期限年,有效期限月,安全码"; + } + SaveFileDialog saveFileDialog = new SaveFileDialog(); + saveFileDialog.Filter = "csv文件|*.csv"; + saveFileDialog.FilterIndex = 0; + saveFileDialog.Title = text.Split('-')[0] + "_账单地址修改模板"; + saveFileDialog.FileName = saveFileDialog.Title; + if (saveFileDialog.ShowDialog() == DialogResult.OK) + { + StreamWriter streamWriter = new StreamWriter(saveFileDialog.FileName, append: true, Encoding.UTF8); + streamWriter.Write(text2); + streamWriter.Close(); + MessageBox.Show("下载模板完成"); + } + } + + private void comGuojia_SelectedIndexChanged(object sender, EventArgs e) + { + string text = comGuojia.Text; + if (!string.IsNullOrEmpty(text)) + { + string citity = text.Split('-')[1]; + HttpResult citityInfo = getCitityInfo(citity); + if (citityInfo.StatusCode == HttpStatusCode.OK) + { + filetemplate.Clear(); + dynamic val = Tools.Todejosn(citityInfo.Html); + Dictionary dictionary = val["fields"]; + filetemplate.Append("账号(必填),密码(必填),答案1(必填),答案2(必填),答案3(必填),姓氏,名字,账单姓氏,账单名字,"); + if (dictionary.ContainsKey("line1")) + { + filetemplate.Append("街道地址,"); + } + if (dictionary.ContainsKey("line2")) + { + filetemplate.Append("楼号单元,"); + } + if (dictionary.ContainsKey("suburb")) + { + filetemplate.Append("区,"); + } + if (dictionary.ContainsKey("county")) + { + filetemplate.Append("县,"); + } + if (dictionary.ContainsKey("city")) + { + filetemplate.Append("城市,"); + } + if (dictionary.ContainsKey("postalCode")) + { + filetemplate.Append("邮编,"); + } + if (dictionary.ContainsKey("taxId")) + { + filetemplate.Append("税号,"); + } + if (!dictionary.ContainsKey("stateProvince")) + { + comGuojia.Text = ""; + comShengshi.Enabled = false; + txtShengValue.Text = "该国家ID无法修改省市"; + } + else + { + filetemplate.Append("省/市,"); + comShengshi.Enabled = true; + comShengshi.Items.Clear(); + foreach (dynamic item2 in ((dynamic)dictionary["stateProvince"])["values"]) + { + string item = item2["title"] + "-" + item2["name"]; + comShengshi.Items.Add(item); + } + if (comShengshi.Items.Count > 0) + { + comShengshi.SelectedIndex = 0; + } + } + if (dictionary.ContainsKey("phoneAreaCode")) + { + filetemplate.Append("区号,"); + } + filetemplate.Append("电话"); + } + else + { + MessageBox.Show("网络错误"); + } + } + btnDownload.Enabled = true; + } + + private void comShengshi_SelectedIndexChanged(object sender, EventArgs e) + { + string text = comShengshi.Text; + if (!string.IsNullOrEmpty(text)) + { + string text2 = text.Split('-')[1]; + txtShengValue.Text = text2; + } + } + + private void button1_Click(object sender, EventArgs e) + { + OpenFileDialog openFileDialog = new OpenFileDialog(); + openFileDialog.Filter = "csv文件|*.csv"; + if (openFileDialog.ShowDialog() == DialogResult.OK) + { + string fileName = openFileDialog.FileName; + txtfilePach.Text = fileName; + int num = (from c in Tools.readFile(fileName).Split('\n') + where !string.IsNullOrEmpty(c) + select c).Count() - 1; + labIdCount.Text = num.ToString(); + } + } + + private void button3_Click(object sender, EventArgs e) + { + path = txtfilePach.Text; + base.DialogResult = DialogResult.OK; + } + + private void FromFileInput_DragDrop(object sender, DragEventArgs e) + { + string[] array = (string[])e.Data.GetData(DataFormats.FileDrop); + int num = 0; + string text; + while (true) + { + if (num < array.Length) + { + text = array[num]; + if (Path.GetExtension(text).ToLower() == ".csv") + { + break; + } + MessageBox.Show("请导入CSV 模板文件"); + num++; + continue; + } + return; + } + string url = text; + txtfilePach.Text = url; + int num2 = (from c in Tools.readFile(url).Split('\n') + where !string.IsNullOrEmpty(c) + select c).Count() - 1; + labIdCount.Text = num2.ToString(); + } + + private void FromFileInput_DragEnter(object sender, DragEventArgs e) + { + if (e.Data.GetDataPresent(DataFormats.FileDrop)) + { + e.Effect = DragDropEffects.Copy; + } + } + + protected override void Dispose(bool disposing) + { + if (disposing && components != null) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.txtfilePach = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.button1 = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.label6 = new System.Windows.Forms.Label(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.label4 = new System.Windows.Forms.Label(); + this.txtShengValue = new System.Windows.Forms.TextBox(); + this.comShengshi = new System.Windows.Forms.ComboBox(); + this.label5 = new System.Windows.Forms.Label(); + this.btnDownload = new System.Windows.Forms.Button(); + this.label3 = new System.Windows.Forms.Label(); + this.comGuojia = new System.Windows.Forms.ComboBox(); + this.button3 = new System.Windows.Forms.Button(); + this.label7 = new System.Windows.Forms.Label(); + this.labIdCount = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.groupBox1.SuspendLayout(); + this.groupBox2.SuspendLayout(); + base.SuspendLayout(); + this.txtfilePach.Location = new System.Drawing.Point(68, 33); + this.txtfilePach.Name = "txtfilePach"; + this.txtfilePach.ReadOnly = true; + this.txtfilePach.Size = new System.Drawing.Size(377, 21); + this.txtfilePach.TabIndex = 0; + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(4, 37); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(53, 12); + this.label1.TabIndex = 1; + this.label1.Text = "文件地址"; + this.button1.Location = new System.Drawing.Point(456, 32); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 2; + this.button1.Text = "选择文件"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(button1_Click); + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(66, 11); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(149, 12); + this.label2.TabIndex = 3; + this.label2.Text = "请选择或者拖拽文件到此处"; + this.groupBox1.Controls.Add(this.checkBox1); + this.groupBox1.Controls.Add(this.label6); + this.groupBox1.Controls.Add(this.groupBox2); + this.groupBox1.Controls.Add(this.btnDownload); + this.groupBox1.Controls.Add(this.label3); + this.groupBox1.Controls.Add(this.comGuojia); + this.groupBox1.Location = new System.Drawing.Point(21, 120); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(509, 153); + this.groupBox1.TabIndex = 4; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "模板下载------请用 WPS 或者 Excel 打开模板文件"; + this.checkBox1.AutoSize = true; + this.checkBox1.Location = new System.Drawing.Point(277, 25); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.Size = new System.Drawing.Size(108, 16); + this.checkBox1.TabIndex = 9; + this.checkBox1.Text = "添加借记卡内容"; + this.checkBox1.UseVisualStyleBackColor = true; + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(287, 79); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(149, 60); + this.label6.TabIndex = 8; + this.label6.Text = "有省市修改的ID,\r\n\r\n请使用对应省份的填写值,\r\n\r\n否则无法修改成功"; + this.groupBox2.Controls.Add(this.label4); + this.groupBox2.Controls.Add(this.txtShengValue); + this.groupBox2.Controls.Add(this.comShengshi); + this.groupBox2.Controls.Add(this.label5); + this.groupBox2.Location = new System.Drawing.Point(21, 56); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(251, 85); + this.groupBox2.TabIndex = 7; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "省/市填写值查询"; + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(7, 26); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(53, 12); + this.label4.TabIndex = 3; + this.label4.Text = "选择省市"; + this.txtShengValue.Location = new System.Drawing.Point(67, 56); + this.txtShengValue.Name = "txtShengValue"; + this.txtShengValue.ReadOnly = true; + this.txtShengValue.Size = new System.Drawing.Size(164, 21); + this.txtShengValue.TabIndex = 6; + this.comShengshi.FormattingEnabled = true; + this.comShengshi.Location = new System.Drawing.Point(68, 22); + this.comShengshi.Name = "comShengshi"; + this.comShengshi.Size = new System.Drawing.Size(163, 20); + this.comShengshi.TabIndex = 2; + this.comShengshi.SelectedIndexChanged += new System.EventHandler(comShengshi_SelectedIndexChanged); + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(13, 59); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(41, 12); + this.label5.TabIndex = 5; + this.label5.Text = "填写值"; + this.btnDownload.Location = new System.Drawing.Point(391, 20); + this.btnDownload.Name = "btnDownload"; + this.btnDownload.Size = new System.Drawing.Size(107, 23); + this.btnDownload.TabIndex = 4; + this.btnDownload.Text = "下载该国家模板"; + this.btnDownload.UseVisualStyleBackColor = true; + this.btnDownload.Click += new System.EventHandler(btnDownload_Click); + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(19, 28); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(53, 12); + this.label3.TabIndex = 1; + this.label3.Text = "选择国家"; + this.comGuojia.FormattingEnabled = true; + this.comGuojia.Location = new System.Drawing.Point(78, 23); + this.comGuojia.Name = "comGuojia"; + this.comGuojia.Size = new System.Drawing.Size(185, 20); + this.comGuojia.TabIndex = 0; + this.comGuojia.SelectedIndexChanged += new System.EventHandler(comGuojia_SelectedIndexChanged); + this.button3.Font = new System.Drawing.Font("宋体", 10.5f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.button3.ForeColor = System.Drawing.Color.Green; + this.button3.Location = new System.Drawing.Point(141, 60); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(132, 36); + this.button3.TabIndex = 5; + this.button3.Text = "使用该文件导入"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(button3_Click); + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(308, 73); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(77, 12); + this.label7.TabIndex = 6; + this.label7.Text = "文件ID数量:"; + this.labIdCount.AutoSize = true; + this.labIdCount.Location = new System.Drawing.Point(392, 73); + this.labIdCount.Name = "labIdCount"; + this.labIdCount.Size = new System.Drawing.Size(11, 12); + this.labIdCount.TabIndex = 7; + this.labIdCount.Text = "0"; + this.label8.AutoSize = true; + this.label8.Font = new System.Drawing.Font("宋体", 9f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.label8.ForeColor = System.Drawing.Color.Red; + this.label8.Location = new System.Drawing.Point(231, 11); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(226, 12); + this.label8.TabIndex = 9; + this.label8.Text = "模板内容有值才会修改,留空则不修改"; + this.AllowDrop = true; + base.AutoScaleDimensions = new System.Drawing.SizeF(6f, 12f); + base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + base.ClientSize = new System.Drawing.Size(542, 283); + base.Controls.Add(this.label8); + base.Controls.Add(this.labIdCount); + base.Controls.Add(this.label7); + base.Controls.Add(this.button3); + base.Controls.Add(this.groupBox1); + base.Controls.Add(this.label2); + base.Controls.Add(this.button1); + base.Controls.Add(this.label1); + base.Controls.Add(this.txtfilePach); + base.MaximizeBox = false; + base.MinimizeBox = false; + base.Name = "FromFileInput"; + base.ShowIcon = false; + base.ShowInTaskbar = false; + base.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "文件导入"; + base.Load += new System.EventHandler(FromFileInput_Load); + base.DragDrop += new System.Windows.Forms.DragEventHandler(FromFileInput_DragDrop); + base.DragEnter += new System.Windows.Forms.DragEventHandler(FromFileInput_DragEnter); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + base.ResumeLayout(false); + base.PerformLayout(); + } + } +} diff --git a/AppleBatch_June/FromInputAcount.cs b/AppleBatch_June/FromInputAcount.cs new file mode 100644 index 0000000..c0e6c72 --- /dev/null +++ b/AppleBatch_June/FromInputAcount.cs @@ -0,0 +1,424 @@ +using System; +using System.ComponentModel; +using System.Drawing; +using System.Threading.Tasks; +using System.Windows.Forms; +using AppleBatch_June.ExecuteTasks; + +namespace AppleBatch_June +{ + public class FromInputAcount : Form + { + private IContainer components; + + private Label label2; + + private Label label1; + + private TextBox txtTipMsg; + + private Button btnInput; + + private CheckBox ckAotuIdent; + + private ContextMenuStrip contextMenuStrip1; + + private ToolStripMenuItem 粘贴ToolStripMenuItem; + + private GroupBox groupBox1; + + private Label label4; + + private TextBox txtNewStr; + + private Label label3; + + private TextBox txtOldStr; + + private Button button1; + + private CheckBox ckInputReci; + + private CheckBox ckReplace; + + private Label label5; + + private Label label6; + + private TextBox txtSeparator; + + private Label label7; + + private Panel panel1; + + public RichTextBox txtInputtext; + + public string tipMssage { get; set; } + + public bool isOpenSysVpn { get; set; } + + public string StrInput { get; set; } + + public FromInputAcount() + { + InitializeComponent(); + } + + private void FromInputAcount_Load(object sender, EventArgs e) + { + Console.WriteLine("isOpenSysVpn:" + isOpenSysVpn); + if (isOpenSysVpn) + { + string config = AppSysConfig.getConfig("InputPreloadingVpn"); + if (DateTime.Now.AddMinutes(-5.0) > ProxyRunService.getApiUrlLostTime && config == "1") + { + Task.Run(delegate + { + string authenUserInfo = ""; + ProxyRunService.GetApiUrl(ref authenUserInfo); + }); + } + } + if (!string.IsNullOrEmpty(tipMssage)) + { + txtTipMsg.Text = tipMssage; + } + txtSeparator.Text = ConfigUtlis.getConfigValue("txtSeparator"); + ckAotuIdent.Checked = ((!(ConfigUtlis.getConfigValue("ckAotuIdent") == "False")) ? true : false); + ckInputReci.Checked = ((ConfigUtlis.getConfigValue("ckInputReci") == "True") ? true : false); + ckReplace.Checked = ((ConfigUtlis.getConfigValue("ckReplace") == "True") ? true : false); + if (ckReplace.Checked) + { + Panel panel = panel1; + GroupBox groupBox = groupBox1; + bool flag = true; + groupBox.Visible = true; + panel.Visible = true; + } + else + { + Panel panel2 = panel1; + GroupBox groupBox2 = groupBox1; + bool flag = false; + groupBox2.Visible = false; + panel2.Visible = false; + } + txtNewStr.Text = ConfigUtlis.getConfigValue("txtNewStr"); + txtOldStr.Text = ConfigUtlis.getConfigValue("txtOldStr"); + } + + private void btnInput_Click(object sender, EventArgs e) + { + ConfigUtlis.saveConfigKey("ckInputReci", ckInputReci.Checked.ToString()); + if (ckReplace.Checked && ckInputReci.Checked) + { + ConfigUtlis.saveConfigKey("txtNewStr", txtNewStr.Text.ToString()); + ConfigUtlis.saveConfigKey("txtOldStr", txtOldStr.Text.ToString()); + string text = txtNewStr.Text; + string text2 = txtOldStr.Text; + if (txtNewStr.Text == "\\n") + { + text = "\n"; + } + if (txtOldStr.Text == "\\n") + { + text2 = "\n"; + } + if (!string.IsNullOrEmpty(text2) && !string.IsNullOrEmpty(text)) + { + txtInputtext.Text = txtInputtext.Text.Replace(text2, text); + } + } + StrInput = txtInputtext.Text; + base.DialogResult = DialogResult.OK; + } + + private void checkBox1_CheckedChanged(object sender, EventArgs e) + { + ConfigUtlis.saveConfigKey("ckAotuIdent", ckAotuIdent.Checked.ToString()); + } + + private void 粘贴ToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + IDataObject dataObject = Clipboard.GetDataObject(); + if (dataObject.GetDataPresent(DataFormats.Text)) + { + txtInputtext.Text = (string)dataObject.GetData(DataFormats.Text); + } + } + catch (Exception) + { + MessageBox.Show("粘贴失败"); + } + } + + private void button1_Click(object sender, EventArgs e) + { + ConfigUtlis.saveConfigKey("txtNewStr", txtNewStr.Text.ToString()); + ConfigUtlis.saveConfigKey("txtOldStr", txtOldStr.Text.ToString()); + string text = txtNewStr.Text; + string text2 = txtOldStr.Text; + if (txtNewStr.Text == "\\n") + { + text = "\n"; + } + if (txtOldStr.Text == "\\n") + { + text2 = "\n"; + } + if (!string.IsNullOrEmpty(text2) && !string.IsNullOrEmpty(text)) + { + txtInputtext.Text = txtInputtext.Text.Replace(text2, text); + } + } + + private void ckInputReci_CheckedChanged(object sender, EventArgs e) + { + ConfigUtlis.saveConfigKey("ckInputReci", ckInputReci.Checked.ToString()); + } + + private void ckReplace_CheckedChanged(object sender, EventArgs e) + { + ConfigUtlis.saveConfigKey("ckReplace", ckReplace.Checked.ToString()); + if (ckReplace.Checked) + { + Panel panel = panel1; + GroupBox groupBox = groupBox1; + bool flag = true; + groupBox.Visible = true; + panel.Visible = true; + } + else + { + Panel panel2 = panel1; + GroupBox groupBox2 = groupBox1; + bool flag = false; + groupBox2.Visible = false; + panel2.Visible = false; + } + } + + private void txtseparator_TextChanged(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(txtSeparator.Text)) + { + ConfigUtlis.saveConfigKey("txtSeparator", ""); + } + else + { + ConfigUtlis.saveConfigKey("txtSeparator", txtSeparator.Text[0].ToString()); + } + } + + protected override void Dispose(bool disposing) + { + if (disposing && components != null) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AppleBatch_June.FromInputAcount)); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.txtTipMsg = new System.Windows.Forms.TextBox(); + this.btnInput = new System.Windows.Forms.Button(); + this.txtInputtext = new System.Windows.Forms.RichTextBox(); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.粘贴ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.ckAotuIdent = new System.Windows.Forms.CheckBox(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.ckInputReci = new System.Windows.Forms.CheckBox(); + this.label4 = new System.Windows.Forms.Label(); + this.txtNewStr = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.txtOldStr = new System.Windows.Forms.TextBox(); + this.button1 = new System.Windows.Forms.Button(); + this.ckReplace = new System.Windows.Forms.CheckBox(); + this.label5 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.txtSeparator = new System.Windows.Forms.TextBox(); + this.label7 = new System.Windows.Forms.Label(); + this.panel1 = new System.Windows.Forms.Panel(); + this.contextMenuStrip1.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.panel1.SuspendLayout(); + base.SuspendLayout(); + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(396, 22); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(84, 17); + this.label2.TabIndex = 9; + this.label2.Text = "多个ID,请换行"; + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(15, 21); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(56, 17); + this.label1.TabIndex = 8; + this.label1.Text = "标准格式"; + this.txtTipMsg.Location = new System.Drawing.Point(71, 18); + this.txtTipMsg.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.txtTipMsg.Name = "txtTipMsg"; + this.txtTipMsg.ReadOnly = true; + this.txtTipMsg.Size = new System.Drawing.Size(320, 23); + this.txtTipMsg.TabIndex = 7; + this.txtTipMsg.Text = "xxx@xx.com----密码-答案1-答案2-答案3"; + this.btnInput.Font = new System.Drawing.Font("微软雅黑", 10.5f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134); + this.btnInput.ForeColor = System.Drawing.Color.Green; + this.btnInput.Location = new System.Drawing.Point(266, 336); + this.btnInput.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.btnInput.Name = "btnInput"; + this.btnInput.Size = new System.Drawing.Size(149, 56); + this.btnInput.TabIndex = 6; + this.btnInput.Text = "导入账号"; + this.btnInput.UseVisualStyleBackColor = true; + this.btnInput.Click += new System.EventHandler(btnInput_Click); + this.txtInputtext.ContextMenuStrip = this.contextMenuStrip1; + this.txtInputtext.ForeColor = System.Drawing.SystemColors.MenuHighlight; + this.txtInputtext.Location = new System.Drawing.Point(21, 49); + this.txtInputtext.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.txtInputtext.Name = "txtInputtext"; + this.txtInputtext.Size = new System.Drawing.Size(667, 279); + this.txtInputtext.TabIndex = 5; + this.txtInputtext.Text = ""; + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[1] { this.粘贴ToolStripMenuItem }); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(101, 26); + this.粘贴ToolStripMenuItem.Name = "粘贴ToolStripMenuItem"; + this.粘贴ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); + this.粘贴ToolStripMenuItem.Text = "粘贴"; + this.粘贴ToolStripMenuItem.Click += new System.EventHandler(粘贴ToolStripMenuItem_Click); + this.ckAotuIdent.AutoSize = true; + this.ckAotuIdent.Location = new System.Drawing.Point(482, 21); + this.ckAotuIdent.Name = "ckAotuIdent"; + this.ckAotuIdent.Size = new System.Drawing.Size(112, 21); + this.ckAotuIdent.TabIndex = 10; + this.ckAotuIdent.Text = "智能识别ID格式"; + this.ckAotuIdent.UseVisualStyleBackColor = true; + this.ckAotuIdent.CheckedChanged += new System.EventHandler(checkBox1_CheckedChanged); + this.groupBox1.Controls.Add(this.ckInputReci); + this.groupBox1.Controls.Add(this.label4); + this.groupBox1.Controls.Add(this.txtNewStr); + this.groupBox1.Controls.Add(this.label3); + this.groupBox1.Controls.Add(this.txtOldStr); + this.groupBox1.Controls.Add(this.button1); + this.groupBox1.Location = new System.Drawing.Point(438, 331); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(254, 71); + this.groupBox1.TabIndex = 11; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "批量数据字符替换,换行用 \\n"; + this.groupBox1.Visible = false; + this.ckInputReci.AutoSize = true; + this.ckInputReci.Location = new System.Drawing.Point(147, 15); + this.ckInputReci.Name = "ckInputReci"; + this.ckInputReci.Size = new System.Drawing.Size(99, 21); + this.ckInputReci.TabIndex = 5; + this.ckInputReci.Text = "导入自动替换"; + this.ckInputReci.UseVisualStyleBackColor = true; + this.ckInputReci.CheckedChanged += new System.EventHandler(ckInputReci_CheckedChanged); + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(7, 46); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(56, 17); + this.label4.TabIndex = 4; + this.label4.Text = "替换字符"; + this.txtNewStr.Location = new System.Drawing.Point(66, 43); + this.txtNewStr.Name = "txtNewStr"; + this.txtNewStr.Size = new System.Drawing.Size(74, 23); + this.txtNewStr.TabIndex = 3; + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(12, 19); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(44, 17); + this.label3.TabIndex = 2; + this.label3.Text = "原字符"; + this.txtOldStr.Location = new System.Drawing.Point(64, 16); + this.txtOldStr.Name = "txtOldStr"; + this.txtOldStr.Size = new System.Drawing.Size(76, 23); + this.txtOldStr.TabIndex = 1; + this.button1.Location = new System.Drawing.Point(148, 38); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(86, 30); + this.button1.TabIndex = 0; + this.button1.Text = "替换"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(button1_Click); + this.ckReplace.AutoSize = true; + this.ckReplace.Location = new System.Drawing.Point(598, 21); + this.ckReplace.Name = "ckReplace"; + this.ckReplace.Size = new System.Drawing.Size(99, 21); + this.ckReplace.TabIndex = 12; + this.ckReplace.Text = "分割符和替换"; + this.ckReplace.UseVisualStyleBackColor = true; + this.ckReplace.CheckedChanged += new System.EventHandler(ckReplace_CheckedChanged); + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(5, 344); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(234, 17); + this.label5.TabIndex = 13; + this.label5.Text = "密码字段如果有 - (横杠) 的话,用 {-} 代替"; + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(5, 8); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(44, 17); + this.label6.TabIndex = 15; + this.label6.Text = "分隔符"; + this.txtSeparator.Location = new System.Drawing.Point(50, 5); + this.txtSeparator.Name = "txtSeparator"; + this.txtSeparator.Size = new System.Drawing.Size(33, 23); + this.txtSeparator.TabIndex = 14; + this.txtSeparator.TextChanged += new System.EventHandler(txtseparator_TextChanged); + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(91, 8); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(80, 17); + this.label7.TabIndex = 16; + this.label7.Text = "默认: - (横杠)"; + this.panel1.Controls.Add(this.label6); + this.panel1.Controls.Add(this.label7); + this.panel1.Controls.Add(this.txtSeparator); + this.panel1.Location = new System.Drawing.Point(12, 365); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(196, 33); + this.panel1.TabIndex = 17; + base.AutoScaleDimensions = new System.Drawing.SizeF(7f, 17f); + base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + base.ClientSize = new System.Drawing.Size(700, 407); + base.Controls.Add(this.panel1); + base.Controls.Add(this.label5); + base.Controls.Add(this.ckReplace); + base.Controls.Add(this.groupBox1); + base.Controls.Add(this.ckAotuIdent); + base.Controls.Add(this.label2); + base.Controls.Add(this.label1); + base.Controls.Add(this.txtTipMsg); + base.Controls.Add(this.btnInput); + base.Controls.Add(this.txtInputtext); + this.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + base.Icon = (System.Drawing.Icon)resources.GetObject("$this.Icon"); + base.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + base.MaximizeBox = false; + base.MinimizeBox = false; + base.Name = "FromInputAcount"; + base.ShowIcon = false; + base.ShowInTaskbar = false; + base.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "账号导入"; + base.Load += new System.EventHandler(FromInputAcount_Load); + this.contextMenuStrip1.ResumeLayout(false); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + base.ResumeLayout(false); + base.PerformLayout(); + } + } +} diff --git a/AppleBatch_June/FromMain.cs b/AppleBatch_June/FromMain.cs new file mode 100644 index 0000000..64cd321 --- /dev/null +++ b/AppleBatch_June/FromMain.cs @@ -0,0 +1,13470 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Management; +using System.Net; +using System.Net.Security; +using System.Runtime.InteropServices; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using AppleBatch_June.Domain; +using AppleBatch_June.ExecuteTasks; +using AppleBatch_June.Forms; +using AppleBatch_June.Model; +using AppleBatch_June.Properties; +using AppleBatch_June.Utils; +using AppleBatch_June.Views; +using DotNet.Utilities; +using Microsoft.VisualBasic; + +namespace AppleBatch_June +{ + public class FromMain : Form + { + private bool isShowLogin; + + private string runTimePatch = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); + + private string _nowActListview; + + private bool userGuojia; + + private bool sysGuojia; + + private DateTime upLoginTime = DateTime.Now; + + private Dictionary forms = new Dictionary(); + + private int timeCount; + + private IContainer components; + + private ToolStrip toolStrip1; + + private ToolStripButton toolStripButton1; + + private ToolStripSeparator toolStripSeparator1; + + private ToolStripLabel toolStripLabel1; + + private TabControl tabControl1; + + private TabPage tabPage1; + + private TabPage tabPage2; + + private GroupBox groupBox1; + + private Button btnStart; + + private GroupBox groupBox2; + + private Label label1; + + private TextBox textBox1; + + private GroupBox groupBox3; + + private Button btnExpex; + + private Button btnInpu; + + private DoubleBufferListView listAreaAcount; + + private ColumnHeader columnHeader1; + + private ColumnHeader columnHeader2; + + private ColumnHeader columnHeader3; + + private ColumnHeader columnHeader4; + + private ColumnHeader columnHeader5; + + private ColumnHeader columnHeader6; + + private ColumnHeader columnHeader7; + + private GroupBox groupBox4; + + private Label labUserNam; + + private Label label2; + + private Label labintegral; + + private Label label4; + + private GroupBox groupBox5; + + private GroupBox groupBox6; + + private Label label7; + + private Label label6; + + private RichTextBox richTextBox1; + + private GroupBox groupBox7; + + private Label label9; + + private TextBox txtCode; + + private Button bthRecharge; + + private Label label8; + + private Label labfreezeIntegral; + + private Label label11; + + private GroupBox groupBox8; + + private Label label12; + + private Button btnAreaLog; + + private Label txtInvitation; + + private Label label14; + + private LinkLabel linkLabel1; + + private LinkLabel linkLabel2; + + private Button button1; + + private ContextMenuStrip MenuArea; + + private ToolStripMenuItem ToolAreDelete; + + private ToolStripMenuItem 重新执行ToolStripMenuItem; + + private ToolStripMenuItem 复制账号信息ToolStripMenuItem; + + private Label labAeraCount; + + private Label label3; + + private Label labAreaInnumber; + + private TabPage tabPage3; + + private GroupBox groupBox9; + + private Label labBalanceInter; + + private Label label10; + + private Label label13; + + private GroupBox groupBox10; + + private Label labBannerCount; + + private Label label16; + + private Button btnLiteClre; + + private Button btnBannerQuery; + + private Button btnBannerInput; + + private Button btnBannerExper; + + private Button btnBannerStart; + + private TextBox textBox2; + + private GroupBox groupBox12; + + private DoubleBufferListView listBanner; + + private ColumnHeader columnHeader8; + + private ColumnHeader columnHeader9; + + private ColumnHeader columnHeader10; + + private ColumnHeader columnHeader11; + + private ColumnHeader columnHeader12; + + private ColumnHeader columnHeader13; + + private ColumnHeader columnHeader14; + + private LinkLabel linkLabel3; + + private Label label5; + + private TabPage tabPage4; + + private TabPage tabPage5; + + private TabPage tabPage6; + + private TabPage tabPage7; + + private GroupBox groupBox14; + + private Label labChangeCount; + + private Label label21; + + private Button btnChangeCloer; + + private Button btnChangeLog; + + private Button btnChangeInput; + + private Button btnChangExper; + + private Button btnChangeStart; + + private GroupBox groupBox15; + + private TextBox textBox3; + + private GroupBox groupBox16; + + private DoubleBufferListView listAcountChange; + + private ColumnHeader columnHeader15; + + private ColumnHeader columnHeader16; + + private ColumnHeader columnHeader17; + + private ColumnHeader columnHeader18; + + private ColumnHeader columnHeader19; + + private ColumnHeader columnHeader21; + + private GroupBox groupBox13; + + private Label label23; + + private TextBox txtQt3; + + private Label label19; + + private TextBox txtQt2; + + private Label label18; + + private TextBox txtQt1; + + private Label label15; + + private Label label24; + + private TextBox txtNewpwd; + + private CheckBox ckShengRi; + + private CheckBox ckMibao; + + private CheckBox ckPwd; + + private Label label25; + + private TextBox txtShengRi; + + private ColumnHeader columnHeader22; + + private ColumnHeader columnHeader23; + + private ColumnHeader columnHeader20; + + private GroupBox groupBox17; + + private GroupBox groupBox18; + + private Label labCityCount; + + private Label label33; + + private Button btnCityCiler; + + private Button btnCityLog; + + private Button btnCityInput; + + private Button btnExper; + + private Button btnCityStart; + + private GroupBox groupBox19; + + private Label labChangCityDianShu; + + private Label label35; + + private Label label36; + + private Label label37; + + private TextBox textBox9; + + private GroupBox groupBox20; + + private DoubleBufferListView listCity; + + private ColumnHeader columnHeader24; + + private ColumnHeader columnHeader25; + + private ColumnHeader columnHeader26; + + private ColumnHeader columnHeader27; + + private ColumnHeader columnHeader28; + + private ColumnHeader columnHeader29; + + private ColumnHeader columnHeader30; + + private ColumnHeader columnHeader32; + + private Label label27; + + private ComboBox txtGuojiaZiliao; + + private ColumnHeader columnHeader31; + + private GroupBox groupBox21; + + private Label labDisPalDianShua; + + private Label label29; + + private Label label30; + + private GroupBox groupBox22; + + private Label labDislber; + + private Label label32; + + private Button btnDisabledClre; + + private Button btnDisabledLog; + + private Button btnDisabledInput; + + private Button btnDisabledExpxt; + + private Button btnDisabledStart; + + private GroupBox groupBox23; + + private Label label38; + + private TextBox textBox4; + + private GroupBox groupBox24; + + private DoubleBufferListView listDisabled; + + private ColumnHeader columnHeader33; + + private ColumnHeader columnHeader34; + + private ColumnHeader columnHeader35; + + private ColumnHeader columnHeader37; + + private ColumnHeader columnHeader39; + + private GroupBox groupBox25; + + private Label labBillDianshu; + + private Label label39; + + private Label label40; + + private GroupBox groupBox26; + + private Label labBilllCount; + + private Label label42; + + private Button btnBillCler; + + private Button btnBillLog; + + private Button btnBillInput; + + private Button btnBillExper; + + private Button btnBillStart; + + private GroupBox groupBox27; + + private Label label43; + + private TextBox textBox5; + + private GroupBox groupBox28; + + private DoubleBufferListView listBill; + + private ColumnHeader columnHeader36; + + private ColumnHeader columnHeader38; + + private ColumnHeader columnHeader40; + + private ColumnHeader columnHeader41; + + private ColumnHeader columnHeader42; + + private ColumnHeader columnHeader43; + + private ColumnHeader columnHeader44; + + private TabPage tabPage8; + + private GroupBox groupBox29; + + private Label labReddenDianShu; + + private Label label31; + + private Label label34; + + private GroupBox groupBox30; + + private Label labReddenCount; + + private Label label44; + + private Button btnReddenCire; + + private Button btnReddenLog; + + private Button btnReddenInput; + + private Button btnReddenExper; + + private Button btnReddenStart; + + private GroupBox groupBox32; + + private DoubleBufferListView listReddem; + + private ColumnHeader columnHeader45; + + private ColumnHeader columnHeader46; + + private ColumnHeader columnHeader47; + + private ColumnHeader columnHeader48; + + private ColumnHeader columnHeader49; + + private Label label45; + + private TextBox txtLoadAccount; + + private Button btnTestAccount; + + private Label label46; + + private Label label47; + + private Label labTestDianshu; + + private ColumnHeader columnHeader50; + + private CheckBox ckCityErrorgoing; + + private RadioButton rabDisleberItunes; + + private RadioButton rabDisleberWeb; + + private Label label49; + + private Label labCheckAcountMsg; + + private ColumnHeader columnHeader51; + + private Button btnReddemRest; + + private TabPage tabPage9; + + private GroupBox groupBox31; + + private Label labGameDianshu; + + private Label label41; + + private Label label48; + + private GroupBox groupBox33; + + private Label labGameCount; + + private Label label51; + + private Button btnGameClre; + + private Button btnGameLog; + + private Button btnGameInput; + + private Button btnGameExper; + + private Button btnGameStart; + + private GroupBox groupBox34; + + private Label label52; + + private TextBox textBox6; + + private GroupBox groupBox35; + + private DoubleBufferListView listGame; + + private ColumnHeader columnHeader52; + + private ColumnHeader columnHeader53; + + private ColumnHeader columnHeader54; + + private ColumnHeader columnHeader55; + + private ColumnHeader columnHeader56; + + private ColumnHeader columnHeader57; + + private ColumnHeader columnHeader58; + + private Button btnOpenFile; + + private Label label54; + + private TextBox txtGameList; + + private Label labGaneCount; + + private Label label53; + + private Button btnAppList; + + private ColumnHeader columnHeader59; + + private Label label28; + + private ComboBox comSelectTime; + + private CheckBox ckBillExperFile; + + private ColumnHeader columnHeader60; + + private LinkLabel labDir; + + private ColumnHeader columnHeader61; + + private LinkLabel linkLabel4; + + private ComboBox comUserGuojia; + + private Label labUserGuojia; + + private CheckBox ckChangVpn; + + private CheckBox ckCityVpn; + + private CheckBox ckDispalVpn; + + private TabPage tabPage10; + + private TabControl tabControl2; + + private TabPage tabPage11; + + private TabPage tabPage13; + + private GroupBox groupBox37; + + private Label label57; + + private Label label58; + + private Label label59; + + private Label label60; + + private Label label61; + + private TextBox textBox7; + + private GroupBox groupBox38; + + private Label label64; + + private TextBox txtRecoveryPwd; + + private GroupBox groupBox36; + + private CheckBox ckRecoveryVpn; + + private Label labRecoveryCount; + + private Label label56; + + private Button btnRecoveryCler; + + private Button btnRecoveryLog; + + private Button btnRecoveryInput; + + private Button btnRecoveryExpet; + + private Button btnRecoveryStart; + + private GroupBox groupBox39; + + private DoubleBufferListView listRecovery; + + private ColumnHeader columnHeader62; + + private ColumnHeader columnHeader63; + + private ColumnHeader columnHeader64; + + private ColumnHeader columnHeader65; + + private ColumnHeader columnHeader66; + + private ColumnHeader columnHeader67; + + private ColumnHeader columnHeader68; + + private ColumnHeader columnHeader70; + + private Label label62; + + private GroupBox groupBox40; + + private ComboBox comUserCountrySelect; + + private Label label55; + + private LinkLabel linkLabel5; + + private ComboBox ComCountrySelectList; + + private Label label63; + + private GroupBox groupBox41; + + private Label labCountryCount; + + private Label label66; + + private Button brnCountryClare; + + private Button btnCountryLog; + + private Button btnCountryInput; + + private Button btnCountryExpert; + + private Button btnCountryStart; + + private GroupBox groupBox42; + + private Label labCountryDianshu; + + private Label label68; + + private Label label70; + + private TextBox textBox8; + + private GroupBox groupBox43; + + private DoubleBufferListView listCountry; + + private ColumnHeader columnHeader69; + + private ColumnHeader columnHeader71; + + private ColumnHeader columnHeader72; + + private ColumnHeader columnHeader77; + + private ColumnHeader columnHeader78; + + private CheckBox ckCountryVpn; + + private CheckBox ckReddenVpn; + + private CheckBox ckFeeApp; + + private ToolStripMenuItem tipInputPwd; + + private Button button2; + + private Button button3; + + private CheckBox ckBillVpn; + + private TabPage tabPage12; + + private GroupBox groupBox45; + + private DoubleBufferListView ListCloseAuthen; + + private ColumnHeader columnHeader73; + + private ColumnHeader columnHeader74; + + private ColumnHeader columnHeader75; + + private ColumnHeader columnHeader76; + + private ColumnHeader columnHeader79; + + private ColumnHeader columnHeader80; + + private ColumnHeader columnHeader81; + + private ColumnHeader columnHeader82; + + private GroupBox groupBox46; + + private Label label67; + + private Label labCloseAuthenDianshu; + + private Label label71; + + private Label label72; + + private Label label73; + + private TextBox textBox10; + + private GroupBox groupBox47; + + private Label label74; + + private Label label75; + + private TextBox txtCloseAuthenPwd; + + private GroupBox groupBox48; + + private CheckBox ckCloseAuthenVpn; + + private Label labCloseAuthenCount; + + private Label label77; + + private Button benCloseAuthenClre; + + private Button btnCloseAuthenLog; + + private Button btnCloseAuthenInput; + + private Button btnCloseAuthenExpre; + + private Button btnCloseAuthenStart; + + private ColumnHeader columnHeader90; + + private TabPage tabPage14; + + private GroupBox groupBox49; + + private Label label69; + + private TextBox txtChangAccountShengri; + + private TextBox txtChangAccountQt1; + + private Label label76; + + private Label label78; + + private TextBox txtChangAccountPwd; + + private Label label79; + + private TextBox txtChangAccountQt3; + + private Label label80; + + private TextBox txtChangAccountQt2; + + private GroupBox groupBox50; + + private CheckBox ckChangAccountVpn; + + private Label labChangAccountCount; + + private Label label82; + + private Button btnChangAccountClre; + + private Button btnChangAccountLog; + + private Button btnChangAccountInput; + + private Button btnChangAccountExpret; + + private Button btnChangAccountStart; + + private GroupBox groupBox51; + + private Label labChangAccountDianshu; + + private Label label85; + + private Label label86; + + private TextBox textBox16; + + private GroupBox groupBox52; + + private DoubleBufferListView listChangAccount; + + private ColumnHeader columnHeader83; + + private ColumnHeader columnHeader84; + + private ColumnHeader columnHeader85; + + private ColumnHeader columnHeader86; + + private ColumnHeader columnHeader87; + + private ColumnHeader columnHeader88; + + private ColumnHeader columnHeader89; + + private ColumnHeader columnHeader91; + + private ColumnHeader columnHeader92; + + private ColumnHeader columnHeader93; + + private TabPage tabPage15; + + private TabPage tabPage16; + + private TabPage tabPage17; + + private GroupBox groupBox53; + + private Label labInfoDianshu; + + private Label label84; + + private Label label88; + + private GroupBox groupBox54; + + private Label labInfoCount; + + private Label label90; + + private Button btnInfoClare; + + private Button btnInfoLog; + + private Button btnInfoInput; + + private Button btnInfoExprt; + + private Button btnInfoStart; + + private GroupBox groupBox55; + + private Label label91; + + private TextBox textBox11; + + private GroupBox groupBox56; + + private DoubleBufferListView lvInfoList; + + private ColumnHeader columnHeader94; + + private ColumnHeader columnHeader95; + + private ColumnHeader columnHeader96; + + private ColumnHeader columnHeader97; + + private ColumnHeader columnHeader98; + + private ColumnHeader columnHeader99; + + private ColumnHeader columnHeader100; + + private ColumnHeader columnHeader101; + + private ColumnHeader columnHeader102; + + private GroupBox groupBox57; + + private Label labOrderDianshu; + + private Label label83; + + private Label label89; + + private GroupBox groupBox58; + + private Label labOrderCount; + + private Label label93; + + private Button btnOrderClre; + + private Button btnOrderLog; + + private Button btnOrderInput; + + private Button btnOrderExprt; + + private Button btnOrderStart; + + private GroupBox groupBox60; + + private DoubleBufferListView lvOrderList; + + private ColumnHeader columnHeader103; + + private ColumnHeader columnHeader104; + + private ColumnHeader columnHeader105; + + private ColumnHeader columnHeader106; + + private ColumnHeader columnHeader112; + + private GroupBox groupBox61; + + private Label labAddrDianshu; + + private Label label92; + + private Label label95; + + private GroupBox groupBox62; + + private Label labAddresCount; + + private Label label97; + + private Button btnAddresClre; + + private Button btnAddresInfo; + + private Button btnAddresInput; + + private Button btnAddresExprt; + + private Button btnAddresStart; + + private GroupBox groupBox63; + + private Label label98; + + private TextBox textBox13; + + private GroupBox groupBox64; + + private DoubleBufferListView lvAddresList; + + private ColumnHeader columnHeader107; + + private ColumnHeader columnHeader108; + + private ColumnHeader columnHeader109; + + private ColumnHeader columnHeader113; + + private ColumnHeader columnHeader114; + + private ColumnHeader columnHeader115; + + private ColumnHeader columnHeader110; + + private ColumnHeader columnHeader111; + + private ColumnHeader columnHeader116; + + private CheckBox ckAddresVpn; + + private CheckBox ckOrderVpn; + + private Button button4; + + private LinkLabel linkLabel6; + + private CheckBox ckDeleAlldevice; + + private Button btnCheckCodeDelay; + + private Label label87; + + private TextBox txtcheckCodeDelay; + + private CheckBox CkInfoVpn; + + private ToolStripDropDownButton toolITunesConfig; + + private ToolStripMenuItem ckiTunesRemote; + + private ToolStripMenuItem ckiTunesLocal; + + private CheckBox ckBannalVpn; + + private CheckBox ckAreaVpn; + + private CheckBox ckGameVpn; + + private ToolStripLabel toolStripButton3; + + private ToolStripButton toolNetworkConfig; + + private ColumnHeader columnHeader117; + + private ColumnHeader columnHeader118; + + private CheckBox ckOwe; + + private Label labOweCount; + + private Label label96; + + private CheckBox ckQueryMOdel; + + private TabPage tabPage18; + + private GroupBox groupBox65; + + private CheckBox ckAuthenVpn; + + private Label labAuthenCount; + + private Label label100; + + private Label label101; + + private GroupBox groupBox66; + + private Label labAuthenAccountCount; + + private Label label103; + + private Button btnAuthenClare; + + private Button btnAuthenLog; + + private Button btnAuthenInput; + + private Button btnAuthenExpre; + + private Button btnAuthenStart; + + private GroupBox groupBox67; + + private GroupBox groupBox68; + + private DoubleBufferListView lvAuthen; + + private ColumnHeader columnHeader119; + + private ColumnHeader columnHeader120; + + private ColumnHeader columnHeader121; + + private ColumnHeader columnHeader122; + + private ColumnHeader columnHeader123; + + private ColumnHeader columnHeader124; + + private ColumnHeader columnHeader126; + + private Label label104; + + private TextBox textBox14; + + private ColumnHeader columnHeader128; + + private ColumnHeader columnHeader125; + + private Label label99; + + private RadioButton ridChoice; + + private RadioButton ridSms; + + private ComboBox comAuthenCountries; + + private Label label20; + + private TabPage tabPage19; + + private GroupBox groupBox71; + + private CheckBox ckWebOrderVpn; + + private Label labWebOrderCount; + + private Label label108; + + private Label label109; + + private GroupBox groupBox69; + + private DoubleBufferListView lvWebOrder; + + private ColumnHeader columnHeader127; + + private ColumnHeader columnHeader129; + + private ColumnHeader columnHeader130; + + private ColumnHeader columnHeader131; + + private ColumnHeader columnHeader132; + + private ColumnHeader columnHeader133; + + private ColumnHeader columnHeader134; + + private ColumnHeader columnHeader135; + + private GroupBox groupBox72; + + private Label labWebOrderLvCount; + + private Label label111; + + private Button btnWebOrderClear; + + private Button btnWebOrderInput; + + private Button btnWebOrderExprt; + + private Button btnWebOrderStart; + + private ColumnHeader columnHeader136; + + private Button btnGiftcardBalance; + + private ToolStripDropDownButton toolStripDropDownButton1; + + private ToolStripMenuItem 清除缓存ToolStripMenuItem; + + private ToolStripMenuItem 打开缓存文件夹ToolStripMenuItem; + + private ToolStripMenuItem tipInputEncrypted; + + private LinkLabel linkLabel7; + + private CheckBox ckRemoteReddem; + + private Label label65; + + private Label label102; + + private Button btnCancelSubscriptions; + + private Button btnGiftcardInfo; + + private Button button5; + + private ColumnHeader columnHeader137; + + private Label LabBalanceDeduction; + + private Label label105; + + private CheckBox CkBillMergeData; + + private Button btnAddRemoveFamilyMember; + + private Button btnTiedCard; + + private TextBox textBox12; + + private Button btnFromLeave; + + private Button btnCreateFamily; + + private ColumnHeader columnHeader138; + + private ColumnHeader columnHeader139; + + private Button btnActiotiCloud; + + private ColumnHeader columnHeader140; + + private CheckBox ckSingleProcessRedeem; + + private LinkLabel labTutorial; + + private ColumnHeader columnHeader141; + + private CheckBox ckShowTime; + + private Button btnCycleRedeem; + + private ColumnHeader columnHeader142; + + private ColumnHeader columnHeader143; + + private Label labAccountChange; + + private Label label26; + + private Label label81; + + private Label label94; + + private CheckBox ckCreatePin; + + private Label labiCloudFerr; + + private CheckBox CkRemoveRescueEmail; + + private ColumnHeader columnHeader144; + + private ToolStripMenuItem ltoolEditLvHander; + + private CheckBox ckMultiAccount; + + private ComboBox comLoadAccounts; + + private Button btnInputAccounts; + + private Label label50; + + private TextBox txtReddemDelay; + + private Button btnOvercheck; + + private CheckBox ckTailNumber; + + private CheckBox ckisUnlinkFamily; + + private LinkLabel linkSyncAccountPwd; + + private Label label110; + + private Label label17; + + private CheckBox ckAppleId; + + private Button button6; + + private TextBox textBox15; + + private Label label106; + + private ColumnHeader columnHeader145; + + private CheckBox ckShippingAddress; + + private LinkLabel linkLabel8; + + private ColumnHeader columnHeader146; + + protected override CreateParams CreateParams + { + get + { + CreateParams obj = base.CreateParams; + obj.ExStyle |= 33554432; + return obj; + } + } + + public Form login { get; set; } + + private Action actionRearStart { get; set; } + + private Action actionRearEnd { get; set; } + + private Action actionRearNotity { get; set; } + + private Action actionBannerStart { get; set; } + + private Action actionBannerEnd { get; set; } + + private Action actionBannerNotity { get; set; } + + private string nowActListview + { + get + { + return _nowActListview; + } + set + { + _nowActListview = value; + Label labCount = null; + ListView nowSeletListView = getNowSeletListView(out labCount); + if (nowSeletListView != null) + { + nowSeletListView.ColumnClick -= lv_ColumnClick; + nowSeletListView.ColumnClick += lv_ColumnClick; + } + } + } + + private Action actionApplyWedStart { get; set; } + + private Action