private async Task <CrunchySubtitleInfo> GetSubtitle(CrunchySession token, int subid)
        {
            Dictionary <string, string> form = new Dictionary <string, string>();

            form.Add("req", "RpcApiSubtitle_GetXml");
            form.Add("subtitle_script_id", subid.ToString());
            WebStream ws = await WebStream.Post("http://www.crunchyroll.com/xml/", form, null, LibSet[UserAgentS], null, token.cookies.ToCookieCollection(), SocketTimeout, true, "http://www.crunchyroll.com/swf/StandardVideoPlayer.swf", _info.ProxyFromGlobalRequirements(_global));

            string dta = null;

            if (ws.StatusCode == HttpStatusCode.OK)
            {
                XmlSerializer       ser = new XmlSerializer(typeof(Subtitle));
                Subtitle            s   = (Subtitle)ser.Deserialize(ws);
                CrunchySubtitleInfo si  = new CrunchySubtitleInfo();
                DecodeSubtitle(int.Parse(s.Id), s.Iv, s.Data, ref si);
                si.Language = ADBaseLibrary.Subtitles.Languages.CodeFromOriginalLanguage(si.Title);
                ws.Dispose();
                return(si);
            }
            ws?.Dispose();
            return(null);
        }
        private async Task<CrunchySubtitleInfo> GetSubtitle(CrunchySession token, int subid)
        {

            Dictionary<string, string> form = new Dictionary<string, string>();
            form.Add("req", "RpcApiSubtitle_GetXml");
            form.Add("subtitle_script_id", subid.ToString());
            WebStream ws = await WebStream.Post("http://www.crunchyroll.com/xml/", form, null, LibSet[UserAgentS], null, token.cookies.ToCookieCollection(), SocketTimeout,true,"http://www.crunchyroll.com/swf/StandardVideoPlayer.swf", _info.ProxyFromGlobalRequirements(_global));
            string dta = null;
            if (ws.StatusCode == HttpStatusCode.OK)
            {
                XmlSerializer ser = new XmlSerializer(typeof(Subtitle));
                Subtitle s = (Subtitle)ser.Deserialize(ws);
                CrunchySubtitleInfo si = new CrunchySubtitleInfo();
                DecodeSubtitle(int.Parse(s.Id), s.Iv, s.Data, ref si);
                si.Language = ADBaseLibrary.Subtitles.Languages.CodeFromOriginalLanguage(si.Title);
                ws.Dispose();
                return si;
            }
            ws?.Dispose();
            return null;
        }
 private void DecodeSubtitle(int subtitleId, string ivBase64, string dataBase64, ref CrunchySubtitleInfo si)
 {
     byte[] key = GenerateKey(subtitleId).Concat(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }).ToArray();
     byte[] iv = Convert.FromBase64String(ivBase64);
     byte[] data = Convert.FromBase64String(dataBase64);
     AesManaged mng = new AesManaged();
     mng.Mode = CipherMode.CBC;
     mng.Padding = PaddingMode.None;
     ICryptoTransform tr = mng.CreateDecryptor(key, iv);
     byte[] kk = tr.TransformFinalBlock(data, 0, data.Length);
     MemoryStream ms = new MemoryStream();
     ZlibStream stream = new ZlibStream(new MemoryStream(kk), Ionic.Zlib.CompressionMode.Decompress);
     stream.CopyTo(ms);
     ms.Position = 0;
     XmlSerializer serializer = new XmlSerializer(typeof(SubtitleScript));
     SubtitleScript script = (SubtitleScript)serializer.Deserialize(ms);
     si.Title = script.Title;
     si.Ass = script.ToAss();
 }
        private void DecodeSubtitle(int subtitleId, string ivBase64, string dataBase64, ref CrunchySubtitleInfo si)
        {
            byte[]     key  = GenerateKey(subtitleId).Concat(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }).ToArray();
            byte[]     iv   = Convert.FromBase64String(ivBase64);
            byte[]     data = Convert.FromBase64String(dataBase64);
            AesManaged mng  = new AesManaged();

            mng.Mode    = CipherMode.CBC;
            mng.Padding = PaddingMode.None;
            ICryptoTransform tr = mng.CreateDecryptor(key, iv);

            byte[]       kk     = tr.TransformFinalBlock(data, 0, data.Length);
            MemoryStream ms     = new MemoryStream();
            ZlibStream   stream = new ZlibStream(new MemoryStream(kk), Ionic.Zlib.CompressionMode.Decompress);

            stream.CopyTo(ms);
            ms.Position = 0;
            XmlSerializer  serializer = new XmlSerializer(typeof(SubtitleScript));
            SubtitleScript script     = (SubtitleScript)serializer.Deserialize(ms);

            si.Title = script.Title;
            si.Ass   = script.ToAss();
        }