From dd8e1237cada99afcbdcf8d4917d8e503390e50c Mon Sep 17 00:00:00 2001 From: Marco Festini Date: Mon, 30 Sep 2024 16:20:44 +0200 Subject: [PATCH 1/6] Add System.Text.Json to the project --- UnityLauncherPro/UnityLauncherPro.csproj | 37 +++++++++++++++++++++++- UnityLauncherPro/packages.config | 12 ++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 UnityLauncherPro/packages.config diff --git a/UnityLauncherPro/UnityLauncherPro.csproj b/UnityLauncherPro/UnityLauncherPro.csproj index ce2dd5e..85adcb0 100644 --- a/UnityLauncherPro/UnityLauncherPro.csproj +++ b/UnityLauncherPro/UnityLauncherPro.csproj @@ -58,10 +58,39 @@ app.manifest + + ..\packages\Microsoft.Bcl.AsyncInterfaces.8.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll + + + + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + + + ..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll + + + + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + + + ..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + + + ..\packages\System.Text.Encodings.Web.8.0.0\lib\net462\System.Text.Encodings.Web.dll + + + ..\packages\System.Text.Json.8.0.4\lib\net462\System.Text.Json.dll + + + ..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll + + + ..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll + @@ -88,6 +117,9 @@ + + + @@ -105,7 +137,6 @@ - UpgradeWindow.xaml @@ -163,6 +194,7 @@ Resources.Designer.cs + SettingsSingleFileGenerator Settings.Designer.cs @@ -189,6 +221,9 @@ + + + diff --git a/UnityLauncherPro/packages.config b/UnityLauncherPro/packages.config new file mode 100644 index 0000000..2f9e97d --- /dev/null +++ b/UnityLauncherPro/packages.config @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file From 6b3e21b04a755a4e98d7ac6443e2f90050d2a328 Mon Sep 17 00:00:00 2001 From: Marco Festini Date: Mon, 30 Sep 2024 16:21:07 +0200 Subject: [PATCH 2/6] Use the new Unity Release Api to fetch release information --- UnityLauncherPro/Data/UnityVersion.cs | 35 +++ UnityLauncherPro/Data/UnityVersionResponse.cs | 17 ++ UnityLauncherPro/Data/UnityVersionStream.cs | 10 + UnityLauncherPro/Data/Updates.cs | 10 - UnityLauncherPro/GetUnityUpdates.cs | 228 +++++++++++++----- UnityLauncherPro/MainWindow.xaml | 2 +- UnityLauncherPro/MainWindow.xaml.cs | 107 +++----- UnityLauncherPro/Tools.cs | 198 +-------------- UnityLauncherPro/UpgradeWindow.xaml.cs | 99 ++------ 9 files changed, 304 insertions(+), 402 deletions(-) create mode 100644 UnityLauncherPro/Data/UnityVersion.cs create mode 100644 UnityLauncherPro/Data/UnityVersionResponse.cs create mode 100644 UnityLauncherPro/Data/UnityVersionStream.cs delete mode 100644 UnityLauncherPro/Data/Updates.cs diff --git a/UnityLauncherPro/Data/UnityVersion.cs b/UnityLauncherPro/Data/UnityVersion.cs new file mode 100644 index 0000000..9623ae2 --- /dev/null +++ b/UnityLauncherPro/Data/UnityVersion.cs @@ -0,0 +1,35 @@ +using System; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace UnityLauncherPro +{ + public class UnityVersion + { + [JsonPropertyName("version")] + public string Version { get; set; } + [JsonPropertyName("stream")] + [JsonConverter(typeof(UnityVersionStreamConverter))] + public UnityVersionStream Stream { get; set; } + [JsonPropertyName("releaseDate")] + public DateTime ReleaseDate { get; set; } + } + + public class UnityVersionStreamConverter : JsonConverter + { + public override UnityVersionStream Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + string streamString = reader.GetString(); + if (Enum.TryParse(streamString, true, out var result)) + { + return result; + } + throw new JsonException($"Unable to convert \"{streamString}\" to UnityVersionStream"); + } + + public override void Write(Utf8JsonWriter writer, UnityVersionStream value, JsonSerializerOptions options) + { + writer.WriteStringValue(value.ToString().ToUpper()); + } + } +} \ No newline at end of file diff --git a/UnityLauncherPro/Data/UnityVersionResponse.cs b/UnityLauncherPro/Data/UnityVersionResponse.cs new file mode 100644 index 0000000..2cc7a4a --- /dev/null +++ b/UnityLauncherPro/Data/UnityVersionResponse.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; +using System.Text.Json.Serialization; + +namespace UnityLauncherPro +{ + public class UnityVersionResponse + { + [JsonPropertyName("offset")] + public int Offset { get; set; } + [JsonPropertyName("limit")] + public int Limit { get; set; } + [JsonPropertyName("total")] + public int Total { get; set; } + [JsonPropertyName("results")] + public List Results { get; set; } + } +} \ No newline at end of file diff --git a/UnityLauncherPro/Data/UnityVersionStream.cs b/UnityLauncherPro/Data/UnityVersionStream.cs new file mode 100644 index 0000000..683a3fd --- /dev/null +++ b/UnityLauncherPro/Data/UnityVersionStream.cs @@ -0,0 +1,10 @@ +namespace UnityLauncherPro +{ + public enum UnityVersionStream + { + Alpha, + Beta, + LTS, + Tech + } +} \ No newline at end of file diff --git a/UnityLauncherPro/Data/Updates.cs b/UnityLauncherPro/Data/Updates.cs deleted file mode 100644 index 2d06cbe..0000000 --- a/UnityLauncherPro/Data/Updates.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; - -namespace UnityLauncherPro -{ - public class Updates - { - public string Version { set; get; } - public DateTime ReleaseDate { set; get; } - } -} diff --git a/UnityLauncherPro/GetUnityUpdates.cs b/UnityLauncherPro/GetUnityUpdates.cs index b8a5baa..8eda508 100644 --- a/UnityLauncherPro/GetUnityUpdates.cs +++ b/UnityLauncherPro/GetUnityUpdates.cs @@ -1,88 +1,206 @@ using System; using System.Collections.Generic; -using System.Globalization; -using System.Net; +using System.Configuration; +using System.IO; +using System.Linq; +using System.Net.Http; +using System.Reflection; +using System.Text.Json; using System.Threading.Tasks; namespace UnityLauncherPro { public static class GetUnityUpdates { - static bool isDownloadingUnityList = false; - static readonly string unityVersionsURL = @"https://symbolserver.unity3d.com/000Admin/history.txt"; + private const string BaseApiUrl = "https://services.api.unity.com/unity/editor/release/v1/releases"; + private const int BatchSize = 25; + private const int RequestsPerBatch = 10; + private const int DelayBetweenBatches = 1000; // 1 second in milliseconds + private const string CacheFileName = "UnityVersionCache.json"; - public static async Task Scan() + private static readonly HttpClient httpClient = new HttpClient(); + + public static async Task> FetchAll() { - if (isDownloadingUnityList == true) + var cachedVersions = LoadCachedVersions(); + var latestCachedVersion = cachedVersions.FirstOrDefault(); + + var newVersions = await FetchNewVersions(latestCachedVersion); + + var allVersions = newVersions.Concat(cachedVersions).ToList(); + + if (newVersions.Count > 0) { - Console.WriteLine("We are already downloading ..."); - return null; + SaveCachedVersions(allVersions); } - isDownloadingUnityList = true; - //SetStatus("Downloading list of Unity versions ..."); - string result = null; - // download list of Unity versions - using (WebClient webClient = new WebClient()) + return allVersions; + } + + public static async Task FetchDownloadUrl(string unityVersion, bool assistantUrl = false) + { + if (string.IsNullOrEmpty(unityVersion)) + { + return null; + } + + string apiUrl = $"{BaseApiUrl}?limit=1&version={unityVersion}&architecture=X86_64&platform=WINDOWS"; + + try + { + string responseString = await httpClient.GetStringAsync(apiUrl); + JsonDocument doc = JsonDocument.Parse(responseString); + try { - Task downloadStringTask = webClient.DownloadStringTaskAsync(new Uri(unityVersionsURL)); - try + var root = doc.RootElement; + var results = root.GetProperty("results"); + + if (results.GetArrayLength() > 0) { - result = await downloadStringTask; + var entry = results[0]; + string downloadUrl = null; + string shortRevision = null; + + if (entry.TryGetProperty("downloads", out var downloads) && + downloads.GetArrayLength() > 0 && + downloads[0].TryGetProperty("url", out var urlProperty)) + { + downloadUrl = urlProperty.GetString(); + } + + if (entry.TryGetProperty("shortRevision", out var revisionProperty)) + { + shortRevision = revisionProperty.GetString(); + } + + if (!string.IsNullOrEmpty(downloadUrl)) + { + if (!assistantUrl) return downloadUrl; + + if (!string.IsNullOrEmpty(shortRevision)) + { + var startIndex = downloadUrl.LastIndexOf(shortRevision, StringComparison.Ordinal) + shortRevision.Length + 1; + var endIndex = downloadUrl.Length - startIndex; + return downloadUrl.Replace(downloadUrl.Substring(startIndex, endIndex), + $"UnityDownloadAssistant-{unityVersion}.exe"); + } + else + { + Console.WriteLine("ShortRevision not found, returning original download URL."); + return downloadUrl; + } + } } - catch (WebException) + + Console.WriteLine($"No download URL found for version {unityVersion}"); + return null; + } + finally + { + doc.Dispose(); + } + } + catch (Exception e) + { + Console.WriteLine($"Error fetching download URL: {e.Message}"); + return null; + } + } + + private static async Task> FetchNewVersions(UnityVersion latestCachedVersion) + { + var newVersions = new List(); + int offset = 0; + int total = int.MaxValue; + + while (offset < total) + { + var batchUpdates = await FetchBatch(offset); + if (batchUpdates?.Results == null || batchUpdates.Results.Count == 0) + break; + + foreach (var version in batchUpdates.Results) { - Console.WriteLine("It's a web exception"); + if (version.Version == latestCachedVersion?.Version) + return newVersions; + + newVersions.Add(version); } - catch (Exception) + + total = batchUpdates.Total; + offset += batchUpdates.Results.Count; + + if (offset % (BatchSize * RequestsPerBatch) == 0) { - Console.WriteLine("It's not a web exception"); + await Task.Delay(DelayBetweenBatches); } - - isDownloadingUnityList = false; } - return result; + + return newVersions; } - public static Updates[] Parse(string items, ref List updatesAsString) + private static async Task FetchBatch(int offset) { - if (updatesAsString == null) - updatesAsString = new List(); - updatesAsString.Clear(); - - isDownloadingUnityList = false; - //SetStatus("Downloading list of Unity versions ... done"); - var receivedList = items.Split(new[] { Environment.NewLine }, StringSplitOptions.None); - if (receivedList == null && receivedList.Length < 1) return null; - Array.Reverse(receivedList); - var releases = new Dictionary(); - // parse into data - string prevVersion = null; - for (int i = 0, len = receivedList.Length; i < len; i++) - { - var row = receivedList[i].Split(','); - var versionTemp = row[6].Trim('"'); + string url = $"{BaseApiUrl}?limit={BatchSize}&offset={offset}&architecture=X86_64&platform=WINDOWS"; - if (versionTemp.Length < 1) continue; - if (prevVersion == versionTemp) continue; + try + { + var response = await httpClient.GetStringAsync(url); + return JsonSerializer.Deserialize(response); + } + catch (Exception e) + { + Console.WriteLine($"Error fetching batch: {e.Message}"); + return null; + } + } - if (releases.ContainsKey(versionTemp) == false) + private static List LoadCachedVersions() + { + // Check if the file is locally saved + string configFilePath = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath; + string configDirectory = Path.GetDirectoryName(configFilePath); + + if (configDirectory != null && Path.Combine(configDirectory, CacheFileName) is string cacheFilePath) + { + if (File.Exists(cacheFilePath)) { - var u = new Updates(); - u.ReleaseDate = DateTime.ParseExact(row[3], "MM/dd/yyyy", CultureInfo.InvariantCulture); - u.Version = versionTemp; - releases.Add(versionTemp, u); - updatesAsString.Add(versionTemp); + var json = File.ReadAllText(cacheFilePath); + return JsonSerializer.Deserialize>(json) ?? new List(); } - - prevVersion = versionTemp; } + else + { + return new List(); + } + + // Take the embedded file and save it locally, then rerun this method when that is successful + var assembly = Assembly.GetExecutingAssembly(); + using (var stream = assembly.GetManifestResourceStream($"{assembly.GetName().Name}.Resources.{CacheFileName}")) + { + if (stream == null) + return new List(); - // convert to array - var results = new Updates[releases.Count]; - releases.Values.CopyTo(results, 0); - return results; + using (var reader = new StreamReader(stream)) + { + var json = reader.ReadToEnd(); + File.WriteAllText(cacheFilePath, json); + return JsonSerializer.Deserialize>(json) ?? new List(); + } + } } + + private static void SaveCachedVersions(List versions) + { + var json = JsonSerializer.Serialize(versions); + + string configFilePath = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath; + string configDirectory = Path.GetDirectoryName(configFilePath); + if (configDirectory != null && Path.Combine(configDirectory, CacheFileName) is string cacheFilePath) + { + File.WriteAllText(cacheFilePath, json); + } + } } -} +} \ No newline at end of file diff --git a/UnityLauncherPro/MainWindow.xaml b/UnityLauncherPro/MainWindow.xaml index c4a5a04..a3ce945 100644 --- a/UnityLauncherPro/MainWindow.xaml +++ b/UnityLauncherPro/MainWindow.xaml @@ -485,7 +485,7 @@ - + diff --git a/UnityLauncherPro/MainWindow.xaml.cs b/UnityLauncherPro/MainWindow.xaml.cs index 6aa5c19..5e1fd58 100644 --- a/UnityLauncherPro/MainWindow.xaml.cs +++ b/UnityLauncherPro/MainWindow.xaml.cs @@ -45,7 +45,7 @@ public partial class MainWindow : Window const string defaultAdbLogCatArgs = "-s Unity ActivityManager PackageManager dalvikvm DEBUG -v color"; System.Windows.Forms.NotifyIcon notifyIcon; - Updates[] updatesSource; + UnityVersion[] updatesSource; public static List updatesAsStrings = new List(); string _filterString = null; @@ -360,31 +360,37 @@ private bool ProjectFilter(object item) private bool UpdatesFilter(object item) { - Updates unity = item as Updates; + if (!(item is UnityVersion unityVersion)) + { + return false; + } bool haveSearchString = string.IsNullOrEmpty(_filterString) == false; - bool matchString = haveSearchString && unity.Version.IndexOf(_filterString, 0, StringComparison.CurrentCultureIgnoreCase) > -1; + bool matchString = haveSearchString && unityVersion.Version.IndexOf(_filterString, 0, StringComparison.CurrentCultureIgnoreCase) > -1; bool checkedAlls = (bool)rdoAll.IsChecked; bool checkedLTSs = (bool)rdoLTS.IsChecked; + bool checkedTechs = (bool)rdoTech.IsChecked; bool checkedAlphas = (bool)rdoAlphas.IsChecked; bool checkedBetas = (bool)rdoBetas.IsChecked; - bool matchLTS = checkedLTSs && Tools.IsLTS(unity.Version); - bool matchAlphas = checkedAlphas && Tools.IsAlpha(unity.Version); - bool matchBetas = checkedBetas && Tools.IsBeta(unity.Version); + bool matchLTS = checkedLTSs && unityVersion.Stream == UnityVersionStream.LTS; + bool matchTech = checkedTechs && unityVersion.Stream == UnityVersionStream.Tech; + bool matchAlphas = checkedAlphas && unityVersion.Stream == UnityVersionStream.Alpha; + bool matchBetas = checkedBetas && unityVersion.Stream == UnityVersionStream.Beta; // match search string and some radiobutton if (haveSearchString == true) { if (checkedAlls) return matchString; if (checkedLTSs) return matchString && matchLTS; + if (checkedTechs) return matchString && matchTech; if (checkedAlphas) return matchString && matchAlphas; if (checkedBetas) return matchString && matchBetas; } else // no search text, filter by radiobuttons { - if (checkedAlls || matchLTS || matchAlphas || matchBetas) return true; + if (checkedAlls || matchLTS || matchTech || matchAlphas || matchBetas) return true; } // fallback @@ -726,9 +732,9 @@ UnityInstallation GetSelectedUnity() return (UnityInstallation)dataGridUnitys.SelectedItem; } - Updates GetSelectedUpdate() + UnityVersion GetSelectedUpdate() { - return (Updates)dataGridUpdates.SelectedItem; + return (UnityVersion)dataGridUpdates.SelectedItem; } BuildReportItem GetSelectedBuildItem() @@ -757,11 +763,9 @@ void AddUnityInstallationRootFolder() async Task CallGetUnityUpdates() { dataGridUpdates.ItemsSource = null; - var task = GetUnityUpdates.Scan(); + var task = GetUnityUpdates.FetchAll(); var items = await task; - //Console.WriteLine("CallGetUnityUpdates=" + items == null); - if (items == null) return; - updatesSource = GetUnityUpdates.Parse(items, ref updatesAsStrings); + updatesSource = items.ToArray(); if (updatesSource == null) return; dataGridUpdates.ItemsSource = updatesSource; } @@ -1047,11 +1051,11 @@ private async void OnTabSelectionChanged(object sender, SelectionChangedEventArg // if we dont have previous results yet, TODO scan again if previous was 24hrs ago if (updatesSource == null) { - var task = GetUnityUpdates.Scan(); + var task = GetUnityUpdates.FetchAll(); var items = await task; if (task.IsCompleted == false || task.IsFaulted == true) return; if (items == null) return; - updatesSource = GetUnityUpdates.Parse(items, ref updatesAsStrings); + updatesSource = items.ToArray(); if (updatesSource == null) return; dataGridUpdates.ItemsSource = updatesSource; } @@ -1139,12 +1143,10 @@ private void MenuItemCopyVersion_Click(object sender, RoutedEventArgs e) } // get download url for selected update version - private void MenuItemCopyUpdateDownloadURL_Click(object sender, RoutedEventArgs e) + private async void MenuItemCopyUpdateDownloadURL_Click(object sender, RoutedEventArgs e) { - string copy = null; var unity = GetSelectedUpdate(); - copy = unity?.Version; //https://unity3d.com/get-unity/download?thank-you=update&download_nid=65083&os=Win - string exeURL = Tools.ParseDownloadURLFromWebpage(copy); + string exeURL = await GetUnityUpdates.FetchDownloadUrl(unity?.Version); if (exeURL != null) Clipboard.SetText(exeURL); } @@ -1509,45 +1511,19 @@ private void BtnRefreshUnityList_Click(object sender, RoutedEventArgs e) private void BtnDownloadInBrowser_Click(object sender, RoutedEventArgs e) { var unity = GetSelectedUpdate(); - string url = Tools.GetUnityReleaseURL(unity?.Version); - if (string.IsNullOrEmpty(url) == false) - { - Tools.DownloadInBrowser(url, unity.Version); - } - else - { - Console.WriteLine("Failed getting Unity Installer URL for " + unity?.Version); - SetStatus("Failed getting Unity Installer URL for " + unity?.Version); - } + Tools.DownloadInBrowser(unity?.Version); } private void BtnDownloadInBrowserFull_Click(object sender, RoutedEventArgs e) { var unity = GetSelectedUpdate(); - string url = Tools.GetUnityReleaseURL(unity?.Version); - if (string.IsNullOrEmpty(url) == false) - { - Tools.DownloadInBrowser(url, unity.Version, true); - } - else - { - Console.WriteLine("Failed getting Unity Installer URL for " + unity?.Version); - SetStatus("Failed getting Unity Installer URL for " + unity?.Version); - } + Tools.DownloadInBrowser(unity?.Version, true); } private void btnDownloadInstallUpdate_Click(object sender, RoutedEventArgs e) { var unity = GetSelectedUpdate(); - string url = Tools.GetUnityReleaseURL(unity?.Version); - if (string.IsNullOrEmpty(url) == false) - { - Tools.DownloadAndInstall(url, unity?.Version); - } - else - { - Console.WriteLine("Failed getting Unity Installer URL for " + unity?.Version); - } + Tools.DownloadAndInstall(unity?.Version); } private void BtnOpenWebsite_Click(object sender, RoutedEventArgs e) @@ -2973,8 +2949,7 @@ public void ProcessExitedCallBack(Project proj) private void MenuItemDownloadInBrowser_Click(object sender, RoutedEventArgs e) { var unity = GetSelectedUpdate(); - string exeURL = Tools.ParseDownloadURLFromWebpage(unity?.Version); - if (exeURL != null) Tools.DownloadInBrowser(exeURL, unity?.Version); + Tools.DownloadInBrowser(unity?.Version); } private void MenuItemDownloadLinuxModule_Click(object sender, RoutedEventArgs e) @@ -3211,16 +3186,16 @@ public int Compare(Object a, Object b) { case "Version": // handle null values - if (((Updates)a).Version == null && ((Updates)b).Version == null) return 0; - if (((Updates)a).Version == null) return direction == ListSortDirection.Ascending ? -1 : 1; - if (((Updates)b).Version == null) return direction == ListSortDirection.Ascending ? 1 : -1; - return direction == ListSortDirection.Ascending ? Tools.VersionAsLong(((Updates)a).Version).CompareTo(Tools.VersionAsLong(((Updates)b).Version)) : Tools.VersionAsLong(((Updates)b).Version).CompareTo(Tools.VersionAsLong(((Updates)a).Version)); + if (((UnityVersion)a)?.Version == null && ((UnityVersion)b)?.Version == null) return 0; + if (((UnityVersion)a)?.Version == null) return direction == ListSortDirection.Ascending ? -1 : 1; + if (((UnityVersion)b)?.Version == null) return direction == ListSortDirection.Ascending ? 1 : -1; + return direction == ListSortDirection.Ascending ? Tools.VersionAsLong(((UnityVersion)a).Version).CompareTo(Tools.VersionAsLong(((UnityVersion)b).Version)) : Tools.VersionAsLong(((UnityVersion)b).Version).CompareTo(Tools.VersionAsLong(((UnityVersion)a).Version)); case "Released": // handle null values - if (((Updates)a).ReleaseDate == null && ((Updates)b).ReleaseDate == null) return 0; - if (((Updates)a).ReleaseDate == null) return direction == ListSortDirection.Ascending ? -1 : 1; - if (((Updates)b).ReleaseDate == null) return direction == ListSortDirection.Ascending ? 1 : -1; - return direction == ListSortDirection.Ascending ? ((DateTime)((Updates)a).ReleaseDate).CompareTo(((Updates)b).ReleaseDate) : ((DateTime)((Updates)b).ReleaseDate).CompareTo(((Updates)a).ReleaseDate); + if (((UnityVersion)a)?.ReleaseDate == null && ((UnityVersion)b)?.ReleaseDate == null) return 0; + if (((UnityVersion)a)?.ReleaseDate == null) return direction == ListSortDirection.Ascending ? -1 : 1; + if (((UnityVersion)b)?.ReleaseDate == null) return direction == ListSortDirection.Ascending ? 1 : -1; + return direction == ListSortDirection.Ascending ? ((UnityVersion)a).ReleaseDate.CompareTo(((UnityVersion)b).ReleaseDate) : ((DateTime)((UnityVersion)b).ReleaseDate).CompareTo(((UnityVersion)a).ReleaseDate); default: return 0; } @@ -3651,22 +3626,6 @@ private void btnHubLogs_Click(object sender, RoutedEventArgs e) Tools.OpenAppdataSpecialFolder("../Roaming/UnityHub/logs/"); } - private void txtDownloadFromHash_PreviewKeyDown(object sender, KeyEventArgs e) - { - if (e.Key == Key.Return) - { - var hash = (((TextBox)sender).Text).Trim(); - if (string.IsNullOrEmpty(hash) == false) - { - var url = Tools.ParseDownloadURLFromWebpage(hash, false, true); - if (string.IsNullOrEmpty(url) == false) - { - Tools.DownloadInBrowser(url, hash, false, true); - } - } - } - } - private void btnOpenEditorLogsFolder_PreviewMouseDown(object sender, MouseButtonEventArgs e) { if (e.ChangedButton == MouseButton.Middle) diff --git a/UnityLauncherPro/Tools.cs b/UnityLauncherPro/Tools.cs index c065dcf..6e14e71 100644 --- a/UnityLauncherPro/Tools.cs +++ b/UnityLauncherPro/Tools.cs @@ -9,6 +9,7 @@ using System.Runtime.InteropServices; using System.Text; using System.Text.RegularExpressions; +using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Input; @@ -656,9 +657,10 @@ public static void OpenURL(string url) Process.Start(url); } - public static void DownloadInBrowser(string url, string version, bool preferFullInstaller = false, bool useHash = false) + public static async void DownloadInBrowser(string version, bool preferFullInstaller = false) { - string exeURL = ParseDownloadURLFromWebpage(version, preferFullInstaller, useHash); + if (version == null) return; + string exeURL = await GetUnityUpdates.FetchDownloadUrl(version, preferFullInstaller); Console.WriteLine("DownloadInBrowser exeURL= '" + exeURL + "'"); @@ -670,14 +672,19 @@ public static void DownloadInBrowser(string url, string version, bool preferFull else // not found { //SetStatus("Error> Cannot find installer executable ... opening website instead"); - url = "https://unity3d.com/get-unity/download/archive"; + const string url = "https://unity3d.com/get-unity/download/archive"; Process.Start(url + "#installer-not-found-for-version-" + version); } } - public static void DownloadAndInstall(string url, string version) + public static async void DownloadAndInstall(string version) { - string exeURL = ParseDownloadURLFromWebpage(version); + if (version == null) + { + Console.WriteLine("Error> Cannot download and install null version"); + return; + } + string exeURL = await GetUnityUpdates.FetchDownloadUrl(version); Console.WriteLine("download exeURL= (" + exeURL + ")"); @@ -723,7 +730,7 @@ public static void DownloadAndInstall(string url, string version) else // not found { //SetStatus("Error> Cannot find installer executable ... opening website instead"); - url = "https://unity3d.com/get-unity/download/archive"; + var url = "https://unity3d.com/get-unity/download/archive"; Process.Start(url + "#installer-not-found---version-" + version); } } @@ -856,185 +863,6 @@ public static string CleanVersionNumber(string version) return Regex.Replace(version, @"[f|a|b][0-9]{1,2}", "", RegexOptions.IgnoreCase); } - // parse Unity installer exe from release page thanks to https://github.com/softfruit - public static string ParseDownloadURLFromWebpage(string version, bool preferFullInstaller = false, bool useHash = false) - { - string exeURL = ""; - - if (string.IsNullOrEmpty(version)) return null; - - // NOTE now longer uses f# in the end - var cleanVersion = CleanVersionNumber(version); - - string url = null; - if (useHash == false) - { - // NOTE 2024 June, installs are now located on separate pages, like https://unity.com/releases/editor/whats-new/6000.0.5#installs - - // get correct page url - //url = "https://unity3d.com/get-unity/download/archive"; - // fix unity server problem, some pages says 404 found if no url params - url = "https://unity.com/releases/editor/whats-new/" + cleanVersion + "?unitylauncherpro#installs"; - //if (VersionIsPatch(version)) url = "https://unity3d.com/unity/qa/patch-releases"; - if (VersionIsBeta(version)) url = "https://unity.com/releases/editor/beta/" + version; - if (VersionIsAlpha(version)) url = "https://unity.com/releases/editor/alpha/" + version; - //url += "?unitylauncherpro"; - } - else - { - // TODO version here is actually HASH - string hash = version; - url = $"https://beta.unity3d.com/download/{hash}/download.html"; - - //Console.WriteLine(url); - - version = FetchUnityVersionNumberFromHTML(url); - //Console.WriteLine(url); - //Console.WriteLine("got "+version); - if (string.IsNullOrEmpty(version)) - { - SetStatus("Failed to get version (" + version + ") number from hash: " + hash); - return null; - } - } - - //Console.WriteLine("scanning installers from url: " + url); - - string sourceHTML = DownloadHTML(url); - - if (string.IsNullOrEmpty(sourceHTML) == true) - { - Console.WriteLine("Failed to download html from: " + url); - return null; - } - - // parse changeset hash from html - string pattern = $@"href=""unityhub://{version}/([^""]+)"""; - Regex regex = new Regex(pattern); - Match match = regex.Match(sourceHTML); - - if (match.Success == true) - { - string changeSet = match.Groups[1].Value; - Console.WriteLine("changeSet: " + changeSet); - exeURL = $"https://beta.unity3d.com/download/{changeSet}/UnityDownloadAssistant-{version}.exe"; - } - - //string[] lines = sourceHTML.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None); - - // patch version download assistant finder - //if (useHash == false && VersionIsPatch(version)) - //{ - // for (int i = 0; i < lines.Length; i++) - // { - // //if (lines[i].Contains("UnityDownloadAssistant-" + version + ".exe")) - // if (lines[i].Contains("UnitySetup64-" + version + ".exe")) - // { - // int start = lines[i].IndexOf('"') + 1; - // int end = lines[i].IndexOf('"', start); - // exeURL = lines[i].Substring(start, end - start); - // break; - // } - // } - //} - //else if (useHash == false && VersionIsArchived(version)) - //{ - // // archived version download assistant finder - // for (int i = 0; i < lines.Length; i++) - // { - // // find line where full installer is (from archive page) - // if (lines[i].Contains("UnitySetup64-" + version)) - // { - - // Console.WriteLine(lines[i]); - - // // take full exe installer line, to have changeset hash, then replace with download assistant filepath - // string line = lines[i]; - // int start = line.IndexOf('"') + 1; - // int end = line.IndexOf('"', start); - // exeURL = line.Substring(start, end - start); - // exeURL = exeURL.Replace("Windows64EditorInstaller/UnitySetup64-", "UnityDownloadAssistant-"); - // break; - // } - // } - //} - //else // alpha or beta version download assistant finder - //{ - // // regular beta - // // - // // https://beta.unity3d.com/download/21aeb48b6ed2/UnityDownloadAssistant.exe - - // // hidden beta - // // - // // https://beta.unity3d.com/download/8008bc0c1b74/UnityDownloadAssistant-6000.0.0b15.exe - - // // new 10.06.2024, no more downloadassistant.exe in html - - // // check html lines - // for (int i = 0; i < lines.Length; i++) - // { - // //Console.WriteLine(lines[i]); - // //if (lines[i].Contains("UnityDownloadAssistant")) - // if (lines[i].Contains("UnityDownloadAssistant")) - // { - // if (useHash == false) - // { - // string pattern = @"https://beta\.unity3d\.com/download/[a-zA-Z0-9]+/UnityDownloadAssistant\.exe"; - // Match match = Regex.Match(lines[i], pattern); - // if (match.Success) - // { - // exeURL = match.Value; - // } - // else - // { - // Console.WriteLine("No match found for download base url.."); - // } - // } - // else // hidden download page - // { - // string pattern = @"UnityDownloadAssistant(?:-\d+\.\d+\.\d+[bf]\d*)?\.exe"; - // Match match = Regex.Match(lines[i], pattern); - // if (match.Success) - // { - // // append base url - // Regex regex = new Regex(@"(https://beta\.unity3d\.com/download/[a-zA-Z0-9]+/)"); - // Match match2 = regex.Match(url); - - // //Console.WriteLine("source url: " + url); - - // if (match2.Success) - // { - // string capturedUrl = match2.Groups[1].Value; - // exeURL = capturedUrl + match.Value; - // } - // else - // { - // Console.WriteLine("No match found for download base url.."); - // } - // } - // break; - // } - // } - // } // for lines - //} // alpha or beta - - // download full installer instead, TODO probably not needed anymore? - if (useHash == false && preferFullInstaller == true) - { - exeURL = exeURL.Replace("UnityDownloadAssistant-" + version + ".exe", "Windows64EditorInstaller/UnitySetup64-" + version + ".exe"); - // handle alpha/beta - exeURL = exeURL.Replace("UnityDownloadAssistant.exe", "Windows64EditorInstaller/UnitySetup64-" + version + ".exe"); - } - - // didnt find installer - if (string.IsNullOrEmpty(exeURL)) - { - //SetStatus("Cannot find UnityDownloadAssistant.exe for this version."); - Console.WriteLine("Installer not found from URL: " + url); - } - return exeURL; - } - private static string FetchUnityVersionNumberFromHTML(string url) { string version = null; diff --git a/UnityLauncherPro/UpgradeWindow.xaml.cs b/UnityLauncherPro/UpgradeWindow.xaml.cs index 9015fe3..5097263 100644 --- a/UnityLauncherPro/UpgradeWindow.xaml.cs +++ b/UnityLauncherPro/UpgradeWindow.xaml.cs @@ -29,64 +29,33 @@ public UpgradeWindow(string currentVersion, string projectPath, string commandLi gridAvailableVersions.SelectedItem = null; // we have current version info in project - if (string.IsNullOrEmpty(currentVersion) == false) - { - // enable release and dl buttons - btnOpenReleasePage.IsEnabled = true; - btnDownload.IsEnabled = true; - - // if dont have exact version, show red outline - if (MainWindow.unityInstalledVersions.ContainsKey(currentVersion) == false) - { - txtCurrentVersion.BorderBrush = Brushes.Red; - txtCurrentVersion.BorderThickness = new Thickness(1); - } + // enable release and dl buttons + btnOpenReleasePage.IsEnabled = true; + btnDownload.IsEnabled = true; - // find nearest version - string nearestVersion = Tools.FindNearestVersion(currentVersion, MainWindow.unityInstalledVersions.Keys.ToList()); - if (nearestVersion != null) - { - // select nearest version - for (int i = 0; i < MainWindow.unityInstallationsSource.Count; i++) - { - if (MainWindow.unityInstallationsSource[i].Version == nearestVersion) - { - gridAvailableVersions.SelectedIndex = i; - gridAvailableVersions.ScrollIntoView(gridAvailableVersions.SelectedItem); - break; - } - } - } - } - else // we dont have current version info in project + // if dont have exact version, show red outline + if (MainWindow.unityInstalledVersions.ContainsKey(currentVersion) == false) { - btnOpenReleasePage.IsEnabled = false; - btnDownload.IsEnabled = false; - currentVersion = "None"; + txtCurrentVersion.BorderBrush = Brushes.Red; + txtCurrentVersion.BorderThickness = new Thickness(1); + } - // if we have preferred version, and current is null - if (string.IsNullOrEmpty(MainWindow.preferredVersion) == false) + // find nearest version + string nearestVersion = Tools.FindNearestVersion(currentVersion, MainWindow.unityInstalledVersions.Keys.ToList()); + if (nearestVersion != null) + { + // select nearest version + for (int i = 0; i < MainWindow.unityInstallationsSource.Count; i++) { - // get correct row for preferred version - var obj = Tools.GetEntry(MainWindow.unityInstalledVersions, MainWindow.preferredVersion); - int index = gridAvailableVersions.Items.IndexOf(obj); - if (index > -1) + if (MainWindow.unityInstallationsSource[i].Version == nearestVersion) { - gridAvailableVersions.SelectedIndex = index; - } - else - { - // just select first item then - gridAvailableVersions.SelectedIndex = 0; + gridAvailableVersions.SelectedIndex = i; + gridAvailableVersions.ScrollIntoView(gridAvailableVersions.SelectedItem); + break; } } - else - { - // just select first item then - if (gridAvailableVersions != null && gridAvailableVersions.Items.Count > 0) gridAvailableVersions.SelectedIndex = 0; - } - } + gridAvailableVersions.Focus(); } @@ -109,41 +78,17 @@ private void BtnOpenReleasePage_Click(object sender, RoutedEventArgs e) private void BtnDownloadEditor_Click(object sender, RoutedEventArgs e) { - string url = Tools.GetUnityReleaseURL(txtCurrentVersion.Text); - if (string.IsNullOrEmpty(url) == false) - { - Tools.DownloadInBrowser(url, txtCurrentVersion.Text, true); - } - else - { - Console.WriteLine("Failed getting Unity Installer URL for " + txtCurrentVersion.Text); - } + Tools.DownloadInBrowser(txtCurrentVersion.Text, true); } private void BtnDownload_Click(object sender, RoutedEventArgs e) { - string url = Tools.GetUnityReleaseURL(txtCurrentVersion.Text); - if (string.IsNullOrEmpty(url) == false) - { - Tools.DownloadInBrowser(url, txtCurrentVersion.Text); - } - else - { - Console.WriteLine("Failed getting Unity Installer URL for " + txtCurrentVersion.Text); - } + Tools.DownloadInBrowser(txtCurrentVersion.Text); } private void btnInstall_Click(object sender, RoutedEventArgs e) { - string url = Tools.GetUnityReleaseURL(txtCurrentVersion.Text); - if (string.IsNullOrEmpty(url) == false) - { - Tools.DownloadAndInstall(url, txtCurrentVersion.Text); - } - else - { - Console.WriteLine("Failed getting Unity Installer URL for " + txtCurrentVersion.Text); - } + Tools.DownloadAndInstall(txtCurrentVersion.Text); } private void Window_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e) From 4c63423ca6b08753f9e1d63f5e1e84b964324520 Mon Sep 17 00:00:00 2001 From: Marco Festini Date: Mon, 30 Sep 2024 16:21:22 +0200 Subject: [PATCH 3/6] Add prepared cached list of Unity versions --- UnityLauncherPro/Resources/UnityVersionCache.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 UnityLauncherPro/Resources/UnityVersionCache.json diff --git a/UnityLauncherPro/Resources/UnityVersionCache.json b/UnityLauncherPro/Resources/UnityVersionCache.json new file mode 100644 index 0000000..8b7310c --- /dev/null +++ b/UnityLauncherPro/Resources/UnityVersionCache.json @@ -0,0 +1 @@ +[{"version":"2022.3.48f1","stream":"LTS","releaseDate":"2024-09-26T18:38:03.76Z"},{"version":"6000.0.21f1","stream":"TECH","releaseDate":"2024-09-24T16:11:20.586Z"},{"version":"2021.3.44f1","stream":"LTS","releaseDate":"2024-09-23T14:46:08.531Z"},{"version":"6000.0.20f1","stream":"TECH","releaseDate":"2024-09-19T15:22:09.961Z"},{"version":"2022.3.47f1","stream":"LTS","releaseDate":"2024-09-18T06:44:50.214Z"},{"version":"6000.0.19f1","stream":"TECH","releaseDate":"2024-09-12T01:29:34.656Z"},{"version":"2022.3.46f1","stream":"LTS","releaseDate":"2024-09-10T16:41:40.233Z"},{"version":"6000.0.18f1","stream":"TECH","releaseDate":"2024-09-04T06:08:14.69Z"},{"version":"2022.3.45f1","stream":"LTS","releaseDate":"2024-09-03T22:44:17.358Z"},{"version":"6000.0.17f1","stream":"TECH","releaseDate":"2024-08-27T16:52:36.763Z"},{"version":"2022.3.44f1","stream":"LTS","releaseDate":"2024-08-23T06:10:50.975Z"},{"version":"6000.0.16f1","stream":"TECH","releaseDate":"2024-08-22T18:12:19.775Z"},{"version":"2021.3.43f1","stream":"LTS","releaseDate":"2024-08-22T10:10:30.849Z"},{"version":"2022.3.43f1","stream":"LTS","releaseDate":"2024-08-21T14:11:42.728Z"},{"version":"6000.0.15f1","stream":"TECH","releaseDate":"2024-08-13T18:03:16.792Z"},{"version":"2022.3.42f1","stream":"LTS","releaseDate":"2024-08-13T09:26:14.269Z"},{"version":"6000.0.14f1","stream":"TECH","releaseDate":"2024-08-07T05:59:10.659Z"},{"version":"2022.3.41f1","stream":"LTS","releaseDate":"2024-08-06T10:07:06.853Z"},{"version":"2021.3.42f1","stream":"LTS","releaseDate":"2024-08-06T09:30:24.602Z"},{"version":"6000.0.13f1","stream":"TECH","releaseDate":"2024-07-31T18:30:12.352Z"},{"version":"2022.3.40f1","stream":"LTS","releaseDate":"2024-07-30T14:14:27.536Z"},{"version":"6000.0.12f1","stream":"TECH","releaseDate":"2024-07-25T16:59:55.927Z"},{"version":"2022.3.39f1","stream":"LTS","releaseDate":"2024-07-23T16:04:16.202Z"},{"version":"2021.3.41f1","stream":"LTS","releaseDate":"2024-07-23T14:54:58.798Z"},{"version":"6000.0.11f1","stream":"TECH","releaseDate":"2024-07-17T10:16:09.023Z"},{"version":"2022.3.38f1","stream":"LTS","releaseDate":"2024-07-16T13:52:35.994Z"},{"version":"6000.0.10f1","stream":"TECH","releaseDate":"2024-07-10T16:45:22.488Z"},{"version":"2022.3.37f1","stream":"LTS","releaseDate":"2024-07-09T12:05:40.074Z"},{"version":"6000.0.9f1","stream":"TECH","releaseDate":"2024-07-03T14:22:27.352Z"},{"version":"2022.3.36f1","stream":"LTS","releaseDate":"2024-07-02T17:23:09.124Z"},{"version":"6000.0.8f1","stream":"TECH","releaseDate":"2024-06-28T15:36:42.098Z"},{"version":"2022.3.35f1","stream":"LTS","releaseDate":"2024-06-27T17:06:27.082Z"},{"version":"2021.3.40f1","stream":"LTS","releaseDate":"2024-06-27T02:15:04.495Z"},{"version":"6000.0.7f1","stream":"TECH","releaseDate":"2024-06-20T16:04:46.276Z"},{"version":"2022.3.34f1","stream":"LTS","releaseDate":"2024-06-18T11:27:05.706Z"},{"version":"2022.3.33f1","stream":"LTS","releaseDate":"2024-06-12T06:22:11.955Z"},{"version":"6000.0.5f1","stream":"TECH","releaseDate":"2024-06-04T18:54:20.572Z"},{"version":"2022.3.32f1","stream":"LTS","releaseDate":"2024-06-04T17:45:52.358Z"},{"version":"6000.0.4f1","stream":"TECH","releaseDate":"2024-05-29T16:49:19.341Z"},{"version":"2022.3.31f1","stream":"LTS","releaseDate":"2024-05-28T17:19:07.265Z"},{"version":"2021.3.39f1","stream":"LTS","releaseDate":"2024-05-28T16:13:34.56Z"},{"version":"6000.0.3f1","stream":"TECH","releaseDate":"2024-05-21T16:15:54.933Z"},{"version":"2022.3.30f1","stream":"LTS","releaseDate":"2024-05-21T12:05:13.739Z"},{"version":"6000.0.2f1","stream":"TECH","releaseDate":"2024-05-14T19:54:04.427Z"},{"version":"2022.3.29f1","stream":"LTS","releaseDate":"2024-05-14T15:20:52.928Z"},{"version":"6000.0.1f1","stream":"TECH","releaseDate":"2024-05-08T15:11:21.9Z"},{"version":"2022.3.28f1","stream":"LTS","releaseDate":"2024-05-07T15:20:10.592Z"},{"version":"2021.3.38f1","stream":"LTS","releaseDate":"2024-05-02T18:42:56.761Z"},{"version":"2022.3.27f1","stream":"LTS","releaseDate":"2024-04-30T17:28:32.438Z"},{"version":"6000.0.0f1","stream":"TECH","releaseDate":"2024-04-29T18:37:33.422Z"},{"version":"2023.2.20f1","stream":"TECH","releaseDate":"2024-04-25T19:29:55.528Z"},{"version":"2022.3.26f1","stream":"LTS","releaseDate":"2024-04-23T17:47:02.175Z"},{"version":"6000.0.0b16","stream":"BETA","releaseDate":"2024-04-19T15:47:47.012Z"},{"version":"2023.2.19f1","stream":"TECH","releaseDate":"2024-04-18T08:21:36.264Z"},{"version":"2022.3.25f1","stream":"LTS","releaseDate":"2024-04-16T12:56:01.94Z"},{"version":"6000.0.0b15","stream":"BETA","releaseDate":"2024-04-13T00:46:31.309Z"},{"version":"2023.2.18f1","stream":"TECH","releaseDate":"2024-04-09T21:11:33.786Z"},{"version":"2022.3.24f1","stream":"LTS","releaseDate":"2024-04-09T11:12:12.504Z"},{"version":"2023.2.17f1","stream":"TECH","releaseDate":"2024-04-04T01:45:09.545Z"},{"version":"2022.3.23f1","stream":"LTS","releaseDate":"2024-04-02T15:24:02.324Z"},{"version":"2021.3.37f1","stream":"LTS","releaseDate":"2024-04-02T13:12:43.531Z"},{"version":"6000.0.0b13","stream":"BETA","releaseDate":"2024-03-27T01:28:00.39Z"},{"version":"2023.2.16f1","stream":"TECH","releaseDate":"2024-03-27T01:03:51.315Z"},{"version":"2023.2.15f1","stream":"TECH","releaseDate":"2024-03-19T21:07:34.034Z"},{"version":"6000.0.0b12","stream":"BETA","releaseDate":"2024-03-19T19:32:02.889Z"},{"version":"2022.3.22f1","stream":"LTS","releaseDate":"2024-03-19T11:06:29.329Z"},{"version":"6000.0.0b11","stream":"BETA","releaseDate":"2024-03-13T21:20:06.403Z"},{"version":"2023.2.14f1","stream":"TECH","releaseDate":"2024-03-12T18:27:41.758Z"},{"version":"2023.2.13f1","stream":"TECH","releaseDate":"2024-03-05T20:41:13.839Z"},{"version":"2023.3.0b10","stream":"BETA","releaseDate":"2024-03-05T19:08:01.485Z"},{"version":"2021.3.36f1","stream":"LTS","releaseDate":"2024-03-05T18:42:24.171Z"},{"version":"2022.3.21f1","stream":"LTS","releaseDate":"2024-03-05T16:04:04.858Z"},{"version":"2023.2.12f1","stream":"TECH","releaseDate":"2024-02-28T23:06:57.279Z"},{"version":"2023.3.0b9","stream":"BETA","releaseDate":"2024-02-28T21:32:42.698Z"},{"version":"2023.2.11f1","stream":"TECH","releaseDate":"2024-02-20T21:17:45.026Z"},{"version":"2023.3.0b8","stream":"BETA","releaseDate":"2024-02-20T19:40:27.171Z"},{"version":"2023.2.10f1","stream":"TECH","releaseDate":"2024-02-14T19:39:19.891Z"},{"version":"2022.3.20f1","stream":"LTS","releaseDate":"2024-02-14T11:25:56.541Z"},{"version":"2023.3.0b7","stream":"BETA","releaseDate":"2024-02-13T19:59:14.714Z"},{"version":"2023.3.0b6","stream":"BETA","releaseDate":"2024-02-07T07:24:40.232Z"},{"version":"2023.2.9f1","stream":"TECH","releaseDate":"2024-02-07T06:56:57.647Z"},{"version":"2021.3.35f1","stream":"LTS","releaseDate":"2024-02-06T15:40:15.583Z"},{"version":"2022.3.19f1","stream":"LTS","releaseDate":"2024-01-31T11:56:51.634Z"},{"version":"2023.3.0b5","stream":"BETA","releaseDate":"2024-01-31T00:28:33.7Z"},{"version":"2023.2.8f1","stream":"TECH","releaseDate":"2024-01-31T00:02:00.587Z"},{"version":"2023.2.7f1","stream":"TECH","releaseDate":"2024-01-23T20:43:04.878Z"},{"version":"2023.3.0b4","stream":"BETA","releaseDate":"2024-01-23T19:12:34.872Z"},{"version":"2022.3.18f1","stream":"LTS","releaseDate":"2024-01-20T16:00:12.21Z"},{"version":"2023.2.6f1","stream":"TECH","releaseDate":"2024-01-17T05:22:12.116Z"},{"version":"2023.3.0b3","stream":"BETA","releaseDate":"2024-01-15T05:07:54.401Z"},{"version":"2023.3.0b2","stream":"BETA","releaseDate":"2024-01-09T21:10:15.944Z"},{"version":"2021.3.34f1","stream":"LTS","releaseDate":"2024-01-09T15:33:57.013Z"},{"version":"2022.3.17f1","stream":"LTS","releaseDate":"2024-01-09T13:24:21.309Z"},{"version":"2023.2.5f1","stream":"TECH","releaseDate":"2024-01-09T08:49:30.857Z"},{"version":"2023.3.0b1","stream":"BETA","releaseDate":"2024-01-03T02:06:01.186Z"},{"version":"2023.2.4f1","stream":"TECH","releaseDate":"2023-12-22T11:24:31.462Z"},{"version":"2022.3.16f1","stream":"LTS","releaseDate":"2023-12-19T10:05:11.721Z"},{"version":"2023.3.0a18","stream":"ALPHA","releaseDate":"2023-12-13T21:40:57.508Z"},{"version":"2023.2.3f1","stream":"TECH","releaseDate":"2023-12-05T22:03:42.762Z"},{"version":"2023.3.0a17","stream":"ALPHA","releaseDate":"2023-12-05T20:29:50.071Z"},{"version":"2022.3.15f1","stream":"LTS","releaseDate":"2023-12-05T16:41:51.676Z"},{"version":"2023.2.2f1","stream":"TECH","releaseDate":"2023-11-28T20:28:30.951Z"},{"version":"2023.3.0a16","stream":"ALPHA","releaseDate":"2023-11-28T18:53:03.105Z"},{"version":"2021.3.33f1","stream":"LTS","releaseDate":"2023-11-28T15:21:35.633Z"},{"version":"2023.2.1f1","stream":"TECH","releaseDate":"2023-11-21T22:09:38.485Z"},{"version":"2022.3.14f1","stream":"LTS","releaseDate":"2023-11-21T20:07:15.67Z"},{"version":"2023.3.0a15","stream":"ALPHA","releaseDate":"2023-11-21T17:46:47.002Z"},{"version":"2023.2.0f1","stream":"TECH","releaseDate":"2023-11-14T23:22:44.293Z"},{"version":"2023.3.0a14","stream":"ALPHA","releaseDate":"2023-11-14T21:47:34.468Z"},{"version":"2023.1.20f1","stream":"TECH","releaseDate":"2023-11-09T11:37:53.08Z"},{"version":"2022.3.13f1","stream":"LTS","releaseDate":"2023-11-07T17:33:11.846Z"},{"version":"2023.3.0a13","stream":"ALPHA","releaseDate":"2023-11-07T13:03:31.636Z"},{"version":"2023.2.0b17","stream":"BETA","releaseDate":"2023-11-07T01:15:49.736Z"},{"version":"2021.3.32f1","stream":"LTS","releaseDate":"2023-11-01T15:47:25.801Z"},{"version":"2023.2.0b16","stream":"BETA","releaseDate":"2023-11-01T07:07:29.019Z"},{"version":"2023.3.0a12","stream":"ALPHA","releaseDate":"2023-10-31T20:54:47.461Z"},{"version":"2023.1.19f1","stream":"TECH","releaseDate":"2023-10-31T14:12:27.135Z"},{"version":"2023.3.0a11","stream":"ALPHA","releaseDate":"2023-10-26T20:42:38.014Z"},{"version":"2023.2.0b15","stream":"BETA","releaseDate":"2023-10-26T19:42:17.8Z"},{"version":"2022.3.12f1","stream":"LTS","releaseDate":"2023-10-26T14:00:14.602Z"},{"version":"2023.1.18f1","stream":"TECH","releaseDate":"2023-10-24T16:38:46.558Z"},{"version":"2023.1.17f1","stream":"TECH","releaseDate":"2023-10-17T13:06:27.215Z"},{"version":"2023.2.0b14","stream":"BETA","releaseDate":"2023-10-16T16:49:19.211Z"},{"version":"2023.3.0a10","stream":"ALPHA","releaseDate":"2023-10-16T15:53:09.409Z"},{"version":"2023.2.0b13","stream":"BETA","releaseDate":"2023-10-10T23:43:50.418Z"},{"version":"2022.3.11f1","stream":"LTS","releaseDate":"2023-10-10T15:27:45.575Z"},{"version":"2023.2.0b12","stream":"BETA","releaseDate":"2023-10-05T05:35:01.259Z"},{"version":"2023.3.0a8","stream":"ALPHA","releaseDate":"2023-10-05T04:37:32.541Z"},{"version":"2023.1.16f1","stream":"TECH","releaseDate":"2023-10-03T17:51:07.924Z"},{"version":"2021.3.31f1","stream":"LTS","releaseDate":"2023-10-03T15:50:59.188Z"},{"version":"2023.2.0b11","stream":"BETA","releaseDate":"2023-09-27T19:03:28.283Z"},{"version":"2023.1.15f1","stream":"TECH","releaseDate":"2023-09-26T13:26:57.122Z"},{"version":"2023.3.0a6","stream":"ALPHA","releaseDate":"2023-09-21T19:57:30.172Z"},{"version":"2023.2.0b10","stream":"BETA","releaseDate":"2023-09-21T00:25:39.068Z"},{"version":"2023.3.0a7","stream":"ALPHA","releaseDate":"2023-09-20T23:32:03.486Z"},{"version":"2023.1.14f1","stream":"TECH","releaseDate":"2023-09-19T13:45:02.802Z"},{"version":"2022.3.10f1","stream":"LTS","releaseDate":"2023-09-19T11:09:17.924Z"},{"version":"2023.2.0b9","stream":"BETA","releaseDate":"2023-09-13T16:47:50.265Z"},{"version":"2023.3.0a5","stream":"ALPHA","releaseDate":"2023-09-13T08:39:30.342Z"},{"version":"2023.1.13f1","stream":"TECH","releaseDate":"2023-09-12T16:45:26.506Z"},{"version":"2023.2.0b8","stream":"BETA","releaseDate":"2023-09-07T00:06:06.619Z"},{"version":"2023.3.0a4","stream":"ALPHA","releaseDate":"2023-09-06T23:09:51.761Z"},{"version":"2023.1.12f1","stream":"TECH","releaseDate":"2023-09-05T13:19:07.6Z"},{"version":"2022.3.9f1","stream":"LTS","releaseDate":"2023-09-05T11:20:42.552Z"},{"version":"2023.3.0a3","stream":"ALPHA","releaseDate":"2023-08-29T23:57:28.456Z"},{"version":"2023.1.11f1","stream":"TECH","releaseDate":"2023-08-29T23:34:23.251Z"},{"version":"2023.2.0b7","stream":"BETA","releaseDate":"2023-08-29T22:05:40.255Z"},{"version":"2021.3.30f1","stream":"LTS","releaseDate":"2023-08-29T22:00:32.916Z"},{"version":"2023.2.0b6","stream":"BETA","releaseDate":"2023-08-23T16:37:08.157Z"},{"version":"2022.3.8f1","stream":"LTS","releaseDate":"2023-08-22T16:08:57.69Z"},{"version":"2023.1.10f1","stream":"TECH","releaseDate":"2023-08-22T09:04:56.856Z"},{"version":"2023.2.0b5","stream":"BETA","releaseDate":"2023-08-15T19:46:13.961Z"},{"version":"2023.1.9f1","stream":"TECH","releaseDate":"2023-08-15T08:51:07.431Z"},{"version":"2023.2.0b4","stream":"BETA","releaseDate":"2023-08-10T16:28:52.954Z"},{"version":"2023.1.8f1","stream":"TECH","releaseDate":"2023-08-08T10:46:36.347Z"},{"version":"2022.3.7f1","stream":"LTS","releaseDate":"2023-08-08T09:39:39.25Z"},{"version":"2023.2.0b3","stream":"BETA","releaseDate":"2023-08-01T21:20:07.98Z"},{"version":"2023.1.7f1","stream":"TECH","releaseDate":"2023-08-01T11:52:30.688Z"},{"version":"2022.3.6f1","stream":"LTS","releaseDate":"2023-07-31T18:44:28.313Z"},{"version":"2023.2.0b2","stream":"BETA","releaseDate":"2023-07-26T15:36:17.09Z"},{"version":"2023.1.6f1","stream":"TECH","releaseDate":"2023-07-25T14:07:19.679Z"},{"version":"2021.3.29f1","stream":"LTS","releaseDate":"2023-07-25T12:13:45.721Z"},{"version":"2023.2.0b1","stream":"BETA","releaseDate":"2023-07-19T17:48:18.078Z"},{"version":"2023.1.5f1","stream":"TECH","releaseDate":"2023-07-18T09:47:39.883Z"},{"version":"2022.3.5f1","stream":"LTS","releaseDate":"2023-07-13T16:12:49.118Z"},{"version":"2023.1.4f1","stream":"TECH","releaseDate":"2023-07-13T09:22:35.284Z"},{"version":"2023.2.0a22","stream":"ALPHA","releaseDate":"2023-07-10T10:49:24.525Z"},{"version":"2023.1.3f1","stream":"TECH","releaseDate":"2023-07-05T10:38:33.783Z"},{"version":"2021.3.28f1","stream":"LTS","releaseDate":"2023-07-04T19:41:02.205Z"},{"version":"2023.1.2f1","stream":"TECH","releaseDate":"2023-06-26T17:35:53.289Z"},{"version":"2022.3.4f1","stream":"LTS","releaseDate":"2023-06-26T16:47:18.705Z"},{"version":"2023.2.0a20","stream":"ALPHA","releaseDate":"2023-06-21T19:58:23.589Z"},{"version":"2022.3.3f1","stream":"LTS","releaseDate":"2023-06-21T15:21:19.031Z"},{"version":"2023.1.1f1","stream":"TECH","releaseDate":"2023-06-21T14:44:26.694Z"},{"version":"2023.2.0a19","stream":"ALPHA","releaseDate":"2023-06-13T17:56:46.902Z"},{"version":"2022.3.2f1","stream":"LTS","releaseDate":"2023-06-13T17:35:17.032Z"},{"version":"2023.1.0f1","stream":"TECH","releaseDate":"2023-06-12T20:09:17.94Z"},{"version":"2021.3.27f1","stream":"LTS","releaseDate":"2023-06-07T16:35:21.242Z"},{"version":"2023.2.0a18","stream":"ALPHA","releaseDate":"2023-06-07T15:05:43.861Z"},{"version":"2023.1.0b20","stream":"BETA","releaseDate":"2023-06-07T14:07:58.105Z"},{"version":"2022.3.1f1","stream":"LTS","releaseDate":"2023-06-07T11:44:18.643Z"},{"version":"2023.1.0b19","stream":"BETA","releaseDate":"2023-05-31T21:22:40.716Z"},{"version":"2023.2.0a17","stream":"ALPHA","releaseDate":"2023-05-31T19:36:57.585Z"},{"version":"2022.3.0f1","stream":"LTS","releaseDate":"2023-05-30T10:40:13.858Z"},{"version":"2021.3.26f1","stream":"LTS","releaseDate":"2023-05-25T11:47:02.15Z"},{"version":"2023.2.0a16","stream":"ALPHA","releaseDate":"2023-05-24T20:32:01.993Z"},{"version":"2023.1.0b18","stream":"BETA","releaseDate":"2023-05-24T14:12:55.453Z"},{"version":"2022.2.21f1","stream":"TECH","releaseDate":"2023-05-24T11:15:23.985Z"},{"version":"2022.2.20f1","stream":"TECH","releaseDate":"2023-05-18T09:58:25.774Z"},{"version":"2023.2.0a15","stream":"ALPHA","releaseDate":"2023-05-17T20:05:43.215Z"},{"version":"2020.3.48f1","stream":"LTS","releaseDate":"2023-05-17T17:23:52.784Z"},{"version":"2023.1.0b17","stream":"BETA","releaseDate":"2023-05-17T16:32:57.091Z"},{"version":"2021.3.25f1","stream":"LTS","releaseDate":"2023-05-11T13:55:39.057Z"},{"version":"2022.2.19f1","stream":"TECH","releaseDate":"2023-05-11T12:02:51.939Z"},{"version":"2023.1.0b16","stream":"BETA","releaseDate":"2023-05-11T01:23:47.798Z"},{"version":"2023.2.0a14","stream":"ALPHA","releaseDate":"2023-05-10T19:50:11.444Z"},{"version":"2023.1.0b15","stream":"BETA","releaseDate":"2023-05-04T15:09:21.872Z"},{"version":"2022.2.18f1","stream":"TECH","releaseDate":"2023-05-04T14:54:59.951Z"},{"version":"2023.2.0a13","stream":"ALPHA","releaseDate":"2023-05-03T19:08:00.761Z"},{"version":"2022.2.17f1","stream":"TECH","releaseDate":"2023-04-27T17:55:43.297Z"},{"version":"2021.3.24f1","stream":"LTS","releaseDate":"2023-04-27T17:16:27.561Z"},{"version":"2023.2.0a12","stream":"ALPHA","releaseDate":"2023-04-27T14:39:10.774Z"},{"version":"2023.1.0b14","stream":"BETA","releaseDate":"2023-04-26T17:38:33.828Z"},{"version":"2023.2.0a11","stream":"ALPHA","releaseDate":"2023-04-19T23:11:25.842Z"},{"version":"2023.1.0b13","stream":"BETA","releaseDate":"2023-04-19T15:38:30.438Z"},{"version":"2022.2.16f1","stream":"TECH","releaseDate":"2023-04-19T14:00:29.791Z"},{"version":"2021.3.23f1","stream":"LTS","releaseDate":"2023-04-14T03:05:53.411Z"},{"version":"2022.2.15f1","stream":"TECH","releaseDate":"2023-04-13T13:56:06.949Z"},{"version":"2023.2.0a10","stream":"ALPHA","releaseDate":"2023-04-12T17:57:27.395Z"},{"version":"2023.1.0b12","stream":"BETA","releaseDate":"2023-04-12T16:58:27.175Z"},{"version":"2022.2.14f1","stream":"TECH","releaseDate":"2023-04-05T22:20:20.9Z"},{"version":"2023.2.0a9","stream":"ALPHA","releaseDate":"2023-04-05T17:17:10.383Z"},{"version":"2020.3.47f1","stream":"LTS","releaseDate":"2023-04-05T16:12:43.414Z"},{"version":"2023.1.0b11","stream":"BETA","releaseDate":"2023-04-04T21:58:08.41Z"},{"version":"2022.2.13f1","stream":"TECH","releaseDate":"2023-03-31T14:48:28.306Z"},{"version":"2021.3.22f1","stream":"LTS","releaseDate":"2023-03-29T20:44:06.131Z"},{"version":"2023.1.0b10","stream":"BETA","releaseDate":"2023-03-29T19:31:31.427Z"},{"version":"2023.2.0a8","stream":"ALPHA","releaseDate":"2023-03-29T17:45:36.718Z"},{"version":"2023.2.0a7","stream":"ALPHA","releaseDate":"2023-03-22T21:21:49.277Z"},{"version":"2022.2.12f1","stream":"TECH","releaseDate":"2023-03-22T19:38:11.702Z"},{"version":"2023.1.0b9","stream":"BETA","releaseDate":"2023-03-22T17:34:30.593Z"},{"version":"2023.2.0a6","stream":"ALPHA","releaseDate":"2023-03-15T17:05:39.94Z"},{"version":"2023.1.0b8","stream":"BETA","releaseDate":"2023-03-15T15:20:07.049Z"},{"version":"2021.3.21f1","stream":"LTS","releaseDate":"2023-03-15T03:07:29.397Z"},{"version":"2022.2.11f1","stream":"TECH","releaseDate":"2023-03-15T02:33:37.439Z"},{"version":"2022.2.10f1","stream":"TECH","releaseDate":"2023-03-09T01:37:14.186Z"},{"version":"2020.3.46f1","stream":"LTS","releaseDate":"2023-03-08T16:13:10.801Z"},{"version":"2023.1.0b7","stream":"BETA","releaseDate":"2023-03-07T17:21:08.118Z"},{"version":"2022.2.9f1","stream":"TECH","releaseDate":"2023-03-03T01:54:20.162Z"},{"version":"2021.3.20f1","stream":"LTS","releaseDate":"2023-03-02T23:34:21.478Z"},{"version":"2023.1.0b6","stream":"BETA","releaseDate":"2023-03-02T17:05:36.697Z"},{"version":"2022.2.8f1","stream":"TECH","releaseDate":"2023-02-23T15:21:52.581Z"},{"version":"2023.1.0b5","stream":"BETA","releaseDate":"2023-02-22T14:43:31.652Z"},{"version":"2021.3.19f1","stream":"LTS","releaseDate":"2023-02-17T15:24:45.325Z"},{"version":"2023.1.0b4","stream":"BETA","releaseDate":"2023-02-16T16:12:27.289Z"},{"version":"2022.2.7f1","stream":"TECH","releaseDate":"2023-02-15T20:59:18.694Z"},{"version":"2020.3.45f1","stream":"LTS","releaseDate":"2023-02-14T21:48:56.797Z"},{"version":"2022.2.6f1","stream":"TECH","releaseDate":"2023-02-10T01:46:54.429Z"},{"version":"2023.1.0b3","stream":"BETA","releaseDate":"2023-02-08T16:02:45.148Z"},{"version":"2021.3.18f1","stream":"LTS","releaseDate":"2023-02-01T20:10:11.475Z"},{"version":"2023.1.0b2","stream":"BETA","releaseDate":"2023-02-01T14:26:56.98Z"},{"version":"2022.2.5f1","stream":"TECH","releaseDate":"2023-01-31T20:58:08.206Z"},{"version":"2022.2.4f1","stream":"TECH","releaseDate":"2023-01-27T14:41:48.225Z"},{"version":"2023.1.0b1","stream":"BETA","releaseDate":"2023-01-24T16:35:43.402Z"},{"version":"2021.3.17f1","stream":"LTS","releaseDate":"2023-01-24T16:26:13.742Z"},{"version":"2022.2.3f1","stream":"TECH","releaseDate":"2023-01-23T19:50:52.175Z"},{"version":"2023.1.0a26","stream":"ALPHA","releaseDate":"2023-01-18T17:32:21.563Z"},{"version":"2020.3.44f1","stream":"LTS","releaseDate":"2023-01-18T17:25:53.109Z"},{"version":"2023.1.0a25","stream":"ALPHA","releaseDate":"2023-01-11T19:23:37.686Z"},{"version":"2022.2.2f1","stream":"TECH","releaseDate":"2023-01-10T03:21:01.425Z"},{"version":"2023.1.0a24","stream":"ALPHA","releaseDate":"2022-12-22T01:56:32.448Z"},{"version":"2020.3.43f1","stream":"LTS","releaseDate":"2022-12-15T22:02:25.885Z"},{"version":"2021.3.16f1","stream":"LTS","releaseDate":"2022-12-15T16:05:52.918Z"},{"version":"2023.1.0a23","stream":"ALPHA","releaseDate":"2022-12-14T18:58:53.977Z"},{"version":"2022.2.1f1","stream":"TECH","releaseDate":"2022-12-12T15:26:11.226Z"},{"version":"2023.1.0a22","stream":"ALPHA","releaseDate":"2022-12-07T21:25:31.942Z"},{"version":"2022.2.0f1","stream":"TECH","releaseDate":"2022-12-07T14:29:04.831Z"},{"version":"2022.1.24f1","stream":"TECH","releaseDate":"2022-12-06T18:33:08.73Z"},{"version":"2021.3.15f1","stream":"LTS","releaseDate":"2022-12-01T17:20:58.301Z"},{"version":"2023.1.0a21","stream":"ALPHA","releaseDate":"2022-11-30T15:35:08.652Z"},{"version":"2023.1.0a20","stream":"ALPHA","releaseDate":"2022-11-24T14:54:00.095Z"},{"version":"2022.2.0b16","stream":"BETA","releaseDate":"2022-11-18T15:21:52.75Z"},{"version":"2023.1.0a19","stream":"ALPHA","releaseDate":"2022-11-17T21:40:42.637Z"},{"version":"2021.3.14f1","stream":"LTS","releaseDate":"2022-11-17T17:28:01.68Z"},{"version":"2020.3.42f1","stream":"LTS","releaseDate":"2022-11-17T16:42:55.716Z"},{"version":"2022.1.23f1","stream":"TECH","releaseDate":"2022-11-16T11:07:08.587Z"},{"version":"2022.2.0b15","stream":"BETA","releaseDate":"2022-11-16T09:42:02.426Z"},{"version":"2023.1.0a18","stream":"ALPHA","releaseDate":"2022-11-10T15:10:57.781Z"},{"version":"2022.1.22f1","stream":"TECH","releaseDate":"2022-11-09T12:42:48.452Z"},{"version":"2022.2.0b14","stream":"BETA","releaseDate":"2022-11-07T14:57:36.808Z"},{"version":"2021.3.13f1","stream":"LTS","releaseDate":"2022-11-04T16:42:23.168Z"},{"version":"2023.1.0a17","stream":"ALPHA","releaseDate":"2022-11-04T15:52:07.007Z"},{"version":"2023.1.0a16","stream":"ALPHA","releaseDate":"2022-10-27T15:51:25.673Z"},{"version":"2022.1.21f1","stream":"TECH","releaseDate":"2022-10-27T14:14:42.051Z"},{"version":"2022.2.0b13","stream":"BETA","releaseDate":"2022-10-26T20:13:31.627Z"},{"version":"2021.3.12f1","stream":"LTS","releaseDate":"2022-10-25T15:16:10.951Z"},{"version":"2023.1.0a15","stream":"ALPHA","releaseDate":"2022-10-21T15:12:32.32Z"},{"version":"2020.3.41f1","stream":"LTS","releaseDate":"2022-10-21T14:22:52.563Z"},{"version":"2022.2.0b12","stream":"BETA","releaseDate":"2022-10-20T15:21:30.949Z"},{"version":"2022.2.0b11","stream":"BETA","releaseDate":"2022-10-17T19:47:44.246Z"},{"version":"2023.1.0a14","stream":"ALPHA","releaseDate":"2022-10-13T19:56:48.359Z"},{"version":"2022.1.20f1","stream":"TECH","releaseDate":"2022-10-12T11:42:58.624Z"},{"version":"2023.1.0a13","stream":"ALPHA","releaseDate":"2022-10-06T19:12:22.623Z"},{"version":"2022.2.0b10","stream":"BETA","releaseDate":"2022-10-06T15:22:41.471Z"},{"version":"2022.1.19f1","stream":"TECH","releaseDate":"2022-10-05T12:57:27.655Z"},{"version":"2022.1.18f1","stream":"TECH","releaseDate":"2022-09-29T14:37:44.585Z"},{"version":"2021.3.11f1","stream":"LTS","releaseDate":"2022-09-29T10:18:44.505Z"},{"version":"2022.2.0b9","stream":"BETA","releaseDate":"2022-09-29T03:03:40.791Z"},{"version":"2023.1.0a12","stream":"ALPHA","releaseDate":"2022-09-28T19:55:37.092Z"},{"version":"2020.3.40f1","stream":"LTS","releaseDate":"2022-09-27T10:08:51.488Z"},{"version":"2023.1.0a11","stream":"ALPHA","releaseDate":"2022-09-21T14:43:10.283Z"},{"version":"2022.1.17f1","stream":"TECH","releaseDate":"2022-09-21T11:47:30.136Z"},{"version":"2021.3.10f1","stream":"LTS","releaseDate":"2022-09-16T15:49:10.593Z"},{"version":"2020.3.39f1","stream":"LTS","releaseDate":"2022-09-14T21:53:29.605Z"},{"version":"2023.1.0a10","stream":"ALPHA","releaseDate":"2022-09-12T18:11:46.938Z"},{"version":"2022.2.0b8","stream":"BETA","releaseDate":"2022-09-09T16:13:00.347Z"},{"version":"2022.1.16f1","stream":"TECH","releaseDate":"2022-09-08T13:08:35.083Z"},{"version":"2023.1.0a9","stream":"ALPHA","releaseDate":"2022-09-06T18:57:38.971Z"},{"version":"2021.3.9f1","stream":"LTS","releaseDate":"2022-09-01T16:32:11.579Z"},{"version":"2022.2.0b7","stream":"BETA","releaseDate":"2022-09-01T14:23:07.207Z"},{"version":"2022.1.15f1","stream":"TECH","releaseDate":"2022-09-01T10:40:40.395Z"},{"version":"2022.2.0b6","stream":"BETA","releaseDate":"2022-08-25T22:40:10.31Z"},{"version":"2022.2.0b5","stream":"BETA","releaseDate":"2022-08-22T13:46:29.274Z"},{"version":"2022.1.14f1","stream":"TECH","releaseDate":"2022-08-22T08:56:08.045Z"},{"version":"2023.1.0a6","stream":"ALPHA","releaseDate":"2022-08-18T16:45:55.03Z"},{"version":"2020.3.38f1","stream":"LTS","releaseDate":"2022-08-17T13:37:37.983Z"},{"version":"2023.1.0a5","stream":"ALPHA","releaseDate":"2022-08-11T16:35:17.219Z"},{"version":"2022.1.13f1","stream":"TECH","releaseDate":"2022-08-11T07:43:08.279Z"},{"version":"2021.3.8f1","stream":"LTS","releaseDate":"2022-08-08T15:26:36.929Z"},{"version":"2022.1.12f1","stream":"TECH","releaseDate":"2022-08-05T10:30:50.92Z"},{"version":"2022.2.0b4","stream":"BETA","releaseDate":"2022-08-05T02:14:17.717Z"},{"version":"2022.2.0b3","stream":"BETA","releaseDate":"2022-07-28T17:18:44.591Z"},{"version":"2021.3.7f1","stream":"LTS","releaseDate":"2022-07-28T09:50:46.767Z"},{"version":"2022.1.11f1","stream":"TECH","releaseDate":"2022-07-27T12:20:14.487Z"},{"version":"2023.1.0a4","stream":"ALPHA","releaseDate":"2022-07-26T16:55:38.559Z"},{"version":"2022.2.0b2","stream":"BETA","releaseDate":"2022-07-22T13:54:37.023Z"},{"version":"2020.3.37f1","stream":"LTS","releaseDate":"2022-07-21T09:53:36.224Z"},{"version":"2022.1.10f1","stream":"TECH","releaseDate":"2022-07-20T11:35:58.889Z"},{"version":"2022.1.9f1","stream":"TECH","releaseDate":"2022-07-14T11:39:28.809Z"},{"version":"2022.2.0b1","stream":"BETA","releaseDate":"2022-07-12T23:24:29.908Z"},{"version":"2021.3.6f1","stream":"LTS","releaseDate":"2022-07-08T09:48:54.711Z"},{"version":"2022.1.8f1","stream":"TECH","releaseDate":"2022-07-07T15:05:53.642Z"},{"version":"2022.2.0a18","stream":"ALPHA","releaseDate":"2022-07-04T16:35:28.141Z"},{"version":"2022.1.7f1","stream":"TECH","releaseDate":"2022-06-29T12:39:55.587Z"},{"version":"2022.1.6f1","stream":"TECH","releaseDate":"2022-06-23T11:07:14.856Z"},{"version":"2021.3.5f1","stream":"LTS","releaseDate":"2022-06-22T17:32:31.147Z"},{"version":"2019.4.40f1","stream":"LTS","releaseDate":"2022-06-16T20:44:08.743Z"},{"version":"2022.2.0a17","stream":"ALPHA","releaseDate":"2022-06-16T19:20:11.108Z"},{"version":"2020.3.36f1","stream":"LTS","releaseDate":"2022-06-16T15:04:11.655Z"},{"version":"2022.1.5f1","stream":"TECH","releaseDate":"2022-06-15T16:47:55.461Z"},{"version":"2022.2.0a16","stream":"ALPHA","releaseDate":"2022-06-08T20:20:40.379Z"},{"version":"2022.1.4f1","stream":"TECH","releaseDate":"2022-06-08T15:53:22.151Z"},{"version":"2022.1.3f1","stream":"TECH","releaseDate":"2022-05-31T16:42:45.974Z"},{"version":"2021.3.4f1","stream":"LTS","releaseDate":"2022-05-31T15:14:15.559Z"},{"version":"2020.3.35f1","stream":"LTS","releaseDate":"2022-05-26T23:30:47.962Z"},{"version":"2022.1.2f1","stream":"TECH","releaseDate":"2022-05-25T14:32:41.967Z"},{"version":"2021.3.3f1","stream":"LTS","releaseDate":"2022-05-19T10:01:53.956Z"},{"version":"2022.1.1f1","stream":"TECH","releaseDate":"2022-05-18T20:43:29.778Z"},{"version":"2022.2.0a13","stream":"ALPHA","releaseDate":"2022-05-12T22:47:12.2Z"},{"version":"2019.4.39f1","stream":"LTS","releaseDate":"2022-05-11T22:31:15.588Z"},{"version":"2022.1.0f1","stream":"TECH","releaseDate":"2022-05-09T16:53:20.722Z"},{"version":"2022.2.0a12","stream":"ALPHA","releaseDate":"2022-05-05T12:15:24.277Z"},{"version":"2021.3.2f1","stream":"LTS","releaseDate":"2022-05-05T10:42:14.717Z"},{"version":"2020.3.34f1","stream":"LTS","releaseDate":"2022-05-04T14:33:40.994Z"},{"version":"2022.2.0a11","stream":"ALPHA","releaseDate":"2022-04-25T14:28:41.066Z"},{"version":"2021.3.1f1","stream":"LTS","releaseDate":"2022-04-21T18:19:43.403Z"},{"version":"2022.2.0a10","stream":"ALPHA","releaseDate":"2022-04-14T13:22:59.494Z"},{"version":"2019.4.38f1","stream":"LTS","releaseDate":"2022-04-13T15:24:10.41Z"},{"version":"2022.1.0b16","stream":"BETA","releaseDate":"2022-04-12T18:11:34.766Z"},{"version":"2021.3.0f1","stream":"LTS","releaseDate":"2022-04-11T18:46:28.654Z"},{"version":"2020.3.33f1","stream":"LTS","releaseDate":"2022-04-07T13:58:00.788Z"},{"version":"2022.1.0b15","stream":"BETA","releaseDate":"2022-04-07T07:56:08.228Z"},{"version":"2021.2.19f1","stream":"TECH","releaseDate":"2022-04-05T17:15:08.016Z"},{"version":"2022.2.0a9","stream":"ALPHA","releaseDate":"2022-04-01T10:23:18.714Z"},{"version":"2021.2.18f1","stream":"TECH","releaseDate":"2022-04-01T07:28:41.049Z"},{"version":"2022.1.0b14","stream":"BETA","releaseDate":"2022-03-30T09:56:12.725Z"},{"version":"2021.2.17f1","stream":"TECH","releaseDate":"2022-03-24T21:31:28.98Z"},{"version":"2020.3.32f1","stream":"LTS","releaseDate":"2022-03-23T15:39:23.912Z"},{"version":"2019.4.37f1","stream":"LTS","releaseDate":"2022-03-22T18:47:13.846Z"},{"version":"2022.1.0b13","stream":"BETA","releaseDate":"2022-03-22T17:02:39.21Z"},{"version":"2020.3.31f1","stream":"LTS","releaseDate":"2022-03-17T18:06:28.222Z"},{"version":"2021.2.16f1","stream":"TECH","releaseDate":"2022-03-17T17:27:16.428Z"},{"version":"2022.1.0b12","stream":"BETA","releaseDate":"2022-03-17T15:03:20.498Z"},{"version":"2021.2.15f1","stream":"TECH","releaseDate":"2022-03-11T17:03:49.668Z"},{"version":"2022.1.0b11","stream":"BETA","releaseDate":"2022-03-09T07:19:01.616Z"},{"version":"2021.2.14f1","stream":"TECH","releaseDate":"2022-03-03T17:20:56.922Z"},{"version":"2022.1.0b10","stream":"BETA","releaseDate":"2022-03-02T12:36:18.043Z"},{"version":"2020.3.30f1","stream":"LTS","releaseDate":"2022-02-24T17:26:14.613Z"},{"version":"2021.2.13f1","stream":"TECH","releaseDate":"2022-02-23T19:42:33.34Z"},{"version":"2022.1.0b9","stream":"BETA","releaseDate":"2022-02-23T13:13:56.537Z"},{"version":"2021.2.12f1","stream":"TECH","releaseDate":"2022-02-17T20:43:34.621Z"},{"version":"2019.4.36f1","stream":"LTS","releaseDate":"2022-02-17T16:41:01.394Z"},{"version":"2020.3.29f1","stream":"LTS","releaseDate":"2022-02-17T15:59:07.521Z"},{"version":"2022.1.0b8","stream":"BETA","releaseDate":"2022-02-16T11:35:02.222Z"},{"version":"2021.2.11f1","stream":"TECH","releaseDate":"2022-02-10T17:24:35.612Z"},{"version":"2020.3.28f1","stream":"LTS","releaseDate":"2022-02-09T21:48:58.684Z"},{"version":"2022.1.0b7","stream":"BETA","releaseDate":"2022-02-08T11:39:17.916Z"},{"version":"2022.1.0b6","stream":"BETA","releaseDate":"2022-02-02T08:30:32.412Z"},{"version":"2021.2.10f1","stream":"TECH","releaseDate":"2022-02-01T22:07:17.864Z"},{"version":"2020.3.27f1","stream":"LTS","releaseDate":"2022-01-31T23:06:41.649Z"},{"version":"2019.4.35f1","stream":"LTS","releaseDate":"2022-01-28T14:26:18.891Z"},{"version":"2022.1.0b5","stream":"BETA","releaseDate":"2022-01-27T17:44:54.531Z"},{"version":"2021.2.9f1","stream":"TECH","releaseDate":"2022-01-27T17:09:54.141Z"},{"version":"2022.1.0b4","stream":"BETA","releaseDate":"2022-01-19T11:50:18.82Z"},{"version":"2020.3.26f1","stream":"LTS","releaseDate":"2022-01-13T20:29:30.146Z"},{"version":"2021.2.8f1","stream":"TECH","releaseDate":"2022-01-13T16:36:04.553Z"},{"version":"2022.1.0b3","stream":"BETA","releaseDate":"2022-01-12T12:14:48.421Z"},{"version":"2020.3.25f1","stream":"LTS","releaseDate":"2021-12-16T18:21:47.61Z"},{"version":"2021.2.7f1","stream":"TECH","releaseDate":"2021-12-16T17:44:39.837Z"},{"version":"2019.4.34f1","stream":"LTS","releaseDate":"2021-12-15T17:52:49.421Z"},{"version":"2022.1.0b2","stream":"BETA","releaseDate":"2021-12-14T18:43:17.216Z"},{"version":"2021.2.6f1","stream":"TECH","releaseDate":"2021-12-10T16:38:19.632Z"},{"version":"2022.1.0b1","stream":"BETA","releaseDate":"2021-12-08T19:49:54.8Z"},{"version":"2020.3.24f1","stream":"LTS","releaseDate":"2021-12-02T20:30:57.111Z"},{"version":"2021.2.5f1","stream":"TECH","releaseDate":"2021-12-01T16:54:28.059Z"},{"version":"2022.1.0a16","stream":"ALPHA","releaseDate":"2021-11-29T12:23:09.813Z"},{"version":"2019.4.33f1","stream":"LTS","releaseDate":"2021-11-25T18:53:15.439Z"},{"version":"2021.2.4f1","stream":"TECH","releaseDate":"2021-11-25T13:45:23.549Z"},{"version":"2020.3.23f1","stream":"LTS","releaseDate":"2021-11-19T20:08:31.142Z"},{"version":"2022.1.0a15","stream":"ALPHA","releaseDate":"2021-11-18T12:23:33.305Z"},{"version":"2021.2.3f1","stream":"TECH","releaseDate":"2021-11-18T11:49:58.417Z"},{"version":"2021.2.2f1","stream":"TECH","releaseDate":"2021-11-11T11:54:38.289Z"},{"version":"2020.3.22f1","stream":"LTS","releaseDate":"2021-11-05T19:35:33.664Z"},{"version":"2021.1.28f1","stream":"TECH","releaseDate":"2021-11-04T19:43:00.612Z"},{"version":"2021.2.1f1","stream":"TECH","releaseDate":"2021-11-04T12:14:00.179Z"},{"version":"2019.4.32f1","stream":"LTS","releaseDate":"2021-10-28T16:49:13.453Z"},{"version":"2022.1.0a13","stream":"ALPHA","releaseDate":"2021-10-28T14:30:14.459Z"},{"version":"2021.1.27f1","stream":"TECH","releaseDate":"2021-10-25T19:24:00.396Z"},{"version":"2021.2.0f1","stream":"TECH","releaseDate":"2021-10-25T14:52:13.034Z"},{"version":"2020.3.21f1","stream":"LTS","releaseDate":"2021-10-21T16:33:29.335Z"},{"version":"2021.1.26f1","stream":"TECH","releaseDate":"2021-10-20T15:42:50.491Z"},{"version":"2021.1.25f1","stream":"TECH","releaseDate":"2021-10-14T21:35:29.388Z"},{"version":"2022.1.0a12","stream":"ALPHA","releaseDate":"2021-10-13T19:34:46.255Z"},{"version":"2021.2.0b16","stream":"BETA","releaseDate":"2021-10-12T16:42:06.071Z"},{"version":"2020.3.20f1","stream":"LTS","releaseDate":"2021-10-08T16:38:35.542Z"},{"version":"2021.1.24f1","stream":"TECH","releaseDate":"2021-10-06T18:29:11.434Z"},{"version":"2022.1.0a11","stream":"ALPHA","releaseDate":"2021-10-06T15:14:18.114Z"},{"version":"2021.2.0b15","stream":"BETA","releaseDate":"2021-10-06T09:13:13.691Z"},{"version":"2022.1.0a10","stream":"ALPHA","releaseDate":"2021-10-01T19:35:39.33Z"},{"version":"2021.2.0b14","stream":"BETA","releaseDate":"2021-10-01T11:27:08.42Z"},{"version":"2021.1.23f1","stream":"TECH","releaseDate":"2021-09-30T17:01:27.178Z"},{"version":"2019.4.31f1","stream":"LTS","releaseDate":"2021-09-30T16:11:12.7Z"},{"version":"2022.1.0a9","stream":"ALPHA","releaseDate":"2021-09-23T16:24:52.925Z"},{"version":"2020.3.19f1","stream":"LTS","releaseDate":"2021-09-22T21:58:37.423Z"},{"version":"2021.2.0b13","stream":"BETA","releaseDate":"2021-09-22T13:58:46.571Z"},{"version":"2021.1.22f1","stream":"TECH","releaseDate":"2021-09-21T00:25:04.557Z"},{"version":"2021.2.0b12","stream":"BETA","releaseDate":"2021-09-16T11:41:11.337Z"},{"version":"2022.1.0a8","stream":"ALPHA","releaseDate":"2021-09-15T14:02:16.501Z"},{"version":"2021.1.21f1","stream":"TECH","releaseDate":"2021-09-14T21:44:40.4Z"},{"version":"2020.3.18f1","stream":"LTS","releaseDate":"2021-09-09T09:35:05.255Z"},{"version":"2021.1.20f1","stream":"TECH","releaseDate":"2021-09-08T13:15:22.713Z"},{"version":"2021.2.0b11","stream":"BETA","releaseDate":"2021-09-07T11:45:52.414Z"},{"version":"2022.1.0a7","stream":"ALPHA","releaseDate":"2021-09-06T11:16:46.35Z"},{"version":"2021.2.0b10","stream":"BETA","releaseDate":"2021-09-04T01:54:50.158Z"},{"version":"2019.4.30f1","stream":"LTS","releaseDate":"2021-09-03T22:17:29.374Z"},{"version":"2021.1.19f1","stream":"TECH","releaseDate":"2021-09-01T10:51:04.953Z"},{"version":"2020.3.17f1","stream":"LTS","releaseDate":"2021-08-25T18:28:14.223Z"},{"version":"2021.1.18f1","stream":"TECH","releaseDate":"2021-08-25T17:26:42.238Z"},{"version":"2021.2.0b9","stream":"BETA","releaseDate":"2021-08-25T11:31:02.295Z"},{"version":"2021.2.0b8","stream":"BETA","releaseDate":"2021-08-19T09:59:27.465Z"},{"version":"2021.1.17f1","stream":"TECH","releaseDate":"2021-08-13T18:37:59.39Z"},{"version":"2020.3.16f1","stream":"LTS","releaseDate":"2021-08-12T15:55:22.688Z"},{"version":"2021.2.0b7","stream":"BETA","releaseDate":"2021-08-10T10:33:56.915Z"},{"version":"2021.2.0b6","stream":"BETA","releaseDate":"2021-08-04T13:24:08.916Z"},{"version":"2021.2.0b5","stream":"BETA","releaseDate":"2021-08-02T15:15:23.162Z"},{"version":"2021.1.16f1","stream":"TECH","releaseDate":"2021-08-02T14:27:00.489Z"},{"version":"2020.3.15f2","stream":"LTS","releaseDate":"2021-07-30T16:23:30.239Z"},{"version":"2019.4.29f1","stream":"LTS","releaseDate":"2021-07-30T15:19:33.152Z"},{"version":"2021.2.0b4","stream":"BETA","releaseDate":"2021-07-15T10:53:43.739Z"},{"version":"2021.1.15f1","stream":"TECH","releaseDate":"2021-07-14T11:13:58.182Z"},{"version":"2020.3.14f1","stream":"LTS","releaseDate":"2021-07-13T16:58:10.491Z"},{"version":"2021.2.0b3","stream":"BETA","releaseDate":"2021-07-08T10:47:42.2Z"},{"version":"2021.1.14f1","stream":"TECH","releaseDate":"2021-07-07T01:08:43.836Z"},{"version":"2021.2.0b2","stream":"BETA","releaseDate":"2021-07-02T13:15:04.412Z"},{"version":"2020.3.13f1","stream":"LTS","releaseDate":"2021-06-30T18:40:12.88Z"},{"version":"2021.1.13f1","stream":"TECH","releaseDate":"2021-06-30T05:59:29.187Z"},{"version":"2021.2.0b1","stream":"BETA","releaseDate":"2021-06-18T19:27:35.539Z"},{"version":"2018.4.36f1","stream":"LTS","releaseDate":"2021-06-17T16:13:54.008Z"},{"version":"2021.1.12f1","stream":"TECH","releaseDate":"2021-06-17T15:00:50.572Z"},{"version":"2020.3.12f1","stream":"LTS","releaseDate":"2021-06-15T18:58:12.277Z"},{"version":"2021.2.0a21","stream":"ALPHA","releaseDate":"2021-06-15T16:37:53.038Z"},{"version":"2021.1.11f1","stream":"TECH","releaseDate":"2021-06-10T10:04:24.296Z"},{"version":"2021.2.0a20","stream":"ALPHA","releaseDate":"2021-06-09T17:17:01.426Z"},{"version":"2019.4.28f1","stream":"LTS","releaseDate":"2021-06-03T17:50:56.439Z"},{"version":"2021.1.10f1","stream":"TECH","releaseDate":"2021-06-03T16:53:09.276Z"},{"version":"2021.2.0a19","stream":"ALPHA","releaseDate":"2021-06-03T15:19:41.987Z"},{"version":"2020.3.11f1","stream":"LTS","releaseDate":"2021-06-01T17:44:03.061Z"},{"version":"2021.1.9f1","stream":"TECH","releaseDate":"2021-05-28T12:13:35.97Z"},{"version":"2020.3.10f1","stream":"LTS","releaseDate":"2021-05-26T18:08:15.246Z"},{"version":"2019.4.27f1","stream":"LTS","releaseDate":"2021-05-20T13:45:43.095Z"},{"version":"2020.3.9f1","stream":"LTS","releaseDate":"2021-05-19T17:45:38.084Z"},{"version":"2021.1.7f1","stream":"TECH","releaseDate":"2021-05-13T14:00:02.535Z"},{"version":"2020.3.8f1","stream":"LTS","releaseDate":"2021-05-12T20:50:34.775Z"},{"version":"2021.2.0a17","stream":"ALPHA","releaseDate":"2021-05-12T18:15:13.437Z"},{"version":"2018.4.35f1","stream":"LTS","releaseDate":"2021-05-12T15:16:04.996Z"},{"version":"2021.1.6f1","stream":"TECH","releaseDate":"2021-05-06T06:42:44.386Z"},{"version":"2019.4.26f1","stream":"LTS","releaseDate":"2021-05-05T18:28:43.028Z"},{"version":"2020.3.7f1","stream":"LTS","releaseDate":"2021-05-05T17:05:58.368Z"},{"version":"2021.2.0a16","stream":"ALPHA","releaseDate":"2021-05-05T15:00:27.234Z"},{"version":"2020.3.6f1","stream":"LTS","releaseDate":"2021-04-28T18:33:45.041Z"},{"version":"2021.2.0a15","stream":"ALPHA","releaseDate":"2021-04-28T16:51:06.522Z"},{"version":"2021.1.5f1","stream":"TECH","releaseDate":"2021-04-28T11:57:22.314Z"},{"version":"2019.4.25f1","stream":"LTS","releaseDate":"2021-04-22T18:56:19.468Z"},{"version":"2021.1.4f1","stream":"TECH","releaseDate":"2021-04-22T08:14:16.919Z"},{"version":"2021.2.0a14","stream":"ALPHA","releaseDate":"2021-04-21T16:58:34.062Z"},{"version":"2020.3.5f1","stream":"LTS","releaseDate":"2021-04-21T15:58:44.831Z"},{"version":"2018.4.34f1","stream":"LTS","releaseDate":"2021-04-15T10:28:39.047Z"},{"version":"2021.2.0a13","stream":"ALPHA","releaseDate":"2021-04-14T16:07:25.935Z"},{"version":"2020.3.4f1","stream":"LTS","releaseDate":"2021-04-13T17:59:16.594Z"},{"version":"2021.1.3f1","stream":"TECH","releaseDate":"2021-04-13T11:23:53.38Z"},{"version":"2019.4.24f1","stream":"LTS","releaseDate":"2021-04-08T23:33:06.909Z"},{"version":"2020.3.3f1","stream":"LTS","releaseDate":"2021-04-07T16:37:40.613Z"},{"version":"2021.1.2f1","stream":"TECH","releaseDate":"2021-04-07T14:35:36.828Z"},{"version":"2021.2.0a12","stream":"ALPHA","releaseDate":"2021-04-06T16:40:54.747Z"},{"version":"2021.2.0a11","stream":"ALPHA","releaseDate":"2021-03-31T17:48:42.977Z"},{"version":"2021.1.1f1","stream":"TECH","releaseDate":"2021-03-31T14:04:08.025Z"},{"version":"2020.3.2f1","stream":"LTS","releaseDate":"2021-03-29T18:24:30.684Z"},{"version":"2021.2.0a10","stream":"ALPHA","releaseDate":"2021-03-24T20:41:29.457Z"},{"version":"2018.4.33f1","stream":"LTS","releaseDate":"2021-03-24T17:48:21.951Z"},{"version":"2019.4.23f1","stream":"LTS","releaseDate":"2021-03-24T16:44:56.561Z"},{"version":"2020.3.1f1","stream":"LTS","releaseDate":"2021-03-22T18:05:51.728Z"},{"version":"2021.1.0f1","stream":"TECH","releaseDate":"2021-03-22T11:13:57.905Z"},{"version":"2021.2.0a9","stream":"ALPHA","releaseDate":"2021-03-17T18:02:06.971Z"},{"version":"2021.1.0b12","stream":"BETA","releaseDate":"2021-03-17T11:21:39.687Z"},{"version":"2020.3.0f1","stream":"LTS","releaseDate":"2021-03-10T23:09:00.019Z"},{"version":"2021.1.0b11","stream":"BETA","releaseDate":"2021-03-10T18:19:22.091Z"},{"version":"2019.4.22f1","stream":"LTS","releaseDate":"2021-03-10T16:07:28.301Z"},{"version":"2021.2.0a8","stream":"ALPHA","releaseDate":"2021-03-09T15:39:33.338Z"},{"version":"2021.1.0b10","stream":"BETA","releaseDate":"2021-03-04T17:23:44.817Z"},{"version":"2020.2.7f1","stream":"LTS","releaseDate":"2021-03-04T16:43:17.817Z"},{"version":"2021.2.0a6","stream":"ALPHA","releaseDate":"2021-02-24T18:59:57.208Z"},{"version":"2021.1.0b8","stream":"BETA","releaseDate":"2021-02-24T17:47:25.506Z"},{"version":"2019.4.21f1","stream":"LTS","releaseDate":"2021-02-24T17:14:33.49Z"},{"version":"2020.2.6f1","stream":"LTS","releaseDate":"2021-02-24T00:10:19.496Z"},{"version":"2020.2.5f1","stream":"LTS","releaseDate":"2021-02-18T23:17:13.017Z"},{"version":"2018.4.32f1","stream":"LTS","releaseDate":"2021-02-18T12:18:22.145Z"},{"version":"2021.2.0a5","stream":"ALPHA","releaseDate":"2021-02-17T16:45:52.404Z"},{"version":"2021.1.0b7","stream":"BETA","releaseDate":"2021-02-17T15:33:40.334Z"},{"version":"2020.2.4f1","stream":"LTS","releaseDate":"2021-02-12T20:14:18.572Z"},{"version":"2019.4.20f1","stream":"LTS","releaseDate":"2021-02-10T17:06:33.684Z"},{"version":"2021.1.0b6","stream":"BETA","releaseDate":"2021-02-10T15:26:16.381Z"},{"version":"2020.2.3f1","stream":"LTS","releaseDate":"2021-02-03T20:51:44.022Z"},{"version":"2021.1.0b5","stream":"BETA","releaseDate":"2021-02-03T11:02:09.257Z"},{"version":"2019.4.19f1","stream":"LTS","releaseDate":"2021-02-01T17:49:54.726Z"},{"version":"2021.1.0b4","stream":"BETA","releaseDate":"2021-01-27T12:14:30.67Z"},{"version":"2018.4.31f1","stream":"LTS","releaseDate":"2021-01-22T14:08:18.401Z"},{"version":"2020.2.2f1","stream":"LTS","releaseDate":"2021-01-21T20:41:55.747Z"},{"version":"2021.1.0b3","stream":"BETA","releaseDate":"2021-01-20T16:49:58.086Z"},{"version":"2021.1.0b2","stream":"BETA","releaseDate":"2021-01-13T15:48:52.769Z"},{"version":"2019.4.18f1","stream":"LTS","releaseDate":"2021-01-13T15:13:41.161Z"},{"version":"2020.2.1f1","stream":"LTS","releaseDate":"2020-12-23T17:32:56.794Z"},{"version":"2021.1.0b1","stream":"BETA","releaseDate":"2020-12-23T15:53:59.255Z"},{"version":"2019.4.17f1","stream":"LTS","releaseDate":"2020-12-22T15:05:02.037Z"},{"version":"2020.2.0f1","stream":"LTS","releaseDate":"2020-12-14T20:24:28.653Z"},{"version":"2021.1.0a9","stream":"ALPHA","releaseDate":"2020-12-11T09:34:06.14Z"},{"version":"2020.1.17f1","stream":"LTS","releaseDate":"2020-12-09T11:39:40.055Z"},{"version":"2020.2.0b14","stream":"BETA","releaseDate":"2020-12-02T17:45:40.026Z"},{"version":"2021.1.0a8","stream":"ALPHA","releaseDate":"2020-12-02T17:15:19.256Z"},{"version":"2019.4.16f1","stream":"LTS","releaseDate":"2020-12-02T16:12:41.344Z"},{"version":"2018.4.30f1","stream":"LTS","releaseDate":"2020-12-01T20:09:28.083Z"},{"version":"2020.1.16f1","stream":"LTS","releaseDate":"2020-12-01T19:04:30.374Z"},{"version":"2021.1.0a7","stream":"ALPHA","releaseDate":"2020-11-25T18:59:24.158Z"},{"version":"2020.2.0b13","stream":"BETA","releaseDate":"2020-11-25T17:57:21.563Z"},{"version":"2020.1.15f1","stream":"LTS","releaseDate":"2020-11-25T11:32:56.247Z"},{"version":"2020.2.0b12","stream":"BETA","releaseDate":"2020-11-19T18:01:22.432Z"},{"version":"2020.1.14f1","stream":"LTS","releaseDate":"2020-11-18T19:08:42.052Z"},{"version":"2019.4.15f1","stream":"LTS","releaseDate":"2020-11-18T18:02:15.055Z"},{"version":"2021.1.0a5","stream":"ALPHA","releaseDate":"2020-11-16T08:29:13.862Z"},{"version":"2021.1.0a6","stream":"ALPHA","releaseDate":"2020-11-12T13:53:12.828Z"},{"version":"2020.2.0b11","stream":"BETA","releaseDate":"2020-11-11T19:36:00.659Z"},{"version":"2018.4.29f1","stream":"LTS","releaseDate":"2020-11-11T10:56:28.809Z"},{"version":"2020.1.13f1","stream":"LTS","releaseDate":"2020-11-11T09:59:32.603Z"},{"version":"2019.4.14f1","stream":"LTS","releaseDate":"2020-11-05T17:37:50.176Z"},{"version":"2020.2.0b10","stream":"BETA","releaseDate":"2020-11-04T17:18:58.393Z"},{"version":"2021.1.0a4","stream":"ALPHA","releaseDate":"2020-11-04T11:36:41.327Z"},{"version":"2020.1.12f1","stream":"LTS","releaseDate":"2020-11-04T11:19:05.134Z"},{"version":"2020.2.0b9","stream":"BETA","releaseDate":"2020-10-28T16:33:57.648Z"},{"version":"2020.1.11f1","stream":"LTS","releaseDate":"2020-10-28T11:19:45.342Z"},{"version":"2020.2.0b8","stream":"BETA","releaseDate":"2020-10-22T15:53:30.161Z"},{"version":"2021.1.0a2","stream":"ALPHA","releaseDate":"2020-10-22T10:37:27.727Z"},{"version":"2019.4.13f1","stream":"LTS","releaseDate":"2020-10-21T14:49:14.4Z"},{"version":"2020.1.10f1","stream":"LTS","releaseDate":"2020-10-21T09:46:16.103Z"},{"version":"2020.2.0b7","stream":"BETA","releaseDate":"2020-10-15T20:12:00.785Z"},{"version":"2020.1.9f1","stream":"LTS","releaseDate":"2020-10-13T17:07:55.642Z"},{"version":"2020.2.0b6","stream":"BETA","releaseDate":"2020-10-08T17:11:41.822Z"},{"version":"2019.4.12f1","stream":"LTS","releaseDate":"2020-10-07T16:30:31.41Z"},{"version":"2020.1.8f1","stream":"LTS","releaseDate":"2020-10-06T10:51:55.487Z"},{"version":"2018.4.28f1","stream":"LTS","releaseDate":"2020-10-06T09:51:51.368Z"},{"version":"2020.2.0b5","stream":"BETA","releaseDate":"2020-10-01T17:28:10.446Z"},{"version":"2020.1.7f1","stream":"LTS","releaseDate":"2020-09-30T09:51:21.006Z"},{"version":"2020.2.0b4","stream":"BETA","releaseDate":"2020-09-28T15:04:05.094Z"},{"version":"2019.4.11f1","stream":"LTS","releaseDate":"2020-09-23T14:50:07.523Z"},{"version":"2020.1.6f1","stream":"LTS","releaseDate":"2020-09-16T10:37:08.418Z"},{"version":"2019.4.10f1","stream":"LTS","releaseDate":"2020-09-10T15:00:59.355Z"},{"version":"2020.1.5f1","stream":"LTS","releaseDate":"2020-09-10T12:29:36.749Z"},{"version":"2020.2.0b2","stream":"BETA","releaseDate":"2020-09-09T17:06:38.902Z"},{"version":"2018.4.27f1","stream":"LTS","releaseDate":"2020-09-09T09:04:26.626Z"},{"version":"2020.2.0b1","stream":"BETA","releaseDate":"2020-09-03T03:50:06.958Z"},{"version":"2020.1.4f1","stream":"LTS","releaseDate":"2020-08-27T13:54:15.261Z"},{"version":"2019.4.9f1","stream":"LTS","releaseDate":"2020-08-26T15:12:20.178Z"},{"version":"2020.1.3f1","stream":"LTS","releaseDate":"2020-08-21T17:25:52.43Z"},{"version":"2020.2.0a21","stream":"ALPHA","releaseDate":"2020-08-20T16:08:48.015Z"},{"version":"2019.4.8f1","stream":"LTS","releaseDate":"2020-08-12T13:18:43.927Z"},{"version":"2018.4.26f1","stream":"LTS","releaseDate":"2020-08-12T11:59:47.812Z"},{"version":"2020.1.2f1","stream":"LTS","releaseDate":"2020-08-12T11:11:53.662Z"},{"version":"2019.4.7f1","stream":"LTS","releaseDate":"2020-08-05T15:02:13.572Z"},{"version":"2020.1.1f1","stream":"LTS","releaseDate":"2020-08-05T09:04:55.163Z"},{"version":"2019.4.6f1","stream":"LTS","releaseDate":"2020-07-30T20:31:02.827Z"},{"version":"2020.2.0a19","stream":"ALPHA","releaseDate":"2020-07-28T17:12:37.126Z"},{"version":"2019.4.5f1","stream":"LTS","releaseDate":"2020-07-23T08:08:58.294Z"},{"version":"2020.1.0f1","stream":"LTS","releaseDate":"2020-07-20T10:15:38.949Z"},{"version":"2020.2.0a18","stream":"ALPHA","releaseDate":"2020-07-15T15:09:32.204Z"},{"version":"2019.4.4f1","stream":"LTS","releaseDate":"2020-07-15T14:33:21.342Z"},{"version":"2018.4.25f1","stream":"LTS","releaseDate":"2020-07-14T15:59:51.172Z"},{"version":"2020.1.0b16","stream":"BETA","releaseDate":"2020-07-14T11:16:19.736Z"},{"version":"2019.4.3f1","stream":"LTS","releaseDate":"2020-07-08T17:17:30.743Z"},{"version":"2020.1.0b15","stream":"BETA","releaseDate":"2020-07-08T13:16:36.144Z"},{"version":"2020.2.0a17","stream":"ALPHA","releaseDate":"2020-07-07T17:13:29.087Z"},{"version":"2018.4.24f1","stream":"LTS","releaseDate":"2020-07-02T12:50:59.969Z"},{"version":"2019.4.2f1","stream":"LTS","releaseDate":"2020-07-01T14:31:49.653Z"},{"version":"2020.2.0a16","stream":"ALPHA","releaseDate":"2020-06-30T17:30:06.405Z"},{"version":"2020.1.0b14","stream":"BETA","releaseDate":"2020-06-30T13:03:30.165Z"},{"version":"2019.4.1f1","stream":"LTS","releaseDate":"2020-06-18T14:26:11.25Z"},{"version":"2020.2.0a15","stream":"ALPHA","releaseDate":"2020-06-16T22:26:34.624Z"},{"version":"2020.1.0b13","stream":"BETA","releaseDate":"2020-06-16T15:13:24.163Z"},{"version":"2020.1.0b12","stream":"BETA","releaseDate":"2020-06-09T15:59:47.841Z"},{"version":"2019.4.0f1","stream":"LTS","releaseDate":"2020-06-07T16:09:39.244Z"},{"version":"2020.1.0b11","stream":"BETA","releaseDate":"2020-06-03T08:04:41.278Z"},{"version":"2020.2.0a13","stream":"ALPHA","releaseDate":"2020-06-02T18:22:41.666Z"},{"version":"2019.3.15f1","stream":"LTS","releaseDate":"2020-05-28T15:28:05.935Z"},{"version":"2020.1.0b10","stream":"BETA","releaseDate":"2020-05-27T15:18:15.761Z"},{"version":"2020.2.0a12","stream":"ALPHA","releaseDate":"2020-05-27T01:46:13.703Z"},{"version":"2020.1.0b9","stream":"BETA","releaseDate":"2020-05-18T19:30:07.616Z"},{"version":"2019.3.14f1","stream":"LTS","releaseDate":"2020-05-18T19:09:15.413Z"},{"version":"2020.2.0a11","stream":"ALPHA","releaseDate":"2020-05-18T17:28:51.358Z"},{"version":"2018.4.23f1","stream":"LTS","releaseDate":"2020-05-18T16:26:44.505Z"},{"version":"2017.4.40f1","stream":"LTS","releaseDate":"2020-05-18T15:54:47.513Z"},{"version":"2019.3.13f1","stream":"LTS","releaseDate":"2020-05-06T16:28:06.431Z"},{"version":"2020.2.0a10","stream":"ALPHA","releaseDate":"2020-05-06T14:34:37.918Z"},{"version":"2020.1.0b8","stream":"BETA","releaseDate":"2020-05-05T16:50:03.104Z"},{"version":"2019.3.12f1","stream":"LTS","releaseDate":"2020-04-29T17:04:13.318Z"},{"version":"2020.2.0a9","stream":"ALPHA","releaseDate":"2020-04-28T13:42:11.975Z"},{"version":"2020.1.0b7","stream":"BETA","releaseDate":"2020-04-28T10:12:51.135Z"},{"version":"2018.4.22f1","stream":"LTS","releaseDate":"2020-04-24T11:56:23.065Z"},{"version":"2020.1.0b6","stream":"BETA","releaseDate":"2020-04-23T21:32:23.418Z"},{"version":"2020.2.0a8","stream":"ALPHA","releaseDate":"2020-04-23T20:39:25.331Z"},{"version":"2019.3.11f1","stream":"LTS","releaseDate":"2020-04-23T20:12:30.91Z"},{"version":"2019.3.10f1","stream":"LTS","releaseDate":"2020-04-16T14:51:49.221Z"},{"version":"2020.2.0a7","stream":"ALPHA","releaseDate":"2020-04-14T14:50:07.557Z"},{"version":"2018.4.21f1","stream":"LTS","releaseDate":"2020-04-09T10:24:27.752Z"},{"version":"2020.1.0b5","stream":"BETA","releaseDate":"2020-04-09T09:02:00.178Z"},{"version":"2019.3.9f1","stream":"LTS","releaseDate":"2020-04-08T17:27:11.233Z"},{"version":"2019.3.8f1","stream":"LTS","releaseDate":"2020-04-06T13:35:43.636Z"},{"version":"2017.4.39f1","stream":"LTS","releaseDate":"2020-04-03T08:51:34.4Z"},{"version":"2020.1.0b4","stream":"BETA","releaseDate":"2020-04-01T09:27:53.068Z"},{"version":"2019.3.7f1","stream":"LTS","releaseDate":"2020-03-26T13:25:09.746Z"},{"version":"2018.4.20f1","stream":"LTS","releaseDate":"2020-03-26T12:30:57.862Z"},{"version":"2020.1.0b3","stream":"BETA","releaseDate":"2020-03-26T08:40:28.937Z"},{"version":"2017.4.38f1","stream":"LTS","releaseDate":"2020-03-20T10:06:20.615Z"},{"version":"2019.3.6f1","stream":"LTS","releaseDate":"2020-03-19T13:48:25.49Z"},{"version":"2020.1.0b2","stream":"BETA","releaseDate":"2020-03-18T11:35:10.189Z"},{"version":"2018.4.19f1","stream":"LTS","releaseDate":"2020-03-13T10:43:07.033Z"},{"version":"2019.3.5f1","stream":"LTS","releaseDate":"2020-03-12T13:37:50.368Z"},{"version":"2020.1.0b1","stream":"BETA","releaseDate":"2020-03-11T12:36:55.598Z"},{"version":"2019.3.4f1","stream":"LTS","releaseDate":"2020-03-06T10:05:37.894Z"},{"version":"2020.1.0a25","stream":"ALPHA","releaseDate":"2020-02-27T12:18:33.968Z"},{"version":"2018.4.18f1","stream":"LTS","releaseDate":"2020-02-27T11:32:09.755Z"},{"version":"2019.3.3f1","stream":"LTS","releaseDate":"2020-02-26T13:41:18.47Z"},{"version":"2020.1.0a24","stream":"ALPHA","releaseDate":"2020-02-21T10:47:26.502Z"},{"version":"2019.3.2f1","stream":"LTS","releaseDate":"2020-02-19T16:29:42.676Z"},{"version":"2017.4.37f1","stream":"LTS","releaseDate":"2020-02-18T16:24:58.609Z"},{"version":"2020.1.0a23","stream":"ALPHA","releaseDate":"2020-02-12T15:20:34.112Z"},{"version":"2019.3.1f1","stream":"LTS","releaseDate":"2020-02-12T13:41:59.019Z"},{"version":"2018.4.17f1","stream":"LTS","releaseDate":"2020-02-11T11:48:12.924Z"},{"version":"2019.2.21f1","stream":"LTS","releaseDate":"2020-02-07T23:29:05.963Z"},{"version":"2020.1.0a22","stream":"ALPHA","releaseDate":"2020-02-05T10:35:10.098Z"},{"version":"2019.2.20f1","stream":"LTS","releaseDate":"2020-01-31T13:52:30.564Z"},{"version":"2020.1.0a21","stream":"ALPHA","releaseDate":"2020-01-30T11:45:07.164Z"},{"version":"2018.4.16f1","stream":"LTS","releaseDate":"2020-01-27T14:58:33.603Z"},{"version":"2019.3.0f6","stream":"LTS","releaseDate":"2020-01-27T12:06:56.575Z"},{"version":"2020.1.0a20","stream":"ALPHA","releaseDate":"2020-01-23T10:37:53.228Z"},{"version":"2019.2.19f1","stream":"LTS","releaseDate":"2020-01-22T19:01:38.023Z"},{"version":"2020.1.0a19","stream":"ALPHA","releaseDate":"2020-01-16T11:54:15.474Z"},{"version":"2019.2.18f1","stream":"LTS","releaseDate":"2020-01-15T23:24:20.651Z"},{"version":"2019.3.0f5","stream":"LTS","releaseDate":"2020-01-13T17:38:10.201Z"},{"version":"2017.4.36f1","stream":"LTS","releaseDate":"2020-01-09T14:49:31.02Z"},{"version":"2018.4.15f1","stream":"LTS","releaseDate":"2020-01-09T14:09:30.059Z"},{"version":"2020.1.0a18","stream":"ALPHA","releaseDate":"2020-01-08T11:28:04.162Z"},{"version":"2020.1.0a17","stream":"ALPHA","releaseDate":"2019-12-19T10:21:05.753Z"},{"version":"2019.2.17f1","stream":"LTS","releaseDate":"2019-12-18T19:20:41.595Z"},{"version":"2019.2.16f1","stream":"LTS","releaseDate":"2019-12-13T18:41:32.658Z"},{"version":"2020.1.0a16","stream":"ALPHA","releaseDate":"2019-12-12T14:47:22.946Z"},{"version":"2019.3.0f3","stream":"LTS","releaseDate":"2019-12-11T20:34:41.701Z"},{"version":"2018.4.14f1","stream":"LTS","releaseDate":"2019-12-10T11:15:45.58Z"},{"version":"2017.4.35f1","stream":"LTS","releaseDate":"2019-12-06T14:49:43.1Z"},{"version":"2020.1.0a15","stream":"ALPHA","releaseDate":"2019-12-06T10:23:44.009Z"},{"version":"2019.2.15f1","stream":"LTS","releaseDate":"2019-12-04T19:50:05.071Z"},{"version":"2019.2.14f1","stream":"LTS","releaseDate":"2019-11-27T18:40:20.135Z"},{"version":"2019.3.0f1","stream":"LTS","releaseDate":"2019-11-27T16:46:18.692Z"},{"version":"2019.3.0b12","stream":"BETA","releaseDate":"2019-11-21T20:46:51.96Z"},{"version":"2020.1.0a14","stream":"ALPHA","releaseDate":"2019-11-21T17:18:32.557Z"},{"version":"2018.4.13f1","stream":"LTS","releaseDate":"2019-11-21T15:42:03.544Z"},{"version":"2019.2.13f1","stream":"LTS","releaseDate":"2019-11-20T17:22:07.155Z"},{"version":"2020.1.0a13","stream":"ALPHA","releaseDate":"2019-11-15T12:47:40.557Z"},{"version":"2019.3.0b11","stream":"BETA","releaseDate":"2019-11-14T21:50:47.112Z"},{"version":"2019.2.12f1","stream":"LTS","releaseDate":"2019-11-11T18:38:24.9Z"},{"version":"2020.1.0a12","stream":"ALPHA","releaseDate":"2019-11-08T10:46:31.252Z"},{"version":"2019.3.0b10","stream":"BETA","releaseDate":"2019-11-06T17:42:42.164Z"},{"version":"2019.3.0b9","stream":"BETA","releaseDate":"2019-11-01T16:37:43.062Z"},{"version":"2019.2.11f1","stream":"LTS","releaseDate":"2019-11-01T12:01:07.474Z"},{"version":"2020.1.0a11","stream":"ALPHA","releaseDate":"2019-10-31T16:32:46.552Z"},{"version":"2017.4.34f1","stream":"LTS","releaseDate":"2019-10-30T17:20:05.481Z"},{"version":"2018.4.12f1","stream":"LTS","releaseDate":"2019-10-28T11:35:32.884Z"},{"version":"2019.2.10f1","stream":"LTS","releaseDate":"2019-10-23T21:46:43.575Z"},{"version":"2019.3.0b8","stream":"BETA","releaseDate":"2019-10-23T17:20:42.499Z"},{"version":"2020.1.0a9","stream":"ALPHA","releaseDate":"2019-10-17T10:21:00.053Z"},{"version":"2019.3.0b7","stream":"BETA","releaseDate":"2019-10-14T17:32:52.898Z"},{"version":"2019.2.9f1","stream":"LTS","releaseDate":"2019-10-11T18:05:30.452Z"},{"version":"2018.4.11f1","stream":"LTS","releaseDate":"2019-10-10T13:08:52.311Z"},{"version":"2020.1.0a8","stream":"ALPHA","releaseDate":"2019-10-10T09:24:32.063Z"},{"version":"2017.4.33f1","stream":"LTS","releaseDate":"2019-10-07T08:27:32.743Z"},{"version":"2019.3.0b6","stream":"BETA","releaseDate":"2019-10-04T16:50:37.447Z"},{"version":"2019.2.8f1","stream":"LTS","releaseDate":"2019-10-03T22:11:03.839Z"},{"version":"2020.1.0a7","stream":"ALPHA","releaseDate":"2019-10-01T16:22:34.376Z"},{"version":"2018.4.10f1","stream":"LTS","releaseDate":"2019-10-01T12:06:54.816Z"},{"version":"2019.2.7f2","stream":"LTS","releaseDate":"2019-09-30T18:04:28.712Z"},{"version":"2019.3.0b5","stream":"BETA","releaseDate":"2019-09-30T14:32:45.431Z"},{"version":"2020.1.0a5","stream":"ALPHA","releaseDate":"2019-09-25T14:28:57.747Z"},{"version":"2019.3.0b4","stream":"BETA","releaseDate":"2019-09-20T15:43:52.375Z"},{"version":"2019.2.6f1","stream":"LTS","releaseDate":"2019-09-17T19:29:14.52Z"},{"version":"2018.4.9f1","stream":"LTS","releaseDate":"2019-09-13T12:05:02.297Z"},{"version":"2019.2.5f1","stream":"LTS","releaseDate":"2019-09-12T15:37:27.548Z"},{"version":"2019.3.0b3","stream":"BETA","releaseDate":"2019-09-10T16:31:30.365Z"},{"version":"2019.3.0b2","stream":"BETA","releaseDate":"2019-09-06T17:16:21.53Z"},{"version":"2020.1.0a3","stream":"ALPHA","releaseDate":"2019-09-05T15:08:44.256Z"},{"version":"2019.2.4f1","stream":"LTS","releaseDate":"2019-09-05T14:17:26.668Z"},{"version":"2017.4.32f1","stream":"LTS","releaseDate":"2019-09-05T11:50:38.862Z"},{"version":"2018.4.8f1","stream":"LTS","releaseDate":"2019-08-30T09:24:35.891Z"},{"version":"2019.2.3f1","stream":"LTS","releaseDate":"2019-08-28T12:57:33.717Z"},{"version":"2019.3.0b1","stream":"BETA","releaseDate":"2019-08-26T15:03:03.449Z"},{"version":"2019.2.2f1","stream":"LTS","releaseDate":"2019-08-21T10:42:41.115Z"},{"version":"2018.4.7f1","stream":"LTS","releaseDate":"2019-08-19T10:07:37.594Z"},{"version":"2019.2.1f1","stream":"LTS","releaseDate":"2019-08-14T14:28:59.019Z"},{"version":"2019.3.0a12","stream":"ALPHA","releaseDate":"2019-08-13T14:24:35.256Z"},{"version":"2018.4.6f1","stream":"LTS","releaseDate":"2019-08-08T09:30:29.839Z"},{"version":"2019.1.14f1","stream":"LTS","releaseDate":"2019-08-08T09:01:21.726Z"},{"version":"2017.4.31f1","stream":"LTS","releaseDate":"2019-08-02T10:02:34.064Z"},{"version":"2019.1.13f1","stream":"LTS","releaseDate":"2019-08-01T11:12:43.951Z"},{"version":"2019.3.0a11","stream":"ALPHA","releaseDate":"2019-07-31T18:32:46.987Z"},{"version":"2019.2.0f1","stream":"LTS","releaseDate":"2019-07-29T10:48:07.134Z"},{"version":"2019.1.12f1","stream":"LTS","releaseDate":"2019-07-26T13:28:16.083Z"},{"version":"2018.4.5f1","stream":"LTS","releaseDate":"2019-07-26T11:33:58.831Z"},{"version":"2019.3.0a10","stream":"ALPHA","releaseDate":"2019-07-22T18:03:08.983Z"},{"version":"2019.2.0b10","stream":"BETA","releaseDate":"2019-07-18T15:39:34.132Z"},{"version":"2019.1.11f1","stream":"LTS","releaseDate":"2019-07-18T12:29:11.337Z"},{"version":"2018.4.4f1","stream":"LTS","releaseDate":"2019-07-12T16:20:22.902Z"},{"version":"2019.1.10f1","stream":"LTS","releaseDate":"2019-07-12T15:54:54.003Z"},{"version":"2019.2.0b9","stream":"BETA","releaseDate":"2019-07-11T18:56:49.631Z"},{"version":"2017.4.30f1","stream":"LTS","releaseDate":"2019-07-05T14:27:47.061Z"},{"version":"2019.1.9f1","stream":"LTS","releaseDate":"2019-07-05T11:47:29.641Z"},{"version":"2019.3.0a8","stream":"ALPHA","releaseDate":"2019-07-03T17:30:44.98Z"},{"version":"2018.4.3f1","stream":"LTS","releaseDate":"2019-06-28T13:03:41.367Z"},{"version":"2019.3.0a7","stream":"ALPHA","releaseDate":"2019-06-26T17:12:40.683Z"},{"version":"2019.2.0b7","stream":"BETA","releaseDate":"2019-06-25T20:47:11.254Z"},{"version":"2019.1.8f1","stream":"LTS","releaseDate":"2019-06-22T08:48:33.79Z"},{"version":"2019.3.0a6","stream":"ALPHA","releaseDate":"2019-06-19T03:02:44.009Z"},{"version":"2019.1.7f1","stream":"LTS","releaseDate":"2019-06-14T15:44:01.613Z"},{"version":"2019.2.0b6","stream":"BETA","releaseDate":"2019-06-12T09:40:00.788Z"},{"version":"2017.4.29f1","stream":"LTS","releaseDate":"2019-06-08T19:03:51.252Z"},{"version":"2018.4.2f1","stream":"LTS","releaseDate":"2019-06-08T18:07:32.046Z"},{"version":"2019.1.6f1","stream":"LTS","releaseDate":"2019-06-08T16:58:35.535Z"},{"version":"2019.3.0a5","stream":"ALPHA","releaseDate":"2019-06-06T12:22:57.562Z"},{"version":"2019.2.0b5","stream":"BETA","releaseDate":"2019-06-05T14:32:16.273Z"},{"version":"2019.1.5f1","stream":"LTS","releaseDate":"2019-06-03T11:40:25.501Z"},{"version":"2017.4.28f1","stream":"LTS","releaseDate":"2019-05-30T17:27:14.681Z"},{"version":"2019.3.0a4","stream":"ALPHA","releaseDate":"2019-05-30T14:15:42.707Z"},{"version":"2019.2.0b4","stream":"BETA","releaseDate":"2019-05-29T17:12:13.245Z"},{"version":"2018.4.1f1","stream":"LTS","releaseDate":"2019-05-28T16:24:03.858Z"},{"version":"2019.1.4f1","stream":"LTS","releaseDate":"2019-05-24T17:57:10.778Z"},{"version":"2019.2.0b3","stream":"BETA","releaseDate":"2019-05-22T14:03:19.445Z"},{"version":"2019.3.0a3","stream":"ALPHA","releaseDate":"2019-05-22T11:46:55.055Z"},{"version":"2019.1.3f1","stream":"LTS","releaseDate":"2019-05-16T14:47:53.826Z"},{"version":"2019.2.0b2","stream":"BETA","releaseDate":"2019-05-15T15:44:17.759Z"},{"version":"2019.3.0a2","stream":"ALPHA","releaseDate":"2019-05-10T20:36:39.254Z"},{"version":"2019.1.2f1","stream":"LTS","releaseDate":"2019-05-10T15:59:18.52Z"},{"version":"2017.4.27f1","stream":"LTS","releaseDate":"2019-05-10T13:21:41.135Z"},{"version":"2018.4.0f1","stream":"LTS","releaseDate":"2019-05-10T11:43:31.421Z"},{"version":"2019.2.0b1","stream":"BETA","releaseDate":"2019-05-09T09:44:58.351Z"},{"version":"2019.1.1f1","stream":"LTS","releaseDate":"2019-05-03T14:43:43.597Z"},{"version":"2019.2.0a14","stream":"ALPHA","releaseDate":"2019-05-01T17:59:12.688Z"},{"version":"2018.3.14f1","stream":"LTS","releaseDate":"2019-04-26T11:50:27.045Z"},{"version":"2019.2.0a13","stream":"ALPHA","releaseDate":"2019-04-24T17:50:21.067Z"},{"version":"2017.4.26f1","stream":"LTS","releaseDate":"2019-04-23T09:36:49.591Z"},{"version":"2018.3.13f1","stream":"LTS","releaseDate":"2019-04-18T09:14:47.695Z"},{"version":"2019.1.0f2","stream":"LTS","releaseDate":"2019-04-15T13:28:01.444Z"},{"version":"2019.2.0a11","stream":"ALPHA","releaseDate":"2019-04-11T16:48:43.184Z"},{"version":"2019.1.0f1","stream":"LTS","releaseDate":"2019-04-08T18:51:36.408Z"},{"version":"2018.3.12f1","stream":"LTS","releaseDate":"2019-04-08T14:36:53.346Z"},{"version":"2017.4.25f1","stream":"LTS","releaseDate":"2019-04-08T13:39:05.191Z"},{"version":"2019.1.0b10","stream":"BETA","releaseDate":"2019-04-03T14:15:22.385Z"},{"version":"2018.3.11f1","stream":"LTS","releaseDate":"2019-03-29T12:15:27.935Z"},{"version":"2019.1.0b9","stream":"BETA","releaseDate":"2019-03-26T16:57:04.847Z"},{"version":"2018.3.10f1","stream":"LTS","releaseDate":"2019-03-25T17:27:03.035Z"},{"version":"2017.4.24f1","stream":"LTS","releaseDate":"2019-03-22T09:39:13.667Z"},{"version":"2019.2.0a9","stream":"ALPHA","releaseDate":"2019-03-20T15:45:22.309Z"},{"version":"2019.1.0b8","stream":"BETA","releaseDate":"2019-03-18T17:17:39.093Z"},{"version":"2018.3.9f1","stream":"LTS","releaseDate":"2019-03-18T12:14:09.612Z"},{"version":"2019.1.0b7","stream":"BETA","releaseDate":"2019-03-13T16:10:13.39Z"},{"version":"2019.2.0a8","stream":"ALPHA","releaseDate":"2019-03-13T14:22:24.924Z"},{"version":"2017.4.23f1","stream":"LTS","releaseDate":"2019-03-08T17:28:16.467Z"},{"version":"2019.1.0b6","stream":"BETA","releaseDate":"2019-03-08T16:41:08.133Z"},{"version":"2018.3.8f1","stream":"LTS","releaseDate":"2019-03-08T16:15:08.806Z"},{"version":"2019.2.0a7","stream":"ALPHA","releaseDate":"2019-03-04T13:52:19.71Z"},{"version":"2019.1.0b5","stream":"BETA","releaseDate":"2019-03-01T16:44:15.408Z"},{"version":"5.6.7f1","stream":"LTS","releaseDate":"2019-02-28T18:35:23.895Z"},{"version":"2018.2.21f1","stream":"LTS","releaseDate":"2019-02-28T17:57:55.345Z"},{"version":"2017.4.22f1","stream":"LTS","releaseDate":"2019-02-28T17:01:39.756Z"},{"version":"2018.3.7f1","stream":"LTS","releaseDate":"2019-02-28T16:07:09.189Z"},{"version":"2019.2.0a6","stream":"ALPHA","releaseDate":"2019-02-27T07:50:11.087Z"},{"version":"2017.4.21f1","stream":"LTS","releaseDate":"2019-02-21T15:15:49.214Z"},{"version":"2019.1.0b4","stream":"BETA","releaseDate":"2019-02-19T16:30:33.254Z"},{"version":"2018.3.6f1","stream":"LTS","releaseDate":"2019-02-15T16:45:14.684Z"},{"version":"2019.1.0b3","stream":"BETA","releaseDate":"2019-02-11T15:22:34.464Z"},{"version":"2017.4.20f2","stream":"LTS","releaseDate":"2019-02-11T10:07:10.811Z"},{"version":"2018.3.5f1","stream":"LTS","releaseDate":"2019-02-08T15:27:29.379Z"},{"version":"2019.2.0a4","stream":"ALPHA","releaseDate":"2019-02-06T14:46:04.41Z"},{"version":"2019.1.0b2","stream":"BETA","releaseDate":"2019-02-04T13:55:05.8Z"},{"version":"2018.3.4f1","stream":"LTS","releaseDate":"2019-02-01T16:49:54.517Z"},{"version":"2019.1.0b1","stream":"BETA","releaseDate":"2019-01-28T15:21:41.622Z"},{"version":"2017.4.19f1","stream":"LTS","releaseDate":"2019-01-28T14:49:20.963Z"},{"version":"2018.3.3f1","stream":"LTS","releaseDate":"2019-01-25T14:37:01.862Z"},{"version":"2018.3.2f1","stream":"LTS","releaseDate":"2019-01-17T09:18:26.546Z"},{"version":"2019.1.0a14","stream":"ALPHA","releaseDate":"2019-01-15T18:45:50.054Z"},{"version":"2018.3.1f1","stream":"LTS","releaseDate":"2019-01-10T12:42:52.538Z"},{"version":"2017.4.18f1","stream":"LTS","releaseDate":"2019-01-10T11:37:33.909Z"},{"version":"2019.1.0a13","stream":"ALPHA","releaseDate":"2019-01-03T01:39:26.479Z"},{"version":"2019.1.0a12","stream":"ALPHA","releaseDate":"2018-12-14T18:20:29.279Z"},{"version":"2018.2.20f1","stream":"LTS","releaseDate":"2018-12-14T11:15:42.947Z"},{"version":"2018.3.0f2","stream":"LTS","releaseDate":"2018-12-12T12:02:30.555Z"},{"version":"2018.3.0f1","stream":"LTS","releaseDate":"2018-12-11T15:41:14.382Z"},{"version":"2017.2.5f1","stream":"LTS","releaseDate":"2018-12-07T18:04:37.579Z"},{"version":"2018.2.19f1","stream":"LTS","releaseDate":"2018-12-07T16:44:08.592Z"},{"version":"2017.4.17f1","stream":"LTS","releaseDate":"2018-12-07T15:51:37.308Z"},{"version":"2019.1.0a11","stream":"ALPHA","releaseDate":"2018-12-04T20:58:06.128Z"},{"version":"2018.2.18f1","stream":"LTS","releaseDate":"2018-11-30T15:10:33.273Z"},{"version":"2018.3.0b12","stream":"BETA","releaseDate":"2018-11-28T12:03:56.216Z"},{"version":"2019.1.0a10","stream":"ALPHA","releaseDate":"2018-11-23T16:56:21.743Z"},{"version":"2017.4.16f1","stream":"LTS","releaseDate":"2018-11-23T10:14:00.455Z"},{"version":"2018.2.17f1","stream":"LTS","releaseDate":"2018-11-21T15:28:51.618Z"},{"version":"2018.3.0b11","stream":"BETA","releaseDate":"2018-11-21T13:58:06.343Z"},{"version":"2017.2.4p1","stream":"TECH","releaseDate":"2018-11-16T10:22:37.674Z"},{"version":"2018.2.16f1","stream":"LTS","releaseDate":"2018-11-15T11:01:20.605Z"},{"version":"2019.1.0a9","stream":"ALPHA","releaseDate":"2018-11-14T16:08:29.504Z"},{"version":"2018.3.0b10","stream":"BETA","releaseDate":"2018-11-14T13:35:56.456Z"},{"version":"2017.4.15f1","stream":"LTS","releaseDate":"2018-11-12T14:08:59.607Z"},{"version":"2018.2.15f1","stream":"LTS","releaseDate":"2018-11-09T10:10:19.078Z"},{"version":"2018.3.0b9","stream":"BETA","releaseDate":"2018-11-07T11:26:23.779Z"},{"version":"2019.1.0a8","stream":"ALPHA","releaseDate":"2018-11-06T23:07:14.781Z"},{"version":"2019.1.0a7","stream":"ALPHA","releaseDate":"2018-10-31T16:36:10.741Z"},{"version":"2018.3.0b8","stream":"BETA","releaseDate":"2018-10-31T10:43:25.542Z"},{"version":"2018.2.14f1","stream":"LTS","releaseDate":"2018-10-26T15:36:58.385Z"},{"version":"2017.4.14f1","stream":"LTS","releaseDate":"2018-10-26T11:46:14.967Z"},{"version":"2018.3.0b7","stream":"BETA","releaseDate":"2018-10-24T09:18:44.743Z"},{"version":"2018.2.13f1","stream":"LTS","releaseDate":"2018-10-18T10:04:17.744Z"},{"version":"2018.3.0b6","stream":"BETA","releaseDate":"2018-10-18T07:28:58.765Z"},{"version":"2018.2.12f1","stream":"LTS","releaseDate":"2018-10-12T14:40:28.955Z"},{"version":"2017.4.13f1","stream":"LTS","releaseDate":"2018-10-12T12:12:23.499Z"},{"version":"2018.3.0b5","stream":"BETA","releaseDate":"2018-10-10T08:17:14.48Z"},{"version":"2018.2.11f1","stream":"LTS","releaseDate":"2018-10-04T10:36:18.263Z"},{"version":"2018.3.0b4","stream":"BETA","releaseDate":"2018-10-03T11:09:35.425Z"},{"version":"2017.2.4f1","stream":"LTS","releaseDate":"2018-10-03T10:10:22.697Z"},{"version":"2017.4.12f1","stream":"LTS","releaseDate":"2018-09-27T10:54:38.666Z"},{"version":"2018.2.10f1","stream":"LTS","releaseDate":"2018-09-26T14:32:56.446Z"},{"version":"2018.3.0b3","stream":"BETA","releaseDate":"2018-09-26T13:21:30.939Z"},{"version":"2018.2.9f1","stream":"LTS","releaseDate":"2018-09-21T12:47:59.578Z"},{"version":"2018.3.0b2","stream":"BETA","releaseDate":"2018-09-20T09:44:45.621Z"},{"version":"2018.2.8f1","stream":"LTS","releaseDate":"2018-09-14T10:03:11.163Z"},{"version":"2017.4.11f1","stream":"LTS","releaseDate":"2018-09-13T09:35:24.146Z"},{"version":"2018.3.0b1","stream":"BETA","releaseDate":"2018-09-11T13:07:05.27Z"},{"version":"2018.2.7f1","stream":"LTS","releaseDate":"2018-09-06T16:34:51.171Z"},{"version":"2018.2.6f1","stream":"LTS","releaseDate":"2018-08-30T11:26:23.289Z"},{"version":"2017.2.3p4","stream":"TECH","releaseDate":"2018-08-29T13:24:14.637Z"},{"version":"2018.1.9f2","stream":"LTS","releaseDate":"2018-08-29T10:25:53.036Z"},{"version":"2017.4.10f1","stream":"LTS","releaseDate":"2018-08-24T13:44:21.526Z"},{"version":"2018.2.5f1","stream":"LTS","releaseDate":"2018-08-22T15:12:22.79Z"},{"version":"2018.2.4f1","stream":"LTS","releaseDate":"2018-08-17T14:17:08.695Z"},{"version":"2018.2.3f1","stream":"LTS","releaseDate":"2018-08-10T16:45:34.078Z"},{"version":"2017.4.9f1","stream":"LTS","releaseDate":"2018-08-10T14:27:28.131Z"},{"version":"2017.2.3p3","stream":"TECH","releaseDate":"2018-08-03T14:58:35.317Z"},{"version":"2018.2.2f1","stream":"LTS","releaseDate":"2018-08-03T13:32:08.878Z"},{"version":"2017.4.8f1","stream":"LTS","releaseDate":"2018-07-26T11:30:32.443Z"},{"version":"2018.2.1f1","stream":"LTS","releaseDate":"2018-07-26T10:43:51.519Z"},{"version":"2017.1.5f1","stream":"LTS","releaseDate":"2018-07-23T16:24:20.275Z"},{"version":"2018.1.8f1","stream":"LTS","releaseDate":"2018-07-13T13:52:59.791Z"},{"version":"2017.4.7f1","stream":"LTS","releaseDate":"2018-07-13T10:22:49.092Z"},{"version":"2018.2.0f2","stream":"LTS","releaseDate":"2018-07-09T16:46:12.134Z"},{"version":"2018.2.0f1","stream":"LTS","releaseDate":"2018-07-06T15:20:59.9Z"},{"version":"2017.2.3p2","stream":"TECH","releaseDate":"2018-07-05T14:38:35.927Z"},{"version":"2018.1.7f1","stream":"LTS","releaseDate":"2018-07-05T14:17:37.546Z"},{"version":"2018.2.0b11","stream":"BETA","releaseDate":"2018-07-03T13:34:59.156Z"},{"version":"2018.2.0b10","stream":"BETA","releaseDate":"2018-06-26T13:53:45.043Z"},{"version":"2017.4.6f1","stream":"LTS","releaseDate":"2018-06-22T08:23:54.219Z"},{"version":"2018.1.6f1","stream":"LTS","releaseDate":"2018-06-21T15:02:57.356Z"},{"version":"2017.1.4p2","stream":"TECH","releaseDate":"2018-06-20T09:46:38.07Z"},{"version":"2018.2.0b9","stream":"BETA","releaseDate":"2018-06-19T13:54:09.066Z"},{"version":"2018.1.5f1","stream":"LTS","releaseDate":"2018-06-15T12:35:07.622Z"},{"version":"2018.2.0b8","stream":"BETA","releaseDate":"2018-06-13T13:54:30.171Z"},{"version":"2017.1.4p1","stream":"TECH","releaseDate":"2018-06-13T13:31:38.393Z"},{"version":"2018.1.4f1","stream":"LTS","releaseDate":"2018-06-11T14:59:27.426Z"},{"version":"2017.4.5f1","stream":"LTS","releaseDate":"2018-06-07T09:24:13.11Z"},{"version":"2018.2.0b7","stream":"BETA","releaseDate":"2018-06-06T17:13:56.25Z"},{"version":"2018.1.3f1","stream":"LTS","releaseDate":"2018-06-04T09:52:38.309Z"},{"version":"2017.2.3p1","stream":"TECH","releaseDate":"2018-05-31T10:04:31.746Z"},{"version":"2018.2.0b6","stream":"BETA","releaseDate":"2018-05-29T14:49:22.168Z"},{"version":"2018.1.2f1","stream":"LTS","releaseDate":"2018-05-25T15:39:42.936Z"},{"version":"2018.2.0b5","stream":"BETA","releaseDate":"2018-05-24T07:21:44.102Z"},{"version":"2017.1.4f1","stream":"LTS","releaseDate":"2018-05-23T15:53:36.991Z"},{"version":"2017.4.4f1","stream":"LTS","releaseDate":"2018-05-23T15:20:18.873Z"},{"version":"2017.2.3f1","stream":"LTS","releaseDate":"2018-05-18T13:26:34.763Z"},{"version":"2018.1.1f1","stream":"LTS","releaseDate":"2018-05-18T09:56:06.072Z"},{"version":"2018.2.0b4","stream":"BETA","releaseDate":"2018-05-11T19:14:37.677Z"},{"version":"2017.4.3f1","stream":"LTS","releaseDate":"2018-05-11T14:44:04.818Z"},{"version":"5.6.6f2","stream":"LTS","releaseDate":"2018-05-08T09:03:55.479Z"},{"version":"2017.1.3p4","stream":"TECH","releaseDate":"2018-05-06T10:03:23.748Z"},{"version":"2018.2.0b3","stream":"BETA","releaseDate":"2018-05-04T00:29:00.783Z"},{"version":"2018.1.0f2","stream":"LTS","releaseDate":"2018-05-02T09:32:53.181Z"},{"version":"2017.4.2f2","stream":"LTS","releaseDate":"2018-04-30T09:57:20.774Z"},{"version":"2017.2.2p4","stream":"TECH","releaseDate":"2018-04-27T08:09:34.659Z"},{"version":"2018.1.0f1","stream":"LTS","releaseDate":"2018-04-26T14:34:43.932Z"},{"version":"2018.2.0b2","stream":"BETA","releaseDate":"2018-04-25T15:46:41.702Z"},{"version":"2018.2.0b1","stream":"BETA","releaseDate":"2018-04-18T01:14:08.21Z"},{"version":"2017.4.1f1","stream":"LTS","releaseDate":"2018-04-12T12:46:45.437Z"},{"version":"5.6.5p4","stream":"TECH","releaseDate":"2018-04-12T10:47:59.717Z"},{"version":"2017.1.3p3","stream":"TECH","releaseDate":"2018-04-06T10:32:38.635Z"},{"version":"2017.2.2p3","stream":"TECH","releaseDate":"2018-04-05T10:16:10.263Z"},{"version":"2018.1.0b13","stream":"BETA","releaseDate":"2018-03-30T10:12:24.922Z"},{"version":"2017.2.2p2","stream":"TECH","releaseDate":"2018-03-23T13:33:23.076Z"},{"version":"2018.1.0b12","stream":"BETA","releaseDate":"2018-03-23T08:03:45.342Z"},{"version":"2017.4.0f1","stream":"LTS","releaseDate":"2018-03-19T11:40:15.833Z"},{"version":"2018.1.0b11","stream":"BETA","releaseDate":"2018-03-16T13:01:57.652Z"},{"version":"5.6.5p3","stream":"TECH","releaseDate":"2018-03-16T09:45:19.363Z"},{"version":"2017.3.1p4","stream":"TECH","releaseDate":"2018-03-13T11:06:06.216Z"},{"version":"2017.2.2p1","stream":"TECH","releaseDate":"2018-03-09T15:01:16.687Z"},{"version":"2018.1.0b10","stream":"BETA","releaseDate":"2018-03-08T15:30:14.498Z"},{"version":"2017.3.1p3","stream":"TECH","releaseDate":"2018-03-06T13:00:52.238Z"},{"version":"2017.1.3p2","stream":"TECH","releaseDate":"2018-03-02T11:14:31.123Z"},{"version":"2018.1.0b9","stream":"BETA","releaseDate":"2018-02-27T20:03:39.092Z"},{"version":"2017.3.1p2","stream":"TECH","releaseDate":"2018-02-26T11:20:31.229Z"},{"version":"2017.2.2f1","stream":"LTS","releaseDate":"2018-02-26T10:56:15.298Z"},{"version":"2018.1.0b8","stream":"BETA","releaseDate":"2018-02-20T23:19:54.456Z"},{"version":"5.6.5p2","stream":"TECH","releaseDate":"2018-02-15T10:54:22.592Z"},{"version":"2017.3.1p1","stream":"TECH","releaseDate":"2018-02-14T16:32:07.563Z"},{"version":"2018.1.0b7","stream":"BETA","releaseDate":"2018-02-14T11:12:33.84Z"},{"version":"2017.2.1p4","stream":"TECH","releaseDate":"2018-02-12T13:46:02.925Z"},{"version":"2018.1.0b6","stream":"BETA","releaseDate":"2018-02-07T23:26:06.828Z"},{"version":"2017.3.1f1","stream":"LTS","releaseDate":"2018-02-05T15:31:22.383Z"},{"version":"2017.1.3p1","stream":"TECH","releaseDate":"2018-02-02T16:03:25.943Z"},{"version":"2018.1.0b5","stream":"BETA","releaseDate":"2018-01-31T12:56:51.085Z"},{"version":"2017.2.1p3","stream":"TECH","releaseDate":"2018-01-30T16:14:38.479Z"},{"version":"2017.3.0p4","stream":"TECH","releaseDate":"2018-01-29T12:43:13.44Z"},{"version":"2018.1.0b4","stream":"BETA","releaseDate":"2018-01-22T19:10:28.089Z"},{"version":"5.6.5p1","stream":"TECH","releaseDate":"2018-01-22T10:15:55.22Z"},{"version":"2017.3.0p3","stream":"TECH","releaseDate":"2018-01-18T16:39:06.631Z"},{"version":"2018.1.0b3","stream":"BETA","releaseDate":"2018-01-17T12:06:15.898Z"},{"version":"2017.3.0p2","stream":"TECH","releaseDate":"2018-01-12T18:16:05.847Z"},{"version":"5.5.6f1","stream":"LTS","releaseDate":"2018-01-12T17:52:32.094Z"},{"version":"2017.2.1p2","stream":"TECH","releaseDate":"2018-01-12T10:39:16.706Z"},{"version":"2018.1.0b2","stream":"BETA","releaseDate":"2018-01-09T15:44:00.845Z"},{"version":"2017.1.3f1","stream":"LTS","releaseDate":"2018-01-04T17:14:40.655Z"},{"version":"2017.3.0p1","stream":"TECH","releaseDate":"2017-12-22T11:42:56.17Z"},{"version":"5.6.5f1","stream":"LTS","releaseDate":"2017-12-21T11:08:15.313Z"},{"version":"2017.2.1p1","stream":"TECH","releaseDate":"2017-12-20T13:53:25.025Z"},{"version":"2017.3.0f3","stream":"LTS","releaseDate":"2017-12-18T16:24:06.352Z"},{"version":"2017.2.1f1","stream":"LTS","releaseDate":"2017-12-11T15:44:05.803Z"},{"version":"2017.3.0f2","stream":"LTS","releaseDate":"2017-12-08T16:45:52.244Z"},{"version":"2017.1.2p4","stream":"TECH","releaseDate":"2017-12-08T15:51:33.874Z"},{"version":"5.6.4p4","stream":"TECH","releaseDate":"2017-12-07T12:26:50.54Z"},{"version":"2017.2.0p4","stream":"TECH","releaseDate":"2017-12-04T10:45:02.991Z"},{"version":"2017.3.0f1","stream":"LTS","releaseDate":"2017-12-01T18:31:55.923Z"},{"version":"5.5.5p2","stream":"TECH","releaseDate":"2017-11-28T16:57:54.61Z"},{"version":"2017.3.0b11","stream":"BETA","releaseDate":"2017-11-28T15:29:29.286Z"},{"version":"2017.2.0p3","stream":"TECH","releaseDate":"2017-11-27T13:27:46.218Z"},{"version":"2017.1.2p3","stream":"TECH","releaseDate":"2017-11-21T15:57:28.21Z"},{"version":"2017.3.0b10","stream":"BETA","releaseDate":"2017-11-20T15:18:14.574Z"},{"version":"5.6.4p3","stream":"TECH","releaseDate":"2017-11-20T13:49:56.763Z"},{"version":"2017.2.0p2","stream":"TECH","releaseDate":"2017-11-15T14:24:53.185Z"},{"version":"5.6.4p2","stream":"TECH","releaseDate":"2017-11-12T19:00:26.687Z"},{"version":"2017.3.0b9","stream":"BETA","releaseDate":"2017-11-10T17:33:11.854Z"},{"version":"2017.2.0p1","stream":"TECH","releaseDate":"2017-11-06T17:18:19.496Z"},{"version":"2017.3.0b8","stream":"BETA","releaseDate":"2017-11-03T15:21:00.754Z"},{"version":"2017.3.0b7","stream":"BETA","releaseDate":"2017-10-31T15:40:56.235Z"},{"version":"2017.1.2p2","stream":"TECH","releaseDate":"2017-10-27T11:03:41.029Z"},{"version":"2017.3.0b6","stream":"BETA","releaseDate":"2017-10-24T16:13:05.044Z"},{"version":"5.6.4p1","stream":"TECH","releaseDate":"2017-10-20T08:55:09.428Z"},{"version":"2017.3.0b5","stream":"BETA","releaseDate":"2017-10-17T14:14:21.23Z"},{"version":"5.6.4f1","stream":"LTS","releaseDate":"2017-10-15T21:45:41.61Z"},{"version":"5.5.5p1","stream":"TECH","releaseDate":"2017-10-13T15:41:22.604Z"},{"version":"2017.1.2p1","stream":"TECH","releaseDate":"2017-10-13T14:36:45.03Z"},{"version":"2017.2.0f3","stream":"LTS","releaseDate":"2017-10-11T17:12:25.471Z"},{"version":"2017.1.1p4","stream":"TECH","releaseDate":"2017-10-10T22:24:40.459Z"},{"version":"2017.3.0b4","stream":"BETA","releaseDate":"2017-10-10T15:09:12.877Z"},{"version":"2017.1.2f1","stream":"LTS","releaseDate":"2017-10-06T12:44:00.57Z"},{"version":"2017.3.0b3","stream":"BETA","releaseDate":"2017-10-05T14:33:00.365Z"},{"version":"5.5.5f1","stream":"LTS","releaseDate":"2017-10-03T18:12:06.132Z"},{"version":"2017.2.0f2","stream":"LTS","releaseDate":"2017-10-02T17:53:40.396Z"},{"version":"2017.3.0b2","stream":"BETA","releaseDate":"2017-09-26T14:46:30.171Z"},{"version":"2017.1.1p3","stream":"TECH","releaseDate":"2017-09-22T16:41:25.511Z"},{"version":"2017.2.0f1","stream":"LTS","releaseDate":"2017-09-22T15:33:23.309Z"},{"version":"5.6.3p4","stream":"TECH","releaseDate":"2017-09-22T13:54:29.483Z"},{"version":"2017.3.0b1","stream":"BETA","releaseDate":"2017-09-21T13:38:59.597Z"},{"version":"5.4.6f3","stream":"LTS","releaseDate":"2017-09-20T08:37:58.914Z"},{"version":"2017.1.1p2","stream":"TECH","releaseDate":"2017-09-15T10:24:31.557Z"},{"version":"5.5.4p5","stream":"TECH","releaseDate":"2017-09-14T14:25:05.91Z"},{"version":"2017.2.0b11","stream":"BETA","releaseDate":"2017-09-12T13:31:58.615Z"},{"version":"2017.1.1p1","stream":"TECH","releaseDate":"2017-09-08T16:32:50.056Z"},{"version":"5.6.3p3","stream":"TECH","releaseDate":"2017-09-08T13:29:05.068Z"},{"version":"2017.2.0b10","stream":"BETA","releaseDate":"2017-09-04T20:19:12.822Z"},{"version":"2017.1.1f1","stream":"LTS","releaseDate":"2017-09-04T11:34:13.935Z"},{"version":"5.6.3p2","stream":"TECH","releaseDate":"2017-09-01T16:44:02.764Z"},{"version":"5.5.4p4","stream":"TECH","releaseDate":"2017-08-31T17:24:23.024Z"},{"version":"2017.2.0b9","stream":"BETA","releaseDate":"2017-08-29T15:59:23.864Z"},{"version":"2017.1.0p5","stream":"TECH","releaseDate":"2017-08-25T11:26:12.473Z"},{"version":"2017.2.0b8","stream":"BETA","releaseDate":"2017-08-18T14:33:35.185Z"},{"version":"5.3.8p2","stream":"TECH","releaseDate":"2017-08-18T10:53:50.159Z"},{"version":"5.4.5p5","stream":"TECH","releaseDate":"2017-08-18T00:06:42.901Z"},{"version":"5.5.4p3","stream":"TECH","releaseDate":"2017-08-17T21:45:42.73Z"},{"version":"5.6.3p1","stream":"TECH","releaseDate":"2017-08-17T20:56:53.906Z"},{"version":"2017.1.0p4","stream":"TECH","releaseDate":"2017-08-17T07:16:35.478Z"},{"version":"2017.2.0b7","stream":"BETA","releaseDate":"2017-08-15T17:42:22.612Z"},{"version":"2017.1.0p3","stream":"TECH","releaseDate":"2017-08-11T14:09:22.978Z"},{"version":"2017.2.0b6","stream":"BETA","releaseDate":"2017-08-08T21:09:18.966Z"},{"version":"5.6.3f1","stream":"LTS","releaseDate":"2017-08-01T17:03:58.044Z"},{"version":"2017.2.0b5","stream":"BETA","releaseDate":"2017-08-01T09:24:10.578Z"},{"version":"2017.1.0p2","stream":"TECH","releaseDate":"2017-07-27T12:04:31.433Z"},{"version":"5.5.4p2","stream":"TECH","releaseDate":"2017-07-26T11:06:59.785Z"},{"version":"5.6.2p4","stream":"TECH","releaseDate":"2017-07-21T17:06:22.579Z"},{"version":"2017.1.0p1","stream":"TECH","releaseDate":"2017-07-21T16:18:52.683Z"},{"version":"2017.2.0b4","stream":"BETA","releaseDate":"2017-07-20T16:07:24.314Z"},{"version":"5.6.2p3","stream":"TECH","releaseDate":"2017-07-17T14:54:07.43Z"},{"version":"2017.2.0b3","stream":"BETA","releaseDate":"2017-07-14T13:58:24.249Z"},{"version":"2017.1.0f3","stream":"LTS","releaseDate":"2017-07-10T11:29:48.344Z"},{"version":"2017.2.0b2","stream":"BETA","releaseDate":"2017-07-06T14:42:46.105Z"},{"version":"5.6.2p2","stream":"TECH","releaseDate":"2017-07-06T12:05:04.255Z"},{"version":"2017.1.0f2","stream":"LTS","releaseDate":"2017-07-05T18:06:25.71Z"},{"version":"5.6.2p1","stream":"TECH","releaseDate":"2017-06-29T14:08:51.315Z"},{"version":"5.4.5p4","stream":"TECH","releaseDate":"2017-06-28T11:33:16.401Z"},{"version":"2017.1.0f1","stream":"LTS","releaseDate":"2017-06-26T18:35:00.156Z"},{"version":"5.5.4p1","stream":"TECH","releaseDate":"2017-06-22T14:02:21.433Z"},{"version":"5.6.2f1","stream":"LTS","releaseDate":"2017-06-21T13:10:00.385Z"},{"version":"2017.1.0b10","stream":"BETA","releaseDate":"2017-06-19T15:48:58.272Z"},{"version":"5.6.1p4","stream":"TECH","releaseDate":"2017-06-16T15:05:31.413Z"},{"version":"5.3.8f2","stream":"LTS","releaseDate":"2017-06-13T11:42:19.078Z"},{"version":"2017.1.0b9","stream":"BETA","releaseDate":"2017-06-09T19:19:53.748Z"},{"version":"5.4.5p3","stream":"TECH","releaseDate":"2017-06-09T19:08:09.909Z"},{"version":"5.6.1p3","stream":"TECH","releaseDate":"2017-06-09T17:34:47.454Z"},{"version":"5.5.4f1","stream":"LTS","releaseDate":"2017-06-06T16:31:53.057Z"},{"version":"2017.1.0b8","stream":"BETA","releaseDate":"2017-06-02T15:43:21.394Z"},{"version":"5.6.1p2","stream":"TECH","releaseDate":"2017-06-02T10:52:12.61Z"},{"version":"5.4.5p2","stream":"TECH","releaseDate":"2017-05-29T08:25:58.959Z"},{"version":"2017.1.0b7","stream":"BETA","releaseDate":"2017-05-26T16:22:45.206Z"},{"version":"5.5.3p4","stream":"TECH","releaseDate":"2017-05-24T16:03:02.585Z"},{"version":"2017.1.0b6","stream":"BETA","releaseDate":"2017-05-19T11:33:20.637Z"},{"version":"5.6.1p1","stream":"TECH","releaseDate":"2017-05-18T12:38:02.433Z"},{"version":"2017.1.0b5","stream":"BETA","releaseDate":"2017-05-11T12:55:57.667Z"},{"version":"5.6.1f1","stream":"LTS","releaseDate":"2017-05-11T10:42:26.042Z"},{"version":"5.5.3p3","stream":"TECH","releaseDate":"2017-05-10T15:53:39.619Z"},{"version":"2017.1.0b4","stream":"BETA","releaseDate":"2017-05-08T14:47:09.728Z"},{"version":"5.6.0p4","stream":"TECH","releaseDate":"2017-05-08T12:16:30.156Z"},{"version":"2017.1.0b3","stream":"BETA","releaseDate":"2017-05-03T13:29:05.251Z"},{"version":"5.6.0p3","stream":"TECH","releaseDate":"2017-04-27T19:02:39.441Z"},{"version":"2017.1.0b2","stream":"BETA","releaseDate":"2017-04-26T13:56:42.441Z"},{"version":"5.5.3p2","stream":"TECH","releaseDate":"2017-04-25T14:57:56.683Z"},{"version":"5.6.0p2","stream":"TECH","releaseDate":"2017-04-21T20:03:49.145Z"},{"version":"5.6.0p1","stream":"TECH","releaseDate":"2017-04-18T13:49:03.982Z"},{"version":"5.5.3p1","stream":"TECH","releaseDate":"2017-04-13T15:11:15.612Z"},{"version":"2017.1.0b1","stream":"BETA","releaseDate":"2017-04-11T14:05:40.004Z"},{"version":"5.6.0f3","stream":"LTS","releaseDate":"2017-03-31T15:00:22.486Z"},{"version":"5.5.3f1","stream":"LTS","releaseDate":"2017-03-31T10:51:39.156Z"},{"version":"5.4.5p1","stream":"TECH","releaseDate":"2017-03-30T14:45:22.189Z"},{"version":"5.6.0f2","stream":"LTS","releaseDate":"2017-03-27T16:28:45.658Z"},{"version":"5.5.2p4","stream":"TECH","releaseDate":"2017-03-23T10:35:50.243Z"},{"version":"5.5.2p3","stream":"TECH","releaseDate":"2017-03-17T18:58:40.164Z"},{"version":"5.6.0f1","stream":"LTS","releaseDate":"2017-03-17T16:41:48.638Z"},{"version":"5.4.5f1","stream":"LTS","releaseDate":"2017-03-10T14:21:03.746Z"},{"version":"5.6.0b11","stream":"BETA","releaseDate":"2017-03-08T17:05:35.299Z"},{"version":"5.5.2p2","stream":"TECH","releaseDate":"2017-03-08T16:29:03.349Z"},{"version":"5.5.2p1","stream":"TECH","releaseDate":"2017-03-03T12:06:12.373Z"},{"version":"5.6.0b10","stream":"BETA","releaseDate":"2017-03-02T17:57:00.642Z"},{"version":"5.4.4p4","stream":"TECH","releaseDate":"2017-03-01T11:11:30.914Z"},{"version":"5.5.2f1","stream":"LTS","releaseDate":"2017-02-24T09:54:27.426Z"},{"version":"5.5.1p4","stream":"TECH","releaseDate":"2017-02-17T16:08:36.975Z"},{"version":"5.6.0b9","stream":"BETA","releaseDate":"2017-02-17T14:41:26.853Z"},{"version":"5.6.0b8","stream":"BETA","releaseDate":"2017-02-13T15:54:50.112Z"},{"version":"5.5.1p3","stream":"TECH","releaseDate":"2017-02-09T12:22:29.265Z"},{"version":"5.4.4p3","stream":"TECH","releaseDate":"2017-02-08T17:25:47.967Z"},{"version":"5.3.7p4","stream":"TECH","releaseDate":"2017-02-07T17:01:05.91Z"},{"version":"5.6.0b7","stream":"BETA","releaseDate":"2017-02-07T15:05:04.895Z"},{"version":"5.5.1p2","stream":"TECH","releaseDate":"2017-02-03T13:27:39.914Z"},{"version":"5.6.0b6","stream":"BETA","releaseDate":"2017-02-01T15:38:41.38Z"},{"version":"5.5.1p1","stream":"TECH","releaseDate":"2017-02-01T14:22:21.414Z"},{"version":"5.6.0b5","stream":"BETA","releaseDate":"2017-01-26T09:26:16.775Z"},{"version":"5.4.4p2","stream":"TECH","releaseDate":"2017-01-25T15:10:44.295Z"},{"version":"5.5.1f1","stream":"LTS","releaseDate":"2017-01-24T10:32:21.504Z"},{"version":"5.6.0b4","stream":"BETA","releaseDate":"2017-01-17T20:17:27.658Z"},{"version":"5.4.4p1","stream":"TECH","releaseDate":"2017-01-13T16:46:40.758Z"},{"version":"5.5.0p4","stream":"TECH","releaseDate":"2017-01-11T16:18:53.99Z"},{"version":"5.4.4f1","stream":"LTS","releaseDate":"2017-01-05T15:53:15.05Z"},{"version":"5.5.0p3","stream":"TECH","releaseDate":"2017-01-05T09:04:18.854Z"},{"version":"5.6.0b3","stream":"BETA","releaseDate":"2016-12-23T17:38:00.246Z"},{"version":"5.3.7p3","stream":"TECH","releaseDate":"2016-12-21T16:13:38.502Z"},{"version":"5.6.0b2","stream":"BETA","releaseDate":"2016-12-20T13:32:52.874Z"},{"version":"5.5.0p2","stream":"TECH","releaseDate":"2016-12-16T20:23:56.1Z"},{"version":"5.4.3p4","stream":"TECH","releaseDate":"2016-12-16T13:59:43.927Z"},{"version":"5.6.0b1","stream":"BETA","releaseDate":"2016-12-13T10:35:25.751Z"},{"version":"5.4.3p3","stream":"TECH","releaseDate":"2016-12-07T16:18:47.86Z"},{"version":"5.5.0p1","stream":"TECH","releaseDate":"2016-12-07T15:25:41.557Z"},{"version":"5.4.3p2","stream":"TECH","releaseDate":"2016-12-01T13:54:47.954Z"},{"version":"5.5.0f3","stream":"LTS","releaseDate":"2016-11-30T11:49:48.44Z"},{"version":"5.3.7p2","stream":"TECH","releaseDate":"2016-11-28T16:06:22.443Z"},{"version":"5.4.3p1","stream":"TECH","releaseDate":"2016-11-28T10:09:25.413Z"},{"version":"5.5.0f2","stream":"LTS","releaseDate":"2016-11-25T10:16:50.283Z"},{"version":"5.5.0f1","stream":"LTS","releaseDate":"2016-11-22T16:14:01.185Z"},{"version":"5.4.3f1","stream":"LTS","releaseDate":"2016-11-17T12:51:02.026Z"},{"version":"5.3.7p1","stream":"TECH","releaseDate":"2016-11-11T15:32:03.022Z"},{"version":"5.5.0b11","stream":"BETA","releaseDate":"2016-11-09T18:04:57.217Z"},{"version":"5.5.0b10","stream":"BETA","releaseDate":"2016-11-09T15:40:05.177Z"},{"version":"5.4.2p4","stream":"TECH","releaseDate":"2016-11-09T12:35:14.541Z"},{"version":"5.3.7f1","stream":"LTS","releaseDate":"2016-11-08T13:22:26.898Z"},{"version":"5.4.2p3","stream":"TECH","releaseDate":"2016-11-02T15:35:46.038Z"},{"version":"5.4.2p2","stream":"TECH","releaseDate":"2016-10-28T12:33:11.631Z"},{"version":"5.4.2p1","stream":"TECH","releaseDate":"2016-10-24T15:58:28.014Z"},{"version":"5.5.0b9","stream":"BETA","releaseDate":"2016-10-24T15:06:57.148Z"},{"version":"5.3.6p8","stream":"TECH","releaseDate":"2016-10-24T14:31:38.053Z"},{"version":"5.4.2f2","stream":"LTS","releaseDate":"2016-10-21T09:41:39.171Z"},{"version":"5.5.0b8","stream":"BETA","releaseDate":"2016-10-20T13:10:07.348Z"},{"version":"5.5.0b7","stream":"BETA","releaseDate":"2016-10-11T14:19:07.139Z"},{"version":"5.3.6p7","stream":"TECH","releaseDate":"2016-10-07T12:14:33.794Z"},{"version":"5.4.1p4","stream":"TECH","releaseDate":"2016-10-05T16:04:22.609Z"},{"version":"5.5.0b6","stream":"BETA","releaseDate":"2016-10-03T16:33:15.78Z"},{"version":"5.4.1p3","stream":"TECH","releaseDate":"2016-09-28T14:50:34.112Z"},{"version":"5.5.0b5","stream":"BETA","releaseDate":"2016-09-27T08:31:35.768Z"},{"version":"5.3.6p6","stream":"TECH","releaseDate":"2016-09-23T10:03:44.038Z"},{"version":"5.4.1p2","stream":"TECH","releaseDate":"2016-09-22T18:37:12.216Z"},{"version":"5.5.0b4","stream":"BETA","releaseDate":"2016-09-19T15:28:43.203Z"},{"version":"5.3.6p5","stream":"TECH","releaseDate":"2016-09-16T07:03:24.647Z"},{"version":"5.4.1p1","stream":"TECH","releaseDate":"2016-09-15T11:18:34.21Z"},{"version":"5.5.0b3","stream":"BETA","releaseDate":"2016-09-12T13:01:26.004Z"},{"version":"5.4.1f1","stream":"LTS","releaseDate":"2016-09-07T11:02:30.459Z"},{"version":"5.5.0b2","stream":"BETA","releaseDate":"2016-09-05T14:30:09.838Z"},{"version":"5.3.6p4","stream":"TECH","releaseDate":"2016-09-02T14:39:02.879Z"},{"version":"5.4.0p4","stream":"TECH","releaseDate":"2016-08-31T15:12:19.933Z"},{"version":"5.5.0b1","stream":"BETA","releaseDate":"2016-08-29T22:26:28.148Z"},{"version":"5.4.0p3","stream":"TECH","releaseDate":"2016-08-25T16:23:33.971Z"},{"version":"5.3.6p3","stream":"TECH","releaseDate":"2016-08-23T15:52:41.717Z"},{"version":"5.4.0p2","stream":"TECH","releaseDate":"2016-08-18T15:13:53.454Z"},{"version":"5.4.0p1","stream":"TECH","releaseDate":"2016-08-11T16:41:23.062Z"},{"version":"5.3.6p2","stream":"TECH","releaseDate":"2016-08-03T13:49:58.642Z"},{"version":"5.4.0f3","stream":"LTS","releaseDate":"2016-07-27T15:33:32.065Z"},{"version":"5.3.6p1","stream":"TECH","releaseDate":"2016-07-27T13:49:40.408Z"},{"version":"5.4.0f2","stream":"LTS","releaseDate":"2016-07-21T14:37:50.492Z"},{"version":"5.3.6f1","stream":"LTS","releaseDate":"2016-07-20T09:42:16.587Z"},{"version":"5.4.0f1","stream":"LTS","releaseDate":"2016-07-14T14:14:28.948Z"},{"version":"5.3.5p8","stream":"TECH","releaseDate":"2016-07-13T12:31:43.913Z"},{"version":"5.4.0b25","stream":"BETA","releaseDate":"2016-07-11T14:27:32.571Z"},{"version":"5.3.5p7","stream":"TECH","releaseDate":"2016-07-08T09:46:28.284Z"},{"version":"5.4.0b24","stream":"BETA","releaseDate":"2016-07-01T15:47:18.233Z"},{"version":"5.3.5p6","stream":"TECH","releaseDate":"2016-06-29T16:20:44.035Z"},{"version":"5.4.0b23","stream":"BETA","releaseDate":"2016-06-28T11:35:44.656Z"},{"version":"5.4.0b22","stream":"BETA","releaseDate":"2016-06-20T09:50:01.918Z"},{"version":"5.3.5p5","stream":"TECH","releaseDate":"2016-06-20T08:56:54.195Z"},{"version":"5.3.5p4","stream":"TECH","releaseDate":"2016-06-20T08:17:44.257Z"},{"version":"5.3.5p3","stream":"TECH","releaseDate":"2016-06-10T09:28:48.99Z"},{"version":"5.4.0b21","stream":"BETA","releaseDate":"2016-06-09T10:10:18.503Z"},{"version":"5.1.5f1","stream":"LTS","releaseDate":"2016-06-06T11:04:12.199Z"},{"version":"5.3.5p2","stream":"TECH","releaseDate":"2016-06-03T14:52:11.159Z"},{"version":"5.4.0b20","stream":"BETA","releaseDate":"2016-06-03T13:53:41.345Z"},{"version":"5.2.5f1","stream":"LTS","releaseDate":"2016-06-01T11:51:51.594Z"},{"version":"5.3.5p1","stream":"TECH","releaseDate":"2016-05-31T07:40:56.682Z"},{"version":"5.4.0b19","stream":"BETA","releaseDate":"2016-05-25T09:23:12.812Z"},{"version":"5.4.0b18","stream":"BETA","releaseDate":"2016-05-19T15:44:13.019Z"},{"version":"5.3.5f1","stream":"LTS","releaseDate":"2016-05-19T15:29:29.778Z"},{"version":"5.3.4p6","stream":"TECH","releaseDate":"2016-05-06T15:28:15.34Z"},{"version":"5.4.0b17","stream":"BETA","releaseDate":"2016-05-03T22:24:49.734Z"},{"version":"5.3.4p5","stream":"TECH","releaseDate":"2016-04-27T15:20:06.968Z"},{"version":"5.4.0b16","stream":"BETA","releaseDate":"2016-04-27T11:25:25.945Z"},{"version":"5.3.4p4","stream":"TECH","releaseDate":"2016-04-20T10:50:41.942Z"},{"version":"5.4.0b15","stream":"BETA","releaseDate":"2016-04-18T10:10:26.21Z"},{"version":"5.3.4p3","stream":"TECH","releaseDate":"2016-04-13T10:24:45.535Z"},{"version":"5.4.0b14","stream":"BETA","releaseDate":"2016-04-11T11:55:25.285Z"},{"version":"5.3.4p2","stream":"TECH","releaseDate":"2016-04-08T13:41:06.681Z"},{"version":"5.4.0b13","stream":"BETA","releaseDate":"2016-04-04T09:27:37.064Z"},{"version":"5.4.0b12","stream":"BETA","releaseDate":"2016-03-29T16:39:18.712Z"},{"version":"5.3.4p1","stream":"TECH","releaseDate":"2016-03-23T22:30:26.074Z"},{"version":"5.4.0b11","stream":"BETA","releaseDate":"2016-03-21T11:52:03.765Z"},{"version":"5.4.0b10","stream":"BETA","releaseDate":"2016-03-15T13:45:23.973Z"},{"version":"5.3.4f1","stream":"LTS","releaseDate":"2016-03-15T13:33:58.451Z"},{"version":"5.3.3p3","stream":"TECH","releaseDate":"2016-03-14T17:48:02.217Z"},{"version":"5.4.0b9","stream":"BETA","releaseDate":"2016-03-08T10:03:52.265Z"},{"version":"5.3.3p2","stream":"TECH","releaseDate":"2016-03-04T16:05:49.874Z"},{"version":"5.4.0b8","stream":"BETA","releaseDate":"2016-03-02T12:14:56.597Z"},{"version":"5.3.3p1","stream":"TECH","releaseDate":"2016-02-24T16:53:39.519Z"},{"version":"5.3.3f1","stream":"LTS","releaseDate":"2016-02-23T12:53:03.453Z"},{"version":"5.4.0b7","stream":"BETA","releaseDate":"2016-02-22T14:29:51.467Z"},{"version":"5.3.2p4","stream":"TECH","releaseDate":"2016-02-20T19:48:43.616Z"},{"version":"5.4.0b6","stream":"BETA","releaseDate":"2016-02-15T16:11:52.055Z"},{"version":"5.3.2p3","stream":"TECH","releaseDate":"2016-02-12T09:22:27.923Z"},{"version":"5.4.0b5","stream":"BETA","releaseDate":"2016-02-09T16:00:54.01Z"},{"version":"5.3.2p2","stream":"TECH","releaseDate":"2016-02-03T18:16:50.764Z"},{"version":"5.4.0b4","stream":"BETA","releaseDate":"2016-01-30T14:05:07.635Z"},{"version":"5.3.2p1","stream":"TECH","releaseDate":"2016-01-28T16:05:44.713Z"},{"version":"5.3.2f1","stream":"LTS","releaseDate":"2016-01-27T15:27:25.943Z"},{"version":"5.3.1p4","stream":"TECH","releaseDate":"2016-01-23T12:12:30.074Z"},{"version":"5.4.0b3","stream":"BETA","releaseDate":"2016-01-22T17:00:02.981Z"},{"version":"5.4.0b2","stream":"BETA","releaseDate":"2016-01-15T11:09:43.69Z"},{"version":"5.3.1p3","stream":"TECH","releaseDate":"2016-01-14T17:48:48.731Z"},{"version":"5.4.0b1","stream":"BETA","releaseDate":"2016-01-12T22:10:16.262Z"},{"version":"5.3.1p2","stream":"TECH","releaseDate":"2016-01-08T12:16:04.435Z"},{"version":"5.3.1p1","stream":"TECH","releaseDate":"2016-01-08T12:10:16.321Z"},{"version":"5.3.1f1","stream":"LTS","releaseDate":"2015-12-18T14:23:10.274Z"},{"version":"5.2.4f1","stream":"LTS","releaseDate":"2015-12-15T16:37:45.105Z"},{"version":"5.2.3p3","stream":"TECH","releaseDate":"2015-12-10T10:23:24.949Z"},{"version":"5.3.0f4","stream":"LTS","releaseDate":"2015-12-07T22:12:35.035Z"},{"version":"5.2.3p2","stream":"TECH","releaseDate":"2015-12-03T12:16:45.571Z"},{"version":"5.2.3p1","stream":"TECH","releaseDate":"2015-11-27T15:42:46.602Z"},{"version":"5.3.0f2","stream":"LTS","releaseDate":"2015-11-23T15:08:26.331Z"},{"version":"5.2.3f1","stream":"LTS","releaseDate":"2015-11-19T10:38:36.694Z"},{"version":"5.2.2p4","stream":"TECH","releaseDate":"2015-11-18T11:12:41.143Z"},{"version":"5.3.0f1","stream":"LTS","releaseDate":"2015-11-14T15:28:15.863Z"},{"version":"5.2.2p3","stream":"TECH","releaseDate":"2015-11-10T16:44:28.035Z"},{"version":"5.3.0b6","stream":"BETA","releaseDate":"2015-11-09T15:44:01.764Z"},{"version":"5.3.0b5","stream":"BETA","releaseDate":"2015-11-02T17:19:46.615Z"},{"version":"5.2.2p2","stream":"TECH","releaseDate":"2015-10-30T16:26:48.959Z"},{"version":"5.2.2p1","stream":"TECH","releaseDate":"2015-10-24T17:00:34.513Z"},{"version":"5.3.0b4","stream":"BETA","releaseDate":"2015-10-23T12:11:59.016Z"},{"version":"5.2.2f1","stream":"LTS","releaseDate":"2015-10-21T13:11:59.792Z"},{"version":"5.3.0b3","stream":"BETA","releaseDate":"2015-10-16T20:48:22.978Z"},{"version":"5.2.1p4","stream":"TECH","releaseDate":"2015-10-15T06:00:51.32Z"},{"version":"5.3.0b2","stream":"BETA","releaseDate":"2015-10-10T13:11:44.641Z"},{"version":"5.2.1p3","stream":"TECH","releaseDate":"2015-10-09T14:49:17.051Z"},{"version":"5.1.4f1","stream":"LTS","releaseDate":"2015-10-06T08:17:42.759Z"},{"version":"5.3.0b1","stream":"BETA","releaseDate":"2015-10-02T19:38:07.851Z"},{"version":"5.2.1p2","stream":"TECH","releaseDate":"2015-10-01T13:15:11.225Z"},{"version":"5.2.1p1","stream":"TECH","releaseDate":"2015-09-25T13:13:16.856Z"},{"version":"5.2.1f1","stream":"LTS","releaseDate":"2015-09-22T12:24:32.468Z"},{"version":"5.2.0p1","stream":"TECH","releaseDate":"2015-09-18T00:00:00Z"},{"version":"5.1.3p3","stream":"TECH","releaseDate":"2015-09-11T00:00:00Z"},{"version":"5.1.3p2","stream":"TECH","releaseDate":"2015-09-04T00:00:00Z"},{"version":"5.2.0f3","stream":"LTS","releaseDate":"2015-09-03T09:33:57.148Z"},{"version":"5.1.3p1","stream":"TECH","releaseDate":"2015-08-27T00:00:00Z"},{"version":"5.1.3f1","stream":"LTS","releaseDate":"2015-08-24T09:50:04.179Z"},{"version":"5.2.0f2","stream":"LTS","releaseDate":"2015-08-21T15:46:49.996Z"},{"version":"5.2.0f1","stream":"LTS","releaseDate":"2015-08-16T15:50:39.469Z"},{"version":"5.2.0b6","stream":"BETA","releaseDate":"2015-08-07T19:27:28.2Z"},{"version":"5.1.2p3","stream":"TECH","releaseDate":"2015-08-06T15:11:03.99Z"},{"version":"5.2.0b5","stream":"BETA","releaseDate":"2015-07-31T10:58:16.63Z"},{"version":"5.1.2p2","stream":"TECH","releaseDate":"2015-07-30T16:04:41.211Z"},{"version":"5.2.0b4","stream":"BETA","releaseDate":"2015-07-23T15:55:44.27Z"},{"version":"5.1.2p1","stream":"TECH","releaseDate":"2015-07-23T15:20:51.984Z"},{"version":"5.2.0b3","stream":"BETA","releaseDate":"2015-07-17T19:58:20.57Z"},{"version":"5.1.2f1","stream":"LTS","releaseDate":"2015-07-16T08:54:11.096Z"},{"version":"5.2.0b2","stream":"BETA","releaseDate":"2015-07-10T18:37:49.539Z"},{"version":"5.1.1p4","stream":"TECH","releaseDate":"2015-07-10T09:08:40.175Z"},{"version":"5.0.4f1","stream":"LTS","releaseDate":"2015-07-06T12:10:34.23Z"},{"version":"5.1.1p3","stream":"TECH","releaseDate":"2015-07-03T16:18:12.615Z"},{"version":"5.2.0b1","stream":"BETA","releaseDate":"2015-07-01T16:26:20.921Z"},{"version":"5.1.1p2","stream":"TECH","releaseDate":"2015-06-25T21:27:14.067Z"},{"version":"5.0.3p3","stream":"TECH","releaseDate":"2015-06-24T15:55:13.644Z"},{"version":"5.1.1p1","stream":"TECH","releaseDate":"2015-06-23T15:05:55.566Z"},{"version":"5.1.1f1","stream":"LTS","releaseDate":"2015-06-18T10:20:02.247Z"},{"version":"5.0.3p2","stream":"TECH","releaseDate":"2015-06-18T00:00:00Z"},{"version":"5.1.0p1","stream":"TECH","releaseDate":"2015-06-12T00:00:00Z"},{"version":"5.0.3p1","stream":"TECH","releaseDate":"2015-06-11T00:00:00Z"},{"version":"5.0.3f2","stream":"LTS","releaseDate":"2015-06-09T15:36:46.869Z"},{"version":"5.1.0f3","stream":"LTS","releaseDate":"2015-06-03T21:31:28.217Z"},{"version":"5.0.2p4","stream":"TECH","releaseDate":"2015-06-03T00:00:00Z"},{"version":"5.0.2p3","stream":"TECH","releaseDate":"2015-05-28T00:00:00Z"},{"version":"5.0.2p2","stream":"TECH","releaseDate":"2015-05-20T00:00:00Z"},{"version":"5.0.2p1","stream":"TECH","releaseDate":"2015-05-15T00:00:00Z"},{"version":"5.0.2f1","stream":"LTS","releaseDate":"2015-05-13T14:05:42.791Z"},{"version":"5.0.1p4","stream":"TECH","releaseDate":"2015-05-08T10:25:56.976Z"},{"version":"5.0.1p3","stream":"TECH","releaseDate":"2015-04-29T00:00:00Z"},{"version":"5.0.1p2","stream":"TECH","releaseDate":"2015-04-24T14:14:44.97Z"},{"version":"5.0.1p1","stream":"TECH","releaseDate":"2015-04-16T08:21:07Z"},{"version":"5.0.1f1","stream":"LTS","releaseDate":"2015-03-31T16:55:08.376Z"},{"version":"5.0.0p3","stream":"TECH","releaseDate":"2015-03-26T12:03:56.068Z"},{"version":"5.0.0p2","stream":"TECH","releaseDate":"2015-03-20T16:38:49.515Z"},{"version":"5.0.0p1","stream":"TECH","releaseDate":"2015-03-16T15:20:13.604Z"},{"version":"5.0.0f4","stream":"LTS","releaseDate":"2015-02-25T15:49:05.835Z"}] \ No newline at end of file From 3349e90b2503c810bb8dd2a1ffeda13cc3437dd1 Mon Sep 17 00:00:00 2001 From: Marco Festini Date: Mon, 30 Sep 2024 16:21:54 +0200 Subject: [PATCH 4/6] Add a new radio button to filter for Tech releases and unify spacing --- UnityLauncherPro/MainWindow.xaml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/UnityLauncherPro/MainWindow.xaml b/UnityLauncherPro/MainWindow.xaml index a3ce945..38b0658 100644 --- a/UnityLauncherPro/MainWindow.xaml +++ b/UnityLauncherPro/MainWindow.xaml @@ -438,11 +438,13 @@ - - - - - + + + + + + + From 4678cbf96f2eb5d3b60e8ef181bf3324dd22f328 Mon Sep 17 00:00:00 2001 From: Marco Festini Date: Sat, 5 Oct 2024 17:47:32 +0200 Subject: [PATCH 5/6] Add a download progress window to give feedback and allow cancelling downloads --- UnityLauncherPro/Data/DownloadProgress.cs | 14 ++++ UnityLauncherPro/DownloadProgressWindow.xaml | 22 ++++++ .../DownloadProgressWindow.xaml.cs | 56 ++++++++++++++ UnityLauncherPro/Tools.cs | 76 +++++++++++++------ UnityLauncherPro/UnityLauncherPro.csproj | 5 ++ 5 files changed, 151 insertions(+), 22 deletions(-) create mode 100644 UnityLauncherPro/Data/DownloadProgress.cs create mode 100644 UnityLauncherPro/DownloadProgressWindow.xaml create mode 100644 UnityLauncherPro/DownloadProgressWindow.xaml.cs diff --git a/UnityLauncherPro/Data/DownloadProgress.cs b/UnityLauncherPro/Data/DownloadProgress.cs new file mode 100644 index 0000000..cf4ba8e --- /dev/null +++ b/UnityLauncherPro/Data/DownloadProgress.cs @@ -0,0 +1,14 @@ +namespace UnityLauncherPro +{ + public readonly struct DownloadProgress + { + public long TotalRead { get; } + public long TotalBytes { get; } + + public DownloadProgress(long totalRead, long totalBytes) + { + TotalRead = totalRead; + TotalBytes = totalBytes; + } + } +} \ No newline at end of file diff --git a/UnityLauncherPro/DownloadProgressWindow.xaml b/UnityLauncherPro/DownloadProgressWindow.xaml new file mode 100644 index 0000000..538534d --- /dev/null +++ b/UnityLauncherPro/DownloadProgressWindow.xaml @@ -0,0 +1,22 @@ + + + + + + + +