private async static void DecryptingLink(VideoModels videoModel)
        {
            IDictionary<string, string> queries = HttpRequestHelper.AnalyseQueryString(videoModel.DownloadableLink);

            if (queries.ContainsKey(SignatureQuery))
            {
                string encryptedSignature = queries[SignatureQuery];

                string decrypted;

                try
                {
                    decrypted = await GetDecipheredSignature(videoModel.HtmlPlayerVersion, encryptedSignature);
                }

                catch (Exception ex)
                {
                    throw new YoutubeException("Could not decipher signature", ex);
                }

                videoModel.DownloadableLink = HttpRequestHelper.ReplacingQueryStringParameter(videoModel.DownloadableLink, SignatureQuery, decrypted);
                videoModel.RequiresDecryption = false;
            }
        }
 internal VideoModels(VideoModels info)
     : this(info.FormatCode, info.VideoQuality, info.Resolution, info.Is3D, info.AudioModel, info.AudioBit, info.Type)
 {
 }
        private static List<VideoModels> GetVideoModels(List<Information> extractionInfos, string videoTitle)
        {
            var downLoadInfos = new List<VideoModels>();

            foreach (Information Info in extractionInfos)
            {
                string itag = HttpRequestHelper.AnalyseQueryString(Info.Uri.Query)["itag"];

                int formatCode = int.Parse(itag);

                VideoModels info = VideoModels.Defaults.SingleOrDefault(videoModels => videoModels.FormatCode == formatCode);

                if (info != null)
                {
                    info = new VideoModels(info)
                    {
                        DownloadableLink = Info.Uri.ToString(),
                        Title = videoTitle,
                        RequiresDecryption = Info.RequiresDecryption
                    };
                }

                else
                {
                    info = new VideoModels(formatCode)
                    {
                        DownloadableLink = Info.Uri.ToString()
                    };
                }

                downLoadInfos.Add(info);
            }

            return downLoadInfos;
        }