diff --git a/.gitignore b/.gitignore index 7ea61cf..869ef14 100644 --- a/.gitignore +++ b/.gitignore @@ -35,6 +35,7 @@ bld/ [Ll]ogs/ ffmpeg/ Info/ +Hidden/ # Visual Studio 2015/2017 cache/options directory .vs/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3817d73..935df46 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -8,7 +8,6 @@ I welcome requests! Follow these steps to contribute: 1. If you have a code change suggestion, you can post a replacement code block. I also accept pull requests. # How to build from source - 1. Delete the "PersonalUtilities" project from the solution. 1. Delete the "PersonalUtilities.Notifications" project from the solution. 1. The following libraries must be added to project references with the '**Copy to output folder**' option: @@ -21,7 +20,6 @@ I welcome requests! Follow these steps to contribute: **Always use the correct libraries. You must download libraries from the same release date as the code commit date.** # How to request a new site - 1. Check [issues](https://github.com/AAndyProgram/SCrawler/issues) (open and [closed](https://github.com/AAndyProgram/SCrawler/issues?q=is%3Aissue+is%3Aclosed)) and [discussions](https://github.com/AAndyProgram/SCrawler/discussions) to find your issue. Perhaps I have already answered your request. 1. If you don't find anything, create a new issue with your request. I usually reply as soon as possible (within the next few hours). @@ -38,16 +36,5 @@ I welcome requests! Follow these steps to contribute: If I'm interested in a site you want to add, it may be added in future releases. # Sites I will never develop - - Facebook - -# Sites requested by users - -- TikTok - - API for receiving data without authorization was not found. Therefore, I don't have time to start developing this site parsing algorithm. If anyone knows of requests that may collect data without OAuth authentication, please let me know. - -# Contact me - -[![matrix](https://img.shields.io/badge/Matrix-%40andyprogram%3Amatrix.org-informational)](https://matrix.to/#/@andyprogram:matrix.org) - -[![discord](https://img.shields.io/badge/discord-AndyProgram%233804-yellowgreen)](https://discordapp.com/users/1012768226679206009) AndyProgram#3804 +- Tumblr \ No newline at end of file diff --git a/Changelog.md b/Changelog.md index 0326625..a60e6a0 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,3 +1,38 @@ +# 2022.10.18.0 + +*2022-10-18* + +- Added + - **TikTok** ([limited](https://github.com/AAndyProgram/SCrawler/wiki/Settings#tiktok-limits)) + - **Search form** (```Ctrl+F```) + - Feed improvements + - Ability to save the download session for viewing later + - Ability to download user, excluding from the feed (use the ```Ctrl``` key with a button click of with a hot key press) + - Ability to disable the notification about the absence of the ffmpeg.exe file + - Extended user information with labels + - Advanced AutoDownloader pause options + - Added pause buttons to tray icon and AutoDownloader form + - Additional Instagram protection + - Advanced notification management + - Silent mode (temporarily disable notification) + - Excluding users whose profiles do not exist from downloading with groups and AutoDownloader + - Minor improvements +- Updated + - Grouped all download buttons into one menu + - **Finished missing posts**. You can now download missing posts if they exist. + - PluginProvider: added ```BeginEdit``` and ```EndEdit``` methods + - PluginProvider: ```GetSpecialData``` return type changed from ```IEnumerable(Of PluginUserMedia)``` to ```IEnumerable``` + - XVIDEOS and LPSG plugins are moved from libraries to SCrawler +- Fixed + - (Issue #69) **RedGifs data is not downloading**. Requires cookies and token. + - Some minor bugs when deleting a collection + - Feed: start video playing may cause the program to freeze (strange behavior of the vlc library) + - Feed: videos hosted on Reddit not showing up in feed + - Feed: minor bugs + - Collection users were not banned when deleted with the ban option + - When trying to delete multiple collections, each collection asked for confirmation to delete + - Minor bugs + # 2022.9.24.0 *2022-09-24* diff --git a/FAQ.md b/FAQ.md index 713c982..5c31122 100644 --- a/FAQ.md +++ b/FAQ.md @@ -18,7 +18,7 @@ A: https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-set-up-cookies #### Q: **I can't copy cookies.** -A: Use the mouse. Don't use ```Ctrl``` + ```A```! +A: Use the mouse. Don't use ```Ctrl+A```! ---- @@ -44,6 +44,8 @@ A: How to request a new site you can read [here](CONTRIBUTING.md#how-to-request- A: Check your credentials. Both of these sites require cookies. Check your [Twitter tokens](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-find-twitter-tokens) and [Instagram settings](https://github.com/AAndyProgram/SCrawler/wiki/Settings#instagram-settings). If all settings are set, but nothing works, go to [create a new issue](https://github.com/AAndyProgram/SCrawler/issues). Don't forget to attach the LOG. +**[SITES REQUIREMENTS](https://github.com/AAndyProgram/SCrawler/wiki/Settings#sites-requirements)** + ---- #### Q: **I have set credentials but still nothing is downloading** @@ -94,6 +96,24 @@ A: Just add that user back to the program. In the dialog box that opens, click o ---- +#### Q: **Why don't you answer how it works** + +A: Because **I don't want to**. I don't want to waste my time explaining things that are already covered in the **[GUIDE](https://github.com/AAndyProgram/SCrawler/wiki)**! If you didn't bother to read the guide, why would I waste my time?! ALL FUNCTIONALITY IS DESCRIBED IN THE GUIDE. Before publishing a new release, I update the guide. If you don't respect my work, I don't waste my time. + +---- + +#### Q: **You lost me. Your program is too complicated.** + +A: **I'm fine with that**. If the program is difficult for you or you can't configure it, I can only suggest you find another (easier) program. I really don't mind! The program is free. I am develop SCrawler for myself and publish on GitHub because people found my program useful. If someone can't use it or doesn't like it, I'm fine. + +---- + +#### Q: **I can't configure something** + +A: I can only [suggest](#q-you-lost-me-your-program-is-too-complicated) you find another (easier) program. + +---- + #### Q: **Can you add a step-by-step guide or video on how to use the program?** A: **NO**! I will not do it. If you want, you can create a video tutorial and send it to me. Then I add it. All options and what each option does described on the wiki. The wiki also contains a description of all settings and how-to configure them. For complex settings, there is a steep-by-steep guide. Read the [main](README.md) information and [GUIDE](https://github.com/AAndyProgram/SCrawler/wiki/) and you won't have any problems. I have developed a program with an intuitive interface. There is a Settings button, download buttons, a context menu that drops down when a user is clicked, and other controls. Anyone can use it. \ No newline at end of file diff --git a/Plugins.md b/Plugins.md index 1a2ee8a..6053e02 100644 --- a/Plugins.md +++ b/Plugins.md @@ -1,6 +1,4 @@ List of available plugins: -- LPSG -- XVIDEOS Tools: - [image2post](https://github.com/unknown81311/SCrawler-image2post) by @unknown81311: **get reddit post URL from file.** \ No newline at end of file diff --git a/ProgramScreenshots/FeedWindow.png b/ProgramScreenshots/FeedWindow.png index dadde13..7746573 100644 Binary files a/ProgramScreenshots/FeedWindow.png and b/ProgramScreenshots/FeedWindow.png differ diff --git a/ProgramScreenshots/FeedWindowItemContext.png b/ProgramScreenshots/FeedWindowItemContext.png new file mode 100644 index 0000000..1f52e8f Binary files /dev/null and b/ProgramScreenshots/FeedWindowItemContext.png differ diff --git a/ProgramScreenshots/FeedWindowSessionContext.png b/ProgramScreenshots/FeedWindowSessionContext.png new file mode 100644 index 0000000..43d281c Binary files /dev/null and b/ProgramScreenshots/FeedWindowSessionContext.png differ diff --git a/ProgramScreenshots/MainWindow.png b/ProgramScreenshots/MainWindow.png index 0ffaaff..d5e847a 100644 Binary files a/ProgramScreenshots/MainWindow.png and b/ProgramScreenshots/MainWindow.png differ diff --git a/ProgramScreenshots/MainWindow2.png b/ProgramScreenshots/MainWindow2.png deleted file mode 100644 index a839c53..0000000 Binary files a/ProgramScreenshots/MainWindow2.png and /dev/null differ diff --git a/ProgramScreenshots/MainWindowGroups.png b/ProgramScreenshots/MainWindowGroups.png index 9b5c0bd..8b45cdd 100644 Binary files a/ProgramScreenshots/MainWindowGroups.png and b/ProgramScreenshots/MainWindowGroups.png differ diff --git a/ProgramScreenshots/MainWindowPause.png b/ProgramScreenshots/MainWindowPause.png new file mode 100644 index 0000000..311eebe Binary files /dev/null and b/ProgramScreenshots/MainWindowPause.png differ diff --git a/ProgramScreenshots/MainWindowView.png b/ProgramScreenshots/MainWindowView.png new file mode 100644 index 0000000..c1e9d81 Binary files /dev/null and b/ProgramScreenshots/MainWindowView.png differ diff --git a/ProgramScreenshots/SearchUsers.png b/ProgramScreenshots/SearchUsers.png new file mode 100644 index 0000000..69612a9 Binary files /dev/null and b/ProgramScreenshots/SearchUsers.png differ diff --git a/ProgramScreenshots/SettingsGlobalBasis.png b/ProgramScreenshots/SettingsGlobalBasis.png index 4c467d4..348c031 100644 Binary files a/ProgramScreenshots/SettingsGlobalBasis.png and b/ProgramScreenshots/SettingsGlobalBasis.png differ diff --git a/ProgramScreenshots/SettingsGlobalBehavior.png b/ProgramScreenshots/SettingsGlobalBehavior.png index fa2ef58..54b6079 100644 Binary files a/ProgramScreenshots/SettingsGlobalBehavior.png and b/ProgramScreenshots/SettingsGlobalBehavior.png differ diff --git a/ProgramScreenshots/SettingsGlobalChannels.png b/ProgramScreenshots/SettingsGlobalChannels.png index 0bfddc8..2199127 100644 Binary files a/ProgramScreenshots/SettingsGlobalChannels.png and b/ProgramScreenshots/SettingsGlobalChannels.png differ diff --git a/ProgramScreenshots/SettingsGlobalDefaults.png b/ProgramScreenshots/SettingsGlobalDefaults.png index 7d3848e..944ee83 100644 Binary files a/ProgramScreenshots/SettingsGlobalDefaults.png and b/ProgramScreenshots/SettingsGlobalDefaults.png differ diff --git a/ProgramScreenshots/SettingsGlobalDownloading.png b/ProgramScreenshots/SettingsGlobalDownloading.png index 5da184a..17bdf7b 100644 Binary files a/ProgramScreenshots/SettingsGlobalDownloading.png and b/ProgramScreenshots/SettingsGlobalDownloading.png differ diff --git a/ProgramScreenshots/SettingsGlobalFeed.png b/ProgramScreenshots/SettingsGlobalFeed.png index e1d6846..2e15371 100644 Binary files a/ProgramScreenshots/SettingsGlobalFeed.png and b/ProgramScreenshots/SettingsGlobalFeed.png differ diff --git a/ProgramScreenshots/SettingsGlobalNotifications.png b/ProgramScreenshots/SettingsGlobalNotifications.png new file mode 100644 index 0000000..e50e7f7 Binary files /dev/null and b/ProgramScreenshots/SettingsGlobalNotifications.png differ diff --git a/ProgramScreenshots/SettingsScheduler.png b/ProgramScreenshots/SettingsScheduler.png index 9684b9f..1a8c64e 100644 Binary files a/ProgramScreenshots/SettingsScheduler.png and b/ProgramScreenshots/SettingsScheduler.png differ diff --git a/ProgramScreenshots/SettingsSiteInstagram.png b/ProgramScreenshots/SettingsSiteInstagram.png index ff57c99..53a59cd 100644 Binary files a/ProgramScreenshots/SettingsSiteInstagram.png and b/ProgramScreenshots/SettingsSiteInstagram.png differ diff --git a/ProgramScreenshots/SettingsSiteInstagramAdditional.png b/ProgramScreenshots/SettingsSiteInstagramAdditional.png new file mode 100644 index 0000000..fbe00bd Binary files /dev/null and b/ProgramScreenshots/SettingsSiteInstagramAdditional.png differ diff --git a/ProgramScreenshots/SettingsSiteLPSG.png b/ProgramScreenshots/SettingsSiteLPSG.png new file mode 100644 index 0000000..c97afea Binary files /dev/null and b/ProgramScreenshots/SettingsSiteLPSG.png differ diff --git a/ProgramScreenshots/SettingsSiteRedGifs.png b/ProgramScreenshots/SettingsSiteRedGifs.png index df586e1..7928499 100644 Binary files a/ProgramScreenshots/SettingsSiteRedGifs.png and b/ProgramScreenshots/SettingsSiteRedGifs.png differ diff --git a/ProgramScreenshots/SettingsSiteTikTok.png b/ProgramScreenshots/SettingsSiteTikTok.png new file mode 100644 index 0000000..6ddb4a9 Binary files /dev/null and b/ProgramScreenshots/SettingsSiteTikTok.png differ diff --git a/ProgramScreenshots/SettingsSiteXvideos.png b/ProgramScreenshots/SettingsSiteXvideos.png new file mode 100644 index 0000000..7368dfc Binary files /dev/null and b/ProgramScreenshots/SettingsSiteXvideos.png differ diff --git a/ProgramScreenshots/SettingsSiteXvideosAdditional.png b/ProgramScreenshots/SettingsSiteXvideosAdditional.png new file mode 100644 index 0000000..d226d40 Binary files /dev/null and b/ProgramScreenshots/SettingsSiteXvideosAdditional.png differ diff --git a/ProgramScreenshots/TrayContextMenu.png b/ProgramScreenshots/TrayContextMenu.png new file mode 100644 index 0000000..f809dc4 Binary files /dev/null and b/ProgramScreenshots/TrayContextMenu.png differ diff --git a/README.md b/README.md index 0627c76..74153e8 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [![GUIDE](https://img.shields.io/badge/GUIDE-green)](https://github.com/AAndyProgram/SCrawler/wiki) [![How to support](https://img.shields.io/badge/HowToSupport-green)](HowToSupport.md) -A program to download photo and video from [any site](#supported-sites) (e.g. Reddit, Twitter, Instagram). +A program to download photo and video from [any site](#supported-sites) (e.g. Reddit, Twitter, Instagram, TikTok, RedGifs, XVIDEOS, LPSG). **If you like SCrawler, please like the program on [this site]( https://alternativeto.net/software/scrawler/about/)** @@ -21,14 +21,11 @@ Do you like this program? Consider adding to my coffee fund by making a donation # What can program do: - Download pictures and videos from users' profiles and subreddits: - - Reddit images; - - Reddit galleries of images; - - Reddit videos (downloading Reddit hosted video is going through ffmpeg (**ffmpeg only works with the x64 program**)); + - Reddit images, galleries of images, videos (downloading Reddit hosted video is going through ffmpeg (**ffmpeg only works with the x64 program**)); - Redgifs videos (https://www.redgifs.com/); - Twitter images and videos; - - Instagram images and videos; - - Instagram tagged posts; - - Instagram stories; + - Instagram images and videos, tagged posts, stories; + - TikTok videos ([limited](https://github.com/AAndyProgram/SCrawler/wiki/Settings#tiktok-limits)); - Imgur images, galleries and videos; - Gfycat videos; - [Other](#supported-sites) supported sites @@ -55,6 +52,7 @@ Do you like this program? Consider adding to my coffee fund by making a donation - **Reddit** - **Twitter** - **Instagram** +- **TikTok** ([limited](https://github.com/AAndyProgram/SCrawler/wiki/Settings#tiktok-limits)) - RedGifs - Imgur - Gfycat @@ -62,7 +60,9 @@ Do you like this program? Consider adding to my coffee fund by making a donation - XVIDEOS - [Other sites](Plugins.md) -# How does it works: +**[SITES REQUIREMENTS](https://github.com/AAndyProgram/SCrawler/wiki/Settings#sites-requirements)** + +# How it works First, the program downloads the full profile. After the program downloads only new posts. The program remembers downloaded posts. @@ -74,8 +74,6 @@ The program parses all user posts, obtain MD5 images hash and compares them wit The program parses all user posts and compares file names with existing ones to remove duplicates. Then the media will be downloaded. -You can read about Instagram restrictions [here](https://github.com/AAndyProgram/SCrawler/wiki/Settings#instagram-limits) - ## How to request a new site Read [here](CONTRIBUTING.md#how-to-request-a-new-site) about @@ -83,12 +81,33 @@ Read [here](CONTRIBUTING.md#how-to-request-a-new-site) about # Requirements - Windows 10, 11 with NET Framework 4.6.1 or higher (v4.6.1 must be installed). You can check version compatibility with this [tool](Tools/NET.FrameworkVersion.ps1). -- Authorization [cookies](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-set-up-cookies) and [tokens](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-find-twitter-tokens) for Twitter (if you want to download data from Twitter) -- Authorization [cookies](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-set-up-cookies) and [Hash](https://github.com/AAndyProgram/SCrawler/wiki/Settings#instagram) for Instagram (if you want to download data from Instagram), [Hash 2](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-find-instagram-hash-2) for saved Instagram posts, Instagram [stories authorization headers](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-find-instagram-stories-authorization-headers) for Stories and Tagged data -- ffmpeg library for downloading videos hosted on Reddit (you can download it from the [official repo](https://github.com/GyanD/codexffmpeg/releases/tag/2021-01-12-git-ca21cb1e36) or [from my first release](https://github.com/AAndyProgram/SCrawler/releases/download/1.0.0.0/ffmpeg.zip)). **ffmpeg only works with the x64 version of the program.** +- **[SITES REQUIREMENTS](https://github.com/AAndyProgram/SCrawler/wiki/Settings#sites-requirements)** # Guide +- [Main window](https://github.com/AAndyProgram/SCrawler/wiki) + - [Users](https://github.com/AAndyProgram/SCrawler/wiki/Users) + - [Add/Edit/Delete users](https://github.com/AAndyProgram/SCrawler/wiki/Users) + - [Collections](https://github.com/AAndyProgram/SCrawler/wiki#collections) + - [User operations](https://github.com/AAndyProgram/SCrawler/wiki#context-menu) + - [User labels](https://github.com/AAndyProgram/SCrawler/wiki/Users#labels) + - **[DOWNLOAD](https://github.com/AAndyProgram/SCrawler/wiki#download)** + - [Automation](https://github.com/AAndyProgram/SCrawler/wiki/Settings#automation) + - [Download groups](https://github.com/AAndyProgram/SCrawler/wiki/Settings#download-groups) + - [Downloading information](https://github.com/AAndyProgram/SCrawler/wiki#info) + - [Reddit channels](https://github.com/AAndyProgram/SCrawler/wiki/Channels) + - [Saved posts](https://github.com/AAndyProgram/SCrawler/wiki#saved-posts) + - [View modes, filters](https://github.com/AAndyProgram/SCrawler/wiki#view) +- **[SETTINGS](https://github.com/AAndyProgram/SCrawler/wiki/Settings)** + - **[SITES REQUIREMENTS](https://github.com/AAndyProgram/SCrawler/wiki/Settings#sites-requirements)** + - [Reddit](https://github.com/AAndyProgram/SCrawler/wiki/Settings#reddit) + - [Twitter](https://github.com/AAndyProgram/SCrawler/wiki/Settings#twitter) + - [Instagram](https://github.com/AAndyProgram/SCrawler/wiki/Settings#instagram) + - [TikTok](https://github.com/AAndyProgram/SCrawler/wiki/Settings#tiktok) + - [RedGifs](https://github.com/AAndyProgram/SCrawler/wiki/Settings#redgifs) + - [XVIDEOS](https://github.com/AAndyProgram/SCrawler/wiki/Settings#xvideos) + - [LPSG](https://github.com/AAndyProgram/SCrawler/wiki/Settings#lpsg) + **Full guide you can find [here](https://github.com/AAndyProgram/SCrawler/wiki)** # Installation @@ -117,22 +136,9 @@ Read more about how to support the program [here](HowToSupport.md). The program has an intuitive interface. -You need to set up authorization for Twitter and Instagram: -- Authorization [cookies](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-set-up-cookies) and [tokens](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-find-twitter-tokens) for **Twitter** (if you want to download data from Twitter) -- Authorization [cookies](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-set-up-cookies), [Hash](https://github.com/AAndyProgram/SCrawler/wiki/Settings#instagram) and [authorization headers](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-find-instagram-authorization-headers) for **Instagram** (if you want to download data from Instagram), [Hash 2](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-find-instagram-hash-2) for **saved Instagram posts** +**[SITES REQUIREMENTS](https://github.com/AAndyProgram/SCrawler/wiki/Settings#sites-requirements)** -Just add a user profile and **click the ```Start downloading``` button**. - -You can add users by patterns: -- https://www.instagram.com/SomeUserName -- https://twitter.com/SomeUserName -- https://reddit.com/user/SomeUserName -- https://reddit.com/r/SomeSubredditName -- https://www.redgifs.com/users/SomeUserName -- u/SomeUserName -- r/SomeSubredditName -- SomeUserName (in this case, you need to select the user's site) -- SomeSubredditName +Just add a user profile and **click the ```Download``` button**. Read more about adding users and subreddits [here](https://github.com/AAndyProgram/SCrawler/wiki/Users) @@ -144,10 +150,4 @@ Create a shortcut for the program. Open shortcut properties. In the ```Shortcut` Example: ```D:\Programs\SCrawler\SCrawler.exe v``` -![Separate video downloader](ProgramScreenshots/SeparateVideoDownloader.png) - -# Contact me - -[![matrix](https://img.shields.io/badge/Matrix-%40andyprogram%3Amatrix.org-informational)](https://matrix.to/#/@andyprogram:matrix.org) - -[![discord](https://img.shields.io/badge/discord-AndyProgram%233804-yellowgreen)](https://discordapp.com/users/1012768226679206009) AndyProgram#3804 +![Separate video downloader](ProgramScreenshots/SeparateVideoDownloader.png) \ No newline at end of file diff --git a/SCrawler.PluginProvider/Interfaces/ISiteSettings.vb b/SCrawler.PluginProvider/Interfaces/ISiteSettings.vb index f214bcf..e109492 100644 --- a/SCrawler.PluginProvider/Interfaces/ISiteSettings.vb +++ b/SCrawler.PluginProvider/Interfaces/ISiteSettings.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -21,7 +21,7 @@ Namespace Plugin Function GetUserUrl(ByVal UserName As String, ByVal Channel As Boolean) As String Function IsMyUser(ByVal UserURL As String) As ExchangeOptions Function IsMyImageVideo(ByVal URL As String) As ExchangeOptions - Function GetSpecialData(ByVal URL As String, ByVal Path As String, ByVal AskForPath As Boolean) As IEnumerable(Of PluginUserMedia) + Function GetSpecialData(ByVal URL As String, ByVal Path As String, ByVal AskForPath As Boolean) As IEnumerable Function GetInstance(ByVal What As Download) As IPluginContentProvider Function GetUserPostUrl(ByVal UserID As String, ByVal PostID As String) As String #Region "XML Support" @@ -32,6 +32,8 @@ Namespace Plugin Sub EndInit() Sub BeginUpdate() Sub EndUpdate() + Sub BeginEdit() + Sub EndEdit() #End Region #Region "Site availability" Function Available(ByVal What As Download, ByVal Silent As Boolean) As Boolean diff --git a/SCrawler.PluginProvider/My Project/AssemblyInfo.vb b/SCrawler.PluginProvider/My Project/AssemblyInfo.vb index f70cc41..89259fb 100644 --- a/SCrawler.PluginProvider/My Project/AssemblyInfo.vb +++ b/SCrawler.PluginProvider/My Project/AssemblyInfo.vb @@ -13,7 +13,7 @@ Imports System.Runtime.InteropServices - + @@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices ' by using the '*' as shown below: ' - - + + diff --git a/SCrawler.sln b/SCrawler.sln index 9a208bb..cee7b98 100644 --- a/SCrawler.sln +++ b/SCrawler.sln @@ -17,10 +17,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution EndProject Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SCrawler.PluginProvider", "SCrawler.PluginProvider\SCrawler.PluginProvider.vbproj", "{D4650F6B-5A54-44B6-999B-6C675B7116B1}" EndProject -Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SCrawler.Plugin.LPSG", "SCrawler.Plugin.LPSG\SCrawler.Plugin.LPSG.vbproj", "{22A130B2-DDF4-4FB5-BA38-E5DB4CF1B8A2}" -EndProject -Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SCrawler.Plugin.XVIDEOS", "SCrawler.Plugin.XVIDEOS\SCrawler.Plugin.XVIDEOS.vbproj", "{CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}" -EndProject Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "PersonalUtilities.Notifications", "..\..\MyUtilities\PersonalUtilities.Notifications\PersonalUtilities.Notifications.vbproj", "{FC532253-1AB3-4DEF-A28A-DFDD9A481EB2}" EndProject Global @@ -69,30 +65,6 @@ Global {D4650F6B-5A54-44B6-999B-6C675B7116B1}.Release|x64.Build.0 = Release|x64 {D4650F6B-5A54-44B6-999B-6C675B7116B1}.Release|x86.ActiveCfg = Release|x86 {D4650F6B-5A54-44B6-999B-6C675B7116B1}.Release|x86.Build.0 = Release|x86 - {22A130B2-DDF4-4FB5-BA38-E5DB4CF1B8A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {22A130B2-DDF4-4FB5-BA38-E5DB4CF1B8A2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {22A130B2-DDF4-4FB5-BA38-E5DB4CF1B8A2}.Debug|x64.ActiveCfg = Debug|x64 - {22A130B2-DDF4-4FB5-BA38-E5DB4CF1B8A2}.Debug|x64.Build.0 = Debug|x64 - {22A130B2-DDF4-4FB5-BA38-E5DB4CF1B8A2}.Debug|x86.ActiveCfg = Debug|x86 - {22A130B2-DDF4-4FB5-BA38-E5DB4CF1B8A2}.Debug|x86.Build.0 = Debug|x86 - {22A130B2-DDF4-4FB5-BA38-E5DB4CF1B8A2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {22A130B2-DDF4-4FB5-BA38-E5DB4CF1B8A2}.Release|Any CPU.Build.0 = Release|Any CPU - {22A130B2-DDF4-4FB5-BA38-E5DB4CF1B8A2}.Release|x64.ActiveCfg = Release|x64 - {22A130B2-DDF4-4FB5-BA38-E5DB4CF1B8A2}.Release|x64.Build.0 = Release|x64 - {22A130B2-DDF4-4FB5-BA38-E5DB4CF1B8A2}.Release|x86.ActiveCfg = Release|x86 - {22A130B2-DDF4-4FB5-BA38-E5DB4CF1B8A2}.Release|x86.Build.0 = Release|x86 - {CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}.Debug|x64.ActiveCfg = Debug|x64 - {CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}.Debug|x64.Build.0 = Debug|x64 - {CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}.Debug|x86.ActiveCfg = Debug|x86 - {CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}.Debug|x86.Build.0 = Debug|x86 - {CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}.Release|Any CPU.Build.0 = Release|Any CPU - {CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}.Release|x64.ActiveCfg = Release|x64 - {CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}.Release|x64.Build.0 = Release|x64 - {CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}.Release|x86.ActiveCfg = Release|x86 - {CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}.Release|x86.Build.0 = Release|x86 {FC532253-1AB3-4DEF-A28A-DFDD9A481EB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FC532253-1AB3-4DEF-A28A-DFDD9A481EB2}.Debug|Any CPU.Build.0 = Debug|Any CPU {FC532253-1AB3-4DEF-A28A-DFDD9A481EB2}.Debug|x64.ActiveCfg = Debug|x64 diff --git a/SCrawler/API/Base/ProfileSaved.vb b/SCrawler/API/Base/ProfileSaved.vb index 325a0aa..15211e3 100644 --- a/SCrawler/API/Base/ProfileSaved.vb +++ b/SCrawler/API/Base/ProfileSaved.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -25,7 +25,7 @@ Namespace API.Base HOST.DownloadStarted(PDownload.SavedPosts) Dim u As New UserInfo With {.Plugin = HOST.Key, .Site = HOST.Name, .SpecialPath = HOST.SavedPostsPath} Using user As IUserData = HOST.GetInstance(PDownload.SavedPosts, Nothing, False, False) - If Not user Is Nothing AndAlso (Not user.Name.IsEmptyString Or Not HOST.IsMyClass) Then + If Not user Is Nothing AndAlso Not user.Name.IsEmptyString Then u.Name = user.Name With DirectCast(user, UserDataBase) With .User : u.IsChannel = .IsChannel : u.UpdateUserFile() : End With @@ -45,7 +45,7 @@ Namespace API.Base Progress.InformationTemporary = $"Host [{HOST.Name}] is unavailable" End If Else - Progress.InformationTemporary = $"Host [{HOST.Name}] is nor ready" + Progress.InformationTemporary = $"Host [{HOST.Name}] is not ready" End If Catch ex As Exception Progress.InformationTemporary = $"{HOST.Name} downloading error" diff --git a/SCrawler/API/Base/SiteSettingsBase.vb b/SCrawler/API/Base/SiteSettingsBase.vb index 329a6d8..0d289ce 100644 --- a/SCrawler/API/Base/SiteSettingsBase.vb +++ b/SCrawler/API/Base/SiteSettingsBase.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -56,6 +56,10 @@ Namespace API.Base End Sub Friend Overridable Sub EndUpdate() Implements ISiteSettings.EndUpdate End Sub + Friend Overridable Sub BeginEdit() Implements ISiteSettings.BeginEdit + End Sub + Friend Overridable Sub EndEdit() Implements ISiteSettings.EndEdit + End Sub #End Region #Region "Before and After Download" Friend Overridable Sub DownloadStarted(ByVal What As Download) Implements ISiteSettings.DownloadStarted @@ -90,7 +94,7 @@ Namespace API.Base End If Return Nothing Catch ex As Exception - Return ErrorsDescriber.Execute(EDP.SendInLog + EDP.ReturnValue, ex, "[API.Base.SiteSettingsBase.IsMyUser]") + Return ErrorsDescriber.Execute(EDP.SendInLog + EDP.ReturnValue, ex, $"[API.Base.SiteSettingsBase.IsMyUser({UserURL})]") End Try End Function Protected ImageVideoContains As String = String.Empty @@ -101,17 +105,25 @@ Namespace API.Base Return Nothing End If End Function - Friend Overridable Function GetSpecialData(ByVal URL As String, ByVal Path As String, ByVal AskForPath As Boolean) As IEnumerable(Of PluginUserMedia) Implements ISiteSettings.GetSpecialData + Friend Overridable Function GetSpecialData(ByVal URL As String, ByVal Path As String, ByVal AskForPath As Boolean) As IEnumerable Implements ISiteSettings.GetSpecialData Return Nothing End Function - Friend Overridable Function GetSpecialDataF(ByVal URL As String) As IEnumerable(Of UserMedia) - Return Nothing + Friend Shared Function GetSpecialDataFile(ByVal Path As String, ByVal AskForPath As Boolean, ByRef SpecFolderObj As String) As SFile + Dim f As SFile = Path.CSFileP + If f.Name.IsEmptyString Then f.Name = "OutputFile" +#Disable Warning BC40000 + If Path.CSFileP.IsEmptyString Or AskForPath Then f = SFile.SaveAs(f, "File destination",,,, EDP.ReturnValue) : SpecFolderObj = f.Path +#Enable Warning + Return f End Function #End Region #Region "Ready, Available" - Friend Overridable Function Available(ByVal What As Download, ByVal Silent As Boolean) As Boolean Implements ISiteSettings.Available + Friend Overridable Function BaseAuthExists() As Boolean Return True End Function + Friend Overridable Function Available(ByVal What As Download, ByVal Silent As Boolean) As Boolean Implements ISiteSettings.Available + Return BaseAuthExists() + End Function Friend Overridable Function ReadyToDownload(ByVal What As Download) As Boolean Implements ISiteSettings.ReadyToDownload Return True End Function diff --git a/SCrawler/API/Base/Structures.vb b/SCrawler/API/Base/Structures.vb index f0f599d..b90c9ce 100644 --- a/SCrawler/API/Base/Structures.vb +++ b/SCrawler/API/Base/Structures.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -6,9 +6,24 @@ ' ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY +Imports PersonalUtilities.Functions.XML +Imports PersonalUtilities.Functions.XML.Base +Imports PersonalUtilities.Functions.RegularExpressions Namespace API.Base Friend Module Structures - Friend Structure UserMedia : Implements IEquatable(Of UserMedia) + Friend Structure UserMedia : Implements IEquatable(Of UserMedia), IEContainerProvider +#Region "XML Names" + Friend Const Name_MediaNode As String = "MediaData" + Private Const Name_MediaType As String = "Type" + Private Const Name_MediaState As String = "State" + Private Const Name_MediaAttempts As String = "Attempts" + Private Const Name_MediaURL As String = "URL" + Private Const Name_MediaHash As String = "Hash" + Private Const Name_MediaFile As String = "File" + Private Const Name_MediaPostID As String = "ID" + Private Const Name_MediaPostDate As String = "Date" + Private Const Name_SpecialFolder As String = "SpecialFolder" +#End Region Friend Enum Types As Integer Undefined = 0 [Picture] = 1 @@ -33,27 +48,54 @@ Namespace API.Base ''' SomeFolder\SomeFolder2 ''' Friend SpecialFolder As String - Friend Sub New(ByVal _URL As String) - URL = _URL - URL_BASE = _URL + Friend Sub New(ByVal URL As String) + Me.URL = URL + URL_BASE = URL File = URL Type = Types.Undefined End Sub - Friend Sub New(ByVal _URL As String, ByVal _Type As Types) - Me.New(_URL) - [Type] = _Type + Friend Sub New(ByVal URL As String, ByVal Type As Types) + Me.New(URL) + Me.Type = Type End Sub Friend Sub New(ByVal m As Plugin.PluginUserMedia) - If Not IsNothing(m) Then - [Type] = m.ContentType - URL = m.URL - MD5 = m.MD5 - File = m.File - Post = New UserPost With {.ID = m.PostID, .[Date] = m.PostDate} - State = m.DownloadState - SpecialFolder = m.SpecialFolder - Attempts = m.Attempts + [Type] = m.ContentType + URL = m.URL + URL_BASE = URL + MD5 = m.MD5 + File = m.File + Post = New UserPost With {.ID = m.PostID, .[Date] = m.PostDate} + State = m.DownloadState + SpecialFolder = m.SpecialFolder + Attempts = m.Attempts + End Sub + Friend Sub New(ByVal e As EContainer, ByVal UserInstance As IUserData) + Type = e.Attribute(Name_MediaType).Value.FromXML(Of Integer)(CInt(Types.Undefined)) + State = e.Attribute(Name_MediaState).Value.FromXML(Of Integer)(CInt(States.Downloaded)) + Attempts = e.Attribute(Name_MediaAttempts).Value.FromXML(Of Integer)(0) + URL = e.Attribute(Name_MediaURL).Value + URL_BASE = e.Value + MD5 = e.Attribute(Name_MediaHash).Value + File = e.Attribute(Name_MediaFile).Value + + Dim vp As Boolean? = Nothing + Dim upath$ = String.Empty + If Not UserInstance Is Nothing Then + With DirectCast(UserInstance, UserDataBase) + vp = .SeparateVideoFolder + upath = .MyFile.CutPath.PathWithSeparator + End With End If + + SpecialFolder = e.Attribute(Name_SpecialFolder).Value + If Not SpecialFolder.IsEmptyString Then upath &= $"{SpecialFolder}\" + If vp.HasValue AndAlso vp.Value Then upath &= $"Video\" + If Not upath.IsEmptyString Then File = $"{upath.CSFilePS}{File.File}" + + Post = New UserPost With { + .ID = e.Attribute(Name_MediaPostID).Value, + .[Date] = AConvert(Of Date)(e.Attribute(Name_MediaPostDate).Value, ParsersDataDateProvider, Nothing) + } End Sub Public Shared Widening Operator CType(ByVal _URL As String) As UserMedia Return New UserMedia(_URL) @@ -61,6 +103,17 @@ Namespace API.Base Public Shared Widening Operator CType(ByVal m As UserMedia) As String Return m.URL End Operator + Public Overrides Function GetHashCode() As Integer + If Not File.IsEmptyString Then + Return File.GetHashCode + ElseIf Not URL_BASE.IsEmptyString Then + Return URL_BASE.GetHashCode + ElseIf Not URL.IsEmptyString Then + Return URL.GetHashCode + Else + Return 0 + End If + End Function Public Overrides Function ToString() As String Return URL End Function @@ -83,6 +136,19 @@ Namespace API.Base Public Overrides Function Equals(ByVal Obj As Object) As Boolean Return Equals(CType(Obj, UserMedia)) End Function + Friend Function ToEContainer(Optional ByVal e As ErrorsDescriber = Nothing) As EContainer Implements IEContainerProvider.ToEContainer + Return New EContainer(Name_MediaNode, URL_BASE, {New EAttribute(Name_MediaType, CInt(Type)), + New EAttribute(Name_MediaState, CInt(State)), + New EAttribute(Name_MediaAttempts, Attempts), + New EAttribute(Name_MediaURL, URL), + New EAttribute(Name_MediaHash, MD5), + New EAttribute(Name_MediaFile, File.File), + New EAttribute(Name_SpecialFolder, SpecialFolder), + New EAttribute(Name_MediaPostID, Post.ID), + New EAttribute(Name_MediaPostDate, AConvert(Of String)(Post.Date, ParsersDataDateProvider, String.Empty)) + } + ) + End Function End Structure Friend Structure UserPost : Implements IEquatable(Of UserPost), IComparable(Of UserPost) ''' Post ID @@ -116,7 +182,7 @@ Namespace API.Base End Function #End Region End Structure - Friend Structure Sizes : Implements IComparable(Of Sizes) + Friend Structure Sizes : Implements IRegExCreator, IComparable(Of Sizes) Friend Value As Integer Friend Data As String Friend ReadOnly HasError As Boolean @@ -128,6 +194,16 @@ Namespace API.Base HasError = True End Try End Sub + Private Function CreateFromArray(ByVal ParamsArray() As String) As Object Implements IRegExCreator.CreateFromArray + If ParamsArray.ListExists(2) Then + Return New Sizes With { + .Value = AConvert(Of Integer)(ParamsArray(0), 0), + .Data = ParamsArray(1) + } + Else + Return New Sizes + End If + End Function Friend Function CompareTo(ByVal Other As Sizes) As Integer Implements IComparable(Of Sizes).CompareTo Return Value.CompareTo(Other.Value) * -1 End Function diff --git a/SCrawler/API/Base/UserDataBase.vb b/SCrawler/API/Base/UserDataBase.vb index 2fa2284..ee08159 100644 --- a/SCrawler/API/Base/UserDataBase.vb +++ b/SCrawler/API/Base/UserDataBase.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -51,14 +51,12 @@ Namespace API.Base #Region "Collection buttons" Private _CollectionButtonsExists As Boolean = False Private _CollectionButtonsColorsSet As Boolean = False - Friend InternalCollectionIndex As Integer = -1 - Friend WithEvents BTT_CONTEXT_DOWN As ToolStripMenuItem + Friend WithEvents BTT_CONTEXT_DOWN As ToolStripKeyMenuItem Friend WithEvents BTT_CONTEXT_EDIT As ToolStripMenuItem Friend WithEvents BTT_CONTEXT_DELETE As ToolStripMenuItem Friend WithEvents BTT_CONTEXT_OPEN_PATH As ToolStripMenuItem Friend WithEvents BTT_CONTEXT_OPEN_SITE As ToolStripMenuItem - Friend Sub CreateButtons(ByVal CollectionIndex As Integer) - InternalCollectionIndex = CollectionIndex + Friend Sub CreateButtons() Dim tn$ = $"[{Site}] - {Name}" Dim _tn$ = $"{Site}{Name}" Dim tnn As Func(Of String, String) = Function(Input) $"{Input}{_tn}" @@ -70,11 +68,11 @@ Namespace API.Base i = .Image End If End With - BTT_CONTEXT_DOWN = New ToolStripMenuItem(tn, i) With {.Name = tnn("DOWN"), .Tag = CollectionIndex} - BTT_CONTEXT_EDIT = New ToolStripMenuItem(tn, i) With {.Name = tnn("EDIT"), .Tag = CollectionIndex} - BTT_CONTEXT_DELETE = New ToolStripMenuItem(tn, i) With {.Name = tnn("DELETE"), .Tag = CollectionIndex} - BTT_CONTEXT_OPEN_PATH = New ToolStripMenuItem(tn, i) With {.Name = tnn("PATH"), .Tag = CollectionIndex} - BTT_CONTEXT_OPEN_SITE = New ToolStripMenuItem(tn, i) With {.Name = tnn("SITE"), .Tag = CollectionIndex} + BTT_CONTEXT_DOWN = New ToolStripKeyMenuItem(tn, i) With {.Name = tnn("DOWN"), .Tag = Me} + BTT_CONTEXT_EDIT = New ToolStripMenuItem(tn, i) With {.Name = tnn("EDIT"), .Tag = Me} + BTT_CONTEXT_DELETE = New ToolStripMenuItem(tn, i) With {.Name = tnn("DELETE"), .Tag = Me} + BTT_CONTEXT_OPEN_PATH = New ToolStripMenuItem(tn, i) With {.Name = tnn("PATH"), .Tag = Me} + BTT_CONTEXT_OPEN_SITE = New ToolStripMenuItem(tn, i) With {.Name = tnn("SITE"), .Tag = Me} UpdateButtonsColor() _CollectionButtonsExists = True If _UserInformationLoaded Then _CollectionButtonsColorsSet = True @@ -125,16 +123,6 @@ Namespace API.Base Private Const Name_ScriptData As String = "ScriptData" Private Const Name_DataMerging As String = "DataMerging" -#Region "Downloaded data" - Private Const Name_MediaType As String = "Type" - Private Const Name_MediaState As String = "State" - Private Const Name_MediaAttempts As String = "Attempts" - Private Const Name_MediaURL As String = "URL" - Private Const Name_MediaHash As String = "Hash" - Private Const Name_MediaFile As String = "File" - Private Const Name_MediaPostID As String = "ID" - Private Const Name_MediaPostDate As String = "Date" -#End Region #End Region #Region "Declarations" #Region "Host, Site, Progress, Self" @@ -320,7 +308,7 @@ BlockNullPicture: Friend Property SeparateVideoFolder As Boolean? Protected ReadOnly Property SeparateVideoFolderF As Boolean Get - Return (SeparateVideoFolder.HasValue AndAlso SeparateVideoFolder.Value) OrElse Settings.SeparateVideoFolder.Value + Return If(SeparateVideoFolder, Settings.SeparateVideoFolder.Value) End Get End Property #End Region @@ -466,7 +454,10 @@ BlockNullPicture: End Get End Property Friend Overridable Function GetUserInformation() As String - Dim OutStr$ = $"User: {Name}" + Dim OutStr$ = $"User: {Name} (site: {Site}" + If IncludedInCollection Then OutStr &= $"; collection: {CollectionName}" + OutStr &= ")" + OutStr.StringAppendLine($"Labels: {Labels.ListToString}") OutStr.StringAppendLine($"Path: {MyFile.CutPath.Path}") OutStr.StringAppendLine($"Total downloaded ({DownloadedTotal(True).NumToString(ANumbers.Formats.Number, 3)}):") OutStr.StringAppendLine($"Pictures: {DownloadedPictures(True).NumToString(ANumbers.Formats.Number, 3)}") @@ -731,25 +722,7 @@ BlockNullPicture: Using x As New XmlFile(MyFileData, Protector.Modes.All, False) With {.XmlReadOnly = True, .AllowSameNames = True} x.LoadData() If x.Count > 0 Then - - Dim fs$ = MyFile.CutPath.PathWithSeparator - Dim gfn As Func(Of String, String) = Function(Input) If(Input.IsEmptyString, String.Empty, - If(Input.Contains("\"), Input.CSFile.File, Input)) - For Each v As EContainer In x - _ContentList.Add(New UserMedia With { - .Type = v.Attribute(Name_MediaType).Value.FromXML(Of Integer)(CInt(UTypes.Undefined)), - .State = v.Attribute(Name_MediaState).Value.FromXML(Of Integer)(CInt(UStates.Downloaded)), - .Attempts = v.Attribute(Name_MediaAttempts).Value.FromXML(Of Integer)(0), - .URL = v.Attribute(Name_MediaURL).Value, - .URL_BASE = v.Value, - .MD5 = v.Attribute(Name_MediaHash).Value, - .File = fs & gfn.Invoke(v.Attribute(Name_MediaFile).Value), - .Post = New UserPost With { - .ID = v.Attribute(Name_MediaPostID).Value, - .[Date] = AConvert(Of Date)(v.Attribute(Name_MediaPostDate).Value, ParsersDataDateProvider, Nothing) - } - }) - Next + For Each v As EContainer In x : _ContentList.Add(New UserMedia(v, Me)) : Next End If _DataLoaded = True End Using @@ -763,21 +736,7 @@ BlockNullPicture: If MyFileData.IsEmptyString Then Exit Sub MyFileData.Exists(SFO.Path) Using x As New XmlFile With {.AllowSameNames = True, .Name = "Data"} - If _ContentList.Count > 0 Then - For Each i As UserMedia In _ContentList - x.Add(New EContainer("MediaData", i.URL_BASE, {New EAttribute(Name_MediaType, CInt(i.Type)), - New EAttribute(Name_MediaState, CInt(i.State)), - New EAttribute(Name_MediaAttempts, i.Attempts), - New EAttribute(Name_MediaURL, i.URL), - New EAttribute(Name_MediaHash, i.MD5), - New EAttribute(Name_MediaFile, i.File.File), - New EAttribute(Name_MediaPostID, i.Post.ID), - New EAttribute(Name_MediaPostDate, AConvert(Of String)(i.Post.Date, ParsersDataDateProvider, String.Empty)) - } - ) - ) - Next - End If + If _ContentList.Count > 0 Then x.AddRange(_ContentList) x.Save(MyFileData) End Using Catch ex As Exception @@ -803,6 +762,7 @@ BlockNullPicture: #Region "Download limits" Protected Enum DateResult : [Continue] : [Skip] : [Exit] : End Enum Friend Overridable Property DownloadTopCount As Integer? = Nothing Implements IUserData.DownloadTopCount, IPluginContentProvider.PostsNumberLimit + Friend Overridable Property IncludeInTheFeed As Boolean = True Private _DownloadDateFrom As Date? = Nothing Private _DownloadDateFromF As Date Friend Overridable Property DownloadDateFrom As Date? Implements IUserData.DownloadDateFrom, IPluginContentProvider.DownloadDateFrom @@ -825,10 +785,10 @@ BlockNullPicture: If _DownloadDateTo.HasValue Then _DownloadDateToF = _DownloadDateTo.Value Else _DownloadDateToF = Date.MaxValue.Date End Set End Property - Protected Function CheckDatesLimit(ByVal DateString As String, ByVal DateProvider As IFormatProvider) As DateResult + Protected Function CheckDatesLimit(ByVal DateObj As Object, ByVal DateProvider As IFormatProvider) As DateResult Try - If (DownloadDateFrom.HasValue Or DownloadDateTo.HasValue) And Not DateString.IsEmptyString Then - Dim td As Date? = AConvert(Of Date)(DateString, DateProvider, Nothing) + If (DownloadDateFrom.HasValue Or DownloadDateTo.HasValue) AndAlso ACheck(DateObj) Then + Dim td As Date? = AConvert(Of Date)(DateObj, DateProvider, Nothing) If td.HasValue Then If td.Value.ValueBetween(_DownloadDateFromF, _DownloadDateToF) Then Return DateResult.Continue @@ -841,12 +801,13 @@ BlockNullPicture: End If Return DateResult.Continue Catch ex As Exception - Return ErrorsDescriber.Execute(EDP.SendInLog, ex, $"[UserDataBase.CheckDatesLimit({DateString})]", DateResult.Continue) + Return ErrorsDescriber.Execute(EDP.SendInLog, ex, $"[UserDataBase.CheckDatesLimit({If(TypeOf DateObj Is String, CStr(DateObj), "?")})]", DateResult.Continue) End Try End Function #End Region #Region "Download functions and options" Protected Responser As Response + Protected UseResponserClient As Boolean = False Friend Overridable Sub DownloadData(ByVal Token As CancellationToken) Implements IContentProvider.DownloadData Dim Canceled As Boolean = False _ExternalCompatibilityToken = Token @@ -878,11 +839,10 @@ BlockNullPicture: ThrowAny(Token) DownloadDataF(Token) ThrowAny(Token) + If Settings.ReparseMissingInTheRoutine Then ReparseMissing(Token) : ThrowAny(Token) Else - 'PENDING: UserDataBase ReparseMissing (DownloadDataF) - 'ReparseMissing(Token) + ReparseMissing(Token) End If - '_TempMediaList.ListAddList(ContentMissing, LNC) If _TempMediaList.Count > 0 Then If Not DownloadImages Then _TempMediaList.RemoveAll(Function(m) m.Type = UTypes.GIF Or m.Type = UTypes.Picture) @@ -893,7 +853,8 @@ BlockNullPicture: ReparseVideo(Token) ThrowAny(Token) - If _TempPostsList.Count > 0 And __SaveData Then TextSaver.SaveTextToFile(_TempPostsList.ListToString(Environment.NewLine), MyFilePosts, True,, EDP.None) + If _TempPostsList.Count > 0 And Not DownloadMissingOnly And __SaveData Then _ + TextSaver.SaveTextToFile(_TempPostsList.ListToString(Environment.NewLine), MyFilePosts, True,, EDP.None) _ContentNew.ListAddList(_TempMediaList, LAP.ClearBeforeAdd) DownloadContent(Token) ThrowIfDisposed() @@ -954,9 +915,50 @@ BlockNullPicture: Protected MustOverride Sub DownloadDataF(ByVal Token As CancellationToken) Protected Overridable Sub ReparseVideo(ByVal Token As CancellationToken) End Sub + ''' + ''' Missing posts must be collected from [].
+ ''' Reparsed post must be added to [].
+ ''' At the end of the function, reparsed posts must be removed from []. + '''
Protected Overridable Sub ReparseMissing(ByVal Token As CancellationToken) End Sub Protected MustOverride Sub DownloadContent(ByVal Token As CancellationToken) + Private NotInheritable Class OptionalWebClient : Implements IDisposable + Private ReadOnly WC As WebClient + Private ReadOnly RC As Response + Private ReadOnly RCERROR As New ErrorsDescriber(EDP.ThrowException) + Private ReadOnly UseResponserClient As Boolean + Friend Sub New(ByRef Source As UserDataBase) + UseResponserClient = Source.UseResponserClient + If UseResponserClient Then + RC = Source.Responser + Else + WC = New WebClient + End If + End Sub + Friend Sub DownloadFile(ByVal URL As String, ByVal File As String) + If UseResponserClient Then + RC.DownloadFile(URL, File, RCERROR) + Else + WC.DownloadFile(URL, File) + End If + End Sub +#Region "IDisposable Support" + Private disposedValue As Boolean = False + Protected Sub Dispose(ByVal disposing As Boolean) + If Not disposedValue And disposing And Not WC Is Nothing Then WC.Dispose() + disposedValue = True + End Sub + Protected Overrides Sub Finalize() + Dispose(False) + MyBase.Finalize() + End Sub + Friend Sub Dispose() Implements IDisposable.Dispose + Dispose(True) + GC.SuppressFinalize(Me) + End Sub +#End Region + End Class Protected Sub DownloadContentDefault(ByVal Token As CancellationToken) Try Dim i% @@ -972,7 +974,8 @@ BlockNullPicture: Dim __isVideo As Boolean Dim f As SFile Dim v As UserMedia - Using w As New WebClient + + Using w As New OptionalWebClient(Me) If vsf Then SFileShares.SFileExists($"{MyDir}\Video\", SFO.Path) Progress.Maximum += _ContentNew.Count For i = 0 To _ContentNew.Count - 1 @@ -989,7 +992,7 @@ BlockNullPicture: If v.URL_BASE.IsEmptyString Then v.URL_BASE = v.URL - If Not v.File.IsEmptyString And Not v.URL_BASE.IsEmptyString Then + If Not v.File.IsEmptyString And Not v.URL.IsEmptyString Then Try __isVideo = v.Type = UTypes.Video Or f.Extension = "mp4" @@ -1011,7 +1014,13 @@ BlockNullPicture: f.Path = $"{f.PathWithSeparator}Video" If Not v.SpecialFolder.IsEmptyString Then f.Exists(SFO.Path) End If - w.DownloadFile(v.URL_BASE, f.ToString) + + If v.Type = UTypes.m3u8 And UseInternalM3U8Function Then + f = DownloadM3U8(v.URL, v, f) + If f.IsEmptyString Then Throw New Exception("M3U8 download failed") + Else + w.DownloadFile(v.URL, f.ToString) + End If If __isVideo Then v.Type = UTypes.Video @@ -1027,7 +1036,7 @@ BlockNullPicture: Catch wex As Exception v.Attempts += 1 v.State = UStates.Missing - If MissingErrorsAdd Then ErrorDownloading(f, v.URL_BASE) + If MissingErrorsAdd Then ErrorDownloading(f, v.URL) End Try Else v.State = UStates.Skipped @@ -1052,15 +1061,25 @@ BlockNullPicture: HasError = True End Try End Sub + Protected UseInternalM3U8Function As Boolean = False + Protected Overridable Function DownloadM3U8(ByVal URL As String, ByVal Media As UserMedia, ByVal DestinationFile As SFile) As SFile + Return Nothing + End Function ''' Request DownloadingException - Protected Sub ProcessException(ByVal ex As Exception, ByVal Token As CancellationToken, ByVal Message As String, Optional ByVal RDE As Boolean = True) + ''' 0 - exit + Protected Function ProcessException(ByVal ex As Exception, ByVal Token As CancellationToken, ByVal Message As String, Optional ByVal RDE As Boolean = True, Optional ByVal EObj As Object = Nothing) As Integer If Not ((TypeOf ex Is OperationCanceledException And Token.IsCancellationRequested) Or (TypeOf ex Is ObjectDisposedException And Disposed)) Then - If RDE AndAlso DownloadingException(ex, Message, True) = 0 Then LogError(ex, Message) : HasError = True + If RDE Then + Dim v% = DownloadingException(ex, Message, True, EObj) + If v = 0 Then LogError(ex, Message) : HasError = True + Return v + End If End If - End Sub + Return 0 + End Function ''' 0 - Execute LogError and set HasError - Protected MustOverride Function DownloadingException(ByVal ex As Exception, ByVal Message As String, Optional ByVal FromPE As Boolean = False) As Integer + Protected MustOverride Function DownloadingException(ByVal ex As Exception, ByVal Message As String, Optional ByVal FromPE As Boolean = False, Optional ByVal EObj As Object = Nothing) As Integer Protected Function ChangeFileNameByProvider(ByVal f As SFile, ByVal m As UserMedia) As SFile Dim ff As SFile = Nothing Try @@ -1102,7 +1121,7 @@ BlockNullPicture: End Sub #End Region #Region "Delete, Move, Merge, Copy" - Friend Overridable Function Delete() As Integer Implements IUserData.Delete + Friend Overridable Function Delete(Optional ByVal Multiple As Boolean = False) As Integer Implements IUserData.Delete Dim f As SFile = SFile.GetPath(MyFile.CutPath.Path) If f.Exists(SFO.Path, False) AndAlso (User.Merged OrElse f.Delete(SFO.Path, Settings.DeleteMode)) Then If Not IncludedInCollection Then MainFrameObj.ImageHandler(Me, False) @@ -1270,7 +1289,7 @@ BlockNullPicture: #End Region #Region "Errors functions" Protected Sub LogError(ByVal ex As Exception, ByVal Message As String) - ErrorsDescriber.Execute(EDP.SendInLog, ex, $"{IIf(IncludedInCollection, $"{CollectionName}-", String.Empty)}{Site} - {Name}: {Message}") + ErrorsDescriber.Execute(EDP.SendInLog, ex, $"{ToStringForLog()}: {Message}") End Sub Protected Sub ErrorDownloading(ByVal f As SFile, ByVal URL As String) If Not f.Exists Then MyMainLOG = $"Error downloading from [{URL}] to [{f}]" @@ -1285,11 +1304,14 @@ BlockNullPicture: End Sub ''' ''' - Friend Overloads Sub ThrowAny(ByVal Token As CancellationToken) + Friend Overridable Overloads Sub ThrowAny(ByVal Token As CancellationToken) Token.ThrowIfCancellationRequested() ThrowIfDisposed() End Sub #End Region + Protected Function ToStringForLog() As String + Return $"{IIf(IncludedInCollection, $"[{CollectionName}] - ", String.Empty)}[{Site}] - {Name}" + End Function Public Overrides Function ToString() As String If IsCollection Then Return CollectionName @@ -1308,8 +1330,8 @@ BlockNullPicture: Return hcStr.GetHashCode End Function #Region "Buttons actions" - Private Sub BTT_CONTEXT_DOWN_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_DOWN.Click - Downloader.Add(Me) + Private Sub BTT_CONTEXT_DOWN_KeyClick(sender As Object, e As MyKeyEventArgs) Handles BTT_CONTEXT_DOWN.KeyClick + Downloader.Add(Me, e.IncludeInTheFeed) End Sub Private Sub BTT_CONTEXT_EDIT_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_EDIT.Click Using f As New Editors.UserCreatorForm(Me) @@ -1439,7 +1461,7 @@ BlockNullPicture: ''' 2 - Collection removed
''' 3 - Collection split ''' - Function Delete() As Integer + Function Delete(Optional ByVal Multiple As Boolean = False) As Integer Function MoveFiles(ByVal CollectionName As String) As Boolean Function CopyFiles(ByVal DestinationPath As SFile, Optional ByVal e As ErrorsDescriber = Nothing) As Boolean Sub OpenFolder() diff --git a/SCrawler/API/Gfycat/Envir.vb b/SCrawler/API/Gfycat/Envir.vb index 62e8d6f..11bcbd9 100644 --- a/SCrawler/API/Gfycat/Envir.vb +++ b/SCrawler/API/Gfycat/Envir.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -6,9 +6,9 @@ ' ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY -Imports PersonalUtilities.Functions.RegularExpressions Imports System.Net Imports SCrawler.API.Base +Imports PersonalUtilities.Functions.RegularExpressions Namespace API.Gfycat Friend NotInheritable Class Envir Private Sub New() diff --git a/SCrawler/API/Imgur/Envir.vb b/SCrawler/API/Imgur/Envir.vb index 08db1d8..dedff32 100644 --- a/SCrawler/API/Imgur/Envir.vb +++ b/SCrawler/API/Imgur/Envir.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -6,12 +6,12 @@ ' ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY -Imports PersonalUtilities.Functions.XML -Imports PersonalUtilities.Functions.RegularExpressions -Imports PersonalUtilities.Tools.WebDocuments.JSON Imports System.Net Imports SCrawler.API.Base Imports SCrawler.API.Imgur.Declarations +Imports PersonalUtilities.Functions.XML +Imports PersonalUtilities.Functions.RegularExpressions +Imports PersonalUtilities.Tools.WebDocuments.JSON Namespace API.Imgur Namespace Declarations Friend Module Imgur_Declarations @@ -67,7 +67,7 @@ Namespace API.Imgur Return DownloadingException(ex, $"[API.Imgur.Envir.GetImage({URL})]", String.Empty, e) End Try End Function - Friend Shared Function GetVideoInfo(ByVal URL As String) As IEnumerable(Of UserMedia) + Friend Shared Function GetVideoInfo(ByVal URL As String, Optional ByVal e As ErrorsDescriber = Nothing) As IEnumerable(Of UserMedia) Try If Not URL.IsEmptyString AndAlso URL.ToLower.Contains("imgur") AndAlso Not Settings.ImgurClientID.IsEmptyString Then Dim img$ = GetImage(URL, EDP.ReturnValue) @@ -79,7 +79,8 @@ Namespace API.Imgur End If Return Nothing Catch ex As Exception - Return ErrorsDescriber.Execute(EDP.ShowMainMsg + EDP.SendInLog + EDP.ReturnValue, ex, "Imgur standalone downloader: fetch media error") + If Not e.Exists Then e = EDP.LogMessageValue + Return ErrorsDescriber.Execute(e, ex, "Imgur standalone downloader: fetch media error") End Try End Function Private Shared Function DownloadingException(ByVal ex As Exception, ByVal Message As String, diff --git a/SCrawler/API/Instagram/AdditionalSettingsForm.Designer.vb b/SCrawler/API/Instagram/AdditionalSettingsForm.Designer.vb new file mode 100644 index 0000000..179be10 --- /dev/null +++ b/SCrawler/API/Instagram/AdditionalSettingsForm.Designer.vb @@ -0,0 +1,135 @@ +' Copyright (C) 2023 Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY +Namespace API.Instagram + + Partial Friend Class AdditionalSettingsForm : Inherits System.Windows.Forms.Form + + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + Private components As System.ComponentModel.IContainer + + Private Sub InitializeComponent() + Dim CONTAINER_MAIN As System.Windows.Forms.ToolStripContainer + Dim TP_MAIN As System.Windows.Forms.TableLayoutPanel + Me.CH_DOWN_TIME = New System.Windows.Forms.CheckBox() + Me.CH_DOWN_TAG = New System.Windows.Forms.CheckBox() + Me.CH_DOWN_SAVED = New System.Windows.Forms.CheckBox() + CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer() + TP_MAIN = New System.Windows.Forms.TableLayoutPanel() + CONTAINER_MAIN.ContentPanel.SuspendLayout() + CONTAINER_MAIN.SuspendLayout() + TP_MAIN.SuspendLayout() + Me.SuspendLayout() + ' + 'CONTAINER_MAIN + ' + ' + 'CONTAINER_MAIN.ContentPanel + ' + CONTAINER_MAIN.ContentPanel.Controls.Add(TP_MAIN) + CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(234, 78) + CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill + CONTAINER_MAIN.LeftToolStripPanelVisible = False + CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0) + CONTAINER_MAIN.Name = "CONTAINER_MAIN" + CONTAINER_MAIN.RightToolStripPanelVisible = False + CONTAINER_MAIN.Size = New System.Drawing.Size(234, 103) + CONTAINER_MAIN.TabIndex = 0 + CONTAINER_MAIN.TopToolStripPanelVisible = False + ' + 'TP_MAIN + ' + TP_MAIN.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single] + TP_MAIN.ColumnCount = 1 + TP_MAIN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + TP_MAIN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20.0!)) + TP_MAIN.Controls.Add(Me.CH_DOWN_TIME, 0, 0) + TP_MAIN.Controls.Add(Me.CH_DOWN_TAG, 0, 1) + TP_MAIN.Controls.Add(Me.CH_DOWN_SAVED, 0, 2) + TP_MAIN.Dock = System.Windows.Forms.DockStyle.Fill + TP_MAIN.Location = New System.Drawing.Point(0, 0) + TP_MAIN.Name = "TP_MAIN" + TP_MAIN.RowCount = 4 + TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + TP_MAIN.Size = New System.Drawing.Size(234, 78) + TP_MAIN.TabIndex = 0 + ' + 'CH_DOWN_TIME + ' + Me.CH_DOWN_TIME.AutoSize = True + Me.CH_DOWN_TIME.Dock = System.Windows.Forms.DockStyle.Fill + Me.CH_DOWN_TIME.Location = New System.Drawing.Point(4, 4) + Me.CH_DOWN_TIME.Name = "CH_DOWN_TIME" + Me.CH_DOWN_TIME.Size = New System.Drawing.Size(226, 19) + Me.CH_DOWN_TIME.TabIndex = 0 + Me.CH_DOWN_TIME.Text = "Download Timeline" + Me.CH_DOWN_TIME.UseVisualStyleBackColor = True + ' + 'CH_DOWN_TAG + ' + Me.CH_DOWN_TAG.AutoSize = True + Me.CH_DOWN_TAG.Dock = System.Windows.Forms.DockStyle.Fill + Me.CH_DOWN_TAG.Location = New System.Drawing.Point(4, 30) + Me.CH_DOWN_TAG.Name = "CH_DOWN_TAG" + Me.CH_DOWN_TAG.Size = New System.Drawing.Size(226, 19) + Me.CH_DOWN_TAG.TabIndex = 1 + Me.CH_DOWN_TAG.Text = "Download Stories and Tagged data" + Me.CH_DOWN_TAG.UseVisualStyleBackColor = True + ' + 'CH_DOWN_SAVED + ' + Me.CH_DOWN_SAVED.AutoSize = True + Me.CH_DOWN_SAVED.Dock = System.Windows.Forms.DockStyle.Fill + Me.CH_DOWN_SAVED.Location = New System.Drawing.Point(4, 56) + Me.CH_DOWN_SAVED.Name = "CH_DOWN_SAVED" + Me.CH_DOWN_SAVED.Size = New System.Drawing.Size(226, 19) + Me.CH_DOWN_SAVED.TabIndex = 2 + Me.CH_DOWN_SAVED.Text = "Download saved posts" + Me.CH_DOWN_SAVED.UseVisualStyleBackColor = True + ' + 'AdditionalSettingsForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(234, 103) + Me.Controls.Add(CONTAINER_MAIN) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle + Me.Icon = Global.SCrawler.My.Resources.SiteResources.InstagramIcon_32 + Me.KeyPreview = True + Me.MaximizeBox = False + Me.MaximumSize = New System.Drawing.Size(250, 142) + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(250, 142) + Me.Name = "AdditionalSettingsForm" + Me.ShowInTaskbar = False + Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide + Me.Text = "Additional settings" + CONTAINER_MAIN.ContentPanel.ResumeLayout(False) + CONTAINER_MAIN.ResumeLayout(False) + CONTAINER_MAIN.PerformLayout() + TP_MAIN.ResumeLayout(False) + TP_MAIN.PerformLayout() + Me.ResumeLayout(False) + + End Sub + Private WithEvents CH_DOWN_TIME As CheckBox + Private WithEvents CH_DOWN_TAG As CheckBox + Private WithEvents CH_DOWN_SAVED As CheckBox + End Class +End Namespace \ No newline at end of file diff --git a/SCrawler/FDatePickerForm.resx b/SCrawler/API/Instagram/AdditionalSettingsForm.resx similarity index 100% rename from SCrawler/FDatePickerForm.resx rename to SCrawler/API/Instagram/AdditionalSettingsForm.resx diff --git a/SCrawler/API/Instagram/AdditionalSettingsForm.vb b/SCrawler/API/Instagram/AdditionalSettingsForm.vb new file mode 100644 index 0000000..3ef7975 --- /dev/null +++ b/SCrawler/API/Instagram/AdditionalSettingsForm.vb @@ -0,0 +1,41 @@ +' Copyright (C) 2023 Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY +Imports PersonalUtilities.Forms +Namespace API.Instagram + Friend Class AdditionalSettingsForm + Private WithEvents MyDefs As DefaultFormOptions + Friend Property MyParameters As SettingsExchangeOptions + Friend Sub New(ByVal Parameters As SettingsExchangeOptions) + InitializeComponent() + MyParameters = Parameters + MyDefs = New DefaultFormOptions(Me, Settings.Design) + End Sub + Private Sub MyForm_Load(sender As Object, e As EventArgs) Handles Me.Load + With MyDefs + .MyViewInitialize(True) + .AddOkCancelToolbar() + With MyParameters + CH_DOWN_TIME.Checked = .DownloadTimeline + CH_DOWN_TAG.Checked = .DownloadStoriesTagged + CH_DOWN_SAVED.Checked = .DownloadSaved + End With + .EndLoaderOperations() + End With + End Sub + Private Sub MyDefs_ButtonOkClick(ByVal Sender As Object, ByVal e As KeyHandleEventArgs) Handles MyDefs.ButtonOkClick + MyParameters = New SettingsExchangeOptions With { + .DownloadTimeline = CH_DOWN_TIME.Checked, + .DownloadStoriesTagged = CH_DOWN_TAG.Checked, + .DownloadSaved = CH_DOWN_SAVED.Checked, + .Changed = True + } + MyDefs.CloseForm() + End Sub + End Class +End Namespace \ No newline at end of file diff --git a/SCrawler/API/Instagram/Declarations.vb b/SCrawler/API/Instagram/Declarations.vb index de2d2f1..b67bf34 100644 --- a/SCrawler/API/Instagram/Declarations.vb +++ b/SCrawler/API/Instagram/Declarations.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -10,6 +10,7 @@ Imports PersonalUtilities.Functions.RegularExpressions Namespace API.Instagram Friend Module Declarations Friend Const InstagramSite As String = "Instagram" + Friend Const InstagramSiteKey As String = "AndyProgram_Instagram" Friend ReadOnly FilesPattern As RParams = RParams.DMS(".+?([^/\?]+?\.[\w\d]{3,4})(?=(\?|\Z))", 1, EDP.ReturnValue) Friend ReadOnly Property DateProvider As New CustomProvider(Function(v, d, p, n, e) ADateTime.ParseUnicode(v)) End Module diff --git a/SCrawler/API/Instagram/OptionsForm.Designer.vb b/SCrawler/API/Instagram/OptionsForm.Designer.vb index 5d83185..e1418bd 100644 --- a/SCrawler/API/Instagram/OptionsForm.Designer.vb +++ b/SCrawler/API/Instagram/OptionsForm.Designer.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -95,13 +95,13 @@ Namespace API.Instagram Me.ClientSize = New System.Drawing.Size(260, 78) Me.Controls.Add(CONTAINER_MAIN) Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle + Me.Icon = Global.SCrawler.My.Resources.SiteResources.InstagramIcon_32 Me.KeyPreview = True Me.MaximizeBox = False Me.MaximumSize = New System.Drawing.Size(276, 117) Me.MinimizeBox = False Me.MinimumSize = New System.Drawing.Size(276, 117) Me.Name = "OptionsForm" - Me.ShowIcon = False Me.ShowInTaskbar = False Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide Me.Text = "Options" diff --git a/SCrawler/API/Instagram/SettingsExchangeOptions.vb b/SCrawler/API/Instagram/SettingsExchangeOptions.vb new file mode 100644 index 0000000..3bcaa2a --- /dev/null +++ b/SCrawler/API/Instagram/SettingsExchangeOptions.vb @@ -0,0 +1,23 @@ +' Copyright (C) 2023 Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY +Namespace API.Instagram + Friend Structure SettingsExchangeOptions + Friend DownloadTimeline As Boolean + Friend DownloadStoriesTagged As Boolean + Friend DownloadSaved As Boolean + Friend Changed As Boolean + Friend Sub New(ByVal Source As SiteSettings) + With Source + DownloadTimeline = .DownloadTimeline + DownloadStoriesTagged = .DownloadStoriesTagged + DownloadSaved = .DownloadSaved + End With + End Sub + End Structure +End Namespace \ No newline at end of file diff --git a/SCrawler/API/Instagram/SiteSettings.vb b/SCrawler/API/Instagram/SiteSettings.vb index 410f718..6fe2ecf 100644 --- a/SCrawler/API/Instagram/SiteSettings.vb +++ b/SCrawler/API/Instagram/SiteSettings.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -10,24 +10,23 @@ Imports SCrawler.API.Base Imports SCrawler.Plugin Imports SCrawler.Plugin.Attributes Imports PersonalUtilities.Forms -Imports PersonalUtilities.Tools.WEB Imports PersonalUtilities.Functions.XML Imports PersonalUtilities.Functions.XML.Base Imports PersonalUtilities.Functions.RegularExpressions Imports Download = SCrawler.Plugin.ISiteSettings.Download Namespace API.Instagram - + Friend Class SiteSettings : Inherits SiteSettingsBase #Region "Declarations" #Region "Images" Friend Overrides ReadOnly Property Icon As Icon Get - Return My.Resources.InstagramIcon + Return My.Resources.SiteResources.InstagramIcon_32 End Get End Property Friend Overrides ReadOnly Property Image As Image Get - Return My.Resources.InstagramPic76 + Return My.Resources.SiteResources.InstagramPic_76 End Get End Property #End Region @@ -78,23 +77,23 @@ Namespace API.Instagram End Class #End Region #Region "Authorization properties" - + Friend ReadOnly Property Hash As PropertyValue - + Private Const HashSavedPosts_Text As String = "Hash 2" + Friend ReadOnly Property HashSavedPosts As PropertyValue - + Friend ReadOnly Property CSRF_TOKEN As PropertyValue - + Friend Property IG_APP_ID As PropertyValue - + Friend Property IG_WWW_CLAIM As PropertyValue - + Private Const SavedPostsUserName_Text As String = "Saved posts user" + Friend ReadOnly Property SavedPostsUserName As PropertyValue - Friend ReadOnly Property BaseAuthExists As Boolean - Get - Return Responser.Cookies.Count > 0 And ACheck(IG_APP_ID.Value) And ACheck(IG_WWW_CLAIM.Value) And ACheck(CSRF_TOKEN.Value) - End Get - End Property + Friend Overrides Function BaseAuthExists() As Boolean + Return If(Responser.Cookies?.Count, 0) > 0 And ACheck(IG_APP_ID.Value) And ACheck(IG_WWW_CLAIM.Value) And ACheck(CSRF_TOKEN.Value) + End Function Private Const Header_IG_APP_ID As String = "x-ig-app-id" Private Const Header_IG_WWW_CLAIM As String = "x-ig-www-claim" Private Const Header_CSRF_TOKEN As String = "x-csrftoken" @@ -138,11 +137,17 @@ Namespace API.Instagram Private ReadOnly Property TaggedNotifyLimitProvider As IFormatProvider #End Region +#Region "Download ready" + Friend ReadOnly Property DownloadTimeline As XMLValue(Of Boolean) + Friend ReadOnly Property DownloadStoriesTagged As XMLValue(Of Boolean) + Friend ReadOnly Property DownloadSaved As XMLValue(Of Boolean) +#End Region #Region "429 bypass" Private ReadOnly Property DownloadingErrorDate As XMLValue(Of Date) Friend Property LastApplyingValue As Integer? = Nothing Friend ReadOnly Property ReadyForDownload As Boolean Get + If SkipUntilNextSession Then Return False With DownloadingErrorDate If .ValueF.Exists Then Return .ValueF.Value.AddMinutes(If(LastApplyingValue, 10)) < Now @@ -186,7 +191,6 @@ Namespace API.Instagram End With End Sub #End Region - Private Initialized As Boolean = False #End Region #Region "Initializer" Friend Sub New(ByRef _XML As XmlFile, ByVal GlobalPath As SFile) @@ -204,6 +208,10 @@ Namespace API.Instagram If .ContainsKey(Header_IG_WWW_CLAIM) Then www_claim = .Item(Header_IG_WWW_CLAIM) End With End If + If Not .Cookies Is Nothing Then + .Cookies.ChangedAllowInternalDrop = False + .Cookies.Changed = False + End If End With Dim n() As String = {SettingsCLS.Name_Node_Sites, Site.ToString} @@ -216,6 +224,10 @@ Namespace API.Instagram IG_APP_ID = New PropertyValue(app_id, GetType(String), Sub(v) ChangeResponserFields(NameOf(IG_APP_ID), v)) IG_WWW_CLAIM = New PropertyValue(www_claim, GetType(String), Sub(v) ChangeResponserFields(NameOf(IG_WWW_CLAIM), v)) + DownloadTimeline = New XMLValue(Of Boolean)("DownloadTimeline", True, _XML, n) + DownloadStoriesTagged = New XMLValue(Of Boolean)("DownloadStoriesTagged", True, _XML, n) + DownloadSaved = New XMLValue(Of Boolean)("DownloadSaved", True, _XML, n) + RequestsWaitTimer = New PropertyValue(1000) RequestsWaitTimerProvider = New TimersChecker(100) RequestsWaitTimerTaskCount = New PropertyValue(1) @@ -239,11 +251,62 @@ Namespace API.Instagram UserRegex = RParams.DMS("[htps:/]{7,8}.*?instagram.com/([^/]+)", 1) ImageVideoContains = "instagram.com" End Sub - Friend Overrides Sub BeginInit() + Private Structure LatestValues + Friend Hash As String + Friend Hash2 As String + Friend Token As String + Friend AppID As String + Friend WwwClaim As String + Friend Exists As Boolean + Friend Sub New(ByVal Source As SiteSettings) + Exists = True + With Source + Hash = AConvert(Of String)(.Hash.Value, String.Empty) + Hash2 = AConvert(Of String)(.HashSavedPosts.Value, String.Empty) + With .Responser.Headers + If .ContainsKey(Header_CSRF_TOKEN) Then Token = .Item(Header_CSRF_TOKEN) + If .ContainsKey(Header_IG_APP_ID) Then AppID = .Item(Header_IG_APP_ID) + If .ContainsKey(Header_IG_WWW_CLAIM) Then WwwClaim = .Item(Header_IG_WWW_CLAIM) + End With + End With + End Sub + End Structure + Private LV As LatestValues = Nothing + Private ASO As SettingsExchangeOptions = Nothing + Friend Overrides Sub BeginEdit() + LV = New LatestValues(Me) + ASO = Nothing + MyBase.BeginEdit() End Sub - Friend Overrides Sub EndInit() - Initialized = True - MyBase.EndInit() + Friend Overrides Sub EndEdit() + LV = Nothing + ASO = Nothing + MyBase.EndEdit() + End Sub + Friend Overrides Sub Update() + If LV.Exists Then + Dim __lv As New LatestValues(Me) + If If(Responser.Cookies?.Count, 0) > 0 Then + Dim _cookiesChanged As Boolean = If(Responser.Cookies?.Changed, False) + If Not DownloadTimeline AndAlso (_cookiesChanged Or + (Not LV.Hash = __lv.Hash And Not __lv.Hash.IsEmptyString)) Then DownloadTimeline.Value = True + If Not DownloadSaved AndAlso (_cookiesChanged Or (Not LV.Hash2 = __lv.Hash2 And Not __lv.Hash2.IsEmptyString)) Then DownloadSaved.Value = True + If Not DownloadStoriesTagged AndAlso ( + _cookiesChanged Or ( + (Not LV.Hash = __lv.Hash Or Not LV.Token = __lv.Token Or Not LV.AppID = __lv.AppID Or Not LV.WwwClaim = __lv.WwwClaim) And + (Not __lv.Hash.IsEmptyString And Not __lv.Token.IsEmptyString And Not __lv.AppID.IsEmptyString And Not __lv.WwwClaim.IsEmptyString) + )) Then DownloadStoriesTagged.Value = True + End If + End If + If ASO.Changed Then + DownloadTimeline.Value = ASO.DownloadTimeline + DownloadStoriesTagged.Value = ASO.DownloadStoriesTagged + DownloadSaved.Value = ASO.DownloadSaved + End If + LV = Nothing + ASO = Nothing + If Not Responser.Cookies Is Nothing Then Responser.Cookies.Changed = False + MyBase.Update() End Sub #End Region #Region "PropertiesDataChecker" @@ -290,6 +353,37 @@ Namespace API.Instagram End If Return False End Function + + Private Function CheckSavedOptions(ByVal p As IEnumerable(Of PropertyData)) As Boolean + If p.ListExists Then + Const MsgTitle$ = "Saved posts credentials" + Dim __hash$ = String.Empty + Dim __name$ = String.Empty + Dim _OptionlErrorText$ = $"For download saved posts, you must to set both [{HashSavedPosts_Text}] and [{SavedPostsUserName_Text}]." + For i% = 0 To p.Count - 1 + Select Case p(i).Name + Case NameOf(HashSavedPosts) : __hash = p(i).Value + Case NameOf(SavedPostsUserName) : __name = p(i).Value + End Select + Next + If __hash = __name Then + If __hash.IsEmptyString Then + Return True + Else + MsgBoxE({$"[{HashSavedPosts_Text}] and [{SavedPostsUserName_Text}] for saved posts cannot be equal!", MsgTitle}, vbCritical) + End If + Else + If __hash.IsEmptyString Then + MsgBoxE({$"[{HashSavedPosts_Text}] not set.{vbCr}{_OptionlErrorText}", MsgTitle}, vbCritical) + ElseIf __name.IsEmptyString Then + MsgBoxE({$"[{SavedPostsUserName_Text}] not set.{vbCr}{_OptionlErrorText}", MsgTitle}, vbCritical) + Else + Return True + End If + End If + End If + Return False + End Function #End Region #Region "Plugin functions" Friend Overrides Function GetInstance(ByVal What As Download) As IPluginContentProvider @@ -303,11 +397,12 @@ Namespace API.Instagram Return Nothing End Function #Region "Downloading" + Friend Property SkipUntilNextSession As Boolean = False Friend Overrides Function ReadyToDownload(ByVal What As Download) As Boolean - If ActiveJobs < 2 AndAlso ReadyForDownload AndAlso BaseAuthExists Then + If ActiveJobs < 2 AndAlso Not SkipUntilNextSession AndAlso ReadyForDownload AndAlso BaseAuthExists() Then Select Case What - Case Download.Main : Return ACheck(Hash.Value) - Case Download.SavedPosts : Return ACheck(HashSavedPosts.Value) + Case Download.Main : Return ACheck(Hash.Value) And DownloadTimeline + Case Download.SavedPosts : Return ACheck(HashSavedPosts.Value) And DownloadSaved End Select End If Return False @@ -346,10 +441,11 @@ Namespace API.Instagram _NextTagged = True LastDownloadDate.Value = Now ActiveJobs -= 1 + SkipUntilNextSession = False End Sub #End Region - Friend Overrides Function GetSpecialDataF(ByVal URL As String) As IEnumerable(Of UserMedia) - Return UserData.GetVideoInfo(URL, Responser, Me) + Friend Overrides Function GetSpecialData(ByVal URL As String, ByVal Path As String, ByVal AskForPath As Boolean) As IEnumerable + Return UserData.GetVideoInfo(URL, Responser) End Function Friend Overrides Sub UserOptions(ByRef Options As Object, ByVal OpenForm As Boolean) If Options Is Nothing OrElse Not TypeOf Options Is EditorExchangeOptions Then Options = New EditorExchangeOptions(Me) @@ -357,6 +453,12 @@ Namespace API.Instagram Using f As New OptionsForm(Options) : f.ShowDialog() : End Using End If End Sub + Friend Overrides Sub OpenSettingsForm() + Using f As New AdditionalSettingsForm(If(ASO.Changed, ASO, New SettingsExchangeOptions(Me))) + f.ShowDialog() + If f.DialogResult = DialogResult.OK Then ASO = f.MyParameters + End Using + End Sub #End Region End Class End Namespace \ No newline at end of file diff --git a/SCrawler/API/Instagram/UserData.vb b/SCrawler/API/Instagram/UserData.vb index 0bdddbe..04b9e5a 100644 --- a/SCrawler/API/Instagram/UserData.vb +++ b/SCrawler/API/Instagram/UserData.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -6,15 +6,14 @@ ' ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY +Imports System.Net +Imports System.Threading Imports PersonalUtilities.Functions.XML Imports PersonalUtilities.Functions.Messaging Imports PersonalUtilities.Functions.RegularExpressions Imports PersonalUtilities.Tools.WEB Imports PersonalUtilities.Tools.WebDocuments.JSON Imports SCrawler.API.Base -Imports System.Net -Imports System.Threading -Imports System.Reflection Imports UTypes = SCrawler.API.Base.UserMedia.Types Namespace API.Instagram Friend Class UserData : Inherits UserDataBase @@ -70,41 +69,58 @@ Namespace API.Instagram End Sub #End Region #Region "Download data" + Private E560Thrown As Boolean = False Private Class ExitException : Inherits Exception + Friend Shared Sub Throw560(ByRef Source As UserData) + If Not Source.E560Thrown Then + MyMainLOG = $"{Source.ToStringForLog}: (560) Download skipped until next session" + Source.E560Thrown = True + End If + Throw New ExitException + End Sub + Friend Sub New() + End Sub Friend Sub New(ByRef CompleteArg As Boolean) CompleteArg = True End Sub End Class Protected Overrides Sub DownloadDataF(ByVal Token As CancellationToken) + Dim s As Sections = Sections.Timeline Try + ThrowAny(Token) _InstaHash = String.Empty HasError = False - If Not LastCursor.IsEmptyString Then - DownloadData(LastCursor, Sections.Timeline, Token) + Dim fc As Boolean = IIf(IsSavedPosts, MySiteSettings.DownloadSaved.Value, MySiteSettings.DownloadTimeline.Value) + If fc And Not LastCursor.IsEmptyString Then + s = IIf(IsSavedPosts, Sections.SavedPosts, Sections.Timeline) + DownloadData(LastCursor, s, Token) ThrowAny(Token) If Not HasError Then FirstLoadingDone = True End If - If Not HasError Then - DownloadData(String.Empty, Sections.Timeline, Token) + If fc And Not HasError Then + s = IIf(IsSavedPosts, Sections.SavedPosts, Sections.Timeline) + DownloadData(String.Empty, s, Token) ThrowAny(Token) If Not HasError Then FirstLoadingDone = True End If If FirstLoadingDone Then LastCursor = String.Empty If IsSavedPosts Then - DownloadPosts(Token) - ElseIf MySiteSettings.BaseAuthExists Then + If MySiteSettings.DownloadSaved Then s = Sections.SavedPosts : DownloadPosts(Token) + ElseIf MySiteSettings.BaseAuthExists() Then DownloadedTags = 0 - If GetStories Then DownloadData(String.Empty, Sections.Stories, Token) - If GetTaggedData Then DownloadData(String.Empty, Sections.Tagged, Token) + If MySiteSettings.DownloadStoriesTagged And GetStories Then s = Sections.Stories : DownloadData(String.Empty, s, Token) + If MySiteSettings.DownloadStoriesTagged And GetTaggedData Then s = Sections.Tagged : DownloadData(String.Empty, s, Token) End If If WaitNotificationMode = WNM.SkipTemp Or WaitNotificationMode = WNM.SkipCurrent Then WaitNotificationMode = WNM.Notify Catch eex As ExitException Catch ex As Exception - ProcessException(ex, Token, "[API.Instagram.UserData.DownloadDataF", False) + ProcessException(ex, Token, "[API.Instagram.UserData.DownloadDataF]", False, s) + Finally + E560Thrown = False End Try End Sub Private _InstaHash As String = String.Empty - Private Enum Sections : Timeline : Tagged : Stories : End Enum + Private Enum Sections : Timeline : Tagged : Stories : SavedPosts : End Enum Private Const StoriesFolder As String = "Stories" Private Const TaggedFolder As String = "Tagged" #Region "429 bypass" @@ -262,7 +278,7 @@ Namespace API.Instagram 'Create query Select Case Section - Case Sections.Timeline + Case Sections.Timeline, Sections.SavedPosts Dim vars$ = "{""id"":" & ID & ",""first"":50,""after"":""" & Cursor & """}" vars = SymbolsConverter.ASCII.EncodeSymbolsOnly(vars) URL = $"https://www.instagram.com/graphql/query/?query_hash={_InstaHash}&variables={vars}" @@ -303,7 +319,7 @@ Namespace API.Instagram n = j.ItemF(ENode).XmlIfNothing If n.Count > 0 Then Select Case Section - Case Sections.Timeline + Case Sections.Timeline, Sections.SavedPosts If n.Contains("page_info") Then With n("page_info") HasNextPage = .Value("has_next_page").FromXML(Of Boolean)(False) @@ -317,9 +333,7 @@ Namespace API.Instagram node = nn(0).XmlIfNothing If IsSavedPosts Then PostID = node.Value("shortcode") - If Not PostID.IsEmptyString Then - If _TempPostsList.Contains(PostID) Then Throw New ExitException(_DownloadComplete) 'Else _SavedPostsIDs.Add(PostID) - End If + If Not PostID.IsEmptyString AndAlso _TempPostsList.Contains(PostID) Then Throw New ExitException(_DownloadComplete) End If PostID = node.Value("id") Pinned = CBool(If(node("pinned_for_users")?.Count, 0)) @@ -373,7 +387,7 @@ Namespace API.Instagram Catch dex As ObjectDisposedException When Disposed Exit Do Catch ex As Exception - If DownloadingException(ex, $"data downloading error [{URL}]", Section, False) = 1 Then Continue Do Else Exit Do + If DownloadingException(ex, $"data downloading error [{URL}]", False, Section) = 1 Then Continue Do Else Exit Do End Try Loop Catch eex2 As ExitException @@ -381,7 +395,7 @@ Namespace API.Instagram Catch oex2 As OperationCanceledException When Token.IsCancellationRequested Or oex2.HelpLink = InstAborted If oex2.HelpLink = InstAborted Then HasError = True Catch DoEx As Exception - ProcessException(DoEx, Token, $"data downloading error [{URL}]") + ProcessException(DoEx, Token, $"data downloading error [{URL}]",, Section) End Try End Sub Private Sub DownloadPosts(ByVal Token As CancellationToken) @@ -432,23 +446,26 @@ Namespace API.Instagram Next End If _DownloadComplete = True + Catch eex As ExitException + Throw eex Catch oex As OperationCanceledException When Token.IsCancellationRequested Exit Do Catch dex As ObjectDisposedException When Disposed Exit Do Catch ex As Exception - If DownloadingException(ex, $"downloading saved posts error [{URL}]") = 1 Then Continue Do Else Exit Do + If DownloadingException(ex, $"downloading saved posts error [{URL}]", False, Sections.SavedPosts) = 1 Then Continue Do Else Exit Do End Try Loop + Catch eex2 As ExitException Catch oex2 As OperationCanceledException When Token.IsCancellationRequested Or oex2.HelpLink = InstAborted If oex2.HelpLink = InstAborted Then HasError = True Catch DoEx As Exception - ProcessException(DoEx, Token, $"downloading saved posts error [{URL}]") + ProcessException(DoEx, Token, $"downloading saved posts error [{URL}]",, Sections.SavedPosts) End Try End Sub #End Region #Region "Code ID converters" - Friend Shared Function CodeToID(ByVal Code As String) As String + Private Shared Function CodeToID(ByVal Code As String) As String Const CodeSymbols$ = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_" Try If Not Code.IsEmptyString Then @@ -658,7 +675,7 @@ Namespace API.Instagram End If Return Nothing Catch ex As Exception - DownloadingException(ex, "API.Instagram.GetStoriesList", Sections.Stories, False) + DownloadingException(ex, "API.Instagram.GetStoriesList", False, Sections.Stories) Return Nothing End Try End Function @@ -669,19 +686,24 @@ Namespace API.Instagram End Sub #End Region #Region "Exceptions" + ''' + ''' + Friend Overrides Sub ThrowAny(ByVal Token As CancellationToken) + If MySiteSettings.SkipUntilNextSession Then ExitException.Throw560(Me) + MyBase.ThrowAny(Token) + End Sub ''' - '''
+ '''
''' 1 - continue '''
- Protected Overloads Overrides Function DownloadingException(ByVal ex As Exception, ByVal Message As String, Optional ByVal FromPE As Boolean = False) As Integer - Return DownloadingException(ex, Message, Sections.Timeline, FromPE) - End Function - Private Overloads Function DownloadingException(ByVal ex As Exception, ByVal Message As String, ByVal s As Sections, ByVal FromPE As Boolean) As Integer + Protected Overrides Function DownloadingException(ByVal ex As Exception, ByVal Message As String, Optional ByVal FromPE As Boolean = False, + Optional ByVal s As Object = Nothing) As Integer If Responser.StatusCode = HttpStatusCode.NotFound Then UserExists = False ElseIf Responser.StatusCode = HttpStatusCode.BadRequest Then HasError = True MyMainLOG = $"Instagram credentials have expired [{CInt(Responser.StatusCode)}]: {ToString()} [{s}]" + DisableSection(s) ElseIf Responser.StatusCode = HttpStatusCode.Forbidden And s = Sections.Tagged Then Return 3 ElseIf Responser.StatusCode = 429 Then @@ -693,13 +715,27 @@ Namespace API.Instagram Caught429 = True MyMainLOG = $"Number of requests before error 429: {RequestsCount}" Return 1 + ElseIf Responser.StatusCode = 560 Then + MySiteSettings.SkipUntilNextSession = True Else MyMainLOG = $"Instagram hash requested [{CInt(Responser.StatusCode)}]: {ToString()} [{s}]" + DisableSection(s) If Not FromPE Then LogError(ex, Message) : HasError = True Return 0 End If Return 2 End Function + Private Sub DisableSection(ByVal Section As Object) + If Not IsNothing(Section) AndAlso TypeOf Section Is Sections Then + Dim s As Sections = DirectCast(Section, Sections) + Select Case s + Case Sections.Timeline : MySiteSettings.DownloadTimeline.Value = False + Case Sections.SavedPosts : MySiteSettings.DownloadSaved.Value = False + Case Else : MySiteSettings.DownloadStoriesTagged.Value = False + End Select + MyMainLOG = $"[{s}] downloading is disabled until you update your credentials".ToUpper + End If + End Sub #End Region #Region "Create media" Private Shared Function MediaFromData(ByVal t As UTypes, ByVal _URL As String, ByVal PostID As String, ByVal PostDate As String, @@ -713,14 +749,14 @@ Namespace API.Instagram End Function #End Region #Region "Standalone downloader" - Friend Shared Function GetVideoInfo(ByVal URL As String, ByVal r As Response, ByVal _Settings As SiteSettings) As IEnumerable(Of UserMedia) + Friend Shared Function GetVideoInfo(ByVal URL As String, ByVal r As Response) As IEnumerable(Of UserMedia) Try If Not URL.IsEmptyString AndAlso URL.Contains("instagram.com") Then Dim PID$ = RegexReplace(URL, RParams.DMS(".*?instagram.com/p/([_\w\d]+)", 1)) If Not PID.IsEmptyString AndAlso Not ACheck(Of Long)(PID) Then PID = CodeToID(PID) If Not PID.IsEmptyString Then Using t As New UserData - t.SetEnvironment(Settings(_Settings.GetType.GetCustomAttribute(Of Plugin.Attributes.Manifest)().GUID), Nothing, False, False) + t.SetEnvironment(Settings(InstagramSiteKey), Nothing, False, False) t.Responser = New Response t.Responser.Copy(r) t._SavedPostsIDs.Add(PID) @@ -731,7 +767,7 @@ Namespace API.Instagram End If Return Nothing Catch ex As Exception - Return ErrorsDescriber.Execute(EDP.ShowMainMsg + EDP.SendInLog, ex, "Instagram standalone downloader: fetch media error") + Return ErrorsDescriber.Execute(EDP.ShowMainMsg + EDP.SendInLog, ex, $"Instagram standalone downloader: fetch media error ({URL})") End Try End Function #End Region diff --git a/SCrawler/API/LPSG/Declarations.vb b/SCrawler/API/LPSG/Declarations.vb new file mode 100644 index 0000000..d7bc31f --- /dev/null +++ b/SCrawler/API/LPSG/Declarations.vb @@ -0,0 +1,37 @@ +' Copyright (C) 2023 Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY +Imports SCrawler.API.Base +Imports PersonalUtilities.Functions.RegularExpressions +Namespace API.LPSG + Friend Module Declarations + Friend ReadOnly Property PhotoRegEx As RParams = RParams.DM("(https://www.lpsg.com/attachments)(.+?)(?="")", 0, RegexReturn.List) + Friend ReadOnly Property PhotoRegExExt As New RParams("img.data.src=""(/proxy[^""]+?)""", Nothing, 1, RegexReturn.List) With { + .Converter = Function(Input) $"https://www.lpsg.com/{SymbolsConverter.HTML.Decode(Input)}"} + Friend ReadOnly Property NextPageRegex As RParams = RParams.DMS(" + Friend Class SiteSettings : Inherits Base.SiteSettingsBase + Friend Overrides ReadOnly Property Icon As Icon + Get + Return My.Resources.SiteResources.LPSGIcon_48 + End Get + End Property + Friend Overrides ReadOnly Property Image As Image + Get + Return My.Resources.SiteResources.LPSGPic_32 + End Get + End Property + Friend Sub New() + MyBase.New("LPSG", "www.lpsg.com") + UrlPatternUser = "https://www.lpsg.com/threads/{0}/" + UserRegex = RParams.DMS(".+?lpsg.com/threads/([^/]+)", 1) + End Sub + Friend Overrides Function GetInstance(ByVal What As ISiteSettings.Download) As IPluginContentProvider + Return New UserData + End Function + Friend Overrides Function Available(ByVal What As ISiteSettings.Download, ByVal Silent As Boolean) As Boolean + Return If(Responser.Cookies?.Count, 0) > 0 + End Function + End Class +End Namespace \ No newline at end of file diff --git a/SCrawler/API/LPSG/UserData.vb b/SCrawler/API/LPSG/UserData.vb new file mode 100644 index 0000000..2c3fff6 --- /dev/null +++ b/SCrawler/API/LPSG/UserData.vb @@ -0,0 +1,104 @@ +' Copyright (C) 2023 Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY +Imports System.Threading +Imports SCrawler.API.Base +Imports PersonalUtilities.Functions.XML +Imports PersonalUtilities.Functions.RegularExpressions +Imports UTypes = SCrawler.API.Base.UserMedia.Types +Imports Converters = PersonalUtilities.Functions.SymbolsConverter.Converters +Namespace API.LPSG + Friend Class UserData : Inherits UserDataBase + Private Const Name_LatestPage As String = "LatestPage" + Protected Overrides Sub LoadUserInformation_OptionalFields(ByRef Container As XmlFile, ByVal Loading As Boolean) + If Loading Then + LatestPage = Container.Value(Name_LatestPage) + Else + Container.Add(Name_LatestPage, LatestPage) + End If + End Sub + Private Property LatestPage As String = String.Empty + Private Enum Mode : Internal : External : End Enum + Protected Overrides Sub DownloadDataF(ByVal Token As CancellationToken) + Dim URL$ = String.Empty + Try + Responser.Error = EDP.ThrowException + + Dim NextPage$ + Dim r$ + Dim _LPage As Func(Of String) = Function() If(LatestPage.IsEmptyString, String.Empty, $"page-{LatestPage}") + + Do + URL = $"https://www.lpsg.com/threads/{Name}/{_LPage.Invoke}" + r = Responser.GetResponse(URL) + UserExists = True + UserSuspended = False + ThrowAny(Token) + If Not r.IsEmptyString Then + NextPage = RegexReplace(r, NextPageRegex) + UpdateMediaList(RegexReplace(r, PhotoRegEx), Mode.Internal) + UpdateMediaList(RegexReplace(r, PhotoRegExExt), Mode.External) + If NextPage = LatestPage Or NextPage.IsEmptyString Then Exit Do Else LatestPage = NextPage + Else + Exit Do + End If + Loop + + If _TempMediaList.ListExists And _ContentList.ListExists Then _ + _TempMediaList.RemoveAll(Function(m) _ContentList.Exists(Function(mm) mm.URL = m.URL)) + Catch ex As Exception + ProcessException(ex, Token, $"data downloading error [{URL}]") + End Try + End Sub + Private Sub UpdateMediaList(ByVal l As List(Of String), ByVal m As Mode) + If l.ListExists Then + Dim f As SFile + Dim u$ + Dim exists As Boolean + Dim r As RParams + Dim ude As New ErrorsDescriber(EDP.ReturnValue) + For Each url$ In l + If Not url.IsEmptyString Then u = SymbolsConverter.Decode(url, {Converters.HTML, Converters.ASCII}, ude) Else u = String.Empty + If Not u.IsEmptyString Then + exists = Not IsEmptyString(RegexReplace(u, FileExistsRegEx)) + If m = Mode.Internal Then + r = FileRegEx + Else + r = FileRegExExt + If Not exists Then + r = FileRegExExt2 + exists = Not IsEmptyString(RegexReplace(u, FileRegExExt2)) + End If + End If + If exists Then + f = CStr(RegexReplace(u, r)) + f.Path = MyFile.CutPath.PathNoSeparator + f.Separator = "\" + If f.Extension.IsEmptyString Then f.Extension = "jpg" + _TempMediaList.ListAddValue(New UserMedia With {.Type = UTypes.Picture, .URL = url, .File = f}, TempListAddParams) + End If + End If + Next + End If + End Sub + Protected Overrides Sub DownloadContent(ByVal Token As CancellationToken) + With Responser : .UseWebClient = True : .UseWebClientCookies = True : .ResetError() : End With + UseResponserClient = True + DownloadContentDefault(Token) + End Sub + Protected Overrides Function DownloadingException(ByVal ex As Exception, ByVal Message As String, Optional ByVal FromPE As Boolean = False, + Optional ByVal EObj As Object = Nothing) As Integer + If Responser.StatusCode = Net.HttpStatusCode.ServiceUnavailable Then + MyMainLOG = $"{ToStringForLog()}: LPSG not available" + Return 1 + Else + Return 0 + End If + End Function + End Class +End Namespace \ No newline at end of file diff --git a/SCrawler/API/Reddit/ChannelsCollection.vb b/SCrawler/API/Reddit/ChannelsCollection.vb index c101266..cd4f776 100644 --- a/SCrawler/API/Reddit/ChannelsCollection.vb +++ b/SCrawler/API/Reddit/ChannelsCollection.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -6,10 +6,10 @@ ' ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY +Imports System.Threading +Imports SCrawler.API.Base Imports PersonalUtilities.Tools Imports PersonalUtilities.Forms.Toolbars -Imports SCrawler.API.Base -Imports System.Threading Namespace API.Reddit Friend Class ChannelsCollection : Implements ICollection(Of Channel), IMyEnumerator(Of Channel), IChannelLimits, IDisposable Friend Shared ReadOnly Property ChannelsPath As SFile diff --git a/SCrawler/API/Reddit/M3U8.vb b/SCrawler/API/Reddit/M3U8.vb index 83cd0c6..4307d1a 100644 --- a/SCrawler/API/Reddit/M3U8.vb +++ b/SCrawler/API/Reddit/M3U8.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -130,7 +130,7 @@ Namespace API.Reddit End If If CachePath.Exists(SFO.Path) Then Dim p As New SFileNumbers(ConcatFile.Name,,, New ANumbers With {.Format = ANumbers.Formats.General}) - ConcatFile = SFile.Indexed_IndexFile(ConcatFile,, p, EDP.ThrowException) 'EDP.ReturnValue + ConcatFile = SFile.Indexed_IndexFile(ConcatFile,, p, EDP.ThrowException) Dim i% Dim eFiles As New List(Of SFile) Dim dFile As SFile = CachePath diff --git a/SCrawler/API/Reddit/RedditViewSettingsForm.Designer.vb b/SCrawler/API/Reddit/RedditViewSettingsForm.Designer.vb index 5e47cec..3d0816e 100644 --- a/SCrawler/API/Reddit/RedditViewSettingsForm.Designer.vb +++ b/SCrawler/API/Reddit/RedditViewSettingsForm.Designer.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -27,7 +27,6 @@ Namespace API.Reddit Dim TP_VIEW_MODE As System.Windows.Forms.TableLayoutPanel Dim LBL_VIEW_MODE As System.Windows.Forms.Label Dim LBL_PERIOD As System.Windows.Forms.Label - Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(RedditViewSettingsForm)) Me.OPT_VIEW_MODE_NEW = New System.Windows.Forms.RadioButton() Me.OPT_VIEW_MODE_HOT = New System.Windows.Forms.RadioButton() Me.OPT_VIEW_MODE_TOP = New System.Windows.Forms.RadioButton() @@ -266,7 +265,7 @@ Namespace API.Reddit Me.ClientSize = New System.Drawing.Size(477, 112) Me.Controls.Add(CONTAINER_MAIN) Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle - Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.Icon = Global.SCrawler.My.Resources.SiteResources.RedditIcon_128 Me.KeyPreview = True Me.MaximizeBox = False Me.MaximumSize = New System.Drawing.Size(493, 151) diff --git a/SCrawler/API/Reddit/RedditViewSettingsForm.resx b/SCrawler/API/Reddit/RedditViewSettingsForm.resx index cdb3e14..d19222f 100644 --- a/SCrawler/API/Reddit/RedditViewSettingsForm.resx +++ b/SCrawler/API/Reddit/RedditViewSettingsForm.resx @@ -132,1137 +132,4 @@ False - - - - AAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAABAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAEb/AABG/wMARv8PAEX/IgBF/0AARf9fAEX/fQBF/5wARf+6AEX/zQBF - /90ARf/rAEX/8wBF//gARf/8AEX//ABF//gARf/zAEX/6wBF/90ARf/NAEX/ugBF/5wARf99AEX/XwBF - /0AARf8iAEb/DwBG/wMARv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABH/wAAR/8DAEb/FABG/zQARf9dAEX/iwBF - /7MARf/RAEX/5wBF//QARf/6AEX//gBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//gBF//oARf/0AEX/5wBF/9EARf+zAEX/iwBF/10ARv80AEb/FABH - /wMAR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASf8AAD//AABG - /wYARv8iAEX/UwBF/4sARf/AAEX/5QBF//cARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX/9wBF/+UARf/AAEX/iwBF/1MARv8iAEb/BgA//wAASf8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAARv8AAEb/AwBF/x4ARv9WAEX/mQBF/9MARf/0AEX//gBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf/+AEX/9ABF/9MARf+ZAEb/VgBF/x4ARv8DAEb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABH/wAAJv8AAEb/DABF/zsARf+FAEX/zABF - //QARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/0AEX/zABF - /4UARf87AEb/DAAm/wAAR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABH - /wAASv8AAEb/EwBF/1AARf+nAEX/5gBF//0ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//QBF/+YARf+nAEX/UABG/xMASv8AAEf/AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABH/wAAT/8AAEb/FABF/1oARf+3AEX/8ABF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf/wAEX/twBF/1oARv8UAE//AABH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABI/wAAQ/8AAEX/DgBF - /1QARf+2AEX/8gBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/8gBF - /7YARf9UAEX/DgBD/wAASP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAARv8AAEb/BgBG/z4ARf+mAEX/8ABF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//AARf+mAEb/PgBG/wYARv8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR/8AAFP/AABG/yAARf+FAEX/4wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf/jAEX/hQBG/yAAU/8AAEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAEb/AABG/wkARf9SAEX/wwBF//sARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/7AEX/wwBF - /1IARv8JAEb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEf/AAA8/wAARv8eAEX/igBF/+sARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/6wBF/4oARv8eADz/AABH/wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABG - /wAARv8DAEX/QABF/7sARf/7AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/+wBF/7sARf9AAEf/AwBG/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARv8AAEb/CgBF/2MARf/cAEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF/9wARf9jAEb/CgBG - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARf8AAEX/AABF - /xUARf+HAEX/7wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF/+8ARf+HAEX/FQBF/wAARf8AAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAEf/AABD/wAARf8hAEX/oQBF//gARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //gARf+hAEX/IQBD/wAAR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABH/wAAQv8AAEb/LQBF - /7UARf/8AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//wARf+1AEX/LQBB/wAAR/8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAR/8AAD3/AABG/zMARf/AAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf/AAEb/MwA9/wAAR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEf/AAA8/wAARf83AEX/xgBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/GAEX/NwA8 - /wAAR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAABG/wAAQ/8AAEb/MwBF/8YARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/GAEb/MwBD/wAARv8AAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR/8AAET/AABF/ywARf/AAEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf/AAEX/LABE/wAAR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAEX/AABF/wAARf8hAEX/tQBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf+1AEX/IQBF/wAARf8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARf8AAEX/FQBF/6EARf/9AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//0ARf+hAEX/FQBF/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAEX/AABG/woARf+HAEX/+QBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//kARf+HAEb/CgBF - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABG/wAASP8CAEX/YwBF/+4ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF/+4ARf9jAEj/AgBG/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAARv8AAEP/AABF/0AARf/cAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AET//wBE//8AQ///AEP//wBC//8AQv//AEP//wBD//8AQ///AEP//wBC//8AQv//AEP//wBD - //8ARP//AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - /9wARf9AAEP/AABG/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABF/wAARf8eAEX/uwBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AET//wBD//8AQ///AUT//wZJ//8QUP//HFn//yxk//87b///SHj//1F/ - //9Xhf//W4f//1uH//9Xhf//UX///0h4//87b///K2T//xxZ//8QUP//Bkn//wFE//8AQ///AEP//wBE - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF/7sARf8eAEX/AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAARv8AAEf/CABF/4oARf/7AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8AQ///AEP//wNG//8RUf//L2f//1WC - //97n///n7j//7vN///Q3f//4en//+rw///x9f//9ff///b5///3+f//9/n///b5///19///8fX//+rw - ///g6f//0N3//7rM//+euP//e57//1SB//8uZv//EVH//wNG//8AQ///AEP//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/+wBF/4oAR/8IAEb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEb/AABC/wAARf9TAEX/6wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE - //8AQ///Bkn//yNe//9Wg///i6r//7vO///h6f//9fj///7+//////////////////////////////// - ///////////////////////////////////////////////////////////////////9/v//9fj//+Hp - //+6zf//iqn//1WC//8iXf//Bkn//wBD//8ARP//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/6wBF/1MAQv8AAEb/AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAARf8AAEX/IABF/8MARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBD//8CRf//HVn//1eE//+atf//1N////X3//////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////9Pf//9Pf//+ZtP//VoP//xxZ - //8CRf//AEP//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX/wwBF/yAARf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEb/AABH/wUARf+FAEX//ABF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBD//8GSP//MGf//3uf - ///J1///9Pf///////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////09///x9b//3qd//8uZv//Bkj//wBD//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/8AEX/hQBG - /wUARv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABI - /wAARP8AAEb/PgBF/+IARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBD//8FR///MWj//42s///d5v///P3///////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////+/z//9zl//+Lqv//L2f//wRH//8AQ///AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/iAEX/PgBE/wAASP8AAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEX/AABG/w4ARf+lAEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE//8BRP//JmD//4Sl///b5f///f7///// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////39///a5P//gqT//yRf - //8BRP//AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf+lAEb/DgBF/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABH - /wAAQv8AAEX/VABF/+8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8AQ///DU3//1+K///M2v///P3///////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////7/P//ytn//1yI//8MTf//AEP//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF/+8ARf9UAEL/AABH/wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEb/AABG/xQARf+1AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AET//yZf//+ZtP//8fX///////////////////// - //////////////////////////////////////////////////////////////////////////////39 - ///09///6O7//9vl///O2///xNT//77Q//++0P//w9P//87b///b5f//6O7///T3///9/f////////// - //////////////////////////////////////////////////////////////////////////////// - ////////8PT//5ez//8kXv//AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF/7UARv8UAEb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABG - /wAARP8AAEX/WgBF//MARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AET//wJF - //9Cdf//xNP///39//////////////////////////////////////////////////////////////// - ///////////////////9/v//7fL//8nX//+dt///dZr//1KA//84bP//JV///xtY//8VVP//ElL//xFS - //8VVP//Glj//yVf//83bP//UoD//3SZ//+dt///yNf//+zx///9/v////////////////////////// - /////////////////////////////////////////////////////////f3//8HS//9Ac///AkX//wBE - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/8wBF/1oARP8AAEb/AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEX/AABF/xMARf+3AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBE//8FR///WYb//9zl//////////////////////////////// - ///////////////////////////////////////////////////4+v//y9n//4Sl//9Ddf//GVf//wZJ - //8ARP//AEP//wBD//8AQ///AEP//wBD//8ARP//AET//wBD//8AQ///AEP//wBD//8AQv//AET//wZJ - //8ZVv//QnT//4Ok///K2P//9/n///////////////////////////////////////////////////// - /////////////////////////////9rk//9Wg///BEf//wBE//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX/twBF/xMARf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABH - /wAARP8AAEX/UABF//AARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//Bkj//2SN - ///m7f////////////////////////////////////////////////////////////////////////// - ///8/f//zNn//2qS//8fW///A0b//wBD//8ARP//AET//wBD//8AQv//AEP//wFF//8ER///CEr//wlL - //8JS///CEn//wRH//8BRf//AEP//wBC//8AQ///AET//wBE//8AQ///A0b//x5a//9okf//ytj///v8 - /////////////////////////////////////////////////////////////////////////////+Tr - //9hi///BUf//wBE//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/wAEX/UABE - /wAAR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEX/AABG/wwARf+nAEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wNG//9gi///6O7///////////////////////////////////// - ////////////////////////////////////////8vX//5Sw//8lX///AUT//wBD//8ARP//AEP//wJF - //8PT///KGL//0l5//9nkP//gqT//5ay//+kvP//q8H//6vB//+kvP//lrL//4Ok//9nkf//Snr//yli - //8PT///AkX//wBD//8ARP//AEP//wFE//8kXv//ka7///H1//////////////////////////////// - /////////////////////////////////////////////+bt//9diP//A0b//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf+nAEb/DABF/wAAAAAAAAAAAAAAAAAAAAAAAAAAAABI - /wAARf8AAEX/OwBF/+YARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//Tn3//+Hp - //////////////////////////////////////////////////////////////////////////////H1 - //93m///DE3//wBD//8ARP//AEP//w1O//88cP//faD//7bJ///c5f//8fX///r7//////////////// - //////////////////////////////r8///x9f//3Ob//7bK//9+of//PXH//w5O//8AQ///AET//wBD - //8LTP//dJn///D0//////////////////////////////////////////////////////////////// - /////////////+Do//9Le///AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - /+YARf87AEX/AABG/wAAAAAAAAAAAAAAAAAAAAAAAEb/AABH/wMARf+FAEX//gBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEP//zBn///P3P////////////////////////////////////////// - ////////////////////////////////////////uMv//xFQ//8AQ///AET//wpL//9MfP//qsH//+fu - ///9/f////////////////////////////////////////////////////////////////////////// - //////////////3+///o7v//rML//059//8KS///AET//wBD//8QTv//tMj///////////////////// - /////////////////////////////////////////////////////////////8za//8tZf//AEP//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//gBF/4UASP8DAEb/AAAAAAAAAAAAAAAAAAAA - AAAARf8AAEX/HgBF/8wARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE//8SUf//pr7///// - //////////////////////////////////////////////////////////////////////////////// - //++z///F1T//wBB//8ZVv//i6r//+vw//////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////7PH//46s - //8aV///AEL//xVT//+7zf////////////////////////////////////////////////////////// - /////////////////////////////6O8//8QUP//AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/zABG/x4ARv8AAAAAAAAAAAAAAAAAAEb/AABF/wAARf9WAEX/9ABF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AUX//2eQ///19/////////////////////////////////////////// - //////////////////////////////////////////////X4//+euP//aZH//7DF///5+/////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////+vv//7LH//9pkf//m7b///X3//////////////// - ////////////////////////////////////////////////////////////////////////8/b//2ON - //8ARP//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/0AEX/VgBF/wAARv8AAAAAAAAA - AAAARv8AAEb/BgBF/5kARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBD//8kXv//zdr///// - //////////////////////////////////////////////////////////////////////////////// - //////////////7+///7/P///v////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////v8///+/v////////////////////////////////////////////////////////// - ////////////////////////////////////////ytj//yFd//8ARP//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf+ZAEb/BgBG/wAAAAAAAAAAAABF/wAARv8iAEX/0wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AUX//3ab///7/P////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///6/P//cpj//wFF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF/9MARv8iAEX/AAAA - AAAAR/8AAEX/AABF/1MARf/0AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE//8bWP//yNf///// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////E1P//GVf//wBE//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX/9ABF/1MARf8AAEf/AABG/wAASP8DAEX/iwBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEP//1SB///z9v////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////L1//9Qfv//AEP//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/iwBI - /wMARv8AAEb/AABG/xQARf/AAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ER///k6////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////46s//8DR///AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/AAEb/FABG/wAARf8AAEb/NABF/+UARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AET//xVU///D0/////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////v9D//xNS//8ARP//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - /+UARv80AEX/AABF/wAARf9cAEX/+ABF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8AQ///LmX//+Hp - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////f5///KmP//wBD - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/+ABF/1wARf8AAEj/AwBF/4sARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBC//9Gd///8PT///////////////////////////////////// - //////////////////////////////////////////////////////////////X3///Q3f//r8T//6a+ - //+4y///3uf///v8//////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////+/z//97n//+3y///pr3//67E - ///Q3f//9ff///////////////////////////////////////////////////////////////////// - /////////////////////////////+/z//9DdP//AEL//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/iwBI/wMARv8PAEX/swBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEP//1WD - ///2+P////////////////////////////////////////////////////////////////////////// - //////////////3+///H1v//YIv//x9b//8LTP//CEr//w5P//8uZv//gaP//+Lq//////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////+Lq//+Bo///Lmb//w5P//8ISv//C0z//x9b//9giv//x9b///39//////////////// - ////////////////////////////////////////////////////////////////////////9ff//1GA - //8AQv//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf+zAEb/DwBF/yIARf/RAEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8AQ///XIj///j6//////////////////////////////// - ///////////////////////////////////////////////////9/v//rcP//ydh//8AQ///AEP//wBE - //8ARP//AET//wBD//8ER///S3z//9bh//////////////////////////////////////////////// - ///////////////////////////////////////////////////W4f//S3v//wRH//8AQ///AET//wBE - //8ARP//AEP//wBD//8mYP//rcL///3+//////////////////////////////////////////////// - ///////////////////////////////////3+f//WIX//wBD//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF/9EARf8iAEX/QABF/+cARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBD - //9Yhf//9/n///////////////////////////////////////////////////////////////////// - /////////////8fW//8nYf//AEP//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE//8ARP//VoP//+vx - //////////////////////////////////////////////////////////////////////////////// - ////////6/H//1aD//8ARP//AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBD//8nYP//x9b///// - //////////////////////////////////////////////////////////////////////////////b4 - //9Ugv//AEL//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/5wBF/0AARf9fAEX/8wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEH//0p5///y9v////////////////////////// - ///////////////////////////////////////////////////1+P//YIv//wBD//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBE//8LTP//oLn///////////////////////////////////// - //////////////////////////////////////////////////+guf//C0z//wBE//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBD//9gi///9fj///////////////////////////////////// - ////////////////////////////////////////8fX//0d2//8AQf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf/zAEX/XwBF/30ARf/6AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBD - //8PT///dZr///X4//////////////////////////////////////////////////////////////// - /////////////9Dd//8fW///AEP//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBD - //9Ugf//9Pf///////////////////////////////////////////////////////////////////// - ////////9Pf//1SB//8AQ///AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEP//x9b - ///Q3f////////////////////////////////////////////////////////////////////////// - ///09///dZr//xFQ//8AQ///AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//oARf99AEX/nABF - //4ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//K2T//6W9///y9v////////////////////////// - ////////////////////////////////////////////////////////r8T//wtM//8ARP//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEP//y9m///j6/////////////////////////// - ///////////////////////////////////////////////////j6///L2b//wBD//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//C0z//6/E//////////////////////////////// - ///////////////////////////////////////////////////z9v//qL///y1l//8ARP//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//gBF/5wARf+6AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AET//zBn - ///C0v////////////////////////////////////////////////////////////////////////// - //////////////////+mvv//CEr//wBE//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8AQ///JmD//97n//////////////////////////////////////////////////////////////// - /////////////97n//8mYP//AEP//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE - //8ISv//pr7///////////////////////////////////////////////////////////////////// - ////////////////////////xNT//zNp//8ARP//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/ugBF - /84ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBE//8aV///s8f///////////////////////////////////// - /////////////////////////////////////////////////////////////7jL//8PT///AET//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBD//84bf//6O7///////////////////// - ////////////////////////////////////////////////////////6O7//zht//8AQ///AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AET//w9P//+4y/////////////////////////// - ////////////////////////////////////////////////////////////////////////tsr//xxY - //8ARP//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/OAEX/3QBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//Akb//3Wa - ///6+/////////////////////////////////////////////////////////////////////////// - ////////////////////////3uf//y9m//8AQ///AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEP//2mR///5+/////////////////////////////////////////////////////////// - ///////////////////5+///aZH//wBD//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8AQ///L2b//97n//////////////////////////////////////////////////////////////// - ///////////////////////////////////6/P//eZ3//wJG//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - /90ARf/rAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBE//8fW///zdr///////////////////////////////////// - ///////////////////////////////////////////////////////////////////8/f//gqP//wRH - //8ARP//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBD//8aVv//vc////////////////////// - //////////////////////////////////////////////////////////////////+9z///Glb//wBD - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AET//wRH//+Co////P3///////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///Q3P//Il3//wBD//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/6wBF//MARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEP//1KA - ///09/////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////i6v//THz//wBE//8ARP//AEX//wBF//8ARf//AEX//wBF - //8AQ///Ckv//4Kk///5+v////////////////////////////////////////////////////////// - //////////////////////////////n6//+CpP//Ckv//wBD//8ARf//AEX//wBF//8ARf//AEX//wBE - //8ARP//THz//+Lq//////////////////////////////////////////////////////////////// - //////////////////////////////////////////////X4//9Wg///AEP//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf/zAEX/+ABF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//faD///////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///X4f//VoP//wpM//8AQv//AEP//wBD//8AQ///AEP//xlW//+CpP//7/T///////////////////// - /////////////////////////////////////////////////////////////////////////////+/0 - //+CpP//GVb//wBD//8AQ///AEP//wBD//8AQ///Ckz//1aD///X4f////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////4Kj//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//gARf/8AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wRH - //+UsP////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////s8f//oLn//1SB//8vZv//JmD//zht - //9okf//vc////j6//////////////////////////////////////////////////////////////// - //////////////////////////////////////////////j6//+9z///aJH//zht//8mYP//L2b//1SB - //+guf//6/H///////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////mLP//wVH//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//ABF//wARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//BEf//5ay//////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////9Pf//+Pr///e5///6O7///n7//////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////5+///6O7//97n///j6///9Pf///////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////+atf//BUj//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/8AEX/+ABF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARP//f6L///////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////4Ol//8BRf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//gARf/zAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBD//9Ugv//9Pf///////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////2+P//WIT//wBD//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/8wBF/+sARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEP//yBc///O2/////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////9Hd//8jXv//AEP//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf/rAEX/3QBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//Akb//3ic///6+/////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////7/P//e5///wNG//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF/90ARf/OAEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARP//G1j//7XJ//////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////7jL//8dWf//AET//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX/zgBF/7oARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//Mmn//8TU - /////////////////////////////////////////////////////////////+vw///a5P///P3///// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////+/z//9jj///q7/////////////////////////////////////////// - ///////////////////H1v//NWv//wBE//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf+6AEX/nABF - //4ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//LmX//6i////z9/////////////////////////// - //////////////z9///Q3P//Wob//y1l//+Usf//7fL///////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////+zx//+Sr///K2T//1eE - ///O2////P3////////////////////////////////////////09///q8H//zBn//8ARP//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//gBF/5wARf99AEX/+gBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8AQ///ElH//12I//+wxf//4On///P2///3+f//9fj//+rw///H1v//gKL//yli//8BRf//AEP//wtM - //9Ugv//vc7///f5//////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////b4//+7zf//UoH//wpL//8AQ///AUX//yhh//9+of//x9b//+rw///1+P//9/n///P2 - ///h6f//ssb//1+K//8TUv//AEP//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/6AEX/fQBF - /18ARf/0AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//AET//w5P//8uZv//THz//1mG - //9Tgf//O2///xlX//8DRv//AEP//wBF//8ARf//AET//wBE//8YVv//aZH//8jX///3+f////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////f5///H1v//Z5D//xdV//8ARP//AET//wBF - //8ARf//AEP//wNG//8YVv//O2///1OB//9Zhv//TXz//y9m//8PT///AET//wBE//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//MARf9fAEX/QABF/+cARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AET//wBD//8AQv//AEP//wBC//8AQ///AET//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBE//8BRP//Hlr//2WO//+6zP//8PT///////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////////+/0 - //+5zP//ZI3//x1Z//8BRP//AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE//8AQ///AEL//wBD - //8AQv//AEP//wBE//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/5wBF - /0AARf8iAEX/0QBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//AET//xRT - //9Nff//lbH//9Pf///2+P////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////9vj//9Le//+TsP//THz//xRT//8ARP//AET//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/RAEX/IgBG/w8ARf+zAEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AET//wBD//8FSP//I17//1qG//+Usf//x9b//+rw - ///6/P////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////r7///r8P//x9b//5Sw//9Zhf//I13//wVI - //8AQ///AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - /7MARv8PAEb/AwBF/4sARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8AQ///AEP//wVH//8YVv//PnH//2iR//+Sr///uMv//9fi///p7///9Pf///r7 - ///+/v/////////////////////////////////////////////+/v//+vv///P2///n7v//1uH//7nM - //+Sr///Z5D//z5x//8YVv//BUf//wBD//8AQ///AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/iwBI/wMARf8AAEX/XABF//gARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE - //8AQ///AEP//wRH//8PUP//Il3//zlu//9Qf///ZY///3id//+IqP//kq///8fW///+/v///////+7y - //+guf//iKj//3qd//9mj///Tn3//zZr//8hXP//EFD//wRH//8AQ///AEP//wBE//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //gARf9cAEX/AABF/wAARv80AEX/5QBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE//8AQ///AEP//wBC - //8AQ///AET//wFF//8BRf//YIr///j6////////4+v//zNp//8AQ///AET//wBD//8AQv//AEP//wBD - //8ARP//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/5QBG/zQARf8AAEb/AABG/xQARf/AAEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBC//84bf//6O7///// - ///1+P//VYL//wBC//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf/AAEb/FABG/wAARv8AAEj/AwBF/4sARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AET//xpY///M2f////////////9/of//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF/4sASP8DAEb/AABH/wAARf8AAEX/UwBF - //QARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//CUv//6e+ - /////////////6rA//8KS///AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf/0AEX/UwBF/wAAR/8AAAAAAABF/wAARv8iAEX/0wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//fJ////7+////////ztv//xxZ//8ARP//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF/9MARv8iAEX/AAAAAAAAAAAAAEb/AABH - /wYARf+ZAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBD - //9SgP//9Pf////////p7///Om///wBD//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/mQBH/wYARv8AAAAAAAAAAAAAR/8AAEX/AABG/1YARf/0AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEP//y5m///h6f////////j6//9hi///AEP//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//QARv9WAEX/AABH/wAAAAAAAAAAAAAA - AAAARf8AAEX/HgBF/8wARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARP//FFP//8LS/////////////4yr//8CRv//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/zABG/x4ARv8AAAAAAAAAAAAAAAAAAAAAAABG/wAAR/8DAEX/hQBF//4ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8GSP//m7b/////////////tcn//w5P - //8ARP//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//4ARf+FAEj/AwBG/wAAAAAAAAAAAAAA - AAAAAAAAAEj/AABF/wAARf87AEX/5gBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBD//9vlv///P3////////X4v//JF7//wBD//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE//8AQ///Akb//wZI - //8ER///AEP//wBD//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/5gBF/zsARf8AAEb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEX/AABG/wwARf+nAEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEL//0d4///w9P///////+/z - //9Fdv//AEL//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARP//F1X//1KA//+IqP//nrj//5Sw//9qkv//KmP//wNG//8ARP//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf+nAEb/DABF/wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAR/8AAET/AABF/1EARf/wAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8AQ///JV///9nj////////+/z//22U//8AQ///AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//A0b//0V3//+6zP//8/b///// - //////////////r8///V4P//b5X//w5O//8ARP//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/8ABF/1EARP8AAEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARf8AAEb/EwBF - /7cARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE//8PT///t8r///// - ////////mbT//wVI//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//9Nff//3eb////////////////////////////////////////09///haX//wtM - //8ARP//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf+3AEb/EwBF/wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABH/wAAQv8AAEX/WgBF//MARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wNG//+Prf/////////////A0f//E1L//wBE//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8AQ///JWD//8rZ//////////////// - ///////////////////////////////////v8///Wob//wBE//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/8wBF/1oAQv8AAEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABG - /wAARv8UAEX/tQBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEP//2ON - ///5+////////+Do//8sZf//AEP//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//92m////P3///////////////////////////////////////////////////// - //+7zf//FFP//wBE//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf+1AEb/FABG/wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEf/AABC/wAARf9UAEX/7wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8AQ///PHD//+vw////////9Pf//1B///8AQ///AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE//8AQv//Dk3//7XJ//////////////// - /////////////////////////////////////////////+rw//88cP//AEP//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/7wBF/1QAQv8AAEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAEX/AABG/w4ARf+lAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE - //8dWv//0N3////////+/v//ep3//wBE//8ARf//AEX//wBF//8ARf//AEX//wBE//8ARP//AEP//wBD - //8DRv//Dk///yNe//9Xg///3+f///////////////////////////////////////////////////// - ////////9vj//1aD//8AQ///AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf+lAEb/DgBF/wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASP8AAET/AABF/z4ARf/iAEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AET//wpM//+swv////////////+lvf//CEr//wBE - //8ARP//AEP//wBC//8BRf//Ckz//xxZ//87b///Yoz//42s//+2yv//2OP///D0///+/v////////// - ///////////////////////////////////////////////////2+P//VoP//wBD//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/4gBF/z4ARP8AAEj/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAARv8AAEb/BQBF/4UARf/8AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AUX//4Kj/////////////8rY//8ZVv//BUj//xZV//8xaP//VoP//4Ci//+rwf//z9z//+rv - ///5+v////////////////////////////////////////////////////////////////////////// - /////////////+rw//88cP//AEP//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//wARf+FAEb/BQBG/wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARf8AAEb/IABF - /8MARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8AQv//V4T///b4////////7fL//5Cu - //+dt///xdX//+Tr///1+P///v7///////////////////////////////////v8///u8///5+3///z9 - ////////////////////////////////////////////////////////u83//xRT//8ARP//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/wwBG/yAARf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABH/wAAP/8AAEX/UwBF/+sARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBD//8yaf//5Ov//////////////v7///////////////////////////////////3+ - ///09///4On//8HR//+atf//bpX//0R2//9Bc///y9n///////////////////////////////////// - /////////////+/z//9ahv//AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF/+sARf9TAD//AABH/wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABG - /wAAR/8IAEX/igBF//sARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AET//xZV///F1f////////// - ///////////////////3+f//5+7//8vZ//+mvv//e57//1F///8tZf//FFP//wVI//8AQ///AEL//wBD - //9Nff//3eb////////////////////////////////////////09///haX//wtM//8ARP//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf/7AEX/igBH/wgARv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABF/wAARf8eAEX/uwBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//BEf//3ic///t8v//7fL//9Xg//+xxv//iKj//12I//83bP//Glf//wlK - //8BRP//AEP//wBD//8ARP//AEX//wBF//8ARf//AEX//wNG//9Gd///us3///P3//////////////// - ///6/P//1eD//2+V//8OTv//AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF/7sARf8eAEX/AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAEb/AABD/wAARf9AAEX/3ABF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//Dk7//0J0 - //9Bc///IVz//wxN//8CRv//AEP//wBD//8ARP//AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBE//8YVf//VIL//4io//+dt///lLD//2qS//8qY///A0b//wBE//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf/cAEX/QABD/wAARv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEb/AABI/wIARf9jAEX/7gBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//AEP//wBD//8AQ///AET//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE//8AQ///AkX//wZI - //8ER///AEP//wBD//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/7gBF/2MASP8CAEb/AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAEX/AABG/woARf+HAEX/+QBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //kARf+HAEb/CgBF/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEX/AABF - /xUARf+hAEX//QBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/9AEX/oQBF/xUARf8AAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARf8AAEX/AABF/yEARf+1AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - /7UARf8hAEX/AABF/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAR/8AAET/AABG/ywARf/AAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/AAEX/LABE/wAAR/8AAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARv8AAEP/AABG/zMARf/GAEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/xgBG - /zMAQ/8AAEb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAR/8AADz/AABF/zcARf/GAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF/8YARf83ADz/AABH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR/8AAD3/AABG - /zMARf/AAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/AAEb/MwA9 - /wAAR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR/8AAEH/AABF/y0ARf+1AEX//ABF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf/8AEX/tQBF/y0AQf8AAEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAR/8AAEP/AABF/yEARf+hAEX/+ABF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/+ABF/6EARf8hAEP/AABH - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARf8AAEX/AABF/xUARf+HAEX/7wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF/+8ARf+HAEX/FQBF/wAARf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAEb/AABG/woARf9jAEX/3ABF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/cAEX/YwBG/woARv8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEb/AABH - /wMARf9AAEX/uwBF//sARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf/7AEX/uwBF/0AAR/8DAEb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEf/AAA8/wAARv8eAEX/igBF/+sARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/6wBF/4oARv8eAD//AABH/wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAABG/wAARv8JAEX/UgBF/8MARf/7AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/+wBF - /8MARf9SAEb/CQBG/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABG/wAASP8AAEX/IABF - /4UARf/jAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF/+MARf+FAEX/IABI/wAARv8AAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARv8AAEb/BgBG/z4ARf+mAEX/8ABF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//AARf+mAEb/PgBG - /wYARv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAASP8AAEP/AABF/w4ARf9UAEX/tQBF//IARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//IARf+1AEX/VABF/w4AQ/8AAEj/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEf/AABP/wAARv8UAEX/WgBF - /7cARf/wAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//AARf+3AEX/WgBG/xQAT/8AAEf/AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABF/wAARP8AAEX/EwBF/1AARf+nAEX/5gBF//0ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//QBF - /+YARf+nAEX/UABF/xMARP8AAEX/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAR/8AACf/AABG/wwARf87AEX/hQBF/8wARf/0AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX/9ABF/8wARf+FAEX/OwBG/wwAJ/8AAEf/AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABG/wAAR/8DAEb/HgBF - /1YARf+YAEX/0wBF//QARf/+AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//4ARf/0AEX/0wBF/5gARf9WAEb/HgBH - /wMARv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASf8AAD//AABG/wYARv8iAEX/UwBF/4sARf/AAEX/5QBF - //cARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/9wBF - /+UARf/AAEX/iwBF/1MARv8iAEb/BgA//wAASf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAR/8AAEf/AwBG/xQARv80AEX/XQBF/4sARf+zAEX/0QBF/+cARf/0AEX/+gBF - //4ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //4ARf/6AEX/9ABF/+cARf/RAEX/swBF/4sARf9dAEb/NABG/xQAR/8DAEf/AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAR/8AAEf/AwBG/w8ARf8iAEX/QABF/18ARf99AEX/nABF/7oARf/NAEX/3QBF/+sARf/zAEX/+ABF - //wARf/8AEX/+ABF//MARf/rAEX/3QBF/80ARf+6AEX/nABF/30ARf9fAEX/QABF/yIARv8PAEf/AwBH - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////////wAAAA////////////////AAAAAA//////////////+AAAAAA - B/////////////8AAAAAAAD////////////8AAAAAAAAP///////////8AAAAAAAAA///////////8AA - AAAAAAAD//////////8AAAAAAAAAAP/////////8AAAAAAAAAAA/////////+AAAAAAAAAAAH/////// - /+AAAAAAAAAAAAf////////AAAAAAAAAAAAD////////AAAAAAAAAAAAAP///////gAAAAAAAAAAAAB/ - //////wAAAAAAAAAAAAAP//////4AAAAAAAAAAAAAB//////8AAAAAAAAAAAAAAP/////+AAAAAAAAAA - AAAAB//////AAAAAAAAAAAAAAAP/////gAAAAAAAAAAAAAAB/////wAAAAAAAAAAAAAAAP////4AAAAA - AAAAAAAAAAB////8AAAAAAAAAAAAAAAAP///+AAAAAAAAAAAAAAAAB////AAAAAAAAAAAAAAAAAP///w - AAAAAAAAAAAAAAAAD///4AAAAAAAAAAAAAAAAAf//8AAAAAAAAAAAAAAAAAD///AAAAAAAAAAAAAAAAA - A///gAAAAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA - AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAAAAA/+AAAAAAA - AAAAAAAAAAAAH/gAAAAAAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAD+AA - AAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAA - AAPAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA - AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABgAAAAAAA - AAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA+AA - AAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAAAAAAA - AA/wAAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAAAAAAAAAAH/gAAAAAAAAAAAAAAAAAAB/8AAAAAAAAAAAA - AAAAAAA//AAAAAAAAAAAAAAAAAAAP/4AAAAAAAAAAAAAAAAAAH/+AAAAAAAAAAAAAAAAAAB//wAAAAAA - AAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAAAAAAAAH//8AAAAAAAAAAAAAAAAAD///A - AAAAAAAAAAAAAAAAA///4AAAAAAAAAAAAAAAAAf///AAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAA - D///+AAAAAAAAAAAAAAAAB////wAAAAAAAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////wAAAAAAAAAA - AAAAAP////+AAAAAAAAAAAAAAAH/////wAAAAAAAAAAAAAAD/////+AAAAAAAAAAAAAAB//////wAAAA - AAAAAAAAAA//////+AAAAAAAAAAAAAAf//////wAAAAAAAAAAAAAP//////+AAAAAAAAAAAAAH////// - /wAAAAAAAAAAAAD////////AAAAAAAAAAAAD////////4AAAAAAAAAAAB/////////gAAAAAAAAAAB// - ///////8AAAAAAAAAAA//////////wAAAAAAAAAA///////////AAAAAAAAAA///////////8AAAAAAA - AA////////////wAAAAAAAA/////////////AAAAAAAA/////////////+AAAAAAB//////////////8 - AAAAAD///////////////8AAAAP///////8= - - \ No newline at end of file diff --git a/SCrawler/API/Reddit/RedditViewSettingsForm.vb b/SCrawler/API/Reddit/RedditViewSettingsForm.vb index 3a16cd1..e65fe0e 100644 --- a/SCrawler/API/Reddit/RedditViewSettingsForm.vb +++ b/SCrawler/API/Reddit/RedditViewSettingsForm.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -68,16 +68,7 @@ Namespace API.Reddit End With MyDefs.CloseForm() End Sub - Private Sub OPT_VIEW_MODE_NEW_CheckedChanged(sender As Object, e As EventArgs) Handles OPT_VIEW_MODE_NEW.CheckedChanged - ChangePeriodEnabled() - End Sub - Private Sub OPT_VIEW_MODE_HOT_CheckedChanged(sender As Object, e As EventArgs) Handles OPT_VIEW_MODE_HOT.CheckedChanged - ChangePeriodEnabled() - End Sub - Private Sub OPT_VIEW_MODE_TOP_CheckedChanged(sender As Object, e As EventArgs) Handles OPT_VIEW_MODE_TOP.CheckedChanged - ChangePeriodEnabled() - End Sub - Private Sub ChangePeriodEnabled() + Private Sub ChangePeriodEnabled() Handles OPT_VIEW_MODE_NEW.CheckedChanged, OPT_VIEW_MODE_HOT.CheckedChanged, OPT_VIEW_MODE_TOP.CheckedChanged TP_PERIOD.Enabled = OPT_VIEW_MODE_TOP.Checked End Sub End Class diff --git a/SCrawler/API/Reddit/SiteSettings.vb b/SCrawler/API/Reddit/SiteSettings.vb index 6ef82f2..1dadc94 100644 --- a/SCrawler/API/Reddit/SiteSettings.vb +++ b/SCrawler/API/Reddit/SiteSettings.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -9,21 +9,20 @@ Imports SCrawler.API.Base Imports SCrawler.Plugin Imports SCrawler.Plugin.Attributes -Imports PersonalUtilities.Tools.WEB Imports PersonalUtilities.Functions.RegularExpressions Imports DownDetector = SCrawler.API.Base.DownDetector Imports Download = SCrawler.Plugin.ISiteSettings.Download Namespace API.Reddit - + Friend Class SiteSettings : Inherits SiteSettingsBase Friend Overrides ReadOnly Property Icon As Icon Get - Return My.Resources.RedditIcon + Return My.Resources.SiteResources.RedditIcon_128 End Get End Property Friend Overrides ReadOnly Property Image As Image Get - Return My.Resources.RedditPic512 + Return My.Resources.SiteResources.RedditPic_512 End Get End Property @@ -40,7 +39,7 @@ Namespace API.Reddit UseM3U8 = New PropertyValue(True) UrlPatternUser = "https://www.reddit.com/user/{0}/" UrlPatternChannel = "https://www.reddit.com/r/{0}/" - ImageVideoContains = "redgifs" + ImageVideoContains = "reddit.com" End Sub Friend Overrides Function GetInstance(ByVal What As Download) As IPluginContentProvider Select Case What @@ -92,8 +91,11 @@ Namespace API.Reddit Return ErrorsDescriber.Execute(EDP.SendInLog + EDP.ReturnValue, ex, "[API.Reddit.SiteSettings.Available]", True) End Try End Function - Friend Overrides Function GetSpecialDataF(ByVal URL As String) As IEnumerable(Of UserMedia) - Return UserData.GetVideoInfo(URL, Responser) + Friend Overrides Function GetSpecialData(ByVal URL As String, ByVal Path As String, ByVal AskForPath As Boolean) As IEnumerable + Dim spf$ = String.Empty + Dim f As SFile = GetSpecialDataFile(Path, AskForPath, spf) + f = $"{f.PathWithSeparator}OptionalPath\" + Return UserData.GetVideoInfo(URL, Responser, f, spf) End Function Friend Overrides Sub UserOptions(ByRef Options As Object, ByVal OpenForm As Boolean) If Options Is Nothing OrElse Not TypeOf Options Is RedditViewExchange Then Options = New RedditViewExchange diff --git a/SCrawler/API/Reddit/UserData.vb b/SCrawler/API/Reddit/UserData.vb index 011b641..368a9ab 100644 --- a/SCrawler/API/Reddit/UserData.vb +++ b/SCrawler/API/Reddit/UserData.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -6,15 +6,16 @@ ' ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY +Imports System.Net +Imports System.Threading +Imports SCrawler.API.Base +Imports SCrawler.API.Reddit.RedditViewExchange +Imports SCrawler.Plugin.Hosts Imports PersonalUtilities.Functions.XML Imports PersonalUtilities.Functions.RegularExpressions Imports PersonalUtilities.Tools.ImageRenderer Imports PersonalUtilities.Tools.WEB Imports PersonalUtilities.Tools.WebDocuments.JSON -Imports System.Net -Imports System.Threading -Imports SCrawler.API.Base -Imports SCrawler.API.Reddit.RedditViewExchange Imports UStates = SCrawler.API.Base.UserMedia.States Imports UTypes = SCrawler.API.Base.UserMedia.Types Imports CView = SCrawler.API.Reddit.IRedditView.View @@ -150,8 +151,6 @@ Namespace API.Reddit End Sub Protected Overrides Sub DownloadDataF(ByVal Token As CancellationToken) _TotalPostsDownloaded = 0 - 'PENDING: Reddit ReparseMissing (DownloadDataF) - 'If Not IsSavedPosts AndAlso (Not IsChannel OrElse ChannelInfo Is Nothing) Then ReparseMissing(Token) If IsSavedPosts Then DownloadDataChannel(String.Empty, Token) ElseIf IsChannel Then @@ -177,6 +176,8 @@ Namespace API.Reddit #Region "Download Functions (User, Channel)" Private _TotalPostsDownloaded As Integer = 0 Private ReadOnly _CrossPosts As List(Of String) + Private Const SiteGfycatKey As String = "gfycat" + Private Const SiteRedGifsKey As String = "redgifs" Private Sub DownloadDataUser(ByVal POST As String, ByVal Token As CancellationToken) Const CPRI$ = "crosspostRootId" Const CPPI$ = "crosspostParentId" @@ -239,7 +240,7 @@ Namespace API.Reddit _ItemsBefore = _TempMediaList.Count added = True s = nn.ItemF({"source", "url"}) - If s.XmlIfNothingValue("/").StringContains({"redgifs.com", "gfycat.com"}) Then + If s.XmlIfNothingValue("/").StringContains({$"{SiteRedGifsKey}.com", $"{SiteGfycatKey}.com"}) Then _TempMediaList.ListAddValue(MediaFromData(UTypes.VideoPre, s.Value, _PostID(), PostDate,, IsChannel), LNC) ElseIf Not CreateImgurMedia(s.XmlIfNothingValue, _PostID(), PostDate,, IsChannel) Then s = nn.ItemF({"media"}).XmlIfNothing @@ -271,7 +272,7 @@ Namespace API.Reddit If Not s.IsEmptyString AndAlso TryFile(s.Value) Then With s.Value.ToLower Select Case True - Case .Contains("redgifs"), .Contains("gfycat") : tmpType = UTypes.VideoPre + Case .Contains(SiteRedGifsKey), .Contains(SiteGfycatKey) : tmpType = UTypes.VideoPre Case .Contains("m3u8") : If Settings.UseM3U8 Then tmpType = UTypes.m3u8 Case .Contains(".gif") And TryFile(s.Value) : tmpType = UTypes.GIF Case TryFile(s.Value) : tmpType = UTypes.Picture @@ -329,7 +330,7 @@ Namespace API.Reddit If ChannelPostsNames.Contains(PostID) Then If ViewMode = CView.New Then ExistsDetected = True Else NewPostDetected = True 'bypass - Continue For 'Exit Sub + Continue For End If If DownloadLimitCount.HasValue AndAlso _TotalPostsDownloaded >= DownloadLimitCount.Value Then Exit Sub If Not DownloadLimitPost.IsEmptyString AndAlso DownloadLimitPost = PostID Then Exit Sub @@ -377,8 +378,6 @@ Namespace API.Reddit ElseIf Not s.Value({"media", "reddit_video"}, "fallback_url").IsEmptyString Then tmpUrl = s.Value({"media", "reddit_video"}, "fallback_url") If SaveToCache Then - 'TODELETE: Reddit thumbnail -> GetVideoRedditPreview - 'tmpUrl = s.Value("thumbnail") tmpUrl = GetVideoRedditPreview(s) If Not tmpUrl.IsEmptyString Then _TempMediaList.ListAddValue(MediaFromData(UTypes.Picture, tmpUrl, PostID, PostDate, _UserID, IsChannel, False), LNC) @@ -388,7 +387,6 @@ Namespace API.Reddit _TempMediaList.ListAddValue(MediaFromData(UTypes.m3u8, s.Value({"media", "reddit_video"}, "hls_url"), PostID, PostDate, _UserID, IsChannel), LNC) Else - '_TempMediaList.ListAddValue(MediaFromData(UTypes.VideoPre + UTypes.m3u8, tmpUrl, PostID, PostDate, _UserID, IsChannel), LNC) _TempMediaList.ListAddValue(MediaFromData(UTypes.Video, tmpUrl, PostID, PostDate, _UserID, IsChannel), LNC) _TotalPostsDownloaded += 1 End If @@ -418,19 +416,6 @@ Namespace API.Reddit End Sub #End Region #Region "Download Base Functions" - Private Function ImgurPicture(ByVal Source As EContainer, ByVal Value As String) As String - Try - Dim e As EContainer = Source({"source", "url"}).XmlIfNothing - If Not e.IsEmptyString AndAlso e.Value.ToLower.Contains("imgur") Then - Return e.Value - Else - Return Value - End If - Catch ex As Exception - LogError(ex, "[ImgurPicture]") - Return Value - End Try - End Function Private Function CreateImgurMedia(ByVal _URL As String, ByVal PostID As String, ByVal PostDate As String, Optional ByVal _UserID As String = "", Optional ByVal IsChannel As Boolean = False) As Boolean If Not _URL.IsEmptyString AndAlso _URL.Contains("imgur") Then @@ -449,8 +434,33 @@ Namespace API.Reddit ElseIf _URL.Contains(".gif") Then _TempMediaList.ListAddValue(MediaFromData(UTypes.GIF, _URL, PostID, PostDate, _UserID, IsChannel), LNC) Else - If Not TryFile(_URL) Then _URL &= ".jpg" - _TempMediaList.ListAddValue(MediaFromData(UTypes.Picture, _URL, PostID, PostDate, _UserID, IsChannel), LNC) + Dim obj As IEnumerable(Of UserMedia) = Imgur.Envir.GetVideoInfo(_URL, EDP.ReturnValue) + If Not obj.ListExists Then + If Not TryFile(_URL) Then _URL &= ".jpg" + _TempMediaList.ListAddValue(MediaFromData(UTypes.Picture, _URL, PostID, PostDate, _UserID, IsChannel), LNC) + Else + Dim ut As UTypes + Dim m As UserMedia + For Each data As UserMedia In obj + With data + If Not .URL.IsEmptyString Then + If Not .File.IsEmptyString Then + Select Case .File.Extension + Case "jpg", "png", "jpeg" : ut = UTypes.Picture + Case "gifv" : ut = IIf(SaveToCache, UTypes.Picture, UTypes.Video) + Case "mp4" : ut = UTypes.Video + Case "gif" : ut = UTypes.GIF + Case Else : ut = UTypes.Picture : .File.Extension = "jpg" + End Select + m = MediaFromData(ut, _URL, PostID, PostDate, _UserID, IsChannel) + m.URL = .URL + m.File = .File.File + _TempMediaList.ListAddValue(m, LNC) + End If + End If + End With + Next + End If End If Return True Else @@ -512,20 +522,37 @@ Namespace API.Reddit End Try End Function Protected Overrides Sub ReparseVideo(ByVal Token As CancellationToken) + Dim RedGifsResponser As Response = Nothing Try ThrowAny(Token) Const v2 As UTypes = UTypes.VideoPre + UTypes.m3u8 If _TempMediaList.Count > 0 AndAlso _TempMediaList.Exists(Function(p) p.Type = UTypes.VideoPre Or p.Type = v2) Then Dim r$, v$ Dim e As New ErrorsDescriber(EDP.ReturnValue) - Dim m As UserMedia + Dim m As UserMedia, m2 As UserMedia + Dim RedGifsHost As SettingsHost = Settings(RedGifs.RedGifsSiteKey) + RedGifsResponser = RedGifsHost.Responser.Copy For i% = _TempMediaList.Count - 1 To 0 Step -1 ThrowAny(Token) If _TempMediaList(i).Type = UTypes.VideoPre Or _TempMediaList(i).Type = v2 Then m = _TempMediaList(i) If _TempMediaList(i).Type = UTypes.VideoPre Then - If m.URL.Contains("gfycat.com") Then + If m.URL.Contains($"{SiteGfycatKey}.com") Then r = Gfycat.Envir.GetVideo(m.URL) + ElseIf m.URL.Contains(SiteRedGifsKey) Then + m2 = RedGifs.UserData.GetDataFromUrlId(m.URL, False, RedGifsResponser, RedGifsHost) + If m2.State = UStates.Missing Then + m.State = UStates.Missing + _ContentList.Add(m) + _TempMediaList.RemoveAt(i) + ElseIf m2.State = RedGifs.UserData.DataGone Then + _TempMediaList.RemoveAt(i) + Else + m2.URL_BASE = m.URL + m2.Post = m.Post + _TempMediaList(i) = m2 + End If + Continue For Else r = Responser.GetResponse(m.URL,, e) End If @@ -546,60 +573,34 @@ Namespace API.Reddit End If Catch ex As Exception ProcessException(ex, Token, "video reparsing error", False) + Finally + If Not RedGifsResponser Is Nothing Then RedGifsResponser.Dispose() End Try End Sub Protected Overrides Sub ReparseMissing(ByVal Token As CancellationToken) Dim rList As New List(Of Integer) + Dim RedGifsResponser As Response = Nothing Try - If _ContentList.Exists(MissingFinder) Then - Dim m As UserMedia - Dim j As EContainer, ss As EContainer - Dim r$, tmpUrl$, PostDate$, _UserID$ - Dim err As New ErrorsDescriber(EDP.ReturnValue) - Dim node As Object() = {"data", "children", 0, "data"} - Dim eCount As Predicate(Of EContainer) = Function(e) e.Count > 0 - Dim cItems As Predicate(Of EContainer) = Function(e) If(e.ItemF(node)?.Count, 0) > 0 + If Not ChannelInfo Is Nothing Or SaveToCache Then Exit Sub + If ContentMissingExists Then + Dim RedGifsHost As SettingsHost = Settings(RedGifs.RedGifsSiteKey) + RedGifsResponser = RedGifsHost.Responser.Copy + Dim m As UserMedia, m2 As UserMedia For i% = 0 To _ContentList.Count - 1 m = _ContentList(i) If m.State = UStates.Missing AndAlso Not m.Post.ID.IsEmptyString Then ThrowAny(Token) - r = Responser.GetResponse($"https://www.reddit.com/comments/{m.Post.ID.Split("_").LastOrDefault}/.json",, err) - If Not r.IsEmptyString Then - j = JsonDocument.Parse(r, err) - If Not j Is Nothing Then - If j.Contains(cItems) Then - With j.ItemF({cItems}).ItemF(node) - If .Contains("created") Then PostDate = .Item("created").Value Else PostDate = String.Empty - _UserID = .Value("author") - tmpUrl = .Value("url") - If Not tmpUrl.IsEmptyString AndAlso tmpUrl.StringContains({"redgifs.com", "gfycat.com"}) Then - _TempMediaList.ListAddValue(MediaFromData(UTypes.VideoPre, tmpUrl, m.Post.ID, PostDate, _UserID, IsChannel), LNC) - _TotalPostsDownloaded += 1 - ElseIf Not .Value({"media", "reddit_video"}, "fallback_url").IsEmptyString Then - tmpUrl = .Value({"media", "reddit_video"}, "fallback_url") - If UseM3U8 AndAlso Not .Value({"media", "reddit_video"}, "hls_url").IsEmptyString Then - _TempMediaList.ListAddValue(MediaFromData(UTypes.m3u8, .Value({"media", "reddit_video"}, "hls_url"), - m.Post.ID, PostDate, _UserID, IsChannel), LNC) - Else - '_TempMediaList.ListAddValue(MediaFromData(UTypes.VideoPre + UTypes.m3u8, tmpUrl, PostID, PostDate, _UserID, IsChannel), LNC) - _TempMediaList.ListAddValue(MediaFromData(UTypes.Video, tmpUrl, m.Post.ID, PostDate, _UserID, IsChannel), LNC) - _TotalPostsDownloaded += 1 - End If - ElseIf CreateImgurMedia(tmpUrl, m.Post.ID, PostDate, _UserID, IsChannel) Then - _TotalPostsDownloaded += 1 - ElseIf If(.Item("media_metadata")?.Count, 0) > 0 Then - DownloadGallery(.Self, m.Post.ID, PostDate, _UserID, SaveToCache) - _TotalPostsDownloaded += 1 - ElseIf .Contains("preview") Then - ss = .ItemF({"preview", "images", eCount, "source", "url"}).XmlIfNothing - If Not ss.Value.IsEmptyString Then - _TempMediaList.ListAddValue(MediaFromData(UTypes.Picture, ss.Value, m.Post.ID, PostDate, _UserID, IsChannel), LNC) - _TotalPostsDownloaded += 1 - End If - End If - End With - End If - j.Dispose() + If Not m.URL.IsEmptyString AndAlso m.URL.Contains(SiteRedGifsKey) Then + m2 = RedGifs.UserData.GetDataFromUrlId(m.URL, False, RedGifsResponser, RedGifsHost) + If m2.State = RedGifs.UserData.DataGone Then + rList.Add(i) + ElseIf Not m2.Type = UTypes.Undefined And Not m2.State = UStates.Missing Then + m.Type = m2.Type + m.File = m2.File + m.URL_BASE = m.URL + m.URL = m2.URL + rList.Add(i) + _TempMediaList.ListAddValue(m, LNC) End If End If End If @@ -608,26 +609,77 @@ Namespace API.Reddit Catch ex As Exception ProcessException(ex, Token, "missing data downloading error") Finally + If Not RedGifsResponser Is Nothing Then RedGifsResponser.Dispose() If rList.Count > 0 Then For i% = rList.Count - 1 To 0 Step -1 : _ContentList.RemoveAt(rList(i)) : Next rList.Clear() End If End Try End Sub - Friend Shared Function GetVideoInfo(ByVal URL As String, ByVal resp As Response) As IEnumerable(Of UserMedia) + Private Sub ParsePost(ByVal URL As String) Try - If Not URL.IsEmptyString AndAlso URL.Contains("redgifs") Then + If Not URL.IsEmptyString Then + Dim __id$ = RegexReplace(URL, RParams.DMS("comments/([^/]+)", 1, EDP.ReturnValue)) + If Not __id.IsEmptyString Then + URL = $"https://www.reddit.com/comments/{__id.Split("_").LastOrDefault}/.json" + Dim r$ = Responser.GetResponse(URL,, EDP.ReturnValue) + If Not r.IsEmptyString Then + Using j As EContainer = JsonDocument.Parse(r).XmlIfNothing + With j.ItemF({0, "data", "children", 0, "data"}) + If .ListExists Then + If .Contains({"media"}, "reddit_video") Then + With .Item({"media"}, "reddit_video") + If UseM3U8 AndAlso .Item("hls_url").XmlIfNothingValue("/").ToLower.Contains("m3u8") Then + _TempMediaList.ListAddValue(MediaFromData(UTypes.m3u8, .Value("hls_url"), __id, String.Empty), LNC) + ElseIf Not UseM3U8 AndAlso .Item("fallback_url").XmlIfNothingValue("/").ToLower.Contains("mp4") Then + _TempMediaList.ListAddValue(MediaFromData(UTypes.Video, .Value("fallback_url"), __id, String.Empty), LNC) + End If + End With + ElseIf Not .Value("url").IsEmptyString Then + If .Value("url").StringContains({$"{SiteRedGifsKey}.com", $"{SiteGfycatKey}.com"}) Then + _TempMediaList.ListAddValue(MediaFromData(UTypes.VideoPre, .Value("url"), __id, String.Empty), LNC) + Else + CreateImgurMedia(.Value("url"), __id, String.Empty) + End If + End If + End If + End With + End Using + End If + End If + End If + Catch ex As Exception + ErrorsDescriber.Execute(EDP.SendInLog, ex, $"API.Reddit.ParsePost({URL})") + End Try + End Sub + Private Class AbsProgress : Inherits PersonalUtilities.Forms.Toolbars.MyProgress + Public Overrides Sub Perform(Optional ByVal Value As Double = 1) + End Sub + End Class + Friend Shared Function GetVideoInfo(ByVal URL As String, ByVal resp As Response, ByVal f As SFile, ByVal SpecialFolder As String) As IEnumerable(Of UserMedia) + Try + If Not URL.IsEmptyString Then Using r As New UserData - r._TempMediaList.Add(MediaFromData(UTypes.VideoPre, URL, String.Empty, String.Empty,, False)) r.Responser = New Response r.Responser.Copy(resp) - r.ReparseVideo(Nothing) - If r._TempMediaList.ListExists Then Return {r._TempMediaList(0)} + r.ParsePost(URL) + If r._TempMediaList.Count > 0 Then + r.ReparseVideo(Nothing) + If r._TempMediaList.Count > 0 Then + r._ContentNew.AddRange(r._TempMediaList) + r.Progress = New AbsProgress + r.User.File.Path = f.Path + r.SeparateVideoFolder = False + r.DownloadContent(Nothing) + If r._ContentNew.Exists(Function(c) c.State = UStates.Downloaded) Then _ + Return {New UserMedia With {.State = UStates.Downloaded, .SpecialFolder = SpecialFolder}} + End If + End If End Using End If Return Nothing Catch ex As Exception - Return ErrorsDescriber.Execute(EDP.ShowMainMsg + EDP.SendInLog, ex, "Video searching error") + Return ErrorsDescriber.Execute(EDP.SendInLog, ex, $"[API.Reddit.UserData.GetVideoInfo({URL})]") End Try End Function #End Region @@ -659,6 +711,7 @@ Namespace API.Reddit End Function #End Region Protected Overrides Sub DownloadContent(ByVal Token As CancellationToken) + Dim RedGifsResponser As Response = Nothing Try Const _RFN$ = "RedditVideo" Const RFN$ = _RFN & "{0}" @@ -668,6 +721,7 @@ Namespace API.Reddit If _ContentNew.Count > 0 Then _ContentNew.RemoveAll(Function(c) c.URL.IsEmptyString) If _ContentNew.Count > 0 Then + RedGifsResponser = Settings(RedGifs.RedGifsSiteKey).Responser.Copy MyFile.Exists(SFO.Path) Dim MissingErrorsAdd As Boolean = Settings.AddMissingErrorsToLog Dim IsImgurStuff As Boolean @@ -689,6 +743,7 @@ Namespace API.Reddit Dim vsf As Boolean = SeparateVideoFolderF Dim UseMD5 As Boolean = Not IsChannel Or (Not cached And Settings.ChannelsRegularCheckMD5) Dim bDP As New ErrorsDescriber(EDP.None) + Dim RGRERROR As New ErrorsDescriber(EDP.ThrowException) Dim ImgurUrls As New List(Of String) Dim TryBytes As Func(Of String, Imaging.ImageFormat, String) = Function(ByVal __URL As String, ByVal ImgFormat As Imaging.ImageFormat) As String @@ -761,7 +816,7 @@ Namespace API.Reddit If (Not m.IsEmptyString AndAlso Not HashList.Contains(m)) Or Not (v.Type = UTypes.Picture Or v.Type = UTypes.GIF) Or Not UseMD5 Or ImgurUrls.Count > 0 Then - isImgurStuff = ImgurUrls.Count > 0 + IsImgurStuff = ImgurUrls.Count > 0 Do If Not cached And Not m.IsEmptyString Then HashList.Add(m) v.MD5 = m @@ -788,6 +843,8 @@ Namespace API.Reddit f = M3U8.Download(v.URL, f) ElseIf ImgurUrls.Count > 0 Then w.DownloadFile(ImgurUrls(0), f.ToString) + ElseIf v.URL.Contains(SiteRedGifsKey) Then + RedGifsResponser.DownloadFile(v.URL, f, RGRERROR) Else w.DownloadFile(v.URL, f.ToString) End If @@ -838,7 +895,8 @@ Namespace API.Reddit HasError = True End Try End Sub - Protected Overrides Function DownloadingException(ByVal ex As Exception, ByVal Message As String, Optional ByVal FromPE As Boolean = False) As Integer + Protected Overrides Function DownloadingException(ByVal ex As Exception, ByVal Message As String, Optional ByVal FromPE As Boolean = False, + Optional ByVal EObj As Object = Nothing) As Integer If Responser.StatusCode = HttpStatusCode.NotFound Then UserExists = False ElseIf Responser.StatusCode = HttpStatusCode.Forbidden Then diff --git a/SCrawler/API/Redgifs/Declarations.vb b/SCrawler/API/Redgifs/Declarations.vb index b36e97e..1deff2c 100644 --- a/SCrawler/API/Redgifs/Declarations.vb +++ b/SCrawler/API/Redgifs/Declarations.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -6,9 +6,14 @@ ' ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY +Imports PersonalUtilities.Functions.RegularExpressions Namespace API.RedGifs Friend Module Declarations + Friend Const RedGifsSiteKey As String = "AndyProgram_RedGifs" Friend Const RedGifsSite As String = "RedGifs" Friend ReadOnly DateProvider As New CustomProvider(Function(v, d, p, n, e) ADateTime.ParseUnicode(v, n, e)) + Friend ReadOnly WatchIDRegex As RParams = RParams.DMS(".+?watch/([^\?&""/]+)", 1, EDP.ReturnValue) + Friend ReadOnly ThumbsIDRegex As RParams = RParams.DMS("([^/\?&""]+?)(-\w+?|)\.(mp4|jpg)", 1, EDP.ReturnValue, + Function(v) If(CStr(v).IsEmptyString, String.Empty, CStr(v).ToLower.Trim)) End Module End Namespace \ No newline at end of file diff --git a/SCrawler/API/Redgifs/SiteSettings.vb b/SCrawler/API/Redgifs/SiteSettings.vb index c6fb0d1..a88f497 100644 --- a/SCrawler/API/Redgifs/SiteSettings.vb +++ b/SCrawler/API/Redgifs/SiteSettings.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -6,41 +6,85 @@ ' ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY +Imports SCrawler.API.Base Imports SCrawler.Plugin Imports SCrawler.Plugin.Attributes -Imports SCrawler.API.Base Imports PersonalUtilities.Functions.RegularExpressions +Imports PersonalUtilities.Tools.WEB +Imports UTypes = SCrawler.API.Base.UserMedia.Types +Imports UStates = SCrawler.API.Base.UserMedia.States Namespace API.RedGifs - + Friend Class SiteSettings : Inherits SiteSettingsBase Friend Overrides ReadOnly Property Icon As Icon Get - Return My.Resources.RedGifsIcon + Return My.Resources.SiteResources.RedGifsIcon_32 End Get End Property Friend Overrides ReadOnly Property Image As Image Get - Return My.Resources.RedGifsPic32 + Return My.Resources.SiteResources.RedGifsPic_32 End Get End Property + + Friend Property Token As PropertyValue + Private Const TokenName As String = "authorization" Friend Sub New() MyBase.New(RedGifsSite, "redgifs.com") + Dim t$ = String.Empty + With Responser + Dim b As Boolean = Not .UseWebClient Or Not .UseWebClientCookies Or Not .UseWebClientAdditionalHeaders + .UseWebClient = True + .UseWebClientCookies = True + .UseWebClientAdditionalHeaders = True + If .Headers.Count > 0 AndAlso .Headers.ContainsKey(TokenName) Then t = .Headers(TokenName) + If b Then .SaveSettings() + End With + Token = New PropertyValue(t, GetType(String), Sub(v) UpdateResponse(v)) UrlPatternUser = "https://www.redgifs.com/users/{0}/" UserRegex = RParams.DMS("[htps:/]{7,8}.*?redgifs.com/users/([^/]+)", 1) ImageVideoContains = "redgifs" End Sub + Private Sub UpdateResponse(ByVal Value As String) + With Responser.Headers + If .Count = 0 OrElse Not .ContainsKey(TokenName) Then .Add(TokenName, Value) Else .Item(TokenName) = Value + Responser.SaveSettings() + End With + End Sub Friend Overrides Function GetInstance(ByVal What As ISiteSettings.Download) As IPluginContentProvider Return New UserData End Function - Friend Overrides Function GetSpecialDataF(ByVal URL As String) As IEnumerable(Of UserMedia) - Return Reddit.UserData.GetVideoInfo(URL, Nothing) + Friend Overrides Function GetSpecialData(ByVal URL As String, ByVal Path As String, ByVal AskForPath As Boolean) As IEnumerable + If BaseAuthExists() Then + Using resp As Response = Responser.Copy + Dim m As UserMedia = UserData.GetDataFromUrlId(URL, False, resp, Settings(RedGifsSiteKey)) + If Not m.State = UStates.Missing And Not m.State = UserData.DataGone And (m.Type = UTypes.Picture Or m.Type = UTypes.Video) Then + Try + Dim spf$ = String.Empty + Dim f As SFile = GetSpecialDataFile(Path, AskForPath, spf) + If f.IsEmptyString Then + f = m.File.File + Else + f.Name = m.File.Name + f.Extension = m.File.Extension + End If + resp.DownloadFile(m.URL, f, EDP.ThrowException) + m.State = UStates.Downloaded + m.SpecialFolder = spf + Return {m} + Catch ex As Exception + ErrorsDescriber.Execute(EDP.SendInLog, ex, $"Redgifs standalone download error: [{URL}]") + End Try + End If + End Using + End If + Return Nothing End Function Friend Overrides Function GetUserPostUrl(ByVal UserID As String, ByVal PostID As String) As String Return $"https://www.redgifs.com/watch/{PostID}" End Function - Friend Overrides Function Available(ByVal What As ISiteSettings.Download, ByVal Silent As Boolean) As Boolean - 'PENDING: RedGifs SiteSettings Available FALSE - Return False + Friend Overrides Function BaseAuthExists() As Boolean + Return If(Responser.Cookies?.Count, 0) > 0 AndAlso ACheck(Token.Value) End Function End Class End Namespace \ No newline at end of file diff --git a/SCrawler/API/Redgifs/UserData.vb b/SCrawler/API/Redgifs/UserData.vb index a447eaa..be6dbeb 100644 --- a/SCrawler/API/Redgifs/UserData.vb +++ b/SCrawler/API/Redgifs/UserData.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -6,20 +6,29 @@ ' ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY -Imports PersonalUtilities.Functions.XML -Imports PersonalUtilities.Functions.RegularExpressions -Imports PersonalUtilities.Tools.WebDocuments.JSON Imports System.Net Imports System.Threading Imports SCrawler.API.Base +Imports PersonalUtilities.Functions.XML +Imports PersonalUtilities.Functions.RegularExpressions +Imports PersonalUtilities.Tools.WEB +Imports PersonalUtilities.Tools.WebDocuments.JSON Imports UTypes = SCrawler.API.Base.UserMedia.Types Imports UStates = SCrawler.API.Base.UserMedia.States Namespace API.RedGifs Friend Class UserData : Inherits UserDataBase - Friend Sub New() - End Sub + Friend Const DataGone As HttpStatusCode = HttpStatusCode.Gone + Private Const PostDataUrl As String = "https://api.redgifs.com/v2/gifs/{0}?views=yes&users=yes" +#Region "Base declarations" Protected Overrides Sub LoadUserInformation_OptionalFields(ByRef Container As XmlFile, ByVal Loading As Boolean) End Sub +#End Region +#Region "Initializer" + Friend Sub New() + UseResponserClient = True + End Sub +#End Region +#Region "Download functions" Protected Overrides Sub DownloadDataF(ByVal Token As CancellationToken) ReparseMissing(Token) DownloadData(1, Token) @@ -28,7 +37,7 @@ Namespace API.RedGifs Dim URL$ = String.Empty Try URL = $"https://api.redgifs.com/v2/users/{Name}/search?order=recent&page={Page}" - Dim r$ = Responser.GetResponse(URL,, EDP.ThrowException) + Dim r$ = Responser.DownloadString(URL, EDP.ThrowException) Dim postDate$, postID$ Dim pTotal% = 0 If Not r.IsEmptyString Then @@ -53,25 +62,37 @@ Namespace API.RedGifs ProcessException(ex, Token, $"data downloading error [{URL}]") End Try End Sub +#End Region +#Region "Media obtain, extract" Private Sub ObtainMedia(ByVal j As EContainer, ByVal PostID As String, Optional ByVal PostDateStr As String = Nothing, Optional ByVal PostDateDate As Date? = Nothing, Optional ByVal State As UStates = UStates.Unknown) - With j("urls") - If .ListExists Then - Dim u$ = If(.Item("hd"), .Item("sd")).XmlIfNothingValue - If Not u.IsEmptyString Then - Dim ut As UTypes = UTypes.Undefined - 'Type 1: video - 'Type 2: image - Select Case j.Value("type").FromXML(Of Integer)(0) - Case 1 : ut = UTypes.Video - Case 2 : ut = UTypes.Picture - End Select - If Not ut = UTypes.Undefined Then _TempMediaList.ListAddValue(MediaFromData(ut, u, PostID, PostDateStr, PostDateDate, State)) - End If - End If - End With + Dim tMedia As UserMedia = ExtractMedia(j) + If Not tMedia.Type = UTypes.Undefined Then _ + _TempMediaList.ListAddValue(MediaFromData(tMedia.Type, tMedia.URL, PostID, PostDateStr, PostDateDate, State)) End Sub + Private Shared Function ExtractMedia(ByVal j As EContainer) As UserMedia + If Not j Is Nothing Then + With j("urls") + If .ListExists Then + Dim u$ = If(.Item("hd"), .Item("sd")).XmlIfNothingValue + If Not u.IsEmptyString Then + Dim ut As UTypes = UTypes.Undefined + 'Type 1: video + 'Type 2: image + Select Case j.Value("type").FromXML(Of Integer)(0) + Case 1 : ut = UTypes.Video + Case 2 : ut = UTypes.Picture + End Select + Return New UserMedia(u, ut) + End If + End If + End With + End If + Return Nothing + End Function +#End Region +#Region "ReparseMissing" Protected Overrides Sub ReparseMissing(ByVal Token As CancellationToken) Dim rList As New List(Of Integer) Try @@ -84,7 +105,7 @@ Namespace API.RedGifs ThrowAny(Token) u = _ContentList(i) If Not u.Post.ID.IsEmptyString Then - url = $"https://api.redgifs.com/v2/gifs/{u.Post.ID}?views=yes&users=yes" + url = String.Format(PostDataUrl, u.Post.ID.ToLower) Try r = Responser.GetResponse(url,, EDP.ThrowException) If Not r.IsEmptyString Then @@ -115,14 +136,74 @@ Namespace API.RedGifs End If End Try End Sub +#End Region +#Region "Downloader" Protected Overrides Sub DownloadContent(ByVal Token As CancellationToken) DownloadContentDefault(Token) End Sub +#End Region +#Region "Get post data statics" + ''' + ''' https://thumbs4.redgifs.com/abcde-large.jpg?expires -> abcde
+ ''' https://thumbs4.redgifs.com/abcde.mp4?expires -> abcde
+ ''' https://www.redgifs.com/watch/abcde?rel=a -> abcde + '''
+ Friend Shared Function GetVideoIdFromUrl(ByVal URL As String) As String + If Not URL.IsEmptyString Then + Return RegexReplace(URL, If(URL.Contains("/watch/"), WatchIDRegex, ThumbsIDRegex)) + Else + Return String.Empty + End If + End Function + Friend Shared Function GetDataFromUrlId(ByVal Obj As String, ByVal ObjIsID As Boolean, ByVal Responser As Response, + ByVal Host As Plugin.Hosts.SettingsHost) As UserMedia + Dim URL$ = String.Empty + Try + If Obj.IsEmptyString Then Return Nothing + If Not ObjIsID Then + Obj = GetVideoIdFromUrl(Obj) + If Not Obj.IsEmptyString Then Return GetDataFromUrlId(Obj, True, Responser, Host) + Else + If Host Is Nothing Then Host = Settings(RedGifsSiteKey) + If Host.Source.Available(Plugin.ISiteSettings.Download.Main, True) Then + If Responser Is Nothing Then Responser = Host.Responser.Copy + URL = String.Format(PostDataUrl, Obj.ToLower) + Dim r$ = Responser.DownloadString(URL, EDP.ThrowException) + If Not r.IsEmptyString Then + Using j As EContainer = JsonDocument.Parse(r) + If Not j Is Nothing Then + Dim tm As UserMedia = ExtractMedia(j("gif")) + tm.Post.ID = Obj + tm.File = CStr(RegexReplace(tm.URL, FilesPattern)) + If tm.File.IsEmptyString Then + tm.File.Name = Obj + Select Case tm.Type + Case UTypes.Picture : tm.File.Extension = "jpg" + Case UTypes.Video : tm.File.Extension = "mp4" + End Select + End If + Return tm + End If + End Using + End If + Else + Return New UserMedia With {.State = UStates.Missing} + End If + End If + Return Nothing + Catch ex As Exception + If Not Responser Is Nothing AndAlso Responser.Client.StatusCode = DataGone Then _ + Return New UserMedia With {.State = DataGone} + Return ErrorsDescriber.Execute(EDP.SendInLog, ex, $"[API.RedGifs.UserData.GetDataFromUrlId({URL})]", New UserMedia) + End Try + End Function +#End Region +#Region "Create media" Private Shared Function MediaFromData(ByVal t As UTypes, ByVal _URL As String, ByVal PostID As String, ByVal PostDateStr As String, ByVal PostDateDate As Date?, ByVal State As UStates) As UserMedia _URL = LinkFormatterSecure(RegexReplace(_URL.Replace("\", String.Empty), LinkPattern)) Dim m As New UserMedia(_URL, t) With {.Post = New UserPost With {.ID = PostID}} - If Not m.URL.IsEmptyString Then m.File = CStr(RegexReplace(m.URL, FilesPattern)) : m.URL_BASE = m.URL + If Not m.URL.IsEmptyString Then m.File = CStr(RegexReplace(m.URL, FilesPattern)) If Not PostDateStr.IsEmptyString Then m.Post.Date = AConvert(Of Date)(PostDateStr, DateProvider, Nothing) ElseIf PostDateDate.HasValue Then @@ -133,7 +214,10 @@ Namespace API.RedGifs m.State = State Return m End Function - Protected Overrides Function DownloadingException(ByVal ex As Exception, ByVal Message As String, Optional ByVal FromPE As Boolean = False) As Integer +#End Region +#Region "Exception" + Protected Overrides Function DownloadingException(ByVal ex As Exception, ByVal Message As String, Optional ByVal FromPE As Boolean = False, + Optional ByVal EObj As Object = Nothing) As Integer If Responser.StatusCode = HttpStatusCode.NotFound Then UserExists = False Else @@ -142,5 +226,6 @@ Namespace API.RedGifs End If Return 1 End Function +#End Region End Class End Namespace \ No newline at end of file diff --git a/SCrawler/API/TikTok/Declarations.vb b/SCrawler/API/TikTok/Declarations.vb new file mode 100644 index 0000000..e749d95 --- /dev/null +++ b/SCrawler/API/TikTok/Declarations.vb @@ -0,0 +1,65 @@ +' Copyright (C) 2023 Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY +Imports PersonalUtilities.Functions.RegularExpressions +Namespace API.TikTok + Friend Module Declarations + Friend ReadOnly RegexEnvir As New RegexParseEnvir + Friend ReadOnly CheckDateProvider As New CustomProvider(Function(v, d, p, n, e) + With DirectCast(v, Date?) + If .HasValue Then Return .Value Else Return Nothing + End With + End Function) + Friend Class RegexParseEnvir + Private ReadOnly UrlIdRegex As RParams = RParams.DMS("http[s]?://[w\.]{0,4}tiktok.com/[^/]+?/video/(\d+)", 1, EDP.ReturnValue) + Private ReadOnly RegexItemsArrPre As RParams = RParams.DMS("ItemList"":\{""user-post"":\{""list"":\[([^\[]+)\]", 1) + Private ReadOnly RegexItemsArr As RParams = RParams.DM("\d+", 0, RegexReturn.List) + Private ReadOnly VideoPattern As New RParams(String.Empty, Nothing, 1, EDP.ReturnValue) + Private ReadOnly DatePattern As New RParams(String.Empty, Nothing, 1, EDP.ReturnValue) + Private ReadOnly UserIdFromVideo As RParams = RParams.DMS("/\?a=(\d+)", 1, EDP.ReturnValue) + Friend Function GetIDList(ByVal r As String) As List(Of String) + Try + If Not r.IsEmptyString Then + Dim l As List(Of String) = Nothing + Dim IdArr$ = RegexReplace(r, RegexItemsArrPre) + If Not IdArr.IsEmptyString Then l = RegexReplace(IdArr, RegexItemsArr) + If l.ListExists Then l.RemoveAll(Function(id) id.IsEmptyString) + Return l + End If + Return Nothing + Catch ex As Exception + Return ErrorsDescriber.Execute(EDP.SendInLog, ex, "[API.TikTok.RegexParseEnvir.GetIDList]") + End Try + End Function + Friend Function GetVideoData(ByVal r As String, ByVal ID As String, ByRef URL As String, ByRef [Date] As Date?) As Boolean + Try + [Date] = Nothing + URL = String.Empty + If Not r.IsEmptyString Then + VideoPattern.Pattern = "video"":\{""id"":""" & ID & """[^\}]+?""downloadAddr"":""([^""]+)""" + DatePattern.Pattern = """:{""id"":""" & ID & """,""desc"":.+?""createTime"":""(\d+)" + Dim u$ = RegexReplace(r, VideoPattern) + If Not u.IsEmptyString Then URL = SymbolsConverter.Unicode.Decode(u, EDP.ReturnValue) + Dim d$ = RegexReplace(r, DatePattern) + If Not d.IsEmptyString Then [Date] = ADateTime.ParseUnicode(d) + Return Not URL.IsEmptyString + End If + Return False + Catch ex As Exception + Return ErrorsDescriber.Execute(EDP.SendInLog, ex, "[API.TikTok.RegexParseEnvir.GetVideoData]", False) + End Try + End Function + Friend Function ExtractPostID(ByVal URL As String) As String + If Not URL.IsEmptyString Then Return RegexReplace(URL, UrlIdRegex) Else Return String.Empty + End Function + Friend Function ExtractUserID(ByVal VideoUrl As String) As String + If Not VideoUrl.IsEmptyString Then Return RegexReplace(VideoUrl, UserIdFromVideo) Else Return String.Empty + End Function + End Class + End Module +End Namespace \ No newline at end of file diff --git a/SCrawler/API/TikTok/SiteSettings.vb b/SCrawler/API/TikTok/SiteSettings.vb new file mode 100644 index 0000000..dfc958e --- /dev/null +++ b/SCrawler/API/TikTok/SiteSettings.vb @@ -0,0 +1,42 @@ +' Copyright (C) 2023 Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY +Imports SCrawler.API.Base +Imports SCrawler.Plugin +Imports SCrawler.Plugin.Attributes +Imports PersonalUtilities.Functions.RegularExpressions +Namespace API.TikTok + + Friend Class SiteSettings : Inherits SiteSettingsBase + Friend Overrides ReadOnly Property Icon As Icon + Get + Return My.Resources.SiteResources.TikTokIcon_32 + End Get + End Property + Friend Overrides ReadOnly Property Image As Image + Get + Return My.Resources.SiteResources.TikTokPic_192 + End Get + End Property + Friend Sub New() + MyBase.New("TikTok", "www.tiktok.com") + UrlPatternUser = "https://www.tiktok.com/@{0}/" + UserRegex = RParams.DMS("[htps:/]{7,8}.*?tiktok.com/@([^/]+)", 1) + ImageVideoContains = "tiktok.com" + End Sub + Friend Overrides Function GetInstance(ByVal What As ISiteSettings.Download) As IPluginContentProvider + Return New UserData + End Function + Friend Overrides Function GetSpecialData(ByVal URL As String, ByVal Path As String, ByVal AskForPath As Boolean) As IEnumerable + Return UserData.GetVideoInfo(URL, Responser) + End Function + Friend Overrides Function BaseAuthExists() As Boolean + Return If(Responser.Cookies?.Count, 0) > 0 + End Function + End Class +End Namespace \ No newline at end of file diff --git a/SCrawler/API/TikTok/UserData.vb b/SCrawler/API/TikTok/UserData.vb new file mode 100644 index 0000000..a75048b --- /dev/null +++ b/SCrawler/API/TikTok/UserData.vb @@ -0,0 +1,93 @@ +' Copyright (C) 2023 Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY +Imports System.Threading +Imports SCrawler.API.Base +Imports PersonalUtilities.Functions.XML +Imports PersonalUtilities.Functions.RegularExpressions +Imports PersonalUtilities.Tools.WEB +Namespace API.TikTok + Friend Class UserData : Inherits UserDataBase + Protected Overrides Sub LoadUserInformation_OptionalFields(ByRef Container As XmlFile, ByVal Loading As Boolean) + End Sub + Friend Sub New() + SeparateVideoFolder = False + End Sub + Protected Overrides Sub DownloadDataF(ByVal Token As CancellationToken) + Dim URL$ = String.Empty + Try + Dim PostIDs As List(Of String) + Dim PostDate As Date? = Nothing + Dim PostURL$ = String.Empty + Dim r$ + URL = $"https://www.tiktok.com/@{Name}" + r = Responser.GetResponse(URL,, EDP.ThrowException) + PostIDs = RegexEnvir.GetIDList(r) + If PostIDs.ListExists Then + For Each __id$ In PostIDs + If Not _TempPostsList.Contains(__id) Then + _TempPostsList.Add(__id) + If RegexEnvir.GetVideoData(r, __id, PostURL, PostDate) Then + Select Case CheckDatesLimit(PostDate, CheckDateProvider) + Case DateResult.Skip : Continue For + Case DateResult.Exit : Exit Sub + End Select + If ID.IsEmptyString And Not PostURL.IsEmptyString Then ID = RegexEnvir.ExtractUserID(PostURL) + _TempMediaList.ListAddValue(MediaFromData(PostURL, __id, PostDate)) + End If + Else + Exit Sub + End If + Next + End If + Catch ex As Exception + ProcessException(ex, Token, $"data downloading error [{URL}]") + End Try + End Sub + Protected Overrides Sub DownloadContent(ByVal Token As CancellationToken) + DownloadContentDefault(Token) + End Sub + Friend Shared Function GetVideoInfo(ByVal URL As String, ByVal Responser As Response, Optional ByVal e As ErrorsDescriber = Nothing) As IEnumerable(Of UserMedia) + Try + If Not URL.IsEmptyString Then + Dim PostId$ = String.Empty + Dim PostDate As Date? = Nothing + Dim PostURL$ = String.Empty + Dim r$ + PostId = RegexEnvir.ExtractPostID(URL) + If Not PostId.IsEmptyString Then + Using resp As Response = Responser.Copy() : r = resp.GetResponse(URL,, EDP.ThrowException) : End Using + If Not r.IsEmptyString Then + If RegexEnvir.GetVideoData(r, PostId, PostURL, PostDate) Then Return {MediaFromData(PostURL, PostId, PostDate)} + End If + End If + End If + Return Nothing + Catch ex As Exception + If Not e.Exists Then e = New ErrorsDescriber(EDP.ShowMainMsg + EDP.SendInLog) + Return ErrorsDescriber.Execute(e, ex, $"TikTok standalone downloader: fetch media error ({URL})") + End Try + End Function + Private Shared Function MediaFromData(ByVal _URL As String, ByVal PostID As String, ByVal PostDate As Date?) As UserMedia + _URL = LinkFormatterSecure(RegexReplace(_URL.Replace("\", String.Empty), LinkPattern)) + Dim m As New UserMedia(_URL, UserMedia.Types.Video) With {.Post = New UserPost With {.ID = PostID}} + If Not m.URL.IsEmptyString Then m.File = $"{PostID}.mp4" + If PostDate.HasValue Then m.Post.Date = PostDate + Return m + End Function + Protected Overrides Function DownloadingException(ByVal ex As Exception, ByVal Message As String, Optional ByVal FromPE As Boolean = False, + Optional ByVal EObj As Object = Nothing) As Integer + If Responser.Status = Net.WebExceptionStatus.ConnectionClosed Then + UserExists = False + Return 1 + Else + Return 0 + End If + End Function + End Class +End Namespace \ No newline at end of file diff --git a/SCrawler/API/Twitter/SiteSettings.vb b/SCrawler/API/Twitter/SiteSettings.vb index 731944b..cf2899d 100644 --- a/SCrawler/API/Twitter/SiteSettings.vb +++ b/SCrawler/API/Twitter/SiteSettings.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -12,18 +12,18 @@ Imports SCrawler.Plugin.Attributes Imports PersonalUtilities.Tools.WEB Imports PersonalUtilities.Functions.RegularExpressions Namespace API.Twitter - + Friend Class SiteSettings : Inherits SiteSettingsBase Friend Const Header_Authorization As String = "authorization" Friend Const Header_Token As String = "x-csrf-token" Friend Overrides ReadOnly Property Icon As Icon Get - Return My.Resources.TwitterIcon + Return My.Resources.SiteResources.TwitterIcon_32 End Get End Property Friend Overrides ReadOnly Property Image As Image Get - Return My.Resources.TwitterPic400 + Return My.Resources.SiteResources.TwitterPic_400 End Get End Property 0 And ACheck(Token.Value) And ACheck(Auth.Value) + End Function End Class End Namespace \ No newline at end of file diff --git a/SCrawler/API/Twitter/UserData.vb b/SCrawler/API/Twitter/UserData.vb index 174e1c3..105ccc0 100644 --- a/SCrawler/API/Twitter/UserData.vb +++ b/SCrawler/API/Twitter/UserData.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -6,26 +6,27 @@ ' ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY -Imports PersonalUtilities.Tools.WEB -Imports PersonalUtilities.Tools.WebDocuments.JSON -Imports PersonalUtilities.Functions.XML -Imports PersonalUtilities.Functions.RegularExpressions Imports System.Net Imports System.Threading Imports SCrawler.API.Base +Imports PersonalUtilities.Functions.XML +Imports PersonalUtilities.Functions.RegularExpressions +Imports PersonalUtilities.Tools.WEB +Imports PersonalUtilities.Tools.WebDocuments.JSON Imports UStates = SCrawler.API.Base.UserMedia.States Namespace API.Twitter Friend Class UserData : Inherits UserDataBase + Private Const SinglePostUrl As String = "https://api.twitter.com/1.1/statuses/show.json?id={0}&tweet_mode=extended" #Region "Declarations" Private ReadOnly _DataNames As List(Of String) + Protected Overrides Sub LoadUserInformation_OptionalFields(ByRef Container As XmlFile, ByVal Loading As Boolean) + End Sub #End Region #Region "Initializer" Friend Sub New() _DataNames = New List(Of String) End Sub #End Region - Protected Overrides Sub LoadUserInformation_OptionalFields(ByRef Container As XmlFile, ByVal Loading As Boolean) - End Sub #Region "Download functions" Protected Overrides Sub DownloadDataF(ByVal Token As CancellationToken) If IsSavedPosts Then @@ -34,8 +35,6 @@ Namespace API.Twitter Else If _ContentList.Count > 0 Then _DataNames.ListAddList(_ContentList.Select(Function(c) c.File.File), LAP.ClearBeforeAdd, LAP.NotContainsOnly) DownloadData(String.Empty, Token) - 'PENDING: Twitter ReparseMissing (DownloadDataF) - 'ReparseMissing(Token) End If End Sub Private Overloads Sub DownloadData(ByVal POST As String, ByVal Token As CancellationToken) @@ -44,12 +43,11 @@ Namespace API.Twitter Dim NextCursor$ = String.Empty Dim __NextCursor As Predicate(Of EContainer) = Function(e) e.Value({"content", "operation", "cursor"}, "cursorType") = "Bottom" Dim PostID$ = String.Empty - Dim PostDate$ ', dName$ - Dim nn As EContainer, s As EContainer ', m As EContainer + Dim PostDate$ + Dim nn As EContainer, s As EContainer Dim NewPostDetected As Boolean = False Dim ExistsDetected As Boolean = False - Dim PicNode As Predicate(Of EContainer) = Function(e) e.Count > 0 AndAlso e.Contains("media_url") Dim UID As Func(Of EContainer, String) = Function(e) e.XmlIfNothing.Item({"user", "id"}).XmlIfNothingValue If IsSavedPosts Then @@ -100,27 +98,11 @@ Namespace API.Twitter Continue For End If - If IsSavedPosts OrElse Not ParseUserMediaOnly OrElse (Not nn.Contains("retweeted_status") OrElse - (Not ID.IsEmptyString AndAlso UID(nn("retweeted_status")) = ID)) Then - 'TODELETE: Twitter ObtainMedia - 'If Not CheckVideoNode(nn, PostID, PostDate) Then - ' s = nn.ItemF({"extended_entities", "media"}) - ' If s Is Nothing OrElse s.Count = 0 Then s = nn.ItemF({"retweeted_status", "extended_entities", "media"}) - ' If Not s Is Nothing AndAlso s.Count > 0 Then - ' For Each m In s - ' If m.Count > 0 AndAlso m.Contains("media_url") Then - ' dName = UrlFile(m("media_url").Value) - ' If Not dName.IsEmptyString AndAlso Not _DataNames.Contains(dName) Then - ' _DataNames.Add(dName) - ' _TempMediaList.ListAddValue(MediaFromData(m("media_url").Value, - ' PostID, PostDate, GetPictureOption(m)), LNC) - ' End If - ' End If - ' Next - ' End If - 'End If - ObtainMedia(nn, PostID, PostDate) - End If + If IsSavedPosts OrElse Not ParseUserMediaOnly OrElse + ( + Not nn.Contains("retweeted_status") OrElse + (Not ID.IsEmptyString AndAlso UID(nn("retweeted_status")) = ID) + ) Then ObtainMedia(nn, PostID, PostDate) End If Next @@ -144,8 +126,10 @@ Namespace API.Twitter ProcessException(ex, Token, $"data downloading error{IIf(IsSavedPosts, " (Saved Posts)", String.Empty)} [{URL}]") End Try End Sub +#End Region +#Region "Obtain media" Private Sub ObtainMedia(ByVal e As EContainer, ByVal PostID As String, ByVal PostDate As String, Optional ByVal State As UStates = UStates.Unknown) - If Not CheckVideoNode(e, PostID, PostDate) Then + If Not CheckVideoNode(e, PostID, PostDate, State) Then Dim s As EContainer = e.ItemF({"extended_entities", "media"}) If s Is Nothing OrElse s.Count = 0 Then s = e.ItemF({"retweeted_status", "extended_entities", "media"}) If If(s?.Count, 0) > 0 Then @@ -162,111 +146,16 @@ Namespace API.Twitter End If End If End Sub - Protected Overrides Sub ReparseMissing(ByVal Token As CancellationToken) - 'PENDING: Twitter ReparseMissing verify - Dim rList As New List(Of Integer) - Dim URL$ = String.Empty + Private Function CheckVideoNode(ByVal w As EContainer, ByVal PostID As String, ByVal PostDate As String, + Optional ByVal State As UStates = UStates.Unknown) As Boolean Try - If ContentMissingExists Then - Dim m As UserMedia - Dim r$, PostDate$ - Dim j As EContainer - For i% = 0 To _ContentList.Count - 1 - If _ContentList(i).State = UStates.Missing Then - m = _ContentList(i) - If Not m.Post.ID.IsEmptyString Then - ThrowAny(Token) - URL = $"https://api.twitter.com/1.1/statuses/show.json?id={m.Post.ID}" - r = Responser.GetResponse(URL,, EDP.ReturnValue) - If Not r.IsEmptyString Then - j = JsonDocument.Parse(r) - If Not j Is Nothing Then - PostDate = String.Empty - If j.Contains("created_at") Then PostDate = j("created_at").Value Else PostDate = String.Empty - ObtainMedia(j, m.Post.ID, PostDate, UStates.Missing) - rList.Add(i) - End If - End If - End If - End If - Next - End If - Catch ex As Exception - ProcessException(ex, Token, $"ReparseMissing error [{URL}]") - Finally - If rList.Count > 0 Then - For i% = rList.Count - 1 To 0 Step -1 : _ContentList.RemoveAt(i) : Next - rList.Clear() - End If - End Try - End Sub - Friend Shared Function GetVideoInfo(ByVal URL As String, ByVal resp As Response) As IEnumerable(Of UserMedia) - Try - If URL.Contains("twitter") Then - Dim PostID$ = RegexReplace(URL, RParams.DM("(?<=/)\d+", 0)) - If Not PostID.IsEmptyString Then - Dim r$ = DirectCast(resp.Copy(), Response).GetResponse($"https://api.twitter.com/1.1/statuses/show.json?id={PostID}",, EDP.ReturnValue) - If Not r.IsEmptyString Then - Using j As EContainer = JsonDocument.Parse(r) - If j.ListExists Then - Dim u$ = GetVideoNodeURL(j) - If Not u.IsEmptyString Then Return {MediaFromData(u, PostID, String.Empty)} - End If - End Using - End If - End If - End If - Return Nothing - Catch ex As Exception - Return ErrorsDescriber.Execute(EDP.ShowMainMsg + EDP.SendInLog, ex, "Video searching error") - End Try - End Function -#Region "Picture options" - Private Function GetPictureOption(ByVal w As EContainer) As String - Const P4K As String = "4096x4096" - Try - Dim ww As EContainer = w("sizes") - If ww.ListExists Then - Dim l As New List(Of Sizes) - Dim Orig As Sizes? = New Sizes(w.Value({"original_info"}, "height").FromXML(Of Integer)(-1), P4K) - If Orig.Value.Value = -1 Then Orig = Nothing - Dim LargeContained As Boolean = ww.Contains("large") - For Each v As EContainer In ww - If v.Count > 0 AndAlso v.Contains("h") Then l.Add(New Sizes(v.Value("h"), v.Name)) - Next - If l.Count > 0 Then - l.Sort() - If Orig.HasValue AndAlso l(0).Value < Orig.Value.Value Then - Return P4K - ElseIf l(0).Data.IsEmptyString Then - Return P4K - Else - Return l(0).Data - End If - Else - Return P4K - End If - ElseIf Not w.Value({"original_info"}, "height").IsEmptyString Then - Return P4K - Else - Return String.Empty - End If - Catch ex As Exception - LogError(ex, "[API.Twitter.UserData.GetPictureOption]") - Return String.Empty - End Try - End Function -#End Region -#Region "Video options" - Private Function CheckVideoNode(ByVal w As EContainer, ByVal PostID As String, ByVal PostDate As String) As Boolean - Try - If CheckForGif(w, PostID, PostDate) Then Return True + If CheckForGif(w, PostID, PostDate, State) Then Return True Dim URL$ = GetVideoNodeURL(w) If Not URL.IsEmptyString Then Dim f$ = UrlFile(URL) If Not f.IsEmptyString AndAlso Not _DataNames.Contains(f) Then _DataNames.Add(f) - _TempMediaList.ListAddValue(MediaFromData(URL, PostID, PostDate), LNC) + _TempMediaList.ListAddValue(MediaFromData(URL, PostID, PostDate,, State), LNC) End If Return True End If @@ -276,7 +165,8 @@ Namespace API.Twitter Return False End Try End Function - Private Function CheckForGif(ByVal w As EContainer, ByVal PostID As String, ByVal PostDate As String) As Boolean + Private Function CheckForGif(ByVal w As EContainer, ByVal PostID As String, ByVal PostDate As String, + Optional ByVal State As UStates = UStates.Unknown) As Boolean Try Dim gifUrl As Predicate(Of EContainer) = Function(e) Not e.Value("content_type").IsEmptyString AndAlso e.Value("content_type").Contains("mp4") AndAlso @@ -293,7 +183,7 @@ Namespace API.Twitter ff = UrlFile(url) If Not ff.IsEmptyString Then If Not _DataNames.Contains(ff) Then - m = MediaFromData(url, PostID, PostDate) + m = MediaFromData(url, PostID, PostDate,, State) f = m.File If Not f.IsEmptyString Then f.Name = $"GIF_{f.Name}" : m.File = f _TempMediaList.ListAddValue(m, LNC) @@ -332,6 +222,107 @@ Namespace API.Twitter End If Return String.Empty End Function +#End Region +#Region "ReparseMissing" + Protected Overrides Sub ReparseMissing(ByVal Token As CancellationToken) + Dim rList As New List(Of Integer) + Dim URL$ = String.Empty + Try + If ContentMissingExists Then + Dim m As UserMedia + Dim r$, PostDate$ + Dim j As EContainer + For i% = 0 To _ContentList.Count - 1 + If _ContentList(i).State = UStates.Missing Then + m = _ContentList(i) + If Not m.Post.ID.IsEmptyString Then + ThrowAny(Token) + URL = String.Format(SinglePostUrl, m.Post.ID) + r = Responser.GetResponse(URL,, EDP.ReturnValue) + If Not r.IsEmptyString Then + j = JsonDocument.Parse(r) + If Not j Is Nothing Then + PostDate = String.Empty + If j.Contains("created_at") Then PostDate = j("created_at").Value Else PostDate = String.Empty + ObtainMedia(j, m.Post.ID, PostDate, UStates.Missing) + rList.Add(i) + End If + End If + End If + End If + Next + End If + Catch ex As Exception + ProcessException(ex, Token, $"ReparseMissing error [{URL}]") + Finally + If rList.Count > 0 Then + For i% = rList.Count - 1 To 0 Step -1 : _ContentList.RemoveAt(i) : Next + rList.Clear() + End If + End Try + End Sub +#End Region +#Region "Get video static" + Friend Shared Function GetVideoInfo(ByVal URL As String, ByVal resp As Response) As IEnumerable(Of UserMedia) + Try + If URL.Contains("twitter") Then + Dim PostID$ = RegexReplace(URL, RParams.DM("(?<=/)\d+", 0)) + If Not PostID.IsEmptyString Then + Dim r$ + Using rc As Response = resp.Copy() : r = rc.GetResponse(String.Format(SinglePostUrl, PostID),, EDP.ReturnValue) : End Using + If Not r.IsEmptyString Then + Using j As EContainer = JsonDocument.Parse(r) + If j.ListExists Then + Dim u$ = GetVideoNodeURL(j) + If Not u.IsEmptyString Then Return {MediaFromData(u, PostID, String.Empty)} + End If + End Using + End If + End If + End If + Return Nothing + Catch ex As Exception + Return ErrorsDescriber.Execute(EDP.ShowMainMsg + EDP.SendInLog, ex, $"Twitter standalone downloader: fetch media error ({URL})") + End Try + End Function +#End Region +#Region "Picture options" + Private Function GetPictureOption(ByVal w As EContainer) As String + Const P4K As String = "4096x4096" + Try + Dim ww As EContainer = w("sizes") + If ww.ListExists Then + Dim l As New List(Of Sizes) + Dim Orig As Sizes? = New Sizes(w.Value({"original_info"}, "height").FromXML(Of Integer)(-1), P4K) + If Orig.Value.Value = -1 Then Orig = Nothing + Dim LargeContained As Boolean = ww.Contains("large") + For Each v As EContainer In ww + If v.Count > 0 AndAlso v.Contains("h") Then l.Add(New Sizes(v.Value("h"), v.Name)) + Next + If l.Count > 0 Then + l.Sort() + If Orig.HasValue AndAlso l(0).Value < Orig.Value.Value Then + Return P4K + ElseIf l(0).Data.IsEmptyString Then + Return P4K + Else + Return l(0).Data + End If + Else + Return P4K + End If + ElseIf Not w.Value({"original_info"}, "height").IsEmptyString Then + Return P4K + Else + Return String.Empty + End If + Catch ex As Exception + LogError(ex, "[API.Twitter.UserData.GetPictureOption]") + Return String.Empty + End Try + End Function +#End Region +#Region "UrlFile" Private Function UrlFile(ByVal URL As String) As String Try Dim f As SFile = CStr(RegexReplace(LinkFormatterSecure(RegexReplace(URL.Replace("\", String.Empty), LinkPattern)), FilesPattern)) @@ -341,6 +332,7 @@ Namespace API.Twitter End Try End Function #End Region +#Region "Create media" Private Shared Function MediaFromData(ByVal _URL As String, ByVal PostID As String, ByVal PostDate As String, Optional ByVal _PictureOption As String = Nothing, Optional ByVal State As UStates = UStates.Unknown) As UserMedia @@ -348,17 +340,21 @@ Namespace API.Twitter Dim m As New UserMedia(_URL) With {.PictureOption = _PictureOption, .Post = New UserPost With {.ID = PostID}} If Not m.URL.IsEmptyString Then m.File = CStr(RegexReplace(m.URL, FilesPattern)) If Not m.PictureOption.IsEmptyString And Not m.File.IsEmptyString And Not m.URL.IsEmptyString Then - m.URL_BASE = $"{m.URL.Replace($".{m.File.Extension}", String.Empty)}?format={m.File.Extension}&name={m.PictureOption}" + m.URL = $"{m.URL.Replace($".{m.File.Extension}", String.Empty)}?format={m.File.Extension}&name={m.PictureOption}" End If If Not PostDate.IsEmptyString Then m.Post.Date = AConvert(Of Date)(PostDate, Declarations.DateProvider, Nothing) Else m.Post.Date = Nothing m.State = State Return m End Function #End Region +#Region "Downloader" Protected Overrides Sub DownloadContent(ByVal Token As CancellationToken) DownloadContentDefault(Token) End Sub - Protected Overrides Function DownloadingException(ByVal ex As Exception, ByVal Message As String, Optional ByVal FromPE As Boolean = False) As Integer +#End Region +#Region "Exception" + Protected Overrides Function DownloadingException(ByVal ex As Exception, ByVal Message As String, Optional ByVal FromPE As Boolean = False, + Optional ByVal EObj As Object = Nothing) As Integer If Responser.StatusCode = HttpStatusCode.NotFound Then UserExists = False ElseIf Responser.StatusCode = HttpStatusCode.Unauthorized Then @@ -373,9 +369,12 @@ Namespace API.Twitter End If Return 1 End Function +#End Region +#Region "IDisposable support" Protected Overrides Sub Dispose(ByVal disposing As Boolean) If Not disposedValue And disposing Then _DataNames.Clear() MyBase.Dispose(disposing) End Sub +#End Region End Class End Namespace \ No newline at end of file diff --git a/SCrawler/API/UserDataBind.vb b/SCrawler/API/UserDataBind.vb index 250c479..8c4058a 100644 --- a/SCrawler/API/UserDataBind.vb +++ b/SCrawler/API/UserDataBind.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -6,17 +6,20 @@ ' ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY +Imports System.Threading +Imports SCrawler.API.Base Imports PersonalUtilities.Tools Imports PersonalUtilities.Functions.XML Imports PersonalUtilities.Functions.Messaging -Imports System.Threading -Imports SCrawler.API.Base Namespace API Friend Class UserDataBind : Inherits UserDataBase : Implements ICollection(Of IUserData), IMyEnumerator(Of IUserData) +#Region "Events" Friend Event OnCollectionSelfRemoved(ByVal Collection As IUserData) Friend Event OnUserRemoved(ByVal User As IUserData) +#End Region #Region "Declarations" Friend ReadOnly Property Collections As List(Of IUserData) +#Region "Base class overrides" Private _CollectionName As String = String.Empty Friend Overrides Property CollectionName As String Get @@ -30,6 +33,10 @@ Namespace API ChangeCollectionName(NewName, True) End Set End Property + Friend Overrides Sub ChangeCollectionName(ByVal NewName As String, ByVal UpdateSettings As Boolean) + _CollectionName = NewName + If Count > 0 Then Collections.ForEach(Sub(c) c.CollectionName = NewName) + End Sub Friend Overrides Property Name As String Get Return CollectionName @@ -38,6 +45,21 @@ Namespace API CollectionName = NewCollectionName End Set End Property + Friend Overrides Property FriendlyName As String + Get + If Count > 0 Then + Return Collections(0).FriendlyName + Else + Return String.Empty + End If + End Get + Set(ByVal NewName As String) + If Count > 0 Then Collections.ForEach(Sub(c) + c.FriendlyName = NewName + c.UpdateUserInformation() + End Sub) + End Set + End Property Friend Overrides Property UserExists As Boolean Get Return Count > 0 AndAlso Collections.Exists(Function(c) c.Exists) @@ -52,25 +74,6 @@ Namespace API Set(ByVal s As Boolean) End Set End Property - Friend Overrides Sub ChangeCollectionName(ByVal NewName As String, ByVal UpdateSettings As Boolean) - _CollectionName = NewName - If Count > 0 Then Collections.ForEach(Sub(c) c.CollectionName = NewName) - End Sub - Friend Overrides Property FriendlyName As String - Get - If Count > 0 Then - Return Collections(0).FriendlyName - Else - Return String.Empty - End If - End Get - Set(ByVal NewName As String) - If Count > 0 Then Collections.ForEach(Sub(c) - c.FriendlyName = NewName - c.UpdateUserInformation() - End Sub) - End Set - End Property #Region "Images" Friend Overrides Sub SetPicture(ByVal f As SFile) If Count > 0 Then Collections.ForEach(Sub(c) c.SetPicture(f)) @@ -97,15 +100,6 @@ Namespace API Return Count > 0 AndAlso Collections.Exists(Function(c) DirectCast(c, UserDataBase).ContentMissingExists) End Get End Property - Friend ReadOnly Property Count As Integer Implements ICollection(Of IUserData).Count, IMyEnumerator(Of IUserData).MyEnumeratorCount - Get - If Collections Is Nothing Then - Return 0 - Else - Return Collections.Count - End If - End Get - End Property Friend Overrides Property MyFile As SFile Get If Count > 0 Then Return Collections(0).File Else Return Nothing @@ -190,7 +184,7 @@ Namespace API End Property Friend Overrides Function GetUserInformation() As String Dim OutStr$ = String.Empty - If Count > 0 Then Collections.ForEach(Sub(c) OutStr.StringAppendLine(DirectCast(c, UserDataBase).GetUserInformation(), $"{vbCrLf}{vbCrLf}")) + If Count > 0 Then Collections.ForEach(Sub(c) OutStr.StringAppendLine(DirectCast(c, UserDataBase).GetUserInformation(), vbNewLine.StringDup(2))) Return OutStr End Function Friend Overrides Property LastUpdated As Date? @@ -224,6 +218,7 @@ Namespace API End Sub) End Set End Property +#End Region #Region "Context buttons" Friend ReadOnly Property ContextDown As ToolStripMenuItem() Get @@ -276,7 +271,6 @@ Namespace API Friend Sub New() _IsCollection = True Collections = New List(Of IUserData) - 'ImageHandler(Me, True) End Sub Friend Sub New(ByVal _Name As String) Me.New @@ -299,24 +293,48 @@ Namespace API #Region "Download" Friend Overrides Property DownloadTopCount As Integer? Get - If Count > 0 Then - Return Collections(0).DownloadTopCount - Else - Return Nothing - End If + Return If(Count > 0, Item(0).DownloadTopCount, Nothing) End Get Set(ByVal NewLimit As Integer?) If Count > 0 Then Collections.ForEach(Sub(c) c.DownloadTopCount = NewLimit) End Set End Property + Friend Overrides Property IncludeInTheFeed As Boolean + Get + Return If(Count > 0, DirectCast(Item(0), UserDataBase).IncludeInTheFeed, Nothing) + End Get + Set(ByVal Include As Boolean) + If Count > 0 Then Collections.ForEach(Sub(c) DirectCast(c, UserDataBase).IncludeInTheFeed = Include) + End Set + End Property + Friend Overrides Property DownloadDateFrom As Date? + Get + Return If(Count > 0, Item(0).DownloadDateFrom, Nothing) + End Get + Set(ByVal d As Date?) + If Count > 0 Then Collections.ForEach(Sub(c) c.DownloadDateFrom = d) + End Set + End Property + Friend Overrides Property DownloadDateTo As Date? + Get + Return If(Count > 0, Item(0).DownloadDateTo, Nothing) + End Get + Set(ByVal d As Date?) + If Count > 0 Then Collections.ForEach(Sub(c) c.DownloadDateTo = d) + End Set + End Property Friend Overrides Sub DownloadData(ByVal Token As CancellationToken) - If Count > 0 Then Downloader.AddRange(Collections) + If Count > 0 Then Downloader.AddRange(Collections, True) + End Sub + Friend Overloads Sub DownloadData(ByVal Token As CancellationToken, ByVal __IncludedInTheFeed As Boolean) + If Count > 0 Then Downloader.AddRange(Collections, __IncludedInTheFeed) End Sub Protected Overrides Sub DownloadDataF(ByVal Token As CancellationToken) End Sub Protected Overrides Sub DownloadContent(ByVal Token As CancellationToken) End Sub - Protected Overrides Function DownloadingException(ByVal ex As Exception, ByVal Message As String, Optional ByVal FromPE As Boolean = False) As Integer + Protected Overrides Function DownloadingException(ByVal ex As Exception, ByVal Message As String, Optional ByVal FromPE As Boolean = False, + Optional ByVal s As Object = Nothing) As Integer Return 0 End Function Private Sub User_OnUserUpdated(ByVal User As IUserData) @@ -336,19 +354,30 @@ Namespace API End Sub #End Region #Region "ICollection Support" - Default Friend ReadOnly Property Item(ByVal Index As Integer) As IUserData Implements IMyEnumerator(Of IUserData).MyEnumeratorObject - Get - Return Collections(Index) - End Get - End Property Private ReadOnly Property IsReadOnly As Boolean Implements ICollection(Of IUserData).IsReadOnly Get Return False End Get End Property Private Sub CopyTo(ByVal _Array() As IUserData, ByVal _ArrayIndex As Integer) Implements ICollection(Of IUserData).CopyTo - Throw New NotImplementedException("[CopyTo] method does not supported in collections context") + Throw New NotImplementedException("The [CopyTo] method is not supported in a collection context") End Sub +#End Region +#Region "Item, Count, Clear" + Default Friend ReadOnly Property Item(ByVal Index As Integer) As IUserData Implements IMyEnumerator(Of IUserData).MyEnumeratorObject + Get + Return Collections(Index) + End Get + End Property + Friend ReadOnly Property Count As Integer Implements ICollection(Of IUserData).Count, IMyEnumerator(Of IUserData).MyEnumeratorCount + Get + If Collections Is Nothing Then + Return 0 + Else + Return Collections.Count + End If + End Get + End Property Friend Sub Clear() Implements ICollection(Of IUserData).Clear Collections.ListClearDispose End Sub @@ -396,7 +425,7 @@ Namespace API Try With DirectCast(User, UserDataBase) If IsAdd Then - .CreateButtons(Count - 1) + .CreateButtons() AddHandler .BTT_CONTEXT_DELETE.Click, AddressOf DeleteRemoveUserFromCollection Else RemoveHandler .BTT_CONTEXT_DELETE.Click, AddressOf DeleteRemoveUserFromCollection @@ -466,89 +495,91 @@ Namespace API Return Collections.Remove(_Item) End If End Function - Friend Overrides Function Delete() As Integer + Friend Overrides Function Delete(Optional ByVal Multiple As Boolean = False) As Integer If Count > 0 Then + Const MsgTitle$ = "Deleting a collection" Dim f As SFile - If MsgBoxE({$"Collection may contain data{vbCr}Do you really want to delete collection and all of it files?", "Collection deleting"}, - MsgBoxStyle.Exclamation + MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then - f = Collections(0).File.CutPath(IIf(DataMerging, 1, 2)).PathWithSeparator - Settings.Users.Remove(Me) - Collections.ForEach(Sub(c) c.Delete()) - Downloader.UserRemove(Me) - MainFrameObj.ImageHandler(Me, False) - Collections.ListClearDispose - Dispose(False) - f.Delete(SFO.Path, SFODelete.EmptyOnly + Settings.DeleteMode, EDP.SendInLog) - Return 2 - Else - If DataMerging Then - MsgBoxE($"Collection [{CollectionName}] data are already merged{vbCr}Cannot split merged collection{vbCr}Operation canceled", MsgBoxStyle.Exclamation) - Return 0 - End If - If MsgBoxE({"Do you want to delete only the collection and split users' profiles??" & vbCr & - "Users will be removed from the collection and split by sites." & vbCr & - "All user data will remain.", "Collection deleting"}, - MsgBoxStyle.Question + MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then - f = Collections(0).File.CutPath(2) + Dim m As New MMessage($"Collection [{CollectionName} (number of profiles: {Count})] may contain data" & vbCr & + "Are you sure you want to delete the collection and all of its files?", MsgTitle, + {New MsgBoxButton("Delete") With {.ToolTip = "Delete the collection and all files"}, + New MsgBoxButton("Split") With { + .ToolTip = "Users will be removed from the collection and will be displayed in the program as separate users." & vbCr & + "All user data will remain."}, + "Cancel"}, vbExclamation) + Select Case If(Multiple, 0, MsgBoxE(m).Index) + Case 0 + f = Collections(0).File.CutPath(IIf(DataMerging, 1, 2)).PathWithSeparator Settings.Users.Remove(Me) - Collections.ForEach(Sub(c) - c.MoveFiles(String.Empty) - MainFrameObj.ImageHandler(c) - End Sub) - Collections.Clear() - f.Delete(SFO.Path, SFODelete.Default + Settings.DeleteMode, EDP.SendInLog) + Collections.ForEach(Sub(c) c.Delete()) Downloader.UserRemove(Me) MainFrameObj.ImageHandler(Me, False) + Collections.ListClearDispose Dispose(False) - Return 3 - Else - MsgBoxE("Operation canceled") - End If - End If + f.Delete(SFO.Path, SFODelete.EmptyOnly + Settings.DeleteMode, EDP.SendInLog) + Return 2 + Case 1 + If DataMerging Then + MsgBoxE({$"Collection [{CollectionName}] data merged{vbCr}Unable to split merged collection{vbCr}Operation canceled", MsgTitle}, vbExclamation) + Return 0 + Else + f = Collections(0).File.CutPath(2) + Settings.Users.Remove(Me) + Collections.ForEach(Sub(c) + c.MoveFiles(String.Empty) + MainFrameObj.ImageHandler(c) + End Sub) + Collections.Clear() + f.Delete(SFO.Path, SFODelete.Default + Settings.DeleteMode, EDP.SendInLog) + Downloader.UserRemove(Me) + MainFrameObj.ImageHandler(Me, False) + Dispose(False) + Return 3 + End If + Case Else : If Not Multiple Then MsgBoxE({"Operation canceled", MsgTitle}) + End Select End If Return 0 End Function Private Sub DeleteRemoveUserFromCollection(sender As Object, e As EventArgs) - With DirectCast(sender, ToolStripMenuItem) - Dim i% = AConvert(Of Integer)(.Tag, -1) - If i >= 0 Then - Dim n$ = Collections(i).Name - Dim s$ = Collections(i).Site.ToString - Dim RemoveMeIfNull As Action = Sub() - If Count = 0 Then - Settings.Users.Remove(Me) - MainFrameObj.ImageHandler(Me, False) - RaiseEvent OnCollectionSelfRemoved(Me) - Dispose(False) - End If - End Sub - Select Case MsgBoxE({$"Are you sure you want to remove user profile [{n}] of site [{s}] from collection [{Name}]?" & vbCr & - "You can remove a user from the collection while keeping data (Remove) or deleting the data (Delete)" & vbCr & - "Deleting this profile will remove it from the collection and all its data will be erased." & vbCr & - "Removing this profile will remove it from the collection and all its data will remain." & - "This user will still appear in the program, but not in the collection.", - "Deleting a user"}, vbExclamation,,, - { - New MsgBoxButton("Remove") With { - .ToolTip = "Remove a user from the collection only. All its data will remain. The user will appear in the program."}, - New MsgBoxButton("Delete") With { - .ToolTip = "Delete a user from the collection and erase their data."}, - "Cancel" - }).Index - Case 0 - Remove(Collections(i)) - MsgBoxE($"User [{s} - {n}] has been removed from the collection. Now it should be displayed in the program.") - RemoveMeIfNull.Invoke - Case 1 - Collections(i).Delete() - Collections(i).Dispose() - Collections.RemoveAt(i) - MsgBoxE($"User profile [{n}] of site [{s}] has been deleted") - RemoveMeIfNull.Invoke - Case Else : MsgBoxE("Operation canceled") - End Select - End If - End With + Dim obj As IUserData = DirectCast(sender, ToolStripMenuItem).Tag + Dim i% = Collections.IndexOf(obj) + If i >= 0 Then + Dim n$ = Collections(i).Name + Dim s$ = Collections(i).Site.ToString + Dim RemoveMeIfNull As Action = Sub() + If Count = 0 Then + Settings.Users.Remove(Me) + MainFrameObj.ImageHandler(Me, False) + RaiseEvent OnCollectionSelfRemoved(Me) + Dispose(False) + End If + End Sub + Select Case MsgBoxE({$"Are you sure you want to remove user profile [{n}] of site [{s}] from collection [{Name}]?" & vbCr & + "You can remove a user from the collection while keeping data (Remove) or deleting the data (Delete)" & vbCr & + "Deleting this profile will remove it from the collection and all its data will be erased." & vbCr & + "Removing this profile will remove it from the collection and all its data will remain." & + "This user will still appear in the program, but not in the collection.", + "Deleting a user"}, vbExclamation,,, + { + New MsgBoxButton("Remove") With { + .ToolTip = "Remove a user from the collection only. All its data will remain. The user will appear in the program."}, + New MsgBoxButton("Delete") With { + .ToolTip = "Delete a user from the collection and erase their data."}, + "Cancel" + }).Index + Case 0 + Remove(Collections(i)) + MsgBoxE($"User [{s} - {n}] has been removed from the collection. Now it should be displayed in the program.") + RemoveMeIfNull.Invoke + Case 1 + Collections(i).Delete() + Collections(i).Dispose() + Collections.RemoveAt(i) + MsgBoxE($"User profile [{n}] of site [{s}] has been deleted") + RemoveMeIfNull.Invoke + Case Else : MsgBoxE("Operation canceled") + End Select + End If End Sub #End Region #Region "Copy" @@ -569,18 +600,18 @@ Namespace API Return GetEnumerator() End Function #End Region +#Region "IEquatable support" Friend Overrides Function Equals(ByVal Other As UserDataBase) As Boolean If Other.IsCollection Then Return CollectionName = Other.CollectionName Else - Return Count > 0 AndAlso Collections.Exists(Function(u) u.Equals(Other)) + Return False End If End Function +#End Region #Region "IDisposable Support" Protected Overrides Sub Dispose(ByVal disposing As Boolean) - If Not disposedValue Then - If disposing Then Collections.ListClearDispose - End If + If Not disposedValue And disposing Then Collections.ListClearDispose MyBase.Dispose(disposing) End Sub #End Region diff --git a/SCrawler/API/XVIDEOS/Declarations.vb b/SCrawler/API/XVIDEOS/Declarations.vb new file mode 100644 index 0000000..cbd310f --- /dev/null +++ b/SCrawler/API/XVIDEOS/Declarations.vb @@ -0,0 +1,19 @@ +' Copyright (C) 2023 Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY +Imports PersonalUtilities.Functions.RegularExpressions +Namespace API.XVIDEOS + Friend Module Declarations + Friend Const XvideosSiteKey As String = "AndyProgram_XVIDEOS" + Friend ReadOnly Property M3U8Regex As RParams = RParams.DM("http.+?.m3u8.*?(?=')", 0) + Friend ReadOnly Property VideoTitleRegex As RParams = RParams.DMS("html5player.setVideoTitle\('(.+)(?='\);)", 1) + Friend ReadOnly Property VideoID As RParams = RParams.DMS(".*?www.xvideos.com/(video\d+).*", 1) + Friend ReadOnly Property M3U8Reparse As RParams = RParams.DM("NAME=""(\d+).*?""[\r\n]*?(.+)(?=(|[\r\n]+?))", 0, RegexReturn.List) + Friend ReadOnly Property M3U8Appender As RParams = RParams.DM("(.+)(?=/.+?\.m3u8.*?)", 0) + End Module +End Namespace \ No newline at end of file diff --git a/SCrawler/API/XVIDEOS/M3U8.vb b/SCrawler/API/XVIDEOS/M3U8.vb new file mode 100644 index 0000000..dd6d9fb --- /dev/null +++ b/SCrawler/API/XVIDEOS/M3U8.vb @@ -0,0 +1,66 @@ +' Copyright (C) 2023 Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY +Imports System.Net +Imports PersonalUtilities.Tools.WEB +Namespace API.XVIDEOS + Friend NotInheritable Class M3U8 + Private Sub New() + End Sub + Private Shared Function Save(ByVal URLs As List(Of String), ByVal ffmpegFile As SFile, ByVal f As SFile) As SFile + Dim CachePath As SFile = Nothing + Try + If URLs.ListExists Then + Dim ConcatFile As SFile = f + If ConcatFile.Name.IsEmptyString Then ConcatFile.Name = "PlayListFile" + ConcatFile.Extension = "mp4" + CachePath = $"{f.PathWithSeparator}_Cache\{SFile.GetDirectories($"{f.PathWithSeparator}_Cache\",,, EDP.ReturnValue).ListIfNothing.Count + 1}\" + If CachePath.Exists(SFO.Path) Then + Dim p As New SFileNumbers(ConcatFile.Name,,, New ANumbers With {.Format = ANumbers.Formats.General}) + ConcatFile = SFile.Indexed_IndexFile(ConcatFile,, p, EDP.ReturnValue) + Dim i% + Dim eFiles As New List(Of SFile) + Dim dFile As SFile = CachePath + dFile.Extension = "ts" + Using w As New WebClient + For i = 0 To URLs.Count - 1 + dFile.Name = $"ConPart_{i}" + w.DownloadFile(URLs(i), dFile) + eFiles.Add(dFile) + Next + End Using + f = FFMPEG.ConcatenateFiles(eFiles, ffmpegFile, ConcatFile, p, EDP.ThrowException) + eFiles.Clear() + Return f + End If + End If + Return Nothing + Finally + CachePath.Delete(SFO.Path, SFODelete.None, EDP.None) + End Try + End Function + Friend Shared Function Download(ByVal URL As String, ByVal Appender As String, ByVal ffmpegFile As SFile, ByVal f As SFile) As SFile + Try + If Not URL.IsEmptyString Then + Using w As New WebClient + Dim r$ = w.DownloadString(URL) + If Not r.IsEmptyString Then + Dim l As List(Of String) = ListAddList(Nothing, r.StringFormatLines.StringToList(Of String)(vbNewLine).ListWithRemove(Function(v) v.Trim.StartsWith("#")), + New ListAddParams With {.Converter = Function(Input) $"{Appender}/{Input.ToString.Trim}"}) + If l.ListExists Then Return Save(l, ffmpegFile, f) + End If + End Using + End If + Return Nothing + Catch ex As Exception + ErrorsDescriber.Execute(EDP.SendInLog, ex, $"[M3U8.Download({URL}, {Appender}, {ffmpegFile}, {f})]") + Throw ex + End Try + End Function + End Class +End Namespace \ No newline at end of file diff --git a/SCrawler/API/XVIDEOS/SettingsForm.Designer.vb b/SCrawler/API/XVIDEOS/SettingsForm.Designer.vb new file mode 100644 index 0000000..2560240 --- /dev/null +++ b/SCrawler/API/XVIDEOS/SettingsForm.Designer.vb @@ -0,0 +1,80 @@ +' Copyright (C) 2023 Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY +Namespace API.XVIDEOS + + Partial Friend Class SettingsForm : Inherits System.Windows.Forms.Form + + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + Private components As System.ComponentModel.IContainer + + Private Sub InitializeComponent() + Dim CONTAINER_MAIN As System.Windows.Forms.ToolStripContainer + Me.LIST_DOMAINS = New System.Windows.Forms.ListBox() + CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer() + CONTAINER_MAIN.ContentPanel.SuspendLayout() + CONTAINER_MAIN.SuspendLayout() + Me.SuspendLayout() + ' + 'CONTAINER_MAIN + ' + ' + 'CONTAINER_MAIN.ContentPanel + ' + CONTAINER_MAIN.ContentPanel.Controls.Add(Me.LIST_DOMAINS) + CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(384, 241) + CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill + CONTAINER_MAIN.LeftToolStripPanelVisible = False + CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0) + CONTAINER_MAIN.Name = "CONTAINER_MAIN" + CONTAINER_MAIN.RightToolStripPanelVisible = False + CONTAINER_MAIN.Size = New System.Drawing.Size(384, 291) + CONTAINER_MAIN.TabIndex = 0 + ' + 'LIST_DOMAINS + ' + Me.LIST_DOMAINS.Dock = System.Windows.Forms.DockStyle.Fill + Me.LIST_DOMAINS.FormattingEnabled = True + Me.LIST_DOMAINS.Location = New System.Drawing.Point(0, 0) + Me.LIST_DOMAINS.Name = "LIST_DOMAINS" + Me.LIST_DOMAINS.Size = New System.Drawing.Size(384, 241) + Me.LIST_DOMAINS.TabIndex = 0 + ' + 'SettingsForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(384, 291) + Me.Controls.Add(CONTAINER_MAIN) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle + Me.Icon = Global.SCrawler.My.Resources.SiteResources.XvideosIcon_48 + Me.KeyPreview = True + Me.MaximizeBox = False + Me.MaximumSize = New System.Drawing.Size(400, 330) + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(400, 330) + Me.Name = "SettingsForm" + Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide + Me.Text = "Settings" + CONTAINER_MAIN.ContentPanel.ResumeLayout(False) + CONTAINER_MAIN.ResumeLayout(False) + CONTAINER_MAIN.PerformLayout() + Me.ResumeLayout(False) + + End Sub + Private WithEvents LIST_DOMAINS As Windows.Forms.ListBox + End Class +End Namespace \ No newline at end of file diff --git a/SCrawler/Download/SchedulerEditorForm.resx b/SCrawler/API/XVIDEOS/SettingsForm.resx similarity index 100% rename from SCrawler/Download/SchedulerEditorForm.resx rename to SCrawler/API/XVIDEOS/SettingsForm.resx diff --git a/SCrawler/API/XVIDEOS/SettingsForm.vb b/SCrawler/API/XVIDEOS/SettingsForm.vb new file mode 100644 index 0000000..be8ed58 --- /dev/null +++ b/SCrawler/API/XVIDEOS/SettingsForm.vb @@ -0,0 +1,70 @@ +' Copyright (C) 2023 Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY +Imports PersonalUtilities.Forms +Imports PersonalUtilities.Forms.Toolbars +Namespace API.XVIDEOS + Friend Class SettingsForm + Private Const SettingsDesignXmlNode As String = "XvideosSettingsForm" + Private WithEvents MyDefs As DefaultFormOptions + Private ReadOnly Property Source As SiteSettings + Friend Sub New(ByRef s As SiteSettings) + InitializeComponent() + Source = s + MyDefs = New DefaultFormOptions(Me, Settings.Design) + End Sub + Private Sub SettingsForm_Load(sender As Object, e As EventArgs) Handles Me.Load + With MyDefs + If Not Settings.Design.Contains(SettingsDesignXmlNode) Then Settings.Design.Add(SettingsDesignXmlNode, String.Empty) + .MyViewInitialize(Me, Settings.Design(SettingsDesignXmlNode), True) + .AddEditToolbar() + .AddOkCancelToolbar() + If Source.Domains.Count > 0 Then Source.Domains.ForEach(Sub(d) LIST_DOMAINS.Items.Add(d)) + .EndLoaderOperations() + End With + End Sub + Private Sub MyDefs_ButtonOkClick(ByVal Sender As Object, ByVal e As KeyHandleEventArgs) Handles MyDefs.ButtonOkClick + Source.Domains.Clear() + With LIST_DOMAINS + If .Items.Count > 0 Then + For Each i In .Items : Source.Domains.Add(i.ToString) : Next + End If + End With + Source.UpdateDomains() + MyDefs.CloseForm() + End Sub + Private Sub MyDefs_ButtonAddClick(ByVal Sender As Object, ByVal e As EditToolbarEventArgs) Handles MyDefs.ButtonAddClick + Dim nd$ = InputBoxE("Enter a new domain using the pattern [xvideos.com]:", "New domain") + If Not nd.IsEmptyString Then + If Not LIST_DOMAINS.Items.Contains(nd) Then + LIST_DOMAINS.Items.Add(nd) + Else + MsgBoxE($"The domain [{nd}] already added") + End If + End If + End Sub + Private Sub MyDefs_ButtonDeleteClickE(ByVal Sender As Object, ByVal e As EditToolbarEventArgs) Handles MyDefs.ButtonDeleteClickE + Const MsgTitle$ = "Removing domains" + If _LatestSelected.ValueBetween(0, LIST_DOMAINS.Items.Count - 1) Then + Dim n$ = LIST_DOMAINS.Items(_LatestSelected) + If MsgBoxE({$"Are you sure you want to delete the [{n}] domain?", MsgTitle}, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then + LIST_DOMAINS.Items.RemoveAt(_LatestSelected) + MsgBoxE({$"Domain [{n}] removed", MsgTitle}) + Else + MsgBoxE({"Operation canceled", MsgTitle}) + End If + Else + MsgBoxE({"No domain selected", MsgTitle}, vbExclamation) + End If + End Sub + Private _LatestSelected As Integer = -1 + Private Sub LIST_DOMENS_SelectedIndexChanged(sender As Object, e As EventArgs) Handles LIST_DOMAINS.SelectedIndexChanged + _LatestSelected = LIST_DOMAINS.SelectedIndex + End Sub + End Class +End Namespace \ No newline at end of file diff --git a/SCrawler/API/XVIDEOS/SiteSettings.vb b/SCrawler/API/XVIDEOS/SiteSettings.vb new file mode 100644 index 0000000..0c1103a --- /dev/null +++ b/SCrawler/API/XVIDEOS/SiteSettings.vb @@ -0,0 +1,130 @@ +' Copyright (C) 2023 Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY +Imports SCrawler.API.Base +Imports SCrawler.Plugin +Imports SCrawler.Plugin.Attributes +Imports PersonalUtilities.Functions.RegularExpressions +Imports PersonalUtilities.Tools.WEB +Namespace API.XVIDEOS + + Friend Class SiteSettings : Inherits SiteSettingsBase +#Region "Images" + Friend Overrides ReadOnly Property Icon As Icon + Get + Return My.Resources.SiteResources.XvideosIcon_48 + End Get + End Property + Friend Overrides ReadOnly Property Image As Image + Get + Return My.Resources.SiteResources.XvideosPic_32 + End Get + End Property +#End Region +#Region "Declarations" + Private Property SiteDomains As PropertyValue + + Public Property DownloadUHD As PropertyValue + Friend ReadOnly Property Domains As List(Of String) + Private Const DomainsDefault As String = "xvideos.com|xnxx.com" + Private _Initialized As Boolean = False +#End Region +#Region "Initializer" + Friend Sub New() + MyBase.New("XVIDEOS", "www.xvideos.com") + Domains = New List(Of String) + SiteDomains = New PropertyValue(DomainsDefault, GetType(String), Sub(s) UpdateDomains()) + DownloadUHD = New PropertyValue(False) + End Sub + Friend Overrides Sub EndInit() + _Initialized = True + UpdateDomains() + End Sub +#End Region +#Region "Update" + Private _DomainsUpdateInProgress As Boolean = False + Friend Sub UpdateDomains() + If Not _Initialized Then Exit Sub + If Not _DomainsUpdateInProgress Then + _DomainsUpdateInProgress = True + If Not ACheck(SiteDomains.Value) Then SiteDomains.Value = DomainsDefault + Domains.ListAddList(CStr(SiteDomains.Value).Split("|"), LAP.NotContainsOnly, LAP.ClearBeforeAdd) + Domains.ListAddList(DomainsDefault.Split("|"), LAP.NotContainsOnly) + SiteDomains.Value = Domains.ListToString("|") + _DomainsUpdateInProgress = False + End If + End Sub + Friend Overrides Sub Update() + UpdateDomains() + Responser.SaveSettings() + End Sub +#End Region +#Region "Download" + Friend Overrides Function GetInstance(ByVal What As ISiteSettings.Download) As IPluginContentProvider + Return New UserData + End Function + Friend Overrides Function Available(ByVal What As ISiteSettings.Download, ByVal Silent As Boolean) As Boolean + Return Settings.UseM3U8 + End Function +#End Region +#Region "User: get, check" + Friend Overrides Function GetUserUrl(ByVal UserName As String, ByVal Channel As Boolean) As String + Dim user$ = UserName.Split("_").FirstOrDefault + user &= $"/{UserName.Replace($"{user}_", String.Empty)}" + Return user + End Function + Private Const UserRegexDefault As String = "/(profiles|[\w]*?[-]{0,1}channels)/([^/]+)(\Z|.*?)" + Private Const URD As String = ".*?{0}{1}" + Friend Overrides Function IsMyUser(ByVal UserURL As String) As ExchangeOptions + If Not UserURL.IsEmptyString Then + If Domains.Count > 0 Then + Dim uName$, uOpt$, fStr$ + For i% = 0 To Domains.Count - 1 + fStr = String.Format(URD, Domains(i), UserRegexDefault) + uName = RegexReplace(UserURL, RParams.DMS(fStr, 2)) + If Not uName.IsEmptyString Then + uOpt = RegexReplace(UserURL, RParams.DMS(fStr, 1)) + If Not uOpt.IsEmptyString Then Return New ExchangeOptions(Site, $"{uOpt}_{uName}") + End If + Next + End If + End If + Return Nothing + End Function +#End Region +#Region "Settings" + Friend Overrides Sub OpenSettingsForm() + Using f As New SettingsForm(Me) : f.ShowDialog() : End Using + End Sub +#End Region +#Region "Get special data" + Friend Overrides Function IsMyImageVideo(ByVal URL As String) As ExchangeOptions + If Not URL.IsEmptyString And Domains.Count > 0 Then + If Domains.Exists(Function(d) URL.Contains(d)) Then Return New ExchangeOptions With {.UserName = URL, .Exists = True} + End If + Return Nothing + End Function + Friend Overrides Function GetSpecialData(ByVal URL As String, ByVal Path As String, ByVal AskForPath As Boolean) As IEnumerable + If Not URL.IsEmptyString And Settings.UseM3U8 Then + Dim spf$ = String.Empty + Dim f As SFile = GetSpecialDataFile(Path, AskForPath, spf) + f.Name = "video" + f.Extension = "mp4" + Using resp As Response = Responser.Copy + Using user As New UserData With {.HOST = Settings(XvideosSiteKey)} + DirectCast(user, UserDataBase).User.File = f + Dim p As UserMedia = user.Download(URL, resp, DownloadUHD.Value, String.Empty) + If p.State = UserMedia.States.Downloaded Then p.SpecialFolder = spf : Return {p} + End Using + End Using + End If + Return Nothing + End Function +#End Region + End Class +End Namespace \ No newline at end of file diff --git a/SCrawler/API/XVIDEOS/UserData.vb b/SCrawler/API/XVIDEOS/UserData.vb new file mode 100644 index 0000000..93260f5 --- /dev/null +++ b/SCrawler/API/XVIDEOS/UserData.vb @@ -0,0 +1,185 @@ +' Copyright (C) 2023 Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY +Imports System.Threading +Imports SCrawler.API.Base +Imports PersonalUtilities.Functions.XML +Imports PersonalUtilities.Functions.RegularExpressions +Imports PersonalUtilities.Tools.WEB +Imports PersonalUtilities.Tools.WebDocuments.JSON +Imports UStates = SCrawler.API.Base.UserMedia.States +Imports UTypes = SCrawler.API.Base.UserMedia.Types +Namespace API.XVIDEOS + Friend Class UserData : Inherits UserDataBase + Private ReadOnly Property MySettings As SiteSettings + Get + Return DirectCast(HOST.Source, SiteSettings) + End Get + End Property + Protected Overrides Sub LoadUserInformation_OptionalFields(ByRef Container As XmlFile, ByVal Loading As Boolean) + End Sub + Friend Sub New() + SeparateVideoFolder = False + UseInternalM3U8Function = True + End Sub + Protected Overrides Sub DownloadDataF(ByVal Token As CancellationToken) + Dim URL$ = String.Empty + Try + If Not Settings.UseM3U8 Then + If Not Settings.OS64 Then + MyMainLOG = $"XVIDEOS [{ToStringForLog()}]: The plugin only works with x64 OS." + Else + MyMainLOG = $"{ToStringForLog()}: File [ffmpeg.exe] not found" + End If + Exit Sub + End If + + Dim NextPage% = 0 + Dim r$ + Dim jj As EContainer + Dim e As ErrorsDescriber = EDP.ThrowException + Dim user$ = MySettings.GetUserUrl(Name, False) + Dim p As UserMedia + Dim EnvirSet As Boolean = False + + Do + ThrowAny(Token) + URL = $"https://www.xvideos.com/{user}/videos/new/{If(NextPage = 0, String.Empty, NextPage)}" + r = Responser.GetResponse(URL,, e) + If Not r.IsEmptyString Then + If Not EnvirSet Then UserExists = True : UserSuspended = False : EnvirSet = True + With JsonDocument.Parse(r).XmlIfNothing + If .Contains("videos") Then + With .Item("videos") + If .Count > 0 Then + NextPage += 1 + For Each jj In .Self + p = New UserMedia With { + .Post = New UserPost With {.ID = jj.Value("id")}, + .URL = $"https://www.xvideos.com{jj.Value("u")}" + } + If Not p.Post.ID.IsEmptyString And Not jj.Value("u").IsEmptyString Then + If Not _TempPostsList.Contains(p.Post.ID) Then + _TempPostsList.Add(p.Post.ID) + _TempMediaList.Add(p) + Else + .Dispose() + Exit Do + End If + End If + Next + Else + .Dispose() + Exit Do + End If + End With + Else + .Dispose() + Exit Do + End If + .Dispose() + End With + Else + Exit Do + End If + Loop + + If _TempMediaList.Count > 0 Then + For i% = 0 To _TempMediaList.Count - 1 + ThrowAny(Token) + With _TempMediaList(i) : _TempMediaList(i) = GetVideoData(.URL, Responser, MySettings.DownloadUHD.Value, .Post.ID) : End With + Next + _TempMediaList.RemoveAll(Function(m) m.URL.IsEmptyString) + End If + Catch oex As OperationCanceledException + Catch dex As ObjectDisposedException + Catch ex As Exception + If Responser.StatusCode = Net.HttpStatusCode.NotFound Then + UserExists = False + Else + ProcessException(ex, Token, $"data downloading error [{URL}]") + End If + Finally + If _TempMediaList.ListExists Then _TempMediaList.RemoveAll(Function(m) m.URL.IsEmptyString) + End Try + End Sub + Private Function GetVideoData(ByVal URL As String, ByVal resp As Response, ByVal DownloadUHD As Boolean, ByVal ID As String) As UserMedia + Try + If Not URL.IsEmptyString Then + Dim r$ = resp.GetResponse(URL,, EDP.ThrowException) + If Not r.IsEmptyString Then + Dim m$ = RegexReplace(r, M3U8Regex) + If Not m.IsEmptyString Then + Dim appender$ = RegexReplace(m, M3U8Appender) + Dim t$ = RegexReplace(r, VideoTitleRegex) + r = resp.GetResponse(m,, EDP.ThrowException) + If Not r.IsEmptyString Then + Dim ls As List(Of Sizes) = RegexFields(Of Sizes)(r, {M3U8Reparse}, {1, 2}) + If ls.ListExists And Not DownloadUHD Then ls.RemoveAll(Function(v) Not v.Value.ValueBetween(1, 1080)) + If ls.ListExists Then + ls.Sort() + m = $"{appender}/{ls(0).Data}" + ls.Clear() + Dim pID$ = ID + If pID.IsEmptyString Then pID = RegexReplace(r, VideoID) + If pID.IsEmptyString Then pID = "0" + + If Not t.IsEmptyString Then t = t.StringRemoveWinForbiddenSymbols(" ") + If t.IsEmptyString Then + t = pID + Else + If t.Length > 100 Then t = Left(t, 100) + End If + If Not m.IsEmptyString Then + Return New UserMedia With { + .Type = UTypes.m3u8, + .Post = New UserPost With {.ID = pID}, + .URL = m, + .File = $"{t}.mp4", + .PictureOption = appender + } + End If + End If + End If + End If + End If + End If + Return Nothing + Catch ex As Exception + LogError(ex, $"[XVIDEOS.UserData.GetVideoData({URL})]") + Return Nothing + End Try + End Function + Friend Function Download(ByVal URL As String, ByVal resp As Response, ByVal DownloadUHD As Boolean, ByVal ID As String) + Dim m As UserMedia = GetVideoData(URL, resp, DownloadUHD, ID) + If Not m.URL.IsEmptyString Then + Dim f As SFile = m.File + f.Path = MyFile.PathNoSeparator + m.State = UStates.Tried + Try + f = M3U8.Download(m.URL, m.PictureOption, Settings.FfmpegFile, f) + m.File = f + m.State = UStates.Downloaded + Catch ex As Exception + m.State = UStates.Missing + End Try + End If + Return m + End Function + Protected Overrides Sub DownloadContent(ByVal Token As CancellationToken) + DownloadContentDefault(Token) + End Sub + Protected Overrides Function DownloadM3U8(ByVal URL As String, ByVal Media As UserMedia, ByVal DestinationFile As SFile) As SFile + Return M3U8.Download(Media.URL, Media.PictureOption, Settings.FfmpegFile, DestinationFile) + End Function + Protected Overrides Function DownloadingException(ByVal ex As Exception, ByVal Message As String, Optional ByVal FromPE As Boolean = False, + Optional ByVal EObj As Object = Nothing) As Integer + Return 0 + End Function + End Class +End Namespace \ No newline at end of file diff --git a/SCrawler/Channels/ChannelViewForm.Designer.vb b/SCrawler/Channels/ChannelViewForm.Designer.vb index bbf55c6..998d071 100644 --- a/SCrawler/Channels/ChannelViewForm.Designer.vb +++ b/SCrawler/Channels/ChannelViewForm.Designer.vb @@ -1,4 +1,12 @@ - +' Copyright (C) 2023 Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY + Partial Friend Class ChannelViewForm : Inherits System.Windows.Forms.Form Protected Overrides Sub Dispose(ByVal disposing As Boolean) @@ -17,7 +25,6 @@ Partial Friend Class ChannelViewForm : Inherits System.Windows.Forms.Form Dim SEP_1 As System.Windows.Forms.ToolStripSeparator Dim CONTEXT_SEP_1 As System.Windows.Forms.ToolStripSeparator Dim CONTEXT_SEP_2 As System.Windows.Forms.ToolStripSeparator - Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(ChannelViewForm)) Me.TT_MAIN = New System.Windows.Forms.ToolTip(Me.components) Me.ToolbarTOP = New System.Windows.Forms.ToolStrip() Me.BTT_DOWNLOAD = New System.Windows.Forms.ToolStripButton() @@ -69,7 +76,7 @@ Partial Friend Class ChannelViewForm : Inherits System.Windows.Forms.Form 'BTT_DOWNLOAD ' Me.BTT_DOWNLOAD.AutoToolTip = False - Me.BTT_DOWNLOAD.Image = Global.SCrawler.My.Resources.Resources.StartPic_01_Green_16 + Me.BTT_DOWNLOAD.Image = Global.SCrawler.My.Resources.Resources.StartPic_Green_16 Me.BTT_DOWNLOAD.ImageTransparentColor = System.Drawing.Color.Magenta Me.BTT_DOWNLOAD.Name = "BTT_DOWNLOAD" Me.BTT_DOWNLOAD.Size = New System.Drawing.Size(104, 22) @@ -78,7 +85,7 @@ Partial Friend Class ChannelViewForm : Inherits System.Windows.Forms.Form 'BTT_STOP ' Me.BTT_STOP.Enabled = False - Me.BTT_STOP.Image = Global.SCrawler.My.Resources.Resources.Delete + Me.BTT_STOP.Image = Global.SCrawler.My.Resources.Resources.DeletePic_24 Me.BTT_STOP.ImageTransparentColor = System.Drawing.Color.Magenta Me.BTT_STOP.Name = "BTT_STOP" Me.BTT_STOP.Size = New System.Drawing.Size(51, 22) @@ -87,7 +94,7 @@ Partial Friend Class ChannelViewForm : Inherits System.Windows.Forms.Form ' 'BTT_ADD_USERS ' - Me.BTT_ADD_USERS.Image = Global.SCrawler.My.Resources.Resources.PlusPIC + Me.BTT_ADD_USERS.Image = Global.SCrawler.My.Resources.Resources.PlusPic_24 Me.BTT_ADD_USERS.ImageTransparentColor = System.Drawing.Color.Magenta Me.BTT_ADD_USERS.Name = "BTT_ADD_USERS" Me.BTT_ADD_USERS.Size = New System.Drawing.Size(49, 22) @@ -177,7 +184,7 @@ Partial Friend Class ChannelViewForm : Inherits System.Windows.Forms.Form Me.Controls.Add(Me.LIST_POSTS) Me.Controls.Add(Me.ToolbarBOTTOM) Me.Controls.Add(Me.ToolbarTOP) - Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.Icon = Global.SCrawler.My.Resources.SiteResources.RedditIcon_128 Me.KeyPreview = True Me.MinimumSize = New System.Drawing.Size(760, 500) Me.Name = "ChannelViewForm" diff --git a/SCrawler/Channels/ChannelViewForm.resx b/SCrawler/Channels/ChannelViewForm.resx index 814e7af..2b2f3a8 100644 --- a/SCrawler/Channels/ChannelViewForm.resx +++ b/SCrawler/Channels/ChannelViewForm.resx @@ -138,1137 +138,4 @@ 342, 17 - - - - AAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAABAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAEb/AABG/wMARv8PAEX/IgBF/0AARf9fAEX/fQBF/5wARf+6AEX/zQBF - /90ARf/rAEX/8wBF//gARf/8AEX//ABF//gARf/zAEX/6wBF/90ARf/NAEX/ugBF/5wARf99AEX/XwBF - /0AARf8iAEb/DwBG/wMARv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABH/wAAR/8DAEb/FABG/zQARf9dAEX/iwBF - /7MARf/RAEX/5wBF//QARf/6AEX//gBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//gBF//oARf/0AEX/5wBF/9EARf+zAEX/iwBF/10ARv80AEb/FABH - /wMAR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASf8AAD//AABG - /wYARv8iAEX/UwBF/4sARf/AAEX/5QBF//cARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX/9wBF/+UARf/AAEX/iwBF/1MARv8iAEb/BgA//wAASf8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAARv8AAEb/AwBF/x4ARv9WAEX/mQBF/9MARf/0AEX//gBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf/+AEX/9ABF/9MARf+ZAEb/VgBF/x4ARv8DAEb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABH/wAAJv8AAEb/DABF/zsARf+FAEX/zABF - //QARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/0AEX/zABF - /4UARf87AEb/DAAm/wAAR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABH - /wAASv8AAEb/EwBF/1AARf+nAEX/5gBF//0ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//QBF/+YARf+nAEX/UABG/xMASv8AAEf/AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABH/wAAT/8AAEb/FABF/1oARf+3AEX/8ABF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf/wAEX/twBF/1oARv8UAE//AABH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABI/wAAQ/8AAEX/DgBF - /1QARf+2AEX/8gBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/8gBF - /7YARf9UAEX/DgBD/wAASP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAARv8AAEb/BgBG/z4ARf+mAEX/8ABF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//AARf+mAEb/PgBG/wYARv8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR/8AAFP/AABG/yAARf+FAEX/4wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf/jAEX/hQBG/yAAU/8AAEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAEb/AABG/wkARf9SAEX/wwBF//sARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/7AEX/wwBF - /1IARv8JAEb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEf/AAA8/wAARv8eAEX/igBF/+sARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/6wBF/4oARv8eADz/AABH/wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABG - /wAARv8DAEX/QABF/7sARf/7AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/+wBF/7sARf9AAEf/AwBG/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARv8AAEb/CgBF/2MARf/cAEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF/9wARf9jAEb/CgBG - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARf8AAEX/AABF - /xUARf+HAEX/7wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF/+8ARf+HAEX/FQBF/wAARf8AAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAEf/AABD/wAARf8hAEX/oQBF//gARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //gARf+hAEX/IQBD/wAAR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABH/wAAQv8AAEb/LQBF - /7UARf/8AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//wARf+1AEX/LQBB/wAAR/8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAR/8AAD3/AABG/zMARf/AAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf/AAEb/MwA9/wAAR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEf/AAA8/wAARf83AEX/xgBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/GAEX/NwA8 - /wAAR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAABG/wAAQ/8AAEb/MwBF/8YARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/GAEb/MwBD/wAARv8AAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR/8AAET/AABF/ywARf/AAEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf/AAEX/LABE/wAAR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAEX/AABF/wAARf8hAEX/tQBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf+1AEX/IQBF/wAARf8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARf8AAEX/FQBF/6EARf/9AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//0ARf+hAEX/FQBF/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAEX/AABG/woARf+HAEX/+QBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//kARf+HAEb/CgBF - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABG/wAASP8CAEX/YwBF/+4ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF/+4ARf9jAEj/AgBG/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAARv8AAEP/AABF/0AARf/cAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AET//wBE//8AQ///AEP//wBC//8AQv//AEP//wBD//8AQ///AEP//wBC//8AQv//AEP//wBD - //8ARP//AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - /9wARf9AAEP/AABG/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABF/wAARf8eAEX/uwBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AET//wBD//8AQ///AUT//wZJ//8QUP//HFn//yxk//87b///SHj//1F/ - //9Xhf//W4f//1uH//9Xhf//UX///0h4//87b///K2T//xxZ//8QUP//Bkn//wFE//8AQ///AEP//wBE - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF/7sARf8eAEX/AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAARv8AAEf/CABF/4oARf/7AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8AQ///AEP//wNG//8RUf//L2f//1WC - //97n///n7j//7vN///Q3f//4en//+rw///x9f//9ff///b5///3+f//9/n///b5///19///8fX//+rw - ///g6f//0N3//7rM//+euP//e57//1SB//8uZv//EVH//wNG//8AQ///AEP//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/+wBF/4oAR/8IAEb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEb/AABC/wAARf9TAEX/6wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE - //8AQ///Bkn//yNe//9Wg///i6r//7vO///h6f//9fj///7+//////////////////////////////// - ///////////////////////////////////////////////////////////////////9/v//9fj//+Hp - //+6zf//iqn//1WC//8iXf//Bkn//wBD//8ARP//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/6wBF/1MAQv8AAEb/AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAARf8AAEX/IABF/8MARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBD//8CRf//HVn//1eE//+atf//1N////X3//////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////9Pf//9Pf//+ZtP//VoP//xxZ - //8CRf//AEP//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX/wwBF/yAARf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEb/AABH/wUARf+FAEX//ABF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBD//8GSP//MGf//3uf - ///J1///9Pf///////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////09///x9b//3qd//8uZv//Bkj//wBD//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/8AEX/hQBG - /wUARv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABI - /wAARP8AAEb/PgBF/+IARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBD//8FR///MWj//42s///d5v///P3///////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////+/z//9zl//+Lqv//L2f//wRH//8AQ///AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/iAEX/PgBE/wAASP8AAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEX/AABG/w4ARf+lAEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE//8BRP//JmD//4Sl///b5f///f7///// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////39///a5P//gqT//yRf - //8BRP//AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf+lAEb/DgBF/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABH - /wAAQv8AAEX/VABF/+8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8AQ///DU3//1+K///M2v///P3///////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////7/P//ytn//1yI//8MTf//AEP//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF/+8ARf9UAEL/AABH/wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEb/AABG/xQARf+1AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AET//yZf//+ZtP//8fX///////////////////// - //////////////////////////////////////////////////////////////////////////////39 - ///09///6O7//9vl///O2///xNT//77Q//++0P//w9P//87b///b5f//6O7///T3///9/f////////// - //////////////////////////////////////////////////////////////////////////////// - ////////8PT//5ez//8kXv//AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF/7UARv8UAEb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABG - /wAARP8AAEX/WgBF//MARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AET//wJF - //9Cdf//xNP///39//////////////////////////////////////////////////////////////// - ///////////////////9/v//7fL//8nX//+dt///dZr//1KA//84bP//JV///xtY//8VVP//ElL//xFS - //8VVP//Glj//yVf//83bP//UoD//3SZ//+dt///yNf//+zx///9/v////////////////////////// - /////////////////////////////////////////////////////////f3//8HS//9Ac///AkX//wBE - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/8wBF/1oARP8AAEb/AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEX/AABF/xMARf+3AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBE//8FR///WYb//9zl//////////////////////////////// - ///////////////////////////////////////////////////4+v//y9n//4Sl//9Ddf//GVf//wZJ - //8ARP//AEP//wBD//8AQ///AEP//wBD//8ARP//AET//wBD//8AQ///AEP//wBD//8AQv//AET//wZJ - //8ZVv//QnT//4Ok///K2P//9/n///////////////////////////////////////////////////// - /////////////////////////////9rk//9Wg///BEf//wBE//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX/twBF/xMARf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABH - /wAARP8AAEX/UABF//AARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//Bkj//2SN - ///m7f////////////////////////////////////////////////////////////////////////// - ///8/f//zNn//2qS//8fW///A0b//wBD//8ARP//AET//wBD//8AQv//AEP//wFF//8ER///CEr//wlL - //8JS///CEn//wRH//8BRf//AEP//wBC//8AQ///AET//wBE//8AQ///A0b//x5a//9okf//ytj///v8 - /////////////////////////////////////////////////////////////////////////////+Tr - //9hi///BUf//wBE//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/wAEX/UABE - /wAAR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEX/AABG/wwARf+nAEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wNG//9gi///6O7///////////////////////////////////// - ////////////////////////////////////////8vX//5Sw//8lX///AUT//wBD//8ARP//AEP//wJF - //8PT///KGL//0l5//9nkP//gqT//5ay//+kvP//q8H//6vB//+kvP//lrL//4Ok//9nkf//Snr//yli - //8PT///AkX//wBD//8ARP//AEP//wFE//8kXv//ka7///H1//////////////////////////////// - /////////////////////////////////////////////+bt//9diP//A0b//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf+nAEb/DABF/wAAAAAAAAAAAAAAAAAAAAAAAAAAAABI - /wAARf8AAEX/OwBF/+YARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//Tn3//+Hp - //////////////////////////////////////////////////////////////////////////////H1 - //93m///DE3//wBD//8ARP//AEP//w1O//88cP//faD//7bJ///c5f//8fX///r7//////////////// - //////////////////////////////r8///x9f//3Ob//7bK//9+of//PXH//w5O//8AQ///AET//wBD - //8LTP//dJn///D0//////////////////////////////////////////////////////////////// - /////////////+Do//9Le///AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - /+YARf87AEX/AABG/wAAAAAAAAAAAAAAAAAAAAAAAEb/AABH/wMARf+FAEX//gBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEP//zBn///P3P////////////////////////////////////////// - ////////////////////////////////////////uMv//xFQ//8AQ///AET//wpL//9MfP//qsH//+fu - ///9/f////////////////////////////////////////////////////////////////////////// - //////////////3+///o7v//rML//059//8KS///AET//wBD//8QTv//tMj///////////////////// - /////////////////////////////////////////////////////////////8za//8tZf//AEP//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//gBF/4UASP8DAEb/AAAAAAAAAAAAAAAAAAAA - AAAARf8AAEX/HgBF/8wARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE//8SUf//pr7///// - //////////////////////////////////////////////////////////////////////////////// - //++z///F1T//wBB//8ZVv//i6r//+vw//////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////7PH//46s - //8aV///AEL//xVT//+7zf////////////////////////////////////////////////////////// - /////////////////////////////6O8//8QUP//AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/zABG/x4ARv8AAAAAAAAAAAAAAAAAAEb/AABF/wAARf9WAEX/9ABF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AUX//2eQ///19/////////////////////////////////////////// - //////////////////////////////////////////////X4//+euP//aZH//7DF///5+/////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////+vv//7LH//9pkf//m7b///X3//////////////// - ////////////////////////////////////////////////////////////////////////8/b//2ON - //8ARP//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/0AEX/VgBF/wAARv8AAAAAAAAA - AAAARv8AAEb/BgBF/5kARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBD//8kXv//zdr///// - //////////////////////////////////////////////////////////////////////////////// - //////////////7+///7/P///v////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////v8///+/v////////////////////////////////////////////////////////// - ////////////////////////////////////////ytj//yFd//8ARP//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf+ZAEb/BgBG/wAAAAAAAAAAAABF/wAARv8iAEX/0wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AUX//3ab///7/P////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///6/P//cpj//wFF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF/9MARv8iAEX/AAAA - AAAAR/8AAEX/AABF/1MARf/0AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE//8bWP//yNf///// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////E1P//GVf//wBE//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX/9ABF/1MARf8AAEf/AABG/wAASP8DAEX/iwBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEP//1SB///z9v////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////L1//9Qfv//AEP//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/iwBI - /wMARv8AAEb/AABG/xQARf/AAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ER///k6////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////46s//8DR///AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/AAEb/FABG/wAARf8AAEb/NABF/+UARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AET//xVU///D0/////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////v9D//xNS//8ARP//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - /+UARv80AEX/AABF/wAARf9cAEX/+ABF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8AQ///LmX//+Hp - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////f5///KmP//wBD - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/+ABF/1wARf8AAEj/AwBF/4sARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBC//9Gd///8PT///////////////////////////////////// - //////////////////////////////////////////////////////////////X3///Q3f//r8T//6a+ - //+4y///3uf///v8//////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////+/z//97n//+3y///pr3//67E - ///Q3f//9ff///////////////////////////////////////////////////////////////////// - /////////////////////////////+/z//9DdP//AEL//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/iwBI/wMARv8PAEX/swBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEP//1WD - ///2+P////////////////////////////////////////////////////////////////////////// - //////////////3+///H1v//YIv//x9b//8LTP//CEr//w5P//8uZv//gaP//+Lq//////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////+Lq//+Bo///Lmb//w5P//8ISv//C0z//x9b//9giv//x9b///39//////////////// - ////////////////////////////////////////////////////////////////////////9ff//1GA - //8AQv//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf+zAEb/DwBF/yIARf/RAEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8AQ///XIj///j6//////////////////////////////// - ///////////////////////////////////////////////////9/v//rcP//ydh//8AQ///AEP//wBE - //8ARP//AET//wBD//8ER///S3z//9bh//////////////////////////////////////////////// - ///////////////////////////////////////////////////W4f//S3v//wRH//8AQ///AET//wBE - //8ARP//AEP//wBD//8mYP//rcL///3+//////////////////////////////////////////////// - ///////////////////////////////////3+f//WIX//wBD//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF/9EARf8iAEX/QABF/+cARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBD - //9Yhf//9/n///////////////////////////////////////////////////////////////////// - /////////////8fW//8nYf//AEP//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE//8ARP//VoP//+vx - //////////////////////////////////////////////////////////////////////////////// - ////////6/H//1aD//8ARP//AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBD//8nYP//x9b///// - //////////////////////////////////////////////////////////////////////////////b4 - //9Ugv//AEL//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/5wBF/0AARf9fAEX/8wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEH//0p5///y9v////////////////////////// - ///////////////////////////////////////////////////1+P//YIv//wBD//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBE//8LTP//oLn///////////////////////////////////// - //////////////////////////////////////////////////+guf//C0z//wBE//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBD//9gi///9fj///////////////////////////////////// - ////////////////////////////////////////8fX//0d2//8AQf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf/zAEX/XwBF/30ARf/6AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBD - //8PT///dZr///X4//////////////////////////////////////////////////////////////// - /////////////9Dd//8fW///AEP//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBD - //9Ugf//9Pf///////////////////////////////////////////////////////////////////// - ////////9Pf//1SB//8AQ///AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEP//x9b - ///Q3f////////////////////////////////////////////////////////////////////////// - ///09///dZr//xFQ//8AQ///AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//oARf99AEX/nABF - //4ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//K2T//6W9///y9v////////////////////////// - ////////////////////////////////////////////////////////r8T//wtM//8ARP//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEP//y9m///j6/////////////////////////// - ///////////////////////////////////////////////////j6///L2b//wBD//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//C0z//6/E//////////////////////////////// - ///////////////////////////////////////////////////z9v//qL///y1l//8ARP//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//gBF/5wARf+6AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AET//zBn - ///C0v////////////////////////////////////////////////////////////////////////// - //////////////////+mvv//CEr//wBE//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8AQ///JmD//97n//////////////////////////////////////////////////////////////// - /////////////97n//8mYP//AEP//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE - //8ISv//pr7///////////////////////////////////////////////////////////////////// - ////////////////////////xNT//zNp//8ARP//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/ugBF - /84ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBE//8aV///s8f///////////////////////////////////// - /////////////////////////////////////////////////////////////7jL//8PT///AET//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBD//84bf//6O7///////////////////// - ////////////////////////////////////////////////////////6O7//zht//8AQ///AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AET//w9P//+4y/////////////////////////// - ////////////////////////////////////////////////////////////////////////tsr//xxY - //8ARP//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/OAEX/3QBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//Akb//3Wa - ///6+/////////////////////////////////////////////////////////////////////////// - ////////////////////////3uf//y9m//8AQ///AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEP//2mR///5+/////////////////////////////////////////////////////////// - ///////////////////5+///aZH//wBD//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8AQ///L2b//97n//////////////////////////////////////////////////////////////// - ///////////////////////////////////6/P//eZ3//wJG//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - /90ARf/rAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBE//8fW///zdr///////////////////////////////////// - ///////////////////////////////////////////////////////////////////8/f//gqP//wRH - //8ARP//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBD//8aVv//vc////////////////////// - //////////////////////////////////////////////////////////////////+9z///Glb//wBD - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AET//wRH//+Co////P3///////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///Q3P//Il3//wBD//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/6wBF//MARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEP//1KA - ///09/////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////i6v//THz//wBE//8ARP//AEX//wBF//8ARf//AEX//wBF - //8AQ///Ckv//4Kk///5+v////////////////////////////////////////////////////////// - //////////////////////////////n6//+CpP//Ckv//wBD//8ARf//AEX//wBF//8ARf//AEX//wBE - //8ARP//THz//+Lq//////////////////////////////////////////////////////////////// - //////////////////////////////////////////////X4//9Wg///AEP//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf/zAEX/+ABF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//faD///////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///X4f//VoP//wpM//8AQv//AEP//wBD//8AQ///AEP//xlW//+CpP//7/T///////////////////// - /////////////////////////////////////////////////////////////////////////////+/0 - //+CpP//GVb//wBD//8AQ///AEP//wBD//8AQ///Ckz//1aD///X4f////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////4Kj//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//gARf/8AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wRH - //+UsP////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////s8f//oLn//1SB//8vZv//JmD//zht - //9okf//vc////j6//////////////////////////////////////////////////////////////// - //////////////////////////////////////////////j6//+9z///aJH//zht//8mYP//L2b//1SB - //+guf//6/H///////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////mLP//wVH//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//ABF//wARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//BEf//5ay//////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////9Pf//+Pr///e5///6O7///n7//////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////5+///6O7//97n///j6///9Pf///////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////+atf//BUj//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/8AEX/+ABF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARP//f6L///////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////4Ol//8BRf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//gARf/zAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBD//9Ugv//9Pf///////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////2+P//WIT//wBD//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/8wBF/+sARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEP//yBc///O2/////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////9Hd//8jXv//AEP//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf/rAEX/3QBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//Akb//3ic///6+/////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////7/P//e5///wNG//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF/90ARf/OAEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARP//G1j//7XJ//////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////7jL//8dWf//AET//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX/zgBF/7oARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//Mmn//8TU - /////////////////////////////////////////////////////////////+vw///a5P///P3///// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////+/z//9jj///q7/////////////////////////////////////////// - ///////////////////H1v//NWv//wBE//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf+6AEX/nABF - //4ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//LmX//6i////z9/////////////////////////// - //////////////z9///Q3P//Wob//y1l//+Usf//7fL///////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////+zx//+Sr///K2T//1eE - ///O2////P3////////////////////////////////////////09///q8H//zBn//8ARP//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//gBF/5wARf99AEX/+gBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8AQ///ElH//12I//+wxf//4On///P2///3+f//9fj//+rw///H1v//gKL//yli//8BRf//AEP//wtM - //9Ugv//vc7///f5//////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////b4//+7zf//UoH//wpL//8AQ///AUX//yhh//9+of//x9b//+rw///1+P//9/n///P2 - ///h6f//ssb//1+K//8TUv//AEP//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/6AEX/fQBF - /18ARf/0AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//AET//w5P//8uZv//THz//1mG - //9Tgf//O2///xlX//8DRv//AEP//wBF//8ARf//AET//wBE//8YVv//aZH//8jX///3+f////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////f5///H1v//Z5D//xdV//8ARP//AET//wBF - //8ARf//AEP//wNG//8YVv//O2///1OB//9Zhv//TXz//y9m//8PT///AET//wBE//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//MARf9fAEX/QABF/+cARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AET//wBD//8AQv//AEP//wBC//8AQ///AET//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBE//8BRP//Hlr//2WO//+6zP//8PT///////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////////+/0 - //+5zP//ZI3//x1Z//8BRP//AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE//8AQ///AEL//wBD - //8AQv//AEP//wBE//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/5wBF - /0AARf8iAEX/0QBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//AET//xRT - //9Nff//lbH//9Pf///2+P////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////9vj//9Le//+TsP//THz//xRT//8ARP//AET//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/RAEX/IgBG/w8ARf+zAEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AET//wBD//8FSP//I17//1qG//+Usf//x9b//+rw - ///6/P////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////r7///r8P//x9b//5Sw//9Zhf//I13//wVI - //8AQ///AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - /7MARv8PAEb/AwBF/4sARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8AQ///AEP//wVH//8YVv//PnH//2iR//+Sr///uMv//9fi///p7///9Pf///r7 - ///+/v/////////////////////////////////////////////+/v//+vv///P2///n7v//1uH//7nM - //+Sr///Z5D//z5x//8YVv//BUf//wBD//8AQ///AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/iwBI/wMARf8AAEX/XABF//gARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE - //8AQ///AEP//wRH//8PUP//Il3//zlu//9Qf///ZY///3id//+IqP//kq///8fW///+/v///////+7y - //+guf//iKj//3qd//9mj///Tn3//zZr//8hXP//EFD//wRH//8AQ///AEP//wBE//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //gARf9cAEX/AABF/wAARv80AEX/5QBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE//8AQ///AEP//wBC - //8AQ///AET//wFF//8BRf//YIr///j6////////4+v//zNp//8AQ///AET//wBD//8AQv//AEP//wBD - //8ARP//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/5QBG/zQARf8AAEb/AABG/xQARf/AAEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBC//84bf//6O7///// - ///1+P//VYL//wBC//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf/AAEb/FABG/wAARv8AAEj/AwBF/4sARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AET//xpY///M2f////////////9/of//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF/4sASP8DAEb/AABH/wAARf8AAEX/UwBF - //QARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//CUv//6e+ - /////////////6rA//8KS///AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf/0AEX/UwBF/wAAR/8AAAAAAABF/wAARv8iAEX/0wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//fJ////7+////////ztv//xxZ//8ARP//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF/9MARv8iAEX/AAAAAAAAAAAAAEb/AABH - /wYARf+ZAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBD - //9SgP//9Pf////////p7///Om///wBD//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/mQBH/wYARv8AAAAAAAAAAAAAR/8AAEX/AABG/1YARf/0AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEP//y5m///h6f////////j6//9hi///AEP//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//QARv9WAEX/AABH/wAAAAAAAAAAAAAA - AAAARf8AAEX/HgBF/8wARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARP//FFP//8LS/////////////4yr//8CRv//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/zABG/x4ARv8AAAAAAAAAAAAAAAAAAAAAAABG/wAAR/8DAEX/hQBF//4ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8GSP//m7b/////////////tcn//w5P - //8ARP//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//4ARf+FAEj/AwBG/wAAAAAAAAAAAAAA - AAAAAAAAAEj/AABF/wAARf87AEX/5gBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBD//9vlv///P3////////X4v//JF7//wBD//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE//8AQ///Akb//wZI - //8ER///AEP//wBD//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/5gBF/zsARf8AAEb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEX/AABG/wwARf+nAEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEL//0d4///w9P///////+/z - //9Fdv//AEL//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARP//F1X//1KA//+IqP//nrj//5Sw//9qkv//KmP//wNG//8ARP//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf+nAEb/DABF/wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAR/8AAET/AABF/1EARf/wAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8AQ///JV///9nj////////+/z//22U//8AQ///AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//A0b//0V3//+6zP//8/b///// - //////////////r8///V4P//b5X//w5O//8ARP//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/8ABF/1EARP8AAEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARf8AAEb/EwBF - /7cARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE//8PT///t8r///// - ////////mbT//wVI//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//9Nff//3eb////////////////////////////////////////09///haX//wtM - //8ARP//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf+3AEb/EwBF/wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABH/wAAQv8AAEX/WgBF//MARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wNG//+Prf/////////////A0f//E1L//wBE//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8AQ///JWD//8rZ//////////////// - ///////////////////////////////////v8///Wob//wBE//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/8wBF/1oAQv8AAEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABG - /wAARv8UAEX/tQBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEP//2ON - ///5+////////+Do//8sZf//AEP//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//92m////P3///////////////////////////////////////////////////// - //+7zf//FFP//wBE//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf+1AEb/FABG/wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEf/AABC/wAARf9UAEX/7wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8AQ///PHD//+vw////////9Pf//1B///8AQ///AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE//8AQv//Dk3//7XJ//////////////// - /////////////////////////////////////////////+rw//88cP//AEP//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/7wBF/1QAQv8AAEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAEX/AABG/w4ARf+lAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE - //8dWv//0N3////////+/v//ep3//wBE//8ARf//AEX//wBF//8ARf//AEX//wBE//8ARP//AEP//wBD - //8DRv//Dk///yNe//9Xg///3+f///////////////////////////////////////////////////// - ////////9vj//1aD//8AQ///AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf+lAEb/DgBF/wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASP8AAET/AABF/z4ARf/iAEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AET//wpM//+swv////////////+lvf//CEr//wBE - //8ARP//AEP//wBC//8BRf//Ckz//xxZ//87b///Yoz//42s//+2yv//2OP///D0///+/v////////// - ///////////////////////////////////////////////////2+P//VoP//wBD//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/4gBF/z4ARP8AAEj/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAARv8AAEb/BQBF/4UARf/8AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AUX//4Kj/////////////8rY//8ZVv//BUj//xZV//8xaP//VoP//4Ci//+rwf//z9z//+rv - ///5+v////////////////////////////////////////////////////////////////////////// - /////////////+rw//88cP//AEP//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//wARf+FAEb/BQBG/wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARf8AAEb/IABF - /8MARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8AQv//V4T///b4////////7fL//5Cu - //+dt///xdX//+Tr///1+P///v7///////////////////////////////////v8///u8///5+3///z9 - ////////////////////////////////////////////////////////u83//xRT//8ARP//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/wwBG/yAARf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABH/wAAP/8AAEX/UwBF/+sARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBD//8yaf//5Ov//////////////v7///////////////////////////////////3+ - ///09///4On//8HR//+atf//bpX//0R2//9Bc///y9n///////////////////////////////////// - /////////////+/z//9ahv//AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF/+sARf9TAD//AABH/wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABG - /wAAR/8IAEX/igBF//sARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AET//xZV///F1f////////// - ///////////////////3+f//5+7//8vZ//+mvv//e57//1F///8tZf//FFP//wVI//8AQ///AEL//wBD - //9Nff//3eb////////////////////////////////////////09///haX//wtM//8ARP//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf/7AEX/igBH/wgARv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABF/wAARf8eAEX/uwBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//BEf//3ic///t8v//7fL//9Xg//+xxv//iKj//12I//83bP//Glf//wlK - //8BRP//AEP//wBD//8ARP//AEX//wBF//8ARf//AEX//wNG//9Gd///us3///P3//////////////// - ///6/P//1eD//2+V//8OTv//AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF/7sARf8eAEX/AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAEb/AABD/wAARf9AAEX/3ABF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//Dk7//0J0 - //9Bc///IVz//wxN//8CRv//AEP//wBD//8ARP//AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBE//8YVf//VIL//4io//+dt///lLD//2qS//8qY///A0b//wBE//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf/cAEX/QABD/wAARv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEb/AABI/wIARf9jAEX/7gBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//AEP//wBD//8AQ///AET//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE//8AQ///AkX//wZI - //8ER///AEP//wBD//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/7gBF/2MASP8CAEb/AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAEX/AABG/woARf+HAEX/+QBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //kARf+HAEb/CgBF/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEX/AABF - /xUARf+hAEX//QBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/9AEX/oQBF/xUARf8AAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARf8AAEX/AABF/yEARf+1AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - /7UARf8hAEX/AABF/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAR/8AAET/AABG/ywARf/AAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/AAEX/LABE/wAAR/8AAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARv8AAEP/AABG/zMARf/GAEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/xgBG - /zMAQ/8AAEb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAR/8AADz/AABF/zcARf/GAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF/8YARf83ADz/AABH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR/8AAD3/AABG - /zMARf/AAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/AAEb/MwA9 - /wAAR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR/8AAEH/AABF/y0ARf+1AEX//ABF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf/8AEX/tQBF/y0AQf8AAEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAR/8AAEP/AABF/yEARf+hAEX/+ABF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/+ABF/6EARf8hAEP/AABH - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARf8AAEX/AABF/xUARf+HAEX/7wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF/+8ARf+HAEX/FQBF/wAARf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAEb/AABG/woARf9jAEX/3ABF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/cAEX/YwBG/woARv8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEb/AABH - /wMARf9AAEX/uwBF//sARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf/7AEX/uwBF/0AAR/8DAEb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEf/AAA8/wAARv8eAEX/igBF/+sARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/6wBF/4oARv8eAD//AABH/wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAABG/wAARv8JAEX/UgBF/8MARf/7AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/+wBF - /8MARf9SAEb/CQBG/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABG/wAASP8AAEX/IABF - /4UARf/jAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF/+MARf+FAEX/IABI/wAARv8AAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARv8AAEb/BgBG/z4ARf+mAEX/8ABF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//AARf+mAEb/PgBG - /wYARv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAASP8AAEP/AABF/w4ARf9UAEX/tQBF//IARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//IARf+1AEX/VABF/w4AQ/8AAEj/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEf/AABP/wAARv8UAEX/WgBF - /7cARf/wAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//AARf+3AEX/WgBG/xQAT/8AAEf/AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABF/wAARP8AAEX/EwBF/1AARf+nAEX/5gBF//0ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//QBF - /+YARf+nAEX/UABF/xMARP8AAEX/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAR/8AACf/AABG/wwARf87AEX/hQBF/8wARf/0AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX/9ABF/8wARf+FAEX/OwBG/wwAJ/8AAEf/AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABG/wAAR/8DAEb/HgBF - /1YARf+YAEX/0wBF//QARf/+AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//4ARf/0AEX/0wBF/5gARf9WAEb/HgBH - /wMARv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASf8AAD//AABG/wYARv8iAEX/UwBF/4sARf/AAEX/5QBF - //cARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/9wBF - /+UARf/AAEX/iwBF/1MARv8iAEb/BgA//wAASf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAR/8AAEf/AwBG/xQARv80AEX/XQBF/4sARf+zAEX/0QBF/+cARf/0AEX/+gBF - //4ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //4ARf/6AEX/9ABF/+cARf/RAEX/swBF/4sARf9dAEb/NABG/xQAR/8DAEf/AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAR/8AAEf/AwBG/w8ARf8iAEX/QABF/18ARf99AEX/nABF/7oARf/NAEX/3QBF/+sARf/zAEX/+ABF - //wARf/8AEX/+ABF//MARf/rAEX/3QBF/80ARf+6AEX/nABF/30ARf9fAEX/QABF/yIARv8PAEf/AwBH - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////////wAAAA////////////////AAAAAA//////////////+AAAAAA - B/////////////8AAAAAAAD////////////8AAAAAAAAP///////////8AAAAAAAAA///////////8AA - AAAAAAAD//////////8AAAAAAAAAAP/////////8AAAAAAAAAAA/////////+AAAAAAAAAAAH/////// - /+AAAAAAAAAAAAf////////AAAAAAAAAAAAD////////AAAAAAAAAAAAAP///////gAAAAAAAAAAAAB/ - //////wAAAAAAAAAAAAAP//////4AAAAAAAAAAAAAB//////8AAAAAAAAAAAAAAP/////+AAAAAAAAAA - AAAAB//////AAAAAAAAAAAAAAAP/////gAAAAAAAAAAAAAAB/////wAAAAAAAAAAAAAAAP////4AAAAA - AAAAAAAAAAB////8AAAAAAAAAAAAAAAAP///+AAAAAAAAAAAAAAAAB////AAAAAAAAAAAAAAAAAP///w - AAAAAAAAAAAAAAAAD///4AAAAAAAAAAAAAAAAAf//8AAAAAAAAAAAAAAAAAD///AAAAAAAAAAAAAAAAA - A///gAAAAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA - AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAAAAA/+AAAAAAA - AAAAAAAAAAAAH/gAAAAAAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAD+AA - AAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAA - AAPAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA - AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABgAAAAAAA - AAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA+AA - AAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAAAAAAA - AA/wAAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAAAAAAAAAAH/gAAAAAAAAAAAAAAAAAAB/8AAAAAAAAAAAA - AAAAAAA//AAAAAAAAAAAAAAAAAAAP/4AAAAAAAAAAAAAAAAAAH/+AAAAAAAAAAAAAAAAAAB//wAAAAAA - AAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAAAAAAAAH//8AAAAAAAAAAAAAAAAAD///A - AAAAAAAAAAAAAAAAA///4AAAAAAAAAAAAAAAAAf///AAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAA - D///+AAAAAAAAAAAAAAAAB////wAAAAAAAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////wAAAAAAAAAA - AAAAAP////+AAAAAAAAAAAAAAAH/////wAAAAAAAAAAAAAAD/////+AAAAAAAAAAAAAAB//////wAAAA - AAAAAAAAAA//////+AAAAAAAAAAAAAAf//////wAAAAAAAAAAAAAP//////+AAAAAAAAAAAAAH////// - /wAAAAAAAAAAAAD////////AAAAAAAAAAAAD////////4AAAAAAAAAAAB/////////gAAAAAAAAAAB// - ///////8AAAAAAAAAAA//////////wAAAAAAAAAA///////////AAAAAAAAAA///////////8AAAAAAA - AA////////////wAAAAAAAA/////////////AAAAAAAA/////////////+AAAAAAB//////////////8 - AAAAAD///////////////8AAAAP///////8= - - \ No newline at end of file diff --git a/SCrawler/Channels/ChannelViewForm.vb b/SCrawler/Channels/ChannelViewForm.vb index 5a047a4..2e8e866 100644 --- a/SCrawler/Channels/ChannelViewForm.vb +++ b/SCrawler/Channels/ChannelViewForm.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -6,21 +6,23 @@ ' ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY +Imports System.Threading +Imports System.ComponentModel +Imports SCrawler.API.Base +Imports SCrawler.API.Reddit +Imports SCrawler.Plugin.Hosts Imports PersonalUtilities.Forms Imports PersonalUtilities.Forms.Toolbars Imports PersonalUtilities.Forms.Controls Imports PersonalUtilities.Forms.Controls.Base Imports PersonalUtilities.Tools -Imports System.ComponentModel -Imports System.Threading -Imports SCrawler.API.Base -Imports SCrawler.API.Reddit -Imports SCrawler.Plugin.Hosts Imports ADB = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons Imports RButton = PersonalUtilities.Forms.Toolbars.RangeSwitcherToolbar.ControlItem Friend Class ChannelViewForm : Implements IChannelLimits +#Region "Events" Friend Event OnUsersAdded(ByVal StartIndex As Integer) Friend Event OnDownloadDone As NotificationEventHandler +#End Region #Region "Appended user structure" Private Structure PendingUser Friend ID As String @@ -138,7 +140,7 @@ Friend Class ChannelViewForm : Implements IChannelLimits End If End Function #End Region -#Region "Initializer and form methods" +#Region "Initializer" Friend Sub New() InitializeComponent() MyDefs = New DefaultFormOptions @@ -212,6 +214,8 @@ Friend Class ChannelViewForm : Implements IChannelLimits AddHandler Settings.ChannelsImagesColumns.OnValueChanged, AddressOf ImagesCountChanged AddHandler Settings.ChannelsImagesRows.OnValueChanged, AddressOf ImagesCountChanged End Sub +#End Region +#Region "Form handlers" Private Sub ChannelViewForm_Load(sender As Object, e As EventArgs) Handles Me.Load MyDefs.MyViewInitialize(Me, Settings.Design) RefillChannels(Settings.LatestSelectedChannel.Value) @@ -265,6 +269,7 @@ Friend Class ChannelViewForm : Implements IChannelLimits If b Then LIST_POSTS.Select() : e.Handled = True End Sub #End Region +#Region "Refill" Private Sub RefillChannels(Optional ByVal SelectedChannel As String = Nothing) CMB_CHANNELS.BeginUpdate() Dim indx%? = Nothing @@ -277,11 +282,13 @@ Friend Class ChannelViewForm : Implements IChannelLimits CMB_CHANNELS.Items.Add(.Item(i).ID) If .Item(i).ID = t Then indx = i Next - If indx >= 0 And indx <= CMB_CHANNELS.Count - 1 Then CMB_CHANNELS.SelectedIndex = indx + If indx.HasValue AndAlso indx.Value.ValueBetween(0, CMB_CHANNELS.Count - 1) Then CMB_CHANNELS.SelectedIndex = indx End If End With CMB_CHANNELS.EndUpdate() End Sub +#End Region +#Region "User add, append" Private Sub AppendPendingUsers() If LIST_POSTS.CheckedIndices.Count > 0 Then Dim c As Channel = GetCurrentChannel(False) @@ -293,6 +300,84 @@ Friend Class ChannelViewForm : Implements IChannelLimits If ToolbarTOP.InvokeRequired Then ToolbarTOP.Invoke(a) Else a.Invoke End If End Sub + Private Sub BTT_ADD_USERS_Click(sender As Object, e As EventArgs) Handles BTT_ADD_USERS.Click + AppendPendingUsers() + Dim i% + If LIST_POSTS.CheckedItems.Count > 0 Then + For i = 0 To LIST_POSTS.Items.Count - 1 + If LIST_POSTS.Items(i).Checked Then LIST_POSTS.Items(i).Checked = False + Next + End If + If PendingUsers.Count > 0 Then + Dim Added% = 0, Skipped% = 0 + Dim StartIndex% = Settings.Users.Count + Dim f As SFile + Dim umo As Boolean = HOST.GetUserMediaOnly + Settings.Labels.Add(CannelsLabelName) + Settings.Labels.Add(LabelsKeeper.NoParsedUser) + Dim rUsers$() = UserBanned(PendingUsers.Select(Function(u) u.ID).ToArray) + If rUsers.ListExists Then PendingUsers.RemoveAll(Function(u) rUsers.Contains(u)) + If PendingUsers.Count > 0 Then + Dim c As New ListAddParams(LAP.NotContainsOnly) + Dim cn$ + Dim tmpUser As IUserData + With PendingUsers.Select(Function(u) New UserInfo(u, HOST)) + For i = 0 To .Count - 1 + If Not Settings.UsersList.Contains(.ElementAt(i)) Then + f = PendingUsers(i).File + cn = If(PendingUsers(i).Channel?.Name, String.Empty) + Settings.UpdateUsersList(.ElementAt(i)) + tmpUser = HOST.GetInstance(Plugin.ISiteSettings.Download.Main, .ElementAt(i), False) + With DirectCast(tmpUser, UserData) + .Temporary = Settings.ChannelsDefaultTemporary + .CreatedByChannel = True + .ReadyForDownload = Settings.ChannelsDefaultReadyForDownload + .ParseUserMediaOnly = umo + End With + Settings.Users.Add(tmpUser) + With Settings.Users.Last + .Labels.Add(CannelsLabelName) + .UpdateUserInformation() + If Settings.FromChannelCopyImageToUser And Not f.IsEmptyString And Not .File.IsEmptyString Then _ + CopyFile(ListAddValue(Nothing, New ChannelsCollection.ChannelImage(cn, f)).ListAddList(Settings.Channels.GetUserFiles(.Name), c), .File) + End With + Added += 1 + Else + Skipped += 1 + End If + Next + End With + End If + PendingUsers.Clear() + BTT_ADD_USERS.Text = "Add" + MsgBoxE($"Added users: {Added.ToString(CProvider)}{vbCr}Skipped users: {Skipped.ToString(CProvider)}{vbCr}Total: {PendingUsers.Count.ToString(CProvider)}") + RaiseEvent OnUsersAdded(StartIndex) + Settings.Channels.UpdateUsersStats() + Else + MsgBoxE("No user has been selected to add to the collection") + End If + End Sub + Private Sub CopyFile(ByVal Source As IEnumerable(Of ChannelsCollection.ChannelImage), ByVal Destination As SFile) + Try + If Source.ListExists And Not Destination.IsEmptyString Then + Destination = Destination.CutPath.PathWithSeparator & "ChannelImage\" + Dim f As SFile + Dim i% = 0 + If Destination.Exists(SFO.Path) Then + For Each ff As ChannelsCollection.ChannelImage In Source + f = Destination + f.Extension = ff.File.Extension + f.Name = $"{IIf(i = 0, "!", String.Empty)}{ff.Channel}_{ff.File.Name}" + If ff.File.Exists Then IO.File.Copy(ff.File, f) + i += 1 + Next + End If + End If + Catch ex As Exception + End Try + End Sub +#End Region +#Region "List images" Friend Function GetImageSize() As Size Const mhw% = 256 Dim s As Size = LIST_POSTS.Size @@ -313,7 +398,12 @@ Friend Class ChannelViewForm : Implements IChannelLimits End With Return s End Function -#Region "Toolbar controls" + Private Sub ImagesCountChanged(ByVal Sender As Object, ByVal _Name As String, ByVal _Value As Object) + AppendPendingUsers() + MyRange.Limit = ImagesInRow * ImagesRows + MyRange.GoTo(0) + End Sub +#End Region #Region "Downloader" Private TokenSource As CancellationTokenSource Private Token As CancellationToken @@ -357,7 +447,7 @@ Friend Class ChannelViewForm : Implements IChannelLimits Settings.Channels.SetLimit(Me) Await Task.Run(Sub() Settings.Channels.DownloadData(Token, CH_HIDE_EXISTS_USERS.Checked, CProgress)) Settings.Channels.UpdateUsersStats() - RaiseEvent OnDownloadDone("All channels downloaded") + RaiseEvent OnDownloadDone(SettingsCLS.NotificationObjects.Channels, "All channels downloaded") Token.ThrowIfCancellationRequested() c = GetCurrentChannel() Else @@ -367,7 +457,7 @@ Friend Class ChannelViewForm : Implements IChannelLimits c.SetLimit(Me) Await Task.Run(Sub() c.DownloadData(Token, CH_HIDE_EXISTS_USERS.Checked, CProgress)) c.UpdateUsersStats() - RaiseEvent OnDownloadDone($"Channel [{c.Name}] downloaded") + RaiseEvent OnDownloadDone(SettingsCLS.NotificationObjects.Channels, $"Channel [{c.Name}] downloaded") Token.ThrowIfCancellationRequested() End If End If @@ -424,82 +514,6 @@ Friend Class ChannelViewForm : Implements IChannelLimits If Not TokenSource Is Nothing Then TokenSource.Cancel() : BTT_STOP.Enabled = False End Sub #End Region - Private Sub BTT_ADD_USERS_Click(sender As Object, e As EventArgs) Handles BTT_ADD_USERS.Click - AppendPendingUsers() - Dim i% - If LIST_POSTS.CheckedItems.Count > 0 Then - For i = 0 To LIST_POSTS.Items.Count - 1 - If LIST_POSTS.Items(i).Checked Then LIST_POSTS.Items(i).Checked = False - Next - End If - If PendingUsers.Count > 0 Then - Dim Added% = 0, Skipped% = 0 - Dim StartIndex% = Settings.Users.Count - Dim f As SFile - Dim umo As Boolean = HOST.GetUserMediaOnly - Settings.Labels.Add(CannelsLabelName) - Settings.Labels.Add(LabelsKeeper.NoParsedUser) - Dim rUsers$() = UserBanned(PendingUsers.Select(Function(u) u.ID).ToArray) - If rUsers.ListExists Then PendingUsers.RemoveAll(Function(u) rUsers.Contains(u)) - If PendingUsers.Count > 0 Then - Dim c As New ListAddParams(LAP.NotContainsOnly) - Dim cn$ - Dim tmpUser As IUserData - With PendingUsers.Select(Function(u) New UserInfo(u, HOST)) - For i = 0 To .Count - 1 - If Not Settings.UsersList.Contains(.ElementAt(i)) Then - f = PendingUsers(i).File - cn = If(PendingUsers(i).Channel?.Name, String.Empty) - Settings.UpdateUsersList(.ElementAt(i)) - tmpUser = HOST.GetInstance(Plugin.ISiteSettings.Download.Main, .ElementAt(i), False) - With DirectCast(tmpUser, UserData) - .Temporary = Settings.ChannelsDefaultTemporary - .CreatedByChannel = True - .ReadyForDownload = Settings.ChannelsDefaultReadyForDownload - .ParseUserMediaOnly = umo - End With - Settings.Users.Add(tmpUser) - With Settings.Users.Last - .Labels.Add(CannelsLabelName) - .UpdateUserInformation() - If Settings.FromChannelCopyImageToUser And Not f.IsEmptyString And Not .File.IsEmptyString Then _ - CopyFile(ListAddValue(Nothing, New ChannelsCollection.ChannelImage(cn, f)).ListAddList(Settings.Channels.GetUserFiles(.Name), c), .File) - End With - Added += 1 - Else - Skipped += 1 - End If - Next - End With - End If - PendingUsers.Clear() - BTT_ADD_USERS.Text = "Add" - MsgBoxE($"Added users: {Added.ToString(CProvider)}{vbCr}Skipped users: {Skipped.ToString(CProvider)}{vbCr}Total: {PendingUsers.Count.ToString(CProvider)}") - RaiseEvent OnUsersAdded(StartIndex) - Settings.Channels.UpdateUsersStats() - Else - MsgBoxE("No one users selected for add to collection") - End If - End Sub - Private Sub CopyFile(ByVal Source As IEnumerable(Of ChannelsCollection.ChannelImage), ByVal Destination As SFile) - Try - If Source.ListExists And Not Destination.IsEmptyString Then - Destination = Destination.CutPath.PathWithSeparator & "ChannelImage\" - Dim f As SFile - Dim i% = 0 - If Destination.Exists(SFO.Path) Then - For Each ff As ChannelsCollection.ChannelImage In Source - f = Destination - f.Extension = ff.File.Extension - f.Name = $"{IIf(i = 0, "!", String.Empty)}{ff.Channel}_{ff.File.Name}" - If ff.File.Exists Then IO.File.Copy(ff.File, f) - i += 1 - Next - End If - End If - Catch ex As Exception - End Try - End Sub #Region "Limits changer" Private Sub OPT_LIMITS_DEFAULT_CheckedChanged(sender As Object, e As EventArgs) Handles OPT_LIMITS_DEFAULT.CheckedChanged If OPT_LIMITS_DEFAULT.Checked Then @@ -624,19 +638,20 @@ Friend Class ChannelViewForm : Implements IChannelLimits End If End Sub Private Sub AddNewChannel() - Dim c$ = InputBoxE("Enter Reddit channel:", "New channel") + Const MsgTitle$ = "Add channel" + Dim c$ = InputBoxE("Enter Reddit channel ID:", "New channel") If Not c.IsEmptyString Then Dim cc As New Channel With {.Name = c, .ID = c} If Settings.Channels.Count = 0 OrElse Not Settings.Channels.Contains(cc) Then Settings.Channels.Add(cc) Settings.Channels.Last.Save() RefillChannels() - MsgBoxE($"Channel [{c}] added") + MsgBoxE({$"Channel [{c}] added", MsgTitle}) Else - MsgBoxE($"Channel [{c}] already exists") + MsgBoxE({$"Channel [{c}] already exists", MsgTitle}) End If Else - MsgBoxE("You doesn't enter channel name. Operation canceled.", MsgBoxStyle.Exclamation) + MsgBoxE({"You didn't enter a channel name. Operation canceled.", MsgTitle}, MsgBoxStyle.Exclamation) End If End Sub Private Sub ChangeComboIndex(ByVal Appender As Integer) @@ -651,7 +666,7 @@ Friend Class ChannelViewForm : Implements IChannelLimits Else If i < 0 Then i = 0 i += Appender - If i >= 0 And i <= CMB_CHANNELS.Count - 1 And Not CMB_CHANNELS.SelectedIndex = i Then CMB_CHANNELS.SelectedIndex = i + If i.ValueBetween(0, CMB_CHANNELS.Count - 1) And Not CMB_CHANNELS.SelectedIndex = i Then CMB_CHANNELS.SelectedIndex = i End If i = CMB_CHANNELS.SelectedIndex Dim c% = CMB_CHANNELS.Count - 1 @@ -665,6 +680,7 @@ Friend Class ChannelViewForm : Implements IChannelLimits End Try End Sub #End Region +#Region "Toolbar controls" Private Sub CH_HIDE_EXISTS_USERS_CheckedChanged(sender As Object, e As EventArgs) Handles CH_HIDE_EXISTS_USERS.CheckedChanged If Not MyDefs.Initializing Then Settings.ChannelsHideExistsUser.Value = CH_HIDE_EXISTS_USERS.Checked @@ -726,9 +742,9 @@ Friend Class ChannelViewForm : Implements IChannelLimits End If End With If uRemoved Then - MsgBoxE($"User [{u}] was successfully removed") + MsgBoxE($"User [{u}] has been successfully removed") Else - MsgBoxE($"User [{u}] was not added to selected users") + MsgBoxE($"User [{u}] is not added to the selected users") End If BTT_ADD_USERS.Text = $"Add ({PendingUsers.Count.ToString(CProvider)})" Else @@ -770,6 +786,7 @@ Friend Class ChannelViewForm : Implements IChannelLimits End Try End Sub #End Region +#Region "Additional functions: OpenPostPicture, GetPostBySelected" Private Sub OpenPostPicture() Dim f As SFile = GetPostBySelected().CachedFile If f.Exists Then f.Open() Else MsgBoxE($"Picture file [{f}] not found", MsgBoxStyle.Critical) @@ -790,15 +807,13 @@ Friend Class ChannelViewForm : Implements IChannelLimits End Try Return p End Function +#End Region +#Region "List handlers" Private Sub LIST_POSTS_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles LIST_POSTS.MouseDoubleClick OpenPostPicture() End Sub +#End Region #Region "MyRange" - Private Sub ImagesCountChanged(ByVal Sender As Object, ByVal _Name As String, ByVal _Value As Object) - AppendPendingUsers() - MyRange.Limit = ImagesInRow * ImagesRows - MyRange.GoTo(0) - End Sub Private Sub MyRange_IndexChanged(ByVal Sender As Object, ByVal e As EventArgs) Handles MyRange.IndexChanged Try If MyDefs.Initializing Then Exit Sub diff --git a/SCrawler/Channels/ChannelsStatsForm.Designer.vb b/SCrawler/Channels/ChannelsStatsForm.Designer.vb index 5293d85..384096b 100644 --- a/SCrawler/Channels/ChannelsStatsForm.Designer.vb +++ b/SCrawler/Channels/ChannelsStatsForm.Designer.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -6,7 +6,6 @@ ' ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY - Partial Friend Class ChannelsStatsForm : Inherits System.Windows.Forms.Form @@ -42,7 +41,7 @@ Partial Friend Class ChannelsStatsForm : Inherits System.Windows.Forms.Form 'CONTAINER_MAIN.ContentPanel ' CONTAINER_MAIN.ContentPanel.Controls.Add(Me.CMB_CHANNELS) - CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(384, 261) + CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(384, 236) CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill CONTAINER_MAIN.LeftToolStripPanelVisible = False CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0) @@ -82,7 +81,7 @@ Partial Friend Class ChannelsStatsForm : Inherits System.Windows.Forms.Form Me.CMB_CHANNELS.ListMultiSelect = True Me.CMB_CHANNELS.Location = New System.Drawing.Point(0, 0) Me.CMB_CHANNELS.Name = "CMB_CHANNELS" - Me.CMB_CHANNELS.Size = New System.Drawing.Size(386, 262) + Me.CMB_CHANNELS.Size = New System.Drawing.Size(386, 237) Me.CMB_CHANNELS.TabIndex = 0 ' 'ChannelsStatsForm @@ -91,7 +90,7 @@ Partial Friend Class ChannelsStatsForm : Inherits System.Windows.Forms.Form Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.ClientSize = New System.Drawing.Size(384, 261) Me.Controls.Add(CONTAINER_MAIN) - Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.Icon = Global.SCrawler.My.Resources.SiteResources.RedditIcon_128 Me.KeyPreview = True Me.MinimizeBox = False Me.MinimumSize = New System.Drawing.Size(400, 300) diff --git a/SCrawler/Channels/ChannelsStatsForm.resx b/SCrawler/Channels/ChannelsStatsForm.resx index f45e744..0167924 100644 --- a/SCrawler/Channels/ChannelsStatsForm.resx +++ b/SCrawler/Channels/ChannelsStatsForm.resx @@ -246,1138 +246,6 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6LEtW/4flgYiLD1qeX0A AAAASUVORK5CYII= - - - - - AAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAABAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAEb/AABG/wMARv8PAEX/IgBF/0AARf9fAEX/fQBF/5wARf+6AEX/zQBF - /90ARf/rAEX/8wBF//gARf/8AEX//ABF//gARf/zAEX/6wBF/90ARf/NAEX/ugBF/5wARf99AEX/XwBF - /0AARf8iAEb/DwBG/wMARv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABH/wAAR/8DAEb/FABG/zQARf9dAEX/iwBF - /7MARf/RAEX/5wBF//QARf/6AEX//gBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//gBF//oARf/0AEX/5wBF/9EARf+zAEX/iwBF/10ARv80AEb/FABH - /wMAR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASf8AAD//AABG - /wYARv8iAEX/UwBF/4sARf/AAEX/5QBF//cARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX/9wBF/+UARf/AAEX/iwBF/1MARv8iAEb/BgA//wAASf8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAARv8AAEb/AwBF/x4ARv9WAEX/mQBF/9MARf/0AEX//gBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf/+AEX/9ABF/9MARf+ZAEb/VgBF/x4ARv8DAEb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABH/wAAJv8AAEb/DABF/zsARf+FAEX/zABF - //QARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/0AEX/zABF - /4UARf87AEb/DAAm/wAAR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABH - /wAASv8AAEb/EwBF/1AARf+nAEX/5gBF//0ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//QBF/+YARf+nAEX/UABG/xMASv8AAEf/AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABH/wAAT/8AAEb/FABF/1oARf+3AEX/8ABF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf/wAEX/twBF/1oARv8UAE//AABH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABI/wAAQ/8AAEX/DgBF - /1QARf+2AEX/8gBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/8gBF - /7YARf9UAEX/DgBD/wAASP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAARv8AAEb/BgBG/z4ARf+mAEX/8ABF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//AARf+mAEb/PgBG/wYARv8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR/8AAFP/AABG/yAARf+FAEX/4wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf/jAEX/hQBG/yAAU/8AAEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAEb/AABG/wkARf9SAEX/wwBF//sARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/7AEX/wwBF - /1IARv8JAEb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEf/AAA8/wAARv8eAEX/igBF/+sARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/6wBF/4oARv8eADz/AABH/wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABG - /wAARv8DAEX/QABF/7sARf/7AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/+wBF/7sARf9AAEf/AwBG/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARv8AAEb/CgBF/2MARf/cAEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF/9wARf9jAEb/CgBG - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARf8AAEX/AABF - /xUARf+HAEX/7wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF/+8ARf+HAEX/FQBF/wAARf8AAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAEf/AABD/wAARf8hAEX/oQBF//gARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //gARf+hAEX/IQBD/wAAR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABH/wAAQv8AAEb/LQBF - /7UARf/8AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//wARf+1AEX/LQBB/wAAR/8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAR/8AAD3/AABG/zMARf/AAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf/AAEb/MwA9/wAAR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEf/AAA8/wAARf83AEX/xgBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/GAEX/NwA8 - /wAAR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAABG/wAAQ/8AAEb/MwBF/8YARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/GAEb/MwBD/wAARv8AAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR/8AAET/AABF/ywARf/AAEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf/AAEX/LABE/wAAR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAEX/AABF/wAARf8hAEX/tQBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf+1AEX/IQBF/wAARf8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARf8AAEX/FQBF/6EARf/9AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//0ARf+hAEX/FQBF/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAEX/AABG/woARf+HAEX/+QBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//kARf+HAEb/CgBF - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABG/wAASP8CAEX/YwBF/+4ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF/+4ARf9jAEj/AgBG/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAARv8AAEP/AABF/0AARf/cAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AET//wBE//8AQ///AEP//wBC//8AQv//AEP//wBD//8AQ///AEP//wBC//8AQv//AEP//wBD - //8ARP//AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - /9wARf9AAEP/AABG/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABF/wAARf8eAEX/uwBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AET//wBD//8AQ///AUT//wZJ//8QUP//HFn//yxk//87b///SHj//1F/ - //9Xhf//W4f//1uH//9Xhf//UX///0h4//87b///K2T//xxZ//8QUP//Bkn//wFE//8AQ///AEP//wBE - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF/7sARf8eAEX/AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAARv8AAEf/CABF/4oARf/7AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8AQ///AEP//wNG//8RUf//L2f//1WC - //97n///n7j//7vN///Q3f//4en//+rw///x9f//9ff///b5///3+f//9/n///b5///19///8fX//+rw - ///g6f//0N3//7rM//+euP//e57//1SB//8uZv//EVH//wNG//8AQ///AEP//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/+wBF/4oAR/8IAEb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEb/AABC/wAARf9TAEX/6wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE - //8AQ///Bkn//yNe//9Wg///i6r//7vO///h6f//9fj///7+//////////////////////////////// - ///////////////////////////////////////////////////////////////////9/v//9fj//+Hp - //+6zf//iqn//1WC//8iXf//Bkn//wBD//8ARP//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/6wBF/1MAQv8AAEb/AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAARf8AAEX/IABF/8MARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBD//8CRf//HVn//1eE//+atf//1N////X3//////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////9Pf//9Pf//+ZtP//VoP//xxZ - //8CRf//AEP//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX/wwBF/yAARf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEb/AABH/wUARf+FAEX//ABF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBD//8GSP//MGf//3uf - ///J1///9Pf///////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////09///x9b//3qd//8uZv//Bkj//wBD//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/8AEX/hQBG - /wUARv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABI - /wAARP8AAEb/PgBF/+IARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBD//8FR///MWj//42s///d5v///P3///////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////+/z//9zl//+Lqv//L2f//wRH//8AQ///AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/iAEX/PgBE/wAASP8AAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEX/AABG/w4ARf+lAEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE//8BRP//JmD//4Sl///b5f///f7///// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////39///a5P//gqT//yRf - //8BRP//AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf+lAEb/DgBF/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABH - /wAAQv8AAEX/VABF/+8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8AQ///DU3//1+K///M2v///P3///////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////7/P//ytn//1yI//8MTf//AEP//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF/+8ARf9UAEL/AABH/wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEb/AABG/xQARf+1AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AET//yZf//+ZtP//8fX///////////////////// - //////////////////////////////////////////////////////////////////////////////39 - ///09///6O7//9vl///O2///xNT//77Q//++0P//w9P//87b///b5f//6O7///T3///9/f////////// - //////////////////////////////////////////////////////////////////////////////// - ////////8PT//5ez//8kXv//AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF/7UARv8UAEb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABG - /wAARP8AAEX/WgBF//MARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AET//wJF - //9Cdf//xNP///39//////////////////////////////////////////////////////////////// - ///////////////////9/v//7fL//8nX//+dt///dZr//1KA//84bP//JV///xtY//8VVP//ElL//xFS - //8VVP//Glj//yVf//83bP//UoD//3SZ//+dt///yNf//+zx///9/v////////////////////////// - /////////////////////////////////////////////////////////f3//8HS//9Ac///AkX//wBE - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/8wBF/1oARP8AAEb/AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEX/AABF/xMARf+3AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBE//8FR///WYb//9zl//////////////////////////////// - ///////////////////////////////////////////////////4+v//y9n//4Sl//9Ddf//GVf//wZJ - //8ARP//AEP//wBD//8AQ///AEP//wBD//8ARP//AET//wBD//8AQ///AEP//wBD//8AQv//AET//wZJ - //8ZVv//QnT//4Ok///K2P//9/n///////////////////////////////////////////////////// - /////////////////////////////9rk//9Wg///BEf//wBE//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX/twBF/xMARf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABH - /wAARP8AAEX/UABF//AARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//Bkj//2SN - ///m7f////////////////////////////////////////////////////////////////////////// - ///8/f//zNn//2qS//8fW///A0b//wBD//8ARP//AET//wBD//8AQv//AEP//wFF//8ER///CEr//wlL - //8JS///CEn//wRH//8BRf//AEP//wBC//8AQ///AET//wBE//8AQ///A0b//x5a//9okf//ytj///v8 - /////////////////////////////////////////////////////////////////////////////+Tr - //9hi///BUf//wBE//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/wAEX/UABE - /wAAR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEX/AABG/wwARf+nAEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wNG//9gi///6O7///////////////////////////////////// - ////////////////////////////////////////8vX//5Sw//8lX///AUT//wBD//8ARP//AEP//wJF - //8PT///KGL//0l5//9nkP//gqT//5ay//+kvP//q8H//6vB//+kvP//lrL//4Ok//9nkf//Snr//yli - //8PT///AkX//wBD//8ARP//AEP//wFE//8kXv//ka7///H1//////////////////////////////// - /////////////////////////////////////////////+bt//9diP//A0b//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf+nAEb/DABF/wAAAAAAAAAAAAAAAAAAAAAAAAAAAABI - /wAARf8AAEX/OwBF/+YARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//Tn3//+Hp - //////////////////////////////////////////////////////////////////////////////H1 - //93m///DE3//wBD//8ARP//AEP//w1O//88cP//faD//7bJ///c5f//8fX///r7//////////////// - //////////////////////////////r8///x9f//3Ob//7bK//9+of//PXH//w5O//8AQ///AET//wBD - //8LTP//dJn///D0//////////////////////////////////////////////////////////////// - /////////////+Do//9Le///AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - /+YARf87AEX/AABG/wAAAAAAAAAAAAAAAAAAAAAAAEb/AABH/wMARf+FAEX//gBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEP//zBn///P3P////////////////////////////////////////// - ////////////////////////////////////////uMv//xFQ//8AQ///AET//wpL//9MfP//qsH//+fu - ///9/f////////////////////////////////////////////////////////////////////////// - //////////////3+///o7v//rML//059//8KS///AET//wBD//8QTv//tMj///////////////////// - /////////////////////////////////////////////////////////////8za//8tZf//AEP//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//gBF/4UASP8DAEb/AAAAAAAAAAAAAAAAAAAA - AAAARf8AAEX/HgBF/8wARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE//8SUf//pr7///// - //////////////////////////////////////////////////////////////////////////////// - //++z///F1T//wBB//8ZVv//i6r//+vw//////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////7PH//46s - //8aV///AEL//xVT//+7zf////////////////////////////////////////////////////////// - /////////////////////////////6O8//8QUP//AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/zABG/x4ARv8AAAAAAAAAAAAAAAAAAEb/AABF/wAARf9WAEX/9ABF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AUX//2eQ///19/////////////////////////////////////////// - //////////////////////////////////////////////X4//+euP//aZH//7DF///5+/////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////+vv//7LH//9pkf//m7b///X3//////////////// - ////////////////////////////////////////////////////////////////////////8/b//2ON - //8ARP//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/0AEX/VgBF/wAARv8AAAAAAAAA - AAAARv8AAEb/BgBF/5kARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBD//8kXv//zdr///// - //////////////////////////////////////////////////////////////////////////////// - //////////////7+///7/P///v////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////v8///+/v////////////////////////////////////////////////////////// - ////////////////////////////////////////ytj//yFd//8ARP//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf+ZAEb/BgBG/wAAAAAAAAAAAABF/wAARv8iAEX/0wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AUX//3ab///7/P////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///6/P//cpj//wFF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF/9MARv8iAEX/AAAA - AAAAR/8AAEX/AABF/1MARf/0AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE//8bWP//yNf///// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////E1P//GVf//wBE//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX/9ABF/1MARf8AAEf/AABG/wAASP8DAEX/iwBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEP//1SB///z9v////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////L1//9Qfv//AEP//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/iwBI - /wMARv8AAEb/AABG/xQARf/AAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ER///k6////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////46s//8DR///AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/AAEb/FABG/wAARf8AAEb/NABF/+UARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AET//xVU///D0/////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////v9D//xNS//8ARP//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - /+UARv80AEX/AABF/wAARf9cAEX/+ABF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8AQ///LmX//+Hp - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////f5///KmP//wBD - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/+ABF/1wARf8AAEj/AwBF/4sARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBC//9Gd///8PT///////////////////////////////////// - //////////////////////////////////////////////////////////////X3///Q3f//r8T//6a+ - //+4y///3uf///v8//////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////+/z//97n//+3y///pr3//67E - ///Q3f//9ff///////////////////////////////////////////////////////////////////// - /////////////////////////////+/z//9DdP//AEL//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/iwBI/wMARv8PAEX/swBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEP//1WD - ///2+P////////////////////////////////////////////////////////////////////////// - //////////////3+///H1v//YIv//x9b//8LTP//CEr//w5P//8uZv//gaP//+Lq//////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////+Lq//+Bo///Lmb//w5P//8ISv//C0z//x9b//9giv//x9b///39//////////////// - ////////////////////////////////////////////////////////////////////////9ff//1GA - //8AQv//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf+zAEb/DwBF/yIARf/RAEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8AQ///XIj///j6//////////////////////////////// - ///////////////////////////////////////////////////9/v//rcP//ydh//8AQ///AEP//wBE - //8ARP//AET//wBD//8ER///S3z//9bh//////////////////////////////////////////////// - ///////////////////////////////////////////////////W4f//S3v//wRH//8AQ///AET//wBE - //8ARP//AEP//wBD//8mYP//rcL///3+//////////////////////////////////////////////// - ///////////////////////////////////3+f//WIX//wBD//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF/9EARf8iAEX/QABF/+cARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBD - //9Yhf//9/n///////////////////////////////////////////////////////////////////// - /////////////8fW//8nYf//AEP//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE//8ARP//VoP//+vx - //////////////////////////////////////////////////////////////////////////////// - ////////6/H//1aD//8ARP//AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBD//8nYP//x9b///// - //////////////////////////////////////////////////////////////////////////////b4 - //9Ugv//AEL//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/5wBF/0AARf9fAEX/8wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEH//0p5///y9v////////////////////////// - ///////////////////////////////////////////////////1+P//YIv//wBD//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBE//8LTP//oLn///////////////////////////////////// - //////////////////////////////////////////////////+guf//C0z//wBE//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBD//9gi///9fj///////////////////////////////////// - ////////////////////////////////////////8fX//0d2//8AQf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf/zAEX/XwBF/30ARf/6AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBD - //8PT///dZr///X4//////////////////////////////////////////////////////////////// - /////////////9Dd//8fW///AEP//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBD - //9Ugf//9Pf///////////////////////////////////////////////////////////////////// - ////////9Pf//1SB//8AQ///AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEP//x9b - ///Q3f////////////////////////////////////////////////////////////////////////// - ///09///dZr//xFQ//8AQ///AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//oARf99AEX/nABF - //4ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//K2T//6W9///y9v////////////////////////// - ////////////////////////////////////////////////////////r8T//wtM//8ARP//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEP//y9m///j6/////////////////////////// - ///////////////////////////////////////////////////j6///L2b//wBD//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//C0z//6/E//////////////////////////////// - ///////////////////////////////////////////////////z9v//qL///y1l//8ARP//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//gBF/5wARf+6AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AET//zBn - ///C0v////////////////////////////////////////////////////////////////////////// - //////////////////+mvv//CEr//wBE//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8AQ///JmD//97n//////////////////////////////////////////////////////////////// - /////////////97n//8mYP//AEP//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE - //8ISv//pr7///////////////////////////////////////////////////////////////////// - ////////////////////////xNT//zNp//8ARP//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/ugBF - /84ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBE//8aV///s8f///////////////////////////////////// - /////////////////////////////////////////////////////////////7jL//8PT///AET//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBD//84bf//6O7///////////////////// - ////////////////////////////////////////////////////////6O7//zht//8AQ///AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AET//w9P//+4y/////////////////////////// - ////////////////////////////////////////////////////////////////////////tsr//xxY - //8ARP//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/OAEX/3QBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//Akb//3Wa - ///6+/////////////////////////////////////////////////////////////////////////// - ////////////////////////3uf//y9m//8AQ///AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEP//2mR///5+/////////////////////////////////////////////////////////// - ///////////////////5+///aZH//wBD//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8AQ///L2b//97n//////////////////////////////////////////////////////////////// - ///////////////////////////////////6/P//eZ3//wJG//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - /90ARf/rAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBE//8fW///zdr///////////////////////////////////// - ///////////////////////////////////////////////////////////////////8/f//gqP//wRH - //8ARP//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBD//8aVv//vc////////////////////// - //////////////////////////////////////////////////////////////////+9z///Glb//wBD - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AET//wRH//+Co////P3///////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///Q3P//Il3//wBD//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/6wBF//MARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEP//1KA - ///09/////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////i6v//THz//wBE//8ARP//AEX//wBF//8ARf//AEX//wBF - //8AQ///Ckv//4Kk///5+v////////////////////////////////////////////////////////// - //////////////////////////////n6//+CpP//Ckv//wBD//8ARf//AEX//wBF//8ARf//AEX//wBE - //8ARP//THz//+Lq//////////////////////////////////////////////////////////////// - //////////////////////////////////////////////X4//9Wg///AEP//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf/zAEX/+ABF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//faD///////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///X4f//VoP//wpM//8AQv//AEP//wBD//8AQ///AEP//xlW//+CpP//7/T///////////////////// - /////////////////////////////////////////////////////////////////////////////+/0 - //+CpP//GVb//wBD//8AQ///AEP//wBD//8AQ///Ckz//1aD///X4f////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////4Kj//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//gARf/8AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wRH - //+UsP////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////s8f//oLn//1SB//8vZv//JmD//zht - //9okf//vc////j6//////////////////////////////////////////////////////////////// - //////////////////////////////////////////////j6//+9z///aJH//zht//8mYP//L2b//1SB - //+guf//6/H///////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////mLP//wVH//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//ABF//wARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//BEf//5ay//////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////9Pf//+Pr///e5///6O7///n7//////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////5+///6O7//97n///j6///9Pf///////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////+atf//BUj//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/8AEX/+ABF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARP//f6L///////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////4Ol//8BRf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//gARf/zAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBD//9Ugv//9Pf///////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////2+P//WIT//wBD//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/8wBF/+sARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEP//yBc///O2/////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////9Hd//8jXv//AEP//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf/rAEX/3QBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//Akb//3ic///6+/////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////7/P//e5///wNG//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF/90ARf/OAEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARP//G1j//7XJ//////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////7jL//8dWf//AET//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX/zgBF/7oARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//Mmn//8TU - /////////////////////////////////////////////////////////////+vw///a5P///P3///// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////+/z//9jj///q7/////////////////////////////////////////// - ///////////////////H1v//NWv//wBE//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf+6AEX/nABF - //4ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//LmX//6i////z9/////////////////////////// - //////////////z9///Q3P//Wob//y1l//+Usf//7fL///////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////+zx//+Sr///K2T//1eE - ///O2////P3////////////////////////////////////////09///q8H//zBn//8ARP//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//gBF/5wARf99AEX/+gBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8AQ///ElH//12I//+wxf//4On///P2///3+f//9fj//+rw///H1v//gKL//yli//8BRf//AEP//wtM - //9Ugv//vc7///f5//////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////b4//+7zf//UoH//wpL//8AQ///AUX//yhh//9+of//x9b//+rw///1+P//9/n///P2 - ///h6f//ssb//1+K//8TUv//AEP//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/6AEX/fQBF - /18ARf/0AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//AET//w5P//8uZv//THz//1mG - //9Tgf//O2///xlX//8DRv//AEP//wBF//8ARf//AET//wBE//8YVv//aZH//8jX///3+f////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////f5///H1v//Z5D//xdV//8ARP//AET//wBF - //8ARf//AEP//wNG//8YVv//O2///1OB//9Zhv//TXz//y9m//8PT///AET//wBE//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//MARf9fAEX/QABF/+cARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AET//wBD//8AQv//AEP//wBC//8AQ///AET//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBE//8BRP//Hlr//2WO//+6zP//8PT///////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////////+/0 - //+5zP//ZI3//x1Z//8BRP//AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE//8AQ///AEL//wBD - //8AQv//AEP//wBE//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/5wBF - /0AARf8iAEX/0QBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//AET//xRT - //9Nff//lbH//9Pf///2+P////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////9vj//9Le//+TsP//THz//xRT//8ARP//AET//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/RAEX/IgBG/w8ARf+zAEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AET//wBD//8FSP//I17//1qG//+Usf//x9b//+rw - ///6/P////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////r7///r8P//x9b//5Sw//9Zhf//I13//wVI - //8AQ///AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - /7MARv8PAEb/AwBF/4sARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8AQ///AEP//wVH//8YVv//PnH//2iR//+Sr///uMv//9fi///p7///9Pf///r7 - ///+/v/////////////////////////////////////////////+/v//+vv///P2///n7v//1uH//7nM - //+Sr///Z5D//z5x//8YVv//BUf//wBD//8AQ///AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/iwBI/wMARf8AAEX/XABF//gARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE - //8AQ///AEP//wRH//8PUP//Il3//zlu//9Qf///ZY///3id//+IqP//kq///8fW///+/v///////+7y - //+guf//iKj//3qd//9mj///Tn3//zZr//8hXP//EFD//wRH//8AQ///AEP//wBE//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //gARf9cAEX/AABF/wAARv80AEX/5QBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE//8AQ///AEP//wBC - //8AQ///AET//wFF//8BRf//YIr///j6////////4+v//zNp//8AQ///AET//wBD//8AQv//AEP//wBD - //8ARP//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/5QBG/zQARf8AAEb/AABG/xQARf/AAEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBC//84bf//6O7///// - ///1+P//VYL//wBC//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf/AAEb/FABG/wAARv8AAEj/AwBF/4sARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AET//xpY///M2f////////////9/of//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF/4sASP8DAEb/AABH/wAARf8AAEX/UwBF - //QARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//CUv//6e+ - /////////////6rA//8KS///AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf/0AEX/UwBF/wAAR/8AAAAAAABF/wAARv8iAEX/0wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//fJ////7+////////ztv//xxZ//8ARP//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF/9MARv8iAEX/AAAAAAAAAAAAAEb/AABH - /wYARf+ZAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBD - //9SgP//9Pf////////p7///Om///wBD//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/mQBH/wYARv8AAAAAAAAAAAAAR/8AAEX/AABG/1YARf/0AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEP//y5m///h6f////////j6//9hi///AEP//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//QARv9WAEX/AABH/wAAAAAAAAAAAAAA - AAAARf8AAEX/HgBF/8wARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARP//FFP//8LS/////////////4yr//8CRv//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/zABG/x4ARv8AAAAAAAAAAAAAAAAAAAAAAABG/wAAR/8DAEX/hQBF//4ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8GSP//m7b/////////////tcn//w5P - //8ARP//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//4ARf+FAEj/AwBG/wAAAAAAAAAAAAAA - AAAAAAAAAEj/AABF/wAARf87AEX/5gBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBD//9vlv///P3////////X4v//JF7//wBD//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE//8AQ///Akb//wZI - //8ER///AEP//wBD//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/5gBF/zsARf8AAEb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEX/AABG/wwARf+nAEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEL//0d4///w9P///////+/z - //9Fdv//AEL//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARP//F1X//1KA//+IqP//nrj//5Sw//9qkv//KmP//wNG//8ARP//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf+nAEb/DABF/wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAR/8AAET/AABF/1EARf/wAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8AQ///JV///9nj////////+/z//22U//8AQ///AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//A0b//0V3//+6zP//8/b///// - //////////////r8///V4P//b5X//w5O//8ARP//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/8ABF/1EARP8AAEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARf8AAEb/EwBF - /7cARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE//8PT///t8r///// - ////////mbT//wVI//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//9Nff//3eb////////////////////////////////////////09///haX//wtM - //8ARP//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf+3AEb/EwBF/wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABH/wAAQv8AAEX/WgBF//MARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wNG//+Prf/////////////A0f//E1L//wBE//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8AQ///JWD//8rZ//////////////// - ///////////////////////////////////v8///Wob//wBE//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/8wBF/1oAQv8AAEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABG - /wAARv8UAEX/tQBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEP//2ON - ///5+////////+Do//8sZf//AEP//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//92m////P3///////////////////////////////////////////////////// - //+7zf//FFP//wBE//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf+1AEb/FABG/wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEf/AABC/wAARf9UAEX/7wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8AQ///PHD//+vw////////9Pf//1B///8AQ///AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE//8AQv//Dk3//7XJ//////////////// - /////////////////////////////////////////////+rw//88cP//AEP//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/7wBF/1QAQv8AAEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAEX/AABG/w4ARf+lAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE - //8dWv//0N3////////+/v//ep3//wBE//8ARf//AEX//wBF//8ARf//AEX//wBE//8ARP//AEP//wBD - //8DRv//Dk///yNe//9Xg///3+f///////////////////////////////////////////////////// - ////////9vj//1aD//8AQ///AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf+lAEb/DgBF/wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASP8AAET/AABF/z4ARf/iAEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AET//wpM//+swv////////////+lvf//CEr//wBE - //8ARP//AEP//wBC//8BRf//Ckz//xxZ//87b///Yoz//42s//+2yv//2OP///D0///+/v////////// - ///////////////////////////////////////////////////2+P//VoP//wBD//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/4gBF/z4ARP8AAEj/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAARv8AAEb/BQBF/4UARf/8AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AUX//4Kj/////////////8rY//8ZVv//BUj//xZV//8xaP//VoP//4Ci//+rwf//z9z//+rv - ///5+v////////////////////////////////////////////////////////////////////////// - /////////////+rw//88cP//AEP//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//wARf+FAEb/BQBG/wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARf8AAEb/IABF - /8MARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8AQv//V4T///b4////////7fL//5Cu - //+dt///xdX//+Tr///1+P///v7///////////////////////////////////v8///u8///5+3///z9 - ////////////////////////////////////////////////////////u83//xRT//8ARP//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX/wwBG/yAARf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABH/wAAP/8AAEX/UwBF/+sARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBD//8yaf//5Ov//////////////v7///////////////////////////////////3+ - ///09///4On//8HR//+atf//bpX//0R2//9Bc///y9n///////////////////////////////////// - /////////////+/z//9ahv//AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF/+sARf9TAD//AABH/wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABG - /wAAR/8IAEX/igBF//sARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AET//xZV///F1f////////// - ///////////////////3+f//5+7//8vZ//+mvv//e57//1F///8tZf//FFP//wVI//8AQ///AEL//wBD - //9Nff//3eb////////////////////////////////////////09///haX//wtM//8ARP//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf/7AEX/igBH/wgARv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABF/wAARf8eAEX/uwBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//BEf//3ic///t8v//7fL//9Xg//+xxv//iKj//12I//83bP//Glf//wlK - //8BRP//AEP//wBD//8ARP//AEX//wBF//8ARf//AEX//wNG//9Gd///us3///P3//////////////// - ///6/P//1eD//2+V//8OTv//AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF/7sARf8eAEX/AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAEb/AABD/wAARf9AAEX/3ABF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//Dk7//0J0 - //9Bc///IVz//wxN//8CRv//AEP//wBD//8ARP//AET//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBE//8YVf//VIL//4io//+dt///lLD//2qS//8qY///A0b//wBE//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf/cAEX/QABD/wAARv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEb/AABI/wIARf9jAEX/7gBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARP//AEP//wBD//8AQ///AET//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBE//8AQ///AkX//wZI - //8ER///AEP//wBD//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/7gBF/2MASP8CAEb/AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAEX/AABG/woARf+HAEX/+QBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //kARf+HAEb/CgBF/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEX/AABF - /xUARf+hAEX//QBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/9AEX/oQBF/xUARf8AAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARf8AAEX/AABF/yEARf+1AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - /7UARf8hAEX/AABF/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAR/8AAET/AABG/ywARf/AAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/AAEX/LABE/wAAR/8AAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARv8AAEP/AABG/zMARf/GAEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/xgBG - /zMAQ/8AAEb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAR/8AADz/AABF/zcARf/GAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF/8YARf83ADz/AABH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR/8AAD3/AABG - /zMARf/AAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/AAEb/MwA9 - /wAAR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR/8AAEH/AABF/y0ARf+1AEX//ABF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf/8AEX/tQBF/y0AQf8AAEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAR/8AAEP/AABF/yEARf+hAEX/+ABF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/+ABF/6EARf8hAEP/AABH - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARf8AAEX/AABF/xUARf+HAEX/7wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF/+8ARf+HAEX/FQBF/wAARf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAEb/AABG/woARf9jAEX/3ABF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf/cAEX/YwBG/woARv8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEb/AABH - /wMARf9AAEX/uwBF//sARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf/7AEX/uwBF/0AAR/8DAEb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEf/AAA8/wAARv8eAEX/igBF/+sARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/6wBF/4oARv8eAD//AABH/wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAABG/wAARv8JAEX/UgBF/8MARf/7AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/+wBF - /8MARf9SAEb/CQBG/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABG/wAASP8AAEX/IABF - /4UARf/jAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF/+MARf+FAEX/IABI/wAARv8AAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARv8AAEb/BgBG/z4ARf+mAEX/8ABF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//AARf+mAEb/PgBG - /wYARv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAASP8AAEP/AABF/w4ARf9UAEX/tQBF//IARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//IARf+1AEX/VABF/w4AQ/8AAEj/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEf/AABP/wAARv8UAEX/WgBF - /7cARf/wAEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//AARf+3AEX/WgBG/xQAT/8AAEf/AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABF/wAARP8AAEX/EwBF/1AARf+nAEX/5gBF//0ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//QBF - /+YARf+nAEX/UABF/xMARP8AAEX/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAR/8AACf/AABG/wwARf87AEX/hQBF/8wARf/0AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX/9ABF/8wARf+FAEX/OwBG/wwAJ/8AAEf/AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABG/wAAR/8DAEb/HgBF - /1YARf+YAEX/0wBF//QARf/+AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//4ARf/0AEX/0wBF/5gARf9WAEb/HgBH - /wMARv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASf8AAD//AABG/wYARv8iAEX/UwBF/4sARf/AAEX/5QBF - //cARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX/9wBF - /+UARf/AAEX/iwBF/1MARv8iAEb/BgA//wAASf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAR/8AAEf/AwBG/xQARv80AEX/XQBF/4sARf+zAEX/0QBF/+cARf/0AEX/+gBF - //4ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF//8ARf//AEX//wBF - //4ARf/6AEX/9ABF/+cARf/RAEX/swBF/4sARf9dAEb/NABG/xQAR/8DAEf/AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAR/8AAEf/AwBG/w8ARf8iAEX/QABF/18ARf99AEX/nABF/7oARf/NAEX/3QBF/+sARf/zAEX/+ABF - //wARf/8AEX/+ABF//MARf/rAEX/3QBF/80ARf+6AEX/nABF/30ARf9fAEX/QABF/yIARv8PAEf/AwBH - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////////wAAAA////////////////AAAAAA//////////////+AAAAAA - B/////////////8AAAAAAAD////////////8AAAAAAAAP///////////8AAAAAAAAA///////////8AA - AAAAAAAD//////////8AAAAAAAAAAP/////////8AAAAAAAAAAA/////////+AAAAAAAAAAAH/////// - /+AAAAAAAAAAAAf////////AAAAAAAAAAAAD////////AAAAAAAAAAAAAP///////gAAAAAAAAAAAAB/ - //////wAAAAAAAAAAAAAP//////4AAAAAAAAAAAAAB//////8AAAAAAAAAAAAAAP/////+AAAAAAAAAA - AAAAB//////AAAAAAAAAAAAAAAP/////gAAAAAAAAAAAAAAB/////wAAAAAAAAAAAAAAAP////4AAAAA - AAAAAAAAAAB////8AAAAAAAAAAAAAAAAP///+AAAAAAAAAAAAAAAAB////AAAAAAAAAAAAAAAAAP///w - AAAAAAAAAAAAAAAAD///4AAAAAAAAAAAAAAAAAf//8AAAAAAAAAAAAAAAAAD///AAAAAAAAAAAAAAAAA - A///gAAAAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA - AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAAAAA/+AAAAAAA - AAAAAAAAAAAAH/gAAAAAAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAD+AA - AAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAA - AAPAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA - AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABgAAAAAAA - AAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA+AA - AAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAAAAAAA - AA/wAAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAAAAAAAAAAH/gAAAAAAAAAAAAAAAAAAB/8AAAAAAAAAAAA - AAAAAAA//AAAAAAAAAAAAAAAAAAAP/4AAAAAAAAAAAAAAAAAAH/+AAAAAAAAAAAAAAAAAAB//wAAAAAA - AAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAAAAAAAAH//8AAAAAAAAAAAAAAAAAD///A - AAAAAAAAAAAAAAAAA///4AAAAAAAAAAAAAAAAAf///AAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAA - D///+AAAAAAAAAAAAAAAAB////wAAAAAAAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////wAAAAAAAAAA - AAAAAP////+AAAAAAAAAAAAAAAH/////wAAAAAAAAAAAAAAD/////+AAAAAAAAAAAAAAB//////wAAAA - AAAAAAAAAA//////+AAAAAAAAAAAAAAf//////wAAAAAAAAAAAAAP//////+AAAAAAAAAAAAAH////// - /wAAAAAAAAAAAAD////////AAAAAAAAAAAAD////////4AAAAAAAAAAAB/////////gAAAAAAAAAAB// - ///////8AAAAAAAAAAA//////////wAAAAAAAAAA///////////AAAAAAAAAA///////////8AAAAAAA - AA////////////wAAAAAAAA/////////////AAAAAAAA/////////////+AAAAAAB//////////////8 - AAAAAD///////////////8AAAAP///////8= \ No newline at end of file diff --git a/SCrawler/Channels/ChannelsStatsForm.vb b/SCrawler/Channels/ChannelsStatsForm.vb index a6fd2b2..7b3d3e4 100644 --- a/SCrawler/Channels/ChannelsStatsForm.vb +++ b/SCrawler/Channels/ChannelsStatsForm.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -32,25 +32,26 @@ Friend Class ChannelsStatsForm End If End Sub Private Sub MyDefs_ButtonDeleteClickOC(ByVal Sender As Object, ByVal e As KeyHandleEventArgs) Handles MyDefs.ButtonDeleteClickOC + Const MsgTitle$ = "Deleting channels" Try Dim c As List(Of String) = CMB_CHANNELS.Items.CheckedItems.Select(Function(cc) CStr(cc.Value(1))).ListIfNothing If c.ListExists Then - If MsgBoxE({$"The following channels will be deleted:{vbCr}{c.ListToString(vbCr)}", "Deleting channels"}, vbExclamation,,, {"Confirm", "Cancel"}) = 0 Then + If MsgBoxE({$"The following channels will be deleted:{vbCr}{c.ListToString(vbCr)}", MsgTitle}, vbExclamation,,, {"Confirm", "Cancel"}) = 0 Then For Each CID$ In c : Settings.Channels.Remove(Settings.Channels.Find(CID)) : Next MyMainLOG = $"Deleted channels:{vbNewLine}{c.ListToString(vbNewLine)}" - MsgBoxE("Channels deleted") + MsgBoxE({"Channels deleted", MsgTitle}) DeletedChannels += c.Count c.Clear() MyDefs.ChangesDetected = False RefillList() Else - MsgBoxE("Operation canceled") + MsgBoxE({"Operation canceled", MsgTitle}) End If Else - MsgBoxE("No one channel checked", vbExclamation) + MsgBoxE({"No channels marked for deletion", MsgTitle}, vbExclamation) End If Catch ex As Exception - ErrorsDescriber.Execute(EDP.LogMessageValue, ex, "Deleting channels") + ErrorsDescriber.Execute(EDP.LogMessageValue, ex, MsgTitle) End Try End Sub Private Sub CMB_CHANNELS_ActionOnChangeDetected(ByVal c As Boolean) Handles CMB_CHANNELS.ActionOnChangeDetected diff --git a/SCrawler/Content/Icons/DownArrow_Blue_24.ico b/SCrawler/Content/Icons/ArrowDownIcon_Blue_24.ico similarity index 100% rename from SCrawler/Content/Icons/DownArrow_Blue_24.ico rename to SCrawler/Content/Icons/ArrowDownIcon_Blue_24.ico diff --git a/SCrawler/Content/Icons/GroupBy_284.ico b/SCrawler/Content/Icons/GroupByIcon_16.ico similarity index 100% rename from SCrawler/Content/Icons/GroupBy_284.ico rename to SCrawler/Content/Icons/GroupByIcon_16.ico diff --git a/SCrawler/Content/Icons/RSSIcon.ico b/SCrawler/Content/Icons/RSSIcon_32.ico similarity index 100% rename from SCrawler/Content/Icons/RSSIcon.ico rename to SCrawler/Content/Icons/RSSIcon_32.ico diff --git a/SCrawler/Content/Icons/Rainbow.ico b/SCrawler/Content/Icons/RainbowIcon_48.ico similarity index 100% rename from SCrawler/Content/Icons/Rainbow.ico rename to SCrawler/Content/Icons/RainbowIcon_48.ico diff --git a/SCrawler/Content/Icons/SettingsIcon.ico b/SCrawler/Content/Icons/SettingsIcon_48.ico similarity index 100% rename from SCrawler/Content/Icons/SettingsIcon.ico rename to SCrawler/Content/Icons/SettingsIcon_48.ico diff --git a/SCrawler/Content/Icons/InstagramIcon.ico b/SCrawler/Content/Icons/SiteIcons/InstagramIcon_32.ico similarity index 100% rename from SCrawler/Content/Icons/InstagramIcon.ico rename to SCrawler/Content/Icons/SiteIcons/InstagramIcon_32.ico diff --git a/SCrawler/Content/Icons/SiteIcons/LPSGIcon_48.ico b/SCrawler/Content/Icons/SiteIcons/LPSGIcon_48.ico new file mode 100644 index 0000000..af8c0b6 Binary files /dev/null and b/SCrawler/Content/Icons/SiteIcons/LPSGIcon_48.ico differ diff --git a/SCrawler/Content/Icons/RedGifsIcon.ico b/SCrawler/Content/Icons/SiteIcons/RedGifsIcon_32.ico similarity index 100% rename from SCrawler/Content/Icons/RedGifsIcon.ico rename to SCrawler/Content/Icons/SiteIcons/RedGifsIcon_32.ico diff --git a/SCrawler/Content/Icons/RedditIcon.ico b/SCrawler/Content/Icons/SiteIcons/RedditIcon_128.ico similarity index 100% rename from SCrawler/Content/Icons/RedditIcon.ico rename to SCrawler/Content/Icons/SiteIcons/RedditIcon_128.ico diff --git a/SCrawler/Content/Icons/SiteIcons/TikTokIcon_32.ico b/SCrawler/Content/Icons/SiteIcons/TikTokIcon_32.ico new file mode 100644 index 0000000..1eae6d3 Binary files /dev/null and b/SCrawler/Content/Icons/SiteIcons/TikTokIcon_32.ico differ diff --git a/SCrawler/Content/Icons/TwitterIcon.ico b/SCrawler/Content/Icons/SiteIcons/TwitterIcon_32.ico similarity index 100% rename from SCrawler/Content/Icons/TwitterIcon.ico rename to SCrawler/Content/Icons/SiteIcons/TwitterIcon_32.ico diff --git a/SCrawler/Content/Icons/SiteIcons/XvideosIcon_48.ico b/SCrawler/Content/Icons/SiteIcons/XvideosIcon_48.ico new file mode 100644 index 0000000..f968966 Binary files /dev/null and b/SCrawler/Content/Icons/SiteIcons/XvideosIcon_48.ico differ diff --git a/SCrawler/Content/Icons/UsersIcon.ico b/SCrawler/Content/Icons/UsersIcon_32.ico similarity index 100% rename from SCrawler/Content/Icons/UsersIcon.ico rename to SCrawler/Content/Icons/UsersIcon_32.ico diff --git a/SCrawler/Content/Pictures/ApplicationPic_16.png b/SCrawler/Content/Pictures/ApplicationPic_16.png new file mode 100644 index 0000000..10711f5 Binary files /dev/null and b/SCrawler/Content/Pictures/ApplicationPic_16.png differ diff --git a/SCrawler/Content/Pictures/ArrowDownPic_Blue_24.png b/SCrawler/Content/Pictures/ArrowDownPic_Blue_24.png new file mode 100644 index 0000000..e00246f Binary files /dev/null and b/SCrawler/Content/Pictures/ArrowDownPic_Blue_24.png differ diff --git a/SCrawler/Content/Pictures/Cloud_01_16.png b/SCrawler/Content/Pictures/Cloud_01_16.png deleted file mode 100644 index 1850920..0000000 Binary files a/SCrawler/Content/Pictures/Cloud_01_16.png and /dev/null differ diff --git a/SCrawler/Content/Pictures/Delete.png b/SCrawler/Content/Pictures/DeletePic_24.png similarity index 100% rename from SCrawler/Content/Pictures/Delete.png rename to SCrawler/Content/Pictures/DeletePic_24.png diff --git a/SCrawler/Content/Pictures/Folder_32.png b/SCrawler/Content/Pictures/FolderPic_32.png similarity index 100% rename from SCrawler/Content/Pictures/Folder_32.png rename to SCrawler/Content/Pictures/FolderPic_32.png diff --git a/SCrawler/Content/Pictures/GlobeBlue_32.png b/SCrawler/Content/Pictures/GlobePic_32.png similarity index 100% rename from SCrawler/Content/Pictures/GlobeBlue_32.png rename to SCrawler/Content/Pictures/GlobePic_32.png diff --git a/SCrawler/Content/Pictures/MessagePic_16.png b/SCrawler/Content/Pictures/MessagePic_16.png new file mode 100644 index 0000000..7d06b19 Binary files /dev/null and b/SCrawler/Content/Pictures/MessagePic_16.png differ diff --git a/SCrawler/Content/Pictures/NextPIC2.png b/SCrawler/Content/Pictures/NextPIC2.png deleted file mode 100644 index 703c7d0..0000000 Binary files a/SCrawler/Content/Pictures/NextPIC2.png and /dev/null differ diff --git a/SCrawler/Content/Pictures/Ok.png b/SCrawler/Content/Pictures/OkPic_32.png similarity index 100% rename from SCrawler/Content/Pictures/Ok.png rename to SCrawler/Content/Pictures/OkPic_32.png diff --git a/SCrawler/Content/Pictures/PastePic32.png b/SCrawler/Content/Pictures/PastePic_32.png similarity index 100% rename from SCrawler/Content/Pictures/PastePic32.png rename to SCrawler/Content/Pictures/PastePic_32.png diff --git a/SCrawler/Content/Pictures/PencilPic_01_16.png b/SCrawler/Content/Pictures/PencilPic_16.png similarity index 100% rename from SCrawler/Content/Pictures/PencilPic_01_16.png rename to SCrawler/Content/Pictures/PencilPic_16.png diff --git a/SCrawler/Content/Pictures/Pin_32.png b/SCrawler/Content/Pictures/PinPic_32.png similarity index 100% rename from SCrawler/Content/Pictures/Pin_32.png rename to SCrawler/Content/Pictures/PinPic_32.png diff --git a/SCrawler/Content/Pictures/PlusPIC.png b/SCrawler/Content/Pictures/PlusPic_24.png similarity index 100% rename from SCrawler/Content/Pictures/PlusPIC.png rename to SCrawler/Content/Pictures/PlusPic_24.png diff --git a/SCrawler/Content/Pictures/PrevPIC2.png b/SCrawler/Content/Pictures/PrevPIC2.png deleted file mode 100644 index c2e2be7..0000000 Binary files a/SCrawler/Content/Pictures/PrevPIC2.png and /dev/null differ diff --git a/SCrawler/Content/Pictures/RSSPic.png b/SCrawler/Content/Pictures/RSSPic_512.png similarity index 100% rename from SCrawler/Content/Pictures/RSSPic.png rename to SCrawler/Content/Pictures/RSSPic_512.png diff --git a/SCrawler/Content/Pictures/Refresh.png b/SCrawler/Content/Pictures/RefreshPic_24.png similarity index 100% rename from SCrawler/Content/Pictures/Refresh.png rename to SCrawler/Content/Pictures/RefreshPic_24.png diff --git a/SCrawler/Content/Pictures/ScriptPic32.png b/SCrawler/Content/Pictures/ScriptPic_32.png similarity index 100% rename from SCrawler/Content/Pictures/ScriptPic32.png rename to SCrawler/Content/Pictures/ScriptPic_32.png diff --git a/SCrawler/Content/Pictures/InstagramPic76.png b/SCrawler/Content/Pictures/SitePictures/InstagramPic_76.png similarity index 100% rename from SCrawler/Content/Pictures/InstagramPic76.png rename to SCrawler/Content/Pictures/SitePictures/InstagramPic_76.png diff --git a/SCrawler/Content/Pictures/SitePictures/LPSGPic_32.png b/SCrawler/Content/Pictures/SitePictures/LPSGPic_32.png new file mode 100644 index 0000000..1393992 Binary files /dev/null and b/SCrawler/Content/Pictures/SitePictures/LPSGPic_32.png differ diff --git a/SCrawler/Content/Pictures/RedGifsPic32.png b/SCrawler/Content/Pictures/SitePictures/RedGifsPic_32.png similarity index 100% rename from SCrawler/Content/Pictures/RedGifsPic32.png rename to SCrawler/Content/Pictures/SitePictures/RedGifsPic_32.png diff --git a/SCrawler/Content/Pictures/RedditPic512.png b/SCrawler/Content/Pictures/SitePictures/RedditPic_512.png similarity index 100% rename from SCrawler/Content/Pictures/RedditPic512.png rename to SCrawler/Content/Pictures/SitePictures/RedditPic_512.png diff --git a/SCrawler/Content/Pictures/SitePictures/TikTokPic_192.png b/SCrawler/Content/Pictures/SitePictures/TikTokPic_192.png new file mode 100644 index 0000000..22105a1 Binary files /dev/null and b/SCrawler/Content/Pictures/SitePictures/TikTokPic_192.png differ diff --git a/SCrawler/Content/Pictures/TwitterPic400.png b/SCrawler/Content/Pictures/SitePictures/TwitterPic_400.png similarity index 100% rename from SCrawler/Content/Pictures/TwitterPic400.png rename to SCrawler/Content/Pictures/SitePictures/TwitterPic_400.png diff --git a/SCrawler/Content/Pictures/SitePictures/XvideosPic_32.png b/SCrawler/Content/Pictures/SitePictures/XvideosPic_32.png new file mode 100644 index 0000000..90330be Binary files /dev/null and b/SCrawler/Content/Pictures/SitePictures/XvideosPic_32.png differ diff --git a/SCrawler/Content/Pictures/StartPic_01_Green_16.png b/SCrawler/Content/Pictures/StartPic_Green_16.png similarity index 100% rename from SCrawler/Content/Pictures/StartPic_01_Green_16.png rename to SCrawler/Content/Pictures/StartPic_Green_16.png diff --git a/SCrawler/Content/Pictures/StopPic32.png b/SCrawler/Content/Pictures/StopPic_32.png similarity index 100% rename from SCrawler/Content/Pictures/StopPic32.png rename to SCrawler/Content/Pictures/StopPic_32.png diff --git a/SCrawler/Download/ActiveDownloadingProgress.Designer.vb b/SCrawler/Download/ActiveDownloadingProgress.Designer.vb index c82c577..bb9e406 100644 --- a/SCrawler/Download/ActiveDownloadingProgress.Designer.vb +++ b/SCrawler/Download/ActiveDownloadingProgress.Designer.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -47,15 +47,13 @@ Namespace DownloadObjects Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.ClientSize = New System.Drawing.Size(434, 61) Me.Controls.Add(Me.TP_MAIN) - Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.Icon = Global.SCrawler.My.Resources.ArrowDownIcon_Blue_24 Me.KeyPreview = True Me.MinimumSize = New System.Drawing.Size(450, 100) Me.Name = "ActiveDownloadingProgress" Me.Text = "Active downloading progress" Me.ResumeLayout(False) - End Sub - Private WithEvents TP_MAIN As TableLayoutPanel End Class End Namespace \ No newline at end of file diff --git a/SCrawler/Download/ActiveDownloadingProgress.resx b/SCrawler/Download/ActiveDownloadingProgress.resx index 1f2f6a4..1af7de1 100644 --- a/SCrawler/Download/ActiveDownloadingProgress.resx +++ b/SCrawler/Download/ActiveDownloadingProgress.resx @@ -117,508 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAABAAwAMDAQAAEABABoBgAAxgAAACAgEAABAAQA6AIAAC4HAAAYGBAAAQAEAOgBAAAWCgAAEBAQAAEA - BAAoAQAA/gsAADAwAAABAAgAqA4AACYNAAAgIAAAAQAIAKgIAADOGwAAGBgAAAEACADIBgAAdiQAABAQ - AAABAAgAaAUAAD4rAAAwMAAAAQAgAKglAACmMAAAICAAAAEAIACoEAAATlYAABgYAAABACAAiAkAAPZm - AAAQEAAAAQAgAGgEAAB+cAAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP// - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjsjgAAAAAAAAAAAA - AAAAAAAAAAAAAAAIbOh4AAAAAAAAAAAAAAAAAAAAAAAAAAAH5mfsgAAAAAAAAAAAAAAAAAAAAAAAAAB+ - xs54YAAAAAAAAAAAAAAAAAAAAAAAAAfsbmxo5wAAAAAAAAAAAAAAAAAAAAAAAIbObObOeMAAAAAAAAAA - AAAAAAAAAAAACG5+zmzsaOgAAAAAAAAAAAAAAAAAAAAABn7ObOZmbneAAAAAAAAAAAAAAAAAAAAAfs5s - 5+zs7I7AAAAAAAAAAAAAAAAAAAAH7Ofm7G7GbGiOAAAAAAAAAAAAAAAAAAB+fs7Ofs5+zmzngAAAAAAA - AAAAAAAAAAhn7Ojs5uzm7OZ4yAAAAAAAAAAAAAAAAAaOfm7Obsfsbs7OjnAAAAAAAAAAAAAAAH7Ojs7n - 7O7ObOZs54AAAAAAAAAAAAAABn6Ozuduzn5uznzmyOcAAAAAAAAAAAAAfn7I6M7s5+zn7Obs5oyAAAAA - AAAAAAAIZ+jujuzo7Obs5uxubOjnAAAAAAAAAAAG586M5+js7n7OfOfs5s54cAAAAAAAAABnzo7o5+zu - fs5+5uzmzmzowAAAAAAAAAdujn5+fu7Ozuzs7Ofs5+bI6AAAAAAAAHzn7OjOjI5+5+jufs5uzs5ueOAA - AAAAAG6M6O6O7n7Ofs7Ozo7Ofmzs53gAAAAAB+zo7IznyOzuzufufs6Ofo6Ofn4AAAAACEdsZ2Z87o5+ - js7O7O5cjHx8jIgAAAAAAAAAAAAAfOfs7Ojs6OfgAAAAAAAAAAAAAAAAAAAAbo7O6O7O7OfAAAAAAAAA - AAAAAAAAAAAAfsjm7Obo7s6AAAAAAAAAAAAAAAAAAAAAaO5+zo7OyO5wAAAAAAAAAAAAAAAAAAAAzn7O - js7n7sjAAAAAAAAAAAAAAAAAAAAAaM6Ozuzuzu5wAAAAAAAAAAAAAAAAAAAAbn7Obn5+jshgAAAAAAAA - AAAAAAAAAAAAbOjn7Ozs7O5wAAAAAAAAAAAAAAAAAAAAfnzn5+bn7n7AAAAAAAAAAAAAAAAAAAAAbOjs - 7OzuzshgAAAAAAAAAAAAAAAAAAAAaOyOfn7I5+5wAAAAAAAAAAAAAAAAAAAAbOfs7Ozm7OfAAAAAAAAA - AAAAAAAAAAAAbnzn5+bs5u5wAAAAAAAAAAAAAAAAAAAAfOfsjOx+zn7AAAAAAAAAAAAAAAAAAAAAbnzn - 5o7OfshgAAAAAAAAAAAAAAAAAAAAx+Z+zs5uzm5gAAAAAAAAAAAAAAAAAAAAbs7H5+fObsjAAAAAAAAA - AAAAAAAAAAAAZ2js585s7O5wAAAAAAAAAAAAAAAAAAAAjOyH5+jn53aAAAAAAAAAAAAAAAAAAAAACGZs - bHxsfGgAAAAAAAAAAAD///////8AAP///////wAA////////AAD///j///8AAP//8H///wAA///gP/// - AAD//+Af//8AAP//wB///wAA//+AD///AAD//wAH//8AAP/+AAP//wAA//4AAf//AAD//AAB//8AAP/4 - AAD//wAA//AAAH//AAD/4AAAP/8AAP/gAAAf/wAA/8AAAB//AAD/gAAAD/8AAP8AAAAH/wAA/gAAAAP/ - AAD+AAAAAf8AAPwAAAAB/wAA+AAAAAD/AADwAAAAAH8AAPAAAAAAPwAA4AAAAAA/AADgAAAAAD8AAP/8 - AAH//wAA//wAAf//AAD//AAB//8AAP/8AAH//wAA//wAAf//AAD//AAB//8AAP/8AAH//wAA//wAAf// - AAD//AAB//8AAP/8AAH//wAA//wAAf//AAD//AAB//8AAP/8AAH//wAA//wAAf//AAD//AAB//8AAP/8 - AAH//wAA//wAAf//AAD//AAB//8AAP/8AAH//wAA//4AA///AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/ - AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5+AAAAAAAAAAAAAAAAAA - BoyHAAAAAAAAAAAAAAAAAOfn7AAAAAAAAAAAAAAAAAjIzn6AAAAAAAAAAAAAAAAO5uxo7AAAAAAAAAAA - AAAAaM7ObI6AAAAAAAAAAAAADn5ubOboyAAAAAAAAAAAAH7Ozs5sbo4AAAAAAAAAAAjI5+fn7saM4AAA - AAAAAAAO7n7Ozsbs6OcAAAAAAAAAaH7O5+bn5s6MgAAAAAAABo7o5+zs7Ozm6OAAAAAAAH7I7Ozufn5u - zsfsAAAAAAjOjn6Ofs7s5+bsjnAAAAAG6Ozo7O7n5+zs5ujnAAAAaOyOjo587Ozo6I7IjIAAAGxmxsZ+ - 7o7uzsbG7O4AAAAAAAAM587OyOhgAAAAAAAAAAAABo7n5+7OYAAAAAAAAAAAAAzozuzujsAAAAAAAAAA - AAAGjufuzs5wAAAAAAAAAAAADOfOyOfowAAAAAAAAAAAAAaOfm7O7mAAAAAAAAAAAAAM7Ofs5sjAAAAA - AAAAAAAABn585+7oYAAAAAAAAAAAAAyM6Oxs58AAAAAAAAAAAAAG5+zm5+5gAAAAAAAAAAAABOx+fs7I - wAAAAAAAAAAAAAZ+Z8hs7kAAAAAAAAAAAAAMjOjm52fAAAAAAAAAAAAAAGbExsbOAAAAAAAA///////8 - f///+D////A////gH///4A///8AH//+AA///AAP//gAB//4AAP/8AAB/+AAAf/AAAD/gAAAf4AAAD8AA - AAfAAAAP/4AH//+AB///gAf//4AH//+AB///gAf//4AH//+AB///gAf//4AH//+AB///gAf//4AH///A - D/8oAAAAGAAAADAAAAABAAQAAAAAACABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAA - AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAA - AAAABgAAAAAAAAAAAAAAeOAAAAAAAAAAAAAG7IcAAAAAAAAAAAB+fujgAAAAAAAAAAbs7OyHAAAAAAAA - AGjufm7oYAAAAAAABo7OzsfOhwAAAAAAaO5+5+7s6GAAAAAG5+zs7Ozn7PYAAABo6Ojo7n6IjojgAAAM - bGzs7OyOx+wAAAAAAAfo7o7nAAAAAAAAAAaM7OyGAAAAAAAAAAbufu6MAAAAAAAAAAd+zn6GAAAAAAAA - AAzn7OznAAAAAAAAAAaOzuiGAAAAAAAAAAbn587sAAAAAAAAAAZ87m6GAAAAAAAAAAzozs6MAAAAAAAA - AAaOh+eGAAAAAAAAAABsbGxgAAAAAAAAAAAAAAAAAAAAAP///wD/7/8A/8f/AP+D/wD/Af8A/gD/APwA - fwD4AD8A8AAfAOAADwDAAAcA4AAPAP4A/wD+AP8A/gD/AP4A/wD+AP8A/gD/AP4A/wD+AP8A/gD/AP4A - /wD/Af8A////ACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA - AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAABgAA - AAAAAABoYAAAAAAABo6MAAAAAABozshgAAAABo5uboYAAABo7OfOeGAABo5+fn6OhgB2xs7O6MfHgAAA - aOfIYAAAAABuzujgAAAAAGjn6MAAAAAAzs5+cAAAAABo5+jAAAAAAG7OyOAAAAAAaI6OcAAAAAAMbGYA - AAD+/wAA/H8AAPg/AADwHwAA4A8AAMAHAACAAwAAAAEAAPAfAADwHwAA8B8AAPAfAADwHwAA8B8AAPAf - AAD4PwAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAACjaB0ApmsgAKlt - IwCrcCYArXMqALF1LACzeC4ArHYwALR6MQC4fTQAt385AMh1AADJdwQAy3gAAM17AADOfQEAy3oHAM5/ - CQDMfA0A0H4BAMt/GQC7gDcAvoI6ALmBPADRgAIA0oIEANSDBADVhQUA1ogGANaMBwDZiQYA3I0GANKE - CgDWhwkA0YIMANaMCwDZiggA2o0JANyOCQDbkgsA3pAKAN6UCwDekg0A3ZQNAM+EGgDRhhUA1YkSANiN - EgDajhcA2pISANqSHgDalh4A3ZgaAOGUCgDgkg0A4ZUOAOSWDgDhmA4A5ZgPAOicDgDklxAA45cVAOGY - EADlmRAA5ZwRAOSdFwDonRIA550YAOmfGwDpoBIA6qEUAO2iFADrpBQA7qUWAO6mGADvqBgA8KUXAPCm - GADxqRgA9KsZAPKsGgD0rBoA9a0cAPiuGgD1sBsA+bEbAPixHADOhycAzo0lAMqKKwDRjCIA0Y8lANSP - JgDTji0A05ImANiRIwDdnScA1JQpANmVKwDXmCoA25stAMGJNQDAhj0A0I84AM2VPwDTmTYA3JwyANKR - OQDSlDgA2Js6AOGeIADknS8A3qAxANyiPwDopCAA7qogAOKiLQDtqykA8asjAPOxJwD6syAA+LMkAPq1 - JwD2tSoA+rYsAPq4LgDiozEA6qUzAOepNQDpqTEA66wyAOmrNwDtqjUA6qw2AO2vNQDjpjoA6aw4AOir - PwDwrDgA67A3AO2xOQDssT8A8rIwAPazMwD2tzEA8bE2APq7NgDytDoA+Lc6APW5PAD5uToA+bw7APi7 - PQD5vD0A/L49APzAPgCxgEMAv4VAALaFSAC5h0sAvJZmALyacgC5mnYAxYlBAMOLRgDHi0QAyY1GAMaO - SgDJj0oAyZBEAMyQSgDPlEkAypFNAM6TTADNlE4A0pVHANebQwDUnUUA0JRNANaaSgDDkVUAzpZWAM2X - WwDOmVsAzZpdANGZVgDUmlcA0ppaANOcWwDQnF4A16BHANqiSADapUkA3adLAN2lTQDbo1QA1KFeANql - WwDgpkMA4KtOAO6sSwDxrUYA8rdAAPGxRQD1uUAA+r1AAPSySADirl0Ax5ljAMOYZgDFmWUAz51gAM+f - ZADBnG4AxJ1uANGeYgDQnmUA0aBjANalYwDVoWQA2KRgAN+sYwDbqWYA3aplAN2sZwDRo2sA1KdrANWl - bADZqmoA3q5qAMWhcgDNpHMAzKV1AMmmeQDUqXAA1Kp5ANuwcADhrWAA569jAOCvaQDismgA5LRoAOGy - bADitGwA+8BDALGchQCxnokAxa2OAMqwkQDPs5MA1LiXAN3AngDjwJYAAAAAAP///wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAC/YQAAvGgNALllFwC5Zx8AtWUpAMJkAADFaAAAyGsAAMxuAgDOcQYA0nYJANR5DQDFdREAz34aANd8 - EADafxMA0IAGANSDBQDThAYA1YUFANiJBwDThg8A2YoIANqNCQDcjQoA25AKAN2QCgDekQ0A35UNAN2A - FgDXjxAA2Y4UAN6DGQDWjBsA3ZEQAN6UFgDdmBgA4JMKAOCSDQDhlQ4A5ZcPAOSZDgDghhsA44geAOSW - EADjmxEA5ZoQAOScEQDnnxQA6Z0SAOWcGgDpoBIA6aEUAO2iFADtpBYA5qAZAO+oGgDwphcA8acYAPGp - GAD0qxkA86waAPSsGgD1rhwA9rAbAPawHAD4sBoA+LEcAMyAIADXhSMA0IUnAN+NKgDRkScA2pYhAN2b - IwDcmyUA05MoANWWKQDali8A2ZksANucLQDcnS4A3Z0xAN2TOwDblT8A1po7ANKYPADVmj0A154+AOaO - JADjkCoA5ZIuAOqTKgDtkysA7ZQrAOiTLQDulSwA4pIxAOmWMQDrlzUA6J02AOOaOQDgnTwA6pw5APCa - NADynj0A36AvAN6hMADdoDgA2aE/AOSgIQDioSYA7KchAO2oJgDgoCkA6agrAPewIAD5tCIA+bQnAPOx - KAD5tigA+bcvAOOmMgDjpjQA5KU0AOepNQDnrD8A6Ko4AOyvOADprj8A86A/AO+zOgDysjAA8LE3APe4 - NgD7ujEA8rY7APCzPQDytj4A9Lg6APW6PQD7vDoA+b0+AMWARADPkEUA3ZlEANmbTQDPnF8A0phUAOqe - QgDdoEEA2aJGAN2kRADep0kA3aVOANuiUADdplQA4ahGAO2qRwDooEgA4alKAOOtTQDzoUAA869EAPap - TgDsskAA77JGAOewTgDusUoA6rBMAPC1QwD0ukUA9rxGAPm9QQDwskkA8rVNAPe+SAD1uk8A+L5IAPWp - UADyqlQA6rRRAO22UgDuuFQA47BbAPCyUQD0vFAA8r5WAPC2XAD4sV0AyZ5nAMSlfwDfr3MA2K19AOWt - YgDltmcA67NgAOm5YQDsu2oA77ptAPW+awDwvm0A+bhpAOizcQDiu34A7Lt9APS9cAD7wEIA+8FGAPnA - SAD4wk4A+MNZAPnEWgD6w2AA/ctkAMOnhQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAABta58AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbc2/a8oAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAKpvpabIawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWcqgdHaa/awAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAG2JLR8dIM6tXgAAAAAAAAAAAAAAAAAAAAAAAAAAAABlsT0xIx8dLNJzngAAAAAA - AAAAAAAAAAAAAAAAAAAAUq58PDMxIyMdWdVr4gAAAAAAAAAAAAAAAAAAAAAAAJypj0REMzMxJSMdochr - AAAAAAAAAAAAAAAAAAAAAADLcN9KRURERDMxJSMjw69lAAAAAAAAAAAAAAAAAAAAAFDhuH9KSkQzRDMx - JSMq0o1fAAAAAAAAAAAAAAAAAAAY4Nu4gUdHQ0VEM0QlJSNU2XPJAAAAAAAAAAAAAAAAT8TcuNuSTUpK - R0REMzsxJSNd1WsAAAAAAAAAAAAAAJtw3bi425hNTUpKSkRERDMzMSOryGsAAAAAAAAAAADMUd2Vl7i4 - mIFNTU1KSkRERDMzMSXQr2wAAAAAAAAAABfBsJOXmLi4g01NTU1KSkRERDk5MS3ZdJ0AAAAAAAAMz7S0 - urrFxbiETYFNTU1KSo+xlbq6tMfTa9gAAAAAAJoGBgYGCQkL35FLTU2BTU1KthkZKys1NmSgAAAAAAAA - AAAAAAAAAAnfl0pLTU1NgU29FgAAAAAAAAAAAAAAAAAAAAAAAAAABt2VgkpNgU1NTdwVAAAAAAAAAAAA - AAAAAAAAAAAAAAAGxrGPSkpKTU2B2xQAAAAAAAAAAAAAAAAAAAAAAAAAAAbCi5BDREpLTU3cEwAAAAAA - AAAAAAAAAAAAAAAAAAAABMGIi3xAR0pLTdwTAAAAAAAAAAAAAAAAAAAAAAAAAAADsoWKjzlEQ0pL3BEA - AAAAAAAAAAAAAAAAAAAAAAAAAAOrhYWFOztEREq7EQAAAAAAAAAAAAAAAAAAAAAAAAAAA6tdXIV5OTtE - Q7YLAAAAAAAAAAAAAAAAAAAAAAAAAAABpVxcdn0nMztEtgkAAAAAAAAAAAAAAAAAAAAAAAAAAAGhWFpd - di8nMzu1CQAAAAAAAAAAAAAAAAAAAAAAAAAAAaVTWFxdViUnJ7EGAAAAAAAAAAAAAAAAAAAAAAAAAAAB - YFNYWFhcKSQnsAYAAAAAAAAAAAAAAAAAAAAAAAAAAA/XYWBjoaF3VFZWDQAAAAAAAAAAAAAAAAAAAAAA - AAAAAA8BAQEBAQEEBA4AAAAAAAAAAAAAAAD///////x////4P///8D///+Af///gD///wAf//4AD//8A - A//+AAH//gAA//wAAH/4AAB/8AAAP+AAAB/gAAAPwAAAB8AAAA//gAf//4AH//+AB///gAf//4AH//+A - B///gAf//4AH//+AB///gAf//4AH//+AB///gAf//8AP/ygAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAA - AAAAAAAAAAEAAAABAAAAAAAApWYWAKhpGQCqbBsAqm0dAKxuHgCucCEAsHMjALJ2JgC2eioAuH4uALyC - MgC9gzQAvoU1AN+YEwDklw8A5ZkQAOmdEgDooBIA6aEUAO2hFQDtpRYA8KYXAPGqFwDxpxgA8qoZAPSr - GgD0rRoA86wcAPauHAD3sBoA97AcAPmwGgD4sRwAwIY3AMGJOQDDizwAxIs8AMWNPgDjnSUA5J4nAN6g - MADnoyAA5aAnAOSjKQDgoi8A7awpAPCsIwD6syIA+rcrAOKlMwDqqzIA6Kk3AOSpOgDpqz0A+rozAPq6 - NADytjsA97s+APe8PAD5uzgA36VCAN+sVADgqUQA5axHAOmuQADkrUoA6bNKAO63TgDws0EA9btDAPS6 - RQD6vkEA9LxMAPm+SADhrlUA5LJZAPK7UAD7wEMA+8NOAPbBUAD6xFIA+8VUAPDDaQD0xmwA9shtAPjK - bgD6zW8A8cmCAPPMhAD0zoYA99CHAPDPmQDw0JkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmAAAAAAAA - AAAAAAAAAAAAAAAAAAAAACZcJgAAAAAAAAAAAAAAAAAAAAAAAAAAJjYnXSYAAAAAAAAAAAAAAAAAAAAA - AAAiRREPJ10mAAAAAAAAAAAAAAAAAAAAAAtHFhYQECddJgAAAAAAAAAAAAAAAAAACkobGxYRERAnXSYA - AAAAAAAAAAAAAAAJUjAbGxgbFhEQKF0mAAAAAAAAAAAAAAhSTjEgGxsbFhYRECtdJgAAAAAAAAAABjpI - SDggICAbGBgWERAnXSYAAAAAAAAFOVBSUk84IDAgGxtUW1paWlwmAAAAAAAABQUGBgg8IDAgMBtWCwsL - IiIAAAAAAAAAAAAAAAY6HiAgMCBXCgAAAAAAAAAAAAAAAAAAAAVHGx4wICBXCgAAAAAAAAAAAAAAAAAA - AAVJGxseMCBXCQAAAAAAAAAAAAAAAAAAAAVJLxsbHjBXCAAAAAAAAAAAAAAAAAAAAAFELhYcGx5XCAAA - AAAAAAAAAAAAAAAAAAFDMxMVGxtXBgAAAAAAAAAAAAAAAAAAAAFANCsWFhxVBgAAAAAAAAAAAAAAAAAA - AAE/MisOEBZVBQAAAAAAAAAAAAAAAAAAAAE9KS0OEBNUAwAAAAAAAAAAAAAAAAAAAAE+S0xAND9TAwAA - AAAAAAAAAAAAAAAAAAABAQEBAwEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP/v - /wD/x/8A/4P/AP8B/wD+AP8A/AB/APgAPwDwAB8A4AAPAMAABwDgAA8A/gD/AP4A/wD+AP8A/gD/AP4A - /wD+AP8A/gD/AP4A/wD+AP8A/gD/AP8B/wD///8AKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAA - AAAAAQAAAAEAAAAAAAClZhYAsnYmALN4KQC4fi8A1Y0XANWOGADXkBkA2pUbANuVHADclhwA3poeAOCc - HwDgmyAA46EiAOaiIwDmpiMA56cnAOilIwDppiUA66omAO2rJwDuricA46YsAOyrKADurikA7q4sAPCv - KQDvsS4A8LAqAO2vMQDkpjgA5q8+AOqwOADwszIA4qtBAOi0TwDyvEoA7LlSAOSyXADnt18Aw5ljAMui - bQDqumEA5LhoAOa7cADpv3MA78FlAPDFdgDyyXkA88x6APXNegD20IAA6MeQAOnIkQDpyZcAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP///wAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAzcCAAAAAAAAAAAAAAAAAycFNQIAAAAA - AAAAAAAAAysLCAY1BAAAAAAAAAAAAy8SDg0IBjUEAAAAAAAAAzMaFBIODQgINQQAAAAAAzQlIhQaEg4f - Li01BAAAKQEBAQEbGhQUMAQEBAQqAAAAAAABGxsbFDMEAAAAAAAAAAAAARwbGxszBAAAAAAAAAAAAAEe - FBsbMwQAAAAAAAAAAAABIRQcHDMEAAAAAAAAAAAAASARFBQzBAAAAAAAAAAAAAEjFw4WMwQAAAAAAAAA - AAABLCgkJjMDAAAAAAAAAAAAAAEBAQEBAAAAAAAA/v8AAPx/AAD4PwAA8B8AAOAPAADABwAAgAMAAAAB - AADwHwAA8B8AAPAfAADwHwAA8B8AAPAfAADwHwAA+D8AACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAABgAAAAgAAAAGAAAAAwAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAFgAA - ABsAAAAWAAAACwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAA - AAwAAAAfAAAAMwAAADwAAAAyAAAAHQAAAAsAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAACAAAACSccDyHPllLiypFQ4M2UUesdFQtZAAAANQAAABoAAAAJAAAAAgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAEAAAAHAAAAF8aOTb/RlU3z0pVH/82UU/K/iUvcAAAAUAAAADAAAAAWAAAABgAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - Q//6tiz/+K4a//auG//1rRr/9Ksa//KpGf/wpxj/76MX/+2hFP/pnxP/6JwS/+WYD//hlQ//35IN/92O - Cv/aiwn/14gH/9SEBf/ViRP/4rJo/8+cXfS4hEjVAAAATQAAAC0AAAAUAAAABgAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAASjl8jgq91LPfjpjr/+Ls///q+ - Qf/7v0H/+79B//vAQ//7vDb/+bEc//iwHP/2rhz/9a0b//SrGv/yqhn/8agY/++kF//toRT/6p8T/+ic - Ev/lmRD/45YO/9+TDf/djwv/2owI/9eJB//UhQT/2JEj/+Gya/zRmVf5mm48sQAAAEYAAAAnAAAAEAAA - AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAA5zTBtTrXIp+NOY - NPzytz3/+bw+//q9QP/6vkH/+79B//u/Qf/7vj7/+rMg//mxHP/4sBz/9q4c//WsG//0rBr/86oZ//Go - GP/vpBf/7aEV/+qfE//onRH/5ZkQ/+OWD//gkw7/3Y8J/9uMCP/XiQf/1YQG/9uaNv/armz30phU+nJR - LI0AAABAAAAAIgAAAAwAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACzom - DSyobyXxv4Ut9e2wOv/1ujz/+Ls9//m8QP/6vUD/+r5B//u/Qf/7v0L/+rUn//mxG//5sR3/+LAc//au - HP/1rRv/9Kwa//OqGf/xqBj/76QX/+6iFf/roBP/6JwS/+aZEP/klg//4JMN/96OC//bjQn/2YkI/9WF - Bv/fpkz/06Zp8s2TUPY/LRhtAAAAOQAAABwAAAAJAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAEGRAFFKRqI9mwdibx56o3//G0Ov/ztjv/9bo8//a7Pv/5vED/+r1A//q+Qf/7wEP/+rgu//mx - G//5sh3/+bId//ixHP/2sBz/9a0b//SrGv/yqhn/8agY//CmF//uoxX/6qAT/+mdEf/mmRD/5JYP/+CT - Dv/ejwr/3IwK/9mJB//Whwn/4q5d/9GiZ+7Hj0znEg0HSAAAACcAAAAPAAAAAwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAGoGcgpaluIvLdoDP/6q03/++yOf/xtDr/87Y7//S4PP/2uz3/+bw+//m9 - QP/6vkL/+rs3//myHP/5sh3/+bId//myHf/5sR3/+LAc//WtHP/0rRv/9KsZ//KpGP/wphf/7qMV/+ug - E//onhL/55oR/+SXD//hlA3/3pAL/9yNCf/Zigf/2I0S/+S0aP/ToGPwvolJxAAAACcAAAARAAAABQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACiaB9ppmsg9dKVL//nqjX/67A3/+6yOP/wtDr/87Y7//W4 - PP/4uz3/+b0+//m9QP/5vUD/+rw7//myHv/5sh3/+bId//myHf/5sh3/+LEd//iwHP/2rhv/9awb//Or - Gv/xqBn/8KYY/+6jFf/roBP/6p4Q/+icDv/llw3/4ZQK/9+QCf/cjQb/2okF/9mRHf/ismj40ZVQ9MGK - SogAAAALAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmaR7PyYgn+uSdL//loDD/56Iy/+qk - M//rpjT/7qk3//CrOP/xrTn/8a05//CxOP/4vD7/+bxA//izJP/4sRz/+bId//myHf/5sh3/+bId//mx - Hf/4sBz/9q4c//WsG//zqxr/8qkY//GrI//xsDr/8bFF//W0Sf/2s0n/9LJI//OwSP/yr0f/8a1G//Cs - R//urEv/5ahV6dGVT+AAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkaR2XpGoe/6Vq - H/+mayD/pmwh/6hsIv+pbSP/qW4k/6twJf+scCf/rXIn/65zKf/6vDz/+LxA//a1Kv/2sBr/+bEd//my - Hf/5sh3/+bId//myHf/5sR3/+LAc//auHP/1rRv/9Ksa//a3Ov/EiED/xYlB/8aKQ//Hi0T/yY1G/8qO - R//Lj0n/zJBK/82RS//Ok0z/0JRN/9GVTpcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK1yJ//5uzv/9rs+//a3 - Mf/1rhr/9rAc//iyHf/5sh3/+bId//myHf/5sh3/+bEd//iwHP/2rhz/9a0b//m5Ov/Chj//AAAAKwAA - AA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKtw - Jf/4tzr/9Lg9//W3OP/0rRz/9a4b//awHP/4sh3/+bId//myHf/5sh3/+bId//mxHf/4sBz/9q4c//q8 - O//AhT3/AAAAKwAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAKpvJP/0tTn/8rU8//O2Pf/zsSf/86wZ//WuG//2sBz/+LEd//myHf/5sh3/+bId//my - Hf/5sh3/+LEc//u9PP+/gzv/AAAAKwAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKluI//yszf/77M6//K1Pf/ysjD/8aoY//SsGv/1rhz/9rAc//ix - Hf/5sh3/+bId//myHf/5sh3/+bId//y+Pf+9gTn/AAAAKwAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKdtIv/wsDb/7bA5//CzO//xszj/8Kkb//Gq - Gf/yqxr/9a4b//awHP/4sR3/+bId//myHf/5sh3/+bId//y/Pv+7gDf/AAAAKwAAAA4AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKZrIf/tqzT/6qw3/+2w - OP/vsjr/7qog/+6nFf/xqhn/86wa//StG//2sBz/+LEd//myHf/5sh3/+bId//zAPv+5fjX/AAAAKwAA - AA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKZq - IP/pqTL/56k0/+qsN//tsDn/7asp/+2jFP/vqBj/8aoZ//KsGv/1rhv/9rAc//ixHP/5sh3/+bId//zA - Pv+4fDT/AAAAKwAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAKRqHv/mpC//5KYz/+epNP/pqzf/66wy/+mhFf/rpBT/7qcY//CqGf/zrBr/9K0b//Ww - HP/2sRz/+LId//zAPv+2ezL/AAAAKwAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKRoHf/koi//4KIx/+SmMv/nqDb/6aw4/+ikIP/ooBL/7aQV/+6n - F//xqRn/8qwa//StG//1rhz/9rAc//zAPv+1eTD/AAAAKwAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKNoHf/goC3/36Aw/+CiMP/kpDP/56k2/+en - Lv/mnRL/6KAT/+ujFf/uphj/8KkY//KrGv/0rRv/9a4c//y+Pf+zeC7/AAAAKwAAAA4AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKNoHf/enSz/3J0v/96f - L//goTD/5KYy/+anM//knRf/5Z0R/+igE//qoxX/7qYX//CpGP/yqxn/86wb//q9Pf+ydi3/AAAAKwAA - AA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKNo - Hf/dnCr/25wt/9ydLv/eny//4KIw/+OmM//hniD/4ZgO/+WdEv/ooBP/6qIU/+6mF//wqBj/8qsa//m9 - O/+wdCv/AAAAKwAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAKNoHf/bmCj/2Zgs/9qaLf/bnC7/3p8v/+CiMf/goCn/3pUO/+GZD//lnRL/6KAT/+qi - Ff/uphf/8KgY//a5O/+ucyn/AAAAKwAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKNoHf/XlSf/1ZYq/9mYLP/ami3/25wu/92eL//goTH/3Zga/96U - C//hmBD/5ZwS/+efE//qohX/7aYX//W4Ov+tcij/AAAAKwAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKNoHf/WlCb/1JQo/9WVKf/XmCr/2pot/9uc - Lv/enzH/3Z0n/9uSC//elQ3/4ZgQ/+ScEf/nnxP/6qIU//K1OP+rcCb/AAAAJwAAAA0AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKNoHf/TkiX/0pIo/9OU - KP/VlSj/15cq/9qaLf/bnC//3Z4v/9qSEv/ajwn/3ZUO/+CXD//knBH/558S//GyNv+qbyX/AAAAHwAA - AAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKNo - Hf/SjyT/0I8m/9KSJ//TlCj/1JUp/9eXKv/ZmS3/250w/9qWHv/WjAf/25IL/92UDf/hmBD/5JwR/+2v - Nf+pbiP/AAAAEwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAKNoHf/RjCL/zY0l/8+OJv/RkCf/05Mo/9SUKf/Wlyn/2pkt/9qaLP/WjQ//1owI/9qP - Cv/dlA7/5aYz/+qsNP+obCL/AAAACAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKNoHZ6jaB3/1J1G/9SeRf/XoEf/2qJI/9qlSf/bpkn/3adL/+Cr - Tv/gpkP/25wr/92eLP/goi//46Uv/6ZqIP+jaR+gAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACjaB2eo2gd/6NoHf+jaB3/o2gd/6No - Hf+jaB3/o2gd/6NoHf+jaB3/o2gd/6NoHf+jaB7/pWke/6RpHp4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///Af//8AAP// - 8B///wAA///gD///AAD//8AH//8AAP//gAP//wAA//8AAf//AAD//wAB//8AAP/+AAD//wAA//wAAH// - AAD/+AAAP/8AAP/wAAAf/wAA//AAAB//AAD/4AAAD/8AAP/AAAAH/wAA/4AAAAP/AAD/AAAAAf8AAP8A - AAAB/wAA/gAAAAD/AAD8AAAAAH8AAPgAAAAAPwAA8AAAAAA/AADwAAAAAB8AAOAAAAAADwAA4AAAAAAP - AADgAAAAAA8AAOAAAAAADwAA4AAAAAAPAADgAAAAAD8AAP/8AAB//wAA//wAAH//AAD//AAAf/8AAP/8 - AAB//wAA//wAAH//AAD//AAAf/8AAP/8AAB//wAA//wAAH//AAD//AAAf/8AAP/8AAB//wAA//wAAH// - AAD//AAAf/8AAP/8AAB//wAA//wAAH//AAD//AAAf/8AAP/8AAB//wAA//wAAH//AAD//AAAf/8AAP/8 - AAD//wAA//4AA///AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJCKQwWOiQLMQAA - ADAAAAAfAAAACgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACyHwmPemQ - KPPulSz/w3YbvwAAADgAAAAcAAAABwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAatq - Hh3qkirx5a1i//KqVP/vly7/klgQiAAAADMAAAAXAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AABOMA0J5I4l1eidNv/dpU7/26JQ//iyXv/ulCz+SisDXQAAAC0AAAARAAAAAwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAABNyJIaPqmzb64ahG/9OEBv/QgAb/3aZU//WpUP/okCj4EgoARAAAACcAAAANAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAALOfhxj6JUt+eesP//dkRD/2IkH/9SDBf/Thg//5bZn//OhQP/ZhSHgAAAAPQAA - ACEAAAAKAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAACsWgUMeONJPjvskb/5Zwa/+CSDf/djgr/2IkH/9WEBf/WjBv/77pt//Ca - NP+6cRiwAAAAOAAAABsAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAY5RDBfdhRrt869E/+2oJv/onRL/5ZgQ/+GUDf/djgv/2ooI/9WF - Bv/ali//+Lhp/++XLv+IUQyAAAAAMgAAABUAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1YAVy+2pRfvzsjD/76UX/+yhFP/onRP/5ZkQ/+GU - Dv/dkAr/2osI/9aGBv/doEH/+bJd/+2TK/4rGQBQAAAALAAAABAAAAACAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMl2D5TjmTb7+sVa//WsHP/yqRj/8KYX/+2i - FP/pnhL/5pkR/+KVDv/dkQv/24sI/9iJCv/jsFv/9qlO/+SOJfQAAABAAAAAJgAAAA0AAAACAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK7bAtd14Qg+/3LZP/6vkH/97Ag//Sr - Gf/yqhn/8KYX/+2iFf/qnhP/5psR/+KWDv/fkQv/24wJ/9mOFP/su2r/86A//9WCHdgAAAA8AAAAIAAA - AAkAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABl1EBKc56Evb6w2D/+8FG//u/ - Q//5tCf/9q0Z//SsGv/yqRr/8KYX/+6iFf/qnxP/55sR/+KWD//ekQz/24wJ/9uVIf/0vXD/8Jo0/6xo - EqMAAAA3AAAAGgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVIrAA7Hcwjm8LJR//rB - S//7v0H/+8BD//u6Mf/4sBr/9q4c//WsG//zqhn/8acY/+6jFf/qnxP/55sR/+OXDv/fkg3/240J/96e - Mv/6uGn/7ZUs/2Y+BWoAAAAxAAAAFQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFv2sHv+Cd - PP74wk7/+r1A//q+Qf/7wEL/+7w6//mxHf/5sRz/964c//StGv/0qxr/8agY/+6iFv/rnxP/6JwR/+SW - EP/gkg3/3I0J/+KoSv/4sFz/6pIo/DokA1MAAAArAAAAEAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAA7Zj - CYbQhCT7879V//S4O//2uz7/+bxA//q+Qv/7vj//+bQi//mxG//5sh3/968c//WtG//zqhn/8agY/++l - Fv/roBP/6JwR/+WXD//gkg3/3pAP/+m5Yf/2qU7/4Ioi7QAAAD8AAAAlAAAADAAAAAIAAAAAAAAAAAAA - AACtWQRFxXMO++22Uv/vszr/8rY7//W5PP/4vD3/+r5B//q+Qf/5tij/+bEb//myHf/5sR3/97Ac//Wu - G//0qxr/8akZ/++kFv/roRT/6J0Q/+WYDf/gkwr/3pQW//C+bf/ynj3/z38axgAAACkAAAASAAAAAwAA - AAAAAAAAvWoGQrpiA/Trs2D/6rBL/e2ySv3xtEz987dN/fW6Tv30vE/9+L1A//m3L//4sRv/+bId//my - Hf/5sh3/+LAc//atHP/zqxv/87Iw//G1Q/7ws0f987VL/fGySv3vsEn98LZc/vW+a/7tlCv/4I0mmAAA - AAkAAAACAAAAAAAAAACtTgBIsVQCvLNXAP+xVQD/tFcA/7dYAP+5WwD/vF4A/71fAP/5wlLz97g2//aw - G//5sR3/+bId//myHf/5sh3/+LAc//auHP/3vEb/13wQ/9p/E//dgBb/3oMZ/+CGG//jiB7/5o4k/+eO - ItrnjiVwAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAulwA//jA - UfL1uTr/9K8e//awG//5sh3/+bId//myHf/5sh3/+LAd//i+SP/UeQ3/AAAALgAAAA0AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAC3WgD/87xP8vK2Pv/zsSj/9KwZ//awHP/4sR3/+bId//myHf/5sh3/+cBI/9J2Cf8AAAAuAAAADQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAALRXAP/xuU3y8LM9//KyMv/xqhj/9K0b//avHP/4sh3/+bId//myHf/6wUj/znEG/wAA - AC4AAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAsVQA/+61S/Lsrzn/8LE3/++oGv/xqhj/9K0a//awHP/4sR3/+bId//rB - SP/MbgL/AAAALgAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwUgD/6bBI8ueqNv/srzj/7Kch/+2lFP/wqhn/9K0b//av - HP/4shz/+sFI/8hrAP8AAAAuAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK9PAP/mrEXy46Yy/+iqOP/pqCv/6aET/+2m - Fv/xqRn/86wa//SuHP/5wEj/xWgA/wAAAC4AAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArUwA/+KpRPLfoTD/5KU0/+ep - Nf/moBn/6aAS/+2lF//wqRj/86wa//e+SP/CZAD/AAAALgAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqSwD/4KZC8tyd - L//foC//46Y0/+SgIf/kmw//6KEU/+ykFv/wqRj/9bxH/79hAP8AAAAuAAAADQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKdJ - AP/do0Dy2Zot/9ydLv/fojL/4KAp/9+WD//knBH/6KAT/+2lFv/0ukX/vF8A/wAAAC4AAAANAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAp0gA/9mfPvLWliv/2Zos/9ydL//eoDD/3ZgY/9+VDP/kmxL/558U//C2Q/+5XAD/AAAALgAA - AA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACnSAD/2J498tOTKP/Wlin/2Zks/9ydMf/cmyX/25AK/9+WDv/jmxH/7LJA/7dY - AP8AAAAsAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKdIAP/Wmjr90ZEn/9OTKP/Vlin/2Zkt/9ucLf/XjxD/2Y8J/9+V - Dv/prj//tFUA/wAAAB4AAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAp0gA1tWcRK/SmDz/1Zo9/9eePv/ZoT//3aRE/92g - OP/alyH/3Zsj/+KhJv+zVgHoAAAACwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACnSABLp0gA1qdIAP+nSAD/p0gA/6dI - AP+nSQD/qUkA/6pLAP+sTgD/sFIA4KJGAE0AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP/4D///8Af//+AH///gA///wAH//4AA//8AAP/+AAB//gAAP/wAAB/4AAAP8AAAD+AA - AAfgAAADwAAAAcAAAAGAAAABgAAAA/+AAf//gAH//4AB//+AAf//gAH//4AB//+AAf//gAH//4AB//+A - Af//gAH//4AB//+AAf//gAP/KAAAABgAAAAwAAAAAQAgAAAAAABgCQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAADGjj9nxo4//8aOP2cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMSMPGfFjD7/8M+Z/8aO - P//Gjj9nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAwok5Z8OKO//pqz3/450m//DQmf/Gjj//xo4/ZwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC+hTZnwIY3//Cz - Qf/onBH/5JcP/+OdJf/w0Jn/xY4+/8aOP2cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAALuBMme8gzP/9LpF/++mFv/soRT/6JwS/+WYEP/jnyb/8dCZ/8WN - Pv/Gjj9nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuH0tZ7l/ - L//5vkj/9Kwa//KpGf/wphf/7aEV/+meEv/lmRD/5J4n//DQmv/FjT3/xY0/ZwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0eClntnoq//vFU//6syL/964a//WsG//yqhr/8acY/+2i - Ff/qnhP/5ZkQ/+SfJ//x0Jr/xY09/8WOPmcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALF0 - JGeydib/+8ZU//vAQ//6tyv/+bAa//evHP/1rRv/86sZ//GnGP/tohb/6p8T/+aaEP/loCf/8dGZ/8SM - Pf/FjT5nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArXAgZ69xIv/3uz7/+r1A//q/Q//6ujP/+bEb//my - Hf/3sBz/9a0b//OqGv/xpxj/7qMV/+qfE//nmhD/5Z8n//HQmv/Dizz/xY09ZwAAAAAAAAAAAAAAAAAA - AAAAAAAAq24e//K2O//2wVD/+sRS//vFVf/7w07/+ro0//myHf/5sh3/+LAc//WuHP/0qxr/9shs//fQ - h//0zob/88yE//HJgv/x0Zj/xIs8/wAAAAAAAAAAAAAAAAAAAAAAAAAAqWscdaptHf+sbx7/rnAg/69y - Iv+wcyP/+bs4//mxHP/5sh3/+bId//mxHf/2rhz/+Mpu/7yCMv+9gzT/voU1/8CGN//AiDj/wok6dQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACucCH/97w8//ewGv/5sh3/+bId//my - Hf/5sRz/+cxv/7l/L/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACsbh7/9btD//WtGf/3sRz/+bId//myHf/5sh3/+81v/7h8Lf8AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqbB3/9LxM//Os - HP/1rRr/97Ed//myHf/5sh3/+85v/7Z6Kv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACpahr/8rtQ//CsI//xqhf/9K4b//exHf/5sh3/+85v/7N3 - J/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACoaRn/7rdO/+2sKf/uphX/8qsa//StG//3sBz/+85v/7F1Jf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmZxf/6bNK/+qrMv/qohX/7qYW//Kr - Gv/0rRv/+c1v/69yIv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAClZhb/5axH/+ipN//noyD/6aAR/+2lF//xqhn/98pu/61wIP8AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAClZhb/4KlE/+Kl - M//koyn/5JsQ/+igFP/tpRb/9sht/6ttHv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAClZhb/36VC/96gMP/goi//35gT/+SbEP/ooBP/9MZs/6ps - G/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAClZhb/36xU/+GuVf/ksln/5K1K/+SpOv/prkD/8MNp/6hqGv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAClZhZ1pWYW/6VmFv+lZhb/pWYW/6Vm - Fv+lZhb/pmcX/6doGHUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD/x/8A/4P/AP8B/wD+AP8A/AB/APgAPwDwAB8A4AAPAMAA - BwDAAAcAwAAHAP4A/wD+AP8A/gD/AP4A/wD+AP8A/gD/AP4A/wD+AP8A/gD/AP4A/wD+AP8A////ACgA - AAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACxcSJds3gp/76DM18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACycSJds3gp/+nJl/+ydib/voMzXwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACxcSJds3gp/+SyXP/VjRf/6MeQ/7J2Jv++gzNfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACxciJds3gp/+q6Yf/emh7/2pUb/9WOGP/ox5H/uH4v/76DNF0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACycyNfs3gp/+/BZf/opSP/46Ei/+CbIP/blRz/1Y8Z/+jHkf+4fi//voM0XQAAAAAAAAAAAAAAAAAA - AACxciJes3gp//TNe//uriz/66om/+mmJf/moiP/4Jwf/9yWHP/XkBn/6ceR/7h+L/++gzRdAAAAAAAA - AACwcSJes3gp//bQgP/yvEr/8LMy/+6uJ//sqyj/6acm/+aiI//kpjj/6b9z/+a7cP/pyJH/uH4v/76D - NF0AAAAApWYWqqVmFv+lZhb/pWYW/6VmFv/wryj/764p/+yrKP/qpyX/8MV2/7h+L/+4fi//uH4v/7h+ - L/+xdCWqAAAAAAAAAAAAAAAAAAAAAAAAAAClZhb/8LAr//CwKf/vryr/7asn//LJef+4fi//AAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApWYW/++xLv/wryn/8LAq//CvKv/0zHr/uH4v/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKVmFv/trzH/7q4n//CwKv/wsCr/9s17/7h+ - L/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAClZhb/6rA4/+urJv/urin/768q//bO - e/+4fi//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApWYW/+avPv/npyf/66om/+6u - KP/2z3r/uH4v/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKVmFv/iq0H/46Ys/+am - I//rqyf/9M16/7h+L/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAClZhb/5Lho/+e3 - X//otE//7LlS//PMev+4fi//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu4Eyd6Vm - Fv+lZhb/pWYW/6VmFv+lZhb/wIc5dwAAAAAAAAAAAAAAAAAAAAAAAAAA/H8AAPg/AADwHwAA4A8AAMAH - AACAAwAAAAEAAAABAADwHwAA8B8AAPAfAADwHwAA8B8AAPAfAADwHwAA8B8AAA== - - \ No newline at end of file diff --git a/SCrawler/Download/ActiveDownloadingProgress.vb b/SCrawler/Download/ActiveDownloadingProgress.vb index b8dd0c8..48013b0 100644 --- a/SCrawler/Download/ActiveDownloadingProgress.vb +++ b/SCrawler/Download/ActiveDownloadingProgress.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -11,7 +11,7 @@ Imports PersonalUtilities.Forms Namespace DownloadObjects Friend Class ActiveDownloadingProgress Private Const MinWidth As Integer = 450 - Private MyView As FormsView + Private MyView As FormView Private Opened As Boolean = False Friend ReadOnly Property ReadyToOpen As Boolean Get @@ -27,16 +27,19 @@ Namespace DownloadObjects Downloader_Reconfigured() End Sub Private Sub ActiveDownloadingProgress_Load(sender As Object, e As EventArgs) Handles Me.Load - MyView = New FormsView(Me) - MyView.ImportFromXML(Settings.Design) - MyView.SetMeSize() + MyView = New FormView(Me) + MyView.Import(Settings.Design) + MyView.SetFormSize() Opened = True End Sub Private Sub ActiveDownloadingProgress_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing - MyView.ExportToXML(Settings.Design) + MyView.Export(Settings.Design) e.Cancel = True Hide() End Sub + Private Sub ActiveDownloadingProgress_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed + MyView.DisposeIfReady() + End Sub Private Sub Downloader_Reconfigured() Const RowHeight% = 30 Dim a As Action = Sub() diff --git a/SCrawler/Download/AutoDownloaderEditorForm.resx b/SCrawler/Download/AutoDownloaderEditorForm.resx deleted file mode 100644 index d121f4a..0000000 --- a/SCrawler/Download/AutoDownloaderEditorForm.resx +++ /dev/null @@ -1,742 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - False - - - - - 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 - AAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go - tbbB43rK5xSAQq1VYFtmeQBoqZTSreVZvgTknM8yyyjA/qodsDF9gspD2Bj6B+DH+NqzhQQAG+POMnSX - AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC - - - - False - - - False - - - 17, 17 - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6 - JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACOElE - QVQ4T2P4//8/QczOJyyqHpzfiE0OQwAZC8iqszAzs7CJ69o4BR768V/W2jcGXQ0KB4aFNS3dDQtnrbCb - ePCK48wTN1wXXXzge/jXf/clV55zC4hIIatF0cjIyMikElzc57z0wX+XHd/+2+//99/ywP//xlu//tdb - +eK/4Zp3/1WTOhYzARViNUAluKjTdf37/0ZTTn9TbdhwXblhwwW1/qOP1Ja9+K8w+95/6cm3/6v2Xvkv - qKjniGGAoIqRpW3/4e8S9uGdzFz82gwMDFxAzCxm4ZegtuLDf+VJ1/8rZM25IqLvnM/CximCYYCic1QN - v7x2JIwPwyrJ3XNUylddE9G2TWNmZOBDl4czmJiZMSRBmFdSyYyJgUEQmxwIYxWEYXZBCUls4sgYq6CA - prWNbtG8nXKeaVPR5XiVjSxEzf0yYXy4BBMLO6eQjoOXZvrkbbazrv53Xf/2v4CSbjBMXkhBl1/CMyNZ - qWnvGy5pNQ+YONwAfjXzAOupl/47LLr333L50/96q9/8l23YdES6cO5KuYqVW+R7Tj6SnfP0v4hryjyY - HhQDmFjYeHVKFp7WX/Xuv9Kq9/+Vd/z7r7rv/3+l7f//y676DEwDN/9L+BVvYkKLCTgDhNkkVUyVlr74 - qbbz73/VOTc/qsy89kWx+9h7qbQpJwS1bbOAscGGrB6EUTggLOqf16C55ft/HlnNAFZOXgVWdi4FRgYG - VnR1MIwhwMTCyqEQ37qEmZVDFF0OE/9nAACtFF4Ey6OP+wAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6 - JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACOElE - QVQ4T2P4//8/QczOJyyqHpzfiE0OQwAZC8iqszAzs7CJ69o4BR768V/W2jcGXQ0KB4aFNS3dDQtnrbCb - ePCK48wTN1wXXXzge/jXf/clV55zC4hIIatF0cjIyMikElzc57z0wX+XHd/+2+//99/ywP//xlu//tdb - +eK/4Zp3/1WTOhYzARViNUAluKjTdf37/0ZTTn9TbdhwXblhwwW1/qOP1Ja9+K8w+95/6cm3/6v2Xvkv - qKjniGGAoIqRpW3/4e8S9uGdzFz82gwMDFxAzCxm4ZegtuLDf+VJ1/8rZM25IqLvnM/CximCYYCic1QN - v7x2JIwPwyrJ3XNUylddE9G2TWNmZOBDl4czmJiZMSRBmFdSyYyJgUEQmxwIYxWEYXZBCUls4sgYq6CA - prWNbtG8nXKeaVPR5XiVjSxEzf0yYXy4BBMLO6eQjoOXZvrkbbazrv53Xf/2v4CSbjBMXkhBl1/CMyNZ - qWnvGy5pNQ+YONwAfjXzAOupl/47LLr333L50/96q9/8l23YdES6cO5KuYqVW+R7Tj6SnfP0v4hryjyY - HhQDmFjYeHVKFp7WX/Xuv9Kq9/+Vd/z7r7rv/3+l7f//y676DEwDN/9L+BVvYkKLCTgDhNkkVUyVlr74 - qbbz73/VOTc/qsy89kWx+9h7qbQpJwS1bbOAscGGrB6EUTggLOqf16C55ft/HlnNAFZOXgVWdi4FRgYG - VnR1MIwhwMTCyqEQ37qEmZVDFF0OE/9nAACtFF4Ey6OP+wAAAABJRU5ErkJggg== - - - - False - - - Show a simple notification instead of a user notification. -This means that if any user data has been downloaded with the plan, a simple notification will be shown with the number of users downloaded. -The 'Image' and 'User icon' parameters will be ignored. - - - - AAABAAwAMDAQAAEABABoBgAAxgAAACAgEAABAAQA6AIAAC4HAAAYGBAAAQAEAOgBAAAWCgAAEBAQAAEA - BAAoAQAA/gsAADAwAAABAAgAqA4AACYNAAAgIAAAAQAIAKgIAADOGwAAGBgAAAEACADIBgAAdiQAABAQ - AAABAAgAaAUAAD4rAAAwMAAAAQAgAKglAACmMAAAICAAAAEAIACoEAAATlYAABgYAAABACAAiAkAAPZm - AAAQEAAAAQAgAGgEAAB+cAAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP// - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjsjgAAAAAAAAAAAA - AAAAAAAAAAAAAAAIbOh4AAAAAAAAAAAAAAAAAAAAAAAAAAAH5mfsgAAAAAAAAAAAAAAAAAAAAAAAAAB+ - xs54YAAAAAAAAAAAAAAAAAAAAAAAAAfsbmxo5wAAAAAAAAAAAAAAAAAAAAAAAIbObObOeMAAAAAAAAAA - AAAAAAAAAAAACG5+zmzsaOgAAAAAAAAAAAAAAAAAAAAABn7ObOZmbneAAAAAAAAAAAAAAAAAAAAAfs5s - 5+zs7I7AAAAAAAAAAAAAAAAAAAAH7Ofm7G7GbGiOAAAAAAAAAAAAAAAAAAB+fs7Ofs5+zmzngAAAAAAA - AAAAAAAAAAhn7Ojs5uzm7OZ4yAAAAAAAAAAAAAAAAAaOfm7Obsfsbs7OjnAAAAAAAAAAAAAAAH7Ojs7n - 7O7ObOZs54AAAAAAAAAAAAAABn6Ozuduzn5uznzmyOcAAAAAAAAAAAAAfn7I6M7s5+zn7Obs5oyAAAAA - AAAAAAAIZ+jujuzo7Obs5uxubOjnAAAAAAAAAAAG586M5+js7n7OfOfs5s54cAAAAAAAAABnzo7o5+zu - fs5+5uzmzmzowAAAAAAAAAdujn5+fu7Ozuzs7Ofs5+bI6AAAAAAAAHzn7OjOjI5+5+jufs5uzs5ueOAA - AAAAAG6M6O6O7n7Ofs7Ozo7Ofmzs53gAAAAAB+zo7IznyOzuzufufs6Ofo6Ofn4AAAAACEdsZ2Z87o5+ - js7O7O5cjHx8jIgAAAAAAAAAAAAAfOfs7Ojs6OfgAAAAAAAAAAAAAAAAAAAAbo7O6O7O7OfAAAAAAAAA - AAAAAAAAAAAAfsjm7Obo7s6AAAAAAAAAAAAAAAAAAAAAaO5+zo7OyO5wAAAAAAAAAAAAAAAAAAAAzn7O - js7n7sjAAAAAAAAAAAAAAAAAAAAAaM6Ozuzuzu5wAAAAAAAAAAAAAAAAAAAAbn7Obn5+jshgAAAAAAAA - AAAAAAAAAAAAbOjn7Ozs7O5wAAAAAAAAAAAAAAAAAAAAfnzn5+bn7n7AAAAAAAAAAAAAAAAAAAAAbOjs - 7OzuzshgAAAAAAAAAAAAAAAAAAAAaOyOfn7I5+5wAAAAAAAAAAAAAAAAAAAAbOfs7Ozm7OfAAAAAAAAA - AAAAAAAAAAAAbnzn5+bs5u5wAAAAAAAAAAAAAAAAAAAAfOfsjOx+zn7AAAAAAAAAAAAAAAAAAAAAbnzn - 5o7OfshgAAAAAAAAAAAAAAAAAAAAx+Z+zs5uzm5gAAAAAAAAAAAAAAAAAAAAbs7H5+fObsjAAAAAAAAA - AAAAAAAAAAAAZ2js585s7O5wAAAAAAAAAAAAAAAAAAAAjOyH5+jn53aAAAAAAAAAAAAAAAAAAAAACGZs - bHxsfGgAAAAAAAAAAAD///////8AAP///////wAA////////AAD///j///8AAP//8H///wAA///gP/// - AAD//+Af//8AAP//wB///wAA//+AD///AAD//wAH//8AAP/+AAP//wAA//4AAf//AAD//AAB//8AAP/4 - AAD//wAA//AAAH//AAD/4AAAP/8AAP/gAAAf/wAA/8AAAB//AAD/gAAAD/8AAP8AAAAH/wAA/gAAAAP/ - AAD+AAAAAf8AAPwAAAAB/wAA+AAAAAD/AADwAAAAAH8AAPAAAAAAPwAA4AAAAAA/AADgAAAAAD8AAP/8 - AAH//wAA//wAAf//AAD//AAB//8AAP/8AAH//wAA//wAAf//AAD//AAB//8AAP/8AAH//wAA//wAAf// - AAD//AAB//8AAP/8AAH//wAA//wAAf//AAD//AAB//8AAP/8AAH//wAA//wAAf//AAD//AAB//8AAP/8 - AAH//wAA//wAAf//AAD//AAB//8AAP/8AAH//wAA//4AA///AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/ - AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5+AAAAAAAAAAAAAAAAAA - BoyHAAAAAAAAAAAAAAAAAOfn7AAAAAAAAAAAAAAAAAjIzn6AAAAAAAAAAAAAAAAO5uxo7AAAAAAAAAAA - AAAAaM7ObI6AAAAAAAAAAAAADn5ubOboyAAAAAAAAAAAAH7Ozs5sbo4AAAAAAAAAAAjI5+fn7saM4AAA - AAAAAAAO7n7Ozsbs6OcAAAAAAAAAaH7O5+bn5s6MgAAAAAAABo7o5+zs7Ozm6OAAAAAAAH7I7Ozufn5u - zsfsAAAAAAjOjn6Ofs7s5+bsjnAAAAAG6Ozo7O7n5+zs5ujnAAAAaOyOjo587Ozo6I7IjIAAAGxmxsZ+ - 7o7uzsbG7O4AAAAAAAAM587OyOhgAAAAAAAAAAAABo7n5+7OYAAAAAAAAAAAAAzozuzujsAAAAAAAAAA - AAAGjufuzs5wAAAAAAAAAAAADOfOyOfowAAAAAAAAAAAAAaOfm7O7mAAAAAAAAAAAAAM7Ofs5sjAAAAA - AAAAAAAABn585+7oYAAAAAAAAAAAAAyM6Oxs58AAAAAAAAAAAAAG5+zm5+5gAAAAAAAAAAAABOx+fs7I - wAAAAAAAAAAAAAZ+Z8hs7kAAAAAAAAAAAAAMjOjm52fAAAAAAAAAAAAAAGbExsbOAAAAAAAA///////8 - f///+D////A////gH///4A///8AH//+AA///AAP//gAB//4AAP/8AAB/+AAAf/AAAD/gAAAf4AAAD8AA - AAfAAAAP/4AH//+AB///gAf//4AH//+AB///gAf//4AH//+AB///gAf//4AH//+AB///gAf//4AH///A - D/8oAAAAGAAAADAAAAABAAQAAAAAACABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAA - AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAA - AAAABgAAAAAAAAAAAAAAeOAAAAAAAAAAAAAG7IcAAAAAAAAAAAB+fujgAAAAAAAAAAbs7OyHAAAAAAAA - AGjufm7oYAAAAAAABo7OzsfOhwAAAAAAaO5+5+7s6GAAAAAG5+zs7Ozn7PYAAABo6Ojo7n6IjojgAAAM - bGzs7OyOx+wAAAAAAAfo7o7nAAAAAAAAAAaM7OyGAAAAAAAAAAbufu6MAAAAAAAAAAd+zn6GAAAAAAAA - AAzn7OznAAAAAAAAAAaOzuiGAAAAAAAAAAbn587sAAAAAAAAAAZ87m6GAAAAAAAAAAzozs6MAAAAAAAA - AAaOh+eGAAAAAAAAAABsbGxgAAAAAAAAAAAAAAAAAAAAAP///wD/7/8A/8f/AP+D/wD/Af8A/gD/APwA - fwD4AD8A8AAfAOAADwDAAAcA4AAPAP4A/wD+AP8A/gD/AP4A/wD+AP8A/gD/AP4A/wD+AP8A/gD/AP4A - /wD/Af8A////ACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA - AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAABgAA - AAAAAABoYAAAAAAABo6MAAAAAABozshgAAAABo5uboYAAABo7OfOeGAABo5+fn6OhgB2xs7O6MfHgAAA - aOfIYAAAAABuzujgAAAAAGjn6MAAAAAAzs5+cAAAAABo5+jAAAAAAG7OyOAAAAAAaI6OcAAAAAAMbGYA - AAD+/wAA/H8AAPg/AADwHwAA4A8AAMAHAACAAwAAAAEAAPAfAADwHwAA8B8AAPAfAADwHwAA8B8AAPAf - AAD4PwAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAACjaB0ApmsgAKlt - IwCrcCYArXMqALF1LACzeC4ArHYwALR6MQC4fTQAt385AMh1AADJdwQAy3gAAM17AADOfQEAy3oHAM5/ - CQDMfA0A0H4BAMt/GQC7gDcAvoI6ALmBPADRgAIA0oIEANSDBADVhQUA1ogGANaMBwDZiQYA3I0GANKE - CgDWhwkA0YIMANaMCwDZiggA2o0JANyOCQDbkgsA3pAKAN6UCwDekg0A3ZQNAM+EGgDRhhUA1YkSANiN - EgDajhcA2pISANqSHgDalh4A3ZgaAOGUCgDgkg0A4ZUOAOSWDgDhmA4A5ZgPAOicDgDklxAA45cVAOGY - EADlmRAA5ZwRAOSdFwDonRIA550YAOmfGwDpoBIA6qEUAO2iFADrpBQA7qUWAO6mGADvqBgA8KUXAPCm - GADxqRgA9KsZAPKsGgD0rBoA9a0cAPiuGgD1sBsA+bEbAPixHADOhycAzo0lAMqKKwDRjCIA0Y8lANSP - JgDTji0A05ImANiRIwDdnScA1JQpANmVKwDXmCoA25stAMGJNQDAhj0A0I84AM2VPwDTmTYA3JwyANKR - OQDSlDgA2Js6AOGeIADknS8A3qAxANyiPwDopCAA7qogAOKiLQDtqykA8asjAPOxJwD6syAA+LMkAPq1 - JwD2tSoA+rYsAPq4LgDiozEA6qUzAOepNQDpqTEA66wyAOmrNwDtqjUA6qw2AO2vNQDjpjoA6aw4AOir - PwDwrDgA67A3AO2xOQDssT8A8rIwAPazMwD2tzEA8bE2APq7NgDytDoA+Lc6APW5PAD5uToA+bw7APi7 - PQD5vD0A/L49APzAPgCxgEMAv4VAALaFSAC5h0sAvJZmALyacgC5mnYAxYlBAMOLRgDHi0QAyY1GAMaO - SgDJj0oAyZBEAMyQSgDPlEkAypFNAM6TTADNlE4A0pVHANebQwDUnUUA0JRNANaaSgDDkVUAzpZWAM2X - WwDOmVsAzZpdANGZVgDUmlcA0ppaANOcWwDQnF4A16BHANqiSADapUkA3adLAN2lTQDbo1QA1KFeANql - WwDgpkMA4KtOAO6sSwDxrUYA8rdAAPGxRQD1uUAA+r1AAPSySADirl0Ax5ljAMOYZgDFmWUAz51gAM+f - ZADBnG4AxJ1uANGeYgDQnmUA0aBjANalYwDVoWQA2KRgAN+sYwDbqWYA3aplAN2sZwDRo2sA1KdrANWl - bADZqmoA3q5qAMWhcgDNpHMAzKV1AMmmeQDUqXAA1Kp5ANuwcADhrWAA569jAOCvaQDismgA5LRoAOGy - bADitGwA+8BDALGchQCxnokAxa2OAMqwkQDPs5MA1LiXAN3AngDjwJYAAAAAAP///wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAC/YQAAvGgNALllFwC5Zx8AtWUpAMJkAADFaAAAyGsAAMxuAgDOcQYA0nYJANR5DQDFdREAz34aANd8 - EADafxMA0IAGANSDBQDThAYA1YUFANiJBwDThg8A2YoIANqNCQDcjQoA25AKAN2QCgDekQ0A35UNAN2A - FgDXjxAA2Y4UAN6DGQDWjBsA3ZEQAN6UFgDdmBgA4JMKAOCSDQDhlQ4A5ZcPAOSZDgDghhsA44geAOSW - EADjmxEA5ZoQAOScEQDnnxQA6Z0SAOWcGgDpoBIA6aEUAO2iFADtpBYA5qAZAO+oGgDwphcA8acYAPGp - GAD0qxkA86waAPSsGgD1rhwA9rAbAPawHAD4sBoA+LEcAMyAIADXhSMA0IUnAN+NKgDRkScA2pYhAN2b - IwDcmyUA05MoANWWKQDali8A2ZksANucLQDcnS4A3Z0xAN2TOwDblT8A1po7ANKYPADVmj0A154+AOaO - JADjkCoA5ZIuAOqTKgDtkysA7ZQrAOiTLQDulSwA4pIxAOmWMQDrlzUA6J02AOOaOQDgnTwA6pw5APCa - NADynj0A36AvAN6hMADdoDgA2aE/AOSgIQDioSYA7KchAO2oJgDgoCkA6agrAPewIAD5tCIA+bQnAPOx - KAD5tigA+bcvAOOmMgDjpjQA5KU0AOepNQDnrD8A6Ko4AOyvOADprj8A86A/AO+zOgDysjAA8LE3APe4 - NgD7ujEA8rY7APCzPQDytj4A9Lg6APW6PQD7vDoA+b0+AMWARADPkEUA3ZlEANmbTQDPnF8A0phUAOqe - QgDdoEEA2aJGAN2kRADep0kA3aVOANuiUADdplQA4ahGAO2qRwDooEgA4alKAOOtTQDzoUAA869EAPap - TgDsskAA77JGAOewTgDusUoA6rBMAPC1QwD0ukUA9rxGAPm9QQDwskkA8rVNAPe+SAD1uk8A+L5IAPWp - UADyqlQA6rRRAO22UgDuuFQA47BbAPCyUQD0vFAA8r5WAPC2XAD4sV0AyZ5nAMSlfwDfr3MA2K19AOWt - YgDltmcA67NgAOm5YQDsu2oA77ptAPW+awDwvm0A+bhpAOizcQDiu34A7Lt9APS9cAD7wEIA+8FGAPnA - SAD4wk4A+MNZAPnEWgD6w2AA/ctkAMOnhQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAABta58AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbc2/a8oAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAKpvpabIawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWcqgdHaa/awAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAG2JLR8dIM6tXgAAAAAAAAAAAAAAAAAAAAAAAAAAAABlsT0xIx8dLNJzngAAAAAA - AAAAAAAAAAAAAAAAAAAAUq58PDMxIyMdWdVr4gAAAAAAAAAAAAAAAAAAAAAAAJypj0REMzMxJSMdochr - AAAAAAAAAAAAAAAAAAAAAADLcN9KRURERDMxJSMjw69lAAAAAAAAAAAAAAAAAAAAAFDhuH9KSkQzRDMx - JSMq0o1fAAAAAAAAAAAAAAAAAAAY4Nu4gUdHQ0VEM0QlJSNU2XPJAAAAAAAAAAAAAAAAT8TcuNuSTUpK - R0REMzsxJSNd1WsAAAAAAAAAAAAAAJtw3bi425hNTUpKSkRERDMzMSOryGsAAAAAAAAAAADMUd2Vl7i4 - mIFNTU1KSkRERDMzMSXQr2wAAAAAAAAAABfBsJOXmLi4g01NTU1KSkRERDk5MS3ZdJ0AAAAAAAAMz7S0 - urrFxbiETYFNTU1KSo+xlbq6tMfTa9gAAAAAAJoGBgYGCQkL35FLTU2BTU1KthkZKys1NmSgAAAAAAAA - AAAAAAAAAAnfl0pLTU1NgU29FgAAAAAAAAAAAAAAAAAAAAAAAAAABt2VgkpNgU1NTdwVAAAAAAAAAAAA - AAAAAAAAAAAAAAAGxrGPSkpKTU2B2xQAAAAAAAAAAAAAAAAAAAAAAAAAAAbCi5BDREpLTU3cEwAAAAAA - AAAAAAAAAAAAAAAAAAAABMGIi3xAR0pLTdwTAAAAAAAAAAAAAAAAAAAAAAAAAAADsoWKjzlEQ0pL3BEA - AAAAAAAAAAAAAAAAAAAAAAAAAAOrhYWFOztEREq7EQAAAAAAAAAAAAAAAAAAAAAAAAAAA6tdXIV5OTtE - Q7YLAAAAAAAAAAAAAAAAAAAAAAAAAAABpVxcdn0nMztEtgkAAAAAAAAAAAAAAAAAAAAAAAAAAAGhWFpd - di8nMzu1CQAAAAAAAAAAAAAAAAAAAAAAAAAAAaVTWFxdViUnJ7EGAAAAAAAAAAAAAAAAAAAAAAAAAAAB - YFNYWFhcKSQnsAYAAAAAAAAAAAAAAAAAAAAAAAAAAA/XYWBjoaF3VFZWDQAAAAAAAAAAAAAAAAAAAAAA - AAAAAA8BAQEBAQEEBA4AAAAAAAAAAAAAAAD///////x////4P///8D///+Af///gD///wAf//4AD//8A - A//+AAH//gAA//wAAH/4AAB/8AAAP+AAAB/gAAAPwAAAB8AAAA//gAf//4AH//+AB///gAf//4AH//+A - B///gAf//4AH//+AB///gAf//4AH//+AB///gAf//8AP/ygAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAA - AAAAAAAAAAEAAAABAAAAAAAApWYWAKhpGQCqbBsAqm0dAKxuHgCucCEAsHMjALJ2JgC2eioAuH4uALyC - MgC9gzQAvoU1AN+YEwDklw8A5ZkQAOmdEgDooBIA6aEUAO2hFQDtpRYA8KYXAPGqFwDxpxgA8qoZAPSr - GgD0rRoA86wcAPauHAD3sBoA97AcAPmwGgD4sRwAwIY3AMGJOQDDizwAxIs8AMWNPgDjnSUA5J4nAN6g - MADnoyAA5aAnAOSjKQDgoi8A7awpAPCsIwD6syIA+rcrAOKlMwDqqzIA6Kk3AOSpOgDpqz0A+rozAPq6 - NADytjsA97s+APe8PAD5uzgA36VCAN+sVADgqUQA5axHAOmuQADkrUoA6bNKAO63TgDws0EA9btDAPS6 - RQD6vkEA9LxMAPm+SADhrlUA5LJZAPK7UAD7wEMA+8NOAPbBUAD6xFIA+8VUAPDDaQD0xmwA9shtAPjK - bgD6zW8A8cmCAPPMhAD0zoYA99CHAPDPmQDw0JkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmAAAAAAAA - AAAAAAAAAAAAAAAAAAAAACZcJgAAAAAAAAAAAAAAAAAAAAAAAAAAJjYnXSYAAAAAAAAAAAAAAAAAAAAA - AAAiRREPJ10mAAAAAAAAAAAAAAAAAAAAAAtHFhYQECddJgAAAAAAAAAAAAAAAAAACkobGxYRERAnXSYA - AAAAAAAAAAAAAAAJUjAbGxgbFhEQKF0mAAAAAAAAAAAAAAhSTjEgGxsbFhYRECtdJgAAAAAAAAAABjpI - SDggICAbGBgWERAnXSYAAAAAAAAFOVBSUk84IDAgGxtUW1paWlwmAAAAAAAABQUGBgg8IDAgMBtWCwsL - IiIAAAAAAAAAAAAAAAY6HiAgMCBXCgAAAAAAAAAAAAAAAAAAAAVHGx4wICBXCgAAAAAAAAAAAAAAAAAA - AAVJGxseMCBXCQAAAAAAAAAAAAAAAAAAAAVJLxsbHjBXCAAAAAAAAAAAAAAAAAAAAAFELhYcGx5XCAAA - AAAAAAAAAAAAAAAAAAFDMxMVGxtXBgAAAAAAAAAAAAAAAAAAAAFANCsWFhxVBgAAAAAAAAAAAAAAAAAA - AAE/MisOEBZVBQAAAAAAAAAAAAAAAAAAAAE9KS0OEBNUAwAAAAAAAAAAAAAAAAAAAAE+S0xAND9TAwAA - AAAAAAAAAAAAAAAAAAABAQEBAwEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP/v - /wD/x/8A/4P/AP8B/wD+AP8A/AB/APgAPwDwAB8A4AAPAMAABwDgAA8A/gD/AP4A/wD+AP8A/gD/AP4A - /wD+AP8A/gD/AP4A/wD+AP8A/gD/AP8B/wD///8AKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAA - AAAAAQAAAAEAAAAAAAClZhYAsnYmALN4KQC4fi8A1Y0XANWOGADXkBkA2pUbANuVHADclhwA3poeAOCc - HwDgmyAA46EiAOaiIwDmpiMA56cnAOilIwDppiUA66omAO2rJwDuricA46YsAOyrKADurikA7q4sAPCv - KQDvsS4A8LAqAO2vMQDkpjgA5q8+AOqwOADwszIA4qtBAOi0TwDyvEoA7LlSAOSyXADnt18Aw5ljAMui - bQDqumEA5LhoAOa7cADpv3MA78FlAPDFdgDyyXkA88x6APXNegD20IAA6MeQAOnIkQDpyZcAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP///wAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAzcCAAAAAAAAAAAAAAAAAycFNQIAAAAA - AAAAAAAAAysLCAY1BAAAAAAAAAAAAy8SDg0IBjUEAAAAAAAAAzMaFBIODQgINQQAAAAAAzQlIhQaEg4f - Li01BAAAKQEBAQEbGhQUMAQEBAQqAAAAAAABGxsbFDMEAAAAAAAAAAAAARwbGxszBAAAAAAAAAAAAAEe - FBsbMwQAAAAAAAAAAAABIRQcHDMEAAAAAAAAAAAAASARFBQzBAAAAAAAAAAAAAEjFw4WMwQAAAAAAAAA - AAABLCgkJjMDAAAAAAAAAAAAAAEBAQEBAAAAAAAA/v8AAPx/AAD4PwAA8B8AAOAPAADABwAAgAMAAAAB - AADwHwAA8B8AAPAfAADwHwAA8B8AAPAfAADwHwAA+D8AACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAABgAAAAgAAAAGAAAAAwAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAFgAA - ABsAAAAWAAAACwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAA - AAwAAAAfAAAAMwAAADwAAAAyAAAAHQAAAAsAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAACAAAACSccDyHPllLiypFQ4M2UUesdFQtZAAAANQAAABoAAAAJAAAAAgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAEAAAAHAAAAF8aOTb/RlU3z0pVH/82UU/K/iUvcAAAAUAAAADAAAAAWAAAABgAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - Q//6tiz/+K4a//auG//1rRr/9Ksa//KpGf/wpxj/76MX/+2hFP/pnxP/6JwS/+WYD//hlQ//35IN/92O - Cv/aiwn/14gH/9SEBf/ViRP/4rJo/8+cXfS4hEjVAAAATQAAAC0AAAAUAAAABgAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAASjl8jgq91LPfjpjr/+Ls///q+ - Qf/7v0H/+79B//vAQ//7vDb/+bEc//iwHP/2rhz/9a0b//SrGv/yqhn/8agY/++kF//toRT/6p8T/+ic - Ev/lmRD/45YO/9+TDf/djwv/2owI/9eJB//UhQT/2JEj/+Gya/zRmVf5mm48sQAAAEYAAAAnAAAAEAAA - AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAA5zTBtTrXIp+NOY - NPzytz3/+bw+//q9QP/6vkH/+79B//u/Qf/7vj7/+rMg//mxHP/4sBz/9q4c//WsG//0rBr/86oZ//Go - GP/vpBf/7aEV/+qfE//onRH/5ZkQ/+OWD//gkw7/3Y8J/9uMCP/XiQf/1YQG/9uaNv/armz30phU+nJR - LI0AAABAAAAAIgAAAAwAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACzom - DSyobyXxv4Ut9e2wOv/1ujz/+Ls9//m8QP/6vUD/+r5B//u/Qf/7v0L/+rUn//mxG//5sR3/+LAc//au - HP/1rRv/9Kwa//OqGf/xqBj/76QX/+6iFf/roBP/6JwS/+aZEP/klg//4JMN/96OC//bjQn/2YkI/9WF - Bv/fpkz/06Zp8s2TUPY/LRhtAAAAOQAAABwAAAAJAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAEGRAFFKRqI9mwdibx56o3//G0Ov/ztjv/9bo8//a7Pv/5vED/+r1A//q+Qf/7wEP/+rgu//mx - G//5sh3/+bId//ixHP/2sBz/9a0b//SrGv/yqhn/8agY//CmF//uoxX/6qAT/+mdEf/mmRD/5JYP/+CT - Dv/ejwr/3IwK/9mJB//Whwn/4q5d/9GiZ+7Hj0znEg0HSAAAACcAAAAPAAAAAwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAGoGcgpaluIvLdoDP/6q03/++yOf/xtDr/87Y7//S4PP/2uz3/+bw+//m9 - QP/6vkL/+rs3//myHP/5sh3/+bId//myHf/5sR3/+LAc//WtHP/0rRv/9KsZ//KpGP/wphf/7qMV/+ug - E//onhL/55oR/+SXD//hlA3/3pAL/9yNCf/Zigf/2I0S/+S0aP/ToGPwvolJxAAAACcAAAARAAAABQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACiaB9ppmsg9dKVL//nqjX/67A3/+6yOP/wtDr/87Y7//W4 - PP/4uz3/+b0+//m9QP/5vUD/+rw7//myHv/5sh3/+bId//myHf/5sh3/+LEd//iwHP/2rhv/9awb//Or - Gv/xqBn/8KYY/+6jFf/roBP/6p4Q/+icDv/llw3/4ZQK/9+QCf/cjQb/2okF/9mRHf/ismj40ZVQ9MGK - SogAAAALAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmaR7PyYgn+uSdL//loDD/56Iy/+qk - M//rpjT/7qk3//CrOP/xrTn/8a05//CxOP/4vD7/+bxA//izJP/4sRz/+bId//myHf/5sh3/+bId//mx - Hf/4sBz/9q4c//WsG//zqxr/8qkY//GrI//xsDr/8bFF//W0Sf/2s0n/9LJI//OwSP/yr0f/8a1G//Cs - R//urEv/5ahV6dGVT+AAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkaR2XpGoe/6Vq - H/+mayD/pmwh/6hsIv+pbSP/qW4k/6twJf+scCf/rXIn/65zKf/6vDz/+LxA//a1Kv/2sBr/+bEd//my - Hf/5sh3/+bId//myHf/5sR3/+LAc//auHP/1rRv/9Ksa//a3Ov/EiED/xYlB/8aKQ//Hi0T/yY1G/8qO - R//Lj0n/zJBK/82RS//Ok0z/0JRN/9GVTpcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK1yJ//5uzv/9rs+//a3 - Mf/1rhr/9rAc//iyHf/5sh3/+bId//myHf/5sh3/+bEd//iwHP/2rhz/9a0b//m5Ov/Chj//AAAAKwAA - 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 - - - \ No newline at end of file diff --git a/SCrawler/Download/AutoDownloader.vb b/SCrawler/Download/Automation/AutoDownloader.vb similarity index 88% rename from SCrawler/Download/AutoDownloader.vb rename to SCrawler/Download/Automation/AutoDownloader.vb index d64f237..bc14879 100644 --- a/SCrawler/Download/AutoDownloader.vb +++ b/SCrawler/Download/Automation/AutoDownloader.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -7,15 +7,16 @@ ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY Imports System.Threading +Imports SCrawler.API +Imports SCrawler.API.Base +Imports SCrawler.DownloadObjects.Groups Imports PersonalUtilities.Functions.XML Imports PersonalUtilities.Functions.XML.Base Imports PersonalUtilities.Tools Imports PersonalUtilities.Tools.Notifications -Imports SCrawler.DownloadObjects.Groups -Imports SCrawler.API -Imports SCrawler.API.Base Namespace DownloadObjects Friend Class AutoDownloader : Inherits GroupParameters : Implements IEContainerProvider + Friend Event PauseDisabled() Private Shared ReadOnly Property CachePath As SFile Get Return Settings.CachePath @@ -28,6 +29,18 @@ Namespace DownloadObjects Specified = 3 Groups = 4 End Enum + Friend Enum PauseModes As Integer + Disabled = -2 + Enabled = -1 + Unlimited = -1 + Until = 0 + H1 = 1 + H2 = 2 + H3 = 3 + H4 = 4 + H6 = 6 + H12 = 12 + End Enum Friend Const DefaultTimer As Integer = 60 #Region "Notifications" Private Const KeyOpenFolder As String = "_____OPEN_FOLDER_SCRAWLER_AUTOMATION" @@ -70,7 +83,7 @@ Namespace DownloadObjects End Operator Friend Sub ShowNotification() Try - If Not AutoDownloaderSource Is Nothing Then + If Not AutoDownloaderSource Is Nothing And Settings.ProcessNotification(SettingsCLS.NotificationObjects.AutoDownloader) Then If AutoDownloaderSource.ShowNotifications Then If Not User Is Nothing Then Dim Text$ = $"{User.Site} - {User.Name}{vbNewLine}" & @@ -121,7 +134,8 @@ Namespace DownloadObjects Catch ex As Exception ErrorsDescriber.Execute(EDP.SendInLog, ex, "[AutoDownloader.NotifiedUser.ShowNotification]") If Not User Is Nothing Then - MainFrameObj.ShowNotification($"Downloaded: {User.DownloadedPictures(False)} images, {User.DownloadedVideos(False)} videos", + MainFrameObj.ShowNotification(SettingsCLS.NotificationObjects.AutoDownloader, + $"Downloaded: {User.DownloadedPictures(False)} images, {User.DownloadedVideos(False)} videos", User.ToString, IIf(User.HasError, ToolTipIcon.Warning, ToolTipIcon.Info)) End If End Try @@ -241,7 +255,13 @@ Namespace DownloadObjects Else OutStr = "working" End If - If Pause Then OutStr &= ", paused" + If IsPaused Then + Select Case Pause + Case PauseModes.Unlimited : OutStr &= ", paused" + Case PauseModes.Until : OutStr &= $", paused (until {AConvert(Of String)(_PauseValue, ADateTime.Formats.BaseDateTime, "?")})" + Case Else : OutStr &= $", paused ([{Pause}] until {AConvert(Of String)(_PauseValue, ADateTime.Formats.BaseDateTime, "?")})" + End Select + End If Else OutStr = "stopped" End If @@ -349,7 +369,47 @@ Namespace DownloadObjects End If End Sub Private _StopRequested As Boolean = False - Friend Property Pause As Boolean = False + Private _Pause As PauseModes = PauseModes.Disabled + Private _PauseValue As Date? = Nothing + Friend Property Pause(Optional ByVal DateLimit As Date? = Nothing) As PauseModes + Get + Return _Pause + End Get + Set(ByVal p As PauseModes) + _Pause = p + Select Case p + Case PauseModes.Disabled, PauseModes.Unlimited : _PauseValue = Nothing + Case PauseModes.H1 : _PauseValue = Now.AddHours(1) + Case PauseModes.H2 : _PauseValue = Now.AddHours(2) + Case PauseModes.H3 : _PauseValue = Now.AddHours(3) + Case PauseModes.H4 : _PauseValue = Now.AddHours(4) + Case PauseModes.H6 : _PauseValue = Now.AddHours(6) + Case PauseModes.H12 : _PauseValue = Now.AddHours(12) + Case PauseModes.Until : _PauseValue = DateLimit + Case Else : _PauseValue = Nothing + End Select + End Set + End Property + Private ReadOnly Property IsPaused As Boolean + Get + If Not _Pause = PauseModes.Disabled Then + If _PauseValue.HasValue Then + If _PauseValue.Value > Now Then + Return True + Else + _Pause = PauseModes.Disabled + _PauseValue = Nothing + RaiseEvent PauseDisabled() + Return False + End If + Else + Return True + End If + Else + Return False + End If + End Get + End Property Friend Sub [Stop]() If Working Then _StopRequested = True End Sub @@ -364,7 +424,7 @@ Namespace DownloadObjects Try While (Not _StopRequested Or Downloader.Working) And Not Mode = Modes.None If LastDownloadDate.AddMinutes(Timer) < Now And _StartTime.AddMinutes(StartupDelay) < Now And - Not Downloader.Working And Not Pause And Not _StopRequested And Not Mode = Modes.None Then Download() + Not Downloader.Working And Not IsPaused And Not _StopRequested And Not Mode = Modes.None Then Download() Thread.Sleep(500) End While Catch ex As Exception @@ -404,7 +464,7 @@ Namespace DownloadObjects End With End Sub Select Case Mode - Case Modes.All : users.ListAddList(Settings.Users) + Case Modes.All : users.ListAddList(Settings.Users.Where(Function(u) u.Exists)) Case Modes.Default Using g As New GroupParameters : users.ListAddList(DownloadGroup.GetUsers(g, True)) : End Using Case Modes.Specified : users.ListAddList(DownloadGroup.GetUsers(Me, True)) @@ -433,12 +493,13 @@ Namespace DownloadObjects With Downloader .AutoDownloaderWorking = True If .Downloaded.Count > 0 Then .Downloaded.RemoveAll(Function(u) Keys.Contains(u.Key)) : .InvokeDownloadsChangeEvent() - .AddRange(users) + .AddRange(users, True) While .Working Or .Count > 0 : notify.Invoke() : Thread.Sleep(200) : End While .AutoDownloaderWorking = False notify.Invoke If simple And DownloadedUsersCount > 0 Then _ - MainFrameObj.ShowNotification($"{DownloadedUsersCount} user(s) downloaded with scheduler plan '{Name}'", $"Scheduler plan '{Name}'") + MainFrameObj.ShowNotification(SettingsCLS.NotificationObjects.AutoDownloader, + $"{DownloadedUsersCount} user(s) downloaded with scheduler plan '{Name}'", $"Scheduler plan '{Name}'") End With End If Catch ex As Exception diff --git a/SCrawler/Download/AutoDownloaderEditorForm.Designer.vb b/SCrawler/Download/Automation/AutoDownloaderEditorForm.Designer.vb similarity index 98% rename from SCrawler/Download/AutoDownloaderEditorForm.Designer.vb rename to SCrawler/Download/Automation/AutoDownloaderEditorForm.Designer.vb index 1fd4f22..d806f53 100644 --- a/SCrawler/Download/AutoDownloaderEditorForm.Designer.vb +++ b/SCrawler/Download/Automation/AutoDownloaderEditorForm.Designer.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -66,7 +66,7 @@ Namespace DownloadObjects 'CONTAINER_MAIN.ContentPanel ' CONTAINER_MAIN.ContentPanel.Controls.Add(Me.DEF_GROUP) - CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(476, 301) + CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(476, 276) CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill CONTAINER_MAIN.LeftToolStripPanelVisible = False CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0) @@ -103,7 +103,7 @@ Namespace DownloadObjects Me.DEF_GROUP.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) Me.DEF_GROUP.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) Me.DEF_GROUP.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!)) - Me.DEF_GROUP.Size = New System.Drawing.Size(476, 301) + Me.DEF_GROUP.Size = New System.Drawing.Size(476, 276) Me.DEF_GROUP.TabIndex = 0 ' 'TXT_GROUPS @@ -216,6 +216,8 @@ Namespace DownloadObjects ActionButton3.Name = "Refresh" Me.TXT_TIMER.Buttons.Add(ActionButton3) Me.TXT_TIMER.CaptionText = "Timer" + Me.TXT_TIMER.CaptionToolTipEnabled = True + Me.TXT_TIMER.CaptionToolTipText = "Timer (in minutes)" Me.TXT_TIMER.CaptionWidth = 50.0R Me.TXT_TIMER.Dock = System.Windows.Forms.DockStyle.Fill Me.TXT_TIMER.Location = New System.Drawing.Point(4, 195) @@ -330,7 +332,7 @@ Namespace DownloadObjects Me.ClientSize = New System.Drawing.Size(476, 301) Me.Controls.Add(CONTAINER_MAIN) Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle - Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.Icon = Global.SCrawler.My.Resources.Resources.ArrowDownIcon_Blue_24 Me.KeyPreview = True Me.MaximizeBox = False Me.MaximumSize = New System.Drawing.Size(492, 340) diff --git a/SCrawler/Download/Automation/AutoDownloaderEditorForm.resx b/SCrawler/Download/Automation/AutoDownloaderEditorForm.resx new file mode 100644 index 0000000..3cdff2b --- /dev/null +++ b/SCrawler/Download/Automation/AutoDownloaderEditorForm.resx @@ -0,0 +1,239 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH + DwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2Zp + bGUAAEjHnZZ3VFTXFofPvXd6oc0w0hl6ky4wgPQuIB0EURhmBhjKAMMMTWyIqEBEEREBRZCggAGjoUis + iGIhKKhgD0gQUGIwiqioZEbWSnx5ee/l5ffHvd/aZ+9z99l7n7UuACRPHy4vBZYCIJkn4Ad6ONNXhUfQ + sf0ABniAAaYAMFnpqb5B7sFAJC83F3q6yAn8i94MAUj8vmXo6U+ng/9P0qxUvgAAyF/E5mxOOkvE+SJO + yhSkiu0zIqbGJIoZRomZL0pQxHJijlvkpZ99FtlRzOxkHlvE4pxT2clsMfeIeHuGkCNixEfEBRlcTqaI + b4tYM0mYzBXxW3FsMoeZDgCKJLYLOKx4EZuImMQPDnQR8XIAcKS4LzjmCxZwsgTiQ7mkpGbzuXHxArou + S49uam3NoHtyMpM4AoGhP5OVyOSz6S4pyalMXjYAi2f+LBlxbemiIluaWltaGpoZmX5RqP+6+Dcl7u0i + vQr43DOI1veH7a/8UuoAYMyKarPrD1vMfgA6tgIgd/8Pm+YhACRFfWu/8cV5aOJ5iRcIUm2MjTMzM424 + HJaRuKC/6386/A198T0j8Xa/l4fuyollCpMEdHHdWClJKUI+PT2VyeLQDf88xP848K/zWBrIieXwOTxR + RKhoyri8OFG7eWyugJvCo3N5/6mJ/zDsT1qca5Eo9Z8ANcoISN2gAuTnPoCiEAESeVDc9d/75oMPBeKb + F6Y6sTj3nwX9+65wifiRzo37HOcSGExnCfkZi2viawnQgAAkARXIAxWgAXSBITADVsAWOAI3sAL4gWAQ + DtYCFogHyYAPMkEu2AwKQBHYBfaCSlAD6kEjaAEnQAc4DS6Ay+A6uAnugAdgBIyD52AGvAHzEARhITJE + geQhVUgLMoDMIAZkD7lBPlAgFA5FQ3EQDxJCudAWqAgqhSqhWqgR+hY6BV2ArkID0D1oFJqCfoXewwhM + gqmwMqwNG8MM2An2hoPhNXAcnAbnwPnwTrgCroOPwe3wBfg6fAcegZ/DswhAiAgNUUMMEQbigvghEUgs + wkc2IIVIOVKHtCBdSC9yCxlBppF3KAyKgqKjDFG2KE9UCIqFSkNtQBWjKlFHUe2oHtQt1ChqBvUJTUYr + oQ3QNmgv9Cp0HDoTXYAuRzeg29CX0HfQ4+g3GAyGhtHBWGE8MeGYBMw6TDHmAKYVcx4zgBnDzGKxWHms + AdYO64dlYgXYAux+7DHsOewgdhz7FkfEqeLMcO64CBwPl4crxzXhzuIGcRO4ebwUXgtvg/fDs/HZ+BJ8 + Pb4LfwM/jp8nSBN0CHaEYEICYTOhgtBCuER4SHhFJBLVidbEACKXuIlYQTxOvEIcJb4jyZD0SS6kSJKQ + tJN0hHSedI/0ikwma5MdyRFkAXknuZF8kfyY/FaCImEk4SXBltgoUSXRLjEo8UISL6kl6SS5VjJHslzy + pOQNyWkpvJS2lIsUU2qDVJXUKalhqVlpirSptJ90snSxdJP0VelJGayMtoybDFsmX+awzEWZMQpC0aC4 + UFiULZR6yiXKOBVD1aF6UROoRdRvqP3UGVkZ2WWyobJZslWyZ2RHaAhNm+ZFS6KV0E7QhmjvlygvcVrC + WbJjScuSwSVzcopyjnIcuUK5Vrk7cu/l6fJu8onyu+U75B8poBT0FQIUMhUOKlxSmFakKtoqshQLFU8o + 3leClfSVApXWKR1W6lOaVVZR9lBOVd6vfFF5WoWm4qiSoFKmclZlSpWiaq/KVS1TPaf6jC5Ld6In0Svo + PfQZNSU1TzWhWq1av9q8uo56iHqeeqv6Iw2CBkMjVqNMo1tjRlNV01czV7NZ874WXouhFa+1T6tXa05b + RztMe5t2h/akjpyOl06OTrPOQ12yroNumm6d7m09jB5DL1HvgN5NfVjfQj9ev0r/hgFsYGnANThgMLAU + vdR6KW9p3dJhQ5Khk2GGYbPhqBHNyMcoz6jD6IWxpnGE8W7jXuNPJhYmSSb1Jg9MZUxXmOaZdpn+aqZv + xjKrMrttTjZ3N99o3mn+cpnBMs6yg8vuWlAsfC22WXRbfLS0suRbtlhOWWlaRVtVWw0zqAx/RjHjijXa + 2tl6o/Vp63c2ljYCmxM2v9ga2ibaNtlOLtdZzllev3zMTt2OaVdrN2JPt4+2P2Q/4qDmwHSoc3jiqOHI + dmxwnHDSc0pwOub0wtnEme/c5jznYuOy3uW8K+Lq4Vro2u8m4xbiVun22F3dPc692X3Gw8Jjncd5T7Sn + t+duz2EvZS+WV6PXzAqrFetX9HiTvIO8K72f+Oj78H26fGHfFb57fB+u1FrJW9nhB/y8/Pb4PfLX8U/z + /z4AE+AfUBXwNNA0MDewN4gSFBXUFPQm2Dm4JPhBiG6IMKQ7VDI0MrQxdC7MNaw0bGSV8ar1q66HK4Rz + wzsjsBGhEQ0Rs6vdVu9dPR5pEVkQObRGZ03WmqtrFdYmrT0TJRnFjDoZjY4Oi26K/sD0Y9YxZ2O8Yqpj + ZlgurH2s52xHdhl7imPHKeVMxNrFlsZOxtnF7YmbineIL4+f5rpwK7kvEzwTahLmEv0SjyQuJIUltSbj + kqOTT/FkeIm8nhSVlKyUgVSD1ILUkTSbtL1pM3xvfkM6lL4mvVNAFf1M9Ql1hVuFoxn2GVUZbzNDM09m + SWfxsvqy9bN3ZE/kuOd8vQ61jrWuO1ctd3Pu6Hqn9bUboA0xG7o3amzM3zi+yWPT0c2EzYmbf8gzySvN + e70lbEtXvnL+pvyxrR5bmwskCvgFw9tst9VsR23nbu/fYb5j/45PhezCa0UmReVFH4pZxde+Mv2q4quF + nbE7+0ssSw7uwuzi7Rra7bD7aKl0aU7p2B7fPe1l9LLCstd7o/ZeLV9WXrOPsE+4b6TCp6Jzv+b+Xfs/ + VMZX3qlyrmqtVqreUT13gH1g8KDjwZYa5ZqimveHuIfu1nrUttdp15UfxhzOOPy0PrS+92vG140NCg1F + DR+P8I6MHA082tNo1djYpNRU0gw3C5unjkUeu/mN6zedLYYtta201qLj4Ljw+LNvo78dOuF9ovsk42TL + d1rfVbdR2grbofbs9pmO+I6RzvDOgVMrTnV32Xa1fW/0/ZHTaqerzsieKTlLOJt/duFczrnZ86nnpy/E + XRjrjup+cHHVxds9AT39l7wvXbnsfvlir1PvuSt2V05ftbl66hrjWsd1y+vtfRZ9bT9Y/NDWb9nffsPq + RudN65tdA8sHzg46DF645Xrr8m2v29fvrLwzMBQydHc4cnjkLvvu5L2key/vZ9yff7DpIfph4SOpR+WP + lR7X/aj3Y+uI5ciZUdfRvidBTx6Mscae/5T+04fx/Kfkp+UTqhONk2aTp6fcp24+W/1s/Hnq8/npgp+l + f65+ofviu18cf+mbWTUz/pL/cuHX4lfyr468Xva6e9Z/9vGb5Dfzc4Vv5d8efcd41/s+7P3EfOYH7IeK + j3ofuz55f3q4kLyw8Bv3hPP74uYdwgAAAAlwSFlzAAALEwAACxMBAJqcGAAAAahJREFUOE9j+P//P8l4 + vaOjPYyNIYkPO1lZsa1wdNy42sHh3Hxb22KQGFaF2LC4qjjroUP7n97s6vx/Ny/3/ypn54+LbGwisSpG + x+aaouwZren/u5f2/3/18tX/qzNn/l/i4XGSgYFBFasGZKwjzcJ6YVnU152blvw3LHH53zCl/ufatWu+ + T+1vDALJY9UEwxrijExHZgd+/Xy1Hcg98BNkCMglMM0gjKEJhuX5GVh2TvD+/O5c0///P9b///qo819P + lgmKZhBG0QTDMjwMzJs7XT+9OVHz///XFf+/PWj7j00zCKNwQFiah4FtXbPjp8d78////7bo/4/79Tg1 + gzAKR1mUg3lOocXbe9uz/v9/M/H/1zuVeDWDMJwhJcDBvK4p4tb1DQn//r/u+f/zRh5BzSAMZyyrdVh9 + c33B9//32159vZr2hxjNIAwm1GUE3e+ur/n9/+Ls/592Nf9fUun3khjNIMzAysTAv6g6+OT/E33/j09N + +zWpMuImsZpBmMHIQK9x19T8/03x1ufE+TkqsCnChxmUlFWuyEpJtAHTtT42BfjxfwYAtlm0ShMkSB4A + AAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go + tbbB43rK5xSAQq1VYFtmeQBoqZTSreVZvgTknM8yyyjA/qodsDF9gspD2Bj6B+DH+NqzhQQAG+POMnSX + AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC + + + + False + + + False + + + 17, 17 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6 + JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACOElE + QVQ4T2P4//8/QczOJyyqHpzfiE0OQwAZC8iqszAzs7CJ69o4BR768V/W2jcGXQ0KB4aFNS3dDQtnrbCb + ePCK48wTN1wXXXzge/jXf/clV55zC4hIIatF0cjIyMikElzc57z0wX+XHd/+2+//99/ywP//xlu//tdb + +eK/4Zp3/1WTOhYzARViNUAluKjTdf37/0ZTTn9TbdhwXblhwwW1/qOP1Ja9+K8w+95/6cm3/6v2Xvkv + qKjniGGAoIqRpW3/4e8S9uGdzFz82gwMDFxAzCxm4ZegtuLDf+VJ1/8rZM25IqLvnM/CximCYYCic1QN + v7x2JIwPwyrJ3XNUylddE9G2TWNmZOBDl4czmJiZMSRBmFdSyYyJgUEQmxwIYxWEYXZBCUls4sgYq6CA + prWNbtG8nXKeaVPR5XiVjSxEzf0yYXy4BBMLO6eQjoOXZvrkbbazrv53Xf/2v4CSbjBMXkhBl1/CMyNZ + qWnvGy5pNQ+YONwAfjXzAOupl/47LLr333L50/96q9/8l23YdES6cO5KuYqVW+R7Tj6SnfP0v4hryjyY + HhQDmFjYeHVKFp7WX/Xuv9Kq9/+Vd/z7r7rv/3+l7f//y676DEwDN/9L+BVvYkKLCTgDhNkkVUyVlr74 + qbbz73/VOTc/qsy89kWx+9h7qbQpJwS1bbOAscGGrB6EUTggLOqf16C55ft/HlnNAFZOXgVWdi4FRgYG + VnR1MIwhwMTCyqEQ37qEmZVDFF0OE/9nAACtFF4Ey6OP+wAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6 + JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACOElE + QVQ4T2P4//8/QczOJyyqHpzfiE0OQwAZC8iqszAzs7CJ69o4BR768V/W2jcGXQ0KB4aFNS3dDQtnrbCb + ePCK48wTN1wXXXzge/jXf/clV55zC4hIIatF0cjIyMikElzc57z0wX+XHd/+2+//99/ywP//xlu//tdb + +eK/4Zp3/1WTOhYzARViNUAluKjTdf37/0ZTTn9TbdhwXblhwwW1/qOP1Ja9+K8w+95/6cm3/6v2Xvkv + qKjniGGAoIqRpW3/4e8S9uGdzFz82gwMDFxAzCxm4ZegtuLDf+VJ1/8rZM25IqLvnM/CximCYYCic1QN + v7x2JIwPwyrJ3XNUylddE9G2TWNmZOBDl4czmJiZMSRBmFdSyYyJgUEQmxwIYxWEYXZBCUls4sgYq6CA + prWNbtG8nXKeaVPR5XiVjSxEzf0yYXy4BBMLO6eQjoOXZvrkbbazrv53Xf/2v4CSbjBMXkhBl1/CMyNZ + qWnvGy5pNQ+YONwAfjXzAOupl/47LLr333L50/96q9/8l23YdES6cO5KuYqVW+R7Tj6SnfP0v4hryjyY + HhQDmFjYeHVKFp7WX/Xuv9Kq9/+Vd/z7r7rv/3+l7f//y676DEwDN/9L+BVvYkKLCTgDhNkkVUyVlr74 + qbbz73/VOTc/qsy89kWx+9h7qbQpJwS1bbOAscGGrB6EUTggLOqf16C55ft/HlnNAFZOXgVWdi4FRgYG + VnR1MIwhwMTCyqEQ37qEmZVDFF0OE/9nAACtFF4Ey6OP+wAAAABJRU5ErkJggg== + + + + False + + + Show a simple notification instead of a user notification. +This means that if any user data has been downloaded with the plan, a simple notification will be shown with the number of users downloaded. +The 'Image' and 'User icon' parameters will be ignored. + + \ No newline at end of file diff --git a/SCrawler/Download/AutoDownloaderEditorForm.vb b/SCrawler/Download/Automation/AutoDownloaderEditorForm.vb similarity index 88% rename from SCrawler/Download/AutoDownloaderEditorForm.vb rename to SCrawler/Download/Automation/AutoDownloaderEditorForm.vb index 7a9dcd5..e406377 100644 --- a/SCrawler/Download/AutoDownloaderEditorForm.vb +++ b/SCrawler/Download/Automation/AutoDownloaderEditorForm.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -33,7 +33,7 @@ Namespace DownloadObjects End If End Function Private Function GetFormat(ByVal FormatType As Type) As Object Implements IFormatProvider.GetFormat - Throw New NotImplementedException() + Throw New NotImplementedException("[GetFormat] is not available in the context of [AutoDownloaderEditorForm]") End Function End Class Private Sub AutoDownloaderEditorForm_Load(sender As Object, e As EventArgs) Handles Me.Load @@ -68,6 +68,7 @@ Namespace DownloadObjects .EndLoaderOperations() End With .EndLoaderOperations() + If DEF_GROUP.TXT_NAME.IsEmptyString And Settings.Automation.Count = 0 Then DEF_GROUP.TXT_NAME.Text = "Default" End With End Sub Private Sub AutoDownloaderEditorForm_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed @@ -107,22 +108,9 @@ Namespace DownloadObjects Case ActionButton.DefaultButtons.Clear : MyGroups.Clear() End Select End Sub - Private Sub OPT_DISABLED_CheckedChanged(sender As Object, e As EventArgs) Handles OPT_DISABLED.CheckedChanged - ChangeEnabled() - End Sub - Private Sub OPT_ALL_CheckedChanged(sender As Object, e As EventArgs) Handles OPT_ALL.CheckedChanged - ChangeEnabled() - End Sub - Private Sub OPT_DEFAULT_CheckedChanged(sender As Object, e As EventArgs) Handles OPT_DEFAULT.CheckedChanged - ChangeEnabled() - End Sub - Private Sub OPT_SPEC_CheckedChanged(sender As Object, e As EventArgs) Handles OPT_SPEC.CheckedChanged - ChangeEnabled() - End Sub - Private Sub OPT_GROUP_CheckedChanged(sender As Object, e As EventArgs) Handles OPT_GROUP.CheckedChanged - ChangeEnabled() - End Sub - Private Sub ChangeEnabled() Handles CH_NOTIFY.CheckedChanged, CH_NOTIFY_SIMPLE.CheckedChanged + Private Sub ChangeEnabled() Handles OPT_DISABLED.CheckedChanged, OPT_ALL.CheckedChanged, OPT_DEFAULT.CheckedChanged, + OPT_SPEC.CheckedChanged, OPT_GROUP.CheckedChanged, + CH_NOTIFY.CheckedChanged, CH_NOTIFY_SIMPLE.CheckedChanged DEF_GROUP.Enabled = OPT_SPEC.Checked TXT_GROUPS.Enabled = OPT_GROUP.Checked TXT_TIMER.Enabled = Not OPT_DISABLED.Checked diff --git a/SCrawler/Download/Automation/AutoDownloaderPauseButtons.vb b/SCrawler/Download/Automation/AutoDownloaderPauseButtons.vb new file mode 100644 index 0000000..c339c61 --- /dev/null +++ b/SCrawler/Download/Automation/AutoDownloaderPauseButtons.vb @@ -0,0 +1,236 @@ +' Copyright (C) 2023 Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY +Imports PersonalUtilities.Forms +Imports PauseModes = SCrawler.DownloadObjects.AutoDownloader.PauseModes +Imports TimeSelectionModes = PersonalUtilities.Forms.DateTimeSelectionForm.Modes +Namespace DownloadObjects + Friend Class AutoDownloaderPauseButtons : Implements IDisposable +#Region "Declarations" + Friend Event Updating() + Private WithEvents TrayButtons As AutoDownloaderPauseButtons + Friend Enum ButtonsPlace : MainFrame : Tray : Scheduler : End Enum +#Region "Controls" + Private WithEvents BTT_PAUSE_H1 As ToolStripMenuItem + Private WithEvents BTT_PAUSE_H2 As ToolStripMenuItem + Private WithEvents BTT_PAUSE_H3 As ToolStripMenuItem + Private WithEvents BTT_PAUSE_H4 As ToolStripMenuItem + Private WithEvents BTT_PAUSE_H6 As ToolStripMenuItem + Private WithEvents BTT_PAUSE_H12 As ToolStripMenuItem + Private ReadOnly SEP_1 As ToolStripSeparator + Private ReadOnly SEP_2 As ToolStripSeparator + Private ReadOnly SEP_3 As ToolStripSeparator + Private WithEvents BTT_PAUSE_UNTIL As ToolStripMenuItem + Private WithEvents BTT_PAUSE_UNLIMITED As ToolStripMenuItem + Private WithEvents BTT_PAUSE_DISABLE As ToolStripMenuItem +#End Region + Private Property Toolbar As ToolStrip + Friend Property MainFrameButtonsInstance As AutoDownloaderPauseButtons + Friend Property PlanIndex As Integer = -1 + Private ReadOnly Place As ButtonsPlace +#End Region +#Region "Initializer" + Friend Sub New(ByVal Place As ButtonsPlace) + Me.Place = Place + CreateButton(BTT_PAUSE_H1, "1 hour", PauseModes.H1) + CreateButton(BTT_PAUSE_H2, "2 hours", PauseModes.H2) + CreateButton(BTT_PAUSE_H3, "3 hours", PauseModes.H3) + CreateButton(BTT_PAUSE_H4, "4 hours", PauseModes.H4) + CreateButton(BTT_PAUSE_H6, "6 hours", PauseModes.H6) + CreateButton(BTT_PAUSE_H12, "12 hours", PauseModes.H12) + CreateButton(BTT_PAUSE_UNTIL, "Until...", PauseModes.Until, "You will be prompted to enter the time you want to pause the task(s).") + CreateButton(BTT_PAUSE_UNLIMITED, "Unlimited", PauseModes.Unlimited, "Pause the task(s) until you turn it off or close the program.") + CreateButton(BTT_PAUSE_DISABLE, "Disable", PauseModes.Disabled, "Disable pause") + SEP_1 = New ToolStripSeparator + SEP_2 = New ToolStripSeparator + SEP_3 = New ToolStripSeparator + If Place = ButtonsPlace.MainFrame Then TrayButtons = New AutoDownloaderPauseButtons(ButtonsPlace.Tray) + End Sub + Private Sub CreateButton(ByRef BTT As ToolStripMenuItem, ByVal Text As String, ByVal Tag As PauseModes, Optional ByVal ToolTip As String = "") + BTT = New ToolStripMenuItem With { + .Text = Text, + .DisplayStyle = ToolStripItemDisplayStyle.ImageAndText, + .Image = My.Resources.Pause_Blue_16, + .AutoToolTip = Not ToolTip.IsEmptyString, + .ToolTipText = ToolTip, + .Tag = Tag + } + End Sub +#End Region +#Region "Add" + Private ReadOnly Property ButtonsArray As ToolStripItem() + Get + Return {BTT_PAUSE_H1, BTT_PAUSE_H2, BTT_PAUSE_H3, BTT_PAUSE_H4, BTT_PAUSE_H6, BTT_PAUSE_H12, + SEP_1, BTT_PAUSE_UNTIL, SEP_2, BTT_PAUSE_UNLIMITED, SEP_3, BTT_PAUSE_DISABLE} + End Get + End Property + ''' MainFrame + Friend Overloads Sub AddButtons() + With MainFrameObj.MF + If Place = ButtonsPlace.MainFrame Then + .BTT_DOWN_AUTOMATION_PAUSE.DropDownItems.AddRange(ButtonsArray) + TrayButtons.AddButtons() + ElseIf Place = ButtonsPlace.Tray Then + .BTT_TRAY_PAUSE_AUTOMATION.DropDownItems.AddRange(ButtonsArray) + End If + End With + End Sub + ''' Scheduler + Friend Overloads Sub AddButtons(ByRef Destination As ToolStripDropDownItem, ByVal Toolbar As ToolStrip) + Destination.DropDownItems.AddRange(ButtonsArray) + Me.Toolbar = Toolbar + End Sub +#End Region +#Region "Buttons handlers" + Private Sub BTT_PAUSE_AUTOMATION_Click(ByVal Sender As ToolStripMenuItem, ByVal e As EventArgs) Handles BTT_PAUSE_H1.Click, BTT_PAUSE_H2.Click, + BTT_PAUSE_H3.Click, BTT_PAUSE_H4.Click, + BTT_PAUSE_H6.Click, BTT_PAUSE_H12.Click, + BTT_PAUSE_UNTIL.Click, BTT_PAUSE_UNLIMITED.Click, + BTT_PAUSE_DISABLE.Click + If (Place = ButtonsPlace.Scheduler And PlanIndex >= 0 And PlanIndex.ValueBetween(0, Settings.Automation.Count - 1)) Or Not Place = ButtonsPlace.Scheduler Then + Dim p As PauseModes = CInt(AConvert(Of Integer)(Sender.Tag, -10)) + If p > -10 Then + Dim d As Date? = Nothing + Dim _SetPauseValue As Action = Sub() + If Place = ButtonsPlace.Scheduler And PlanIndex.ValueBetween(0, Settings.Automation.Count - 1) Then + Settings.Automation(PlanIndex).Pause(d) = p + ElseIf Not Place = ButtonsPlace.Scheduler Then + Settings.Automation.Pause(d) = p + End If + End Sub + If p = PauseModes.Until Then + Using f As New DateTimeSelectionForm(TimeSelectionModes.End + TimeSelectionModes.Date + TimeSelectionModes.Time, Settings.Design) + f.ShowDialog() + If f.DialogResult = DialogResult.OK Then d = f.MyDateEnd + End Using + If d.HasValue Then _SetPauseValue.Invoke + Else + _SetPauseValue.Invoke + End If + UpdatePauseButtons() + End If + ElseIf Place = ButtonsPlace.Scheduler And PlanIndex = -1 Then + MsgBoxE({"The plan to be paused is not selected", "Pause plan"}, vbExclamation) + End If + End Sub +#End Region +#Region "Update buttons" + Friend Overloads Sub UpdatePauseButtons() Handles TrayButtons.Updating + UpdatePauseButtons(True) + End Sub + Friend Overloads Sub UpdatePauseButtons(ByVal UpdateBase As Boolean, Optional ByVal FromMainFrame As Boolean = False) + Try + With Settings.Automation + Dim p As PauseModes = PauseModes.Disabled + Dim VerifyAll As Boolean = Not Place = ButtonsPlace.Scheduler + If Place = ButtonsPlace.Scheduler Then + If PlanIndex.ValueBetween(0, Settings.Automation.Count - 1) Then p = Settings.Automation(PlanIndex).Pause + Else + p = .Pause + End If + Dim cntList As New List(Of ToolStripMenuItem) From {BTT_PAUSE_H1, BTT_PAUSE_H2, BTT_PAUSE_H3, BTT_PAUSE_H4, + BTT_PAUSE_H6, BTT_PAUSE_H12, BTT_PAUSE_UNTIL, + BTT_PAUSE_UNLIMITED, BTT_PAUSE_DISABLE} + + If UpdateBase Then UpdateBaseButton(Not p = PauseModes.Disabled) + If Not VerifyAll OrElse Settings.Automation.All(Function(ByVal plan As AutoDownloader) + If plan.Mode = AutoDownloader.Modes.None Then + Return True + Else + Return plan.Pause = p + End If + End Function) Then + Dim cnt As ToolStripMenuItem = Nothing + Select Case p + Case PauseModes.H1 : cnt = BTT_PAUSE_H1 + Case PauseModes.H2 : cnt = BTT_PAUSE_H2 + Case PauseModes.H3 : cnt = BTT_PAUSE_H3 + Case PauseModes.H4 : cnt = BTT_PAUSE_H4 + Case PauseModes.H6 : cnt = BTT_PAUSE_H6 + Case PauseModes.H12 : cnt = BTT_PAUSE_H12 + Case PauseModes.Until : cnt = BTT_PAUSE_UNTIL + Case PauseModes.Unlimited : cnt = BTT_PAUSE_UNLIMITED + End Select + If Not cnt Is Nothing Then + cntList.Remove(cnt) + ApplyButtonStyle(cnt, Sub() cnt.Checked = True) + End If + End If + + cntList.ForEach(Sub(c) ApplyButtonStyle(c, Sub() c.Checked = False)) + cntList.Clear() + End With + Catch ex As Exception + ErrorsDescriber.Execute(EDP.SendInLog, ex, "[MainFrame.UpdatePauseButtons]") + Finally + Select Case Place + Case ButtonsPlace.MainFrame : TrayButtons.UpdatePauseButtons(True, True) + Case ButtonsPlace.Scheduler : MainFrameButtonsInstance.UpdatePauseButtons() : RaiseEvent Updating() + Case ButtonsPlace.Tray : If Not FromMainFrame Then RaiseEvent Updating() + End Select + End Try + End Sub + Private Sub UpdateBaseButton(ByVal Checked As Boolean) + With MainFrameObj.MF + Select Case Place + Case ButtonsPlace.MainFrame : ApplyButtonStyle(.BTT_DOWN_AUTOMATION_PAUSE, Sub() .BTT_DOWN_AUTOMATION_PAUSE.Checked = Checked) + Case ButtonsPlace.Tray : ApplyButtonStyle(MainFrameObj.MF.BTT_TRAY_PAUSE_AUTOMATION, Sub() MainFrameObj.MF.BTT_TRAY_PAUSE_AUTOMATION.Checked = Checked) + End Select + End With + End Sub + Private Sub ApplyButtonStyle(ByVal cnt As ToolStripMenuItem, ByVal a As Action) + With MainFrameObj.MF + Select Case Place + Case ButtonsPlace.MainFrame : ControlInvokeFast(.Toolbar_TOP, cnt, a) + Case ButtonsPlace.Scheduler : ControlInvokeFast(Toolbar, cnt, a) + Case ButtonsPlace.Tray : If .InvokeRequired Then .Invoke(a) Else a.Invoke + End Select + End With + End Sub +#End Region +#Region "IDisposable Support" + Private disposedValue As Boolean = False + Protected Overloads Sub Dispose(ByVal disposing As Boolean) + If Not disposedValue Then + If disposing Then + BTT_PAUSE_H1.Dispose() + BTT_PAUSE_H2.Dispose() + BTT_PAUSE_H3.Dispose() + BTT_PAUSE_H4.Dispose() + BTT_PAUSE_H6.Dispose() + BTT_PAUSE_H12.Dispose() + BTT_PAUSE_UNTIL.Dispose() + BTT_PAUSE_UNLIMITED.Dispose() + BTT_PAUSE_DISABLE.Dispose() + SEP_1.Dispose() + SEP_2.Dispose() + SEP_3.Dispose() + End If + BTT_PAUSE_H1 = Nothing + BTT_PAUSE_H2 = Nothing + BTT_PAUSE_H3 = Nothing + BTT_PAUSE_H4 = Nothing + BTT_PAUSE_H6 = Nothing + BTT_PAUSE_H12 = Nothing + BTT_PAUSE_UNTIL = Nothing + BTT_PAUSE_UNLIMITED = Nothing + BTT_PAUSE_DISABLE = Nothing + disposedValue = True + End If + End Sub + Protected Overrides Sub Finalize() + Dispose(False) + MyBase.Finalize() + End Sub + Friend Overloads Sub Dispose() Implements IDisposable.Dispose + Dispose(True) + GC.SuppressFinalize(Me) + End Sub +#End Region + End Class +End Namespace \ No newline at end of file diff --git a/SCrawler/Download/Scheduler.vb b/SCrawler/Download/Automation/Scheduler.vb similarity index 83% rename from SCrawler/Download/Scheduler.vb rename to SCrawler/Download/Automation/Scheduler.vb index 0577628..848d098 100644 --- a/SCrawler/Download/Scheduler.vb +++ b/SCrawler/Download/Automation/Scheduler.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -6,13 +6,18 @@ ' ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY +Imports System.Threading +Imports SCrawler.DownloadObjects.Groups Imports PersonalUtilities.Functions.XML Imports PersonalUtilities.Tools -Imports SCrawler.DownloadObjects.Groups -Imports System.Threading +Imports PauseModes = SCrawler.DownloadObjects.AutoDownloader.PauseModes Namespace DownloadObjects Friend Class Scheduler : Implements IEnumerable(Of AutoDownloader), IMyEnumerator(Of AutoDownloader), IDisposable Friend Const Name_Plan As String = "Plan" + Friend Event PauseDisabled As AutoDownloader.PauseDisabledEventHandler + Private Sub OnPauseDisabled() + RaiseEvent PauseDisabled() + End Sub Private ReadOnly Plans As List(Of AutoDownloader) Private ReadOnly File As SFile = $"Settings\AutoDownload.xml" Private ReadOnly PlanWorking As Predicate(Of AutoDownloader) = Function(Plan) Plan.Working @@ -32,7 +37,10 @@ Namespace DownloadObjects End If End Using End If - If Plans.Count > 0 Then Plans.ForEach(Sub(p) p.Source = Me) + If Plans.Count > 0 Then Plans.ForEach(Sub(p) + p.Source = Me + AddHandler p.PauseDisabled, AddressOf OnPauseDisabled + End Sub) End Sub Default Friend ReadOnly Property Item(ByVal Index As Integer) As AutoDownloader Implements IMyEnumerator(Of AutoDownloader).MyEnumeratorObject Get @@ -49,6 +57,7 @@ Namespace DownloadObjects End Function Friend Sub Add(ByVal Plan As AutoDownloader) Plan.Source = Me + AddHandler Plan.PauseDisabled, AddressOf OnPauseDisabled Plans.Add(Plan) Update() End Sub @@ -92,18 +101,22 @@ Namespace DownloadObjects Friend Async Sub Start(ByVal Init As Boolean) If Count > 0 Then If Plans.Exists(PlanDownloading) Then Await Task.Run(Sub() PlansWaiter(PlanDownloading)) - For Each Plan In Plans : Plan.Start(Init) : Thread.Sleep(200) : Next + For Each Plan In Plans + Plan.Start(Init) + Thread.Sleep(1000) + Await Task.Run(Sub() PlansWaiter(PlanDownloading)) + Next End If End Sub Friend Sub [Stop]() If Count > 0 Then Plans.ForEach(Sub(p) p.Stop()) End Sub - Friend Property Pause As Boolean + Friend Property Pause(Optional ByVal LimitDate As Date? = Nothing) As PauseModes Get - If Count > 0 Then Return Plans(0).Pause Else Return False + If Count > 0 Then Return Plans.FirstOrDefault(Function(p) p.Pause >= PauseModes.Disabled).Pause Else Return PauseModes.Disabled End Get - Set(ByVal p As Boolean) - If Count > 0 Then Plans.ForEach(Sub(pp) pp.Pause = p) + Set(ByVal p As PauseModes) + If Count > 0 Then Plans.ForEach(Sub(pp) pp.Pause(LimitDate) = p) End Set End Property #End Region diff --git a/SCrawler/Download/SchedulerEditorForm.Designer.vb b/SCrawler/Download/Automation/SchedulerEditorForm.Designer.vb similarity index 98% rename from SCrawler/Download/SchedulerEditorForm.Designer.vb rename to SCrawler/Download/Automation/SchedulerEditorForm.Designer.vb index 42e1c2c..53f2a27 100644 --- a/SCrawler/Download/SchedulerEditorForm.Designer.vb +++ b/SCrawler/Download/Automation/SchedulerEditorForm.Designer.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or diff --git a/SCrawler/Download/Automation/SchedulerEditorForm.resx b/SCrawler/Download/Automation/SchedulerEditorForm.resx new file mode 100644 index 0000000..56d6ce4 --- /dev/null +++ b/SCrawler/Download/Automation/SchedulerEditorForm.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + \ No newline at end of file diff --git a/SCrawler/Download/SchedulerEditorForm.vb b/SCrawler/Download/Automation/SchedulerEditorForm.vb similarity index 64% rename from SCrawler/Download/SchedulerEditorForm.vb rename to SCrawler/Download/Automation/SchedulerEditorForm.vb index 1d308ff..2972fc8 100644 --- a/SCrawler/Download/SchedulerEditorForm.vb +++ b/SCrawler/Download/Automation/SchedulerEditorForm.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -10,9 +10,14 @@ Imports PersonalUtilities.Forms Imports PersonalUtilities.Forms.Toolbars Namespace DownloadObjects Friend Class SchedulerEditorForm +#Region "Declarations" Private WithEvents MyDefs As DefaultFormOptions Private WithEvents BTT_SKIP As ToolStripButton Private WithEvents BTT_START As ToolStripButton + Private WithEvents BTT_PAUSE As ToolStripDropDownButton + Private WithEvents PauseArr As AutoDownloaderPauseButtons +#End Region +#Region "Initializer" Friend Sub New() InitializeComponent() MyDefs = New DefaultFormOptions(Me, Settings.Design) @@ -24,15 +29,26 @@ Namespace DownloadObjects } BTT_START = New ToolStripButton With { .Text = "Start", - .Image = My.Resources.StartPic_01_Green_16, + .Image = My.Resources.StartPic_Green_16, .ToolTipText = "Run selected plan", .AutoToolTip = True } + BTT_PAUSE = New ToolStripDropDownButton With { + .Text = "Pause", + .Image = My.Resources.Pause_Blue_16, + .ToolTipText = "Pause task", + .AutoToolTip = True + } + PauseArr = New AutoDownloaderPauseButtons(AutoDownloaderPauseButtons.ButtonsPlace.Scheduler) With { + .MainFrameButtonsInstance = MainFrameObj.PauseButtons} End Sub +#End Region +#Region "Form handlers" Private Sub SchedulerEditorForm_Load(sender As Object, e As EventArgs) Handles Me.Load With MyDefs .MyViewInitialize() - .AddEditToolbarPlus({BTT_START, BTT_SKIP}) + .AddEditToolbarPlus({BTT_START, BTT_SKIP, BTT_PAUSE}) + PauseArr.AddButtons(BTT_PAUSE, .MyEditToolbar.ToolStrip) Refill() .EndLoaderOperations(False) End With @@ -40,19 +56,29 @@ Namespace DownloadObjects Private Sub SchedulerEditorForm_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown If e.KeyCode = Keys.Escape Then Close() End Sub + Private Sub SchedulerEditorForm_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed + PauseArr.Dispose() + End Sub +#End Region + Private _RefillInProgress As Boolean = False Private Sub Refill() Handles MyDefs.ButtonUpdateClick Try - LIST_PLANS.Items.Clear() - If Settings.Automation.Count > 0 Then - LIST_PLANS.Items.AddRange(Settings.Automation.Select(Function(a) a.ToString()).Cast(Of Object).ToArray) - If _LatestSelected.ValueBetween(0, LIST_PLANS.Items.Count - 1) Then LIST_PLANS.SelectedIndex = _LatestSelected - Else - _LatestSelected = -1 + If Not _RefillInProgress Then + _RefillInProgress = True + LIST_PLANS.Items.Clear() + If Settings.Automation.Count > 0 Then + LIST_PLANS.Items.AddRange(Settings.Automation.Select(Function(a) a.ToString()).Cast(Of Object).ToArray) + If _LatestSelected.ValueBetween(0, LIST_PLANS.Items.Count - 1) Then LIST_PLANS.SelectedIndex = _LatestSelected + Else + _LatestSelected = -1 + End If + _RefillInProgress = False End If Catch ex As Exception - ErrorsDescriber.Execute(EDP.SendInLog, ex) + ErrorsDescriber.Execute(EDP.SendInLog, ex, "[DownloadObjects.SchedulerEditorForm.Refill]") End Try End Sub +#Region "Add, Edit, Delete" Private Sub MyDefs_ButtonAddClick(ByVal Sender As Object, ByVal e As EditToolbarEventArgs) Handles MyDefs.ButtonAddClick Dim a As New AutoDownloader(True) Using f As New AutoDownloaderEditorForm(a) @@ -75,30 +101,37 @@ Namespace DownloadObjects End Sub Private _DeleteInProgress As Boolean = False Private Async Sub MyDefs_ButtonDeleteClickE(ByVal Sender As Object, ByVal e As EditToolbarEventArgs) Handles MyDefs.ButtonDeleteClickE + Const MsgTitle$ = "Deleting a plan..." If Not _DeleteInProgress Then If _LatestSelected.ValueBetween(0, LIST_PLANS.Items.Count - 1) Then _DeleteInProgress = True Dim n$ = Settings.Automation(_LatestSelected).Name - If MsgBoxE({$"Are you sure you want to delete the [{n}] plan?", "Deleting a plan..."}, vbExclamation + vbYesNo) = vbYes Then + If MsgBoxE({$"Are you sure you want to delete the [{n}] plan?", MsgTitle}, vbExclamation + vbYesNo) = vbYes Then Await Settings.Automation.RemoveAt(_LatestSelected) Refill() - MsgBoxE($"Plan [{n}] deleted") + MsgBoxE({$"Plan [{n}] deleted", MsgTitle}) End If _DeleteInProgress = False Else - MsgBoxE("You have not selected a plan to delete.", vbExclamation) + MsgBoxE({"You have not selected a plan to delete.", MsgTitle}, vbExclamation) End If Else - MsgBoxE({"One of the plans is currently in progress. Wait until this plan is stopped and deleted.", "Deleting a plan"}, vbExclamation) + MsgBoxE({"One of the plans is currently in progress. Wait until this plan is stopped and deleted.", MsgTitle}, vbExclamation) End If End Sub +#End Region +#Region "List handlers" Private _LatestSelected As Integer = -1 Private Sub LIST_PLANS_SelectedIndexChanged(sender As Object, e As EventArgs) Handles LIST_PLANS.SelectedIndexChanged _LatestSelected = LIST_PLANS.SelectedIndex + PauseArr.PlanIndex = _LatestSelected + PauseArr.UpdatePauseButtons(False) End Sub Private Sub LIST_PLANS_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles LIST_PLANS.MouseDoubleClick Edit() End Sub +#End Region +#Region "Start, Skip, Pause" Private Sub BTT_START_Click(sender As Object, e As EventArgs) Handles BTT_START.Click If _LatestSelected.ValueBetween(0, LIST_PLANS.Items.Count - 1) Then With Settings.Automation(_LatestSelected) : .Start(.IsNewPlan) : End With @@ -111,5 +144,9 @@ Namespace DownloadObjects Refill() End If End Sub + Private Sub PauseArr_Updating() Handles PauseArr.Updating + Refill() + End Sub +#End Region End Class End Namespace \ No newline at end of file diff --git a/SCrawler/Download/DownloadFeedForm.resx b/SCrawler/Download/DownloadFeedForm.resx deleted file mode 100644 index 53ad408..0000000 --- a/SCrawler/Download/DownloadFeedForm.resx +++ /dev/null @@ -1,203 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - False - - - 17, 17 - - - - - AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAABMLAAATCwAAAAAAAAAA - AAAZeOoAGXjqJBl46p4ZeOrtGXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl4 - 6v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq7Rl4 - 6p4ZeOokGXjqABl46iQZeOq+GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl4 - 6v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl4 - 6v8ZeOr/GXjq/xl46r4ZeOokGXjqnhl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl4 - 6v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl4 - 6v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46p4ZeOrrGXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GHfq/xh3 - 6v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8Yd+r/F3fq/xd36v8Xd+r/GHjq/xl46v8ZeOr/GHjq/xd3 - 6v8Xd+r/F3fq/xh36v8ZeOr/GXjq/xl46v8ZeOr/GXjq6xl46v4ZeOr/GXjq/xl46v8ZeOr/GHfq/xl4 - 6v8pguz/KYHr/xl46v8Yd+r/GXjq/xl46v8ZeOr/GXjq/yqC7P8yh+z/Mofs/zKH7P8mf+v/GXjq/xl4 - 6v8hfev/Mofs/zOH7P8zh+z/L4Xs/xt56v8ZeOr/GXjq/xl46v8ZeOr+GXjq/xl46v8ZeOr/GXjq/xh3 - 6v8ogev/j731/9Xm+//T5fv/ibr0/yV/6/8Yd+r/GXjq/xl46v8ceur/o8n3/+Pv/P/g7fz/4+78/3qx - 8/8Wdur/Fnbq/1id8P/e7Pz/4e38/+Pu/P/A2vn/KoLs/xh36v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl4 - 6v8ZeOr/GXjq/4289f/+/v/////////////9/v//hbf0/xh36v8ZeOr/GHjq/yN+6//J3/r///////// - ////////fLLz/xV26v8Vdur/bKjy//7+/////////////9Pl+/8ogev/GHfq/xl46v8ZeOr/GXjq/xl4 - 6v8ZeOr/GXjq/xh36v8ogev/0eT7///////////////////////K4Pr/JH/r/xh46v8Xd+r/N4rt/+Pv - /P////////////v9//9hovH/FXbq/xV26v+CtfT/////////////////xN36/yF96/8YeOr/GXjq/xl4 - 6v8ZeOr/GXjq/xl46v8ZeOr/GHfq/yeA6//P4/v//////////////////////8jf+v8jfuv/GHjq/xV2 - 6v9npvH/+/3/////////////6vP9/z+P7v8Xd+r/GXjq/6PJ9/////////////////+rzvf/Gnnq/xl4 - 6v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GHjq/4W39P/8/f/////////////6/P//fLLz/xh3 - 6v8YeOr/IHzr/7bU+P/////////////////C2/n/In3r/xh36v8mgOv/zOH6/////////////////4e4 - 9P8Wdur/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8Yd+r/JH7r/4C18//I3/r/x976/3uy - 8/8hfev/GHjq/xZ26v9lpfH/9fn+/////////////////32z8/8Wdur/Fnbq/0qU7v/w9v7///////// - ///4+/7/Wp7w/xV26v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8YeOr/GHfq/yN+ - 6/8ifev/F3fq/xh46v8Wdur/QI/u/9jo+//////////////////a6vz/NYnt/xd36v8Xd+r/i7v0//// - /////////////9zr/P8yhuz/F3fq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl4 - 6v8ZeOr/GHjq/xh46v8YeOr/Fnbq/z+O7f/I3/r//////////////////P3//32z8/8Xd+r/F3fq/zCF - 7P/V5vv/////////////////pMr3/xp56v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl4 - 6v8ZeOr/GXjq/xh46v8Xd+r/FXbq/x976/9jo/H/1+f7//////////////////////+41fj/JoDr/xh3 - 6v8Xd+r/frPz//3+//////////////b6/v9anvD/Fnbq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl4 - 6v8ZeOr/GXjq/xl46v8beer/IX3r/zSI7P9jpPH/s9P4//T5/v//////////////////////0uX7/z2N - 7f8Xd+r/Fnfq/z2N7f/d6/z/////////////////wNr5/yR+6/8YeOr/GXjq/xl46v8ZeOr/GXjq/xl4 - 6v8ZeOr/GXjq/xl46v8Yd+r/JoDr/53F9v/G3vr/4e38//n8/v///////////////////////////9Pl - +/9IlO7/Fnfq/xh36v8ifev/rc/4//////////////////b6/v9jo/H/Fnbq/xl46v8ZeOr/GXjq/xl4 - 6v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xh36v8thOz/2+r8//////////////////////////////////z9 - //+61/n/Po7t/xZ36v8YeOr/G3nq/4m69P/7/P//////////////////r9D4/yF86/8YeOr/GXjq/xl4 - 6v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GHfq/y2E7P/b6vz///////////////////////7+ - ///e7Pz/gLTz/yeA6/8Xd+r/GHfq/xt56v97svP/9Pj+/////////////////+Dt/P9DkO7/Fnfq/xl4 - 6v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8Yd+r/LYTs/9vq/P///////P3//+31 - /f/G3vr/gbX0/ziK7f8Xd+r/GHfq/xd36v8hfev/h7j0//T4/v/////////////////0+P7/bKny/xd3 - 6v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xh46v8kfuv/e7Hz/4G1 - 9P9mpfH/Q5Hu/yR+6/8Wdur/F3fq/xh36v8Wdur/OYvt/6rN9//5/P7/////////////////+vz//4q7 - 9P8ceur/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl4 - 6v8Wdur/FXbq/xV26v8Wdur/GHfq/xZ26v8Wdur/K4Ps/3ev8//a6fz///////////////////////r8 - //+VwfX/IHzr/xh36v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl4 - 6v8ZeOr/GXjq/xZ26v8Vdur/FXbq/xd36v8ifev/QpDu/4K29P/Q4/v/+/3///////////////////// - ///1+f7/jLz1/yF96/8Yd+r/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl4 - 6v8ZeOr/GXjq/xl46v8ee+r/T5fv/2Oj8f94sPP/msT2/8Td+v/s9P3//v7///////////////////// - ////////4+/8/3Cr8v8ceur/GHfq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl4 - 6v8ZeOr/GXjq/xl46v8ZeOr/GHfq/yyD7P/V5vv//v////////////////////////////////////// - ////////+Pv+/7XU+P9Gku7/F3fq/xh46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl4 - 6v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8Yd+r/LYPs/9rp/P////////////////////////////// - ////////+Pv+/8fe+v9pp/H/In7r/xZ26v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl4 - 6v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xh36v8thOz/2un8//////////////////// - ///7/f//4+/8/63P+P9io/H/J4Dr/xZ26v8YeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl4 - 6v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GHfq/yqC7P+/2vn/3Ov8/83i - +v+11Pj/kb71/2Ok8f83iu3/HHrq/xZ26v8Yd+r/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl4 - 6v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr+GXjq/xl46v8ZeOr/G3nq/y6E - 7P8thOz/JX/r/xx66v8Xd+r/FXbq/xd36v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl4 - 6v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/hl46usZeOr/GXjq/xl4 - 6v8ZeOr/GHfq/xh36v8YeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl4 - 6v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOrrGXjqnhl4 - 6v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl4 - 6v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl4 - 6p4ZeOokGXjqvhl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl4 - 6v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl4 - 6v8ZeOq+GXjqJBl46gAZeOokGXjqnxl46u0ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl4 - 6v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl46v8ZeOr/GXjq/xl4 - 6v8ZeOrtGXjqnhl46iQZeOoAgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAE= - - - \ No newline at end of file diff --git a/SCrawler/Download/DownloadProgress.vb b/SCrawler/Download/DownloadProgress.vb index ff087e4..6b341bb 100644 --- a/SCrawler/Download/DownloadProgress.vb +++ b/SCrawler/Download/DownloadProgress.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -11,8 +11,12 @@ Imports Download = SCrawler.Plugin.ISiteSettings.Download Imports TDJob = SCrawler.DownloadObjects.TDownloader.Job Namespace DownloadObjects Friend Class DownloadProgress : Implements IDisposable +#Region "Events" Friend Event DownloadDone As NotificationEventHandler Friend Event ProgressMaximumChanged() +#End Region +#Region "Declarations" +#Region "Controls" Private ReadOnly TP_MAIN As TableLayoutPanel Private ReadOnly TP_CONTROLS As TableLayoutPanel Private WithEvents BTT_START As Button @@ -20,8 +24,10 @@ Namespace DownloadObjects Private WithEvents BTT_OPEN As Button Private ReadOnly PR_MAIN As ProgressBar Private ReadOnly LBL_INFO As Label +#End Region Private ReadOnly Property Instance As API.Base.ProfileSaved Friend ReadOnly Property Job As TDJob +#End Region #Region "Initializer" Friend Sub New(ByVal _Job As TDJob) Job = _Job @@ -32,7 +38,7 @@ Namespace DownloadObjects TP_CONTROLS = New TableLayoutPanel With {.Margin = New Padding(0), .Dock = DockStyle.Fill} PR_MAIN = New ProgressBar With {.Dock = DockStyle.Fill} LBL_INFO = New Label With {.Text = String.Empty, .Dock = DockStyle.Fill} - CreateButton(BTT_STOP, My.Resources.Delete) + CreateButton(BTT_STOP, My.Resources.DeletePic_24) If Job.Type = Download.Main Then LBL_INFO.Margin = New Padding(3) @@ -58,8 +64,8 @@ Namespace DownloadObjects Else LBL_INFO.Padding = New Padding(3, 0, 3, 0) LBL_INFO.TextAlign = ContentAlignment.TopCenter - CreateButton(BTT_START, My.Resources.StartPic_01_Green_16) - CreateButton(BTT_OPEN, PersonalUtilities.My.Resources.OpenFolderPic) + CreateButton(BTT_START, My.Resources.StartPic_Green_16) + CreateButton(BTT_OPEN, PersonalUtilities.My.Resources.FolderOpenPic_Black_16) With TP_CONTROLS With .ColumnStyles .Add(New ColumnStyle(SizeType.Absolute, 30)) @@ -139,7 +145,7 @@ Namespace DownloadObjects Job.Progress.InformationTemporary = $"{Job.Host.Name} downloading started" Job.Start() Instance.Download(Job.Token) - RaiseEvent DownloadDone($"Downloading saved {Job.Host.Name} posts is completed") + RaiseEvent DownloadDone(SettingsCLS.NotificationObjects.SavedPosts, $"Downloading saved {Job.Host.Name} posts is completed") Catch ex As Exception Job.Progress.InformationTemporary = $"{Job.Host.Name} downloading error" ErrorsDescriber.Execute(EDP.LogMessageValue, ex, {$"{Job.Host.Name} saved posts downloading error", "Saved posts"}) diff --git a/SCrawler/Download/DownloadSavedPostsForm.Designer.vb b/SCrawler/Download/DownloadSavedPostsForm.Designer.vb index 21e2149..185702a 100644 --- a/SCrawler/Download/DownloadSavedPostsForm.Designer.vb +++ b/SCrawler/Download/DownloadSavedPostsForm.Designer.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -92,7 +92,7 @@ Partial Friend Class DownloadSavedPostsForm : Inherits System.Windows.Forms.Form Me.ClientSize = New System.Drawing.Size(484, 41) Me.Controls.Add(Me.TP_MAIN) Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle - Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.Icon = Global.SCrawler.My.Resources.BookmarkIcon_32 Me.MaximizeBox = False Me.MaximumSize = New System.Drawing.Size(500, 80) Me.MinimumSize = New System.Drawing.Size(500, 80) diff --git a/SCrawler/Download/DownloadSavedPostsForm.resx b/SCrawler/Download/DownloadSavedPostsForm.resx index f9661ce..850f28f 100644 --- a/SCrawler/Download/DownloadSavedPostsForm.resx +++ b/SCrawler/Download/DownloadSavedPostsForm.resx @@ -117,330 +117,15 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + False - - + + False - - - 17, 17 - + - - - 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 - 2/+ioqL/mpqa/8nJyf/o6Oj/9PT0//n5+f/5+fn/9PT0/+jo6P/Jycn/mpqa/6Kiov/b29v/+fn5wf39 - /T729vYA9vb2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vYA9vb2AP// - /z77+/vB0NDQ/35+fv9paWn/l5eX/76+vv/X19f/5OTk/+Tk5P/X19f/vr6+/5eXl/9paWn/fn5+/9DQ - 0P/7+/vB////Pvb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb2 - 9gD29vYA////Pvv7+8HNzc3/c3Nz/0pKSv9ZWVn/eHh4/6Ghof+3t7f/t7e3/6Ghof94eHj/WVlZ/0pK - Sv9zc3P/zc3N//v7+8H///8+9vb2APb29gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA9vb2APb29gD///8+/Pz8wcvLy/9vb2//Ozs7/zs7O/9PT0//c3Nz/4eHh/+Hh4f/c3Nz/09P - T/87Ozv/Ozs7/29vb//Ly8v//Pz8wf///z729vYA9vb2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD29vYA9vb2AP///z78/PzBy8vL/29vb/89PT3/PT09/0VFRf9RUVH/V1dX/1dX - V/9RUVH/RUVF/z09Pf89PT3/b29v/8vLy//8/PzB////Pvb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA////Pvz8/MHMzMz/b29v/z4+Pv8/Pz//QUFB/0BA - QP9AQED/QEBA/0BAQP9BQUH/Pz8//z4+Pv9vb2//zMzM//z8/MH///8+9vb2APb29gAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2APb29gD///8+/Pz8wczMzP9vb2//Pj4+/z8/ - P/9CQkL/QUFB/0FBQf9BQUH/QUFB/0JCQv8/Pz//Pj4+/29vb//MzMz//Pz8wf///z729vYA9vb2AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vYA9vb2AP///z78/PzBzMzM/29v - b/8+Pj7/Pz8//0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/z8/P/8+Pj7/b29v/8zMzP/8/PzB////Pvb2 - 9gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA////Pvz8 - /MHMzMz/b29v/z4+Pv8/Pz//QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/Pz8//z4+Pv9vb2//zMzM//z8 - /MH///8+9vb2APb29gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2APb2 - 9gD///8+/Pz8wczMzP9vb2//Pj4+/z8/P/9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv8/Pz//Pj4+/29v - b//MzMz//Pz8wf///z729vYA9vb2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD29vYA9vb2AP///z78/PzBzMzM/29vb/8+Pj7/Pz8//0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/z8/ - P/8+Pj7/b29v/8zMzP/8/PzB////Pvb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAPb29gD29vYA////Pvz8/MHMzMz/b29v/z4+Pv8/Pz//QkJC/0JCQv9CQkL/QkJC/0JC - Qv9CQkL/Pz8//z4+Pv9vb2//zMzM//z8/MH///8+9vb2APb29gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA9vb2APb29gD///8+/Pz8wczMzP9vb2//Pj4+/z8/P/9CQkL/QkJC/0JC - Qv9CQkL/QkJC/0JCQv8/Pz//Pj4+/29vb//MzMz//Pz8wf///z729vYA9vb2AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vYA9vb2AP///z78/PzBzMzM/29vb/8+Pj7/Pz8//0JC - Qv9CQkL/QkJC/0JCQv9CQkL/QkJC/z8/P/8+Pj7/b29v/8zMzP/8/PzB////Pvb29gD29vYAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA////Pvz8/MHMzMz/b29v/z4+ - Pv8/Pz//QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/Pz8//z4+Pv9vb2//zMzM//z8/MH///8+9vb2APb2 - 9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2APb29gD///8+/Pz8wczM - zP9vb2//Pj4+/z8/P/9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv8/Pz//Pj4+/29vb//MzMz//Pz8wf// - /z729vYA9vb2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vYA9vb2AP// - /z78/PzBzMzM/29vb/8+Pj7/Pz8//0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/z8/P/8+Pj7/b29v/8zM - zP/8/PzB////Pvb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb2 - 9gD29vYA////Pvz8/MHMzMz/b29v/z4+Pv8/Pz//QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/Pz8//z4+ - Pv9vb2//zMzM//z8/MH///8+9vb2APb29gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA9vb2APb29gD///8+/Pz8wczMzP9vb2//Pj4+/z8/P/9CQkL/QkJC/0JCQv9CQkL/QkJC/0JC - Qv8/Pz//Pj4+/29vb//MzMz//Pz8wf///z729vYA9vb2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD29vYA9vb2AP///z78/PzBy8vL/21tbf87Ozv/PT09/z8/P/8/Pz//Pz8//z8/ - P/8/Pz//Pz8//z09Pf87Ozv/bW1t/8vLy//8/PzB////Pvb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA////Pvz8/MHLy8v/bGxs/zk5Of87Ozv/Pj4+/z4+ - Pv8+Pj7/Pj4+/z4+Pv8+Pj7/Ozs7/zk5Of9sbGz/y8vL//z8/MH///8+9vb2APb29gAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2APb29gD+/v4++vr6wdbW1v+RkZH/bGxs/21t - bf9vb2//b29v/29vb/9vb2//b29v/29vb/9tbW3/bGxs/5GRkf/W1tb/+vr6wf7+/j729vYA9vb2AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vYA9vb2APn5+T739/fB7Ozs/9bW - 1v/Ly8v/y8vL/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8vLy//Ly8v/1tbW/+zs7P/39/fB+fn5Pvb2 - 9gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA9vb2Lvb2 - 9pH39/fD+vr6wfz8/L/8/Py//Pz8v/z8/L/8/Py//Pz8v/z8/L/8/Py//Pz8v/z8/L/6+vrB9/f3w/b2 - 9pH29vYu9vb2APb29gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2APb2 - 9gD19fUP9vb2Lvj4+D79/f09////PP///zz///88////PP///zz///88////PP///zz///88////PP39 - /T34+Pg+9vb2LvX19Q/29vYA9vb2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////gfgf/4H - 4H/+AAB//gAAf/4AAH/+AAB//gAAf/4AAH/+AAB//gAAf/4AAH/+AAB//gAAf/4AAH/+AAB//gAAf/4A - AH/+AAB//gAAf/4AAH/+AAB//gAAf/4AAH/+AAB//gAAf/4AAH/+AAB//gAAf/4AAH/+AAB//////ygA - AAAwAAAAYAAAAAEAIAAAAAAAACQAAMMOAADDDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA9vb2Afb29gX29vYK9vb2Dvb29hD29vYQ9vb2Dvb2 - 9gr29vYF9vb2Afb29gD29vYAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA9vb2Afb29gX29vYK9vb2Dvb2 - 9hD29vYQ9vb2Dvb29gr29vYF9vb2Afb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA9vb2BPb29hr29vY29vb2S/b2 - 9lT29vZU9vb2S/b29jb29vYa9vb2BPb29gD29vYAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA9vb2BPb2 - 9hr29vY29vb2S/b29lT29vZU9vb2S/b29jb29vYa9vb2BPb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA9vb2Cfb2 - 9jf29vZy9vb2n/b29rL29vay9vb2n/b29nL29vY39vb2Cfb29gD29vYAAAAAAAAAAAAAAAAAAAAAAPb2 - 9gD29vYA9vb2Cfb29jf29vZy9vb2n/b29rL29vay9vb2n/b29nL29vY39vb2Cfb29gD29vYAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb2 - 9gD29vYA9vb2Dfb29k729vaj9vb24/b29v729vb+9vb25Pb29qj29vZX9vb2G/b29gf29vYJ9vb2Dvb2 - 9g729vYO9vb2Dvb29gn29vYH9vb2G/b29lf29vao9vb25Pb29v729vb+9vb24/b29qP29vZO9vb2Dfb2 - 9gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAPb29gD29vYA9vb2Dvb29lL29vat9vb28ff39//4+Pj/+fn59fn5+cf5+fmK+Pj4XPf3 - 90339/dO9vb2Uvb29lL29vZS9vb2Uvf390739/dN+Pj4XPn5+Yr5+fnH+fn59fj4+P/39/f/9vb28fb2 - 9q329vZS9vb2Dvb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA9vb2Dvb29lL29vat9vb28fj4+P/5+fn/+vr6+vr6 - +uT5+fnH+Pj4sff396r29var9vb2rfb29q329vat9vb2rfb29qv39/eq+Pj4sfn5+cf6+vrk+vr6+vn5 - +f/4+Pj/9vb28fb29q329vZS9vb2Dvb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA9vb2Dvf391L29vat9vb28fPz - 8//w8PD/7+/v/u/v7/ry8vL19PT08vX19fD29vbx9vb28fb29vH29vbx9vb28fb29vH19fXw9PT08vLy - 8vXv7+/67+/v/vDw8P/z8/P/9vb28fb29q339/dS9vb2Dvb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA9vb2Dvn5 - +VL4+Pit8/Pz8efn5//W1tb/zMzM/9LS0v/h4eH/7e3t//Pz8//29vb/9/f3//j4+P/4+Pj/9/f3//b2 - 9v/z8/P/7e3t/+Hh4f/S0tL/zMzM/9bW1v/n5+f/8/Pz8fj4+K35+flS9vb2Dvb29gD29vYAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb2 - 9gD29vYA9vb2Dv39/VL7+/ut8PDw8dbW1v+zs7P/np6e/6qqqv/Hx8f/4eHh/+7u7v/09PT/+Pj4//r6 - +v/6+vr/+Pj4//T09P/u7u7/4eHh/8fHx/+qqqr/np6e/7Ozs//W1tb/8PDw8fv7+639/f1S9vb2Dvb2 - 9gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAPb29gD29vYA9vb2Dv///1L9/f2t7u7u8cjIyP+Wlpb/eHh4/4WFhf+pqan/ysrK/9zc - 3P/o6Oj/7+/v//Pz8//z8/P/7+/v/+jo6P/c3Nz/ysrK/6mpqf+FhYX/eHh4/5aWlv/IyMj/7u7u8f39 - /a3///9S9vb2Dvb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA9vb2Dv///1L+/v6t7Ozs8cLCwv+IiIj/YmJi/2dn - Z/+FhYX/oqKi/7i4uP/Ly8v/2NjY/97e3v/e3t7/2NjY/8vLy/+4uLj/oqKi/4WFhf9nZ2f/YmJi/4iI - iP/CwsL/7Ozs8f7+/q3///9S9vb2Dvb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA9vb2Dv///1L+/v6t7Ozs8b+/ - v/+Dg4P/VVVV/09PT/9dXV3/cnJy/4qKiv+kpKT/uLi4/8DAwP/AwMD/uLi4/6SkpP+Kior/cnJy/11d - Xf9PT0//VVVV/4ODg/+/v7//7Ozs8f7+/q3///9S9vb2Dvb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA9vb2Dv// - /1L///+t7Ozs8b6+vv+AgID/Tk5O/z4+Pv9BQUH/Tk5O/2VlZf+CgoL/l5eX/6Ghof+hoaH/l5eX/4KC - gv9lZWX/Tk5O/0FBQf8+Pj7/Tk5O/4CAgP++vr7/7Ozs8f///63///9S9vb2Dvb29gD29vYAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb2 - 9gD29vYA9vb2Dv///1L///+t6+vr8b29vf9+fn7/S0tL/zg4OP84ODj/QUFB/1FRUf9oaGj/eHh4/39/ - f/9/f3//eHh4/2hoaP9RUVH/QUFB/zg4OP84ODj/S0tL/35+fv+9vb3/6+vr8f///63///9S9vb2Dvb2 - 9gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAPb29gD29vYA9vb2Dv///1L///+t6+vr8b6+vv9+fn7/S0tL/zo6Ov86Ojr/QUFB/0hI - SP9TU1P/W1tb/19fX/9fX1//W1tb/1NTU/9ISEj/QUFB/zo6Ov86Ojr/S0tL/35+fv++vr7/6+vr8f// - /63///9S9vb2Dvb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA9vb2Dv///1L///+t6+vr8b6+vv9/f3//TExM/zw8 - PP8+Pj7/QkJC/0RERP9FRUX/R0dH/0dHR/9HR0f/R0dH/0VFRf9ERET/QkJC/z4+Pv88PDz/TExM/39/ - f/++vr7/6+vr8f///63///9S9vb2Dvb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA9vb2Dv///1L///+t6+vr8b6+ - vv9/f3//TExM/zw8PP8+Pj7/QkJC/0FBQf9AQED/Pz8//z8/P/8/Pz//Pz8//0BAQP9BQUH/QkJC/z4+ - Pv88PDz/TExM/39/f/++vr7/6+vr8f///63///9S9vb2Dvb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA9vb2Dv// - /1L///+t6+vr8b6+vv9/f3//TExM/zw8PP8+Pj7/QkJC/0FBQf9BQUH/QEBA/0BAQP9AQED/QEBA/0FB - Qf9BQUH/QkJC/z4+Pv88PDz/TExM/39/f/++vr7/6+vr8f///63///9S9vb2Dvb29gD29vYAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb2 - 9gD29vYA9vb2Dv///1L///+t6+vr8b6+vv9/f3//TExM/zw8PP8+Pj7/QkJC/0JCQv9CQkL/QkJC/0JC - Qv9CQkL/QkJC/0JCQv9CQkL/QkJC/z4+Pv88PDz/TExM/39/f/++vr7/6+vr8f///63///9S9vb2Dvb2 - 9gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAPb29gD29vYA9vb2Dv///1L///+t6+vr8b6+vv9/f3//TExM/zw8PP8+Pj7/QkJC/0JC - Qv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/z4+Pv88PDz/TExM/39/f/++vr7/6+vr8f// - /63///9S9vb2Dvb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA9vb2Dv///1L///+t6+vr8b6+vv9/f3//TExM/zw8 - PP8+Pj7/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/z4+Pv88PDz/TExM/39/ - f/++vr7/6+vr8f///63///9S9vb2Dvb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA9vb2Dv///1L///+t6+vr8b6+ - vv9/f3//TExM/zw8PP8+Pj7/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/z4+ - Pv88PDz/TExM/39/f/++vr7/6+vr8f///63///9S9vb2Dvb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA9vb2Dv// - /1L///+t6+vr8b6+vv9/f3//TExM/zw8PP8+Pj7/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JC - Qv9CQkL/QkJC/z4+Pv88PDz/TExM/39/f/++vr7/6+vr8f///63///9S9vb2Dvb29gD29vYAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb2 - 9gD29vYA9vb2Dv///1L///+t6+vr8b6+vv9/f3//TExM/zw8PP8+Pj7/QkJC/0JCQv9CQkL/QkJC/0JC - Qv9CQkL/QkJC/0JCQv9CQkL/QkJC/z4+Pv88PDz/TExM/39/f/++vr7/6+vr8f///63///9S9vb2Dvb2 - 9gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAPb29gD29vYA9vb2Dv///1L///+t6+vr8b6+vv9/f3//TExM/zw8PP8+Pj7/QkJC/0JC - Qv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/z4+Pv88PDz/TExM/39/f/++vr7/6+vr8f// - /63///9S9vb2Dvb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA9vb2Dv///1L///+t6+vr8b6+vv9/f3//TExM/zw8 - PP8+Pj7/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/z4+Pv88PDz/TExM/39/ - f/++vr7/6+vr8f///63///9S9vb2Dvb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA9vb2Dv///1L///+t6+vr8b6+ - vv9/f3//TExM/zw8PP8+Pj7/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/z4+ - Pv88PDz/TExM/39/f/++vr7/6+vr8f///63///9S9vb2Dvb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA9vb2Dv// - /1L///+t6+vr8b6+vv9/f3//TExM/zw8PP8+Pj7/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JC - Qv9CQkL/QkJC/z4+Pv88PDz/TExM/39/f/++vr7/6+vr8f///63///9S9vb2Dvb29gD29vYAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb2 - 9gD29vYA9vb2Dv///1L///+t6+vr8b6+vv9/f3//TExM/zw8PP8+Pj7/QkJC/0JCQv9CQkL/QkJC/0JC - Qv9CQkL/QkJC/0JCQv9CQkL/QkJC/z4+Pv88PDz/TExM/39/f/++vr7/6+vr8f///63///9S9vb2Dvb2 - 9gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAPb29gD29vYA9vb2Dv///1L///+t6+vr8b6+vv9/f3//TExM/zw8PP8+Pj7/QkJC/0JC - Qv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/z4+Pv88PDz/TExM/39/f/++vr7/6+vr8f// - /63///9S9vb2Dvb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA9vb2Dv///1L///+t6+vr8b6+vv9/f3//TExM/zw8 - PP8+Pj7/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/z4+Pv88PDz/TExM/39/ - f/++vr7/6+vr8f///63///9S9vb2Dvb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA9vb2Dv///1L///+t6+vr8b6+ - vv9/f3//TExM/zw8PP8+Pj7/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/z4+ - Pv88PDz/TExM/39/f/++vr7/6+vr8f///63///9S9vb2Dvb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA9vb2Dv// - /1L///+t6+vr8b6+vv9/f3//TExM/zw8PP8+Pj7/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JC - Qv9CQkL/QkJC/z4+Pv88PDz/TExM/39/f/++vr7/6+vr8f///63///9S9vb2Dvb29gD29vYAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb2 - 9gD29vYA9vb2Dv///1L///+t6+vr8b6+vv9/f3//TExM/zw8PP8+Pj7/QkJC/0JCQv9CQkL/QkJC/0JC - Qv9CQkL/QkJC/0JCQv9CQkL/QkJC/z4+Pv88PDz/TExM/39/f/++vr7/6+vr8f///63///9S9vb2Dvb2 - 9gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAPb29gD29vYA9vb2Dv///1L///+t6+vr8b6+vv9/f3//TExM/zw8PP8+Pj7/QkJC/0JC - Qv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/z4+Pv88PDz/TExM/39/f/++vr7/6+vr8f// - /63///9S9vb2Dvb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA9vb2Dv///1L///+t6+vr8b6+vv9/f3//TExM/zw8 - PP8+Pj7/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/z4+Pv88PDz/TExM/39/ - f/++vr7/6+vr8f///63///9S9vb2Dvb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA9vb2Dv///1L///+t6+vr8b6+ - vv9/f3//TExM/zw8PP8+Pj7/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/z4+ - Pv88PDz/TExM/39/f/++vr7/6+vr8f///63///9S9vb2Dvb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA9vb2Dv// - /1L///+t6+vr8by8vP98fHz/SEhI/zg4OP86Ojr/Pj4+/z4+Pv8+Pj7/Pj4+/z4+Pv8+Pj7/Pj4+/z4+ - Pv8+Pj7/Pj4+/zo6Ov84ODj/SEhI/3x8fP+8vLz/6+vr8f///63///9S9vb2Dvb29gD29vYAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb2 - 9gD29vYA9vb2Dv///1L///+t6+vr8by8vP97e3v/RkZG/zY2Nv84ODj/PDw8/zw8PP88PDz/PDw8/zw8 - PP88PDz/PDw8/zw8PP88PDz/PDw8/zg4OP82Njb/RkZG/3t7e/+8vLz/6+vr8f///63///9S9vb2Dvb2 - 9gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAPb29gD29vYA9vb2Dv///1L+/v6t7Ozs8cHBwf+FhYX/VVVV/0ZGRv9ISEj/TExM/0xM - TP9MTEz/TExM/0xMTP9MTEz/TExM/0xMTP9MTEz/TExM/0hISP9GRkb/VVVV/4WFhf/BwcH/7Ozs8f7+ - /q3///9S9vb2Dvb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA9vb2Dv7+/lL8/Pyt7+/v8dHR0f+np6f/hYWF/3t7 - e/98fHz/f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//3x8fP97e3v/hYWF/6en - p//R0dH/7+/v8fz8/K3+/v5S9vb2Dvb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA9vb2Dvr6+lL5+fmt8/Pz8eTk - 5P/R0dH/wcHB/7y8vP+8vLz/vr6+/76+vv++vr7/vr6+/76+vv++vr7/vr6+/76+vv++vr7/vr6+/7y8 - vP+8vLz/wcHB/9HR0f/k5OT/8/Pz8fn5+a36+vpS9vb2Dvb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA9vb2Dff3 - 90739/ej9fX14/Pz8/nv7+/27Ozs8evr6/Hr6+vx6+vr8evr6/Hr6+vx6+vr8evr6/Hr6+vx6+vr8evr - 6/Hr6+vx6+vr8evr6/Hr6+vx7Ozs8e/v7/bz8/P59fX14/f396P39/dO9vb2Dfb29gD29vYAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb2 - 9gD29vYA9vb2CfX19Tf29vZy9/f3n/n5+a78/Pyt/v7+qf///6n///+p////qf///6n///+p////qf// - /6n///+p////qf///6n///+p////qf///6n///+p/v7+qfz8/K35+fmu9/f3n/b29nL19fU39vb2Cfb2 - 9gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAPb29gD29vYA9vb2BPX19Rr29vY29/f3S/n5+VL8/PxS////UP///1D///9Q////UP// - /1D///9Q////UP///1D///9Q////UP///1D///9Q////UP///1D///9Q////UPz8/FL5+flS9/f3S/b2 - 9jb19fUa9vb2BPb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29gD29vYA9vb2Afb29gX29vYK9vb2Dvb29g/29vYP9vb2D/b2 - 9g/29vYP9vb2D/b29g/29vYP9vb2D/b29g/29vYP9vb2D/b29g/29vYP9vb2D/b29g/29vYP9vb2D/b2 - 9g/29vYP9vb2Dvb29gr29vYF9vb2Afb29gD29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///////8AAP/AD/AD/wAA/8AP8AP/AAD/wA/wA/8AAP/AAAAD/wAA/8AAAAP/ - AAD/wAAAA/8AAP/AAAAD/wAA/8AAAAP/AAD/wAAAA/8AAP/AAAAD/wAA/8AAAAP/AAD/wAAAA/8AAP/A - AAAD/wAA/8AAAAP/AAD/wAAAA/8AAP/AAAAD/wAA/8AAAAP/AAD/wAAAA/8AAP/AAAAD/wAA/8AAAAP/ - AAD/wAAAA/8AAP/AAAAD/wAA/8AAAAP/AAD/wAAAA/8AAP/AAAAD/wAA/8AAAAP/AAD/wAAAA/8AAP/A - AAAD/wAA/8AAAAP/AAD/wAAAA/8AAP/AAAAD/wAA/8AAAAP/AAD/wAAAA/8AAP/AAAAD/wAA/8AAAAP/ - AAD/wAAAA/8AAP/AAAAD/wAA/8AAAAP/AAD/wAAAA/8AAP/AAAAD/wAA/8AAAAP/AAD/wAAAA/8AAP/A - AAAD/wAA/8AAAAP/AAD/wAAAA/8AAP/AAAAD/wAA////////AAAoAAAAEAAAACAAAAABACAAAAAAAAAE - AADDDgAAww4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/9vb2/wAAAAAAAAAAAAAAAAAA - AAD29vb/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/9vb2//b2 - 9v/29vb/9vb2//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29v9kZGT/1NTU//b2 - 9v/29vb/1NTU/2RkZP/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/QkJC/0JC - Qv+cnJz/nJyc/0JCQv9CQkL/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2/0JC - Qv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb2 - 9v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAPb29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA9vb2/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC//b29v8AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29v9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv/29vb/AAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/9vb2/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b2 - 9v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AADzzwAA8A8AAPAPAADwDwAA8A8AAPAPAADwDwAA8A8AAPAP - AADwDwAA8A8AAPAPAADwDwAA8A8AAP//AAA= - + + 17, 17 \ No newline at end of file diff --git a/SCrawler/Download/DownloadSavedPostsForm.vb b/SCrawler/Download/DownloadSavedPostsForm.vb index 658d996..5bb1635 100644 --- a/SCrawler/Download/DownloadSavedPostsForm.vb +++ b/SCrawler/Download/DownloadSavedPostsForm.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -7,24 +7,18 @@ ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY Imports System.ComponentModel -Imports PersonalUtilities.Forms Imports SCrawler.DownloadObjects Imports SCrawler.Plugin.Hosts +Imports PersonalUtilities.Forms Friend Class DownloadSavedPostsForm Friend Event DownloadDone As NotificationEventHandler - Private MyView As FormsView + Private MyView As FormView Private ReadOnly JobsList As List(Of DownloadProgress) Friend ReadOnly Property Working As Boolean Get Return JobsList.Count > 0 AndAlso JobsList.Exists(Function(j) j.Job.Working) End Get End Property - Friend Sub [Stop]() - If JobsList.Count > 0 Then JobsList.ForEach(Sub(j) j.Stop()) - End Sub - Private Sub [Start]() - If JobsList.Count > 0 Then JobsList.ForEach(Sub(j) j.Start()) - End Sub Friend Sub New() InitializeComponent() JobsList = New List(Of DownloadProgress) @@ -40,9 +34,9 @@ Friend Class DownloadSavedPostsForm End If End Sub Private Sub DownloadSavedPostsForm_Load(sender As Object, e As EventArgs) Handles Me.Load - MyView = New FormsView(Me) With {.LocationOnly = True} - MyView.ImportFromXML(Settings.Design) - MyView.SetMeSize() + MyView = New FormView(Me) With {.LocationOnly = True} + MyView.Import(Settings.Design) + MyView.SetFormSize() If JobsList.Count > 0 Then For Each j As DownloadProgress In JobsList AddHandler j.DownloadDone, AddressOf Jobs_DownloadDone @@ -65,13 +59,13 @@ Friend Class DownloadSavedPostsForm [Stop]() MyView.Dispose(Settings.Design) End Sub - Private Sub Jobs_DownloadDone(ByVal Message As String) - RaiseEvent DownloadDone(Message) + Private Sub [Start]() Handles BTT_DOWN_ALL.Click + If JobsList.Count > 0 Then JobsList.ForEach(Sub(j) j.Start()) End Sub - Private Sub BTT_DOWN_ALL_Click(sender As Object, e As EventArgs) Handles BTT_DOWN_ALL.Click - Start() + Friend Sub [Stop]() Handles BTT_STOP_ALL.Click + If JobsList.Count > 0 Then JobsList.ForEach(Sub(j) j.Stop()) End Sub - Private Sub BTT_STOP_ALL_Click(sender As Object, e As EventArgs) Handles BTT_STOP_ALL.Click - [Stop]() + Private Sub Jobs_DownloadDone(ByVal Obj As SettingsCLS.NotificationObjects, ByVal Message As String) + RaiseEvent DownloadDone(SettingsCLS.NotificationObjects.SavedPosts, Message) End Sub End Class \ No newline at end of file diff --git a/SCrawler/Download/DownloadedInfoForm.Designer.vb b/SCrawler/Download/DownloadedInfoForm.Designer.vb index 056af62..cbbeaf2 100644 --- a/SCrawler/Download/DownloadedInfoForm.Designer.vb +++ b/SCrawler/Download/DownloadedInfoForm.Designer.vb @@ -1,4 +1,12 @@ -Namespace DownloadObjects +' Copyright (C) 2023 Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY +Namespace DownloadObjects Partial Friend Class DownloadedInfoForm : Inherits System.Windows.Forms.Form @@ -57,7 +65,6 @@ Me.MENU_VIEW.AutoToolTip = False Me.MENU_VIEW.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text Me.MENU_VIEW.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.MENU_VIEW_SESSION, Me.MENU_VIEW_ALL}) - Me.MENU_VIEW.Image = CType(resources.GetObject("MENU_VIEW.Image"), System.Drawing.Image) Me.MENU_VIEW.ImageTransparentColor = System.Drawing.Color.Magenta Me.MENU_VIEW.Name = "MENU_VIEW" Me.MENU_VIEW.Size = New System.Drawing.Size(45, 22) @@ -67,7 +74,7 @@ ' Me.MENU_VIEW_SESSION.AutoToolTip = True Me.MENU_VIEW_SESSION.Name = "MENU_VIEW_SESSION" - Me.MENU_VIEW_SESSION.Size = New System.Drawing.Size(113, 22) + Me.MENU_VIEW_SESSION.Size = New System.Drawing.Size(180, 22) Me.MENU_VIEW_SESSION.Text = "Session" Me.MENU_VIEW_SESSION.ToolTipText = "Show downloaded users by this session" ' @@ -75,13 +82,13 @@ ' Me.MENU_VIEW_ALL.AutoToolTip = True Me.MENU_VIEW_ALL.Name = "MENU_VIEW_ALL" - Me.MENU_VIEW_ALL.Size = New System.Drawing.Size(113, 22) + Me.MENU_VIEW_ALL.Size = New System.Drawing.Size(180, 22) Me.MENU_VIEW_ALL.Text = "All" Me.MENU_VIEW_ALL.ToolTipText = "Show all users (sorted by latest download)" ' 'BTT_REFRESH ' - Me.BTT_REFRESH.Image = Global.SCrawler.My.Resources.Resources.Refresh + Me.BTT_REFRESH.Image = Global.SCrawler.My.Resources.Resources.RefreshPic_24 Me.BTT_REFRESH.ImageTransparentColor = System.Drawing.Color.Magenta Me.BTT_REFRESH.Name = "BTT_REFRESH" Me.BTT_REFRESH.Size = New System.Drawing.Size(89, 22) @@ -111,7 +118,6 @@ 'BTT_FIND ' Me.BTT_FIND.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text - Me.BTT_FIND.Image = CType(resources.GetObject("BTT_FIND.Image"), System.Drawing.Image) Me.BTT_FIND.ImageTransparentColor = System.Drawing.Color.Magenta Me.BTT_FIND.Name = "BTT_FIND" Me.BTT_FIND.Size = New System.Drawing.Size(57, 22) @@ -121,7 +127,6 @@ 'BTT_CLEAR ' Me.BTT_CLEAR.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text - Me.BTT_CLEAR.Image = CType(resources.GetObject("BTT_CLEAR.Image"), System.Drawing.Image) Me.BTT_CLEAR.ImageTransparentColor = System.Drawing.Color.Magenta Me.BTT_CLEAR.Name = "BTT_CLEAR" Me.BTT_CLEAR.Size = New System.Drawing.Size(38, 22) @@ -152,7 +157,7 @@ Me.Controls.Add(Me.LIST_DOWN) Me.Controls.Add(Me.ToolbarBOTTOM) Me.Controls.Add(Me.ToolbarTOP) - Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.Icon = Global.SCrawler.My.Resources.Resources.ArrowDownIcon_Blue_24 Me.KeyPreview = True Me.MinimumSize = New System.Drawing.Size(570, 450) Me.Name = "DownloadedInfoForm" @@ -163,7 +168,6 @@ Me.PerformLayout() End Sub - Private WithEvents ToolbarTOP As ToolStrip Private WithEvents MENU_VIEW As ToolStripDropDownButton Private WithEvents MENU_VIEW_SESSION As ToolStripMenuItem diff --git a/SCrawler/Download/DownloadedInfoForm.resx b/SCrawler/Download/DownloadedInfoForm.resx index 50397e1..51b1704 100644 --- a/SCrawler/Download/DownloadedInfoForm.resx +++ b/SCrawler/Download/DownloadedInfoForm.resx @@ -127,21 +127,6 @@ 17, 17 - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG - YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 - 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw - bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc - VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 - c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 - Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo - mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ - kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D - TgDQASA1MVpwzwAAAABJRU5ErkJggg== - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 @@ -163,542 +148,9 @@ tuAuyzIk8Zs9UIm0VXIWg7cX8ieLkmzgrgVhK1KNqyuoYId4T8/wZLZSWJWZvyYrPwqEkhWkuBGC1Gjt dz+CTypr9hgvC/5ylNtFoJdJD4fO1AipCI7ZjKFXMhcNiE2QknwhsTmzAzd7xAdy1dicvhZiDAAAAABJ RU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG - YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 - 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw - bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc - VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 - c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 - Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo - mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ - kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D - TgDQASA1MVpwzwAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG - YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 - 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw - bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc - VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 - c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 - Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo - mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ - kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D - TgDQASA1MVpwzwAAAABJRU5ErkJggg== 133, 17 - - - AAABAAwAMDAQAAEABABoBgAAxgAAACAgEAABAAQA6AIAAC4HAAAYGBAAAQAEAOgBAAAWCgAAEBAQAAEA - BAAoAQAA/gsAADAwAAABAAgAqA4AACYNAAAgIAAAAQAIAKgIAADOGwAAGBgAAAEACADIBgAAdiQAABAQ - AAABAAgAaAUAAD4rAAAwMAAAAQAgAKglAACmMAAAICAAAAEAIACoEAAATlYAABgYAAABACAAiAkAAPZm - AAAQEAAAAQAgAGgEAAB+cAAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP// - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjsjgAAAAAAAAAAAA - AAAAAAAAAAAAAAAIbOh4AAAAAAAAAAAAAAAAAAAAAAAAAAAH5mfsgAAAAAAAAAAAAAAAAAAAAAAAAAB+ - xs54YAAAAAAAAAAAAAAAAAAAAAAAAAfsbmxo5wAAAAAAAAAAAAAAAAAAAAAAAIbObObOeMAAAAAAAAAA - AAAAAAAAAAAACG5+zmzsaOgAAAAAAAAAAAAAAAAAAAAABn7ObOZmbneAAAAAAAAAAAAAAAAAAAAAfs5s - 5+zs7I7AAAAAAAAAAAAAAAAAAAAH7Ofm7G7GbGiOAAAAAAAAAAAAAAAAAAB+fs7Ofs5+zmzngAAAAAAA - AAAAAAAAAAhn7Ojs5uzm7OZ4yAAAAAAAAAAAAAAAAAaOfm7Obsfsbs7OjnAAAAAAAAAAAAAAAH7Ojs7n - 7O7ObOZs54AAAAAAAAAAAAAABn6Ozuduzn5uznzmyOcAAAAAAAAAAAAAfn7I6M7s5+zn7Obs5oyAAAAA - AAAAAAAIZ+jujuzo7Obs5uxubOjnAAAAAAAAAAAG586M5+js7n7OfOfs5s54cAAAAAAAAABnzo7o5+zu - fs5+5uzmzmzowAAAAAAAAAdujn5+fu7Ozuzs7Ofs5+bI6AAAAAAAAHzn7OjOjI5+5+jufs5uzs5ueOAA - AAAAAG6M6O6O7n7Ofs7Ozo7Ofmzs53gAAAAAB+zo7IznyOzuzufufs6Ofo6Ofn4AAAAACEdsZ2Z87o5+ - js7O7O5cjHx8jIgAAAAAAAAAAAAAfOfs7Ojs6OfgAAAAAAAAAAAAAAAAAAAAbo7O6O7O7OfAAAAAAAAA - AAAAAAAAAAAAfsjm7Obo7s6AAAAAAAAAAAAAAAAAAAAAaO5+zo7OyO5wAAAAAAAAAAAAAAAAAAAAzn7O - js7n7sjAAAAAAAAAAAAAAAAAAAAAaM6Ozuzuzu5wAAAAAAAAAAAAAAAAAAAAbn7Obn5+jshgAAAAAAAA - AAAAAAAAAAAAbOjn7Ozs7O5wAAAAAAAAAAAAAAAAAAAAfnzn5+bn7n7AAAAAAAAAAAAAAAAAAAAAbOjs - 7OzuzshgAAAAAAAAAAAAAAAAAAAAaOyOfn7I5+5wAAAAAAAAAAAAAAAAAAAAbOfs7Ozm7OfAAAAAAAAA - AAAAAAAAAAAAbnzn5+bs5u5wAAAAAAAAAAAAAAAAAAAAfOfsjOx+zn7AAAAAAAAAAAAAAAAAAAAAbnzn - 5o7OfshgAAAAAAAAAAAAAAAAAAAAx+Z+zs5uzm5gAAAAAAAAAAAAAAAAAAAAbs7H5+fObsjAAAAAAAAA - AAAAAAAAAAAAZ2js585s7O5wAAAAAAAAAAAAAAAAAAAAjOyH5+jn53aAAAAAAAAAAAAAAAAAAAAACGZs - bHxsfGgAAAAAAAAAAAD///////8AAP///////wAA////////AAD///j///8AAP//8H///wAA///gP/// - AAD//+Af//8AAP//wB///wAA//+AD///AAD//wAH//8AAP/+AAP//wAA//4AAf//AAD//AAB//8AAP/4 - AAD//wAA//AAAH//AAD/4AAAP/8AAP/gAAAf/wAA/8AAAB//AAD/gAAAD/8AAP8AAAAH/wAA/gAAAAP/ - AAD+AAAAAf8AAPwAAAAB/wAA+AAAAAD/AADwAAAAAH8AAPAAAAAAPwAA4AAAAAA/AADgAAAAAD8AAP/8 - AAH//wAA//wAAf//AAD//AAB//8AAP/8AAH//wAA//wAAf//AAD//AAB//8AAP/8AAH//wAA//wAAf// - AAD//AAB//8AAP/8AAH//wAA//wAAf//AAD//AAB//8AAP/8AAH//wAA//wAAf//AAD//AAB//8AAP/8 - AAH//wAA//wAAf//AAD//AAB//8AAP/8AAH//wAA//4AA///AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/ - AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5+AAAAAAAAAAAAAAAAAA - BoyHAAAAAAAAAAAAAAAAAOfn7AAAAAAAAAAAAAAAAAjIzn6AAAAAAAAAAAAAAAAO5uxo7AAAAAAAAAAA - AAAAaM7ObI6AAAAAAAAAAAAADn5ubOboyAAAAAAAAAAAAH7Ozs5sbo4AAAAAAAAAAAjI5+fn7saM4AAA - AAAAAAAO7n7Ozsbs6OcAAAAAAAAAaH7O5+bn5s6MgAAAAAAABo7o5+zs7Ozm6OAAAAAAAH7I7Ozufn5u - zsfsAAAAAAjOjn6Ofs7s5+bsjnAAAAAG6Ozo7O7n5+zs5ujnAAAAaOyOjo587Ozo6I7IjIAAAGxmxsZ+ - 7o7uzsbG7O4AAAAAAAAM587OyOhgAAAAAAAAAAAABo7n5+7OYAAAAAAAAAAAAAzozuzujsAAAAAAAAAA - AAAGjufuzs5wAAAAAAAAAAAADOfOyOfowAAAAAAAAAAAAAaOfm7O7mAAAAAAAAAAAAAM7Ofs5sjAAAAA - AAAAAAAABn585+7oYAAAAAAAAAAAAAyM6Oxs58AAAAAAAAAAAAAG5+zm5+5gAAAAAAAAAAAABOx+fs7I - wAAAAAAAAAAAAAZ+Z8hs7kAAAAAAAAAAAAAMjOjm52fAAAAAAAAAAAAAAGbExsbOAAAAAAAA///////8 - f///+D////A////gH///4A///8AH//+AA///AAP//gAB//4AAP/8AAB/+AAAf/AAAD/gAAAf4AAAD8AA - AAfAAAAP/4AH//+AB///gAf//4AH//+AB///gAf//4AH//+AB///gAf//4AH//+AB///gAf//4AH///A - D/8oAAAAGAAAADAAAAABAAQAAAAAACABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAA - AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAA - AAAABgAAAAAAAAAAAAAAeOAAAAAAAAAAAAAG7IcAAAAAAAAAAAB+fujgAAAAAAAAAAbs7OyHAAAAAAAA - AGjufm7oYAAAAAAABo7OzsfOhwAAAAAAaO5+5+7s6GAAAAAG5+zs7Ozn7PYAAABo6Ojo7n6IjojgAAAM - bGzs7OyOx+wAAAAAAAfo7o7nAAAAAAAAAAaM7OyGAAAAAAAAAAbufu6MAAAAAAAAAAd+zn6GAAAAAAAA - AAzn7OznAAAAAAAAAAaOzuiGAAAAAAAAAAbn587sAAAAAAAAAAZ87m6GAAAAAAAAAAzozs6MAAAAAAAA - AAaOh+eGAAAAAAAAAABsbGxgAAAAAAAAAAAAAAAAAAAAAP///wD/7/8A/8f/AP+D/wD/Af8A/gD/APwA - fwD4AD8A8AAfAOAADwDAAAcA4AAPAP4A/wD+AP8A/gD/AP4A/wD+AP8A/gD/AP4A/wD+AP8A/gD/AP4A - /wD/Af8A////ACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA - AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAABgAA - AAAAAABoYAAAAAAABo6MAAAAAABozshgAAAABo5uboYAAABo7OfOeGAABo5+fn6OhgB2xs7O6MfHgAAA - aOfIYAAAAABuzujgAAAAAGjn6MAAAAAAzs5+cAAAAABo5+jAAAAAAG7OyOAAAAAAaI6OcAAAAAAMbGYA - AAD+/wAA/H8AAPg/AADwHwAA4A8AAMAHAACAAwAAAAEAAPAfAADwHwAA8B8AAPAfAADwHwAA8B8AAPAf - AAD4PwAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAACjaB0ApmsgAKlt - IwCrcCYArXMqALF1LACzeC4ArHYwALR6MQC4fTQAt385AMh1AADJdwQAy3gAAM17AADOfQEAy3oHAM5/ - CQDMfA0A0H4BAMt/GQC7gDcAvoI6ALmBPADRgAIA0oIEANSDBADVhQUA1ogGANaMBwDZiQYA3I0GANKE - CgDWhwkA0YIMANaMCwDZiggA2o0JANyOCQDbkgsA3pAKAN6UCwDekg0A3ZQNAM+EGgDRhhUA1YkSANiN - EgDajhcA2pISANqSHgDalh4A3ZgaAOGUCgDgkg0A4ZUOAOSWDgDhmA4A5ZgPAOicDgDklxAA45cVAOGY - EADlmRAA5ZwRAOSdFwDonRIA550YAOmfGwDpoBIA6qEUAO2iFADrpBQA7qUWAO6mGADvqBgA8KUXAPCm - GADxqRgA9KsZAPKsGgD0rBoA9a0cAPiuGgD1sBsA+bEbAPixHADOhycAzo0lAMqKKwDRjCIA0Y8lANSP - JgDTji0A05ImANiRIwDdnScA1JQpANmVKwDXmCoA25stAMGJNQDAhj0A0I84AM2VPwDTmTYA3JwyANKR - OQDSlDgA2Js6AOGeIADknS8A3qAxANyiPwDopCAA7qogAOKiLQDtqykA8asjAPOxJwD6syAA+LMkAPq1 - JwD2tSoA+rYsAPq4LgDiozEA6qUzAOepNQDpqTEA66wyAOmrNwDtqjUA6qw2AO2vNQDjpjoA6aw4AOir - PwDwrDgA67A3AO2xOQDssT8A8rIwAPazMwD2tzEA8bE2APq7NgDytDoA+Lc6APW5PAD5uToA+bw7APi7 - PQD5vD0A/L49APzAPgCxgEMAv4VAALaFSAC5h0sAvJZmALyacgC5mnYAxYlBAMOLRgDHi0QAyY1GAMaO - SgDJj0oAyZBEAMyQSgDPlEkAypFNAM6TTADNlE4A0pVHANebQwDUnUUA0JRNANaaSgDDkVUAzpZWAM2X - WwDOmVsAzZpdANGZVgDUmlcA0ppaANOcWwDQnF4A16BHANqiSADapUkA3adLAN2lTQDbo1QA1KFeANql - WwDgpkMA4KtOAO6sSwDxrUYA8rdAAPGxRQD1uUAA+r1AAPSySADirl0Ax5ljAMOYZgDFmWUAz51gAM+f - ZADBnG4AxJ1uANGeYgDQnmUA0aBjANalYwDVoWQA2KRgAN+sYwDbqWYA3aplAN2sZwDRo2sA1KdrANWl - bADZqmoA3q5qAMWhcgDNpHMAzKV1AMmmeQDUqXAA1Kp5ANuwcADhrWAA569jAOCvaQDismgA5LRoAOGy - bADitGwA+8BDALGchQCxnokAxa2OAMqwkQDPs5MA1LiXAN3AngDjwJYAAAAAAP///wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAC/YQAAvGgNALllFwC5Zx8AtWUpAMJkAADFaAAAyGsAAMxuAgDOcQYA0nYJANR5DQDFdREAz34aANd8 - EADafxMA0IAGANSDBQDThAYA1YUFANiJBwDThg8A2YoIANqNCQDcjQoA25AKAN2QCgDekQ0A35UNAN2A - FgDXjxAA2Y4UAN6DGQDWjBsA3ZEQAN6UFgDdmBgA4JMKAOCSDQDhlQ4A5ZcPAOSZDgDghhsA44geAOSW - EADjmxEA5ZoQAOScEQDnnxQA6Z0SAOWcGgDpoBIA6aEUAO2iFADtpBYA5qAZAO+oGgDwphcA8acYAPGp - GAD0qxkA86waAPSsGgD1rhwA9rAbAPawHAD4sBoA+LEcAMyAIADXhSMA0IUnAN+NKgDRkScA2pYhAN2b - IwDcmyUA05MoANWWKQDali8A2ZksANucLQDcnS4A3Z0xAN2TOwDblT8A1po7ANKYPADVmj0A154+AOaO - JADjkCoA5ZIuAOqTKgDtkysA7ZQrAOiTLQDulSwA4pIxAOmWMQDrlzUA6J02AOOaOQDgnTwA6pw5APCa - NADynj0A36AvAN6hMADdoDgA2aE/AOSgIQDioSYA7KchAO2oJgDgoCkA6agrAPewIAD5tCIA+bQnAPOx - KAD5tigA+bcvAOOmMgDjpjQA5KU0AOepNQDnrD8A6Ko4AOyvOADprj8A86A/AO+zOgDysjAA8LE3APe4 - NgD7ujEA8rY7APCzPQDytj4A9Lg6APW6PQD7vDoA+b0+AMWARADPkEUA3ZlEANmbTQDPnF8A0phUAOqe - QgDdoEEA2aJGAN2kRADep0kA3aVOANuiUADdplQA4ahGAO2qRwDooEgA4alKAOOtTQDzoUAA869EAPap - TgDsskAA77JGAOewTgDusUoA6rBMAPC1QwD0ukUA9rxGAPm9QQDwskkA8rVNAPe+SAD1uk8A+L5IAPWp - UADyqlQA6rRRAO22UgDuuFQA47BbAPCyUQD0vFAA8r5WAPC2XAD4sV0AyZ5nAMSlfwDfr3MA2K19AOWt - YgDltmcA67NgAOm5YQDsu2oA77ptAPW+awDwvm0A+bhpAOizcQDiu34A7Lt9APS9cAD7wEIA+8FGAPnA - SAD4wk4A+MNZAPnEWgD6w2AA/ctkAMOnhQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAABta58AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbc2/a8oAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAKpvpabIawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWcqgdHaa/awAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAG2JLR8dIM6tXgAAAAAAAAAAAAAAAAAAAAAAAAAAAABlsT0xIx8dLNJzngAAAAAA - AAAAAAAAAAAAAAAAAAAAUq58PDMxIyMdWdVr4gAAAAAAAAAAAAAAAAAAAAAAAJypj0REMzMxJSMdochr - AAAAAAAAAAAAAAAAAAAAAADLcN9KRURERDMxJSMjw69lAAAAAAAAAAAAAAAAAAAAAFDhuH9KSkQzRDMx - JSMq0o1fAAAAAAAAAAAAAAAAAAAY4Nu4gUdHQ0VEM0QlJSNU2XPJAAAAAAAAAAAAAAAAT8TcuNuSTUpK - R0REMzsxJSNd1WsAAAAAAAAAAAAAAJtw3bi425hNTUpKSkRERDMzMSOryGsAAAAAAAAAAADMUd2Vl7i4 - mIFNTU1KSkRERDMzMSXQr2wAAAAAAAAAABfBsJOXmLi4g01NTU1KSkRERDk5MS3ZdJ0AAAAAAAAMz7S0 - urrFxbiETYFNTU1KSo+xlbq6tMfTa9gAAAAAAJoGBgYGCQkL35FLTU2BTU1KthkZKys1NmSgAAAAAAAA - AAAAAAAAAAnfl0pLTU1NgU29FgAAAAAAAAAAAAAAAAAAAAAAAAAABt2VgkpNgU1NTdwVAAAAAAAAAAAA - AAAAAAAAAAAAAAAGxrGPSkpKTU2B2xQAAAAAAAAAAAAAAAAAAAAAAAAAAAbCi5BDREpLTU3cEwAAAAAA - AAAAAAAAAAAAAAAAAAAABMGIi3xAR0pLTdwTAAAAAAAAAAAAAAAAAAAAAAAAAAADsoWKjzlEQ0pL3BEA - AAAAAAAAAAAAAAAAAAAAAAAAAAOrhYWFOztEREq7EQAAAAAAAAAAAAAAAAAAAAAAAAAAA6tdXIV5OTtE - Q7YLAAAAAAAAAAAAAAAAAAAAAAAAAAABpVxcdn0nMztEtgkAAAAAAAAAAAAAAAAAAAAAAAAAAAGhWFpd - di8nMzu1CQAAAAAAAAAAAAAAAAAAAAAAAAAAAaVTWFxdViUnJ7EGAAAAAAAAAAAAAAAAAAAAAAAAAAAB - YFNYWFhcKSQnsAYAAAAAAAAAAAAAAAAAAAAAAAAAAA/XYWBjoaF3VFZWDQAAAAAAAAAAAAAAAAAAAAAA - AAAAAA8BAQEBAQEEBA4AAAAAAAAAAAAAAAD///////x////4P///8D///+Af///gD///wAf//4AD//8A - A//+AAH//gAA//wAAH/4AAB/8AAAP+AAAB/gAAAPwAAAB8AAAA//gAf//4AH//+AB///gAf//4AH//+A - B///gAf//4AH//+AB///gAf//4AH//+AB///gAf//8AP/ygAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAA - AAAAAAAAAAEAAAABAAAAAAAApWYWAKhpGQCqbBsAqm0dAKxuHgCucCEAsHMjALJ2JgC2eioAuH4uALyC - MgC9gzQAvoU1AN+YEwDklw8A5ZkQAOmdEgDooBIA6aEUAO2hFQDtpRYA8KYXAPGqFwDxpxgA8qoZAPSr - GgD0rRoA86wcAPauHAD3sBoA97AcAPmwGgD4sRwAwIY3AMGJOQDDizwAxIs8AMWNPgDjnSUA5J4nAN6g - MADnoyAA5aAnAOSjKQDgoi8A7awpAPCsIwD6syIA+rcrAOKlMwDqqzIA6Kk3AOSpOgDpqz0A+rozAPq6 - NADytjsA97s+APe8PAD5uzgA36VCAN+sVADgqUQA5axHAOmuQADkrUoA6bNKAO63TgDws0EA9btDAPS6 - RQD6vkEA9LxMAPm+SADhrlUA5LJZAPK7UAD7wEMA+8NOAPbBUAD6xFIA+8VUAPDDaQD0xmwA9shtAPjK - bgD6zW8A8cmCAPPMhAD0zoYA99CHAPDPmQDw0JkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmAAAAAAAA - AAAAAAAAAAAAAAAAAAAAACZcJgAAAAAAAAAAAAAAAAAAAAAAAAAAJjYnXSYAAAAAAAAAAAAAAAAAAAAA - AAAiRREPJ10mAAAAAAAAAAAAAAAAAAAAAAtHFhYQECddJgAAAAAAAAAAAAAAAAAACkobGxYRERAnXSYA - AAAAAAAAAAAAAAAJUjAbGxgbFhEQKF0mAAAAAAAAAAAAAAhSTjEgGxsbFhYRECtdJgAAAAAAAAAABjpI - SDggICAbGBgWERAnXSYAAAAAAAAFOVBSUk84IDAgGxtUW1paWlwmAAAAAAAABQUGBgg8IDAgMBtWCwsL - IiIAAAAAAAAAAAAAAAY6HiAgMCBXCgAAAAAAAAAAAAAAAAAAAAVHGx4wICBXCgAAAAAAAAAAAAAAAAAA - AAVJGxseMCBXCQAAAAAAAAAAAAAAAAAAAAVJLxsbHjBXCAAAAAAAAAAAAAAAAAAAAAFELhYcGx5XCAAA - AAAAAAAAAAAAAAAAAAFDMxMVGxtXBgAAAAAAAAAAAAAAAAAAAAFANCsWFhxVBgAAAAAAAAAAAAAAAAAA - AAE/MisOEBZVBQAAAAAAAAAAAAAAAAAAAAE9KS0OEBNUAwAAAAAAAAAAAAAAAAAAAAE+S0xAND9TAwAA - AAAAAAAAAAAAAAAAAAABAQEBAwEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP/v - /wD/x/8A/4P/AP8B/wD+AP8A/AB/APgAPwDwAB8A4AAPAMAABwDgAA8A/gD/AP4A/wD+AP8A/gD/AP4A - /wD+AP8A/gD/AP4A/wD+AP8A/gD/AP8B/wD///8AKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAA - AAAAAQAAAAEAAAAAAAClZhYAsnYmALN4KQC4fi8A1Y0XANWOGADXkBkA2pUbANuVHADclhwA3poeAOCc - HwDgmyAA46EiAOaiIwDmpiMA56cnAOilIwDppiUA66omAO2rJwDuricA46YsAOyrKADurikA7q4sAPCv - KQDvsS4A8LAqAO2vMQDkpjgA5q8+AOqwOADwszIA4qtBAOi0TwDyvEoA7LlSAOSyXADnt18Aw5ljAMui - bQDqumEA5LhoAOa7cADpv3MA78FlAPDFdgDyyXkA88x6APXNegD20IAA6MeQAOnIkQDpyZcAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP///wAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAzcCAAAAAAAAAAAAAAAAAycFNQIAAAAA - AAAAAAAAAysLCAY1BAAAAAAAAAAAAy8SDg0IBjUEAAAAAAAAAzMaFBIODQgINQQAAAAAAzQlIhQaEg4f - Li01BAAAKQEBAQEbGhQUMAQEBAQqAAAAAAABGxsbFDMEAAAAAAAAAAAAARwbGxszBAAAAAAAAAAAAAEe - FBsbMwQAAAAAAAAAAAABIRQcHDMEAAAAAAAAAAAAASARFBQzBAAAAAAAAAAAAAEjFw4WMwQAAAAAAAAA - AAABLCgkJjMDAAAAAAAAAAAAAAEBAQEBAAAAAAAA/v8AAPx/AAD4PwAA8B8AAOAPAADABwAAgAMAAAAB - AADwHwAA8B8AAPAfAADwHwAA8B8AAPAfAADwHwAA+D8AACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAABgAAAAgAAAAGAAAAAwAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAFgAA - ABsAAAAWAAAACwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAA - AAwAAAAfAAAAMwAAADwAAAAyAAAAHQAAAAsAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAACAAAACSccDyHPllLiypFQ4M2UUesdFQtZAAAANQAAABoAAAAJAAAAAgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAEAAAAHAAAAF8aOTb/RlU3z0pVH/82UU/K/iUvcAAAAUAAAADAAAAAWAAAABgAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - Q//6tiz/+K4a//auG//1rRr/9Ksa//KpGf/wpxj/76MX/+2hFP/pnxP/6JwS/+WYD//hlQ//35IN/92O - Cv/aiwn/14gH/9SEBf/ViRP/4rJo/8+cXfS4hEjVAAAATQAAAC0AAAAUAAAABgAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAASjl8jgq91LPfjpjr/+Ls///q+ - Qf/7v0H/+79B//vAQ//7vDb/+bEc//iwHP/2rhz/9a0b//SrGv/yqhn/8agY/++kF//toRT/6p8T/+ic - Ev/lmRD/45YO/9+TDf/djwv/2owI/9eJB//UhQT/2JEj/+Gya/zRmVf5mm48sQAAAEYAAAAnAAAAEAAA - AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAA5zTBtTrXIp+NOY - NPzytz3/+bw+//q9QP/6vkH/+79B//u/Qf/7vj7/+rMg//mxHP/4sBz/9q4c//WsG//0rBr/86oZ//Go - GP/vpBf/7aEV/+qfE//onRH/5ZkQ/+OWD//gkw7/3Y8J/9uMCP/XiQf/1YQG/9uaNv/armz30phU+nJR - LI0AAABAAAAAIgAAAAwAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACzom - DSyobyXxv4Ut9e2wOv/1ujz/+Ls9//m8QP/6vUD/+r5B//u/Qf/7v0L/+rUn//mxG//5sR3/+LAc//au - HP/1rRv/9Kwa//OqGf/xqBj/76QX/+6iFf/roBP/6JwS/+aZEP/klg//4JMN/96OC//bjQn/2YkI/9WF - Bv/fpkz/06Zp8s2TUPY/LRhtAAAAOQAAABwAAAAJAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAEGRAFFKRqI9mwdibx56o3//G0Ov/ztjv/9bo8//a7Pv/5vED/+r1A//q+Qf/7wEP/+rgu//mx - G//5sh3/+bId//ixHP/2sBz/9a0b//SrGv/yqhn/8agY//CmF//uoxX/6qAT/+mdEf/mmRD/5JYP/+CT - Dv/ejwr/3IwK/9mJB//Whwn/4q5d/9GiZ+7Hj0znEg0HSAAAACcAAAAPAAAAAwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAGoGcgpaluIvLdoDP/6q03/++yOf/xtDr/87Y7//S4PP/2uz3/+bw+//m9 - QP/6vkL/+rs3//myHP/5sh3/+bId//myHf/5sR3/+LAc//WtHP/0rRv/9KsZ//KpGP/wphf/7qMV/+ug - E//onhL/55oR/+SXD//hlA3/3pAL/9yNCf/Zigf/2I0S/+S0aP/ToGPwvolJxAAAACcAAAARAAAABQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACiaB9ppmsg9dKVL//nqjX/67A3/+6yOP/wtDr/87Y7//W4 - PP/4uz3/+b0+//m9QP/5vUD/+rw7//myHv/5sh3/+bId//myHf/5sh3/+LEd//iwHP/2rhv/9awb//Or - Gv/xqBn/8KYY/+6jFf/roBP/6p4Q/+icDv/llw3/4ZQK/9+QCf/cjQb/2okF/9mRHf/ismj40ZVQ9MGK - SogAAAALAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmaR7PyYgn+uSdL//loDD/56Iy/+qk - M//rpjT/7qk3//CrOP/xrTn/8a05//CxOP/4vD7/+bxA//izJP/4sRz/+bId//myHf/5sh3/+bId//mx - Hf/4sBz/9q4c//WsG//zqxr/8qkY//GrI//xsDr/8bFF//W0Sf/2s0n/9LJI//OwSP/yr0f/8a1G//Cs - R//urEv/5ahV6dGVT+AAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkaR2XpGoe/6Vq - H/+mayD/pmwh/6hsIv+pbSP/qW4k/6twJf+scCf/rXIn/65zKf/6vDz/+LxA//a1Kv/2sBr/+bEd//my - Hf/5sh3/+bId//myHf/5sR3/+LAc//auHP/1rRv/9Ksa//a3Ov/EiED/xYlB/8aKQ//Hi0T/yY1G/8qO - R//Lj0n/zJBK/82RS//Ok0z/0JRN/9GVTpcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK1yJ//5uzv/9rs+//a3 - Mf/1rhr/9rAc//iyHf/5sh3/+bId//myHf/5sh3/+bEd//iwHP/2rhz/9a0b//m5Ov/Chj//AAAAKwAA - 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 - - \ No newline at end of file diff --git a/SCrawler/Download/DownloadedInfoForm.vb b/SCrawler/Download/DownloadedInfoForm.vb index 8a969e6..8b396f1 100644 --- a/SCrawler/Download/DownloadedInfoForm.vb +++ b/SCrawler/Download/DownloadedInfoForm.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -7,12 +7,15 @@ ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY Imports System.ComponentModel -Imports PersonalUtilities.Forms Imports SCrawler.API.Base +Imports PersonalUtilities.Forms Namespace DownloadObjects Friend Class DownloadedInfoForm +#Region "Events" Friend Event UserFind(ByVal Key As String) - Private MyView As FormsView +#End Region +#Region "Declarations" + Private MyView As FormView Private ReadOnly LParams As New ListAddParams(LAP.IgnoreICopier) With {.Error = EDP.None} Private Opened As Boolean = False Friend ReadOnly Property ReadyToOpen As Boolean @@ -33,7 +36,9 @@ Namespace DownloadObjects End Set End Property Private ReadOnly _TempUsersList As List(Of IUserData) - Friend Sub New() +#End Region +#Region "Initializer" + Public Sub New() InitializeComponent() _TempUsersList = New List(Of IUserData) If Settings.InfoViewMode.Value = CInt(ViewModes.All) Then @@ -46,12 +51,14 @@ Namespace DownloadObjects Settings.InfoViewMode.Value = ViewMode RefillList() End Sub +#End Region +#Region "Form handlers" Private Sub DownloadedInfoForm_Load(sender As Object, e As EventArgs) Handles Me.Load Try If MyView Is Nothing Then - MyView = New FormsView(Me) - MyView.ImportFromXML(Settings.Design) - MyView.SetMeSize() + MyView = New FormView(Me) + MyView.Import(Settings.Design) + MyView.SetFormSize() End If BTT_CLEAR.Visible = ViewMode = ViewModes.Session RefillList() @@ -80,6 +87,8 @@ Namespace DownloadObjects End Select If b Then e.Handled = True End Sub +#End Region +#Region "Refill" Private Class UsersDateOrder : Implements IComparer(Of IUserData) Friend Function Compare(ByVal x As IUserData, ByVal y As IUserData) As Integer Implements IComparer(Of IUserData).Compare Dim xv& = If(DirectCast(x, UserDataBase).LastUpdated.HasValue, DirectCast(x, UserDataBase).LastUpdated.Value.Ticks, 0) @@ -87,7 +96,7 @@ Namespace DownloadObjects Return xv.CompareTo(yv) * -1 End Function End Class - Private Sub RefillList() + Private Sub RefillList() Handles BTT_REFRESH.Click Try _TempUsersList.Clear() Dim lClear As Action = Sub() LIST_DOWN.Items.Clear() @@ -122,6 +131,8 @@ Namespace DownloadObjects UpdateNavigationButtons(Nothing) End Try End Sub +#End Region +#Region "Toolbar controls" Private Sub MENU_VIEW_SESSION_Click(sender As Object, e As EventArgs) Handles MENU_VIEW_SESSION.Click MENU_VIEW_SESSION.Checked = True MENU_VIEW_ALL.Checked = False @@ -136,9 +147,6 @@ Namespace DownloadObjects BTT_CLEAR.Visible = False RefillList() End Sub - Private Sub BTT_REFRESH_Click(sender As Object, e As EventArgs) Handles BTT_REFRESH.Click - RefillList() - End Sub Private Sub BTT_FIND_Click(sender As Object, e As EventArgs) Handles BTT_FIND.Click Try If _LatestSelected.ValueBetween(0, LIST_DOWN.Items.Count - 1) AndAlso _LatestSelected.ValueBetween(0, Downloader.Downloaded.Count - 1) Then @@ -154,6 +162,8 @@ Namespace DownloadObjects RefillList() End If End Sub +#End Region +#Region "List handlers" Private _LatestSelected As Integer = -1 Private Sub LIST_DOWN_SelectedIndexChanged(sender As Object, e As EventArgs) Handles LIST_DOWN.SelectedIndexChanged _LatestSelected = LIST_DOWN.SelectedIndex @@ -166,9 +176,8 @@ Namespace DownloadObjects Catch End Try End Sub - Friend Sub Downloader_DownloadCountChange() - If ViewMode = ViewModes.Session Then RefillList() - End Sub +#End Region +#Region "Navigation" Private Sub BTT_UP_Click(sender As Object, e As EventArgs) Handles BTT_UP.Click UpdateNavigationButtons(-1) End Sub @@ -195,5 +204,11 @@ Namespace DownloadObjects End If End With End Sub +#End Region +#Region "Downloader handlers" + Friend Sub Downloader_DownloadCountChange() + If ViewMode = ViewModes.Session Then RefillList() + End Sub +#End Region End Class End Namespace \ No newline at end of file diff --git a/SCrawler/Download/DownloadFeedForm.Designer.vb b/SCrawler/Download/Feed/DownloadFeedForm.Designer.vb similarity index 68% rename from SCrawler/Download/DownloadFeedForm.Designer.vb rename to SCrawler/Download/Feed/DownloadFeedForm.Designer.vb index e5d0a45..df7163d 100644 --- a/SCrawler/Download/DownloadFeedForm.Designer.vb +++ b/SCrawler/Download/Feed/DownloadFeedForm.Designer.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -23,8 +23,11 @@ Namespace DownloadObjects Private Sub InitializeComponent() Dim SEP_1 As System.Windows.Forms.ToolStripSeparator - Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(DownloadFeedForm)) Me.ToolbarTOP = New System.Windows.Forms.ToolStrip() + Me.MENU_LOAD_SESSION = New System.Windows.Forms.ToolStripDropDownButton() + Me.BTT_LOAD_SESSION_LAST = New System.Windows.Forms.ToolStripMenuItem() + Me.BTT_LOAD_SESSION_CHOOSE = New System.Windows.Forms.ToolStripMenuItem() + Me.SEP_0 = New System.Windows.Forms.ToolStripSeparator() Me.BTT_REFRESH = New System.Windows.Forms.ToolStripButton() Me.BTT_CLEAR = New System.Windows.Forms.ToolStripButton() Me.TP_DATA = New System.Windows.Forms.TableLayoutPanel() @@ -40,15 +43,44 @@ Namespace DownloadObjects 'ToolbarTOP ' Me.ToolbarTOP.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden - Me.ToolbarTOP.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BTT_REFRESH, Me.BTT_CLEAR, SEP_1}) + Me.ToolbarTOP.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.MENU_LOAD_SESSION, Me.SEP_0, Me.BTT_REFRESH, Me.BTT_CLEAR, SEP_1}) Me.ToolbarTOP.Location = New System.Drawing.Point(0, 0) Me.ToolbarTOP.Name = "ToolbarTOP" Me.ToolbarTOP.Size = New System.Drawing.Size(484, 25) Me.ToolbarTOP.TabIndex = 0 ' + 'MENU_LOAD_SESSION + ' + Me.MENU_LOAD_SESSION.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.MENU_LOAD_SESSION.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BTT_LOAD_SESSION_LAST, Me.BTT_LOAD_SESSION_CHOOSE}) + Me.MENU_LOAD_SESSION.Image = Global.SCrawler.My.Resources.Resources.ArrowDownPic_Blue_24 + Me.MENU_LOAD_SESSION.ImageTransparentColor = System.Drawing.Color.Magenta + Me.MENU_LOAD_SESSION.Name = "MENU_LOAD_SESSION" + Me.MENU_LOAD_SESSION.Size = New System.Drawing.Size(29, 22) + Me.MENU_LOAD_SESSION.Text = "Load session" + ' + 'BTT_LOAD_SESSION_LAST + ' + Me.BTT_LOAD_SESSION_LAST.Image = Global.SCrawler.My.Resources.Resources.ArrowDownPic_Blue_24 + Me.BTT_LOAD_SESSION_LAST.Name = "BTT_LOAD_SESSION_LAST" + Me.BTT_LOAD_SESSION_LAST.Size = New System.Drawing.Size(189, 22) + Me.BTT_LOAD_SESSION_LAST.Text = "Load last session" + ' + 'BTT_LOAD_SESSION_CHOOSE + ' + Me.BTT_LOAD_SESSION_CHOOSE.Image = Global.SCrawler.My.Resources.Resources.ArrowDownPic_Blue_24 + Me.BTT_LOAD_SESSION_CHOOSE.Name = "BTT_LOAD_SESSION_CHOOSE" + Me.BTT_LOAD_SESSION_CHOOSE.Size = New System.Drawing.Size(189, 22) + Me.BTT_LOAD_SESSION_CHOOSE.Text = "Select loading session" + ' + 'SEP_0 + ' + Me.SEP_0.Name = "SEP_0" + Me.SEP_0.Size = New System.Drawing.Size(6, 25) + ' 'BTT_REFRESH ' - Me.BTT_REFRESH.Image = Global.SCrawler.My.Resources.Resources.Refresh + Me.BTT_REFRESH.Image = Global.SCrawler.My.Resources.Resources.RefreshPic_24 Me.BTT_REFRESH.ImageTransparentColor = System.Drawing.Color.Magenta Me.BTT_REFRESH.Name = "BTT_REFRESH" Me.BTT_REFRESH.Size = New System.Drawing.Size(66, 22) @@ -57,7 +89,7 @@ Namespace DownloadObjects ' 'BTT_CLEAR ' - Me.BTT_CLEAR.Image = Global.SCrawler.My.Resources.Resources.Delete + Me.BTT_CLEAR.Image = Global.SCrawler.My.Resources.Resources.DeletePic_24 Me.BTT_CLEAR.ImageTransparentColor = System.Drawing.Color.Magenta Me.BTT_CLEAR.Name = "BTT_CLEAR" Me.BTT_CLEAR.Size = New System.Drawing.Size(54, 22) @@ -97,7 +129,7 @@ Namespace DownloadObjects Me.Controls.Add(Me.TP_DATA) Me.Controls.Add(Me.ToolbarTOP) Me.ForeColor = System.Drawing.SystemColors.WindowText - Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.Icon = Global.SCrawler.My.Resources.Resources.RSSIcon_32 Me.KeyPreview = True Me.MinimumSize = New System.Drawing.Size(300, 300) Me.Name = "DownloadFeedForm" @@ -113,5 +145,9 @@ Namespace DownloadObjects Private WithEvents TP_DATA As TableLayoutPanel Private WithEvents BTT_REFRESH As ToolStripButton Private WithEvents BTT_CLEAR As ToolStripButton + Private WithEvents MENU_LOAD_SESSION As ToolStripDropDownButton + Private WithEvents BTT_LOAD_SESSION_LAST As ToolStripMenuItem + Private WithEvents BTT_LOAD_SESSION_CHOOSE As ToolStripMenuItem + Private WithEvents SEP_0 As ToolStripSeparator End Class End Namespace \ No newline at end of file diff --git a/SCrawler/Download/Feed/DownloadFeedForm.resx b/SCrawler/Download/Feed/DownloadFeedForm.resx new file mode 100644 index 0000000..d0947eb --- /dev/null +++ b/SCrawler/Download/Feed/DownloadFeedForm.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + 17, 17 + + \ No newline at end of file diff --git a/SCrawler/Download/DownloadFeedForm.vb b/SCrawler/Download/Feed/DownloadFeedForm.vb similarity index 62% rename from SCrawler/Download/DownloadFeedForm.vb rename to SCrawler/Download/Feed/DownloadFeedForm.vb index 31063d5..99960e4 100644 --- a/SCrawler/Download/DownloadFeedForm.vb +++ b/SCrawler/Download/Feed/DownloadFeedForm.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -7,6 +7,7 @@ ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY Imports System.ComponentModel +Imports PersonalUtilities.Functions.XML Imports PersonalUtilities.Forms Imports PersonalUtilities.Forms.Toolbars Imports PersonalUtilities.Tools @@ -19,11 +20,11 @@ Namespace DownloadObjects Private WithEvents MyRange As RangeSwitcherToolbar(Of UserMediaD) Private ReadOnly DataList As List(Of UserMediaD) Private WithEvents BTT_DELETE_SELECTED As ToolStripButton - Private WithEvents LBL_FILES As ToolStripLabel Private DataRows As Integer = 10 Private DataColumns As Integer = 1 Private FeedEndless As Boolean = False - Private ReadOnly FileNotExist As Predicate(Of UserMediaD) = Function(d) Not d.Data.File.Exists + Private ReadOnly FileNotExist As New FPredicate(Of UserMediaD)(Function(d) Not d.Data.File.Exists) + Private BttRefreshToolTipText As String = "Refresh data list" #End Region #Region "Initializer" Friend Sub New() @@ -31,18 +32,18 @@ Namespace DownloadObjects MyDefs = New DefaultFormOptions(Me, Settings.Design) MyRange = New RangeSwitcherToolbar(Of UserMediaD)(ToolbarTOP) DataList = New List(Of UserMediaD) - LBL_FILES = New ToolStripLabel With {.Text = String.Empty, .AutoToolTip = False, .ToolTipText = String.Empty} BTT_DELETE_SELECTED = New ToolStripButton With { .Text = "Delete selected", .AutoToolTip = True, .ToolTipText = "Delete marked files", - .Image = My.Resources.Delete, + .Image = My.Resources.DeletePic_24, .DisplayStyle = ToolStripItemDisplayStyle.ImageAndText } End Sub #End Region #Region "Form handlers" Private Sub DownloadFeedForm_Load(sender As Object, e As EventArgs) Handles Me.Load + BttRefreshToolTipText = BTT_REFRESH.ToolTipText With MyDefs .MyViewInitialize() LastWinState = WindowState @@ -52,7 +53,7 @@ Namespace DownloadObjects .ButtonKey(RCI.Next) = Keys.F4 .AddThisToolbar() End With - ToolbarTOP.Items.AddRange({New ToolStripSeparator, BTT_DELETE_SELECTED, New ToolStripSeparator, LBL_FILES}) + ToolbarTOP.Items.AddRange({New ToolStripSeparator, BTT_DELETE_SELECTED}) UpdateSettings() RefillList() .EndLoaderOperations(False) @@ -67,7 +68,6 @@ Namespace DownloadObjects MyRange.Dispose() BTT_CLEAR.Dispose() DataList.Clear() - LBL_FILES.Dispose() End Sub Private Sub DownloadFeedForm_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown If e.KeyCode = Keys.F5 Then RefillList() : e.Handled = True @@ -81,6 +81,11 @@ Namespace DownloadObjects DataRows = .FeedDataRows DataColumns = .FeedDataColumns FeedEndless = .FeedEndless + Dim fsd As Boolean = .FeedStoreSessionsData + ControlInvoke(ToolbarTOP, MENU_LOAD_SESSION, Sub() + MENU_LOAD_SESSION.Visible = fsd + SEP_0.Visible = fsd + End Sub) If rangeChanged Then ClearTable() ControlInvoke(TP_DATA, Sub() @@ -108,16 +113,21 @@ Namespace DownloadObjects #End Region #Region "Refill" Friend Sub Downloader_FilesChanged(ByVal Added As Boolean) - ControlInvoke(ToolbarTOP, LBL_FILES, Sub() LBL_FILES.Text = IIf(Added, "New files found", "Some files have been removed")) - LBL_FILES.ControlChangeColor(ToolbarTOP, Added, False) + ControlInvokeFast(ToolbarTOP, BTT_REFRESH, Sub() BTT_REFRESH.ToolTipText = If(Added, "New files found", "Some files have been removed")) + BTT_REFRESH.ControlChangeColor(ToolbarTOP, Added, False) End Sub - Private Sub RefillList() Handles BTT_REFRESH.Click + Private Sub BTT_REFRESH_Click(sender As Object, e As EventArgs) Handles BTT_REFRESH.Click + RefillList() + End Sub + Private Sub RefillList(Optional ByVal RefillDataList As Boolean = True) DataPopulated = False - Try : Downloader.Files.RemoveAll(FileNotExist) : Catch : End Try - DataList.ListAddList(Downloader.Files, LAP.ClearBeforeAdd, LAP.NotContainsOnly) + If RefillDataList Then + Try : Downloader.Files.RemoveAll(FileNotExist) : Catch : End Try + DataList.ListAddList(Downloader.Files, LAP.ClearBeforeAdd, LAP.NotContainsOnly) + End If MyRange.Source = DataList - ControlInvoke(ToolbarTOP, LBL_FILES, Sub() LBL_FILES.Text = String.Empty) - LBL_FILES.ControlDropColor(ToolbarTOP) + ControlInvokeFast(ToolbarTOP, BTT_REFRESH, Sub() BTT_REFRESH.ToolTipText = BttRefreshToolTipText) + BTT_REFRESH.ControlDropColor(ToolbarTOP) If DataList.Count = 0 Then ClearTable() ElseIf Not DataPopulated Then @@ -129,6 +139,62 @@ Namespace DownloadObjects ClearTable() RefillList() End Sub + Private Sub BTT_LOAD_SESSION_LAST_Click(sender As Object, e As EventArgs) Handles BTT_LOAD_SESSION_LAST.Click + SessionChooser(True) + End Sub + Private Sub BTT_LOAD_SESSION_CHOOSE_Click(sender As Object, e As EventArgs) Handles BTT_LOAD_SESSION_CHOOSE.Click + SessionChooser(False) + End Sub + Private Sub SessionChooser(ByVal GetLast As Boolean) + Try + Dim f As SFile = TDownloader.SessionsPath.CSFileP + Dim fList As List(Of SFile) = Nothing + Dim m As New MMessage("Saved sessions not selected", "Sessions",, vbExclamation) + Dim x As XmlFile + Dim lcr As New ListAddParams(LAP.NotContainsOnly + LAP.IgnoreICopier) + If Not GetLast AndAlso f.Exists(SFO.Path, False) Then fList = SFile.GetFiles(f, "*.xml",, EDP.ReturnValue) + If Not GetLast AndAlso fList.ListExists Then + Using chooser As New SimpleListForm(Of SFile)(fList, Settings.Design) With { + .FormText = "Sessions", + .Icon = My.Resources.ArrowDownIcon_Blue_24, + .Mode = SimpleListForm(Of SFile).Modes.CheckedItems, + .Provider = New CustomProvider(Function(v, d, p, n, ee) DirectCast(v, SFile).File) + } + chooser.ClearButtons() + If chooser.ShowDialog = DialogResult.OK Then + fList = chooser.DataResult + If fList.ListExists Then + DataList.Clear() + For Each f In fList + x = New XmlFile(f,, False) With {.AllowSameNames = True, .XmlReadOnly = True} + x.LoadData() + If x.Count > 0 Then DataList.ListAddList(x, lcr) + x.Dispose() + Next + DataList.RemoveAll(FileNotExist) + RefillList(False) + Else + MsgBoxE(m) + End If + Else + MsgBoxE(m) + End If + End Using + ElseIf Downloader.FilesSessionActual.Exists Then + x = New XmlFile(Downloader.FilesSessionActual,, False) With {.AllowSameNames = True, .XmlReadOnly = True} + x.LoadData() + If x.Count > 0 Then DataList.Clear() : DataList.ListAddList(x, lcr) + x.Dispose() + RefillList(False) + Else + m.Text = "Saved sessions not found" + MsgBoxE(m) + End If + If fList.ListExists Then fList.Clear() + Catch ex As Exception + ErrorsDescriber.Execute(EDP.SendInLog, ex, $"[DownloadObjects.DownloadFeedForm.SessionChooser({GetLast})]") + End Try + End Sub #End Region #Region "Delete" Private Sub BTT_DELETE_SELECTED_Click(sender As Object, e As EventArgs) Handles BTT_DELETE_SELECTED.Click @@ -142,6 +208,7 @@ Namespace DownloadObjects ControlInvoke(TP_DATA, Sub() With TP_DATA .SuspendLayout() + LatestScrollValueDisabled = True For Each fm As FeedMedia In c If fm.DeleteFile(True) Then d += 1 @@ -149,7 +216,15 @@ Namespace DownloadObjects TPRemoveControl(fm, False) End If Next - .ResumeLayout(True) + If d = 0 Then LatestScrollValueDisabled = False + .ResumeLayout(d = 0) + If d > 0 Then + .AutoScroll = False + .AutoScroll = True + If LatestScrollValue.HasValue Then TP_DATA.VerticalScroll.Value = LatestScrollValue.Value + .PerformLayout() + LatestScrollValueDisabled = False + End If End With End Sub) If d > 0 Then RefillAfterDelete() @@ -173,49 +248,76 @@ Namespace DownloadObjects End Try End Sub Private Sub TPRemoveControl(ByVal CNT As FeedMedia, ByVal Suspend As Boolean) + Dim HeightChanged As Boolean = False Try - If Suspend Then TP_DATA.SuspendLayout() + If Suspend Then TP_DATA.SuspendLayout() : LatestScrollValueDisabled = True Dim p As TableLayoutPanelCellPosition = TP_DATA.GetCellPosition(CNT) - Dim HeightChanged As Boolean = False + Dim DropHeight As Action = Sub() + If Not LatestScrollValue.HasValue Then LatestScrollValue = TP_DATA.VerticalScroll.Value + LatestScrollValue = LatestScrollValue.Value - TP_DATA.RowStyles(p.Row).Height + If LatestScrollValue.Value < 0 Then LatestScrollValue = 0 + TP_DATA.RowStyles(p.Row).Height = 0 + HeightChanged = True + End Sub + TP_DATA.Controls.Remove(CNT) CNT.Dispose() + If DataColumns = 1 Then - If p.Column >= 0 And p.Row >= 0 Then TP_DATA.RowStyles(p.Row).Height = 0 : HeightChanged = True + If p.Column >= 0 And p.Row >= 0 Then DropHeight.Invoke Else If p.Row.ValueBetween(0, TP_DATA.RowStyles.Count - 1) And p.Column.ValueBetween(0, TP_DATA.ColumnStyles.Count - 1) Then Dim found As Boolean = False For i% = 0 To TP_DATA.ColumnStyles.Count - 1 If Not TP_DATA.GetControlFromPosition(i, p.Row) Is Nothing Then found = True : Exit For Next - If Not found Then TP_DATA.RowStyles(p.Row).Height = 0 : HeightChanged = True + If Not found Then DropHeight.Invoke End If End If - If HeightChanged Then TP_DATA.AutoScroll = False : TP_DATA.AutoScroll = True Catch Finally - If Suspend Then TP_DATA.ResumeLayout(True) + If Suspend Then + TP_DATA.ResumeLayout(Not HeightChanged) + If HeightChanged Then + TP_DATA.AutoScroll = False + TP_DATA.AutoScroll = True + If LatestScrollValue.HasValue Then TP_DATA.VerticalScroll.Value = LatestScrollValue.Value + TP_DATA.PerformLayout() + LatestScrollValueDisabled = False + End If + End If End Try End Sub Private Sub RefillAfterDelete() - If ControlInvoke(TP_DATA, Function() TP_DATA.Controls.Count) = 0 Then - With MyRange - Dim indx% = .CurrentIndex - .HandlersSuspended = True - .Source = DataList - If .Count > 0 Then - If indx.ValueBetween(0, .Count - 1) Then - .CurrentIndex = indx - ElseIf (indx - 1).ValueBetween(0, .Count - 1) Then - .CurrentIndex = indx - 1 - Else - .CurrentIndex = .Count - 1 - End If - .HandlersSuspended = False - DirectCast(MyRange.Switcher, RangeSwitcher(Of UserMediaD)).PerformIndexChanged() + With MyRange + Dim indx% = .CurrentIndex + Dim indxChanged As Boolean = False + .HandlersSuspended = True + .Update() + If .Count > 0 Then + If indx.ValueBetween(0, .Count - 1) Then + .CurrentIndex = indx + ElseIf (indx - 1).ValueBetween(0, .Count - 1) Then + .CurrentIndex = indx - 1 + indxChanged = True + Else + .CurrentIndex = .Count - 1 + indxChanged = Not indx = .CurrentIndex End If + .UpdateControls() .HandlersSuspended = False - End With - End If + If Not indxChanged Then LatestScrollValueDisabled = True + DirectCast(MyRange.Switcher, RangeSwitcher(Of UserMediaD)).PerformIndexChanged() + If Not indxChanged Then + LatestScrollValueDisabled = False + If LatestScrollValue.HasValue Then + TP_DATA.VerticalScroll.Value = LatestScrollValue.Value + TP_DATA.PerformLayout() + End If + End If + End If + .HandlersSuspended = False + End With End Sub #End Region #Region "Range" @@ -253,7 +355,7 @@ Namespace DownloadObjects Dim d As List(Of UserMediaD) = MyRange.Current Dim d2 As List(Of UserMediaD) Dim i% - If d.ListExists And d.All(Function(md) FileNotExist(md)) Then + If d.ListExists And d.All(FileNotExist) Then i = Sender.CurrentIndex Sender.HandlersSuspended = True RefillList() @@ -269,7 +371,8 @@ Namespace DownloadObjects If d.ListExists Then ClearTable() If Sender.CurrentIndex > 0 And FeedEndless Then - d2 = DirectCast(MyRange.Switcher, RangeSwitcher(Of UserMediaD)).Item(Sender.CurrentIndex - 1).ListTake(-2, DataColumns, EDP.ReturnValue).ListIfNothing + d2 = DirectCast(MyRange.Switcher, RangeSwitcher(Of UserMediaD)).Item(Sender.CurrentIndex - 1). + Where(Function(md) Not FileNotExist.Predicate(md)).ListTake(-2, DataColumns, EDP.ReturnValue).ListIfNothing If d2.Count > 0 Then d.InsertRange(0, d2) : d2.Clear() End If Dim w% = GetWidth() @@ -293,14 +396,21 @@ Namespace DownloadObjects ErrorsDescriber.Execute(EDP.SendInLog, ex, $"[DownloadObjects.DownloadFeedForm.Range.IndexChanged({Sender.CurrentIndex})]") RefillInProgress = False Finally - If Not RefillInProgress Then + If Not RefillInProgress AndAlso Sender.CurrentIndex >= 0 Then ControlInvoke(TP_DATA, Sub() + Dim v% + Dim c As Boolean With TP_DATA.VerticalScroll - If Offset = 1 Then .Value = 0 Else .Value = .Maximum + If Offset = 1 Or Not DataPopulated Then v = 0 Else v = .Maximum + c = Not .Value = v + ScrollSuspended = True + .Value = v End With + If c Then TP_DATA.PerformLayout() End Sub) ScrollSuspended = False DataPopulated = True + IndexChanged = True End If End Try End Sub @@ -348,8 +458,22 @@ Namespace DownloadObjects Private AllowTopScroll As Boolean = False Private ScrollSuspended As Boolean = False Private Offset As Integer = 1 + Private LatestScrollValue As Integer? = Nothing + Private LatestScrollValueDisabled As Boolean = False + Private IndexChanged As Boolean = False + Private Sub DownloadFeedForm_Activated(sender As Object, e As EventArgs) Handles Me.Activated + If LatestScrollValue.HasValue Then ControlInvoke(TP_DATA, Sub() + Dim b As Boolean = ScrollSuspended + If Not b Then ScrollSuspended = True + TP_DATA.VerticalScroll.Value = LatestScrollValue.Value + TP_DATA.PerformLayout() + If Not b Then ScrollSuspended = False + End Sub) + End Sub Private Sub TP_DATA_Paint(sender As Object, e As PaintEventArgs) Handles TP_DATA.Paint If Not MyDefs.Initializing And Not ScrollSuspended And FeedEndless Then + If Not LatestScrollValueDisabled Then LatestScrollValue = ControlInvokeFast(TP_DATA, Function() TP_DATA.VerticalScroll.Value, 0) + If IndexChanged Then IndexChanged = False : Exit Sub ControlInvoke(TP_DATA, Sub() With TP_DATA Offset = IIf(.VerticalScroll.Value = 0 And AllowTopScroll, -1, 1) diff --git a/SCrawler/Download/FeedMedia.Designer.vb b/SCrawler/Download/Feed/FeedMedia.Designer.vb similarity index 97% rename from SCrawler/Download/FeedMedia.Designer.vb rename to SCrawler/Download/Feed/FeedMedia.Designer.vb index 8a3356a..458d764 100644 --- a/SCrawler/Download/FeedMedia.Designer.vb +++ b/SCrawler/Download/Feed/FeedMedia.Designer.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -109,28 +109,28 @@ Namespace DownloadObjects ' 'BTT_CONTEXT_OPEN_MEDIA ' - Me.BTT_CONTEXT_OPEN_MEDIA.Image = Global.SCrawler.My.Resources.Resources.Folder_32 + Me.BTT_CONTEXT_OPEN_MEDIA.Image = Global.SCrawler.My.Resources.Resources.FolderPic_32 Me.BTT_CONTEXT_OPEN_MEDIA.Name = "BTT_CONTEXT_OPEN_MEDIA" Me.BTT_CONTEXT_OPEN_MEDIA.Size = New System.Drawing.Size(137, 22) Me.BTT_CONTEXT_OPEN_MEDIA.Text = "Open" ' 'BTT_CONTEXT_OPEN_USER ' - Me.BTT_CONTEXT_OPEN_USER.Image = Global.SCrawler.My.Resources.Resources.Folder_32 + Me.BTT_CONTEXT_OPEN_USER.Image = Global.SCrawler.My.Resources.Resources.FolderPic_32 Me.BTT_CONTEXT_OPEN_USER.Name = "BTT_CONTEXT_OPEN_USER" Me.BTT_CONTEXT_OPEN_USER.Size = New System.Drawing.Size(137, 22) Me.BTT_CONTEXT_OPEN_USER.Text = "Open user" ' 'BTT_CONTEXT_OPEN_USER_URL ' - Me.BTT_CONTEXT_OPEN_USER_URL.Image = Global.SCrawler.My.Resources.Resources.GlobeBlue_32 + Me.BTT_CONTEXT_OPEN_USER_URL.Image = Global.SCrawler.My.Resources.Resources.GlobePic_32 Me.BTT_CONTEXT_OPEN_USER_URL.Name = "BTT_CONTEXT_OPEN_USER_URL" Me.BTT_CONTEXT_OPEN_USER_URL.Size = New System.Drawing.Size(137, 22) Me.BTT_CONTEXT_OPEN_USER_URL.Text = "Open user" ' 'BTT_CONTEXT_OPEN_USER_POST ' - Me.BTT_CONTEXT_OPEN_USER_POST.Image = Global.SCrawler.My.Resources.Resources.GlobeBlue_32 + Me.BTT_CONTEXT_OPEN_USER_POST.Image = Global.SCrawler.My.Resources.Resources.GlobePic_32 Me.BTT_CONTEXT_OPEN_USER_POST.Name = "BTT_CONTEXT_OPEN_USER_POST" Me.BTT_CONTEXT_OPEN_USER_POST.Size = New System.Drawing.Size(137, 22) Me.BTT_CONTEXT_OPEN_USER_POST.Text = "Open post" @@ -151,7 +151,7 @@ Namespace DownloadObjects ' 'BTT_CONTEXT_DELETE ' - Me.BTT_CONTEXT_DELETE.Image = Global.SCrawler.My.Resources.Resources.Delete + Me.BTT_CONTEXT_DELETE.Image = Global.SCrawler.My.Resources.Resources.DeletePic_24 Me.BTT_CONTEXT_DELETE.Name = "BTT_CONTEXT_DELETE" Me.BTT_CONTEXT_DELETE.Size = New System.Drawing.Size(137, 22) Me.BTT_CONTEXT_DELETE.Text = "Delete" diff --git a/SCrawler/Download/FeedMedia.resx b/SCrawler/Download/Feed/FeedMedia.resx similarity index 100% rename from SCrawler/Download/FeedMedia.resx rename to SCrawler/Download/Feed/FeedMedia.resx diff --git a/SCrawler/Download/FeedMedia.vb b/SCrawler/Download/Feed/FeedMedia.vb similarity index 97% rename from SCrawler/Download/FeedMedia.vb rename to SCrawler/Download/Feed/FeedMedia.vb index 443e95c..88e0f50 100644 --- a/SCrawler/Download/FeedMedia.vb +++ b/SCrawler/Download/Feed/FeedMedia.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -8,15 +8,17 @@ ' but WITHOUT ANY WARRANTY 'Imports System.Windows.Forms.PropertyGridInternal Imports System.ComponentModel +Imports SCrawler.API.Base Imports PersonalUtilities.Forms Imports PersonalUtilities.Tools -Imports SCrawler.API.Base Imports UserMediaD = SCrawler.DownloadObjects.TDownloader.UserMediaD Namespace DownloadObjects Public Class FeedMedia -#Region "Declarations" +#Region "Events" Friend Event MediaDeleted(ByVal Sender As Object) +#End Region +#Region "Declarations" Private Const VideoHeight As Integer = 450 Private WithEvents MyPicture As PictureBox Private ReadOnly MyImage As ImageRenderer @@ -82,7 +84,7 @@ Namespace DownloadObjects Information.StringAppendLine($"Address: {File}") Information.StringAppendLine($"Downloaded: {Media.Date.ToStringDate(ADateTime.Formats.BaseDateTime)}") If Media.Data.Post.Date.HasValue Then Information.StringAppendLine($"Posted: {Media.Data.Post.Date.Value.ToStringDate(ADateTime.Formats.BaseDateTime)}") - Dim info$ = $"[{Media.Data.Type}] - " + Dim infoType As UserMedia.Types = Media.Data.Type Dim h% Dim s As Size @@ -110,7 +112,8 @@ Namespace DownloadObjects TP_MAIN.Controls.Add(MyPicture, 0, 1) BTT_CONTEXT_OPEN_MEDIA.Text &= " picture" BTT_CONTEXT_DELETE.Text &= " picture" - Case UserMedia.Types.Video + Case UserMedia.Types.Video, UserMedia.Types.m3u8 + infoType = UserMedia.Types.Video MyVideo = New FeedVideo(File) With {.Tag = File, .Dock = DockStyle.Fill, .ContextMenuStrip = CONTEXT_DATA} TP_MAIN.Controls.Add(MyVideo, 0, 1) BTT_CONTEXT_OPEN_MEDIA.Text &= " video" @@ -119,6 +122,8 @@ Namespace DownloadObjects Case Else : Throw New ArgumentNullException With {.HelpLink = 1} End Select + Dim info$ = $"[{infoType}] - " + If Not Media.User Is Nothing Then With Media.User UserKey = .Key diff --git a/SCrawler/Download/FeedVideo.Designer.vb b/SCrawler/Download/Feed/FeedVideo.Designer.vb similarity index 96% rename from SCrawler/Download/FeedVideo.Designer.vb rename to SCrawler/Download/Feed/FeedVideo.Designer.vb index df9b9d2..934b146 100644 --- a/SCrawler/Download/FeedVideo.Designer.vb +++ b/SCrawler/Download/Feed/FeedVideo.Designer.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -24,14 +24,13 @@ Namespace DownloadObjects Private Sub InitializeComponent() Dim TP_MAIN As System.Windows.Forms.TableLayoutPanel Dim TP_BUTTONS As System.Windows.Forms.TableLayoutPanel - Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(FeedVideo)) Me.MyVideo = New LibVLCSharp.WinForms.VideoView() Me.TR_POSITION = New System.Windows.Forms.TrackBar() - Me.TR_VOLUME = New System.Windows.Forms.TrackBar() - Me.LBL_TIME = New System.Windows.Forms.Label() Me.BTT_PLAY = New System.Windows.Forms.Button() Me.BTT_PAUSE = New System.Windows.Forms.Button() Me.BTT_STOP = New System.Windows.Forms.Button() + Me.TR_VOLUME = New System.Windows.Forms.TrackBar() + Me.LBL_TIME = New System.Windows.Forms.Label() TP_MAIN = New System.Windows.Forms.TableLayoutPanel() TP_BUTTONS = New System.Windows.Forms.TableLayoutPanel() TP_MAIN.SuspendLayout() @@ -100,27 +99,9 @@ Namespace DownloadObjects TP_BUTTONS.Size = New System.Drawing.Size(178, 26) TP_BUTTONS.TabIndex = 2 ' - 'TR_VOLUME - ' - Me.TR_VOLUME.Dock = System.Windows.Forms.DockStyle.Fill - Me.TR_VOLUME.Location = New System.Drawing.Point(81, 3) - Me.TR_VOLUME.Name = "TR_VOLUME" - Me.TR_VOLUME.Size = New System.Drawing.Size(94, 20) - Me.TR_VOLUME.TabIndex = 3 - ' - 'LBL_TIME - ' - Me.LBL_TIME.AutoSize = True - Me.LBL_TIME.Dock = System.Windows.Forms.DockStyle.Fill - Me.LBL_TIME.Location = New System.Drawing.Point(78, 0) - Me.LBL_TIME.Name = "LBL_TIME" - Me.LBL_TIME.Size = New System.Drawing.Size(1, 26) - Me.LBL_TIME.TabIndex = 4 - Me.LBL_TIME.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - ' 'BTT_PLAY ' - Me.BTT_PLAY.BackgroundImage = Global.SCrawler.My.Resources.Resources.StartPic_01_Green_16 + Me.BTT_PLAY.BackgroundImage = Global.SCrawler.My.Resources.Resources.StartPic_Green_16 Me.BTT_PLAY.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom Me.BTT_PLAY.Dock = System.Windows.Forms.DockStyle.Fill Me.BTT_PLAY.Location = New System.Drawing.Point(1, 1) @@ -144,7 +125,7 @@ Namespace DownloadObjects ' 'BTT_STOP ' - Me.BTT_STOP.BackgroundImage = CType(resources.GetObject("BTT_STOP.BackgroundImage"), System.Drawing.Image) + Me.BTT_STOP.BackgroundImage = Global.SCrawler.My.Resources.Resources.StopPic_32 Me.BTT_STOP.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom Me.BTT_STOP.Dock = System.Windows.Forms.DockStyle.Fill Me.BTT_STOP.Location = New System.Drawing.Point(51, 1) @@ -154,6 +135,24 @@ Namespace DownloadObjects Me.BTT_STOP.TabIndex = 2 Me.BTT_STOP.UseVisualStyleBackColor = True ' + 'TR_VOLUME + ' + Me.TR_VOLUME.Dock = System.Windows.Forms.DockStyle.Fill + Me.TR_VOLUME.Location = New System.Drawing.Point(81, 3) + Me.TR_VOLUME.Name = "TR_VOLUME" + Me.TR_VOLUME.Size = New System.Drawing.Size(94, 20) + Me.TR_VOLUME.TabIndex = 3 + ' + 'LBL_TIME + ' + Me.LBL_TIME.AutoSize = True + Me.LBL_TIME.Dock = System.Windows.Forms.DockStyle.Fill + Me.LBL_TIME.Location = New System.Drawing.Point(78, 0) + Me.LBL_TIME.Name = "LBL_TIME" + Me.LBL_TIME.Size = New System.Drawing.Size(1, 26) + Me.LBL_TIME.TabIndex = 4 + Me.LBL_TIME.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' 'FeedVideo ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) diff --git a/SCrawler/Download/FeedVideo.resx b/SCrawler/Download/Feed/FeedVideo.resx similarity index 85% rename from SCrawler/Download/FeedVideo.resx rename to SCrawler/Download/Feed/FeedVideo.resx index 98674e2..9ff4749 100644 --- a/SCrawler/Download/FeedVideo.resx +++ b/SCrawler/Download/Feed/FeedVideo.resx @@ -123,18 +123,4 @@ False - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAGLSURBVFhH7Vc7TsNAEPUNaDhAxAl8EaT0UKRFoqdNTcsp - qHIEHyGn4CNAiihwu7w3mTFrZeI466Ch4Emv8O7Mm9nd8X6qsWjbtgaXYAOmPWQfbWp1mw6ILcA16AUc - In0WKnM84DwDu9F+vb6kzcN9eru6TM8XZ+npvOqRbeyjDW3NTzVmKjsOcJiDGwpQ7P3meifgIdInS4Ra - c5UfBgw55eL4uXp0RzuW9KWG6VFbw/iAAUcuxh93t65oCalluoyh4fpAB9dcpv2UwY1ZEoyxWxNolILj - lHkCp2C2HI2G3QINsu4smilrfojUzgrzpx7wIf/5vmovhafFGJrA2oJzh5PMPAeyFJ4Wmc1CzQS4dcoG - 4hmTpfC0SMbSBJZd8XEX84zJUnhaJGNpAg0TkI+h4iuFp0UylsXtEvAMjaXwtIz/Cfy9BCKLMPw3DN+I - YrdiPQ/iDiMCHxHHcf9mhIa4CwmBxtgrGYGOuEupAQZx13IDDOMeJgY4xD3NcsB5yuP0uFEPAWK/8Dyv - qm/Ki638CNApKAAAAABJRU5ErkJggg== - - \ No newline at end of file diff --git a/SCrawler/Download/Feed/FeedVideo.vb b/SCrawler/Download/Feed/FeedVideo.vb new file mode 100644 index 0000000..da815b2 --- /dev/null +++ b/SCrawler/Download/Feed/FeedVideo.vb @@ -0,0 +1,180 @@ +' Copyright (C) 2023 Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY +Imports LibVLCSharp +Imports System.Threading +Imports System.ComponentModel +Imports PersonalUtilities.Tools +Imports PersonalUtilities.Tools.WEB +Imports VLCState = LibVLCSharp.Shared.VLCState +Namespace DownloadObjects + + Public Class FeedVideo + Private WithEvents MediaPlayer As [Shared].MediaPlayer + Private ReadOnly TimeChange As Action = Sub() + If _Disposed Then Exit Sub + Dim v# = DivideWithZeroChecking(MediaPlayer.Time, MediaPlayer.Length) * 10 + If v > 10 Then TR_POSITION.Value = 10 Else TR_POSITION.Value = v + End Sub + Private ReadOnly TimeChangeLabel As Action = Sub() + If _Disposed Then Exit Sub + If MediaPlayer.Time >= 0 Then + Dim t As TimeSpan = TimeSpan.FromMilliseconds(MediaPlayer.Time) + If Not VideoLength.HasValue Then + VideoLengthMs = MediaPlayer.Length + VideoLength = TimeSpan.FromMilliseconds(VideoLengthMs) + VideoLengthStr = VideoLength.Value.ToStringTime(FeedVideoLengthProvider) + End If + LBL_TIME.Text = $"{t.ToStringTime(FeedVideoLengthProvider)}/{VideoLengthStr}" + End If + End Sub + Private ReadOnly MyImage As ImageRenderer + Private VideoLength As TimeSpan? + Private VideoLengthMs As Integer = 0 + Private VideoLengthStr As String + Private MediaFile As SFile = Nothing + Public Sub New() + InitializeComponent() + End Sub + Friend Sub New(ByVal File As SFile) + InitializeComponent() + Try + MediaFile = File + Dim debugLogs As Boolean = False + '#If DEBUG Then + ' debugLogs = True + '#End If + MediaPlayer = New [Shared].MediaPlayer(New [Shared].Media(New [Shared].LibVLC(enableDebugLogs:=debugLogs), New Uri(File.ToString))) + MyVideo.MediaPlayer = MediaPlayer + TR_VOLUME.Value = MediaPlayer.Volume / 10 + If Settings.UseM3U8 Then + Dim f As SFile = $"{Settings.CachePath.PathWithSeparator}FeedSnapshots\{File.GetHashCode}.png" + If Not f.Exists Then f = FFMPEG.TakeSnapshot(File, f, Settings.FfmpegFile, TimeSpan.FromSeconds(1)) + If f.Exists Then + MyImage = New ImageRenderer(f, EDP.None) + Try + If Not MyImage.HasError Then + MyVideo.BackgroundImage = MyImage + MyVideo.BackgroundImageLayout = ImageLayout.Zoom + End If + Catch img_set_ex As Exception + 'TODELETE: FeedVideo set BackgroundImage error + ErrorsDescriber.Execute(EDP.SendInLog, img_set_ex, "Error setting background image for media player." & vbCr & + $"File: {File}{vbCr}Image: {f}") + End Try + End If + End If + UpdateButtons() + Catch ex As Exception + 'TODELETE: FeedVideo initialization error + ErrorsDescriber.Execute(EDP.SendInLog, ex, $"Media player initialization error({File})") + End Try + End Sub + Private _Disposed As Boolean = False + Private Sub FeedVideo_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed + _Disposed = True + If Not MediaPlayer Is Nothing Then MediaPlayer.Dispose() + If Not MyImage Is Nothing Then MyImage.Dispose() + End Sub + Private Async Sub BTT_PLAY_Click(sender As Object, e As EventArgs) Handles BTT_PLAY.Click + If _Disposed Then Exit Sub + Try + Dim p As Boolean = False + Select Case MediaPlayer.State + Case VLCState.NothingSpecial, VLCState.Stopped, VLCState.Paused : p = True + Case VLCState.Ended : Await Task.Run(Sub() [Stop]()) : p = True + End Select + If p Then Await RunAction(Sub() + Try : MediaPlayer.Play() : Catch : End Try + End Sub, "Play") + Catch + Finally + UpdateButtons() + End Try + End Sub + Private Async Sub BTT_PAUSE_Click(sender As Object, e As EventArgs) Handles BTT_PAUSE.Click + If _Disposed Then Exit Sub + Await RunAction(Sub() + Try : MediaPlayer.Pause() : Catch : End Try + End Sub, "Pause") + UpdateButtons() + End Sub + Friend Async Sub [Stop]() Handles BTT_STOP.Click + If _Disposed Then Exit Sub + Await RunAction(Sub() + Try : MediaPlayer.Stop() : Catch : End Try + End Sub, "Stop") + UpdateButtons() + End Sub + Private Sub MediaPlayer_TimeChanged(sender As Object, e As [Shared].MediaPlayerTimeChangedEventArgs) Handles MediaPlayer.TimeChanged + If _Disposed Then Exit Sub + If TR_POSITION.InvokeRequired Then TR_POSITION.Invoke(TimeChange) Else TimeChange.Invoke + If LBL_TIME.InvokeRequired Then LBL_TIME.Invoke(TimeChangeLabel) Else TimeChangeLabel.Invoke + End Sub + Private Async Sub TR_POSITION_MouseUp(sender As Object, e As MouseEventArgs) Handles TR_POSITION.MouseUp + If _Disposed Then Exit Sub + Try + Dim p% = e.X + Dim w% = TR_POSITION.Width + Dim v# + If p >= w Then + [Stop]() + Else + If p <= 0 Then + v = 0 + Else + v = VideoLengthMs / 100 * (DivideWithZeroChecking(p, w) * 100).RoundVal(2) + End If + Await RunAction(Sub() + Try : MediaPlayer.Time = v : Catch : End Try + End Sub, "TimeChange") + End If + Catch + End Try + End Sub + Private Sub TR_VOLUME_MouseUp(sender As Object, e As MouseEventArgs) Handles TR_VOLUME.MouseUp + If _Disposed Then Exit Sub + Try : MediaPlayer.Volume = TR_VOLUME.Value * 10 : Catch : End Try + End Sub + Private Sub MediaPlayer_Stopped(sender As Object, e As EventArgs) Handles MediaPlayer.Stopped + If _Disposed Then Exit Sub + Dim a As Action = Sub() TR_POSITION.Value = TR_POSITION.Maximum + If TR_POSITION.InvokeRequired Then TR_POSITION.Invoke(a) Else a.Invoke + UpdateButtons() + End Sub + Private Sub UpdateButtons() Handles MediaPlayer.Playing, MediaPlayer.Paused, MediaPlayer.Opening + Try + If _Disposed Then Exit Sub + Dim _play As Boolean = False, _pause As Boolean = False, _stop As Boolean = False + Select Case MediaPlayer.State + Case VLCState.NothingSpecial, VLCState.Stopped : _play = True + Case VLCState.Paused : _play = True : _stop = True + Case VLCState.Ended : _play = True + Case VLCState.Playing : _pause = True : _stop = True + End Select + ControlInvoke(BTT_PLAY, Sub() BTT_PLAY.Enabled = _play) + ControlInvoke(BTT_PAUSE, Sub() BTT_PAUSE.Enabled = _pause) + ControlInvoke(BTT_STOP, Sub() BTT_STOP.Enabled = _stop) + Catch + End Try + End Sub + Private Async Function RunAction(ByVal Action As Action, ByVal ActionName As String) As Task + Try + If _Disposed Then Exit Function + Using ts As New CancellationTokenSource + Dim token As CancellationToken = ts.Token + Using t As New Timer(Sub(cts) ts.Cancel(), ts, 5000, Timeout.Infinite) : Await Task.Run(Action, token) : End Using + End Using + Catch oex As OperationCanceledException + MyMainLOG = $"Cannot perform action [{ActionName}] on file [{MediaFile}]" + Catch ex As Exception + ErrorsDescriber.Execute(EDP.SendInLog, ex, $"An error occurred while performing action [{ActionName}] on file [{MediaFile}]") + End Try + End Function + End Class +End Namespace \ No newline at end of file diff --git a/SCrawler/Download/FeedVideo.vb b/SCrawler/Download/FeedVideo.vb deleted file mode 100644 index 1b93ff5..0000000 --- a/SCrawler/Download/FeedVideo.vb +++ /dev/null @@ -1,114 +0,0 @@ -' Copyright (C) 2022 Andy -' This program is free software: you can redistribute it and/or modify -' it under the terms of the GNU General Public License as published by -' the Free Software Foundation, either version 3 of the License, or -' (at your option) any later version. -' -' This program is distributed in the hope that it will be useful, -' but WITHOUT ANY WARRANTY -Imports LibVLCSharp -Imports System.ComponentModel -Imports PersonalUtilities.Tools -Imports PersonalUtilities.Tools.WEB -Imports VLCState = LibVLCSharp.Shared.VLCState -Namespace DownloadObjects - - Public Class FeedVideo - Private WithEvents MediaPlayer As [Shared].MediaPlayer - Private ReadOnly TimeChange As Action = Sub() - Dim v# = DivideWithZeroChecking(MediaPlayer.Time, MediaPlayer.Length) * 10 - If v > 10 Then TR_POSITION.Value = 10 Else TR_POSITION.Value = v - End Sub - Private ReadOnly TimeChangeLabel As Action = Sub() - If MediaPlayer.Time >= 0 Then - Dim t As TimeSpan = TimeSpan.FromMilliseconds(MediaPlayer.Time) - If Not VideoLength.HasValue Then - VideoLength = TimeSpan.FromMilliseconds(MediaPlayer.Length) - VideoLengthStr = VideoLength.Value.ToStringTime(FeedVideoLengthProvider) - End If - LBL_TIME.Text = $"{t.ToStringTime(FeedVideoLengthProvider)}/{VideoLengthStr}" - End If - End Sub - Private ReadOnly MyImage As ImageRenderer - Private VideoLength As TimeSpan? - Private VideoLengthStr As String - Public Sub New() - InitializeComponent() - End Sub - Friend Sub New(ByVal File As SFile) - InitializeComponent() - Dim debugLogs As Boolean = False -#If DEBUG Then - debugLogs = True -#End If - MediaPlayer = New [Shared].MediaPlayer(New [Shared].Media(New [Shared].LibVLC(enableDebugLogs:=debugLogs), New Uri(File.ToString))) - MyVideo.MediaPlayer = MediaPlayer - TR_VOLUME.Value = MediaPlayer.Volume / 10 - If Settings.UseM3U8 Then - Dim f As SFile = $"{Settings.CachePath.PathWithSeparator}FeedSnapshots\{File.GetHashCode}.png" - If Not f.Exists Then f = FFMPEG.TakeSnapshot(File, f, Settings.FfmpegFile, TimeSpan.FromSeconds(1)) - If f.Exists Then - MyImage = New ImageRenderer(f, EDP.None) - If Not MyImage.HasError Then - MyVideo.BackgroundImage = MyImage - MyVideo.BackgroundImageLayout = ImageLayout.Zoom - End If - End If - End If - UpdateButtons() - End Sub - Private Sub FeedVideo_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed - If Not MediaPlayer Is Nothing Then MediaPlayer.Dispose() - If Not MyImage Is Nothing Then MyImage.Dispose() - End Sub - Private Sub BTT_PLAY_Click(sender As Object, e As EventArgs) Handles BTT_PLAY.Click - Try - Select Case MediaPlayer.State - Case VLCState.NothingSpecial, VLCState.Stopped, VLCState.Paused : MediaPlayer.Play() - Case VLCState.Ended : MediaPlayer.Stop() : MediaPlayer.Play() - End Select - Catch - Finally - UpdateButtons() - End Try - End Sub - Private Sub BTT_PAUSE_Click(sender As Object, e As EventArgs) Handles BTT_PAUSE.Click - Try : MediaPlayer.Pause() : Catch : End Try - UpdateButtons() - End Sub - Friend Sub [Stop]() Handles BTT_STOP.Click - Try : MediaPlayer.Stop() : Catch : End Try - UpdateButtons() - End Sub - Private Sub MediaPlayer_TimeChanged(sender As Object, e As [Shared].MediaPlayerTimeChangedEventArgs) Handles MediaPlayer.TimeChanged - If TR_POSITION.InvokeRequired Then TR_POSITION.Invoke(TimeChange) Else TimeChange.Invoke - If LBL_TIME.InvokeRequired Then LBL_TIME.Invoke(TimeChangeLabel) Else TimeChangeLabel.Invoke - End Sub - Private Sub TR_POSITION_MouseUp(sender As Object, e As MouseEventArgs) Handles TR_POSITION.MouseUp - Try : MediaPlayer.Time = (MediaPlayer.Length / 100) * (TR_POSITION.Value * 10) : Catch : End Try - End Sub - Private Sub TR_VOLUME_MouseUp(sender As Object, e As MouseEventArgs) Handles TR_VOLUME.MouseUp - Try : MediaPlayer.Volume = TR_VOLUME.Value * 10 : Catch : End Try - End Sub - Private Sub MediaPlayer_Stopped(sender As Object, e As EventArgs) Handles MediaPlayer.Stopped - Dim a As Action = Sub() TR_POSITION.Value = TR_POSITION.Maximum - If TR_POSITION.InvokeRequired Then TR_POSITION.Invoke(a) Else a.Invoke - UpdateButtons() - End Sub - Private Sub UpdateButtons() Handles MediaPlayer.Playing, MediaPlayer.Paused, MediaPlayer.Opening - Try - Dim _play As Boolean = False, _pause As Boolean = False, _stop As Boolean = False - Select Case MediaPlayer.State - Case VLCState.NothingSpecial, VLCState.Stopped : _play = True - Case VLCState.Paused : _play = True : _stop = True - Case VLCState.Ended : _play = True - Case VLCState.Playing : _pause = True : _stop = True - End Select - ControlInvoke(BTT_PLAY, Sub() BTT_PLAY.Enabled = _play) - ControlInvoke(BTT_PAUSE, Sub() BTT_PAUSE.Enabled = _pause) - ControlInvoke(BTT_STOP, Sub() BTT_STOP.Enabled = _stop) - Catch - End Try - End Sub - End Class -End Namespace \ No newline at end of file diff --git a/SCrawler/Download/Groups/DownloadGroup.vb b/SCrawler/Download/Groups/DownloadGroup.vb index 1af65b7..3a63fb7 100644 --- a/SCrawler/Download/Groups/DownloadGroup.vb +++ b/SCrawler/Download/Groups/DownloadGroup.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -6,21 +6,26 @@ ' ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY -Imports PersonalUtilities.Functions.XML -Imports PersonalUtilities.Functions.XML.Base Imports SCrawler.API Imports SCrawler.API.Base +Imports PersonalUtilities.Functions.XML +Imports PersonalUtilities.Functions.XML.Base Namespace DownloadObjects.Groups Friend Class DownloadGroup : Inherits GroupParameters : Implements IIndexable, IEContainerProvider +#Region "Events" Friend Delegate Sub GroupEventHandler(ByVal Sender As DownloadGroup) Friend Event Deleted As GroupEventHandler Friend Event Updated As GroupEventHandler +#End Region +#Region "Declarations" +#Region "Controls" Private WithEvents BTT_EDIT As ToolStripMenuItem Private WithEvents BTT_DELETE As ToolStripMenuItem Private WithEvents BTT_DOWNLOAD As ToolStripMenuItem Private WithEvents BTT_DOWNLOAD_FULL As ToolStripMenuItem Private ReadOnly SEP_1 As ToolStripSeparator Private WithEvents BTT_MENU As ToolStripMenuItem +#End Region Friend Property NameBefore As String = String.Empty Private _Key As String = String.Empty Friend ReadOnly Property Key As String @@ -40,14 +45,20 @@ Namespace DownloadObjects.Groups If b Then RaiseEvent Updated(Me) End Set End Property + Private Function SetIndex(ByVal Obj As Object, ByVal _Index As Integer) As Object Implements IIndexable.SetIndex + DirectCast(Obj, DownloadGroup).Index = _Index + Return Obj + End Function +#End Region +#Region "Initializers" Friend Sub New() BTT_MENU = New ToolStripMenuItem With { .ToolTipText = "Download users of this group", .AutoToolTip = True, - .Image = My.Resources.GroupBy_284.ToBitmap + .Image = My.Resources.GroupByIcon_16.ToBitmap } BTT_DELETE = New ToolStripMenuItem With { - .Image = PersonalUtilities.My.Resources.DeletePic_02_Red_24, + .Image = PersonalUtilities.My.Resources.DeletePic_Red_24, .BackColor = MyColor.DeleteBack, .ForeColor = MyColor.DeleteFore, .Text = "Delete", @@ -55,7 +66,7 @@ Namespace DownloadObjects.Groups .AutoToolTip = False } BTT_EDIT = New ToolStripMenuItem With { - .Image = PersonalUtilities.My.Resources.PencilPic_01_48, + .Image = PersonalUtilities.My.Resources.PencilPic_16, .BackColor = MyColor.EditBack, .ForeColor = MyColor.EditFore, .Text = "Edit", @@ -64,13 +75,13 @@ Namespace DownloadObjects.Groups } SEP_1 = New ToolStripSeparator BTT_DOWNLOAD = New ToolStripMenuItem With { - .Image = My.Resources.StartPic_01_Green_16, + .Image = My.Resources.StartPic_Green_16, .Text = "Download", .ToolTipText = "Download users of this group (respect the 'Ready for download' parameter)", .AutoToolTip = True } BTT_DOWNLOAD_FULL = New ToolStripMenuItem With { - .Image = My.Resources.StartPic_01_Green_16, + .Image = My.Resources.StartPic_Green_16, .Text = "Download FULL", .ToolTipText = "Download users of this group (ignore the 'Ready for download' parameter)", .AutoToolTip = True @@ -86,9 +97,13 @@ Namespace DownloadObjects.Groups ReadyForDownloadIgnore = e.Attribute(Name_ReadyForDownloadIgnore).Value.FromXML(Of Boolean)(False) If Not e.Value.IsEmptyString Then Labels.ListAddList(e.Value.Split("|"), LAP.NotContainsOnly) End Sub +#End Region +#Region "ToString" Public Overrides Function ToString() As String Return $"{IIf(Index.ValueBetween(0, 8), $"#{Index + 1}: ", String.Empty)}{Name}" End Function +#End Region +#Region "GetControl" Private _ControlSent As Boolean = False Friend Function GetControl() As ToolStripMenuItem If Not _ControlSent Then @@ -98,10 +113,7 @@ Namespace DownloadObjects.Groups End If Return BTT_MENU End Function - Private Function SetIndex(ByVal Obj As Object, ByVal _Index As Integer) As Object Implements IIndexable.SetIndex - DirectCast(Obj, DownloadGroup).Index = _Index - Return Obj - End Function +#End Region #Region "Buttons" Private Sub BTT_MENU_Click(sender As Object, e As EventArgs) Handles BTT_MENU.Click DownloadUsers(True) @@ -124,6 +136,8 @@ Namespace DownloadObjects.Groups Private Sub BTT_DOWNLOAD_FULL_Click(sender As Object, e As EventArgs) Handles BTT_DOWNLOAD_FULL.Click DownloadUsers(False) End Sub +#End Region +#Region "Get users" Friend Overloads Function GetUsers() As IEnumerable(Of IUserData) Return GetUsers(Me, True) End Function @@ -134,7 +148,7 @@ Namespace DownloadObjects.Groups Dim CheckParams As Predicate(Of IUserData) = Function(user) _ (.Temporary = CheckState.Indeterminate Or user.Temporary = CBool(.Temporary)) And (.Favorite = CheckState.Indeterminate Or (user.Favorite = CBool(.Favorite))) And - (Not UseReadyOption Or .ReadyForDownloadIgnore Or user.ReadyForDownload = .ReadyForDownload) + (Not UseReadyOption Or .ReadyForDownloadIgnore Or user.ReadyForDownload = .ReadyForDownload) And user.Exists Dim f As Func(Of IUserData, IEnumerable(Of IUserData)) = Function(ByVal user As IUserData) As IEnumerable(Of IUserData) If user.IsCollection Then With DirectCast(user, UserDataBind) @@ -156,12 +170,14 @@ Namespace DownloadObjects.Groups Return ErrorsDescriber.Execute(EDP.SendInLog, ex, "[DownloadGroup.GetUsers]") End Try End Function +#End Region +#Region "Download users" Friend Sub DownloadUsers(ByVal UseReadyOption As Boolean) Try If Settings.Users.Count > 0 Then Dim u As IEnumerable(Of IUserData) = GetUsers(Me, UseReadyOption) If u.ListExists Then - Downloader.AddRange(u) + Downloader.AddRange(u, True) Else MsgBoxE({$"No users found for group [{Name}].", "No users found"}, vbExclamation) End If diff --git a/SCrawler/Download/Groups/GroupEditorForm.Designer.vb b/SCrawler/Download/Groups/GroupEditorForm.Designer.vb index 5906b0b..e123168 100644 --- a/SCrawler/Download/Groups/GroupEditorForm.Designer.vb +++ b/SCrawler/Download/Groups/GroupEditorForm.Designer.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -70,13 +70,13 @@ Namespace DownloadObjects.Groups Me.ClientSize = New System.Drawing.Size(476, 134) Me.Controls.Add(CONTAINER_MAIN) Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle + Me.Icon = Global.SCrawler.My.Resources.Resources.GroupByIcon_16 Me.KeyPreview = True Me.MaximizeBox = False Me.MaximumSize = New System.Drawing.Size(492, 173) Me.MinimizeBox = False Me.MinimumSize = New System.Drawing.Size(492, 173) Me.Name = "GroupEditorForm" - Me.ShowIcon = False Me.ShowInTaskbar = False Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide Me.Text = "Group" diff --git a/SCrawler/Download/Groups/GroupEditorForm.vb b/SCrawler/Download/Groups/GroupEditorForm.vb index a2767a7..37f5cf2 100644 --- a/SCrawler/Download/Groups/GroupEditorForm.vb +++ b/SCrawler/Download/Groups/GroupEditorForm.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -42,7 +42,7 @@ Namespace DownloadObjects.Groups Return Nothing End Function Private Function GetFormat(ByVal FormatType As Type) As Object Implements IFormatProvider.GetFormat - Throw New NotImplementedException("GetFormat is not available in this context") + Throw New NotImplementedException("[GetFormat] is not available in this context") End Function End Class Private Sub GroupEditorForm_Load(sender As Object, e As EventArgs) Handles Me.Load diff --git a/SCrawler/Download/MissingPostsForm.Designer.vb b/SCrawler/Download/MissingPostsForm.Designer.vb index ebf3b87..3e67a02 100644 --- a/SCrawler/Download/MissingPostsForm.Designer.vb +++ b/SCrawler/Download/MissingPostsForm.Designer.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -99,7 +99,7 @@ Namespace DownloadObjects 'BTT_DOWN ' Me.BTT_DOWN.AutoToolTip = True - Me.BTT_DOWN.Image = Global.SCrawler.My.Resources.Resources.StartPic_01_Green_16 + Me.BTT_DOWN.Image = Global.SCrawler.My.Resources.Resources.StartPic_Green_16 Me.BTT_DOWN.Name = "BTT_DOWN" Me.BTT_DOWN.Size = New System.Drawing.Size(181, 22) Me.BTT_DOWN.Text = "Download" @@ -107,14 +107,14 @@ Namespace DownloadObjects ' 'BTT_OPEN_POST ' - Me.BTT_OPEN_POST.Image = Global.SCrawler.My.Resources.Resources.GlobeBlue_32 + Me.BTT_OPEN_POST.Image = Global.SCrawler.My.Resources.Resources.GlobePic_32 Me.BTT_OPEN_POST.Name = "BTT_OPEN_POST" Me.BTT_OPEN_POST.Size = New System.Drawing.Size(181, 22) Me.BTT_OPEN_POST.Text = "Open post" ' 'BTT_OPEN_USER ' - Me.BTT_OPEN_USER.Image = Global.SCrawler.My.Resources.Resources.Folder_32 + Me.BTT_OPEN_USER.Image = Global.SCrawler.My.Resources.Resources.FolderPic_32 Me.BTT_OPEN_USER.Name = "BTT_OPEN_USER" Me.BTT_OPEN_USER.Size = New System.Drawing.Size(181, 22) Me.BTT_OPEN_USER.Text = "Open user folder" @@ -129,7 +129,7 @@ Namespace DownloadObjects 'BTT_DELETE ' Me.BTT_DELETE.AutoToolTip = True - Me.BTT_DELETE.Image = Global.SCrawler.My.Resources.Resources.Delete + Me.BTT_DELETE.Image = Global.SCrawler.My.Resources.Resources.DeletePic_24 Me.BTT_DELETE.Name = "BTT_DELETE" Me.BTT_DELETE.Size = New System.Drawing.Size(181, 22) Me.BTT_DELETE.Text = "Delete post" diff --git a/SCrawler/Download/MissingPostsForm.vb b/SCrawler/Download/MissingPostsForm.vb index c2b33d6..e3bde2c 100644 --- a/SCrawler/Download/MissingPostsForm.vb +++ b/SCrawler/Download/MissingPostsForm.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -28,7 +28,7 @@ Namespace DownloadObjects .Text = "Download ALL", .ToolTipText = String.Empty, .AutoToolTip = False, - .Image = My.Resources.StartPic_01_Green_16, + .Image = My.Resources.StartPic_Green_16, .DisplayStyle = ToolStripItemDisplayStyle.ImageAndText } BTT_INFO = New ToolStripButton With { @@ -62,17 +62,11 @@ Namespace DownloadObjects #End Region #Region "RefillList" Private Overloads Sub RefillList() Handles MyDefs.ButtonUpdateClick - RefillList(True) - End Sub - Friend Overloads Sub RefillList(ByVal User As IUserData) - If MUsers.Count = 0 OrElse Not MUsers.Contains(User) Then MUsers.Add(User) : RefillList(False) - End Sub - Friend Overloads Sub RefillList(ByVal Reload As Boolean) Try - If Reload Then MUsers.Clear() + MUsers.Clear() LIST_DATA.Items.Clear() LIST_DATA.Groups.Clear() - If Reload And Settings.Users.Count > 0 Then + If Settings.Users.Count > 0 Then MUsers.ListAddList(Settings.Users.SelectMany(Function(ByVal user As IUserData) As IEnumerable(Of IUserData) DirectCast(user, UserDataBase).LoadContentInformation() If user.IsCollection Then @@ -111,25 +105,43 @@ Namespace DownloadObjects End Sub #End Region #Region "Post actions" + Private Sub BTT_DOWN_ALL_Click(sender As Object, e As EventArgs) Handles BTT_DOWN_ALL.Click + Try + Const MsgTitle$ = "Download users" + If MUsers.Count > 0 Then + If MsgBoxE({$"You are trying to download missing posts of {MUsers.Count} user(s).", MsgTitle}, vbExclamation,,, {"Process", "Cancel"}) = 0 Then + MUsers.ForEach(Sub(u) u.DownloadMissingOnly = True) + Downloader.AddRange(MUsers, True) + Else + MsgBoxE({"Operation canceled", MsgTitle}) + End If + Else + MsgBoxE({"No users found", MsgTitle}, vbExclamation) + End If + Catch ex As Exception + ErrorsDescriber.Execute(EDP.SendInLog, ex, "[DownloadObjects.MissingPostsForm.DownloadAll]") + End Try + End Sub Private Sub BTT_DOWN_Click(sender As Object, e As EventArgs) Handles BTT_DOWN.Click - 'Try - ' If LIST_DATA.SelectedItems.Count > 0 Then - ' Dim users As List(Of IUserData) = LIST_DATA.SelectedItems.ToObjectsList.ListCast(Of ListViewItem)(). - ' Select(Function(d) Settings.GetUser(CStr(d.Group.Tag))).ListWithRemove(Function(d) d Is Nothing) - ' If users.ListExists Then - ' If MsgBoxE({"The following users will be added to the download queue:" & vbCr & vbCr & - ' users.Select(Function(u) u.ToString).ListToString(vbNewLine), "Download users"},,,, {"Process", "Cancel"}) = 0 Then - ' users.ForEach(Sub(u) u.DownloadMissingOnly = True) - ' Downloader.AddRange(users) - ' users.Clear() - ' End If - ' End If - ' Else - ' MsgBoxE("No selected posts") - ' End If - 'Catch ex As Exception - ' ErrorsDescriber.Execute(EDP.SendInLog, ex, "[DownloadObjects.MissingPostsForm.Download]") - 'End Try + Try + Const MsgTitle$ = "Download users" + If LIST_DATA.SelectedItems.Count > 0 Then + Dim users As List(Of IUserData) = LIST_DATA.SelectedItems.ToObjectsList.ListCast(Of ListViewItem)(). + Select(Function(d) Settings.GetUser(CStr(d.Group.Tag))).ListWithRemove(Function(d) d Is Nothing) + If users.ListExists Then + If MsgBoxE({"The following users will be added to the download queue:" & vbCr & vbCr & + users.Select(Function(u) u.ToString).ListToString(vbNewLine), MsgTitle},,,, {"Process", "Cancel"}) = 0 Then + users.ForEach(Sub(u) u.DownloadMissingOnly = True) + Downloader.AddRange(users, True) + users.Clear() + End If + End If + Else + MsgBoxE({"No selected posts", MsgTitle}) + End If + Catch ex As Exception + ErrorsDescriber.Execute(EDP.SendInLog, ex, "[DownloadObjects.MissingPostsForm.Download]") + End Try End Sub Private Sub BTT_OPEN_POST_Click(sender As Object, e As EventArgs) Handles BTT_OPEN_POST.Click Try @@ -236,7 +248,8 @@ Namespace DownloadObjects Try If LIST_DATA.SelectedItems.Count > 0 Then Dim user As IUserData = LIST_DATA.SelectedItems.ToObjectsList.ListCast(Of ListViewItem)(). - Select(Function(d) Settings.GetUser(CStr(d.Group.Tag))).ListWithRemove(Function(d) d Is Nothing).DefaultIfEmpty(Nothing).First + Select(Function(d) Settings.GetUser(CStr(d.Group.Tag))).ListWithRemove(Function(d) d Is Nothing). + DefaultIfEmpty(Nothing).First If Not user Is Nothing Then MainFrameObj.FocusUser(user.Key, True) Else MsgBoxE("No selected posts") @@ -252,7 +265,7 @@ Namespace DownloadObjects Dim data As List(Of ListViewItem) = LIST_DATA.SelectedItems.ToObjectsList.ListCast(Of ListViewItem) If data.ListExists Then Dim lp As New ListAddParams(LAP.NotContainsOnly) - Dim usersCount% = ListAddList(Nothing, data.Select(Function(d) d.Group.Name), LAP.NotContainsOnly).ListIfNothing.Count + Dim usersCount% = ListAddList(Nothing, data.Select(Function(d) d.Group.Header), LAP.NotContainsOnly).ListIfNothing.Count If MsgBoxE({"Are you sure you want to delete the selected missing posts?" & vbCr & $"Number of affected users: {usersCount}." & vbCr & $"Number of posts to be deleted: {data.Count}.", MsgTitle}, vbExclamation,,, {"Process", "Cancel"}) = 0 Then @@ -280,8 +293,11 @@ Namespace DownloadObjects Catch ex As Exception ErrorsDescriber.Execute(EDP.SendInLog, ex, "[DownloadObjects.MissingPostsForm.DeletePost]") Finally - UpdateUsers(UsersToUpdate) - UsersToUpdate.Clear() + If UsersToUpdate.Count > 0 Then + UpdateUsers(UsersToUpdate) + UsersToUpdate.Clear() + RefillList() + End If End Try End Sub Private Sub UpdateUsers(ByVal UserList As List(Of UserDataBase)) diff --git a/SCrawler/Download/TDownloader.vb b/SCrawler/Download/TDownloader.vb index f48ba94..afd7167 100644 --- a/SCrawler/Download/TDownloader.vb +++ b/SCrawler/Download/TDownloader.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -6,8 +6,10 @@ ' ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY -Imports System.Threading +Imports PersonalUtilities.Functions.XML +Imports PersonalUtilities.Functions.XML.Base Imports PersonalUtilities.Tools +Imports System.Threading Imports SCrawler.API.Base Imports SCrawler.Plugin.Hosts Imports Download = SCrawler.Plugin.ISiteSettings.Download @@ -23,7 +25,15 @@ Namespace DownloadObjects #End Region #Region "Declarations" #Region "Files" - Friend Structure UserMediaD : Implements IComparable(Of UserMediaD), IEquatable(Of UserMediaD) + Friend Structure UserMediaD : Implements IComparable(Of UserMediaD), IEquatable(Of UserMediaD), IEContainerProvider +#Region "XML Names" + Private Const Name_Data As String = "Data" + Private Const Name_User As String = UserInfo.Name_UserNode + Private Const Name_Media As String = UserMedia.Name_MediaNode + Private Const Name_Date As String = "Date" + Private Const Name_Session As String = "Session" + Private Const Name_File As String = "File" +#End Region Friend ReadOnly User As IUserData Friend ReadOnly Data As UserMedia Friend ReadOnly [Date] As Date @@ -34,6 +44,22 @@ Namespace DownloadObjects [Date] = Now Me.Session = Session End Sub + Private Sub New(ByVal e As EContainer) + If Not e Is Nothing Then + If e.Contains(Name_User) Then + Dim u As UserInfo = e(Name_User) + If Not u.Name.IsEmptyString And Not u.Site.IsEmptyString Then User = Settings.GetUser(u) + End If + Data = New UserMedia(e(Name_Media), User) + [Date] = AConvert(Of Date)(e.Value(Name_Date), ParsersDataDateProvider, Now) + Session = e.Value(Name_Session).FromXML(Of Integer)(0) + Dim f As SFile = e.Value(Name_File) + If f.Exists Then Data.File = f + End If + End Sub + Public Shared Widening Operator CType(ByVal e As EContainer) As UserMediaD + Return New UserMediaD(e) + End Operator Private Function CompareTo(ByVal Other As UserMediaD) As Integer Implements IComparable(Of UserMediaD).CompareTo If Not Session = Other.Session Then Return Session.CompareTo(Other.Session) * -1 @@ -49,10 +75,54 @@ Namespace DownloadObjects Public Overloads Overrides Function Equals(ByVal Obj As Object) As Boolean Return Equals(DirectCast(Obj, UserMedia)) End Function + Friend Function ToEContainer(Optional ByVal e As ErrorsDescriber = Nothing) As EContainer Implements IEContainerProvider.ToEContainer + Return ListAddValue(New EContainer(Name_Data, String.Empty) From { + Data.ToEContainer, + New EContainer(Name_Date, AConvert(Of String)([Date], ParsersDataDateProvider, String.Empty)), + New EContainer(Name_Session, Session), + New EContainer(Name_File, Data.File)}, + If(Not User Is Nothing, DirectCast(User, UserDataBase).User.ToEContainer, Nothing), LAP.IgnoreICopier) + End Function End Structure Friend ReadOnly Property Files As List(Of UserMediaD) Friend Property FilesChanged As Boolean = False Private ReadOnly FilesLP As New ListAddParams(LAP.NotContainsOnly) + Private FilesLastSessionBackedup As Boolean = False + Friend Const SessionsPath As String = "Settings\Sessions\" + Friend ReadOnly FilesSessionActual As SFile = $"{SessionsPath}Latest.xml" + Private ReadOnly FilesSessionBackup As SFile = $"{SessionsPath}Latest_Backup.xml" + Private Sub FilesSave() + Try + If Settings.FeedStoreSessionsData And Files.Count > 0 Then + FilesBackupLastSession() + Using x As New XmlFile With {.Name = "Session", .AllowSameNames = True} + x.AddRange(Files) + x.Save(FilesSessionActual) + End Using + End If + Catch ex As Exception + ErrorsDescriber.Execute(EDP.SendInLog, ex, "[DownloadObjects.TDownloader.FilesSave]") + End Try + End Sub + Private Sub FilesBackupLastSession() + Try + If Not FilesLastSessionBackedup Then + If FilesSessionActual.Exists Then + If FilesSessionBackup.Exists Then + Dim f As SFile = SFile.Indexed_IndexFile(FilesSessionBackup) + SFile.Rename(FilesSessionBackup, f) + RemoveLogFiles(FilesSessionBackup, 10) + FilesSessionBackup.Delete() + End If + SFile.Rename(FilesSessionActual, FilesSessionBackup) + End If + End If + Catch ex As Exception + ErrorsDescriber.Execute(EDP.SendInLog, ex, "[DownloadObjects.TDownloader.FilesBackupLastSession]") + Finally + FilesLastSessionBackedup = True + End Try + End Sub #End Region Friend ReadOnly Property Downloaded As List(Of IUserData) Private ReadOnly NProv As IFormatProvider @@ -120,12 +190,13 @@ Namespace DownloadObjects Keys = New List(Of String) [Type] = JobType End Sub - Public Overrides Function Add(ByVal User As IUserData) As Boolean + Public Overloads Function Add(ByVal User As IUserData, ByVal _IncludedInTheFeed As Boolean) As Boolean With DirectCast(User, UserDataBase) If Keys.Count > 0 Then Dim i% = Keys.IndexOf(.User.Plugin) If i >= 0 Then Items.Add(User) + DirectCast(Items.Last, UserDataBase).IncludeInTheFeed = _IncludedInTheFeed OnItemsCountChange(Me, Count) Return True Else @@ -267,7 +338,7 @@ Namespace DownloadObjects Files.Sort() FilesChanged = Not fBefore = Files.Count RaiseEvent Downloading(False) - If FilesChanged Then RaiseEvent FeedFilesChanged(True) + If FilesChanged Then FilesSave() : RaiseEvent FeedFilesChanged(True) End Try End Sub Private Sub StartDownloading(ByRef _Job As Job) @@ -275,7 +346,7 @@ Namespace DownloadObjects Dim n$ = _Job.Name Dim pt As Func(Of String, String) = Function(ByVal t As String) As String Dim _t$ = If(isSeparated, $"{n} {Left(t, 1).ToLower}{Right(t, t.Length - 1)}", t) - If Not AutoDownloaderWorking Then RaiseEvent SendNotification(_t) + If Not AutoDownloaderWorking Then RaiseEvent SendNotification(SettingsCLS.NotificationObjects.Profiles, _t) Return _t End Function Try @@ -352,7 +423,7 @@ Namespace DownloadObjects If Not .Disposed AndAlso Not .IsCollection AndAlso .DownloadedTotal(False) > 0 Then If Not Downloaded.Contains(.Self) Then Downloaded.Add(Settings.GetUser(.Self)) With DirectCast(.Self, UserDataBase) - If .LatestData.Count > 0 Then Files.ListAddList(.LatestData.Select(Function(d) New UserMediaD(d, .Self, Session)), FilesLP) + If .LatestData.Count > 0 And .IncludeInTheFeed Then Files.ListAddList(.LatestData.Select(Function(d) New UserMediaD(d, .Self, Session)), FilesLP) End With dcc = True End If @@ -382,28 +453,28 @@ Namespace DownloadObjects End Sub #End Region #Region "Add" - Private Sub AddItem(ByVal Item As IUserData, ByVal _UpdateJobsLabel As Boolean) + Private Sub AddItem(ByVal Item As IUserData, ByVal _UpdateJobsLabel As Boolean, ByVal _IncludedInTheFeed As Boolean) ReconfPool() If Item.IsCollection Then - Item.DownloadData(Nothing) + DirectCast(Item, API.UserDataBind).DownloadData(Nothing, _IncludedInTheFeed) Else If Not Contains(Item) Then If Pool.Count > 0 Then For i% = 0 To Pool.Count - 1 - If Pool(i).Add(Item) Then Exit For + If Pool(i).Add(Item, _IncludedInTheFeed) Then Exit For Next End If If _UpdateJobsLabel Then UpdateJobsLabel() End If End If End Sub - Friend Sub Add(ByVal Item As IUserData) - AddItem(Item, True) + Friend Sub Add(ByVal Item As IUserData, ByVal _IncludedInTheFeed As Boolean) + AddItem(Item, True, _IncludedInTheFeed) Start() End Sub - Friend Sub AddRange(ByVal _Items As IEnumerable(Of IUserData)) + Friend Sub AddRange(ByVal _Items As IEnumerable(Of IUserData), ByVal _IncludedInTheFeed As Boolean) If _Items.ListExists Then - For i% = 0 To _Items.Count - 1 : AddItem(_Items(i), False) : Next + For i% = 0 To _Items.Count - 1 : AddItem(_Items(i), False, _IncludedInTheFeed) : Next UpdateJobsLabel() End If Start() diff --git a/SCrawler/Download/VideosDownloaderForm.Designer.vb b/SCrawler/Download/VideosDownloaderForm.Designer.vb index 24fffb8..1657b8c 100644 --- a/SCrawler/Download/VideosDownloaderForm.Designer.vb +++ b/SCrawler/Download/VideosDownloaderForm.Designer.vb @@ -1,4 +1,12 @@ -Namespace DownloadObjects +' Copyright (C) 2023 Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY +Namespace DownloadObjects Partial Friend Class VideosDownloaderForm : Inherits System.Windows.Forms.Form @@ -16,7 +24,6 @@ Private Sub InitializeComponent() Dim SEP_1 As System.Windows.Forms.ToolStripSeparator Dim SEP_2 As System.Windows.Forms.ToolStripSeparator - Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(VideosDownloaderForm)) Me.ToolbarTOP = New System.Windows.Forms.ToolStrip() Me.BTT_ADD = New System.Windows.Forms.ToolStripButton() Me.BTT_ADD_LIST = New System.Windows.Forms.ToolStripButton() @@ -56,7 +63,7 @@ 'BTT_ADD ' Me.BTT_ADD.AutoToolTip = False - Me.BTT_ADD.Image = Global.SCrawler.My.Resources.Resources.PlusPIC + Me.BTT_ADD.Image = Global.SCrawler.My.Resources.Resources.PlusPic_24 Me.BTT_ADD.ImageTransparentColor = System.Drawing.Color.Magenta Me.BTT_ADD.Name = "BTT_ADD" Me.BTT_ADD.Size = New System.Drawing.Size(75, 22) @@ -65,7 +72,7 @@ 'BTT_ADD_LIST ' Me.BTT_ADD_LIST.AutoToolTip = False - Me.BTT_ADD_LIST.Image = Global.SCrawler.My.Resources.Resources.PlusPIC + Me.BTT_ADD_LIST.Image = Global.SCrawler.My.Resources.Resources.PlusPic_24 Me.BTT_ADD_LIST.ImageTransparentColor = System.Drawing.Color.Magenta Me.BTT_ADD_LIST.Name = "BTT_ADD_LIST" Me.BTT_ADD_LIST.Size = New System.Drawing.Size(67, 22) @@ -74,7 +81,7 @@ 'BTT_DELETE ' Me.BTT_DELETE.AutoToolTip = False - Me.BTT_DELETE.Image = Global.SCrawler.My.Resources.Resources.Delete + Me.BTT_DELETE.Image = Global.SCrawler.My.Resources.Resources.DeletePic_24 Me.BTT_DELETE.ImageTransparentColor = System.Drawing.Color.Magenta Me.BTT_DELETE.Name = "BTT_DELETE" Me.BTT_DELETE.Size = New System.Drawing.Size(83, 22) @@ -83,7 +90,7 @@ 'BTT_DOWN ' Me.BTT_DOWN.AutoToolTip = False - Me.BTT_DOWN.Image = Global.SCrawler.My.Resources.Resources.StartPic_01_Green_16 + Me.BTT_DOWN.Image = Global.SCrawler.My.Resources.Resources.StartPic_Green_16 Me.BTT_DOWN.ImageTransparentColor = System.Drawing.Color.Magenta Me.BTT_DOWN.Name = "BTT_DOWN" Me.BTT_DOWN.Size = New System.Drawing.Size(104, 22) @@ -93,7 +100,7 @@ ' Me.BTT_STOP.AutoToolTip = False Me.BTT_STOP.Enabled = False - Me.BTT_STOP.Image = CType(resources.GetObject("BTT_STOP.Image"), System.Drawing.Image) + Me.BTT_STOP.Image = Global.SCrawler.My.Resources.Resources.DeletePic_24 Me.BTT_STOP.ImageTransparentColor = System.Drawing.Color.Magenta Me.BTT_STOP.Name = "BTT_STOP" Me.BTT_STOP.Size = New System.Drawing.Size(51, 22) @@ -102,7 +109,7 @@ 'BTT_OPEN_PATH ' Me.BTT_OPEN_PATH.AutoToolTip = False - Me.BTT_OPEN_PATH.Image = Global.SCrawler.My.Resources.Resources.Folder_32 + Me.BTT_OPEN_PATH.Image = Global.SCrawler.My.Resources.Resources.FolderPic_32 Me.BTT_OPEN_PATH.ImageTransparentColor = System.Drawing.Color.Magenta Me.BTT_OPEN_PATH.Name = "BTT_OPEN_PATH" Me.BTT_OPEN_PATH.Size = New System.Drawing.Size(120, 22) @@ -148,7 +155,7 @@ Me.MinimumSize = New System.Drawing.Size(540, 400) Me.Name = "VideosDownloaderForm" Me.ShowIcon = False - Me.Text = "Download Videos" + Me.Text = "Download videos" Me.ToolbarTOP.ResumeLayout(False) Me.ToolbarTOP.PerformLayout() Me.ToolbarBOTTOM.ResumeLayout(False) @@ -157,7 +164,6 @@ Me.PerformLayout() End Sub - Private WithEvents ToolbarTOP As ToolStrip Private WithEvents BTT_ADD As ToolStripButton Private WithEvents BTT_ADD_LIST As ToolStripButton diff --git a/SCrawler/Download/VideosDownloaderForm.resx b/SCrawler/Download/VideosDownloaderForm.resx index 3e29515..d0894be 100644 --- a/SCrawler/Download/VideosDownloaderForm.resx +++ b/SCrawler/Download/VideosDownloaderForm.resx @@ -126,36 +126,6 @@ 17, 17 - - - - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAVCSURBVEhLjZVtTFNXGMcLQmdHO6CdhGSlc4gDBAr2Qrmo - GJygFFuBtoLKiJpRcUXFF5QoRmM00SgmS/Zh+7B92DKTmblEl2VzgEDmBBJgoBPDm4qlLX0vXOaWLNCz - /ynFl1g2nuSX9p7zP//nyXPOPZdHo7+gIKItPv6L9tjYkSaZ7PMtUuk7GA7zT/5PDCuV7BOZ7M5obGzf - jYQEPYYiQIh/ksYDo1HYXVBwfbi+noxduUIe1dX5mli2NVskWonp8DlV8BhkmHXWHTuecpcukenGRvKk - rMz9aVJSjSwyMhrTc0laV6z4bOjIEfL47FkyduYMMUNsOn6c3GLZO3KR6H1IgiYZzcn5AOYm7vJlwmEt - 19BApk+fJsMajecHqfQTSMQgjNcukZip+eO6OvL05ElihmjiwgUyXl/va1Iqf0sTiRIhfCUJ2rLJWl5u - ppVT82mYc8eOkWkU5q2sJG0xMQOQsUDEa4mLuzpSVUXGkMAEzCdOECsW2M+fJxa0q4VlO1OFwiSI/UmG - FYpNE2Vl5qmLFwmHYqZRFId104cPk8l9+8htpdK5SyL5DtIiIOZply9/91Zm5p3RPXt84xBZwASqsWNP - XGiZ4+hR0o4kq4XC5N8ZpsCi11unzp3zt4RDxRzay9XWkimYt2dluRMFgq9hbAByQDecF85IJElI0mna - tYtYDxwgtv37if3QIeJEMg+M8Ozrysm5N1ZcbOZOnfJXzGGOg5arqZkzZxh3skBwFX5VICVgHgr8wV8t - Fif/olB0mCoqfLbqauIALqORuGHgRTLvwYNkCtVOUWM8c3j2m6O9HSzrkQuF1JxWvgosBS+OaiD4SrF4 - VUt6eqd12zbi2L2buIDHYCBeVDiJhJPYwMniYuLdsIF4c3KIG3RkZ3szRKJrWL8X0MoF4DXz+eBnRUen - 3JbLO81q9Yx7+3biUqmIi2GIUyolTpGIOMPDiXPJEmITCn0t8fEeNiqKbmg1SAVvggXN58Pfrm65vH8C - hjaY2YEDUGM/YWHkoULxtz4p6SfoPwZpYFHm/rBWVhqta9eabALB6+aAjo0nJMy0aTSPkuPiirEkEizO - 3GswHHVu3Oi0ofqFzC3gKTClpJA+rXZg55o1GVj6n9eKP1wGQ4Nj82aXLSLiNXMHek/bRc3HwEhoKHkA - BjMyfP063UM9y9I2LZzEs3fvSUdhoTtY5Q6JhIwXFv5jSUz0UfPhgHkv6AD3GWYWSQZ2LpQER7EB5h6c - DL/xK22JiSGDRUV/nlu/vqtXrZ4wJSeTP2DaA+6CX0Eb6MvKmu3W6+9tlMvpBfniqndXVdU7VCqPPZj5 - smVkqKjoWQ3DtEC6vzA19cOBkpJHg+j9vHkraAa3QLdSOdul0/V+pdHQjeeDEJ67tNRsj4oKWjk1r1Yo - miE0ArqR4kN5eWv7tdrRe2lpz81/Bj+Cm6A/N3emR6sdgnY54PPsOt2gWyYLWrmRYW5DVBMwn/9S8Q/n - 57N9Ot1oT1qa72Xz70NCSM+6dTPtarUFugIQzeuqqNgxoVa7XDB9qfK/DgQ3nw9+bV5eNjZ2pDs9ndwI - mN/Nzp79VqUaL1q58kto5hIgljaXlZ0yb93qsbOsb0ilelabmdmK8YXM54NvyM1V0HZ0Yx1u29nrKpXl - LYGgEXOlYK5FiBAmPj6yV6v95nFJieNafj5OX2gtxhkgpPNUtEDwb5aXf3S/tNRyV6NxFiYm0m+BFkgB - Pa7P19I/USATbAn8Lvb1fwPQo0lPjhq8B4K+cEsArZh+rOkvfV5M0CLo/f92AJowUBiP9y9PzdvIaubv - /QAAAABJRU5ErkJggg== - - 124, 17 diff --git a/SCrawler/Download/VideosDownloaderForm.vb b/SCrawler/Download/VideosDownloaderForm.vb index 41c776b..0b196f5 100644 --- a/SCrawler/Download/VideosDownloaderForm.vb +++ b/SCrawler/Download/VideosDownloaderForm.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -12,26 +12,28 @@ Imports PersonalUtilities.Tools Namespace DownloadObjects Friend Class VideosDownloaderForm #Region "Declarations" - Private MyView As FormsView + Private MyView As FormView Private ReadOnly DownloadingUrlsFile As SFile = $"{SettingsFolderName}\VideosUrls.txt" Private ReadOnly MyJob As JobThread(Of String) + Friend Property IsStandalone As Boolean = False #End Region #Region "Initializer" - Friend Sub New() + Public Sub New() InitializeComponent() MyJob = New JobThread(Of String) With {.Progress = New Toolbars.MyProgress(ToolbarBOTTOM, PR_V, LBL_STATUS, "Downloading video")} If DownloadingUrlsFile.Exists Then _ MyJob.Items.ListAddList(DownloadingUrlsFile.GetText.StringToList(Of String, List(Of String))(Environment.NewLine), LAP.NotContainsOnly) End Sub +#End Region +#Region "Form handlers" Private Sub VideosDownloaderForm_Load(sender As Object, e As EventArgs) Handles Me.Load - MyView = New FormsView(Me) - MyView.ImportFromXML(Settings.Design) - MyView.SetMeSize() + MyView = New FormView(Me) + MyView.Import(Settings.Design) + MyView.SetFormSize() RefillList(False) End Sub Private Sub VideosDownloaderForm_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing - e.Cancel = True - Hide() + If Not IsStandalone Then e.Cancel = True : Hide() End Sub Private Sub VideosDownloaderForm_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed If Not MyView Is Nothing Then MyView.Dispose(Settings.Design) @@ -44,6 +46,7 @@ Namespace DownloadObjects Case Keys.Insert : AddItem() Case Keys.F5 : StartDownloading() Case Keys.F8 : DeleteItem() + Case Keys.Escape : If IsStandalone Then b = False Else Hide() Case Else : b = False End Select If b Then e.Handled = True @@ -75,7 +78,7 @@ Namespace DownloadObjects #End Region #Region "Add, Delete" Private Sub AddItem() Handles BTT_ADD.Click - Dim URL$ = GetNewVideoURL() + Dim URL$ = InputBoxE("Enter video URL:", "Download video by URL", GetCurrentBuffer()) If Not URL.IsEmptyString Then If Not MyJob.Contains(URL) Then MyJob.Add(URL) @@ -139,6 +142,7 @@ Namespace DownloadObjects End If ControlInvoke(ToolbarTOP, BTT_DOWN, Sub() BTT_DOWN.Enabled = True) ControlInvoke(ToolbarTOP, BTT_STOP, Sub() BTT_STOP.Enabled = False) + If Not IsStandalone Then MainFrameObj.UpdateLogButton() MyJob.Stopped() End Sub #End Region diff --git a/SCrawler/Editors/CollectionEditorForm.vb b/SCrawler/Editors/CollectionEditorForm.vb index 97ddeec..85c2bf5 100644 --- a/SCrawler/Editors/CollectionEditorForm.vb +++ b/SCrawler/Editors/CollectionEditorForm.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -18,10 +18,6 @@ Namespace Editors MyDefs = New DefaultFormOptions(Me, Settings.Design) Collections = New List(Of String) End Sub - Friend Sub New(ByVal CollectionName As String) - Me.New - Collection = CollectionName - End Sub Private Sub CollectionEditorForm_Load(sender As Object, e As EventArgs) Handles Me.Load Try With MyDefs diff --git a/SCrawler/Editors/GlobalSettingsForm.Designer.vb b/SCrawler/Editors/GlobalSettingsForm.Designer.vb index 927feeb..773b016 100644 --- a/SCrawler/Editors/GlobalSettingsForm.Designer.vb +++ b/SCrawler/Editors/GlobalSettingsForm.Designer.vb @@ -1,4 +1,12 @@ -Namespace Editors +' Copyright (C) 2023 Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY +Namespace Editors Partial Friend Class GlobalSettingsForm : Inherits System.Windows.Forms.Form @@ -48,6 +56,8 @@ Dim TAB_FEED As System.Windows.Forms.TabPage Dim TP_FEED As System.Windows.Forms.TableLayoutPanel Dim TP_FEED_IMG_COUNT As System.Windows.Forms.TableLayoutPanel + Dim TAB_NOTIFY As System.Windows.Forms.TabPage + Dim TP_NOTIFY_MAIN As System.Windows.Forms.TableLayoutPanel Me.TXT_GLOBAL_PATH = New PersonalUtilities.Forms.Controls.TextBoxExtended() Me.TXT_IMAGE_LARGE = New PersonalUtilities.Forms.Controls.TextBoxExtended() Me.TXT_IMAGE_SMALL = New PersonalUtilities.Forms.Controls.TextBoxExtended() @@ -78,6 +88,14 @@ Me.CH_DOWN_OPEN_PROGRESS_SUSPEND = New System.Windows.Forms.CheckBox() Me.CH_ADD_MISSING_TO_LOG = New System.Windows.Forms.CheckBox() Me.CH_ADD_MISSING_ERROS_TO_LOG = New System.Windows.Forms.CheckBox() + Me.CH_FEED_STORE_SESSION_DATA = New System.Windows.Forms.CheckBox() + Me.CH_NOTIFY_SHOW_BASE = New System.Windows.Forms.CheckBox() + Me.CH_NOTIFY_SILENT = New System.Windows.Forms.CheckBox() + Me.CH_NOTIFY_PROFILES = New System.Windows.Forms.CheckBox() + Me.CH_NOTIFY_AUTO_DOWN = New System.Windows.Forms.CheckBox() + Me.CH_NOTIFY_CHANNELS = New System.Windows.Forms.CheckBox() + Me.CH_NOTIFY_SAVED_POSTS = New System.Windows.Forms.CheckBox() + Me.CH_DOWN_REPARSE_MISSING = New System.Windows.Forms.CheckBox() Me.TXT_CHANNELS_ROWS = New PersonalUtilities.Forms.Controls.TextBoxExtended() Me.TXT_CHANNELS_COLUMNS = New PersonalUtilities.Forms.Controls.TextBoxExtended() Me.CH_DOWN_IMAGES_NATIVE = New System.Windows.Forms.CheckBox() @@ -85,7 +103,6 @@ Me.TXT_FOLDER_CMD = New PersonalUtilities.Forms.Controls.TextBoxExtended() Me.CH_EXIT_CONFIRM = New System.Windows.Forms.CheckBox() Me.CH_CLOSE_TO_TRAY = New System.Windows.Forms.CheckBox() - Me.CH_SHOW_NOTIFY = New System.Windows.Forms.CheckBox() Me.TXT_CLOSE_SCRIPT = New PersonalUtilities.Forms.Controls.TextBoxExtended() Me.CH_DOWN_OPEN_INFO = New System.Windows.Forms.CheckBox() Me.CH_RECYCLE_DEL = New System.Windows.Forms.CheckBox() @@ -121,6 +138,8 @@ TAB_FEED = New System.Windows.Forms.TabPage() TP_FEED = New System.Windows.Forms.TableLayoutPanel() TP_FEED_IMG_COUNT = New System.Windows.Forms.TableLayoutPanel() + TAB_NOTIFY = New System.Windows.Forms.TabPage() + TP_NOTIFY_MAIN = New System.Windows.Forms.TableLayoutPanel() TP_BASIS.SuspendLayout() CType(Me.TXT_GLOBAL_PATH, System.ComponentModel.ISupportInitialize).BeginInit() TP_IMAGES.SuspendLayout() @@ -157,6 +176,8 @@ TP_FEED_IMG_COUNT.SuspendLayout() CType(Me.TXT_FEED_ROWS, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.TXT_FEED_COLUMNS, System.ComponentModel.ISupportInitialize).BeginInit() + TAB_NOTIFY.SuspendLayout() + TP_NOTIFY_MAIN.SuspendLayout() Me.TAB_MAIN.SuspendLayout() Me.CONTAINER_MAIN.ContentPanel.SuspendLayout() Me.CONTAINER_MAIN.SuspendLayout() @@ -497,10 +518,10 @@ ' Me.CH_FAST_LOAD.AutoSize = True Me.CH_FAST_LOAD.Dock = System.Windows.Forms.DockStyle.Fill - Me.CH_FAST_LOAD.Location = New System.Drawing.Point(4, 82) + Me.CH_FAST_LOAD.Location = New System.Drawing.Point(4, 56) Me.CH_FAST_LOAD.Name = "CH_FAST_LOAD" Me.CH_FAST_LOAD.Size = New System.Drawing.Size(568, 19) - Me.CH_FAST_LOAD.TabIndex = 3 + Me.CH_FAST_LOAD.TabIndex = 2 Me.CH_FAST_LOAD.Text = "Fast profiles loading" TT_MAIN.SetToolTip(Me.CH_FAST_LOAD, "Fast loading of profiles in the main window") Me.CH_FAST_LOAD.UseVisualStyleBackColor = True @@ -651,6 +672,105 @@ TT_MAIN.SetToolTip(Me.CH_ADD_MISSING_ERROS_TO_LOG, resources.GetString("CH_ADD_MISSING_ERROS_TO_LOG.ToolTip")) Me.CH_ADD_MISSING_ERROS_TO_LOG.UseVisualStyleBackColor = True ' + 'CH_FEED_STORE_SESSION_DATA + ' + Me.CH_FEED_STORE_SESSION_DATA.AutoSize = True + Me.CH_FEED_STORE_SESSION_DATA.Dock = System.Windows.Forms.DockStyle.Fill + Me.CH_FEED_STORE_SESSION_DATA.Location = New System.Drawing.Point(4, 111) + Me.CH_FEED_STORE_SESSION_DATA.Name = "CH_FEED_STORE_SESSION_DATA" + Me.CH_FEED_STORE_SESSION_DATA.Size = New System.Drawing.Size(568, 19) + Me.CH_FEED_STORE_SESSION_DATA.TabIndex = 4 + Me.CH_FEED_STORE_SESSION_DATA.Text = "Store session data" + TT_MAIN.SetToolTip(Me.CH_FEED_STORE_SESSION_DATA, "If checked, session data will be stored in an xml file.") + Me.CH_FEED_STORE_SESSION_DATA.UseVisualStyleBackColor = True + ' + 'CH_NOTIFY_SHOW_BASE + ' + Me.CH_NOTIFY_SHOW_BASE.AutoSize = True + Me.CH_NOTIFY_SHOW_BASE.Dock = System.Windows.Forms.DockStyle.Fill + Me.CH_NOTIFY_SHOW_BASE.Location = New System.Drawing.Point(4, 30) + Me.CH_NOTIFY_SHOW_BASE.Name = "CH_NOTIFY_SHOW_BASE" + Me.CH_NOTIFY_SHOW_BASE.Size = New System.Drawing.Size(568, 19) + Me.CH_NOTIFY_SHOW_BASE.TabIndex = 1 + Me.CH_NOTIFY_SHOW_BASE.Text = "Show notifications" + TT_MAIN.SetToolTip(Me.CH_NOTIFY_SHOW_BASE, "This is the base value of notifications. If you disable it, notifications will no" & + "t appear at all.") + Me.CH_NOTIFY_SHOW_BASE.UseVisualStyleBackColor = True + ' + 'CH_NOTIFY_SILENT + ' + Me.CH_NOTIFY_SILENT.AutoSize = True + Me.CH_NOTIFY_SILENT.Dock = System.Windows.Forms.DockStyle.Fill + Me.CH_NOTIFY_SILENT.Location = New System.Drawing.Point(4, 4) + Me.CH_NOTIFY_SILENT.Name = "CH_NOTIFY_SILENT" + Me.CH_NOTIFY_SILENT.Size = New System.Drawing.Size(568, 19) + Me.CH_NOTIFY_SILENT.TabIndex = 0 + Me.CH_NOTIFY_SILENT.Text = "Silent mode" + TT_MAIN.SetToolTip(Me.CH_NOTIFY_SILENT, "Turn off notifications temporarily." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "This setting is not stored in the settings f" & + "ile. It is valid until you turn it off or close the program.") + Me.CH_NOTIFY_SILENT.UseVisualStyleBackColor = True + ' + 'CH_NOTIFY_PROFILES + ' + Me.CH_NOTIFY_PROFILES.AutoSize = True + Me.CH_NOTIFY_PROFILES.Dock = System.Windows.Forms.DockStyle.Fill + Me.CH_NOTIFY_PROFILES.Location = New System.Drawing.Point(4, 56) + Me.CH_NOTIFY_PROFILES.Name = "CH_NOTIFY_PROFILES" + Me.CH_NOTIFY_PROFILES.Size = New System.Drawing.Size(568, 19) + Me.CH_NOTIFY_PROFILES.TabIndex = 2 + Me.CH_NOTIFY_PROFILES.Text = "Profiles" + TT_MAIN.SetToolTip(Me.CH_NOTIFY_PROFILES, "Show notifications when profiles download is complete") + Me.CH_NOTIFY_PROFILES.UseVisualStyleBackColor = True + ' + 'CH_NOTIFY_AUTO_DOWN + ' + Me.CH_NOTIFY_AUTO_DOWN.AutoSize = True + Me.CH_NOTIFY_AUTO_DOWN.Dock = System.Windows.Forms.DockStyle.Fill + Me.CH_NOTIFY_AUTO_DOWN.Location = New System.Drawing.Point(4, 82) + Me.CH_NOTIFY_AUTO_DOWN.Name = "CH_NOTIFY_AUTO_DOWN" + Me.CH_NOTIFY_AUTO_DOWN.Size = New System.Drawing.Size(568, 19) + Me.CH_NOTIFY_AUTO_DOWN.TabIndex = 3 + Me.CH_NOTIFY_AUTO_DOWN.Text = "AutoDownloader" + TT_MAIN.SetToolTip(Me.CH_NOTIFY_AUTO_DOWN, "Show AutoDownloader notifications") + Me.CH_NOTIFY_AUTO_DOWN.UseVisualStyleBackColor = True + ' + 'CH_NOTIFY_CHANNELS + ' + Me.CH_NOTIFY_CHANNELS.AutoSize = True + Me.CH_NOTIFY_CHANNELS.Dock = System.Windows.Forms.DockStyle.Fill + Me.CH_NOTIFY_CHANNELS.Location = New System.Drawing.Point(4, 108) + Me.CH_NOTIFY_CHANNELS.Name = "CH_NOTIFY_CHANNELS" + Me.CH_NOTIFY_CHANNELS.Size = New System.Drawing.Size(568, 19) + Me.CH_NOTIFY_CHANNELS.TabIndex = 4 + Me.CH_NOTIFY_CHANNELS.Text = "Channels" + TT_MAIN.SetToolTip(Me.CH_NOTIFY_CHANNELS, "Show notifications when channels download is complete") + Me.CH_NOTIFY_CHANNELS.UseVisualStyleBackColor = True + ' + 'CH_NOTIFY_SAVED_POSTS + ' + Me.CH_NOTIFY_SAVED_POSTS.AutoSize = True + Me.CH_NOTIFY_SAVED_POSTS.Dock = System.Windows.Forms.DockStyle.Fill + Me.CH_NOTIFY_SAVED_POSTS.Location = New System.Drawing.Point(4, 134) + Me.CH_NOTIFY_SAVED_POSTS.Name = "CH_NOTIFY_SAVED_POSTS" + Me.CH_NOTIFY_SAVED_POSTS.Size = New System.Drawing.Size(568, 19) + Me.CH_NOTIFY_SAVED_POSTS.TabIndex = 5 + Me.CH_NOTIFY_SAVED_POSTS.Text = "Saved posts" + TT_MAIN.SetToolTip(Me.CH_NOTIFY_SAVED_POSTS, "Show notifications when saved posts download is complete") + Me.CH_NOTIFY_SAVED_POSTS.UseVisualStyleBackColor = True + ' + 'CH_DOWN_REPARSE_MISSING + ' + Me.CH_DOWN_REPARSE_MISSING.AutoSize = True + Me.CH_DOWN_REPARSE_MISSING.Dock = System.Windows.Forms.DockStyle.Fill + Me.CH_DOWN_REPARSE_MISSING.Location = New System.Drawing.Point(4, 176) + Me.CH_DOWN_REPARSE_MISSING.Name = "CH_DOWN_REPARSE_MISSING" + Me.CH_DOWN_REPARSE_MISSING.Size = New System.Drawing.Size(568, 19) + Me.CH_DOWN_REPARSE_MISSING.TabIndex = 6 + Me.CH_DOWN_REPARSE_MISSING.Text = "Trying to download missing posts using regular download" + TT_MAIN.SetToolTip(Me.CH_DOWN_REPARSE_MISSING, "If missing posts exist, the missing posts will attempt to be downloaded via user " & + "download") + Me.CH_DOWN_REPARSE_MISSING.UseVisualStyleBackColor = True + ' 'TP_CHANNELS_IMGS ' TP_CHANNELS_IMGS.ColumnCount = 2 @@ -817,20 +937,18 @@ TP_BEHAVIOR.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single] TP_BEHAVIOR.ColumnCount = 1 TP_BEHAVIOR.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - TP_BEHAVIOR.Controls.Add(Me.TXT_FOLDER_CMD, 0, 7) + TP_BEHAVIOR.Controls.Add(Me.TXT_FOLDER_CMD, 0, 6) TP_BEHAVIOR.Controls.Add(Me.CH_EXIT_CONFIRM, 0, 0) TP_BEHAVIOR.Controls.Add(Me.CH_CLOSE_TO_TRAY, 0, 1) - TP_BEHAVIOR.Controls.Add(Me.CH_SHOW_NOTIFY, 0, 2) - TP_BEHAVIOR.Controls.Add(Me.CH_FAST_LOAD, 0, 3) - TP_BEHAVIOR.Controls.Add(Me.TXT_CLOSE_SCRIPT, 0, 8) - TP_BEHAVIOR.Controls.Add(TP_OPEN_INFO, 0, 5) - TP_BEHAVIOR.Controls.Add(Me.CH_RECYCLE_DEL, 0, 4) - TP_BEHAVIOR.Controls.Add(TP_OPEN_PROGRESS, 0, 6) + TP_BEHAVIOR.Controls.Add(Me.CH_FAST_LOAD, 0, 2) + TP_BEHAVIOR.Controls.Add(Me.TXT_CLOSE_SCRIPT, 0, 7) + TP_BEHAVIOR.Controls.Add(TP_OPEN_INFO, 0, 4) + TP_BEHAVIOR.Controls.Add(Me.CH_RECYCLE_DEL, 0, 3) + TP_BEHAVIOR.Controls.Add(TP_OPEN_PROGRESS, 0, 5) TP_BEHAVIOR.Dock = System.Windows.Forms.DockStyle.Fill TP_BEHAVIOR.Location = New System.Drawing.Point(0, 0) TP_BEHAVIOR.Name = "TP_BEHAVIOR" - TP_BEHAVIOR.RowCount = 11 - TP_BEHAVIOR.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + TP_BEHAVIOR.RowCount = 9 TP_BEHAVIOR.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_BEHAVIOR.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_BEHAVIOR.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) @@ -839,8 +957,8 @@ TP_BEHAVIOR.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_BEHAVIOR.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) TP_BEHAVIOR.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) - TP_BEHAVIOR.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_BEHAVIOR.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + TP_BEHAVIOR.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!)) TP_BEHAVIOR.Size = New System.Drawing.Size(576, 284) TP_BEHAVIOR.TabIndex = 0 ' @@ -858,12 +976,12 @@ Me.TXT_FOLDER_CMD.CaptionToolTipText = "The command to open a folder." Me.TXT_FOLDER_CMD.Dock = System.Windows.Forms.DockStyle.Fill Me.TXT_FOLDER_CMD.LeaveDefaultButtons = True - Me.TXT_FOLDER_CMD.Location = New System.Drawing.Point(4, 186) + Me.TXT_FOLDER_CMD.Location = New System.Drawing.Point(4, 160) Me.TXT_FOLDER_CMD.Name = "TXT_FOLDER_CMD" Me.TXT_FOLDER_CMD.PlaceholderEnabled = True Me.TXT_FOLDER_CMD.PlaceholderText = "MyCommand /arg {0}" Me.TXT_FOLDER_CMD.Size = New System.Drawing.Size(568, 22) - Me.TXT_FOLDER_CMD.TabIndex = 7 + Me.TXT_FOLDER_CMD.TabIndex = 6 ' 'CH_EXIT_CONFIRM ' @@ -887,17 +1005,6 @@ Me.CH_CLOSE_TO_TRAY.Text = "Close to tray" Me.CH_CLOSE_TO_TRAY.UseVisualStyleBackColor = True ' - 'CH_SHOW_NOTIFY - ' - Me.CH_SHOW_NOTIFY.AutoSize = True - Me.CH_SHOW_NOTIFY.Dock = System.Windows.Forms.DockStyle.Fill - Me.CH_SHOW_NOTIFY.Location = New System.Drawing.Point(4, 56) - Me.CH_SHOW_NOTIFY.Name = "CH_SHOW_NOTIFY" - Me.CH_SHOW_NOTIFY.Size = New System.Drawing.Size(568, 19) - Me.CH_SHOW_NOTIFY.TabIndex = 2 - Me.CH_SHOW_NOTIFY.Text = "Show notifications" - Me.CH_SHOW_NOTIFY.UseVisualStyleBackColor = True - ' 'TXT_CLOSE_SCRIPT ' Me.TXT_CLOSE_SCRIPT.AutoShowClearButton = True @@ -912,12 +1019,12 @@ Me.TXT_CLOSE_SCRIPT.CaptionToolTipText = "This command will be executed when SCrawler is closed" Me.TXT_CLOSE_SCRIPT.Dock = System.Windows.Forms.DockStyle.Fill Me.TXT_CLOSE_SCRIPT.LeaveDefaultButtons = True - Me.TXT_CLOSE_SCRIPT.Location = New System.Drawing.Point(4, 215) + Me.TXT_CLOSE_SCRIPT.Location = New System.Drawing.Point(4, 189) Me.TXT_CLOSE_SCRIPT.Name = "TXT_CLOSE_SCRIPT" Me.TXT_CLOSE_SCRIPT.PlaceholderEnabled = True Me.TXT_CLOSE_SCRIPT.PlaceholderText = "Enter command here..." Me.TXT_CLOSE_SCRIPT.Size = New System.Drawing.Size(568, 22) - Me.TXT_CLOSE_SCRIPT.TabIndex = 8 + Me.TXT_CLOSE_SCRIPT.TabIndex = 7 ' 'TP_OPEN_INFO ' @@ -928,14 +1035,14 @@ TP_OPEN_INFO.Controls.Add(Me.CH_DOWN_OPEN_INFO, 0, 0) TP_OPEN_INFO.Controls.Add(Me.CH_DOWN_OPEN_INFO_SUSPEND, 1, 0) TP_OPEN_INFO.Dock = System.Windows.Forms.DockStyle.Fill - TP_OPEN_INFO.Location = New System.Drawing.Point(1, 131) + TP_OPEN_INFO.Location = New System.Drawing.Point(1, 105) TP_OPEN_INFO.Margin = New System.Windows.Forms.Padding(0) TP_OPEN_INFO.Name = "TP_OPEN_INFO" TP_OPEN_INFO.RowCount = 1 TP_OPEN_INFO.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) TP_OPEN_INFO.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 24.0!)) TP_OPEN_INFO.Size = New System.Drawing.Size(574, 25) - TP_OPEN_INFO.TabIndex = 5 + TP_OPEN_INFO.TabIndex = 4 ' 'CH_DOWN_OPEN_INFO ' @@ -952,10 +1059,10 @@ ' Me.CH_RECYCLE_DEL.AutoSize = True Me.CH_RECYCLE_DEL.Dock = System.Windows.Forms.DockStyle.Fill - Me.CH_RECYCLE_DEL.Location = New System.Drawing.Point(4, 108) + Me.CH_RECYCLE_DEL.Location = New System.Drawing.Point(4, 82) Me.CH_RECYCLE_DEL.Name = "CH_RECYCLE_DEL" Me.CH_RECYCLE_DEL.Size = New System.Drawing.Size(568, 19) - Me.CH_RECYCLE_DEL.TabIndex = 4 + Me.CH_RECYCLE_DEL.TabIndex = 3 Me.CH_RECYCLE_DEL.Text = "Delete data to recycle bin" Me.CH_RECYCLE_DEL.UseVisualStyleBackColor = True ' @@ -968,14 +1075,14 @@ TP_OPEN_PROGRESS.Controls.Add(Me.CH_DOWN_OPEN_PROGRESS, 0, 0) TP_OPEN_PROGRESS.Controls.Add(Me.CH_DOWN_OPEN_PROGRESS_SUSPEND, 1, 0) TP_OPEN_PROGRESS.Dock = System.Windows.Forms.DockStyle.Fill - TP_OPEN_PROGRESS.Location = New System.Drawing.Point(1, 157) + TP_OPEN_PROGRESS.Location = New System.Drawing.Point(1, 131) TP_OPEN_PROGRESS.Margin = New System.Windows.Forms.Padding(0) TP_OPEN_PROGRESS.Name = "TP_OPEN_PROGRESS" TP_OPEN_PROGRESS.RowCount = 1 TP_OPEN_PROGRESS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) TP_OPEN_PROGRESS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 24.0!)) TP_OPEN_PROGRESS.Size = New System.Drawing.Size(574, 25) - TP_OPEN_PROGRESS.TabIndex = 6 + TP_OPEN_PROGRESS.TabIndex = 5 ' 'CH_DOWN_OPEN_PROGRESS ' @@ -1008,16 +1115,18 @@ TP_DOWNLOADING.Controls.Add(Me.CH_UDESCR_UP, 0, 0) TP_DOWNLOADING.Controls.Add(Me.TXT_DOWN_COMPLETE_SCRIPT, 0, 4) TP_DOWNLOADING.Controls.Add(TP_MISSING_DATA, 0, 5) + TP_DOWNLOADING.Controls.Add(Me.CH_DOWN_REPARSE_MISSING, 0, 6) TP_DOWNLOADING.Dock = System.Windows.Forms.DockStyle.Fill TP_DOWNLOADING.Location = New System.Drawing.Point(0, 0) TP_DOWNLOADING.Name = "TP_DOWNLOADING" - TP_DOWNLOADING.RowCount = 7 + TP_DOWNLOADING.RowCount = 8 TP_DOWNLOADING.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_DOWNLOADING.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30.0!)) TP_DOWNLOADING.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30.0!)) TP_DOWNLOADING.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) TP_DOWNLOADING.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) TP_DOWNLOADING.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + TP_DOWNLOADING.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_DOWNLOADING.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) TP_DOWNLOADING.Size = New System.Drawing.Size(576, 284) TP_DOWNLOADING.TabIndex = 0 @@ -1095,14 +1204,16 @@ TP_FEED.Controls.Add(Me.CH_FEED_ENDLESS, 0, 1) TP_FEED.Controls.Add(Me.CH_FEED_ADD_SESSION, 0, 2) TP_FEED.Controls.Add(Me.CH_FEED_ADD_DATE, 0, 3) + TP_FEED.Controls.Add(Me.CH_FEED_STORE_SESSION_DATA, 0, 4) TP_FEED.Dock = System.Windows.Forms.DockStyle.Fill TP_FEED.Location = New System.Drawing.Point(0, 0) TP_FEED.Name = "TP_FEED" - TP_FEED.RowCount = 5 + TP_FEED.RowCount = 6 TP_FEED.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) TP_FEED.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_FEED.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_FEED.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + TP_FEED.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_FEED.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) TP_FEED.Size = New System.Drawing.Size(576, 284) TP_FEED.TabIndex = 0 @@ -1189,10 +1300,46 @@ Me.CH_FEED_ADD_DATE.Text = "Add the date to the post title" Me.CH_FEED_ADD_DATE.UseVisualStyleBackColor = True ' + 'TAB_NOTIFY + ' + TAB_NOTIFY.Controls.Add(TP_NOTIFY_MAIN) + TAB_NOTIFY.Location = New System.Drawing.Point(4, 22) + TAB_NOTIFY.Name = "TAB_NOTIFY" + TAB_NOTIFY.Size = New System.Drawing.Size(576, 284) + TAB_NOTIFY.TabIndex = 8 + TAB_NOTIFY.Text = "Notifications" + ' + 'TP_NOTIFY_MAIN + ' + TP_NOTIFY_MAIN.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single] + TP_NOTIFY_MAIN.ColumnCount = 1 + TP_NOTIFY_MAIN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + TP_NOTIFY_MAIN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20.0!)) + TP_NOTIFY_MAIN.Controls.Add(Me.CH_NOTIFY_SHOW_BASE, 0, 1) + TP_NOTIFY_MAIN.Controls.Add(Me.CH_NOTIFY_SILENT, 0, 0) + TP_NOTIFY_MAIN.Controls.Add(Me.CH_NOTIFY_PROFILES, 0, 2) + TP_NOTIFY_MAIN.Controls.Add(Me.CH_NOTIFY_AUTO_DOWN, 0, 3) + TP_NOTIFY_MAIN.Controls.Add(Me.CH_NOTIFY_CHANNELS, 0, 4) + TP_NOTIFY_MAIN.Controls.Add(Me.CH_NOTIFY_SAVED_POSTS, 0, 5) + TP_NOTIFY_MAIN.Dock = System.Windows.Forms.DockStyle.Fill + TP_NOTIFY_MAIN.Location = New System.Drawing.Point(0, 0) + TP_NOTIFY_MAIN.Name = "TP_NOTIFY_MAIN" + TP_NOTIFY_MAIN.RowCount = 7 + TP_NOTIFY_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + TP_NOTIFY_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + TP_NOTIFY_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + TP_NOTIFY_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + TP_NOTIFY_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + TP_NOTIFY_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + TP_NOTIFY_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + TP_NOTIFY_MAIN.Size = New System.Drawing.Size(576, 284) + TP_NOTIFY_MAIN.TabIndex = 0 + ' 'TAB_MAIN ' Me.TAB_MAIN.Controls.Add(TAB_BASIS) Me.TAB_MAIN.Controls.Add(TAB_BEHAVIOR) + Me.TAB_MAIN.Controls.Add(TAB_NOTIFY) Me.TAB_MAIN.Controls.Add(TAB_DEFAULTS) Me.TAB_MAIN.Controls.Add(TAB_DOWN) Me.TAB_MAIN.Controls.Add(TAB_DEFS_CHANNELS) @@ -1227,7 +1374,7 @@ Me.ClientSize = New System.Drawing.Size(584, 310) Me.Controls.Add(Me.CONTAINER_MAIN) Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle - Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.Icon = Global.SCrawler.My.Resources.Resources.SettingsIcon_48 Me.KeyPreview = True Me.MaximizeBox = False Me.MaximumSize = New System.Drawing.Size(600, 349) @@ -1284,6 +1431,9 @@ TP_FEED_IMG_COUNT.ResumeLayout(False) CType(Me.TXT_FEED_ROWS, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.TXT_FEED_COLUMNS, System.ComponentModel.ISupportInitialize).EndInit() + TAB_NOTIFY.ResumeLayout(False) + TP_NOTIFY_MAIN.ResumeLayout(False) + TP_NOTIFY_MAIN.PerformLayout() Me.TAB_MAIN.ResumeLayout(False) Me.CONTAINER_MAIN.ContentPanel.ResumeLayout(False) Me.CONTAINER_MAIN.ResumeLayout(False) @@ -1291,7 +1441,6 @@ Me.ResumeLayout(False) End Sub - Private WithEvents CONTAINER_MAIN As ToolStripContainer Private WithEvents TXT_GLOBAL_PATH As PersonalUtilities.Forms.Controls.TextBoxExtended Private WithEvents TXT_COLLECTIONS_PATH As PersonalUtilities.Forms.Controls.TextBoxExtended @@ -1320,7 +1469,7 @@ Private WithEvents CH_EXIT_CONFIRM As CheckBox Private WithEvents CH_CLOSE_TO_TRAY As CheckBox Private WithEvents TAB_MAIN As TabControl - Private WithEvents CH_SHOW_NOTIFY As CheckBox + Private WithEvents CH_NOTIFY_SHOW_BASE As CheckBox Private WithEvents CH_COPY_CHANNEL_USER_IMAGE_ALL As CheckBox Private WithEvents CH_UDESCR_UP As CheckBox Private WithEvents CH_FAST_LOAD As CheckBox @@ -1343,5 +1492,12 @@ Private WithEvents CH_FEED_ENDLESS As CheckBox Private WithEvents CH_FEED_ADD_SESSION As CheckBox Private WithEvents CH_FEED_ADD_DATE As CheckBox + Private WithEvents CH_FEED_STORE_SESSION_DATA As CheckBox + Private WithEvents CH_NOTIFY_SILENT As CheckBox + Private WithEvents CH_NOTIFY_SAVED_POSTS As CheckBox + Private WithEvents CH_NOTIFY_PROFILES As CheckBox + Private WithEvents CH_NOTIFY_AUTO_DOWN As CheckBox + Private WithEvents CH_NOTIFY_CHANNELS As CheckBox + Private WithEvents CH_DOWN_REPARSE_MISSING As CheckBox End Class End Namespace \ No newline at end of file diff --git a/SCrawler/Editors/GlobalSettingsForm.resx b/SCrawler/Editors/GlobalSettingsForm.resx index a200979..a5c2e62 100644 --- a/SCrawler/Editors/GlobalSettingsForm.resx +++ b/SCrawler/Editors/GlobalSettingsForm.resx @@ -304,2523 +304,10 @@ You can find more detailed information about the missing posts in the form that False - - - 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 - AAAACGdnZwBnZngAAAAAAAAAAAAAAAAAAAAAB3d3d3d3d4dwAAAAAAAAAAAAAAAAAAAAB3yGR2V2jIeA - AAAAAAAAAAAAAAAACIAAh+d4d36HeHeAAAAAAAAAAAAAAAAAh3eHeHjnjnh4fnYAh4AAAAAAAAAAAAAI - d+d+h4iIyId3h3yHZ2cAAAAAAAAAAAAIaIiIeGd4iIeOh4dniHdwAAAAAAAAAAAIh4eIiIyOiOiIiIiI - iIZ4AAAAAAAAAAAI6IjojoiIiIiHjojojoiHAAAAAAAAAAAIiIiIiI6IiIiIiIiIiIiIAAAAAAAAAAAH - iIiIiIiIiIiIiIiIiIiAAAAAAAAAAICIiIiI6IiIiIiIjoiOiGgAAAAAAAAAB4iI//iIj4iAAACI/4j4 - +GcAAAAAAAAAj4iPiP5/+IAAAAAPiPiPiHYAAAAAAAAAiPj4+IiIiAAAAAAAiPj4j4eIgAAAAAAA+I+P - iOiIgAAAAAAA+I+P+IjoyAAAAAAAj/j4+HiOAAAAAAAACIj4+Pj/hoAAAAAACI+PjoiAAAAAAAAAD+/4 - j/+Ph3AAAAAACI+Ph4iAAAAAAAAACPiOiPj4hoAAAAAACI+P6IiAAAAAAAAACI+HiP//h4AAAAAACI+P - eI4AAAAAAAAACI74j4/oiIAAAAAIiPj46IcAAAAAAAAACI+P/4iHgAAAAACIj46IeIcAAAAAAAAACO/4 - +PiIAAAAAACI+PeId4cAAAAAAAAACIj/j45wAAAAAACI+IiI534AAAAAAAAAiO+P/4iAAAAAAACPj4iP - iIUAAAAAAAAAh4//j4dwAAAAAACI+I+Ih+cAAAAAAAAIiP+P/454AAAAAAAPiIj4iHeAAAAAAAAIiP// - j/+H8AAAAAAACIiIiIdwAAAAAACIj4/////4cAAAAAAACP+Pjod3AAAAAAiIj/j4+Pj4gAAAAAAACIj4 - +IiHAAAAD4iI//////+OgAAAAAAA+I+I+IiIh4AIiIiP+Pj4+PiIAAAAAAAAiIj4+PiIiIiIiIj4+P/4 - iPiIAAAAAAAIiI+Ij4+IiIiIiI+Pj4+I4AAAAAAAAAAAiIiIj4j4iIiI+Pj/j/iI8AAAAAAAAAAAiIiP - iI+Pj4+I+P+I+PjoAAAAAAAAAAAACIiIiIiIj4joj4j4+Ph3AAAAAAAAAAAAAA+IiI+IiIh4iPj4+PiG - gAAAAAAAAAAAAAAAiIiPj4iI+PiPiPiHgAAAAAAAAAAAAAAPiIiIiI+IiIiIj4iIgAAAAAAAAAAAAAAP - iIiIiIiPj46IiIjoAAAAAAAAAAAAAAAIiIjojo+IjngAiOiAAAAAAAAAAAAAAAAPh4iI8IiIiIgACAAA - AAAAAAAAAAAAAAAACIiIAHiIiHgAAAAAAAAAAAAAAAAAAAAAAAAAAIiIiIAAAAAAAAAAAAAAAAAAAAAA - AAAAAIhoeAAAAAAAAAAAAAAAAAD///////8AAP//Bw///wAA//4DA///AAD//gAB//8AAP/+AAH//wAA - /5wAAf//AAD/AAADH/8AAP4AAAAP/wAA/gAAAAf/AAD+AAAAA/8AAP4AAAAD/wAA/gAAAAP/AAD+AAAA - B/8AAPQAAAAP/wAA4AAfAA//AADAAH+AD/8AAMAA/8AB/wAAwAH/wAD/AADAA//gAH8AAOAH/+AAfwAA - 4Af/4AB/AADgB//gAH8AAOAP/+AAfwAAgA//4AH/AAAAD//gA/8AAAAP/+AH/wAAAA//wAf/AAAAD//A - B/8AAAAP/4AD/wAAgAf/gAH/AADgB/8AAf8AAOAD/gAB/wAA4AP4AAH/AADAAGAAA/8AAMAAAAAD/wAA - gAAAAH//AADAAAAAf/8AAMAAAAD//wAA4AAAAP//AAD4AAAAf/8AAP8AAAB//wAA/gAAAH//AAD+AAAA - //8AAP4AAMH//wAA/gEA7///AAD/gwD///8AAP//Af///wAA//8D////AAAoAAAAIAAAAEAAAAABAAQA - AAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAA - AAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAIAAAAAAAAAA - AAAAAAB4dwh4cAAAAAAAAAAAAAAAeOd4iIgAAAAAAAAAAACICHeIeOh4AAAAAAAAAAAIeHjlaIh4d4eA - AAAAAAAACIfniIh4iIiIeAAAAAAAAAjoiIeI6IiOiIgAAAAAAAAIeIeIiIiHiIiIAAAAAAAIh4h4+IiI - iIiIYAAAAAAAh4iIj4gAAIiIiHAAAAAAAIjoiIgAAAAIiIiIgAAAAACIiIjgAAAACOh4iHcAAAAACIiI - gAAAAAiHaIiHAAAAAIiOiIAAAAAIiIiPhgAAAACIiIcAAAAACIiPiIAAAAAIiIiHAAAAAAiIiI4AAAAA - CI53jgAAAAAIiIh4AAAAAAiIiIcAAAAACIiIhwAAAAAAiIiIgAAAAHiIiIiAAAAAAAiI+GAAAAiIiIiI - 4AAAAACIj4iHAAh4iI+IiIAAAAAAiIiPiIeHiIiPjogAAAAAAIj4iIiIiIj4joAAAAAAAACI6IiPjoiI - iIeAAAAAAAAAD4iIiIeIiIiHcAAAAAAAAAAAiIiIiPiIiHAAAAAAAAAACI+IiIiO+OgAAAAAAAAAAACI - 74iIcACAAAAAAAAAAAAAAIAIjoAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - ///////nf///wh///8AP//yAD//4AAH/+AAA//gAAP/4AAD/4AAB/8APAf/AP4B/wH+AP+B/gD/Af4A/ - wP+Af4D/gP+A/4D/gP+A/8B/AH/gfgB/wDgAf8AAAP/AAAf/wAAH/+AAB//8AAf/+AAP//wB3///Yf// - //P///////8oAAAAGAAAADAAAAABAAQAAAAAACABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAA - AICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAIAAgA - AAAAAAAAAACHcIh4AAAAAAAAAAB4h4iHAAAAAAAACHeGaI54hwAAAAAAh4joh4iIiHAAAAAAiOh4iIiI - iIgAAAAAiHj4iIiIiIAAAACHiI+IAAiIhoAAAACI6IgAAAiIiIgAAACIiIgAAACIaIiAAACIiIAAAACI - iPhwAACIiOAAAACIiI7wAAiI6IAAAACIj3AAAAiGiIAAAACIiHAAAAiIiHAAAAiIiIgAAACI+IAAAIiI - iI4AAACIj4eAB4iPiIgAAACI+IiIiIiPiIAAAACIiI+IiIiOgAAAAAAIiIiGiIj3cAAAAAAACIiIiIiI - cAAAAAAA+IiIiICIAAAAAAAAD4AIjgAAAAAAAAAAAAAPiAAAAAAAAP+7/wD/EP8A/wD/APgAPwDwAB8A - 8AAPAPAAHwDAOB8AwPgPAMD8BwDB/AcAwfwHAIH8HwCB/B8AgfgPAMHwDwDAYA8AwAAfAMAAfwDgAH8A - +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 - QBoRVYBFdfZbCIAcP8Cnwu9CgoyZcykQstcgoMfKI/lRJNwXJAboUThYen7TJf3i1h+3PoEL8QQADqPi - 0GUXQpAUCLo51wDE8Mo3DBZ2OO/xSp9BAnTQaT0Oh9l1CT5yb2QhkPdY+hX0F6JFrNc82CdAb0KsqYSA - y0AQ7c4HPnbRwAbQGaSTiTgB/IVUHgf74tcfvj6B9QmsT2B9AusTWJ/A+gTWJ7A+gfUJrE9gfQLrE1if - wPoE1iewPoH1CaxPYH0C6xNYn8D6BNYnsD6B9QmsT2B9AusTWJ/A+gRO8An8/7AWyvzTtcwRAAAAAElF - TkSuQmCCAAAoAAAAMAAAAGAAAAABAAgAAAAAAAAJAAAAAAAAAAAAAAABAAAAAQAAAAAAAGxQMgBvVDYA - cVY5AHhdPwBgWU0Ae19AAGFbVAB9YkUAYmBVAGtkWABvaF8Ac2pZAHRoWgBxcWcAfnNhAHNwaACHbE4A - iG1PAIVtUwCKblAAinBSAIxwUgCJclYAhnFYAI93WgCRc1UAkHRWAJJ2WACUd1gAlXhZAJd7XACZfV4A - gnViAIV9ZwCRfGMAmX5gAJR9awCbfmkAnIFjAJ6DZACUgWsAmYdvAI+IdgCCgH0AiIJ5AJGDcACZhnEA - n4RwAJeKdQCci3QAnox5AJ+VegChg2QAoYVmAKGGaAClh2oApYhpAKaKbACnjG4AqYxuAKyObwCgi3EA - pYxyAKeLdQCijHUAq49xAKyPcACrkHIArpFyAK+SdACglXoAoJB8AKaXfgCpknoAr5R+ALGUdgC0l3gA - tZh6ALOYfgC2mn0Aupx+AJ2ThACYkokAm5iVAJ+blgCllYYAq5SBAKSZggCsnoEApZuOAKScjgCsnIwA - tZuDALqegQCxn44Aop2VAKuckQCtoY0AvKCCALOiigC4oogAuaCNALumjQC/p44AvayMAKahkQCnopcA - raGSAKWkmwCzpZQAuaWSALmqkgC+qZEAvq+TALiplQC6rZYAtKWZALKpngC7rJsAvLGaAKempACtqqEA - t6uhALetogC3raQAva+iALWvqQC8sqUAtrGqALOxrwC8tKoAvLawALy4sgC5ubgAwKKEAMOmiADFqIoA - yauMANa1jgDCq5MAzK6QAMKxlQDOsJIAxLOcAM20mgDLup0A0bOVANa5mgDZu50Aw7OjAMO2oQDEtaIA - wranAMW1pQDJtaIAx7igAM24oADLvaQAzL2kAMK2qgDDuawAyruqAM2+qgDKu60A07qhANu+oADQvqgA - w7u0AMm+tADFvrkAy8CuANLAoQDewaIA1cKsANrDqgDcyKkAy8G0AMfBuwDLw7sA08OzANnHtQDVyrcA - 2cm1ANDHuQDUyrsA2sy7AOHDpQDlx6gA5smqAOjKrADk0K4A482yAOzOsADizbgA59GyAO3RsgDk07wA - 69S6AOvYuwDy07UA9de4APbZugD63L0AzcfAAM3IwwDTy8MA283BANTOyADb0cIA3dDBANrQxgDc0cUA - 3tbHANXQygDa08wA39nNAN3W0ADe2NIA4tPDAO3bxADi1ckA49nLAOrbzQDw3ccA/N7AAPXeyQDi29QA - 6t7SAObf2AD+4cQA/+TMAOfg0gDs4dMA5uDaAOvj2wDx49QA/ufRAP/p1QDz5tkA8ujdAP7s2wDu6+YA - 8+riAP7u4QD37+kA8/DnAP7w4wD+9ewA9vbzAP/28AD/+PEAAAAAAAAAAAAAAAAA////AAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZSiQy - ggAAAHwXKloAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGcbFxQZB1QAAAgRCAJBeQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE4bHx8XDQtUMhQ3NydxImAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAEM2OT0dAgMDCEM5QTmjR2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - ANSdAAAAkD1GRkZGRkZGRk5GTUZiNIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzxs2QXVeQ05eY4dj - Y2NjXmNeYzkTDwAAYiN2AAAAAAAAAAAAAAAAAAAAAAAAAADUHT09Rk5OiomPrbuJiYmJiYeJiYknBEdB - FCcXLQAAAAAAAAAAAAAAAAAAAAAAAABOPYeJjY+Uj5ROKWOPj4+Pj4+Pj4+UTgY9lKY2GCwAAAAAAAAA - AAAAAAAAAAAAAACLh4+Ura27rbuHG4q7lJSUlJSmlJSUlK2mlJSmNgqGAAAAAAAAAAAAAAAAAAAAAADD - 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 - AAAAAAAAAAAAAAAAAAAAAP///////wAA//8HD///AAD//gMD//8AAP/+AAH//wAA//4AAf//AAD/nAAB - //8AAP8AAAMf/wAA/gAAAA//AAD+AAAAB/8AAP4AAAAD/wAA/gAAAAP/AAD+AAAAA/8AAP4AAAAH/wAA - 9AAAAA//AADgAB8AD/8AAMAAf4AP/wAAwAD/wAH/AADAAf/AAP8AAMAD/+AAfwAA4Af/4AB/AADgB//g - AH8AAOAH/+AAfwAA4A//4AB/AACAD//gAf8AAAAP/+AD/wAAAA//4Af/AAAAD//AB/8AAAAP/8AH/wAA - AA//gAP/AACAB/+AAf8AAOAH/wAB/wAA4AP+AAH/AADgA/gAAf8AAMAAYAAD/wAAwAAAAAP/AACAAAAA - f/8AAMAAAAB//wAAwAAAAP//AADgAAAA//8AAPgAAAB//wAA/wAAAH//AAD+AAAAf/8AAP4AAAD//wAA - /gAAwf//AAD+AQDv//8AAP+DAP///wAA//8B////AAD//wP///8AACgAAAAgAAAAQAAAAAEACAAAAAAA - AAQAAAAAAAAAAAAAAAEAAAABAAAAAAAAfWRJAINpTACQeF0AgnhmAIJ6bQCYgmoAlYdzAJCEdgCdjHIA - l4l4AJeLfACUjH4An5B9AKGTfACkkX4AqJJ+AKmVfgCzlX0AsZp/ALaZfwCelIUAoJSCAKaWggCrlIAA - rpSAAKKYggCnmYQAq5uDAKuahwCtnYYAo5iLAKqciAConI4As5qBALeYgAC1nYIAtp2EALmcggCyn4sA - tp+IAKadkQCuoY0Au6GHAL6hhQCyoIkAsqCNALakjQC6oYoAv6KJAL2mjQCuoJAAr6SUALGkkQC2ppIA - sqaVALWmlQC7p5AAvqmSAL+tkQC8qpYAu66XAL2slgCwp5kAsqiZALSomQC2rZkAuaqZALqtmgC+rZoA - vrGeAL6xoAC+tKEAu7OoAMWoiwDCqI0AwaeRAMCpkgDFq5EAxayRAMKrlADEq5UAwayUAMWtlgDIq5AA - yKyTAMGtmQDHr5kAx6+eAMmumQDGsZoAwbGeAMK0nwDKsZgAzbKbAMq0nQDMtZ0A0bifANW4nwDXv54A - 2bueAMGzoQDFs6AAwbShAMW1oQDBtaUAxralAMm3ogDMt6EAx7ijAMS4pgDIuaMAyLmmAMy4pgDPvKYA - xreoAMW5qgDGvKkAwbisAMW6rADFvKwAybqpAM+4qADKu6wAyb6uANK6oADVuqAA1b2iANK7pgDZvaIA - 2L6lANy/pgDRv6wAyL6yAMvBrgDPwq4A0cOtANLErwDYwq4A3MOvAN3ErgDKwLEAzcGzAM7FsgDKwrQA - zcO2AMzEtwDLxbgAzca5AM7IugDPybwA0MCyANHFsQDVx7EA0ca1ANbHtADYwLMA2cWyAN3EsADZx7YA - 18q3AN3NtQDRx7gA1sa4ANTJuQDQyb0A1su/ANPNvgDVzL0A2sy8AN3SvwDhw60A4MStAODGsQDgyLIA - 4sq1AOXNtgDqzrYA4su4AObLuwDizbsA5c66AOLOvgDn0LkA4tC8AOXRvgDRy8AA1MvAANLMwQDVzcEA - 1s7EANjNwADcz8EA1tHCANbRxQDY0MEA3dHBANjRxQDd0cUA3dbHANfQyQDZ08gA2dTJAN3WygDa1c0A - 3dbMANzYywDf3M8A3NfQAN3Z0QDgzsAA4dHBAObSwwDi08QA59bGAOnSwQDp1MIA7dXDAOvTxQDq18YA - 6NrFAOHXyQDt18gA4tnLAOfaywDg2s8A6NnKAOvcywDu28wA6NzOAO7ezgDw1sQA8NrJAOHc0gDi3dUA - 5dzVAO7d0QDk39sA6ODSAO7h0wDr5NIA6+TWAO/l1wDm4dgA7OXdAPHg0ADy5NUA9endAPDo4QDw7OUA - 9fHpAPj29AAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAHtzAAAAcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtJB4KAGotLTgAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAABMsMAoXNjuZQkIAAAAAAAAAAAAAAAAAAAAAAABqOAA4JCQoOzY7RWoWQgAAAAAAAAAA - AAAAAAAAAAAAezAwGDBMAQNFVmpqRSkzOCopAAAAAAAAAAAAAAAAAAA+SlQ7OztWVkVbW2pzc2mGmRYp - AAAAAAAAAAAAAAAAAHBKWVlZO1h7bVtqc5CQkJDp6jMAAAAAAAAAAAAAAAAAPllYWFjV+fGqmXx8kJCQ - lc6hbQAAAAAAAAAAAAAAcEVZYWB/+fugampzbY+Qk5WVKQ0AAAAAAAAAAAAAAGo7XWFhYfL6aoUAAAAA - bZCQlaA/CAAAAAAAAAAAAAAASmRkg4O48T4AAAAAAAAAPpCTupOFRUIAAAAAAAAAAABqYoODg9xPAAAA - AAAAAABGc4U0oLygFhYAAAAAAAAAAABZq564oT4AAAAAAAAAAHNpKgG6us5JBwAAAAAAAAAAv12tr7g7 - owAAAAAAAAAAk0WQlbzq6kYXAAAAAAAAAAA7g7KysjAAAAAAAAAAAACQRbzC6elGRgAAAAAAAAAAO62y - t7KeJgAAAAAAAAAAAEl7ybzzRjgAAAAAAAAAAABisbECNqsTAAAAAAAAAAAALcLFwscXcwAAAAAAAAAA - AG2tuDutrSYAAAAAAAAAAABFycK8xUIpAAAAAAAAAAAAAHCv2dnUMFkAAAAAAAAAF7zJwrygyTc0AAAA - AAAAAAAAAH/s8feeEgAAAAAAAB6FycW8vJPqhi0AAAAAAAAAAADSnub19uxZGQAAAHMXc+nCvMnQoKA+ - kAAAAAAAAAAAAFnZ2ebm7OJ6GRgZLZPJxbzJ9IdJkEUAAAAAAAAAAAAAWOf12dnZ4ODgoMXgycW8oMmZ - OwAAAAAAAAAAAAAAAACZmXqe1NTUycUZLcnFqbzFdgR2AAAAAAAAAAAAAAAAAADpk6my1LLUoQZqqanF - oLyQBQoAAAAAAAAAAAAAAAAAAAAAALKy1MWpqanF6sWZoOo+DQAAAAAAAAAAAAAAAAAAAACysuLmoamp - qeB7e8WVQjMAAAAAAAAAAAAAAAAAAAAAAADS2WGq6qnSmQkAAADJAAAAAAAAAAAAAAAAAAAAAAAAAAAA - oAAAoMVqHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6skAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////53///8If///AD//8gA//+AAB//gAAP/4AAD/ - +AAA/+AAAf/ADwH/wD+Af8B/gD/gf4A/wH+AP8D/gH+A/4D/gP+A/4D/gP/AfwB/4H4Af8A4AH/AAAD/ - wAAH/8AAB//gAAf//AAH//gAD//8Ad///2H////z////////KAAAABgAAAAwAAAAAQAIAAAAAABAAgAA - AAAAAAAAAAAAAQAAAAEAAAAAAACDaUwAkHhdAIZ+bwCQhncAnY96AJuPfACgkHIApJV/AK+RewCplnsA - qJJ+ALWWfQCVjYEAppSCAKCWhwClmIcAr5mDAK2dgwCsnIQAqZyJAKidjACznYQAsp+LAL6fjAC6ooQA - vaSHALahjQC0pY4AuaKIAL2iiwC+pIsAvKaOAK+jkwCxpJEAsaOUALSnlAC5pZIAs6iXAL6okQC8rZMA - t62aALysmQC7rZwAvrGeAL60pADFqY4AyKmMAMGpkgDEqpIAw66VAMaulQDIrpEAwq2ZAMWumgDCspsA - wbGdAMiwmQDOtZwA0bacANS4nwDFs6EAw7ejAMS0oQDDtaQAybKiAMi2oADDuKQAybigAMu5pADNuqUA - xrWpAMG4qQDFuqkAxb2pAMW6rADHva0AybusAM2/rADVuqIA0LyiANe/pQDZvaMA3byjANi8pQDQvagA - 1b2qANS+rADYv6gAxr2wAMW+tADKvrAAysCtAMzArQDewKMA0sKqANLDrADWxa4A2sCpAN3BqQDcw6wA - 2cWtANnIrwDGwbYAy8GyAM7FsgDMwbUAzMS3AM/ItwDLw7kAzca5AM/IuQDPyb4A0sOzANHGsQDVxbEA - 0sO0ANDEtgDVx7QA38WwANPIswDXyLMA2smxAN/IsQDfyrQA3c62ANHJuQDXy7gA0cq+ANbOvwDdyroA - 2sq9ANnOvQDczrwA3tG+AOHKtgDlzLYA6s62AOLNuwDlzbkA4dK6AOXQvgDo0L0A0svAANbLwADSzcEA - 1s7CANXOxADW0cMA1tDGANnQwQDd0cEA3dLFANrVxwDa0sgA2tXJANzVygDb1s4A3NjPAN3a0ADiz8EA - 5dHBAOPTxgDl0sQA5dXGAOjTwgDo1MEA6tbFAOjawwDg2s4A5drPAObczgDp2skA7d7MAPHbyADx3c0A - 4NrRAOXf0ADl3tQA6d7QAO/c0gD84csA5OHaAOrm3wDw4tUA8efWAPTl1QD54NEA9ObaAPbo2wDw6N4A - +OvdAOfn4wDu6ucA9vDlAPr26QD69vMA///+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAABNAAAARwAAAAAAAAAAAAAAAAAAAAAAADIaBgA9KBxb - AAAAAAAAAAAAAAAAAAAAABouHA4cQkoUAAAAAAAAAAAAAAAAAB0LER0BAkI4PSEQKyQAAAAAAAAAAAAA - OC80MjIWJTg9SkotclwOAAAAAAAAAAAAXC45MjZ/f01NSltqb8N/bgAAAAAAAAAAMjk0c8TCqIx5bG5u - cEpyAAAAAAAAACgdPDxlxatKAAAAYHBwbwRuAAAAAAAAADReUlK5YAAAAAAAalxvlW49LAAAAAAAADhT - Y4x8fwAAAAAAAGVuAZWrKRUAAAAAAHJSiaUyAAAAAAAAAGBqJJW3bxEAAAAAADKIiXw4AAAAAAAAAEZv - n7eVLJkAAAAALol7iFdCAAAAAAAAAEacnJ8RAAAAAAAAT7UBJWI4AAAAAAAAAEqwnGoFAAAAAAAAamWI - pXsMAAAAAAAAFJyck5kkWgAAAAAAAFesvb0YAAAAAAAkarCTcJmrCgAAAAAAAFesur2lCUcAAA5KsJOc - n25GLAAAAAAAAGK7r6y6pTglK3+wlZW+RpNvAAAAAAAAAFeMiKyksrI9f7KVk5URLAAAAAAAAAAAAABu - coiloHMBHJmVf5kDDQAAAAAAAAAAAAAAAIikpZmClbJ/crA9DgAAAAAAAAAAAAAAsomvc3+IpD1sAFkh - AAAAAAAAAAAAAAAAAMFyAACViAYAAAAAAAAAAAAAAAAAAAAAAAAAAADAnJMAAAAAAAAAAAAAAAD/u/8A - /xD/AP8A/wD4AD8A8AAfAPAADwDwAB8AwDgfAMD4DwDA/AcAwfwHAMH8BwCB/B8AgfwfAIH4DwDB8A8A - wGAPAMAAHwDAAH8A4AB/APgAfwDwBP8A+Y//AP+P/wAoAAAAEAAAACAAAAABAAgAAAAAAAABAAAAAAAA - AAAAAAABAAAAAQAAAAAAAItyVgCYgWgAnoRpAJiEbACiinAAqY1zAK6SdwCsk3gArZR5AKiVfwCsln0A - spqAALWegwCxnocAuJ+DALqhhQC8ooUAvqWHALqiiAC/pooAvqeNAL6ojwC/qpEAu6mWAL6vnQDApooA - w6qLAMCojgDDqpAAxKuSAMOulQDFrpQAx6+ZAMawlgDIsJUAx7KaAMaznQDLs5oAy7SaAMy1mgDLtZwA - zbeeANC5ngDCtKMAyreiAM25oQDMuaUAzrymAM68qADTvqcA0r+qANTApwDVwaoA08KuANXErQDZw6oA - 2cSrANrFrQDcxq8A1cWyANnFsgDayLMA3ciyAN3MtgDayroA3cu4AN7NugDdzrwA4Mu2AOPNtwDizroA - 4M+8AOXQvQDk08AA59bDAODUxADn18QA6NbEAOnZxgDs28oA7NzLAO7fzQDy4tEAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - dGha/2dfVfBPST+Ll4Nu9ohtT/+ih2n/oodp/5yBY/++qpH/hX1n/4uFe8wRERE3AAAAKAAAACEAAAAm - AAAAKwAAACgAAAAdAAAAEAAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAsaSWJKyPcf+ihWb/ - pIhp/6mNbv+UeFn/bFAy/3FWOf9xVjn/fmJE/6uQcv+njG7/p4xu/6WKbP/Nvqr/oJV6/5yWhOMGBgZH - AAAAPwAAADoAAAA4AAAANgAAADEAAAAqAAAAHgAAAA0AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMSxnJTEq5DXr5V/SwAAAAC9p5AK - s5uBxaqNbv+vknT/r5Jz/7KVdv+ylnf/spV3/7CTdf+tkXL/s5d4/7GVdv+wlXb/sZZ3/6yQcv+uooz/ - n5V6/6CckbkAAABIAAAARAcGBUIAAAA7AAAANgAAADIAAAAsAAAAIQAAABAAAAAFAAAAAgAAAAEAAAAB - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAybagrpR3WP+hg2T/ - pYxy/5+Ofce2m37zrY9w/7eZe/+8n4D/vaCB/72ggf+8n4D/u5+A/72ggv+8n4D/up5//7ufgP+6nn// - vaGD/6aKbP+FbVP/f3Ri/3dzbn8gHhxOno562I94XvuZjX2/ICAgPgAAADEAAAArAAAAIwAAABgAAAAO - AAAACAAAAAcAAAAFAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOTj4gHMuKGo - lnhZ/6aIav+wknP/tJZ3/7WXeP+7nn//xaeI/8epiv/OsJL/3MKl/+LDpP/GqIr/xaiJ/8aoiv/FqIr/ - xaiJ/8OniP/Dp4j/xaiK/8erjf+afmD/eF0//5mIc+2fiW/6iW5P/56DZP+LcVP/eHFn4GJhYUwAAAAq - AAAAJQAAAB8AAAAYAAAAFAAAABAAAAAOAAAACQAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAANTQyBC8nHz9rI5v/8Cig//Fp4j/y62O/9Cyk//TtZf/1LaX/9S2l/+2mHn/lIFr/76ggf/StJX/ - 0LKU/8+yk//OsZL/zrGS/86xkv/OsZL/zbCS/86xk//UuJn/t5t8/3tfQP+rj3H/1Lia/9u/of+ihmj/ - hnFY/21raNokJCQwAAAAJQAAACEAAAAdAAAAGQAAABUAAAATAAAADgAAAAcAAAACAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAOLd1gPVsonzv6GC/9K0lf/Zupz/3L6f/92/oP/ewKH/3b+g/+HDpP/AooP/ - kXNV/8apiv/ewKH/2Lqb/9a5mv/Xupv/2Lqb/9i6nP/Xupv/17qb/9e6nP/Xupv/2byd/9u/oP/cv6H/ - 17ud/9i8nv/avqD/oYVm/2tkWP+Ih4WUAAAAJAAAACAAAAAdAAAAGQAAABYAAAATAAAADgAAAAcAAAAC - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADXvJK0yquL/+LEpf/mx6j/6Mqr/+nLrP/py6z/ - 6Mmr/+jKq//qzK3/5ceo/+LEpv/kxqf/8tS1//HTtf/kx6j/38Gi/9/Bov/fwqP/38Kj/9/Co//gwqT/ - 38Kj/9/Co//ewqP/38Kk/9/CpP/hxab/4820/8O1mv+ZkYD0XVtZOAAAAB4AAAAbAAAAGAAAABUAAAAR - AAAADAAAAAUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDqY3CyquN//LUtf/y07T/ - 89S2//LUtf/x07T/89W2/+3OsP/Iqov/za+Q/9q8nv/ixKX/+du8///r1///6tb//+TJ/+3PsP/myKr/ - 58qr/+fKq//oyqv/5smq/+fKq//myar/5smq/+nMrv/lyqz/4tS8/+TQr//PwqzMOTg4JwAAABwAAAAa - AAAAFwAAABQAAAAQAAAADAAAAAcAAAAFAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM22nkG0lXb/ - 58iq//3fwP/73b7//d6///zdv///4cL/+Nq7/9u8nv/LrpD/3cSp/+bUvv/s28b/7NrE/+rTuP/qzrD/ - /+LG///r2f/42rv/7tCy/+7Rsv/v0bL/79Gz/+7Rsv/u0bL/79Gy/+nLrf/g1MD/59Kw/9XEqfKYk448 - AAAAGwAAABoAAAAXAAAAFQAAABMAAAAQAAAADQAAAAsAAAAIAAAABAAAAAAAAAAAAAAAAMyzmX3AoYSk - xKaKd7idf/bcvZ7//+nV///n0f//5s7//+bP///lzv/32br/yKuM/9bBqf/t6eb/7+3m/+Day//PxbL4 - wbWg1r60n8nTybfk6tW7/vXXuP//69f//+HC//TXuP/32br/9ti5//bYuv/12Ln/+92+/8mrjf+XinX/ - uKuT98nFvFsAAAAWAAAAGQAAABcAAAAVAAAAEwAAABEAAAAPAAAADQAAAAoAAAAIAAAABAAAAAAAAAAA - 0b6pQLmafP/avJ7/0bKU/+LDpf//6tX//+/g///u3///79///+bO/+fIqv+3mnz/6d/U//b28//f2Mv/ - xrun5qSYiYNnX1ZGAAAAKAAAACoAAAAqfnhrVeTSuvX32br//+vZ///jyP/938D//d/A//3fwP/838D/ - /+PH/9a4mf+Sfmb/bWlh82ppaCYAAAAXAAAAFwAAABUAAAATAAAAEQAAABAAAAAOAAAACwAAAAgAAAAF - AAAAAgAAAAAAAAAAy7WZyP/ix///5cz//+PI///q2P//7+D///Dh///w4///6tj/3sCh/6+Rcv/v59v/ - 8/Dn/9bOvP+/s6GxjYF2KQAAAAwAAAARAAAAGAAAAB8AAAAiAAAAIWFcVDbn1Lr6/d/A///q1f//5c7/ - /+bN///mzf//5cz//+bM///hwv+ni23/YFlN/6GdmXcdGBMZAAAAFAAAABMAAAARAAAAEAAAAA4AAAAM - AAAACQAAAAUAAAACAAAAAAAAAADWwKsY27+e/f/lzP//6dX//+vZ///u3v//7+D///Dh///w4//qy63/ - r5Fz/+PXxf/t59v/zsGs/72vnZR/dW0DAAAAAQAAAAIAAAAFAAAACwAAABMAAAAYAAAAGQAAABe1qp1e - 9Nu+///hwv//7d3//+vZ///r1///69f//+vX///w4//Bo4T/oIVo/7yjh/23nID3s52FwU1LShgAAAAO - AAAADQAAAAwAAAALAAAACAAAAAQAAAABAAAAAAAAAADbyLNT/+bP///n0f//69f//+3e///v4P//7+D/ - //Dj///hw/+/oIL/zLWb/+zk1//MvaT/sZyDrQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAgAAAAM - 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 - /e7h///48f//9/D///bw///28P//9u////fv///37///9u////bu///t3P/UxrL/vq+T/9DKwj4AAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8uPUAci5q/Xj3NX/5t/Y/+nh2v/q49z/ - 7eTd/+vj2//CuK7/08rB/7qsnv+TgHD/f2pcdgAAAAAAAAAAAAAAAAAAAAAAAAAA6NK9DcSxnqG9q5r+ - 287C/8O2qP/y5tn///fx///28P//9vD///fw///38P//9/D///fw///27///9u7///bv//Ddx//MvqT/ - xrypwNnW0gMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2svAl8vDvP/f2NL/ - 4trU/+Xe1v/n39j/6eHa/+vk3f/j29P/u7Ko/9bNxf+/tKj/qpqK/5mHd+Gql4iAu6eYVsCunXC/rZu9 - u6qZ/MS2qf/b0Mb/w7ar/+3i2P//9u3///Pp///16///9e3///bv///38f//9/D//e3a///37f//+PH/ - //Ln/9vNu//Lup3/08zCWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADo2s5L - t62k/9jRy//a083/39fR/+HZ0//j3NT/5d7X/+bf2P/q4tv/4trT/8K6sf/Mw7v/08rC/8W6sP++s6j/ - vrKm/8C0qv/IvrT/1MvB/8rAtv/LwLb/7+bd//zy6f/68Ob//PLn//7z6P//8+n///Tq///28P/w4tD/ - z8W2/+fg0v3z7OH12c27/Mu9pP/NwKrW6ejnDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAADEtKK7xb63/87HwP/Vzsj/2tPM/93W0P/f2NH/4drU/+Lb1P/k3db/5+Ha/+fg2f/UzMX/ - xr21/8S7s//Iv7b/ysG5/8e+tP/Cua//ycC2/9/Wzf/17eX/9u3k//bt5P/37uT/+O7l//rv5v/88eb/ - /vTp//Hl1//WzLv/0sCh/9XNwHYAAAAA0M7IHcW/tUnX08wmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAADh1cNZwbeu/8fBuv/QycT/1tDK/9jSy//b1M7/3dfQ/9/Y0v/h2tP/ - 4tvV/+Td1//n4dr/59/Y/+DY0f/c1Mz/3NTN/+HZ0v/o4Nj/8Ojh//Hq4v/x6OD/8unh//Pq4f/z6+P/ - 9ezk//ft5P/47uX/8ujd/9bKvf/cyKn/08ezuuzp6QIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzsCy+Ma/uv/PycP/ysC2/9bNxP/W0Mn/ - 2dPN/9zVzv/e19H/3tjS/+Da0//i29X/49zW/+bf2P/o4tv/5+DZ/87Cuf/o4Nj/6+Pc/+3l3v/u5t7/ - 7+ff//Dn3//x6OD/8unh//Pq4f/27eT/29DF/7Gmlf+5rZXx4d3YJgAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA59zQccO6sP/WzsT/ - 29HC/8rAsP/Ty8T/087I/9fRy//Z083/29XO/93X0P/f2NL/4NnT/+Hb1P/h29T/yb20/5+Oef+7rZ7/ - 5d7X/+ri2//r5Nz/7eXd/+3l3v/u5t7/7+fe/+/n3//y6uL/1cvB/56Sg/9ramDzzs3LHgAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAN3a1UPa08luzca0oc3HuKHQxLTs0MjC/9LLxv/Vz8n/2NLM/9nTzf/a1c7/3NXQ/97X0f/e19H/ - wriv/6WWhv+3q6H/4tzV/+fg2f/o4dr/6eHb/+rj2//q49z/6+Pb/+zj3P/t5dz/5NvT/7Wnm/9iYFX/ - o6OdgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD049cVycG6/87Hwv/Qy8X/087I/9XPyf/X0cv/ - 2dPN/9nTzv/d1tD/1c7I/8a/t//Y0cv/49zW/+Pd1v/k3tf/59/Z/+ff2P/m39j/59/Y/+ff2P/n39f/ - 6uLa/8G3rf+PiHb/jIp/xtHRzgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - 7tzS/8mumf+niHLlm35oeJd7ZUaVe2VNln9oi5uGcebEuKv/4NrP/9XRxf/SzMH/2dTK/9zX0P/Pybv/ - 1Mq6/7+tkf+6qZOy6unpAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCmoE4ya2V8OvTwP/t18j/ - 7tvM/+3dzf/u3tH/6NnK/8+4qP+uk4D8oop07KWNee6yoI3/0ce4/97XzP/Y0cX/1MzA/9fQyf/s5d3/ - 0cOt/7ankde1qJW2rpuCysm+sEMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMGunEbJtJ3+ - 8NbE//Dayf/t1cP/6tfG/+nXxv/n2sv/6NzO/+HXyf/cz8D/3c/C/+Pay//d1sr/183C/9TNwP/Tzb// - 2tXK/9LEr/+6pYnmw7epP724rgG4q5gHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - waGMDcGsmsHWx7T/0b+s/9nFs//p1ML/5tLD/+PTxP/i08X/3tDA/6mVfv+yn4v/3NHE/9nQwP/Wy7// - 1czA/9fRwv/Ataf/gnhm/56SgrEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vYB - AAAAANGHcAEAAAAAybipMsO9r5KxpZKhzbiku+PLt//m0b//48+//+DPwP/Xyrf/mIJq/8Gwn//ZzL7/ - 2M3A/9nQwv/UzL//1c2//8rCsf+Cem3/gnho2by0qRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUp4964su4/+HOvP/i0cL/4tPC/97Pvf/czb// - 2sy9/9zSwv/l3NX/2NDC/87Fsv/Tzb7/49zT/7uul/+ai3Lss6mcLwAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANqxmajkzbn/69PF/+vcy//Zy7j7 - 2My8993LvP7czb7/4drP/8i4p/+8q5fMz72srM7Gtvi1qJn/opJ858O3pXLRx7wDAAAAAAAAAAAAAAAA - AAAAAPf39wEAAAAAAAAAAAAAAAAAAAAAAAAAAM2BaQEAAAAAAAAAAAAAAADlyLkC49XMW9/Juefn1sb/ - 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 - - + + False + + + False + \ No newline at end of file diff --git a/SCrawler/Editors/GlobalSettingsForm.vb b/SCrawler/Editors/GlobalSettingsForm.vb index 790c6eb..1f1f733 100644 --- a/SCrawler/Editors/GlobalSettingsForm.vb +++ b/SCrawler/Editors/GlobalSettingsForm.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -37,7 +37,6 @@ Namespace Editors 'Behavior CH_EXIT_CONFIRM.Checked = .ExitConfirm CH_CLOSE_TO_TRAY.Checked = .CloseToTray - CH_SHOW_NOTIFY.Checked = .ShowNotifications CH_FAST_LOAD.Checked = .FastProfilesLoading CH_RECYCLE_DEL.Checked = .DeleteToRecycleBin CH_DOWN_OPEN_INFO.Checked = .DownloadOpenInfo @@ -48,6 +47,13 @@ Namespace Editors TXT_FOLDER_CMD.Checked = .OpenFolderInOtherProgram.Attribute TXT_CLOSE_SCRIPT.Text = .ClosingCommand TXT_CLOSE_SCRIPT.Checked = .ClosingCommand.Attribute + 'Notifications + CH_NOTIFY_SILENT.Checked = .NotificationsSilentMode + CH_NOTIFY_SHOW_BASE.Checked = .ShowNotifications + CH_NOTIFY_PROFILES.Checked = .ShowNotificationsDownProfiles + CH_NOTIFY_AUTO_DOWN.Checked = .ShowNotificationsDownAutoDownloader + CH_NOTIFY_CHANNELS.Checked = .ShowNotificationsDownChannels + CH_NOTIFY_SAVED_POSTS.Checked = .ShowNotificationsDownSavedPosts 'Defaults CH_SEPARATE_VIDEO_FOLDER.Checked = .SeparateVideoFolder.Value CH_DEF_TEMP.Checked = .DefaultTemporary @@ -62,6 +68,7 @@ Namespace Editors TXT_DOWN_COMPLETE_SCRIPT.Checked = .DownloadsCompleteCommand.Attribute CH_ADD_MISSING_TO_LOG.Checked = .AddMissingToLog CH_ADD_MISSING_ERROS_TO_LOG.Checked = .AddMissingErrorsToLog + CH_DOWN_REPARSE_MISSING.Checked = .ReparseMissingInTheRoutine 'Downloading: file names CH_FILE_NAME_CHANGE.Checked = Not .FileReplaceNameByDate.Value = FileNameReplaceMode.None OPT_FILE_NAME_REPLACE.Checked = .FileReplaceNameByDate.Value = FileNameReplaceMode.Replace @@ -85,6 +92,7 @@ Namespace Editors CH_FEED_ENDLESS.Checked = .FeedEndless CH_FEED_ADD_SESSION.Checked = .FeedAddSessionToCaption CH_FEED_ADD_DATE.Checked = .FeedAddDateToCaption + CH_FEED_STORE_SESSION_DATA.Checked = .FeedStoreSessionsData End With .MyFieldsChecker = New FieldsChecker With .MyFieldsCheckerE @@ -145,7 +153,6 @@ Namespace Editors 'Behavior .ExitConfirm.Value = CH_EXIT_CONFIRM.Checked .CloseToTray.Value = CH_CLOSE_TO_TRAY.Checked - .ShowNotifications.Value = CH_SHOW_NOTIFY.Checked .FastProfilesLoading.Value = CH_FAST_LOAD.Checked .DeleteToRecycleBin.Value = CH_RECYCLE_DEL.Checked .DownloadOpenInfo.Value = CH_DOWN_OPEN_INFO.Checked @@ -156,6 +163,13 @@ Namespace Editors .OpenFolderInOtherProgram.Attribute.Value = TXT_FOLDER_CMD.Checked .ClosingCommand.Value = TXT_CLOSE_SCRIPT.Text .ClosingCommand.Attribute.Value = TXT_CLOSE_SCRIPT.Checked + 'Notifications + .NotificationsSilentMode = CH_NOTIFY_SILENT.Checked + .ShowNotifications.Value = CH_NOTIFY_SHOW_BASE.Checked + .ShowNotificationsDownProfiles.Value = CH_NOTIFY_PROFILES.Checked + .ShowNotificationsDownAutoDownloader.Value = CH_NOTIFY_AUTO_DOWN.Checked + .ShowNotificationsDownChannels.Value = CH_NOTIFY_CHANNELS.Checked + .ShowNotificationsDownSavedPosts.Value = CH_NOTIFY_SAVED_POSTS.Checked 'Defaults .SeparateVideoFolder.Value = CH_SEPARATE_VIDEO_FOLDER.Checked .DefaultTemporary.Value = CH_DEF_TEMP.Checked @@ -170,6 +184,7 @@ Namespace Editors .DownloadsCompleteCommand.Attribute.Value = TXT_DOWN_COMPLETE_SCRIPT.Checked .AddMissingToLog.Value = CH_ADD_MISSING_TO_LOG.Checked .AddMissingErrorsToLog.Value = CH_ADD_MISSING_ERROS_TO_LOG.Checked + .ReparseMissingInTheRoutine.Value = CH_DOWN_REPARSE_MISSING.Checked 'Downloading: file names If CH_FILE_NAME_CHANGE.Checked Then .FileReplaceNameByDate.Value = If(OPT_FILE_NAME_REPLACE.Checked, FileNameReplaceMode.Replace, FileNameReplaceMode.Add) @@ -195,7 +210,9 @@ Namespace Editors .FeedEndless.Value = CH_FEED_ENDLESS.Checked .FeedAddSessionToCaption.Value = CH_FEED_ADD_SESSION.Checked .FeedAddDateToCaption.Value = CH_FEED_ADD_DATE.Checked - FeedParametersChanged = .FeedDataRows.ChangesDetected Or .FeedDataColumns.ChangesDetected Or .FeedEndless.ChangesDetected + .FeedStoreSessionsData.Value = CH_FEED_STORE_SESSION_DATA.Checked + FeedParametersChanged = .FeedDataRows.ChangesDetected Or .FeedDataColumns.ChangesDetected Or + .FeedEndless.ChangesDetected Or .FeedStoreSessionsData.ChangesDetected .EndUpdate() End With @@ -214,21 +231,12 @@ Namespace Editors Private Sub TXT_MAX_JOBS_CHANNELS_ActionOnButtonClick(ByVal Sender As ActionButton, ByVal e As EventArgs) Handles TXT_MAX_JOBS_CHANNELS.ActionOnButtonClick If Sender.DefaultButton = ADB.Refresh Then TXT_MAX_JOBS_CHANNELS.Value = SettingsCLS.DefaultMaxDownloadingTasks End Sub - Private Sub CH_FILE_NAME_CHANGE_CheckedChanged(sender As Object, e As EventArgs) Handles CH_FILE_NAME_CHANGE.CheckedChanged - ChangeFileNameChangersEnabling() - End Sub - Private Sub OPT_FILE_NAME_REPLACE_CheckedChanged(sender As Object, e As EventArgs) Handles OPT_FILE_NAME_REPLACE.CheckedChanged - ChangePositionControlsEnabling() - End Sub - Private Sub OPT_FILE_NAME_ADD_DATE_CheckedChanged(sender As Object, e As EventArgs) Handles OPT_FILE_NAME_ADD_DATE.CheckedChanged - ChangePositionControlsEnabling() - End Sub - Private Sub ChangePositionControlsEnabling() + Private Sub ChangePositionControlsEnabling() Handles OPT_FILE_NAME_REPLACE.CheckedChanged, OPT_FILE_NAME_ADD_DATE.CheckedChanged Dim b As Boolean = OPT_FILE_NAME_ADD_DATE.Checked And OPT_FILE_NAME_ADD_DATE.Enabled OPT_FILE_DATE_START.Enabled = b OPT_FILE_DATE_END.Enabled = b End Sub - Private Sub ChangeFileNameChangersEnabling() + Private Sub ChangeFileNameChangersEnabling() Handles CH_FILE_NAME_CHANGE.CheckedChanged Dim b As Boolean = CH_FILE_NAME_CHANGE.Checked OPT_FILE_NAME_REPLACE.Enabled = b OPT_FILE_NAME_ADD_DATE.Enabled = b @@ -243,5 +251,12 @@ Namespace Editors Private Sub CH_COPY_CHANNEL_USER_IMAGE_CheckedChanged(sender As Object, e As EventArgs) Handles CH_COPY_CHANNEL_USER_IMAGE.CheckedChanged CH_COPY_CHANNEL_USER_IMAGE_ALL.Enabled = CH_COPY_CHANNEL_USER_IMAGE.Checked End Sub + Private Sub CH_NOTIFY_SHOW_BASE_CheckedChanged(sender As Object, e As EventArgs) Handles CH_NOTIFY_SHOW_BASE.CheckedChanged + Dim b As Boolean = CH_NOTIFY_SHOW_BASE.Checked + CH_NOTIFY_PROFILES.Enabled = b + CH_NOTIFY_AUTO_DOWN.Enabled = b + CH_NOTIFY_CHANNELS.Enabled = b + CH_NOTIFY_SAVED_POSTS.Enabled = b + End Sub End Class End Namespace \ No newline at end of file diff --git a/SCrawler/Editors/SiteEditorForm.Designer.vb b/SCrawler/Editors/SiteEditorForm.Designer.vb index 2eeec22..f67aedb 100644 --- a/SCrawler/Editors/SiteEditorForm.Designer.vb +++ b/SCrawler/Editors/SiteEditorForm.Designer.vb @@ -1,4 +1,12 @@ -Namespace Editors +' Copyright (C) 2023 Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY +Namespace Editors Partial Friend Class SiteEditorForm : Inherits System.Windows.Forms.Form @@ -29,8 +37,8 @@ Me.TP_SITE_PROPS = New SCrawler.Editors.SiteDefaults() Me.TXT_PATH_SAVED_POSTS = New PersonalUtilities.Forms.Controls.TextBoxExtended() Me.CH_GET_USER_MEDIA_ONLY = New System.Windows.Forms.CheckBox() - Me.TT_MAIN = New System.Windows.Forms.ToolTip(Me.components) Me.CH_DOWNLOAD_SITE_DATA = New System.Windows.Forms.CheckBox() + Me.TT_MAIN = New System.Windows.Forms.ToolTip(Me.components) CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer() CONTAINER_MAIN.ContentPanel.SuspendLayout() CONTAINER_MAIN.SuspendLayout() diff --git a/SCrawler/Editors/SiteEditorForm.vb b/SCrawler/Editors/SiteEditorForm.vb index dcc330e..2d2f8fa 100644 --- a/SCrawler/Editors/SiteEditorForm.vb +++ b/SCrawler/Editors/SiteEditorForm.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -6,14 +6,14 @@ ' ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY +Imports SCrawler.Plugin +Imports SCrawler.Plugin.Hosts Imports PersonalUtilities.Forms Imports PersonalUtilities.Forms.Controls Imports PersonalUtilities.Forms.Controls.Base Imports PersonalUtilities.Tools.WEB Imports CookieControl = PersonalUtilities.Tools.WEB.CookieListForm.CookieControl Imports ADB = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons -Imports SCrawler.Plugin -Imports SCrawler.Plugin.Hosts Namespace Editors Friend Class SiteEditorForm Private ReadOnly LBL_AUTH As Label @@ -46,6 +46,7 @@ Namespace Editors Host = h LBL_AUTH = New Label With {.Text = "Authorization", .TextAlign = ContentAlignment.MiddleCenter, .Dock = DockStyle.Fill} LBL_OTHER = New Label With {.Text = "Other Parameters", .TextAlign = ContentAlignment.MiddleCenter, .Dock = DockStyle.Fill} + Host.Source.BeginEdit() End Sub Private Sub SiteEditorForm_Load(sender As Object, e As EventArgs) Handles Me.Load Try @@ -91,7 +92,6 @@ Namespace Editors TP_MAIN.RowStyles(2).Height = 0 End If - If .PropList.Count > 0 Then Dim laAdded As Boolean = False Dim loAdded As Boolean = False @@ -135,7 +135,7 @@ Namespace Editors TXT_COOKIES.CaptionWidth = offset CH_DOWNLOAD_SITE_DATA.Padding = New PaddingE(CH_DOWNLOAD_SITE_DATA.Padding) With {.Left = offset} CH_GET_USER_MEDIA_ONLY.Padding = New PaddingE(CH_GET_USER_MEDIA_ONLY.Padding) With {.Left = offset} - If c > 0 Or Not Host.IsMyClass Then + If c > 0 Or h <> 0 Then Dim ss As New Size(Size.Width, Size.Height + h + c) MinimumSize = ss Size = ss @@ -155,6 +155,7 @@ Namespace Editors If Not SpecialButton Is Nothing Then SpecialButton.Dispose() LBL_AUTH.Dispose() LBL_OTHER.Dispose() + Host.Source.EndEdit() End Sub Private Sub MyDefs_ButtonOkClick(ByVal Sender As Object, ByVal e As KeyHandleEventArgs) Handles MyDefs.ButtonOkClick If MyDefs.MyFieldsChecker.AllParamsOK Then @@ -177,24 +178,20 @@ Namespace Editors If pList.Count > 0 AndAlso Not CBool(.PropList(indxList(i)).PropertiesCheckingMethod.Invoke(.Source, {pList})) Then Exit Sub Next End If + + Settings.BeginUpdate() + + SiteDefaultsFunctions.SetPropByChecker(TP_SITE_PROPS, Host) + If TXT_PATH.IsEmptyString Then .Path = Nothing Else .Path = TXT_PATH.Text + .SavedPostsPath = TXT_PATH_SAVED_POSTS.Text + .DownloadSiteData.Value = CH_DOWNLOAD_SITE_DATA.Checked + .GetUserMediaOnly.Value = CH_GET_USER_MEDIA_ONLY.Checked + + If .PropList.Count > 0 Then .PropList.ForEach(Sub(p) If Not p.Options Is Nothing Then p.UpdateValueByControl()) + + .Source.Update() End With - Settings.BeginUpdate() - - If Not Host Is Nothing Then - With Host - SiteDefaultsFunctions.SetPropByChecker(TP_SITE_PROPS, Host) - If TXT_PATH.IsEmptyString Then .Path = Nothing Else .Path = TXT_PATH.Text - .SavedPostsPath = TXT_PATH_SAVED_POSTS.Text - .DownloadSiteData.Value = CH_DOWNLOAD_SITE_DATA.Checked - .GetUserMediaOnly.Value = CH_GET_USER_MEDIA_ONLY.Checked - - If .PropList.Count > 0 Then .PropList.ForEach(Sub(p) If Not p.Options Is Nothing Then p.UpdateValueByControl()) - - .Source.Update() - End With - End If - Settings.EndUpdate() MyDefs.CloseForm() @@ -221,6 +218,7 @@ Namespace Editors .DisableControls = CookieControl.AddFromInternal + CookieControl.AuthorizeProgram + CookieControl.OpenBrowser } f.ShowDialog() + MyDefs.MyOkCancel.EnableOK = True End Using SetCookieText() End If @@ -229,6 +227,7 @@ Namespace Editors With Host.Responser If Not .Cookies Is Nothing Then .Cookies.Dispose() .Cookies = New CookieKeeper(.CookiesDomain) + MyDefs.MyOkCancel.EnableOK = True End With SetCookieText() End If diff --git a/SCrawler/Editors/SiteSelectionForm.Designer.vb b/SCrawler/Editors/SiteSelectionForm.Designer.vb index 690e688..bcbe3b4 100644 --- a/SCrawler/Editors/SiteSelectionForm.Designer.vb +++ b/SCrawler/Editors/SiteSelectionForm.Designer.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -39,7 +39,7 @@ Namespace Editors 'CONTAINER_MAIN.ContentPanel ' CONTAINER_MAIN.ContentPanel.Controls.Add(Me.CMB_SITES) - CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(284, 276) + CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(284, 251) CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill CONTAINER_MAIN.LeftToolStripPanelVisible = False CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0) @@ -68,7 +68,7 @@ Namespace Editors Me.CMB_SITES.ListMultiSelect = True Me.CMB_SITES.Location = New System.Drawing.Point(0, 0) Me.CMB_SITES.Name = "CMB_SITES" - Me.CMB_SITES.Size = New System.Drawing.Size(286, 277) + Me.CMB_SITES.Size = New System.Drawing.Size(286, 252) Me.CMB_SITES.TabIndex = 0 ' 'SiteSelectionForm @@ -95,7 +95,6 @@ Namespace Editors Me.ResumeLayout(False) End Sub - Private WithEvents CMB_SITES As PersonalUtilities.Forms.Controls.ComboBoxExtended End Class End Namespace \ No newline at end of file diff --git a/SCrawler/Editors/UserCreatorForm.Designer.vb b/SCrawler/Editors/UserCreatorForm.Designer.vb index 1f884f1..471e424 100644 --- a/SCrawler/Editors/UserCreatorForm.Designer.vb +++ b/SCrawler/Editors/UserCreatorForm.Designer.vb @@ -1,4 +1,12 @@ -Namespace Editors +' Copyright (C) 2023 Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY +Namespace Editors Partial Friend Class UserCreatorForm : Inherits System.Windows.Forms.Form @@ -126,7 +134,7 @@ TP_SITE.ColumnCount = 3 TP_SITE.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 79.0!)) TP_SITE.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - TP_SITE.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 100.0!)) + TP_SITE.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 104.0!)) TP_SITE.Controls.Add(Me.CH_IS_CHANNEL, 0, 0) TP_SITE.Controls.Add(Me.CMB_SITE, 1, 0) TP_SITE.Controls.Add(Me.BTT_OTHER_SETTINGS, 2, 0) @@ -169,17 +177,17 @@ Me.CMB_SITE.Location = New System.Drawing.Point(84, 3) Me.CMB_SITE.Margin = New System.Windows.Forms.Padding(3, 2, 3, 3) Me.CMB_SITE.Name = "CMB_SITE" - Me.CMB_SITE.Size = New System.Drawing.Size(263, 22) + Me.CMB_SITE.Size = New System.Drawing.Size(259, 22) Me.CMB_SITE.TabIndex = 1 Me.CMB_SITE.TextBoxBorderStyle = System.Windows.Forms.BorderStyle.FixedSingle ' 'BTT_OTHER_SETTINGS ' Me.BTT_OTHER_SETTINGS.Dock = System.Windows.Forms.DockStyle.Fill - Me.BTT_OTHER_SETTINGS.Location = New System.Drawing.Point(352, 2) + Me.BTT_OTHER_SETTINGS.Location = New System.Drawing.Point(348, 2) Me.BTT_OTHER_SETTINGS.Margin = New System.Windows.Forms.Padding(1) Me.BTT_OTHER_SETTINGS.Name = "BTT_OTHER_SETTINGS" - Me.BTT_OTHER_SETTINGS.Size = New System.Drawing.Size(98, 24) + Me.BTT_OTHER_SETTINGS.Size = New System.Drawing.Size(102, 24) Me.BTT_OTHER_SETTINGS.TabIndex = 2 Me.BTT_OTHER_SETTINGS.Text = "Options (F2)" TT_MAIN.SetToolTip(Me.BTT_OTHER_SETTINGS, "Other settings") @@ -457,7 +465,7 @@ Me.ClientSize = New System.Drawing.Size(454, 461) Me.Controls.Add(CONTAINER_MAIN) Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle - Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.Icon = Global.SCrawler.My.Resources.Resources.UsersIcon_32 Me.KeyPreview = True Me.MaximizeBox = False Me.MaximumSize = New System.Drawing.Size(470, 500) diff --git a/SCrawler/Editors/UserCreatorForm.resx b/SCrawler/Editors/UserCreatorForm.resx index 4c77853..876be63 100644 --- a/SCrawler/Editors/UserCreatorForm.resx +++ b/SCrawler/Editors/UserCreatorForm.resx @@ -297,429 +297,4 @@ False - - - AAABAAkAMDAQAAAAAABoBgAAlgAAACAgEAAAAAAA6AIAAP4GAAAQEBAAAAAAACgBAADmCQAAMDAAAAEA - CACoDgAADgsAACAgAAABAAgAqAgAALYZAAAQEAAAAQAIAGgFAABeIgAAMDAAAAEAIACoJQAAxicAACAg - AAABACAAqBAAAG5NAAAQEAAAAQAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAIAAAAAAAACAgACAAAAAgACAAICAAADAwMAAgICAAAAA/wAA/wAAAP//AP8A - AAD/AP8A//8AAP///wAiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi - IiIiIiIiIiIiIiIiIiAAAyIiIiIiIiIiIiIiIiIiIiIiIiIiIgAAADIiIiIiIiIiIiIiIiIiIiIiIiIi - IAC7sAMiIiIiIiIiIiIiIiIiIiIiIiIiIAsHuwAyIiIiIiIiIiIiIiIiIiIiIiIiILuAe7ADIiIiIiIi - IiIiIiIiLMAAAAAAALO4B7sAMiIiIiIiIiIiIiLAAADMZmZmwLs7gHuwAyIiIiIiIiIiLAAAxmZmzMzM - wACzuAe7ADIiIiIiIiIsAAZmzMzMzMzMAAC7u4B7sAMzMzMzIiLABszMzMzMzMzAAAAAC7gHuwAAAAAA - MiIAbMzMzMAAAAwAAAAACzuAe7gzMzMwAyIGzMzMAAODcwAAABEAC7u4C7u7u7uzADIAzMwAODc3NzAB - GRkQAAC7uwuwi7u7MAMgDMCDc3Nzc4ARERERAAALsLsIu3i7swMiAMA3Nzc3NwABODg4AiILC7CLtxe7 - swMiIABzc3NzgwODg4OAIiILuwi7cHu7swMiIgA3Nzc3OAg4ODgCIiILsIu3F7u7swMiIiADc3OAAAAA - g4AiIiILCLtwe3d3swMiIiAINzg4Nzc3CDAiIiI7i7cXswADswMiIiADg3Nzc3N3A4AiIiI7u3B7MIIg - swMiIgAACDc3Nzc3AAAAACI7txe7MIIDswMiIAAAAHNzc3ODA4ODgwI7uHu7MIA7sDIiAAAAADc4Nzc3 - CDg4OAIju7u7MwO7AyIiAAAAA3ODc3NzAIODgwIiO7u7u7uwMiIgAAAIdzc3N3c3Nwg4MAIiI7u7u7sD - IiIAAAADc4Nzd3NzcwODgwIiIjMzMzMyIiIAAAAHdzc3d3c3MDg4OAAiIiIiIiIiIiIAAAADc3Nzc3Nz - cIODg4MCIiIiIiIiIiIAAAAANzg3NzA3MDg4ODgCIiIiIiIiIiIAAAAAAACDc3AAAIODg4AiIiIiIiIi - IiIAAAAAAAA4Nzc3ADg4ODAiIiIiIiIiIiIAAAAAAAADc3NzcIOAg4AiIiIiIiIiIiIAAAAAAAAANzc3 - cDgwAAgiIiIiIiIiIiIAAAAAAAAAA3NzcIODgwgiIiIiIiIiIiIAAAAAAAAAADc3MDg4OAgiIiIiIiIi - IiIgAAAAAAAAAAAAAIODg4AiIiIiIiIiIiIgAAAAAAAAAAAAADg4ODAiIiIiIiIiIiIiAAAAAAAAAAAA - AACDg4ACIiIiIiIiIiIiIAAAAAAAAAAAAAAAAAACIiIiIiIiIiIiIgAAAAAAAAAAAAAAAAACIiIiIiIi - IiIiIiIAAAAAAAAAAAAAAAACIiIiIiIiIiIiIiIiIiAAAAAAAAAAAAAiIiIiIiIiIiIiIiIiIiIAAAAA - AAAAACIiIiIiIiIiIiIiIiIiIiIiAAAAAAAAIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi - IiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiL///////8AAP///////wAA///+D///AAD///wH//8AAP// - +AP//wAA///4Af//AAD///gA//8AAP+AAAB//wAA/AAAAD//AADgAAAAH/8AAIAAAAAADwAAAAAAAAAH - AAAAAAAAAAMAAAAAAAAAAQAAAAAAAAAAAACAAAAAAAAAAMAAABwAAAAA4AAAPAAAAADwAAB8AAAAAPgA - APwAAAAA+AAA/AAAAAD4AAD8AGAAAPAAAAwAQAAA4AAABAABAADAAAAGAAMAAMAAAAcABwAAgAAAB4AP - AAAAAAAHwB8AAAAAAAP//wAAAAAAAf//AAAAAAAB//8AAAAAAAP//wAAAAAAA///AAAAAAAD//8AAAAA - AAP//wAAAAAAA///AAAAAAAD//8AAIAAAAP//wAAgAAAA///AADAAAAB//8AAOAAAAH//wAA8AAAAf// - AAD8AAAB//8AAP/gAAP//wAA//AAD///AAD//AA///8AAP///////wAA////////AAAoAAAAIAAAAEAA - AAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAICAAIAAAACAAIAAgIAAAMDA - wACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////ACIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIAAy - IiIiIiIiIiIiIiIiIgCIAyIiIiIiIiIiIiIiIiIHC4AyIiIiIiIiIiiAAAAAC3C4AyIiIiIiIoAAAAzM - zAC3C4AyIiIiIoAADMzMzMABAHC4AzMzMiIADMzAAMwAERC3C4AAAAMiDMzAA4MAARGRALC7u7uAMiDM - CDc3MAhziRALsws7uAMgAHdzeAGDhzAiCzCzC7sDIgA3N4MAOHMCIgsLMLu7AyIgA3MBAQOAIiI7swgA - iwMiIAc3g4dwMCIiOzCwggsDIgAAd3d38AAAIjt7sIC7gyAAAAd3dzE4NwIju7gLuDIgAAB3c3dwA4cC - Iju7u4MiAAAHdzd/d3A4EiIjMzMyIgAAB3d3938DgwAiIiIiIiIAAAA3d3B3CHdzAiIiIiIiAAAAADdx - AAd3MCIiIiIiIgAAAAADd3ADCHAiIiIiIiIAAAAAADf3CBADIiIiIiIiAAAAAAADdwN3CCIiIiIiIiAA - AAAAAAAIc3AiIiIiIiIgAAAAAAAAADcwAiIiIiIiIgAAAAAAAAAAAAIiIiIiIiIiAAAAAAAAAAACIiIi - IiIiIiIgAAAAAAAAIiIiIiIiIiIiIiAAAAAAIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi - IiIiIiIi///////+H////A////wH//gAA//AAAH/AAAABwAAAAMAAAABgAAAAIAAMADAAHAA4ADwAOAA - 8BDAADAAgAAYAYAAHAMAAB4HAAAP/wAAB/8AAA//AAAP/wAAD/8AAA//gAAP/4AAB//AAAf/8AAH//4A - D///gD////////////8oAAAAEAAAACAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - gAAAAAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////ACIi - IiIAMiIiIiIiIDsDIiIiDMRAsLAyIgzMzMwLCwAyDMAAABCwuwMAB3ARkjuzsCB3gAAiOzCwIgh3cAA7 - uzMgBzdwhwMzMgB3f3cIAiIiAHd3AHOIIiIAAHfwMAIiIgAAB3CHAiIiAAAAADgAIiIgAAAAAAAiIiIg - AAAAAiIi/x/AA/4PARHAB7C7AAGAMgAACDcAQAhzgMALs8AAuAOAAXdzAB+DhwAPCzAAH7sDAB83NwAP - OHOADwsL4B+7AygAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////ABEM - aQAAAAAANBpLAAAAAAB/TG4AYF5eAP1lVAD8ZFMA/WZVAPljUAD9alcA/WtYAL+LhADnWD4A711GAP1y - XAD9dV4A/XhgAPFoTgDzbVMA/XxkANxRMQD4e18A/YRpANJMJwDvdlYA/IttAP2OcADNSCEA4GZCALFl - TQD+knIAwEATAKU/GQDSXDIA1WI3AOuAWQD5km8At0YbAMVXKwDMXS8At1cxAH5AJwCFRy4A6Zp6AGxV - TACMUDYA13RFAGpjXwDViFUAbUkxAP+/kQCsZSsA7riKAJpYGQD/798A/8+cAP/ZpgDf0bwAhWAaAP3j - sAD/9+gAkXkwAP//8gD///wAv9msAICrZwDP4sUAcKlfAEiQNwBtxGIAespvAEyZRgBqqWYAL5gtAAqF - CgAWihYAGpYaAB6PHgAZdxkAKa0pACOQIwAbaBsAPLc8AEO7QwBAs0AAJWYlADmaOQBKvkoAT8FPAESm - RABSwlIATbNNAFC4UABWxFYAW8VbAGPKYwBpzWkAb9FvAGfAZwBFfkUAddJ1AHHLcQB813wAj+CPAICz - gAA1WTgAn7CkADd9VwACaHYAaZquABNyogAYdqYAF2OKACBggQAsWG8AE1+IACR+rgA5n9kAOou3AD+V - wwBHn9AAV6nXAGOr0gCezOYAo9DqAA1zswAkfbYAIm6dAD2i3wBNs/IAU7n5AHq74QCEwOQAlMjnAJfK - 6ACezekAFXm6ACOFxgBDqO0AUbf/AFW7/wBWvP8AWmBkABuBzQAfhdQAS7H/AE2z/wBOtP8AQnOZACeM - 4gAtkuYARKn/AESq/wBHrf8ASa//ACyS8QA6oP8APKH/AD2i/wBApv8AQ6j/ADKW/AAylfsAM5n/ADWb - /wA3nf8AEliiAC+M8wAxkfkANpT3AAkSHAAXY7oAKnziAC2C6gAndNoAJnHXACl64AAod90AIWK1ACNo - zgAkatAAFlOwAB5fwgAgYMYAImXLABBCngAcVrwAI2jdAB5awAAQLFsADhksABtRtwAaTbMADSloAB1W - 0gAWQZ4AGUiuAAUpgwAUP6QAFDyiABQ6oAASNZsADCV+AA8tkwAQL5UABQcOAAgdbAANJo0ABxVbAAYY - ewAuNFcAHyApAAQMcgABAhUAAQRqAKSkpACXl5cAj4+PAISEhAB+fn4AcXFxAG1tbQBmZmYAVFRUAE1N - TQBKSkoARkZGAD8/PwA4ODgANjY2AC8vLwAsLCwAKioqACgoKAAkJCQAISEhAB8fHwAcHBwAGhoaABgY - GAAXFxcAEhISAA0NDQAKCgoAAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQUFBQUF - BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF - BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF - BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF - BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF - BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF4ODhMuEy4TIy4TLh4eDg - 4ODgBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXg4SMsIiMiIyIjIiMjIywsNC/h4eAFBQUFBQUF - BQUFBQUFBQUFBQUFBQUFBQUFBeAoIiIeGhcPFxALCwkQDyIiIiIjIzTg4QUFBQUFBeDg4ODg4ODg4ODg - 4AUFBQUFBSsiIhoaFw8QCwgIDAwNDygiEAsPGiIjNODg4eEH4eJsWGxYbFhsWGxs4+HgBQUFBSseGhoP - DwsJDA0RERERIjcpDwoJCxcaIjRYVE1UVE1QU1NTU05OT01NTVRY4AUFBSsoGg8XCwkMERMWFhYaKz4z - HhENCAsPFyJRWVZbTU1fWltbVlZVUlJST09N4uAFBTMiFw8LCA0RFhYZGTEoOz47IhYRDQkLDyJKW11Z - TFFZYGFdXVtWVlJSUk9NbOAFBTEiDxAJDRETGRkdGSIuPj4+KxQWEQ0IDyJKYGFObUNNYmJiYF1bVlZV - UlJNWOAFBQUjFwsMERYZGR0hHio7Ozs7MxcZFhEMECJGYWJUPkFKU2hjY2JgXVZWVVJNbOAFBQUxIgsN - ExYZHSEqKTo7Ozs7MykZFhMNCyJiZF9TPz85UV5oZGNiYFtWVVJN4OAFBQUFKx4RFhkdJyYiNzU6OjU6 - Lh4dGRYRFzhkZ1lrQUFBbU1oaWdjYmFbVlJU4AUFBQUFBSIXFhkdJiImNzo3NTo6LiIdGRMfIkRnZ05D - QkJCQmtRaWlkYmFdVk1m4AUFBQUFBQUrKSYbIjEOIAYGDiE3NyIdGR8iQGdpalQ/AQEBAT9TSmlnZGJg - UFTgBQUFBQUFBQUFMTEiIwTX2dfZ19kGJiIxKCNGSGdpak0/Pz8/Pz9DVF5pZGJMVOEFBQUFBQUFBQUF - 4OnvwdPU0tLS0s3ZBCMjIFRcZ2lqaFQ5OTk+OTk+alRlZ0xU4AUFBQUFBQUFBQX1APf3AADTz8/Pz8/S - 1wIFBQVUTmVqZVM+bXdxcXF320RNUVTgBQUFBQUFBQUF8AD29/YA0NPNzMvLy8vMz9nVBQUFTVROWU13 - gJKSkpKSgHZUWOAFBQUFBQUFBQXw9/b19fatzMfHx8fHx8fHy87XBQUFBQUFZnaLk5iTmJOTmJJx4+AF - BQUFBQUFBQX39fX09ADOx8PDw8PDw8PDw8fU1QUFBQUFl5KYmZmenpmZmJiScePgBQUFBQUFBQD19PTw - 9K3Dw729vb25vb29vcPSxAUFBQUFgKWmpqampqampqWeknbgBQUFBQUFBfb08PDw9MC9vbm7u7u7u7u5 - ub3HyAUFBQWAnqenqKioqKiop6empot14AUFBQUFBfXw8O3t9NG6u7q3t7e3t7e3u7q6zcgFBQWAqJ+f - oaGhoaGhn5+op6V24AUFBQUFBfTt7err8cG3t7KytLS0tLSysre7yMgFBQWAoaGhoqKioqKioaGhn5+L - deAFBQUFBfDt6uvo6q2ytLSvsLCwsK+wtLKyvMgFBZeeoqObm5ycnJubo6OioaGYdeAFBQUFBfTq6+jo - 5/e7r7CqqqqqqqqwsLC0vHYFBXmNm5ydnZSUlJSdnZybo6KhduAFBQUFBfTo6Ojn5vHIqqqmpqanpqal - qrCwvMgFBZebnZWVlpaOjpaWlZWdnKOigOAFBQUFBfbo6ebl5ujQtLCqqqefn6inpqWeyAUFBXmUlY6O - j5CQkJCOjo6VlJybkuAFBQUFBfDq5ubl5OTxwcvDt7exsKunpqaYyAUFBZeWjo+QkJCQkJCQkI6OlpWd - kuAFBQUFBQX15uXk4uPi6vT2rdHJvcW3t7LA8gUFBXmNkJCQkJCQkJCQkJCPjpaVi+AFBQUFBQX16OTk - 5uIH4N/f5vHY08TUxK0A6AUFBZeDkJB4jIt4m5WWjo6OlpSMceAFBQUFBQUF9uTi4uLh393a2tsH6fD0 - 8Or3BQUFBXmMjHGLenqMcYuTmKekmItyduAFBQUFBQUF9fXiB+Hg393b2kNt3d8H5PTtBQUFBQVxcXKM - eHx8fYZ6eXFyd3dxc+AFBQUFBQUFBfX04uHf3t3d3Nra294H6/YFBQUFBQUFcXp6fHx9h4d/f399cIGA - dAUFBQUFBQUFBQX19eLe3dzb3d7f4OLt9gUFBQUFBQUFcXp8fX2Hh35/f4d8end24AUFBQUFBQUFBQUF - BfXw4t7b3eDk7vbmBQUFBQUFBQUFBXF8fYeHiYeHfXx8enGXBQUFBQUFBQUFBQUFBQUF9fUAAPXoBQUF - BQUFBQUFBQUFBQVxfYd+f4qHh318cnkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF - cXmHf39+fHdyBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXmXeZd5l3kFBQUF - BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF - BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF - BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF - BQUFBQUFBQUFBQUFBQUFBQUF////////AAD///////8AAP///////wAA////////AAD///////8AAP// - /////wAA4AAH////AADAAAH///8AAIAAAH4AHwAAgAAAAAAHAACAAAAAAAMAAIAAAAAAAQAAgAAAAAAB - AACAAAAAAAEAAMAAAAAAAQAAwAAAAAABAADgAAAAAAMAAPAAAAAAAwAA+AAAAAAHAAD8AAAAAA8AAPwA - AAAAHwAA+AAOAAA/AADgAAcAAH8AAMAAB+AAfwAAwAAD4AA/AACAAAPgAD8AAIAAA8AAHwAAgAABwAAf - AACAAAHAAA8AAIAAAYAADwAAgAABgAAPAACAAAGAAA8AAIAAA4AADwAAgAADgAAPAADAAAOAAA8AAMAA - A4AADwAA4AAHgAAPAADgAAfAAA8AAPAAD+AAHwAA+AAf4AAfAAD+AD/wAD8AAP+B//gAfwAA/////AH/ - AAD////+A/8AAP///////wAA////////AAD///////8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AEQxpAAAAAAA0GksATCFPAH9MbgBgXl4A/WVUAPxk - UwD9ZlUA+WNQAP1qVwD9a1gAv4uEAOdYPgDvXUYA/XJcAP11XgD9eGAA8WhOAPNtUwD9fGQA3FExAPh7 - XwD9hGkA0kwnAO92VgD8i20A/Y5wAM1IIQDgZkIAsWVNAP6ScgDAQBMApT8ZANJcMgDVYjcA64BZAPmS - bwC3RhsAxVcrAMxdLwC3VzEAfkAnAIVHLgDpmnoAbFVMAIxQNgDXdEUAamNfANWIVQBtSTEA/7+RAKxl - KwDuuIoAmlgZAP/v3wD/z5wA/9mmAN/RvACFYBoA/eOwAP/36ACReTAA///yAP///AC/2awAgKtnAM/i - xQBwqV8ASJA3AG3EYgB6ym8ATJlGAGqpZgAvmC0ACoUKABaKFgAalhoAHo8eABl3GQAprSkAI5AjABto - GwA8tzwAQ7tDAECzQAAlZiUAOZo5AEq+SgBPwU8ARKZEAFLCUgBNs00AULhQAFbEVgBbxVsAY8pjAGnN - aQBv0W8AZ8BnAEV+RQB10nUAcctxAHzXfACP4I8AgLOAADVZOACfsKQAN31XAAJodgBpmq4AE3KiABh2 - pgAXY4oAIGCBACxYbwATX4gAJH6uADmf2QA6i7cAP5XDAEef0ABXqdcAY6vSAJ7M5gCj0OoADXOzACR9 - tgAibp0APaLfAE2z8gBTufkAervhAITA5ACUyOcAl8roAJ7N6QAVeboAI4XGAEOo7QBRt/8AVbv/AFa8 - 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 - GwDFVysAzF0vALdXMQB+QCcAhUcuAOmaegBsVUwAjFA2ANd0RQBqY18A1YhVAG1JMQD/v5EArGUrAO64 - igCaWBkA/+/fAP/PnAD/2aYA39G8AIVgGgD947AA//foAJF5MAD///IA///8AL/ZrACAq2cAz+LFAHCp - XwBIkDcAbcRiAHrKbwBMmUYAaqlmAC+YLQAKhQoAFooWABqWGgAejx4AGXcZACmtKQAjkCMAG2gbADy3 - PABDu0MAQLNAACVmJQA5mjkASr5KAE/BTwBEpkQAUsJSAE2zTQBQuFAAVsRWAFvFWwBjymMAac1pAG/R - bwBnwGcARX5FAHXSdQBxy3EAfNd8AI/gjwCAs4AANVk4AJ+wpAA3fVcAAmh2AGmargATcqIAGHamABdj - igAgYIEALFhvABNfiAAkfq4AOZ/ZADqLtwA/lcMAR5/QAFep1wBjq9IAnszmAKPQ6gANc7MAJH22ACJu - nQA9ot8ATbPyAFO5+QB6u+EAhMDkAJTI5wCXyugAns3pABV5ugAjhcYAQ6jtAFG3/wBVu/8AVrz/AFpg - ZAAbgc0AH4XUAEux/wBNs/8ATrT/AEJzmQAnjOIALZLmAESp/wBEqv8AR63/AEmv/wAskvEAOqD/ADyh - /wA9ov8AQKb/AEOo/wAylvwAMpX7ADOZ/wA1m/8AN53/ABJYogAvjPMAMZH5ADaU9wAJEhwAF2O6ACp8 - 4gAtguoAJ3TaACZx1wApeuAAKHfdACFitQAjaM4AJGrQABZTsAAeX8IAIGDGACJlywAQQp4AHFa8ACNo - 3QAeWsAAECxbAA4ZLAAbUbcAGk2zAA0paAAdVtIAFkGeABlIrgAFKYMAFD+kABQ8ogAUOqAAEjWbAAwl - fgAPLZMAEC+VAAUHDgAIHWwADSaNAAcVWwAGGHsALjRXAB8gKQAEDHIAAQIVAAEEagCkpKQAl5eXAI+P - jwCEhIQAfn5+AHFxcQBtbW0AZmZmAFRUVABNTU0ASkpKAEZGRgA/Pz8AODg4ADY2NgAvLy8ALCwsACoq - KgAoKCgAJCQkACEhIQAfHx8AHBwcABoaGgAYGBgAFxcXABISEgANDQ0ACgoKAAICAgAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA39/f4ODg4OAAAAAAAAAA4CAwMDAw - LzLf4ODg4N/f4B8XCxEUMRQabGxMR0xYbOAzCxYcMzoVDEBeS2JdVVPgAB8ZJjo6Gw1EazleZ1tH4AAA - IAXVBiBAaWo/Q2FcAAAA89DEy8/R4kuXi4Fu4wAA5vHAw73Cz+JwnqamnnXdAPTszrGysr+ReqKioqGM - 4ADq6HWrpqy3kXuUlJWdmeEA4OTm5cm6dt58hISPjo3gAADn4dza4+UAfYF8fXtxcAAAAOAHB+EAAAB5 - h397cAAAAAAAAAAAAAAAAHl5eQAAAAAAAAAAAAAAAAAAAAAAAAD//xcQgH8TFgAAPjMAAAkQAABbTIAA - XVrAA1JSgAPgAAABDwkAARkcAAE+NwABDAuBAWFGw4NiYf/HVVL//+AAKAAAADAAAABgAAAAAQAgAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAcAAAATAAAAHgAAACUAAAAsAAAALwAA - AC8AAAAvAAAALwAAAC8AAAAvAAAALgAAACkAAAAkAAAAHwAAABgAAAARAAAACQAAAAIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAEAAAADEAAABVAAAAbQAA - AHwAAACJAAAAjwAAAI8AAACPAAAAjwAAAI8AAACPAAAAjAAAAIMAAAB5AAAAbgAAAGEAAABSAAAAQAAA - AC4AAAAfAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALKA0BRm0i - ArWIKgLijy0C67A3A/+wNwP/sDcD/7A3A/+wNwP/sDcD/7A3A/+wNwP/nzID944sAu2FKgLnaSEC11Qa - AckwDwGyAAAAlwAAAIcAAABwAAAAUAAAAC0AAAARAAAABAAAAAAAAAAAAAAAAQAAAAQAAAAKAAAADwAA - ABUAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAFQAAAA0AAAAGAAAAAQAAAAAAAAAAAAAAAAAA - AAB8JwJErDYD9bk8DP/AQBT/ykcf/9RNKf/dUjL/4lU4/+hYPv/uXET/9WBL//diTv/6Y1H/7lxE/+pa - QP++PxH/uTwM/8VDGf+0OQf/qDQD+4UpAulSGgHNAAAAnQAAAH0AAABPAAAAKAAAABwAAAAiAAAALAAA - ADcAAABDAAAATQAAAFkAAABfAAAAXwAAAF8AAABfAAAAXwAAAF8AAABfAAAAWQAAAEoAAAA6AAAAJwAA - ABEAAAAEAAAAAAAAAACjMwOsuj0N/8lGHv/RSyb/104s/+FUNv/lVzv/8F1G//hiT//9ZVT//WZV//1p - V//9alj//WpY/+pdQv+1Qw//tToI//hiT//4Yk//6lk//9BKJf+2Owr/nzID90UWAcwAAACYAAAAdQAA - AGgAAAB2AAwAjwAmAK0AJACzAD8AzwA+ANIAPgDTAD4A0wA+ANMAPgDTAD4A0wA+ANMAPgDTACMAuwAT - AKkAAACSAAAAegAAAEkAAAAWAAAAAQAAAACoNQPIw0IX/9BLJf/XTiz/4VQ2/+hYPv/1YEv//GVT//1o - Vv/9bVn//XBc//1zXv/9dF//+HBZ/7o+Dv/muYb/v1sn/+BYOf/9aFb//GVT//VgS//oWD7/1k4s/7M5 - Bv9iLAHlADwA2ABTAOoAYgD6AGYA/wVsBf8KcQr/H4wf/yORI/8ikCL/IJAg/yCQIP8cjhz/Go0a/xaL - Fv8OgA7/CHcI/wJqAv8AXAD3ACgAzAAAAIUAAAA3AAAACAAAAACqNQPGx0Ub/9ZOK//hVDb/6Fg+//Vg - S//9ZlT//WtY//1xXP/9d2D//Xpi//18ZP/9f2b/0lUt/8RkMf//7rv/3J5r/8hKH//9cVz//WxZ//1m - VP/1YEv/6Fg+/9xRMf+wNwP/I4IY/zGhMf9DtEP/Tb9N/wVsBf8Odw7/UMFQ/0/AT/9Nv03/S75L/0e8 - R/9CukL/PLc8/zSzNP8tsC3/Jawl/xynHP8SlRL/AWoB/wATAK0AAABTAAAAEgAAAACrNQO0xUQa/91S - Mv/lVzv/9WBL//1mVP/9bVr//XNe//16Yv/9f2b//YNp//2Gav/lbkv/tUIO//rbqf//6Lb/9dKf/7A3 - A//9emL//XNe//1tWv/9ZlT/9WBL/+ZXPP+9PxH/ZZ06/06/Tv9Tw1P/NaE1/zCDKP8geRv/Mpwy/1nG - Wf9Yxlj/VcRV/1HBUf9Mv0z/R7xH/z+5P/81tDX/LrAu/yWsJf8cpxz/Cn4K/wA4AM0AAABcAAAAFgAA - AACpNQNkuj0O/+NVOf/wXUb//GVT//1sWf/9c17//Xpi//2CaP/9h2v//o1v//mJav+1PAr/5qt4///h - rv//4q///+Kw/79XI//qb07//Xpi//1zXv/9bVn//GVT//BdRv+9PxH/aqA//1jGWP9eyF7/HoUe/5/G - iv+/2ab/BmwG/2DGYP9ky2T/YMlg/1vHW/9WxFb/T8BP/0i9SP9BuUH/N7U3/y2wLf8kqyT/DoYO/wA+ - ANEAAABVAAAAEwAAAACmNAMRrzcD8dtRMP/4Yk///WhW//1xXP/9emL//YJo//2IbP/+j3D//pR0/8RP - IP/OdED//9uo///bqP//3Kn//9yp/9N/S//XXjb//YJo//16Yv/9cl3//WlX//hiT/+8PhD/caNG/2TL - ZP9ix2L/AGYA/+/11f///+T/YJ9W/ySIJP9v0G//a85r/2XMZf9fyV//WMZY/1HBUf9JvUn/P7k//zW0 - Nf8qrir/DoAO/wA6AMQAAABBAAAACgAAAAAAAAAArDYDg7w+EP/9ZVT//W5a//13YP/9f2b//Ydr//6P - cP/+lnX/12g9/79UIP/6ypf//9Sh///Uof//1qP//9aj/9yQXf/IUiX//Ydr//1/Zv/9d2D//W5a//hi - T/+wNwP/Z8xn/27Qbv9PsE//MIMs////6f///+v/7/Xc/xBwD/9TslP/dtR2/3HRcf9ozWj/Ycph/1jG - WP9PwE//R7xH/z64Pv8xsjH/BW8F/wAhAJUAAAApAAAAAgAAAAAAAAAAAAAAAK83A9HNSiL//XBc//16 - Yv/9g2n//o1v//6UdP/melL/tUAM//Cwff//zpv//86b///Om///z5z//8+c/+updv/ETR///o1v//2E - af/9emL//XFc/+BWN/+eXR3/cdFx/3fUd/83mDf/gLN4////8P////L////y/6/Pp/8IbQj/cMtw/3rW - ev9y0nL/aM1o/2DJYP9YxVj/Tr9O/0K6Qv8onSj/AF4A8wAAAFQAAAATAAAAAAAAAAAAAAAAAAAAAKY0 - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// - /////wAA////////AAD///////8AAP///////wAA////////AADAAAP///8AAIAAAH///wAAgAAAGAAH - AACAAAAAAAEAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAMAA - AAAAAAAA4AAAAAABAADgAAAAAAEAAPAAAAAAAwAA8AAAAAADAADAAAAAAAcAAIAAAAAADwAAgAAAAAAf - AAAAAACAAB8AAAAAAMAADwAAAAAAAAAPAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAMAAAAA - AAAAAwAAAAAAAAADAAAAAAAAAAMAAIAAAAAAAwAAgAAAgAADAACAAACAAAMAAMAAAIAAAwAA4AABwAAH - AADgAAHAAAcAAPAAA8AABwAA/AAH4AAPAAD+AB/wAB8AAP////gAPwAA/////AD/AAD///////8AAP// - /////wAA////////AAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAMAAAAFQAAABgAAAAYAAAAGAAA - ABgAAAAYAAAAFgAAABIAAAALAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAJQAAAEUAAABZAAAAXwAA - AF8AAABfAAAAXwAAAF8AAABcAAAAUwAAAEYAAAA2AAAAJgAAABYAAAAJAAAAAQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB9RGQGMbyMCy2sh - AtJrIQLTayEC02shAtNrIQLTayEC01QaAcg9EwG5EgYAoAAAAI8AAAB7AAAAXQAAADkAAAAdAAAAFgAA - ABwAAAAjAAAAKQAAAC4AAAAvAAAALwAAAC8AAAAuAAAAKAAAAB4AAAAPAAAABAAAAAAAAAAArTcG18FB - Ff/RSyb/21Ew/+hYP//zX0r/+WNQ//1lVP/9ZVT/zUgh/9JLJv/UTSn/oTYO82ggAtogCgGwAAAAiAAA - AGcAAABeAAAAagAAAHcAAACDAAAAjAAAAI8AAACPAAAAjwAAAIwAAACCAAAAbQAAAEQAAAAWAAAAAQAA - AAC7PQ7/0kwn/91SM//vXUb//GRT//1pV//9cVz//XRe/+9qTv/Ti1f/zVsw//1nVf/5Y1D/5lc8/7c+ - FPtCIwHXADcAzwRPBN0IXwjqFHQU9SKRIv8fjx//H48f/x2OHf8Wihb/C24L9wNVA+kAKQDHAAAAgQAA - ADMAAAAGAAAAAMNDF//bUTD/711G//1mVf/9clz//Xdg//19ZP/9g2j/yFos//rir//ThlP/821T//1r - WP/8ZFP/7FtC/5pYGf9As0D/T8FP/y+SLP8kjiT/UsJS/1LCUv9Kvkr/QLlA/zu3O/8try3/Iakh/wqF - Cv8AFACmAAAAQwAAAAoAAAAAuT0O4uhYP//8ZFP//XJc//15Yf/9hWr//Yxu/9djOv/rt4T//+Ow//DE - kf/gZkL//Xdg//1qV//5Y1D/p2Im/1bEVv9Zw1n/cKlf/4Czbf9Ns03/ZMtk/1zHXP9Tw1P/RbxF/zy3 - PP8try3/Gpka/wAlAK8AAAA9AAAABwAAAACsNgOD5Vc7//1rWP/9d2D//YZq//6Scv/rgFn/2IdU///Z - pv//2ab//9qn/9JaMf/9g2j//XVe//1mVf+wZy//Z81n/0SoRP+/2az////l/0eYQv9003T/as5q/2LK - Yv9WxFb/RbxF/zm2Of8akhr/ACEAlAAAACgAAAACAAAAAAAAAAC7Pg/R+G9X//19ZP/9i27/+ZJv/8li - MP//zpv//8+c///PnP//0J3/13ZH//2JbP/9e2P/82ZO/5F5MP921Hb/Ppo9////8v////L/z+LF/ziY - OP9713v/btBu/2LKYv9RwVH/Prk+/w9zD/IAAABPAAAAEQAAAAAAAAAAAAAAAKY0AxG+RRjT73ZW//mM - a//NWy7/6Zp6/7+Kg/+/jIT/7q2K//+/kf/XcUP//Y5w//h7X/+6TBr/espv/4HZgf9kq2P////8//// - ////////gLOA/2fAZ/961nr/ac1p/1vGW/8unS7/ADcAlQAAACIAAAAEAAAAAAAAAAAAAAACAAAAEC4O - AT6JKwK4tEUe/0whT/8BBGr/BA1z/wMLcf8RDGn/f0xu/9JgNP/SXjP/hWAa/23EYv961nr/jN+M/3Cm - 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 - 5/+j0Or/lMjn/3694v9XqNb/G3mr9QA0Tl4AAAASAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAZJWDJHyp01yhxP9PmsH/M4i18gplkq4AOlg4AAAACgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////////////////wAH//4AAP/+AAAABgAAAAIAAAACAAAAAgAAAAIAA - AADAAAABwAAAAYAAAAMAAAAHAAAABwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAOAAAADgAAAA8AA - AAPgAYAD8AfAB///4A////////////////8oAAAAEAAAACAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAQAAAAkAAAATAAAAGAAAABgAAAAXAAAAEwAAAAsAAAADAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAsAAAAvAAAAUwAAAF8AAABfAAAAXgAAAFYAAABFAAAALQAAABwAAAAbAAAAIQAA - ACMAAAAiAAAAHAAAAA9mIAI3ii0Mr3wrEMyDLxvTgy8b02YiCM09EwG6AAAAmQAAAIIAAABoAAAAZwAA - AHMAAAB3AAAAdgAAAGcAAAA9tz0Pxd1SM//5Y1D//XBb//NsUv/SbkH/+GVR/8xKKfstMgfXElcS2yF5 - IeothC3rIX4h7BFrEecDMAPAAAAAZ7c9D6P5Y1D//Xpi//6Mbv/chVb/9c2b/+9wUv/9alf/koc8/1Ov - T/9nrlz/Ycph/1XDVf84tTj/FnoW6QAAAGahMgMj4V0/8f2Ia//hfVH/+seU///ToP/ld1D/+HRb/5Gc - UP+GwoD/7/Xg/1WvVf9z0nP/UsJS/xh1GNkAAAA9AAAADVYbAWKhTELvQiNa/0M2eP9gSHf/u1s4+5N6 - Nf+C2oL/pMaX///17P+6z6j/Y8Fj/0GjQfkAKQB3AAAAFwAAAEkEBATtAwYN/w8rcf8UOqD/EDGX/wIP - XO4AJQCvQJBAy0OIjv8Qdrn/IH27/xpxW/sAGwC0AAAAVwAAABMKCgrKGhoa/xIvaP8aTbP/HVe9/xtP - tf8NMpP/AAggrQU9XpQtk/L/M5n//zOZ//8rke//BCxEzAAAAHkAAAAlFRUV/ygoKP8YQoH/JnPZ/yZz - 2f8mc9n/G1y9/wAPLLMdc7DQP6X//0Cm//9Apv//PqT//x97vvcAAACRAAAANyAgIPE1NTX/JUVr/zCQ - 9v80mv//M5b6/yFz0v8AFjGtK4bG1kyy//9Ns///TbP//0mv//8xl+b/AAoQnQAAAD0UFBSiSkpK/0JC - Qv82RmX/G0WQ/yJixv8VR33/ABgxhjKQzc5MsvL/SrDs/1e9//9Qtv//QqXq/wAnO6YAAAAwAAAAES4u - LvBpaWn/jY2N/6SkpP9PT0//ER0m1wAAAC8LbJ2XKYe5/1Kk0v9hqNP/UZ/Q/xh1pP8AAABaAAAAGQAA - AAAAAAAhLCwsslxcXP9LS0vkISEhrgAAACcAAAAIAGCQIimDs/CLxOX/oc/q/1ekz/8NXomtAAAAIAAA - AAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY5QhLoCqhEyRtYkAVoFfAAAADQAA - AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAB/AAAAABf/AAAw/wAARv8AAFX/AABc/wAAYP8AAGT/AABo/wAALP8AAK//AABT/wAA - U/+AAFj//4FT////Qv8= - - \ No newline at end of file diff --git a/SCrawler/Editors/UserCreatorForm.vb b/SCrawler/Editors/UserCreatorForm.vb index 4a418e0..cb99b3c 100644 --- a/SCrawler/Editors/UserCreatorForm.vb +++ b/SCrawler/Editors/UserCreatorForm.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -440,7 +440,7 @@ CloseForm: If Added > 0 Then MyDef.ChangesDetected = False Return Added > 0 And Not BannedUsers.ListExists And NonIdentified.Count = 0 Else - MsgBoxE("No one user can not recognized", MsgBoxStyle.Exclamation) + MsgBoxE("No user can be recognized", MsgBoxStyle.Exclamation) End If Else MsgBoxE("[Users list] is empty", MsgBoxStyle.Critical) diff --git a/SCrawler/FDatePickerForm.Designer.vb b/SCrawler/FDatePickerForm.Designer.vb deleted file mode 100644 index 1e94946..0000000 --- a/SCrawler/FDatePickerForm.Designer.vb +++ /dev/null @@ -1,126 +0,0 @@ -' Copyright (C) 2022 Andy -' This program is free software: you can redistribute it and/or modify -' it under the terms of the GNU General Public License as published by -' the Free Software Foundation, either version 3 of the License, or -' (at your option) any later version. -' -' This program is distributed in the hope that it will be useful, -' but WITHOUT ANY WARRANTY - -Partial Friend Class FDatePickerForm : Inherits System.Windows.Forms.Form - - Protected Overrides Sub Dispose(ByVal disposing As Boolean) - Try - If disposing AndAlso components IsNot Nothing Then - components.Dispose() - End If - Finally - MyBase.Dispose(disposing) - End Try - End Sub - Private components As System.ComponentModel.IContainer - - Private Sub InitializeComponent() - Dim CONTAINER_MAIN As System.Windows.Forms.ToolStripContainer - Dim TP_MAIN As System.Windows.Forms.TableLayoutPanel - Me.DT_FROM = New PersonalUtilities.Forms.Controls.TextBoxExtended() - Me.DT_TO = New PersonalUtilities.Forms.Controls.TextBoxExtended() - CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer() - TP_MAIN = New System.Windows.Forms.TableLayoutPanel() - CONTAINER_MAIN.ContentPanel.SuspendLayout() - CONTAINER_MAIN.SuspendLayout() - TP_MAIN.SuspendLayout() - CType(Me.DT_FROM, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.DT_TO, System.ComponentModel.ISupportInitialize).BeginInit() - Me.SuspendLayout() - ' - 'CONTAINER_MAIN - ' - ' - 'CONTAINER_MAIN.ContentPanel - ' - CONTAINER_MAIN.ContentPanel.Controls.Add(TP_MAIN) - CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(395, 28) - CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill - CONTAINER_MAIN.LeftToolStripPanelVisible = False - CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0) - CONTAINER_MAIN.Name = "CONTAINER_MAIN" - CONTAINER_MAIN.RightToolStripPanelVisible = False - CONTAINER_MAIN.Size = New System.Drawing.Size(395, 53) - CONTAINER_MAIN.TabIndex = 0 - CONTAINER_MAIN.TopToolStripPanelVisible = False - ' - 'TP_MAIN - ' - TP_MAIN.ColumnCount = 2 - TP_MAIN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) - TP_MAIN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) - TP_MAIN.Controls.Add(Me.DT_FROM, 0, 0) - TP_MAIN.Controls.Add(Me.DT_TO, 1, 0) - TP_MAIN.Dock = System.Windows.Forms.DockStyle.Fill - TP_MAIN.Location = New System.Drawing.Point(0, 0) - TP_MAIN.Name = "TP_MAIN" - TP_MAIN.RowCount = 1 - TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 53.0!)) - TP_MAIN.Size = New System.Drawing.Size(395, 28) - TP_MAIN.TabIndex = 1 - ' - 'DT_FROM - ' - Me.DT_FROM.CaptionMode = PersonalUtilities.Forms.Controls.Base.ICaptionControl.Modes.CheckBox - Me.DT_FROM.CaptionText = "From" - Me.DT_FROM.CaptionWidth = 50.0R - Me.DT_FROM.ControlMode = PersonalUtilities.Forms.Controls.TextBoxExtended.ControlModes.DateTimePicker - Me.DT_FROM.Dock = System.Windows.Forms.DockStyle.Fill - Me.DT_FROM.Location = New System.Drawing.Point(3, 3) - Me.DT_FROM.Name = "DT_FROM" - Me.DT_FROM.Size = New System.Drawing.Size(191, 22) - Me.DT_FROM.TabIndex = 0 - Me.DT_FROM.Text = "17.09.2022 2:13:36" - Me.DT_FROM.TextBoxWidthMinimal = 50 - ' - 'DT_TO - ' - Me.DT_TO.CaptionMode = PersonalUtilities.Forms.Controls.Base.ICaptionControl.Modes.CheckBox - Me.DT_TO.CaptionText = "To" - Me.DT_TO.CaptionWidth = 50.0R - Me.DT_TO.ControlMode = PersonalUtilities.Forms.Controls.TextBoxExtended.ControlModes.DateTimePicker - Me.DT_TO.Dock = System.Windows.Forms.DockStyle.Fill - Me.DT_TO.Location = New System.Drawing.Point(200, 3) - Me.DT_TO.Name = "DT_TO" - Me.DT_TO.Size = New System.Drawing.Size(192, 22) - Me.DT_TO.TabIndex = 1 - Me.DT_TO.Text = "17.09.2022 2:13:40" - Me.DT_TO.TextBoxWidthMinimal = 50 - ' - 'FDatePickerForm - ' - Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.ClientSize = New System.Drawing.Size(395, 53) - Me.Controls.Add(CONTAINER_MAIN) - Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle - Me.KeyPreview = True - Me.MaximizeBox = False - Me.MaximumSize = New System.Drawing.Size(411, 92) - Me.MinimizeBox = False - Me.MinimumSize = New System.Drawing.Size(411, 92) - Me.Name = "FDatePickerForm" - Me.ShowIcon = False - Me.ShowInTaskbar = False - Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide - Me.Text = "Date limit" - CONTAINER_MAIN.ContentPanel.ResumeLayout(False) - CONTAINER_MAIN.ResumeLayout(False) - CONTAINER_MAIN.PerformLayout() - TP_MAIN.ResumeLayout(False) - CType(Me.DT_FROM, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.DT_TO, System.ComponentModel.ISupportInitialize).EndInit() - Me.ResumeLayout(False) - - End Sub - - Private WithEvents DT_FROM As PersonalUtilities.Forms.Controls.TextBoxExtended - Private WithEvents DT_TO As PersonalUtilities.Forms.Controls.TextBoxExtended -End Class \ No newline at end of file diff --git a/SCrawler/FDatePickerForm.vb b/SCrawler/FDatePickerForm.vb deleted file mode 100644 index cd896df..0000000 --- a/SCrawler/FDatePickerForm.vb +++ /dev/null @@ -1,39 +0,0 @@ -' Copyright (C) 2022 Andy -' This program is free software: you can redistribute it and/or modify -' it under the terms of the GNU General Public License as published by -' the Free Software Foundation, either version 3 of the License, or -' (at your option) any later version. -' -' This program is distributed in the hope that it will be useful, -' but WITHOUT ANY WARRANTY -Imports PersonalUtilities.Forms -Friend Class FDatePickerForm - Private ReadOnly MyDefs As DefaultFormOptions - Friend ReadOnly Property DateFrom As Date? - Get - If DT_FROM.Checked Then Return CDate(DT_FROM.Value).Date Else Return Nothing - End Get - End Property - Friend ReadOnly Property DateTo As Date? - Get - If DT_TO.Checked Then Return CDate(DT_TO.Value).Date Else Return Nothing - End Get - End Property - Friend Sub New(ByVal DateFrom As Date?, ByVal DateTo As Date?) - InitializeComponent() - MyDefs = New DefaultFormOptions(Me, Settings.Design) - If DateFrom.HasValue Then DT_FROM.Value = DateFrom.Value - If DateTo.HasValue Then DT_TO.Value = DateTo.Value - DT_FROM.Checked = DateFrom.HasValue - DT_TO.Checked = DateTo.HasValue - End Sub - Private Sub FDatePickerForm_Load(sender As Object, e As EventArgs) Handles Me.Load - With MyDefs - .MyViewInitialize(True) - .AddOkCancelToolbar(True) - .DelegateClosingChecker = False - .EndLoaderOperations() - MyDefs.MyOkCancel.EnableOK = True - End With - End Sub -End Class \ No newline at end of file diff --git a/SCrawler/GlobalSuppressions.vb b/SCrawler/GlobalSuppressions.vb new file mode 100644 index 0000000..03e7648 --- /dev/null +++ b/SCrawler/GlobalSuppressions.vb @@ -0,0 +1,8 @@ +' This file is used by Code Analysis to maintain SuppressMessage +' attributes that are applied to this project. +' Project-level suppressions either have no target or are given +' a specific target and scoped to a namespace, type, member, etc. +Imports System.Diagnostics.CodeAnalysis + + + \ No newline at end of file diff --git a/SCrawler/MainFrame.Designer.vb b/SCrawler/MainFrame.Designer.vb index 5ecba73..121bb95 100644 --- a/SCrawler/MainFrame.Designer.vb +++ b/SCrawler/MainFrame.Designer.vb @@ -1,4 +1,12 @@ - +' Copyright (C) 2023 Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY + Partial Public Class MainFrame : Inherits System.Windows.Forms.Form Protected Overrides Sub Dispose(ByVal disposing As Boolean) @@ -31,6 +39,10 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form Dim MENU_DOWN_ALL_SEP_1 As System.Windows.Forms.ToolStripSeparator Dim MENU_DOWN_ALL_SEP_2 As System.Windows.Forms.ToolStripSeparator Dim MENU_DOWN_ALL_SEP_3 As System.Windows.Forms.ToolStripSeparator + Dim TRAY_SEP_2 As System.Windows.Forms.ToolStripSeparator + Dim MENU_DOWN_ALL_SEP_4 As System.Windows.Forms.ToolStripSeparator + Dim MENU_DOWN_ALL_SEP_5 As System.Windows.Forms.ToolStripSeparator + Dim MENU_DOWN_ALL_SEP_6 As System.Windows.Forms.ToolStripSeparator Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(MainFrame)) Me.MENU_SETTINGS = New System.Windows.Forms.ToolStripDropDownButton() Me.BTT_SETTINGS = New System.Windows.Forms.ToolStripMenuItem() @@ -43,16 +55,17 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form Me.BTT_FEED = New System.Windows.Forms.ToolStripButton() Me.BTT_CHANNELS = New System.Windows.Forms.ToolStripButton() Me.BTT_DOWN_SAVED = New System.Windows.Forms.ToolStripButton() - Me.BTT_DOWN_SELECTED = New System.Windows.Forms.ToolStripButton() Me.MENU_DOWN_ALL = New System.Windows.Forms.ToolStripDropDownButton() - Me.BTT_DOWN_ALL = New System.Windows.Forms.ToolStripMenuItem() - Me.BTT_DOWN_SITE = New System.Windows.Forms.ToolStripMenuItem() - Me.BTT_DOWN_ALL_FULL = New System.Windows.Forms.ToolStripMenuItem() - Me.BTT_DOWN_SITE_FULL = New System.Windows.Forms.ToolStripMenuItem() + Me.BTT_DOWN_SELECTED = New SCrawler.ToolStripKeyMenuItem() + Me.BTT_DOWN_ALL = New SCrawler.ToolStripKeyMenuItem() + Me.BTT_DOWN_SITE = New SCrawler.ToolStripKeyMenuItem() + Me.BTT_DOWN_ALL_FULL = New SCrawler.ToolStripKeyMenuItem() + Me.BTT_DOWN_SITE_FULL = New SCrawler.ToolStripKeyMenuItem() + Me.BTT_DOWN_VIDEO = New System.Windows.Forms.ToolStripMenuItem() Me.BTT_ADD_NEW_GROUP = New System.Windows.Forms.ToolStripMenuItem() + Me.BTT_SILENT_MODE = New System.Windows.Forms.ToolStripMenuItem() Me.BTT_DOWN_AUTOMATION = New System.Windows.Forms.ToolStripMenuItem() Me.BTT_DOWN_AUTOMATION_PAUSE = New System.Windows.Forms.ToolStripMenuItem() - Me.BTT_DOWN_VIDEO = New System.Windows.Forms.ToolStripButton() Me.BTT_DOWN_STOP = New System.Windows.Forms.ToolStripButton() Me.MENU_VIEW = New System.Windows.Forms.ToolStripDropDownButton() Me.BTT_VIEW_LARGE = New System.Windows.Forms.ToolStripMenuItem() @@ -85,9 +98,9 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form Me.LIST_PROFILES = New System.Windows.Forms.ListView() Me.COL_DEF = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) Me.USER_CONTEXT = New System.Windows.Forms.ContextMenuStrip(Me.components) - Me.BTT_CONTEXT_DOWN = New System.Windows.Forms.ToolStripMenuItem() - Me.BTT_CONTEXT_DOWN_LIMITED = New System.Windows.Forms.ToolStripMenuItem() - Me.BTT_CONTEXT_DOWN_DATE_LIMIT = New System.Windows.Forms.ToolStripMenuItem() + Me.BTT_CONTEXT_DOWN = New SCrawler.ToolStripKeyMenuItem() + Me.BTT_CONTEXT_DOWN_LIMITED = New SCrawler.ToolStripKeyMenuItem() + Me.BTT_CONTEXT_DOWN_DATE_LIMIT = New SCrawler.ToolStripKeyMenuItem() Me.BTT_CONTEXT_EDIT = New System.Windows.Forms.ToolStripMenuItem() Me.BTT_CONTEXT_DELETE = New System.Windows.Forms.ToolStripMenuItem() Me.BTT_CONTEXT_COPY_TO_FOLDER = New System.Windows.Forms.ToolStripMenuItem() @@ -105,6 +118,9 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form Me.BTT_CONTEXT_INFO = New System.Windows.Forms.ToolStripMenuItem() Me.TrayIcon = New System.Windows.Forms.NotifyIcon(Me.components) Me.TRAY_CONTEXT = New System.Windows.Forms.ContextMenuStrip(Me.components) + Me.BTT_TRAY_PAUSE_AUTOMATION = New System.Windows.Forms.ToolStripMenuItem() + Me.BTT_TRAY_SILENT_MODE = New System.Windows.Forms.ToolStripMenuItem() + Me.BTT_TRAY_FEED_SHOW = New System.Windows.Forms.ToolStripMenuItem() Me.BTT_TRAY_SHOW_HIDE = New System.Windows.Forms.ToolStripMenuItem() Me.BTT_TRAY_CLOSE = New System.Windows.Forms.ToolStripMenuItem() Me.BTT_TRAY_CLOSE_NO_SCRIPT = New System.Windows.Forms.ToolStripMenuItem() @@ -125,6 +141,10 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form MENU_DOWN_ALL_SEP_1 = New System.Windows.Forms.ToolStripSeparator() MENU_DOWN_ALL_SEP_2 = New System.Windows.Forms.ToolStripSeparator() MENU_DOWN_ALL_SEP_3 = New System.Windows.Forms.ToolStripSeparator() + TRAY_SEP_2 = New System.Windows.Forms.ToolStripSeparator() + MENU_DOWN_ALL_SEP_4 = New System.Windows.Forms.ToolStripSeparator() + MENU_DOWN_ALL_SEP_5 = New System.Windows.Forms.ToolStripSeparator() + MENU_DOWN_ALL_SEP_6 = New System.Windows.Forms.ToolStripSeparator() Me.Toolbar_TOP.SuspendLayout() Me.Toolbar_BOTTOM.SuspendLayout() Me.USER_CONTEXT.SuspendLayout() @@ -199,7 +219,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form 'TRAY_SEP_1 ' TRAY_SEP_1.Name = "TRAY_SEP_1" - TRAY_SEP_1.Size = New System.Drawing.Size(157, 6) + TRAY_SEP_1.Size = New System.Drawing.Size(167, 6) ' 'MENU_DOWN_ALL_SEP_1 ' @@ -216,6 +236,26 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form MENU_DOWN_ALL_SEP_3.Name = "MENU_DOWN_ALL_SEP_3" MENU_DOWN_ALL_SEP_3.Size = New System.Drawing.Size(228, 6) ' + 'TRAY_SEP_2 + ' + TRAY_SEP_2.Name = "TRAY_SEP_2" + TRAY_SEP_2.Size = New System.Drawing.Size(167, 6) + ' + 'MENU_DOWN_ALL_SEP_4 + ' + MENU_DOWN_ALL_SEP_4.Name = "MENU_DOWN_ALL_SEP_4" + MENU_DOWN_ALL_SEP_4.Size = New System.Drawing.Size(228, 6) + ' + 'MENU_DOWN_ALL_SEP_5 + ' + MENU_DOWN_ALL_SEP_5.Name = "MENU_DOWN_ALL_SEP_5" + MENU_DOWN_ALL_SEP_5.Size = New System.Drawing.Size(228, 6) + ' + 'MENU_DOWN_ALL_SEP_6 + ' + MENU_DOWN_ALL_SEP_6.Name = "MENU_DOWN_ALL_SEP_6" + MENU_DOWN_ALL_SEP_6.Size = New System.Drawing.Size(228, 6) + ' 'MENU_SETTINGS ' Me.MENU_SETTINGS.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image @@ -236,7 +276,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form 'Toolbar_TOP ' Me.Toolbar_TOP.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden - Me.Toolbar_TOP.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.MENU_SETTINGS, SEP_1, Me.BTT_ADD_USER, Me.BTT_EDIT_USER, Me.BTT_DELETE_USER, Me.BTT_REFRESH, Me.BTT_SHOW_INFO, Me.BTT_FEED, Me.BTT_CHANNELS, Me.BTT_DOWN_SAVED, SEP_2, Me.BTT_DOWN_SELECTED, Me.MENU_DOWN_ALL, Me.BTT_DOWN_VIDEO, Me.BTT_DOWN_STOP, SEP_3, Me.MENU_VIEW, SEP_4, Me.BTT_LOG, Me.BTT_VERSION_INFO, Me.BTT_DONATE}) + Me.Toolbar_TOP.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.MENU_SETTINGS, SEP_1, Me.BTT_ADD_USER, Me.BTT_EDIT_USER, Me.BTT_DELETE_USER, Me.BTT_REFRESH, Me.BTT_SHOW_INFO, Me.BTT_FEED, Me.BTT_CHANNELS, Me.BTT_DOWN_SAVED, SEP_2, Me.MENU_DOWN_ALL, Me.BTT_DOWN_STOP, SEP_3, Me.MENU_VIEW, SEP_4, Me.BTT_LOG, Me.BTT_VERSION_INFO, Me.BTT_DONATE}) Me.Toolbar_TOP.Location = New System.Drawing.Point(0, 0) Me.Toolbar_TOP.Name = "Toolbar_TOP" Me.Toolbar_TOP.Size = New System.Drawing.Size(934, 25) @@ -244,7 +284,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form ' 'BTT_ADD_USER ' - Me.BTT_ADD_USER.Image = Global.SCrawler.My.Resources.Resources.PlusPIC + Me.BTT_ADD_USER.Image = Global.SCrawler.My.Resources.Resources.PlusPic_24 Me.BTT_ADD_USER.ImageTransparentColor = System.Drawing.Color.Magenta Me.BTT_ADD_USER.Name = "BTT_ADD_USER" Me.BTT_ADD_USER.Size = New System.Drawing.Size(49, 22) @@ -253,7 +293,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form ' 'BTT_EDIT_USER ' - Me.BTT_EDIT_USER.Image = Global.SCrawler.My.Resources.Resources.PencilPic_01_16 + Me.BTT_EDIT_USER.Image = Global.SCrawler.My.Resources.Resources.PencilPic_16 Me.BTT_EDIT_USER.ImageTransparentColor = System.Drawing.Color.Magenta Me.BTT_EDIT_USER.Name = "BTT_EDIT_USER" Me.BTT_EDIT_USER.Size = New System.Drawing.Size(47, 22) @@ -262,7 +302,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form ' 'BTT_DELETE_USER ' - Me.BTT_DELETE_USER.Image = Global.SCrawler.My.Resources.Resources.Delete + Me.BTT_DELETE_USER.Image = Global.SCrawler.My.Resources.Resources.DeletePic_24 Me.BTT_DELETE_USER.ImageTransparentColor = System.Drawing.Color.Magenta Me.BTT_DELETE_USER.Name = "BTT_DELETE_USER" Me.BTT_DELETE_USER.Size = New System.Drawing.Size(60, 22) @@ -271,7 +311,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form ' 'BTT_REFRESH ' - Me.BTT_REFRESH.Image = Global.SCrawler.My.Resources.Resources.Refresh + Me.BTT_REFRESH.Image = Global.SCrawler.My.Resources.Resources.RefreshPic_24 Me.BTT_REFRESH.ImageTransparentColor = System.Drawing.Color.Magenta Me.BTT_REFRESH.Name = "BTT_REFRESH" Me.BTT_REFRESH.Size = New System.Drawing.Size(66, 22) @@ -290,7 +330,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form ' 'BTT_FEED ' - Me.BTT_FEED.Image = Global.SCrawler.My.Resources.Resources.RSSPic + Me.BTT_FEED.Image = Global.SCrawler.My.Resources.Resources.RSSPic_512 Me.BTT_FEED.ImageTransparentColor = System.Drawing.Color.Magenta Me.BTT_FEED.Name = "BTT_FEED" Me.BTT_FEED.Size = New System.Drawing.Size(52, 22) @@ -300,7 +340,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form 'BTT_CHANNELS ' Me.BTT_CHANNELS.AutoToolTip = False - Me.BTT_CHANNELS.Image = Global.SCrawler.My.Resources.Resources.RedditPic512 + Me.BTT_CHANNELS.Image = Global.SCrawler.My.Resources.SiteResources.RedditPic_512 Me.BTT_CHANNELS.ImageTransparentColor = System.Drawing.Color.Magenta Me.BTT_CHANNELS.Name = "BTT_CHANNELS" Me.BTT_CHANNELS.Size = New System.Drawing.Size(76, 22) @@ -315,38 +355,41 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form Me.BTT_DOWN_SAVED.Size = New System.Drawing.Size(23, 22) Me.BTT_DOWN_SAVED.ToolTipText = "Download saved posts" ' - 'BTT_DOWN_SELECTED - ' - Me.BTT_DOWN_SELECTED.Image = Global.SCrawler.My.Resources.Resources.StartPic_01_Green_16 - Me.BTT_DOWN_SELECTED.ImageTransparentColor = System.Drawing.Color.Magenta - Me.BTT_DOWN_SELECTED.Name = "BTT_DOWN_SELECTED" - Me.BTT_DOWN_SELECTED.Size = New System.Drawing.Size(150, 22) - Me.BTT_DOWN_SELECTED.Text = "Download selected (F5)" - Me.BTT_DOWN_SELECTED.ToolTipText = "Download selected user" - ' 'MENU_DOWN_ALL ' Me.MENU_DOWN_ALL.AutoToolTip = False - Me.MENU_DOWN_ALL.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BTT_DOWN_ALL, Me.BTT_DOWN_SITE, MENU_DOWN_ALL_SEP_1, Me.BTT_DOWN_ALL_FULL, Me.BTT_DOWN_SITE_FULL, MENU_DOWN_ALL_SEP_2, Me.BTT_ADD_NEW_GROUP, MENU_DOWN_ALL_SEP_3, Me.BTT_DOWN_AUTOMATION, Me.BTT_DOWN_AUTOMATION_PAUSE}) - Me.MENU_DOWN_ALL.Image = Global.SCrawler.My.Resources.Resources.StartPic_01_Green_16 + Me.MENU_DOWN_ALL.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BTT_DOWN_SELECTED, MENU_DOWN_ALL_SEP_1, Me.BTT_DOWN_ALL, Me.BTT_DOWN_SITE, MENU_DOWN_ALL_SEP_2, Me.BTT_DOWN_ALL_FULL, Me.BTT_DOWN_SITE_FULL, MENU_DOWN_ALL_SEP_3, Me.BTT_DOWN_VIDEO, MENU_DOWN_ALL_SEP_4, Me.BTT_ADD_NEW_GROUP, MENU_DOWN_ALL_SEP_5, Me.BTT_SILENT_MODE, MENU_DOWN_ALL_SEP_6, Me.BTT_DOWN_AUTOMATION, Me.BTT_DOWN_AUTOMATION_PAUSE}) + Me.MENU_DOWN_ALL.Image = Global.SCrawler.My.Resources.Resources.StartPic_Green_16 Me.MENU_DOWN_ALL.ImageTransparentColor = System.Drawing.Color.Magenta Me.MENU_DOWN_ALL.Name = "MENU_DOWN_ALL" - Me.MENU_DOWN_ALL.Size = New System.Drawing.Size(128, 22) - Me.MENU_DOWN_ALL.Text = "Download all (F6)" + Me.MENU_DOWN_ALL.Size = New System.Drawing.Size(90, 22) + Me.MENU_DOWN_ALL.Text = "Download" + ' + 'BTT_DOWN_SELECTED + ' + Me.BTT_DOWN_SELECTED.AutoToolTip = True + Me.BTT_DOWN_SELECTED.Image = Global.SCrawler.My.Resources.Resources.StartPic_Green_16 + Me.BTT_DOWN_SELECTED.ImageTransparentColor = System.Drawing.Color.Magenta + Me.BTT_DOWN_SELECTED.Name = "BTT_DOWN_SELECTED" + Me.BTT_DOWN_SELECTED.Size = New System.Drawing.Size(231, 22) + Me.BTT_DOWN_SELECTED.Text = "Download selected (F5)" + Me.BTT_DOWN_SELECTED.ToolTipText = "Download selected user." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "F5: download, include in the feed." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Ctrl+F5: download, e" & + "xclude from feed." ' 'BTT_DOWN_ALL ' Me.BTT_DOWN_ALL.AutoToolTip = True - Me.BTT_DOWN_ALL.Image = Global.SCrawler.My.Resources.Resources.StartPic_01_Green_16 + Me.BTT_DOWN_ALL.Image = Global.SCrawler.My.Resources.Resources.StartPic_Green_16 Me.BTT_DOWN_ALL.Name = "BTT_DOWN_ALL" Me.BTT_DOWN_ALL.Size = New System.Drawing.Size(231, 22) Me.BTT_DOWN_ALL.Text = "Download all (F6)" - Me.BTT_DOWN_ALL.ToolTipText = "Download all users marked 'Ready for download' from all sites." + Me.BTT_DOWN_ALL.ToolTipText = "Download all users marked 'Ready for download' from all sites." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "F5: download, inc" & + "lude in the feed." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Ctrl+F5: download, exclude from feed." ' 'BTT_DOWN_SITE ' Me.BTT_DOWN_SITE.AutoToolTip = True - Me.BTT_DOWN_SITE.Image = Global.SCrawler.My.Resources.Resources.StartPic_01_Green_16 + Me.BTT_DOWN_SITE.Image = Global.SCrawler.My.Resources.Resources.StartPic_Green_16 Me.BTT_DOWN_SITE.Name = "BTT_DOWN_SITE" Me.BTT_DOWN_SITE.Size = New System.Drawing.Size(231, 22) Me.BTT_DOWN_SITE.Text = "Download all site users" @@ -355,7 +398,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form 'BTT_DOWN_ALL_FULL ' Me.BTT_DOWN_ALL_FULL.AutoToolTip = True - Me.BTT_DOWN_ALL_FULL.Image = Global.SCrawler.My.Resources.Resources.StartPic_01_Green_16 + Me.BTT_DOWN_ALL_FULL.Image = Global.SCrawler.My.Resources.Resources.StartPic_Green_16 Me.BTT_DOWN_ALL_FULL.Name = "BTT_DOWN_ALL_FULL" Me.BTT_DOWN_ALL_FULL.Size = New System.Drawing.Size(231, 22) Me.BTT_DOWN_ALL_FULL.Text = "Download all [FULL]" @@ -365,23 +408,43 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form 'BTT_DOWN_SITE_FULL ' Me.BTT_DOWN_SITE_FULL.AutoToolTip = True - Me.BTT_DOWN_SITE_FULL.Image = Global.SCrawler.My.Resources.Resources.StartPic_01_Green_16 + Me.BTT_DOWN_SITE_FULL.Image = Global.SCrawler.My.Resources.Resources.StartPic_Green_16 Me.BTT_DOWN_SITE_FULL.Name = "BTT_DOWN_SITE_FULL" Me.BTT_DOWN_SITE_FULL.Size = New System.Drawing.Size(231, 22) Me.BTT_DOWN_SITE_FULL.Text = "Download all site users [FULL]" Me.BTT_DOWN_SITE_FULL.ToolTipText = "Download all users from specific sites. The 'Ready for download' option will be i" & "gnored." + ' + 'BTT_DOWN_VIDEO + ' + Me.BTT_DOWN_VIDEO.AutoToolTip = True + Me.BTT_DOWN_VIDEO.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text + Me.BTT_DOWN_VIDEO.ImageTransparentColor = System.Drawing.Color.Magenta + Me.BTT_DOWN_VIDEO.Name = "BTT_DOWN_VIDEO" + Me.BTT_DOWN_VIDEO.Size = New System.Drawing.Size(231, 22) + Me.BTT_DOWN_VIDEO.Text = "Standalone downloader" + Me.BTT_DOWN_VIDEO.ToolTipText = "Download video by URL" ' 'BTT_ADD_NEW_GROUP ' - Me.BTT_ADD_NEW_GROUP.Image = Global.SCrawler.My.Resources.Resources.PlusPIC + Me.BTT_ADD_NEW_GROUP.Image = Global.SCrawler.My.Resources.Resources.PlusPic_24 Me.BTT_ADD_NEW_GROUP.Name = "BTT_ADD_NEW_GROUP" Me.BTT_ADD_NEW_GROUP.Size = New System.Drawing.Size(231, 22) Me.BTT_ADD_NEW_GROUP.Text = "Add a new download group" + ' + 'BTT_SILENT_MODE + ' + Me.BTT_SILENT_MODE.AutoToolTip = True + Me.BTT_SILENT_MODE.Image = Global.SCrawler.My.Resources.Resources.MessagePic_16 + Me.BTT_SILENT_MODE.Name = "BTT_SILENT_MODE" + Me.BTT_SILENT_MODE.Size = New System.Drawing.Size(231, 22) + Me.BTT_SILENT_MODE.Text = "Silent mode" + Me.BTT_SILENT_MODE.ToolTipText = "Turn off notifications temporarily." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "This setting is not stored in the settings f" & + "ile. It is valid until you turn it off or close the program." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) ' 'BTT_DOWN_AUTOMATION ' - Me.BTT_DOWN_AUTOMATION.Image = Global.SCrawler.My.Resources.Resources.ScriptPic32 + Me.BTT_DOWN_AUTOMATION.Image = Global.SCrawler.My.Resources.Resources.ScriptPic_32 Me.BTT_DOWN_AUTOMATION.Name = "BTT_DOWN_AUTOMATION" Me.BTT_DOWN_AUTOMATION.Size = New System.Drawing.Size(231, 22) Me.BTT_DOWN_AUTOMATION.Text = "Automation" @@ -393,21 +456,11 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form Me.BTT_DOWN_AUTOMATION_PAUSE.Size = New System.Drawing.Size(231, 22) Me.BTT_DOWN_AUTOMATION_PAUSE.Text = "Pause automation" ' - 'BTT_DOWN_VIDEO - ' - Me.BTT_DOWN_VIDEO.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text - Me.BTT_DOWN_VIDEO.Image = CType(resources.GetObject("BTT_DOWN_VIDEO.Image"), System.Drawing.Image) - Me.BTT_DOWN_VIDEO.ImageTransparentColor = System.Drawing.Color.Magenta - Me.BTT_DOWN_VIDEO.Name = "BTT_DOWN_VIDEO" - Me.BTT_DOWN_VIDEO.Size = New System.Drawing.Size(120, 22) - Me.BTT_DOWN_VIDEO.Text = "Download video (F2)" - Me.BTT_DOWN_VIDEO.ToolTipText = "Download video by URL" - ' 'BTT_DOWN_STOP ' Me.BTT_DOWN_STOP.AutoToolTip = False Me.BTT_DOWN_STOP.Enabled = False - Me.BTT_DOWN_STOP.Image = Global.SCrawler.My.Resources.Resources.Delete + Me.BTT_DOWN_STOP.Image = Global.SCrawler.My.Resources.Resources.DeletePic_24 Me.BTT_DOWN_STOP.ImageTransparentColor = System.Drawing.Color.Magenta Me.BTT_DOWN_STOP.Name = "BTT_DOWN_STOP" Me.BTT_DOWN_STOP.Size = New System.Drawing.Size(51, 22) @@ -416,12 +469,11 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form 'MENU_VIEW ' Me.MENU_VIEW.AutoToolTip = False - Me.MENU_VIEW.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text Me.MENU_VIEW.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BTT_VIEW_LARGE, Me.BTT_VIEW_SMALL, Me.BTT_VIEW_LIST, Me.BTT_VIEW_DETAILS, MENU_VIEW_SEP_1, Me.BTT_SITE_ALL, Me.BTT_SITE_SPECIFIC, MENU_VIEW_SEP_2, Me.BTT_SHOW_ALL, Me.BTT_SHOW_REGULAR, Me.BTT_SHOW_TEMP, Me.BTT_SHOW_FAV, Me.BTT_SHOW_DELETED, Me.BTT_SHOW_SUSPENDED, Me.BTT_SHOW_LABELS, Me.BTT_SHOW_NO_LABELS, Me.BTT_SHOW_EXCLUDED_LABELS, Me.BTT_SHOW_EXCLUDED_LABELS_IGNORE, Me.BTT_SHOW_SHOW_GROUPS, MENU_VIEW_SEP_3, Me.BTT_SHOW_LIMIT_DATES_NOT, Me.BTT_SHOW_LIMIT_DATES_IN}) Me.MENU_VIEW.Image = CType(resources.GetObject("MENU_VIEW.Image"), System.Drawing.Image) Me.MENU_VIEW.ImageTransparentColor = System.Drawing.Color.Magenta Me.MENU_VIEW.Name = "MENU_VIEW" - Me.MENU_VIEW.Size = New System.Drawing.Size(45, 19) + Me.MENU_VIEW.Size = New System.Drawing.Size(61, 22) Me.MENU_VIEW.Text = "View" ' 'BTT_VIEW_LARGE @@ -548,11 +600,10 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form ' 'BTT_LOG ' - Me.BTT_LOG.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text Me.BTT_LOG.Image = CType(resources.GetObject("BTT_LOG.Image"), System.Drawing.Image) Me.BTT_LOG.ImageTransparentColor = System.Drawing.Color.Magenta Me.BTT_LOG.Name = "BTT_LOG" - Me.BTT_LOG.Size = New System.Drawing.Size(34, 19) + Me.BTT_LOG.Size = New System.Drawing.Size(50, 22) Me.BTT_LOG.Text = "LOG" Me.BTT_LOG.ToolTipText = "Show error log" ' @@ -563,7 +614,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form Me.BTT_VERSION_INFO.Image = Global.SCrawler.My.Resources.Resources.InfoPic_32 Me.BTT_VERSION_INFO.ImageTransparentColor = System.Drawing.Color.Magenta Me.BTT_VERSION_INFO.Name = "BTT_VERSION_INFO" - Me.BTT_VERSION_INFO.Size = New System.Drawing.Size(23, 20) + Me.BTT_VERSION_INFO.Size = New System.Drawing.Size(23, 22) Me.BTT_VERSION_INFO.Text = "Info" Me.BTT_VERSION_INFO.ToolTipText = "Show program information and check for new version" ' @@ -574,7 +625,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form Me.BTT_DONATE.Image = Global.SCrawler.My.Resources.Resources.HeartPic_32 Me.BTT_DONATE.ImageTransparentColor = System.Drawing.Color.Magenta Me.BTT_DONATE.Name = "BTT_DONATE" - Me.BTT_DONATE.Size = New System.Drawing.Size(23, 20) + Me.BTT_DONATE.Size = New System.Drawing.Size(23, 22) Me.BTT_DONATE.Text = "Donate" Me.BTT_DONATE.ToolTipText = "Support" ' @@ -633,19 +684,20 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form ' Me.USER_CONTEXT.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BTT_CONTEXT_DOWN, Me.BTT_CONTEXT_DOWN_LIMITED, Me.BTT_CONTEXT_DOWN_DATE_LIMIT, Me.BTT_CONTEXT_EDIT, Me.BTT_CONTEXT_DELETE, Me.BTT_CONTEXT_COPY_TO_FOLDER, CONTEXT_SEP_1, Me.BTT_CONTEXT_FAV, Me.BTT_CONTEXT_TEMP, Me.BTT_CONTEXT_READY, Me.BTT_CONTEXT_GROUPS, Me.BTT_CONTEXT_SCRIPT, Me.BTT_CONTEXT_ADD_TO_COL, Me.BTT_CONTEXT_COL_MERGE, Me.BTT_CONTEXT_CHANGE_FOLDER, CONTEXT_SEP_2, Me.BTT_CHANGE_IMAGE, CONTEXT_SEP_3, Me.BTT_CONTEXT_OPEN_PATH, CONTEXT_SEP_4, Me.BTT_CONTEXT_OPEN_SITE, CONTEXT_SEP_5, Me.BTT_CONTEXT_INFO}) Me.USER_CONTEXT.Name = "USER_CONTEXT" - Me.USER_CONTEXT.Size = New System.Drawing.Size(222, 452) + Me.USER_CONTEXT.Size = New System.Drawing.Size(222, 430) ' 'BTT_CONTEXT_DOWN ' - Me.BTT_CONTEXT_DOWN.Image = Global.SCrawler.My.Resources.Resources.StartPic_01_Green_16 + Me.BTT_CONTEXT_DOWN.Image = Global.SCrawler.My.Resources.Resources.StartPic_Green_16 Me.BTT_CONTEXT_DOWN.Name = "BTT_CONTEXT_DOWN" Me.BTT_CONTEXT_DOWN.Size = New System.Drawing.Size(221, 22) Me.BTT_CONTEXT_DOWN.Text = "Download data" + Me.BTT_CONTEXT_DOWN.ToolTipText = "" ' 'BTT_CONTEXT_DOWN_LIMITED ' Me.BTT_CONTEXT_DOWN_LIMITED.AutoToolTip = True - Me.BTT_CONTEXT_DOWN_LIMITED.Image = Global.SCrawler.My.Resources.Resources.StartPic_01_Green_16 + Me.BTT_CONTEXT_DOWN_LIMITED.Image = Global.SCrawler.My.Resources.Resources.StartPic_Green_16 Me.BTT_CONTEXT_DOWN_LIMITED.Name = "BTT_CONTEXT_DOWN_LIMITED" Me.BTT_CONTEXT_DOWN_LIMITED.Size = New System.Drawing.Size(221, 22) Me.BTT_CONTEXT_DOWN_LIMITED.Text = "Download data limited" @@ -653,28 +705,29 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form ' 'BTT_CONTEXT_DOWN_DATE_LIMIT ' - Me.BTT_CONTEXT_DOWN_DATE_LIMIT.Image = Global.SCrawler.My.Resources.Resources.StartPic_01_Green_16 + Me.BTT_CONTEXT_DOWN_DATE_LIMIT.Image = Global.SCrawler.My.Resources.Resources.StartPic_Green_16 Me.BTT_CONTEXT_DOWN_DATE_LIMIT.Name = "BTT_CONTEXT_DOWN_DATE_LIMIT" Me.BTT_CONTEXT_DOWN_DATE_LIMIT.Size = New System.Drawing.Size(221, 22) Me.BTT_CONTEXT_DOWN_DATE_LIMIT.Text = "Download data to the date" + Me.BTT_CONTEXT_DOWN_DATE_LIMIT.ToolTipText = "" ' 'BTT_CONTEXT_EDIT ' - Me.BTT_CONTEXT_EDIT.Image = Global.SCrawler.My.Resources.Resources.PencilPic_01_16 + Me.BTT_CONTEXT_EDIT.Image = Global.SCrawler.My.Resources.Resources.PencilPic_16 Me.BTT_CONTEXT_EDIT.Name = "BTT_CONTEXT_EDIT" Me.BTT_CONTEXT_EDIT.Size = New System.Drawing.Size(221, 22) Me.BTT_CONTEXT_EDIT.Text = "Edit user information" ' 'BTT_CONTEXT_DELETE ' - Me.BTT_CONTEXT_DELETE.Image = Global.SCrawler.My.Resources.Resources.Delete + Me.BTT_CONTEXT_DELETE.Image = Global.SCrawler.My.Resources.Resources.DeletePic_24 Me.BTT_CONTEXT_DELETE.Name = "BTT_CONTEXT_DELETE" Me.BTT_CONTEXT_DELETE.Size = New System.Drawing.Size(221, 22) Me.BTT_CONTEXT_DELETE.Text = "Delete user / collection" ' 'BTT_CONTEXT_COPY_TO_FOLDER ' - Me.BTT_CONTEXT_COPY_TO_FOLDER.Image = Global.SCrawler.My.Resources.Resources.PastePic32 + Me.BTT_CONTEXT_COPY_TO_FOLDER.Image = Global.SCrawler.My.Resources.Resources.PastePic_32 Me.BTT_CONTEXT_COPY_TO_FOLDER.Name = "BTT_CONTEXT_COPY_TO_FOLDER" Me.BTT_CONTEXT_COPY_TO_FOLDER.Size = New System.Drawing.Size(221, 22) Me.BTT_CONTEXT_COPY_TO_FOLDER.Text = "Copy data to another folder" @@ -688,7 +741,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form ' 'BTT_CONTEXT_TEMP ' - Me.BTT_CONTEXT_TEMP.Image = CType(resources.GetObject("BTT_CONTEXT_TEMP.Image"), System.Drawing.Image) + Me.BTT_CONTEXT_TEMP.Image = Global.SCrawler.My.Resources.Resources.PinPic_32 Me.BTT_CONTEXT_TEMP.Name = "BTT_CONTEXT_TEMP" Me.BTT_CONTEXT_TEMP.Size = New System.Drawing.Size(221, 22) Me.BTT_CONTEXT_TEMP.Text = "Change temporary" @@ -707,7 +760,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form ' 'BTT_CONTEXT_SCRIPT ' - Me.BTT_CONTEXT_SCRIPT.Image = Global.SCrawler.My.Resources.Resources.ScriptPic32 + Me.BTT_CONTEXT_SCRIPT.Image = Global.SCrawler.My.Resources.Resources.ScriptPic_32 Me.BTT_CONTEXT_SCRIPT.Name = "BTT_CONTEXT_SCRIPT" Me.BTT_CONTEXT_SCRIPT.Size = New System.Drawing.Size(221, 22) Me.BTT_CONTEXT_SCRIPT.Text = "Change script usage" @@ -742,14 +795,14 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form ' 'BTT_CONTEXT_OPEN_PATH ' - Me.BTT_CONTEXT_OPEN_PATH.Image = Global.SCrawler.My.Resources.Resources.Folder_32 + Me.BTT_CONTEXT_OPEN_PATH.Image = Global.SCrawler.My.Resources.Resources.FolderPic_32 Me.BTT_CONTEXT_OPEN_PATH.Name = "BTT_CONTEXT_OPEN_PATH" Me.BTT_CONTEXT_OPEN_PATH.Size = New System.Drawing.Size(221, 22) Me.BTT_CONTEXT_OPEN_PATH.Text = "Open contains folder" ' 'BTT_CONTEXT_OPEN_SITE ' - Me.BTT_CONTEXT_OPEN_SITE.Image = Global.SCrawler.My.Resources.Resources.GlobeBlue_32 + Me.BTT_CONTEXT_OPEN_SITE.Image = Global.SCrawler.My.Resources.Resources.GlobePic_32 Me.BTT_CONTEXT_OPEN_SITE.Name = "BTT_CONTEXT_OPEN_SITE" Me.BTT_CONTEXT_OPEN_SITE.Size = New System.Drawing.Size(221, 22) Me.BTT_CONTEXT_OPEN_SITE.Text = "Open site" @@ -766,28 +819,56 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form Me.TrayIcon.BalloonTipIcon = System.Windows.Forms.ToolTipIcon.Info Me.TrayIcon.BalloonTipTitle = "Social networks crawler" Me.TrayIcon.ContextMenuStrip = Me.TRAY_CONTEXT - Me.TrayIcon.Icon = CType(resources.GetObject("TrayIcon.Icon"), System.Drawing.Icon) - Me.TrayIcon.Text = "Social networks crawler" + Me.TrayIcon.Icon = Global.SCrawler.My.Resources.Resources.RainbowIcon_48 + Me.TrayIcon.Text = "Social networks crawler." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Ctrl+Click to show the feed." ' 'TRAY_CONTEXT ' - Me.TRAY_CONTEXT.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BTT_TRAY_SHOW_HIDE, TRAY_SEP_1, Me.BTT_TRAY_CLOSE, Me.BTT_TRAY_CLOSE_NO_SCRIPT}) + Me.TRAY_CONTEXT.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BTT_TRAY_PAUSE_AUTOMATION, Me.BTT_TRAY_SILENT_MODE, Me.BTT_TRAY_FEED_SHOW, TRAY_SEP_1, Me.BTT_TRAY_SHOW_HIDE, TRAY_SEP_2, Me.BTT_TRAY_CLOSE, Me.BTT_TRAY_CLOSE_NO_SCRIPT}) Me.TRAY_CONTEXT.Name = "TRAY_CONTEXT" - Me.TRAY_CONTEXT.Size = New System.Drawing.Size(161, 76) + Me.TRAY_CONTEXT.Size = New System.Drawing.Size(171, 148) + ' + 'BTT_TRAY_PAUSE_AUTOMATION + ' + Me.BTT_TRAY_PAUSE_AUTOMATION.Image = Global.SCrawler.My.Resources.Resources.Pause_Blue_16 + Me.BTT_TRAY_PAUSE_AUTOMATION.Name = "BTT_TRAY_PAUSE_AUTOMATION" + Me.BTT_TRAY_PAUSE_AUTOMATION.Size = New System.Drawing.Size(170, 22) + Me.BTT_TRAY_PAUSE_AUTOMATION.Text = "Pause automation" + ' + 'BTT_TRAY_SILENT_MODE + ' + Me.BTT_TRAY_SILENT_MODE.AutoToolTip = True + Me.BTT_TRAY_SILENT_MODE.Image = Global.SCrawler.My.Resources.Resources.MessagePic_16 + Me.BTT_TRAY_SILENT_MODE.Name = "BTT_TRAY_SILENT_MODE" + Me.BTT_TRAY_SILENT_MODE.Size = New System.Drawing.Size(170, 22) + Me.BTT_TRAY_SILENT_MODE.Text = "Silent mode" + Me.BTT_TRAY_SILENT_MODE.ToolTipText = "Turn off notifications temporarily." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "This setting is not stored in the settings f" & + "ile. It is valid until you turn it off or close the program." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) + ' + 'BTT_TRAY_FEED_SHOW + ' + Me.BTT_TRAY_FEED_SHOW.AutoToolTip = True + Me.BTT_TRAY_FEED_SHOW.Image = Global.SCrawler.My.Resources.Resources.RSSPic_512 + Me.BTT_TRAY_FEED_SHOW.Name = "BTT_TRAY_FEED_SHOW" + Me.BTT_TRAY_FEED_SHOW.Size = New System.Drawing.Size(170, 22) + Me.BTT_TRAY_FEED_SHOW.Text = "Feed" + Me.BTT_TRAY_FEED_SHOW.ToolTipText = "Show feed of recently downloaded data." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Ctrl+Click the tray icon to show the feed" & + "." ' 'BTT_TRAY_SHOW_HIDE ' + Me.BTT_TRAY_SHOW_HIDE.Image = Global.SCrawler.My.Resources.Resources.ApplicationPic_16 Me.BTT_TRAY_SHOW_HIDE.Name = "BTT_TRAY_SHOW_HIDE" - Me.BTT_TRAY_SHOW_HIDE.Size = New System.Drawing.Size(160, 22) + Me.BTT_TRAY_SHOW_HIDE.Size = New System.Drawing.Size(170, 22) Me.BTT_TRAY_SHOW_HIDE.Text = "Show/Hide" ' 'BTT_TRAY_CLOSE ' Me.BTT_TRAY_CLOSE.BackColor = System.Drawing.Color.FromArgb(CType(CType(255, Byte), Integer), CType(CType(192, Byte), Integer), CType(CType(192, Byte), Integer)) Me.BTT_TRAY_CLOSE.ForeColor = System.Drawing.Color.Maroon - Me.BTT_TRAY_CLOSE.Image = CType(resources.GetObject("BTT_TRAY_CLOSE.Image"), System.Drawing.Image) + Me.BTT_TRAY_CLOSE.Image = Global.SCrawler.My.Resources.Resources.DeletePic_24 Me.BTT_TRAY_CLOSE.Name = "BTT_TRAY_CLOSE" - Me.BTT_TRAY_CLOSE.Size = New System.Drawing.Size(160, 22) + Me.BTT_TRAY_CLOSE.Size = New System.Drawing.Size(170, 22) Me.BTT_TRAY_CLOSE.Text = "Close" ' 'BTT_TRAY_CLOSE_NO_SCRIPT @@ -795,9 +876,9 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form Me.BTT_TRAY_CLOSE_NO_SCRIPT.AutoToolTip = True Me.BTT_TRAY_CLOSE_NO_SCRIPT.BackColor = System.Drawing.Color.FromArgb(CType(CType(255, Byte), Integer), CType(CType(192, Byte), Integer), CType(CType(192, Byte), Integer)) Me.BTT_TRAY_CLOSE_NO_SCRIPT.ForeColor = System.Drawing.Color.Maroon - Me.BTT_TRAY_CLOSE_NO_SCRIPT.Image = Global.SCrawler.My.Resources.Resources.Delete + Me.BTT_TRAY_CLOSE_NO_SCRIPT.Image = Global.SCrawler.My.Resources.Resources.DeletePic_24 Me.BTT_TRAY_CLOSE_NO_SCRIPT.Name = "BTT_TRAY_CLOSE_NO_SCRIPT" - Me.BTT_TRAY_CLOSE_NO_SCRIPT.Size = New System.Drawing.Size(160, 22) + Me.BTT_TRAY_CLOSE_NO_SCRIPT.Size = New System.Drawing.Size(170, 22) Me.BTT_TRAY_CLOSE_NO_SCRIPT.Text = "Close (no script)" Me.BTT_TRAY_CLOSE_NO_SCRIPT.ToolTipText = "Close the program without executing the script" Me.BTT_TRAY_CLOSE_NO_SCRIPT.Visible = False @@ -810,7 +891,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form Me.Controls.Add(Me.LIST_PROFILES) Me.Controls.Add(Me.Toolbar_BOTTOM) Me.Controls.Add(Me.Toolbar_TOP) - Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.Icon = Global.SCrawler.My.Resources.Resources.RainbowIcon_48 Me.KeyPreview = True Me.MinimumSize = New System.Drawing.Size(950, 500) Me.Name = "MainFrame" @@ -828,12 +909,12 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form Private WithEvents BTT_SETTINGS As ToolStripMenuItem Private WithEvents BTT_ADD_USER As ToolStripButton Private WithEvents BTT_DELETE_USER As ToolStripButton - Private WithEvents BTT_DOWN_SELECTED As ToolStripButton + Private WithEvents BTT_DOWN_SELECTED As ToolStripKeyMenuItem Private WithEvents MENU_DOWN_ALL As ToolStripDropDownButton Private WithEvents Toolbar_BOTTOM As StatusStrip Private WithEvents PR_MAIN As ToolStripProgressBar Private WithEvents LBL_STATUS As ToolStripStatusLabel - Private WithEvents BTT_CONTEXT_DOWN As ToolStripMenuItem + Private WithEvents BTT_CONTEXT_DOWN As ToolStripKeyMenuItem Private WithEvents BTT_CONTEXT_EDIT As ToolStripMenuItem Private WithEvents BTT_CONTEXT_DELETE As ToolStripMenuItem Private WithEvents BTT_CONTEXT_FAV As ToolStripMenuItem @@ -849,7 +930,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form Private WithEvents BTT_DOWN_STOP As ToolStripButton Private WithEvents BTT_CONTEXT_COL_MERGE As ToolStripMenuItem Private WithEvents LBL_JOBS_COUNT As ToolStripStatusLabel - Private WithEvents BTT_DOWN_VIDEO As ToolStripButton + Private WithEvents BTT_DOWN_VIDEO As ToolStripMenuItem Private WithEvents BTT_SHOW_INFO As ToolStripButton Private WithEvents BTT_CHANNELS As ToolStripButton Private WithEvents LIST_PROFILES As ListView @@ -865,7 +946,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form Private WithEvents BTT_EDIT_USER As ToolStripButton Private WithEvents BTT_CONTEXT_GROUPS As ToolStripMenuItem Private WithEvents BTT_VERSION_INFO As ToolStripButton - Private WithEvents BTT_CONTEXT_DOWN_LIMITED As ToolStripMenuItem + Private WithEvents BTT_CONTEXT_DOWN_LIMITED As ToolStripKeyMenuItem Private WithEvents BTT_CONTEXT_READY As ToolStripMenuItem Private WithEvents BTT_SITE_ALL As ToolStripMenuItem Private WithEvents BTT_SITE_SPECIFIC As ToolStripMenuItem @@ -882,11 +963,11 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form Private WithEvents COL_DEF As ColumnHeader Private WithEvents MENU_SETTINGS As ToolStripDropDownButton Private WithEvents BTT_PR_INFO As ToolStripStatusLabel - Private WithEvents BTT_CONTEXT_DOWN_DATE_LIMIT As ToolStripMenuItem - Private WithEvents BTT_DOWN_ALL As ToolStripMenuItem - Private WithEvents BTT_DOWN_SITE As ToolStripMenuItem - Private WithEvents BTT_DOWN_ALL_FULL As ToolStripMenuItem - Private WithEvents BTT_DOWN_SITE_FULL As ToolStripMenuItem + Private WithEvents BTT_CONTEXT_DOWN_DATE_LIMIT As ToolStripKeyMenuItem + Private WithEvents BTT_DOWN_ALL As ToolStripKeyMenuItem + Private WithEvents BTT_DOWN_SITE As ToolStripKeyMenuItem + Private WithEvents BTT_DOWN_ALL_FULL As ToolStripKeyMenuItem + Private WithEvents BTT_DOWN_SITE_FULL As ToolStripKeyMenuItem Private WithEvents BTT_CONTEXT_SCRIPT As ToolStripMenuItem Private WithEvents BTT_SHOW_EXCLUDED_LABELS As ToolStripMenuItem Private WithEvents BTT_SHOW_EXCLUDED_LABELS_IGNORE As ToolStripMenuItem @@ -895,10 +976,14 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form Friend WithEvents BTT_TRAY_CLOSE_NO_SCRIPT As ToolStripMenuItem Friend WithEvents TRAY_CONTEXT As ContextMenuStrip Private WithEvents BTT_DOWN_AUTOMATION As ToolStripMenuItem - Private WithEvents BTT_DOWN_AUTOMATION_PAUSE As ToolStripMenuItem Friend WithEvents BTT_LOG As ToolStripButton Friend WithEvents Toolbar_TOP As ToolStrip Private WithEvents BTT_FEED As ToolStripButton Private WithEvents BTT_SHOW_LIMIT_DATES_IN As ToolStripMenuItem Private WithEvents BTT_CONTEXT_COPY_TO_FOLDER As ToolStripMenuItem + Private WithEvents BTT_TRAY_SILENT_MODE As ToolStripMenuItem + Friend WithEvents BTT_TRAY_PAUSE_AUTOMATION As ToolStripMenuItem + Private WithEvents BTT_SILENT_MODE As ToolStripMenuItem + Friend WithEvents BTT_DOWN_AUTOMATION_PAUSE As ToolStripMenuItem + Private WithEvents BTT_TRAY_FEED_SHOW As ToolStripMenuItem End Class \ No newline at end of file diff --git a/SCrawler/MainFrame.resx b/SCrawler/MainFrame.resx index a12484e..a16ffcf 100644 --- a/SCrawler/MainFrame.resx +++ b/SCrawler/MainFrame.resx @@ -168,53 +168,40 @@ False + + False + + + False + + + False + + + False + 132, 17 - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG - YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 - 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw - bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc - VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 - c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 - Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo - mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ - kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D - TgDQASA1MVpwzwAAAABJRU5ErkJggg== - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG - YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 - 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw - bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc - VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 - c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 - Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo - mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ - kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D - TgDQASA1MVpwzwAAAABJRU5ErkJggg== + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABkSURBVDhPY6AKyO86WFDQfeg/iIYKkQZAmkNbnvyXta76 + DxViYGFi+Y8PQ5VBAMhmkGYgJs8FAw9GA5EKILFiWUFixfL/IBoqRBoAafYsOvpf0jiTvEAE2QzSLGmU + MeQCkYEBAD3tUdo+/cEPAAAAAElFTkSuQmCC - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG - YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 - 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw - bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc - VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 - c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 - Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo - mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ - kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D - TgDQASA1MVpwzwAAAABJRU5ErkJggg== + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFmSURBVFhH1dc/K4VhHMbxJ5EFEQbFiERKCotIrMJIiYEi + pbwCZcOqJC9AikUWiqRkJYtSRDbESMT3V07dna7zHHru+9T51me+Ts//E+V7LRjFFAZRiZzUhDVc4/vX + B47Rh6D14Aqp4XQ36ECQ2nALNezaQjG8Vo5DqMF0bxiA1+bwCTWoLMFbNTiDGsrkABXw0jDsKldDmdyj + HokrwCrUSBz7wXbRJs4eLkdQI9m0I3ENeIAaiGN3QjMSZ4fxv+ffnKIKibOnmhqI84V5eMleOHY41VAm + 9k7wdgtW4wRqSHlCP7y2AjWmbMB7Y7DzqgZdz2iF9zrxCDXq2oU9uLz31+tgAcHahhp1DSFY9pGhRl29 + CFYXxrMoQ7BmsZfFPkoRpHWow+56hX26BWkRatR1gRIEaQLvUMMpOyhCkBpxBzWcMoOgLUMNm0vUIWj2 + ebaJF7jj5+hGTiqE/f+bxDRGUIt8LIp+AC/GHt3tQnwvAAAAAElFTkSuQmCC @@ -223,454 +210,10 @@ 387, 17 - - - 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 - - 525, 17 623, 17 - - - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAI8vLx+OMzL/jjMy/44zMv+OMzL/jjMy/4w4NOJTs2//U7Nv/1Oz - b/9Ts2//U7Nv/1O0cuI91/H/Pdfx/z3X8f891/H/Pdfx/z3X8f8ukuD/LpLg/y6S4P8ukuD/LpLg/y6S - 4P8vOs7/LzrO/y86zv8vOs7/LzrO/y86zv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI0yMjeOMzL/jjMy/44zMv+OMzL/jjMy/4tD - N9NTs2//U7Nv/1Ozb/9Ts2//U7Nv/1K1fNM91/H/Pdfx/z3X8f891/H/Pdfx/zzW8OkukuD/LpLg/y6S - 4P8ukuD/LpLg/y6R4PcvOs7/LzrO/y86zv8vOs7/LzrO/y86zuYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwzM0+OMzL/jjMy/44z - Mv+OMzL/jjMy/4hRPcdTs2//U7Nv/1Ozb/9Ts2//U7Nv/1G4h8c91/H/Pdfx/z3X8f891/H/Pdfx/zzV - 8eIukuD/LpLg/y6S4P8ukuD/LpLg/y2R4OIvOs7/LzrO/y86zv8vOs7/LzrO/y46zd4AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI4z - MZ6OMzL/jjMy/44zMv+OMzL/jjMy/4NiRMBTs2//U7Nv/1Ozb/9Ts2//U7Nv/067mMA91/H/Pdfx/z3X - 8f891/H/Pdfx/zzR78sukuD/LpLg/y6S4P8ukuD/LpLg/y2Q39cvOs7/LzrO/y86zv8vOs7/LzrO/y86 - ztYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAI0zMu6OMzL/jjMy/44zMv+OMzL/jjMy/26RXMdTs2//U7Nv/1Ozb/9Ts2//U7Nv/0vB - rr491/H/Pdfx/z3X8f891/H/Pdfx/zjI7b8ukuD/LpLg/y6S4P8ukuD/LpLg/y2J3cUvOs7/LzrO/y86 - zv8vOs7/LzrO/y46zq4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAjzMzP44zMv+OMzL/jjMy/44zMv+OMzL/jjIx91SwbvZTs2//U7Nv/1Oz - b/9Ts2//U7Nv/0XM1M491/H/Pdfx/z3X8f891/H/Pdfx/za66cAukuD/LpLg/y6S4P8ukuD/LpLg/y55 - 2b4vOs7/LzrO/y86zv8vOs7/LzrO/y46zo4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjjIxro4zMv+OMzL/jjMy/44zMv+OMzL/iUw7y1Oz - b/9Ts2//U7Nv/1Ozb/9Ts2//U7Nv7z3X8f891/H/Pdfx/z3X8f891/H/Pdfx/zCk49cukuD/LpLg/y6S - 4P8ukuD/LpLg/y1p1ccvOs7/LzrO/y86zv8vOs7/LzrO/y46zWcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACPNC4vjjMy/44zMv+OMzL/jjMy/44z - Mv+OMzL/dIdXwlOzb/9Ts2//U7Nv/1Ozb/9Ts2//T7qSwj3X8f891/H/Pdfx/z3X8f891/H/PNXx4i6S - 4P8ukuD/LpLg/y6S4P8ukuD/LpLg/y5N0OIvOs7/LzrO/y86zv8vOs7/LzrO/y07zDcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACNMjLOjjMy/44z - Mv+OMzL/jjMy/44zMv+NNDLvWqpr6FOzb/9Ts2//U7Nv/1Ozb/9Ts2//RsnKxz3X8f891/H/Pdfx/z3X - 8f891/H/OcvtwC6S4P8ukuD/LpLg/y6S4P8ukuD/LZHg4i86zv8vOs7/LzrO/y86zv8vOs7/LzrO/y4+ - zw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI4z - MHeOMzL/jjMy/44zMv+OMzL/jjMy/44zMv95flG/U7Nv/1Ozb/9Ts2//U7Nv/1Ozb/9Ssm/3PdXt9j3X - 8f891/H/Pdfx/z3X8f891/H/M63myi6S4P8ukuD/LpLg/y6S4P8ukuD/Lobcwi86zv8vOs7/LzrO/y86 - zv8vOs7/LjnNzgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAjDMzT44zMv+OMzL/jjMy/44zMv+OMzL/jjMy/441MulUsG72U7Nv/1Ozb/9Ts2//U7Nv/1Oz - b/9PuI3FPdfx/z3X8f891/H/Pdfx/z3X8f881/HvLpTh9i6S4P8ukuD/LpLg/y6S4P8ukuD/LXDXwi86 - zv8vOs7/LzrO/y86zv8vOs7/LjrOjgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACvhoQ4jzg39o4zMv+OMzL/jjMy/44zMv+OMzL/jjMy/3SHV8JTs2//U7Nv/1Oz - b/9Ts2//U7Nv/1Ozb/9D0NzXPdfx/z3X8f891/H/Pdfx/z3X8f87zu7FLpLg/y6S4P8ukuD/LpLg/y6S - 4P8ukuD/Lk3Q4i86zv8vOs7/LzrO/y86zv8vOs7/LznMTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAALKPjmi5mpn4roaG/485OP+OMzL/jjMy/44zMv+OMzL/i0c5zlOz - b/9Ts2//U7Nv/1Ozb/9Ts2//U7Nv/067mMA91/H/Pdfx/z3X8f891/H/Pdfx/z3X8f82uOjCLpLg/y6S - 4P8ukuD/LpLg/y6S4P8ujt/ULzrO/y86zv8vOs7/LzrO/y86zv8vOs7/Lj7PDwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtJKSkrmamv+5mpr/uZqa/66Ghv+POTj/jjMy/44z - Mv+MODTiWqpr6FOzb/9Ts2//U7Nv/1Ozb/9Ts2//UrJv9z/U5+g91/H/Pdfx/z3X8f891/H/Pdfx/zzW - 8OkulOH2LpLg/y6S4P8ukuD/LpLg/y6S4P8ucdfFLzrO/y86zv8vOs7/LzrO/y86zv8uOs6+AAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALKPj1+4l5fguZqa/7mamv+5mpr/uZqa/7ma - mv+uhob/jzk4/44yMfdkoGTXU7Nv/1Ozb/9Ts2//U7Nv/1Ozb/9Ts2//Tr2dvz3X8f891/H/Pdfx/z3X - 8f891/H/Pdfx/za46MIukuD/LpLg/y6S4P8ukuD/LpLg/y6R4PcvQ8/2LzrO/y86zv8vOs7/LzrO/y86 - zv8uOs1nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKd+fhuzkJBxtZKS2bmamv+5mpr/uZqa/7ma - mv+5mpr/uZqa/7mamv+5mpr/roaG/3GTYMdTs2//U7Nv/1Ozb/9Ts2//U7Nv/1Ozb/9SsnHpP9Tn6D3X - 8f891/H/Pdfx/z3X8f891/H/PNXw1y6S4P8ukuD/LpLg/y6S4P8ukuD/LpLg/y6C278vOs7/LzrO/y86 - zv8vOs7/LzrO/y85zvYuPs8PAAAAAAAAAACzjY1Ns42NTbOQkHG0kpKSt5aWzLmamv+5mpr/uZqa/7ma - mv+5mpr/uZqa/7mamv+5mpr/uZqa/7mamv+7nZzzssOu2ZHGnf9WtHH/U7Nv/1Ozb/9Ts2//U7Nv/1Ky - b/dFzNTOPdfx/z3X8f891/H/Pdfx/z3X8f891/H/NLDmxy6S4P8ukuD/LpLg/y6S4P8ukuD/LpHg9y5K - 0OgvOs7/LzrO/y86zv8vOs7/LzrO/y46zq4AAAAAAAAAAAAAAAC5mpr/uZqa/7mamv+5mpr/uZqa/7ma - mv+5mpr/uZqa/7mamv+5mpr/uZqa/7mamv+5mpr/uZqa/72hoOerya7mos2s/6LNrP+Rxp3/VrRx/1Oz - b/9Ts2//U7Nv/0nFusA91/H/Pdfx/z3X8f891/H/Pdfx/z3X8f880vDOLpLg/y6S4P8ukuD/LpLg/y6S - 4P8ukuD/LoDbyS86zv8vOs7/LzrO/y86zv8vOs7/LzrO/y85zE8AAAAAAAAAAAAAAAC5mpr/uZqa/7ma - mv+5mpr/uZqa/7mamv+5mpr/uZqa/7mamv+5mpr/uZqa/7mamv+5mpr/vaml2qbMrPOizaz/os2s/6LN - rP+izaz/kcad/1a0cf9Ts2//Tr2dvz3X8f891/H/Pdfx/z3X8f891/H/Pdfx/z3X8f8wpOPXLpLg/y6S - 4P8ukuD/LpLg/y6S4P8ukODpLkDP9i86zv8vOs7/LzrO/y86zv8vOs7/LjnNzgAAAAAAAAAAAAAAAAAA - AAC5mpr/uZqa/7mamv+5mpr/uZqa/7mamv+5mpr/uZqa/7mamv+5mpr/uZqa/72jouOyw67Zos2s/6LN - rP+izaz/os2s/6LNrP+izaz/os2s/5HGnf9VuIbLPdfx/z3X8f891/H/Pdfx/z3X8f891/H/Pdfx/zjG - 7L4ukuD/LpLg/y6S4P8ukuD/LpLg/y6S4P8td9i/LzrO/y86zv8vOs7/LzrO/y86zv8vOs7/LznMTwAA - AAAAAAAAAAAAAAAAAAC5mpr/uZqa/7mamv+5mpr/uZqa/7mamv+5mpr/uZqa/7mamv+8np7vtr6t1KLN - rP+izaz/os2s/6LNrP+izaz/os2s/6LNrP+izaz/os2s/6vUvdeK3/H3Qtfx/z3X8f891/H/Pdfx/z3X - 8f891/H/O9Dvxy6S4P8ukuD/LpLg/y6S4P8ukuD/LpLg/y6Q4OsuQM/2LzrO/y86zv8vOs7/LzrO/y86 - zv8uOc3OAAAAAAAAAAAAAAAAAAAAAAAAAAC5mpr/uZqa/7mamv+5mpr/uZqa/7mamv+8oJ/qvLGp07LD - rtmizaz/os2s/6LNrP+izaz/os2s/6LNrP+izaz/os2s/6LNrP+izaz/rNjL0Zzk9f+c5PX/ieD0/0LX - 8f891/H/Pdfx/z3X8f871O/eLpTh9i6S4P8ukuD/LpLg/y6S4P8ukuD/LpLg/y1p1ccvOs7/LzrO/y86 - zv8vOs7/LzrO/y86zv8vOcxPAAAAAAAAAAAAAAAAAAAAAAAAAAC+p6Tcvqek3L2vqNS6t6vSurms0a3H - reOizaz/os2s/6LNrP+izaz/os2s/6LNrP+izaz/os2s/6LNrP+izaz/os2s/6PNrfmp3dzVnOT1/5zk - 9f+c5PX/nOT1/4ng9P9C1/H/Pdfx/zzX8fAwnuLiLpLg/y6S4P8ukuD/LpLg/y6S4P8ukuD/Lo3e0C86 - zv8vOs7/LzrO/y86zv8vOs7/LzrO/y45zc4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACizaz/os2s/6LN - rP+izaz/os2s/6LNrP+izaz/os2s/6LNrP+izaz/os2s/6LNrP+izaz/os2s/6LNrP+izaz/pc6v76Xg - 5d+c5PX/nOT1/5zk9f+c5PX/nOT1/5zk9f+J4PT/Qdbw9zKr5dQukuD/LpLg/y6S4P8ukuD/LpLg/y6S - 4P8tkeDjLkPO7y86zv8vOs7/LzrO/y86zv8vOs7/LzrO/y46zy8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACizaz/os2s/6LNrP+izaz/os2s/6LNrP+izaz/os2s/6LNrP+izaz/os2s/6LNrP+izaz/os2s/6TP - rvOr2tDRnePy+Jzk9f+c5PX/nOT1/5zk9f+c5PX/nOT1/5zk9f+d4/T5j8nt2TST4P8ukuD/LpLg/y6S - 4P8ukuD/LpLg/y6R4PcuVdHkLzrO/y86zv8vOs7/LzrO/y86zv8vOs7/LjnOngAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACizaz/os2s/6LNrP+izaz/os2s/6LNrP+izaz/os2s/6LNrP+izaz/os2s/6LN - rP+jza35rNjI0p/j8fOc5PX/nOT1/5zk9f+c5PX/nOT1/5zk9f+c5PX/nOT1/5/k9e+hyu7jmbvq/4Wx - 5/80k+D/LpLg/y6S4P8ukuD/LpLg/y5o1cwvOs7/LzrO/y86zv8vOs7/LzrO/y86zv8uOc3uKTTJFwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACizaz/os2s/6LNrP+izaz/os2s/6LNrP+izaz/os2s/6LN - rP+izaz/ptCx6qvXxdOh4e3qnOT1/5zk9f+c5PX/nOT1/5zk9f+c5PX/nOT1/5zk9f+c5PX/ouP15JzD - 6/SZu+r/mbvq/5m76v+Fsef/NJPg/y6S4P8ukuD/LXvZxi86zv8vOs7/LzrO/y86zv8vOs7/LzrO/y86 - zv8uOM1HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACizaz/os2s/6LNrP+izaz/os2s/6LN - rP+izaz/p9Cz56vZztKk4ejjnOT1/5zk9f+c5PX/nOT1/5zk9f+c5PX/nOT1/5zk9f+c5PX/nOT1/5zk - 9f+l4PTZmr3q+Jm76v+Zu+r/mbvq/5m76v+Zu+r/hbHn/zST4P8uiN3MLzrO/y86zv8vOs7/LzrO/y86 - zv8vOs7/LzrO/y84zG8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACp0rjcqdK43KvW - wtSr2c7Sq9rQ0aff5Nyh4e3qnOT1/5zk9f+c5PX/nOT1/5zk9f+c5PX/nOT1/5zk9f+c5PX/nOT1/5zk - 9f+c5PX/nOT1/6ba8teZu+r/mbvq/5m76v+Zu+r/mbvq/5m76v+Zu+r/mbvq/42z5941Rc/2LzrO/y86 - zv8vOs7/LzrO/y86zv8vOs7/LznOlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACc5PX/nOT1/5zk9f+c5PX/nOT1/5zk9f+c5PX/nOT1/5zk9f+c5PX/nOT1/5zk9f+c5PX/nOT1/5zk - 9f+c5PX/nOT1/5zk9f+l4fTbncPr75m76v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m76v+Zu+r/o73p2Zqe - 3/iFiNr/NT/O/y86zv8vOs7/LzrO/y86zv8uOs6+HD2+BwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACc5PX/nOT1/5zk9f+c5PX/nOT1/5zk9f+c5PX/nOT1/5zk9f+c5PX/nOT1/5zk - 9f+c5PX/nOT1/5zk9f+c5PX/pOL13qHK7uOZu+r/mbvq/5m76v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m7 - 6v+ltufVmZve/5mb3v+Zm97/hYja/zU/zv8vOs7/LzrO/y46zd4uPs8PAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACc5PX/nOT1/5zk9f+c5PX/nOT1/5zk9f+c5PX/nOT1/5zk - 9f+c5PX/nOT1/5zk9f+c5PX/nOT1/6Hj9Oeiz+/fmbvq/5m76v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m7 - 6v+Zu+r/nL3q86Ku5N6Zm97/mZve/5mb3v+Zm97/mZve/4WI2v81P87/LjnN7iw5zCcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACc5PX/nOT1/5zk9f+c5PX/nOT1/5zk - 9f+c5PX/nOT1/5zk9f+c5PX/nOT1/6Hj9eun3vPSoszu4Jm76v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m7 - 6v+Zu+r/mbvq/5m76v+fvurnn6fh5pmb3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Fh9n3LjjNRwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACc5PX/nOT1/5zk - 9f+c5PX/nOT1/5zk9f+c5PX/nOT1/6Tk9OCn2PHSoMfs5pm76v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m7 - 6v+Zu+r/mbvq/5m76v+Zu+r/mbvq/6O/6tqcoN/zmZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mZve/5aY - 3fJ/gtlJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACl4/XcpeP13KXj9dyl4/Xcp93z0afY8dKjze7cnMDr85m76v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m7 - 6v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m76v+gv+rjoq7j3Jmb3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb - 3v+Zm97/lJbc2X6A2SUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACZu+r/mbvq/5m76v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m7 - 6v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m76v+Zu+r/nr7q6qWz5dWZm97/mZve/5mb3v+Zm97/mZve/5mb - 3v+Zm97/mZve/5mb3v+Sld2+aXDWEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZu+r/mbvq/5m76v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m7 - 6v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5y96vOmuOfSmp7f+Jmb3v+Zm97/mZve/5mb - 3v+Zm97/mZve/5mb3v+Zm97/mZve/4mL2pYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZu+r/mbvq/5m76v+Zu+r/mbvq/5m7 - 6v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m76v+dvervprrn0pyg3/OZm97/mZve/5mb - 3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+WmN34io3aZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZu+r/mbvq/5m7 - 6v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m76v+avOr5pL7q1qOw5NmZm97/mZve/5mb - 3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mZve/5OW3eyEh9o4AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACZu+r/mbvq/5m76v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m76v+iv+rcprrn0qKu49yZm97/mZve/5mb - 3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm974i43al4SLzwgAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACiv+rcor/q3KK/6tyiv+rcpL7q16a659KksuXXoKni45mb3v+Zm97/mZve/5mb - 3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mZve/5SW3cWEh9gvAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb - 3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Vl93MjY/cTQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZm97/mZve/5mb3v+Zm97/mZve/5mb - 3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/kJLcy42P - 3E0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZm97/mZve/5mb - 3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/lZfd7I2P - 26aEh9o4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACZm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mJre7JOV - 3bCHitlUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACZm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Ymt3ylJbdvo+R - 23mMj9oxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVl93MlZfdzJWX3cyVl93MlJbdxZGT25KPkdpxjY/cTYSL - zwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//8AAAAAAAP//gAAAAAAA//+AAAAA - AAD//4AAAAAAAP//gAAAAAAA//+AAAAAAAD//wAAAAAAAP//AAAAAAAA//4AAAAAAAD//gAAAAAAAP/8 - AAAAAQAA//gAAAABAAD/8AAAAAEAAP/gAAAAAQAA/8AAAAADAAD/AAAAAAMAAPgAAAAAAwAAAAAAAAAH - AAAAAAAAAAcAAAAAAAAADwAAAAAAAAAPAAAAAAAAAB8AAAAAAAAAHwAAAAAAAAA/AAAAAAAAAD8AAAAA - AAAAfwAAAAAAAAB/AAAAAAAAAP8AAAAAAAAB/wAAAAAAAAP/AAAAAAAAA/8AAAAAAAAH/wAAAAAAAA// - AAAAAAAAH/8AAAAAAAA//wAAAAAAAH//AAAAAAAA//8AAAAAAAP//wAAAAAAB///AAAAAAAP//8AAAAA - AB///wAAAAAAf///AAAAAAH///8AAAAAB////wAAAAAf////AAAAAP////8AAAAH/////wAAAH////// - AAA= - - - - - AAABAAEAMDAAAAEAIACoJQAAFgAAACgAAAAwAAAAYAAAAAEAIAAAAAAAACQAAMMOAADDDgAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACOMzL/jjMy/44zMv+OMzL/jjMy/44zMv9Ts2//U7Nv/1Ozb/9Ts2//U7Nv/1Oz - b/891/H/Pdfx/z3X8f891/H/Pdfx/z3X8f8ukuD/LpLg/y6S4P8ukuD/LpLg/y6S4P8vOs7/LzrO/y86 - zv8vOs7/LzrO/y86zv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAI8vLx+OMzL/jjMy/44zMv+OMzL/jjMy/4w4NOJTs2//U7Nv/1Oz - b/9Ts2//U7Nv/1O0cuI91/H/Pdfx/z3X8f891/H/Pdfx/z3X8f8ukuD/LpLg/y6S4P8ukuD/LpLg/y6S - 4P8vOs7/LzrO/y86zv8vOs7/LzrO/y86zv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI0yMjeOMzL/jjMy/44zMv+OMzL/jjMy/4tD - N9NTs2//U7Nv/1Ozb/9Ts2//U7Nv/1K1fNM91/H/Pdfx/z3X8f891/H/Pdfx/zzW8OkukuD/LpLg/y6S - 4P8ukuD/LpLg/y6R4PcvOs7/LzrO/y86zv8vOs7/LzrO/y86zuYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwzM0+OMzL/jjMy/44z - Mv+OMzL/jjMy/4hRPcdTs2//U7Nv/1Ozb/9Ts2//U7Nv/1G4h8c91/H/Pdfx/z3X8f891/H/Pdfx/zzV - 8eIukuD/LpLg/y6S4P8ukuD/LpLg/y2R4OIvOs7/LzrO/y86zv8vOs7/LzrO/y46zd4AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI4z - MZ6OMzL/jjMy/44zMv+OMzL/jjMy/4NiRMBTs2//U7Nv/1Ozb/9Ts2//U7Nv/067mMA91/H/Pdfx/z3X - 8f891/H/Pdfx/zzR78sukuD/LpLg/y6S4P8ukuD/LpLg/y2Q39cvOs7/LzrO/y86zv8vOs7/LzrO/y86 - ztYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAI0zMu6OMzL/jjMy/44zMv+OMzL/jjMy/26RXMdTs2//U7Nv/1Ozb/9Ts2//U7Nv/0vB - rr491/H/Pdfx/z3X8f891/H/Pdfx/zjI7b8ukuD/LpLg/y6S4P8ukuD/LpLg/y2J3cUvOs7/LzrO/y86 - zv8vOs7/LzrO/y46zq4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAjzMzP44zMv+OMzL/jjMy/44zMv+OMzL/jjIx91SwbvZTs2//U7Nv/1Oz - b/9Ts2//U7Nv/0XM1M491/H/Pdfx/z3X8f891/H/Pdfx/za66cAukuD/LpLg/y6S4P8ukuD/LpLg/y55 - 2b4vOs7/LzrO/y86zv8vOs7/LzrO/y46zo4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjjIxro4zMv+OMzL/jjMy/44zMv+OMzL/iUw7y1Oz - b/9Ts2//U7Nv/1Ozb/9Ts2//U7Nv7z3X8f891/H/Pdfx/z3X8f891/H/Pdfx/zCk49cukuD/LpLg/y6S - 4P8ukuD/LpLg/y1p1ccvOs7/LzrO/y86zv8vOs7/LzrO/y46zWcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACPNC4vjjMy/44zMv+OMzL/jjMy/44z - Mv+OMzL/dIdXwlOzb/9Ts2//U7Nv/1Ozb/9Ts2//T7qSwj3X8f891/H/Pdfx/z3X8f891/H/PNXx4i6S - 4P8ukuD/LpLg/y6S4P8ukuD/LpLg/y5N0OIvOs7/LzrO/y86zv8vOs7/LzrO/y07zDcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACNMjLOjjMy/44z - Mv+OMzL/jjMy/44zMv+NNDLvWqpr6FOzb/9Ts2//U7Nv/1Ozb/9Ts2//RsnKxz3X8f891/H/Pdfx/z3X - 8f891/H/OcvtwC6S4P8ukuD/LpLg/y6S4P8ukuD/LZHg4i86zv8vOs7/LzrO/y86zv8vOs7/LzrO/y4+ - zw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI4z - MHeOMzL/jjMy/44zMv+OMzL/jjMy/44zMv95flG/U7Nv/1Ozb/9Ts2//U7Nv/1Ozb/9Ssm/3PdXt9j3X - 8f891/H/Pdfx/z3X8f891/H/M63myi6S4P8ukuD/LpLg/y6S4P8ukuD/Lobcwi86zv8vOs7/LzrO/y86 - zv8vOs7/LjnNzgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAjDMzT44zMv+OMzL/jjMy/44zMv+OMzL/jjMy/441MulUsG72U7Nv/1Ozb/9Ts2//U7Nv/1Oz - b/9PuI3FPdfx/z3X8f891/H/Pdfx/z3X8f881/HvLpTh9i6S4P8ukuD/LpLg/y6S4P8ukuD/LXDXwi86 - zv8vOs7/LzrO/y86zv8vOs7/LjrOjgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACvhoQ4jzg39o4zMv+OMzL/jjMy/44zMv+OMzL/jjMy/3SHV8JTs2//U7Nv/1Oz - b/9Ts2//U7Nv/1Ozb/9D0NzXPdfx/z3X8f891/H/Pdfx/z3X8f87zu7FLpLg/y6S4P8ukuD/LpLg/y6S - 4P8ukuD/Lk3Q4i86zv8vOs7/LzrO/y86zv8vOs7/LznMTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAALKPjmi5mpn4roaG/485OP+OMzL/jjMy/44zMv+OMzL/i0c5zlOz - b/9Ts2//U7Nv/1Ozb/9Ts2//U7Nv/067mMA91/H/Pdfx/z3X8f891/H/Pdfx/z3X8f82uOjCLpLg/y6S - 4P8ukuD/LpLg/y6S4P8ujt/ULzrO/y86zv8vOs7/LzrO/y86zv8vOs7/Lj7PDwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtJKSkrmamv+5mpr/uZqa/66Ghv+POTj/jjMy/44z - Mv+MODTiWqpr6FOzb/9Ts2//U7Nv/1Ozb/9Ts2//UrJv9z/U5+g91/H/Pdfx/z3X8f891/H/Pdfx/zzW - 8OkulOH2LpLg/y6S4P8ukuD/LpLg/y6S4P8ucdfFLzrO/y86zv8vOs7/LzrO/y86zv8uOs6+AAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALKPj1+4l5fguZqa/7mamv+5mpr/uZqa/7ma - mv+uhob/jzk4/44yMfdkoGTXU7Nv/1Ozb/9Ts2//U7Nv/1Ozb/9Ts2//Tr2dvz3X8f891/H/Pdfx/z3X - 8f891/H/Pdfx/za46MIukuD/LpLg/y6S4P8ukuD/LpLg/y6R4PcvQ8/2LzrO/y86zv8vOs7/LzrO/y86 - zv8uOs1nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKd+fhuzkJBxtZKS2bmamv+5mpr/uZqa/7ma - mv+5mpr/uZqa/7mamv+5mpr/roaG/3GTYMdTs2//U7Nv/1Ozb/9Ts2//U7Nv/1Ozb/9SsnHpP9Tn6D3X - 8f891/H/Pdfx/z3X8f891/H/PNXw1y6S4P8ukuD/LpLg/y6S4P8ukuD/LpLg/y6C278vOs7/LzrO/y86 - zv8vOs7/LzrO/y85zvYuPs8PAAAAAAAAAACzjY1Ns42NTbOQkHG0kpKSt5aWzLmamv+5mpr/uZqa/7ma - mv+5mpr/uZqa/7mamv+5mpr/uZqa/7mamv+7nZzzssOu2ZHGnf9WtHH/U7Nv/1Ozb/9Ts2//U7Nv/1Ky - b/dFzNTOPdfx/z3X8f891/H/Pdfx/z3X8f891/H/NLDmxy6S4P8ukuD/LpLg/y6S4P8ukuD/LpHg9y5K - 0OgvOs7/LzrO/y86zv8vOs7/LzrO/y46zq4AAAAAAAAAAAAAAAC5mpr/uZqa/7mamv+5mpr/uZqa/7ma - mv+5mpr/uZqa/7mamv+5mpr/uZqa/7mamv+5mpr/uZqa/72hoOerya7mos2s/6LNrP+Rxp3/VrRx/1Oz - b/9Ts2//U7Nv/0nFusA91/H/Pdfx/z3X8f891/H/Pdfx/z3X8f880vDOLpLg/y6S4P8ukuD/LpLg/y6S - 4P8ukuD/LoDbyS86zv8vOs7/LzrO/y86zv8vOs7/LzrO/y85zE8AAAAAAAAAAAAAAAC5mpr/uZqa/7ma - mv+5mpr/uZqa/7mamv+5mpr/uZqa/7mamv+5mpr/uZqa/7mamv+5mpr/vaml2qbMrPOizaz/os2s/6LN - rP+izaz/kcad/1a0cf9Ts2//Tr2dvz3X8f891/H/Pdfx/z3X8f891/H/Pdfx/z3X8f8wpOPXLpLg/y6S - 4P8ukuD/LpLg/y6S4P8ukODpLkDP9i86zv8vOs7/LzrO/y86zv8vOs7/LjnNzgAAAAAAAAAAAAAAAAAA - AAC5mpr/uZqa/7mamv+5mpr/uZqa/7mamv+5mpr/uZqa/7mamv+5mpr/uZqa/72jouOyw67Zos2s/6LN - rP+izaz/os2s/6LNrP+izaz/os2s/5HGnf9VuIbLPdfx/z3X8f891/H/Pdfx/z3X8f891/H/Pdfx/zjG - 7L4ukuD/LpLg/y6S4P8ukuD/LpLg/y6S4P8td9i/LzrO/y86zv8vOs7/LzrO/y86zv8vOs7/LznMTwAA - AAAAAAAAAAAAAAAAAAC5mpr/uZqa/7mamv+5mpr/uZqa/7mamv+5mpr/uZqa/7mamv+8np7vtr6t1KLN - rP+izaz/os2s/6LNrP+izaz/os2s/6LNrP+izaz/os2s/6vUvdeK3/H3Qtfx/z3X8f891/H/Pdfx/z3X - 8f891/H/O9Dvxy6S4P8ukuD/LpLg/y6S4P8ukuD/LpLg/y6Q4OsuQM/2LzrO/y86zv8vOs7/LzrO/y86 - zv8uOc3OAAAAAAAAAAAAAAAAAAAAAAAAAAC5mpr/uZqa/7mamv+5mpr/uZqa/7mamv+8oJ/qvLGp07LD - rtmizaz/os2s/6LNrP+izaz/os2s/6LNrP+izaz/os2s/6LNrP+izaz/rNjL0Zzk9f+c5PX/ieD0/0LX - 8f891/H/Pdfx/z3X8f871O/eLpTh9i6S4P8ukuD/LpLg/y6S4P8ukuD/LpLg/y1p1ccvOs7/LzrO/y86 - zv8vOs7/LzrO/y86zv8vOcxPAAAAAAAAAAAAAAAAAAAAAAAAAAC+p6Tcvqek3L2vqNS6t6vSurms0a3H - reOizaz/os2s/6LNrP+izaz/os2s/6LNrP+izaz/os2s/6LNrP+izaz/os2s/6PNrfmp3dzVnOT1/5zk - 9f+c5PX/nOT1/4ng9P9C1/H/Pdfx/zzX8fAwnuLiLpLg/y6S4P8ukuD/LpLg/y6S4P8ukuD/Lo3e0C86 - zv8vOs7/LzrO/y86zv8vOs7/LzrO/y45zc4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACizaz/os2s/6LN - rP+izaz/os2s/6LNrP+izaz/os2s/6LNrP+izaz/os2s/6LNrP+izaz/os2s/6LNrP+izaz/pc6v76Xg - 5d+c5PX/nOT1/5zk9f+c5PX/nOT1/5zk9f+J4PT/Qdbw9zKr5dQukuD/LpLg/y6S4P8ukuD/LpLg/y6S - 4P8tkeDjLkPO7y86zv8vOs7/LzrO/y86zv8vOs7/LzrO/y46zy8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACizaz/os2s/6LNrP+izaz/os2s/6LNrP+izaz/os2s/6LNrP+izaz/os2s/6LNrP+izaz/os2s/6TP - rvOr2tDRnePy+Jzk9f+c5PX/nOT1/5zk9f+c5PX/nOT1/5zk9f+d4/T5j8nt2TST4P8ukuD/LpLg/y6S - 4P8ukuD/LpLg/y6R4PcuVdHkLzrO/y86zv8vOs7/LzrO/y86zv8vOs7/LjnOngAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACizaz/os2s/6LNrP+izaz/os2s/6LNrP+izaz/os2s/6LNrP+izaz/os2s/6LN - rP+jza35rNjI0p/j8fOc5PX/nOT1/5zk9f+c5PX/nOT1/5zk9f+c5PX/nOT1/5/k9e+hyu7jmbvq/4Wx - 5/80k+D/LpLg/y6S4P8ukuD/LpLg/y5o1cwvOs7/LzrO/y86zv8vOs7/LzrO/y86zv8uOc3uKTTJFwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACizaz/os2s/6LNrP+izaz/os2s/6LNrP+izaz/os2s/6LN - rP+izaz/ptCx6qvXxdOh4e3qnOT1/5zk9f+c5PX/nOT1/5zk9f+c5PX/nOT1/5zk9f+c5PX/ouP15JzD - 6/SZu+r/mbvq/5m76v+Fsef/NJPg/y6S4P8ukuD/LXvZxi86zv8vOs7/LzrO/y86zv8vOs7/LzrO/y86 - zv8uOM1HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACizaz/os2s/6LNrP+izaz/os2s/6LN - rP+izaz/p9Cz56vZztKk4ejjnOT1/5zk9f+c5PX/nOT1/5zk9f+c5PX/nOT1/5zk9f+c5PX/nOT1/5zk - 9f+l4PTZmr3q+Jm76v+Zu+r/mbvq/5m76v+Zu+r/hbHn/zST4P8uiN3MLzrO/y86zv8vOs7/LzrO/y86 - zv8vOs7/LzrO/y84zG8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACp0rjcqdK43KvW - wtSr2c7Sq9rQ0aff5Nyh4e3qnOT1/5zk9f+c5PX/nOT1/5zk9f+c5PX/nOT1/5zk9f+c5PX/nOT1/5zk - 9f+c5PX/nOT1/6ba8teZu+r/mbvq/5m76v+Zu+r/mbvq/5m76v+Zu+r/mbvq/42z5941Rc/2LzrO/y86 - zv8vOs7/LzrO/y86zv8vOs7/LznOlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACc5PX/nOT1/5zk9f+c5PX/nOT1/5zk9f+c5PX/nOT1/5zk9f+c5PX/nOT1/5zk9f+c5PX/nOT1/5zk - 9f+c5PX/nOT1/5zk9f+l4fTbncPr75m76v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m76v+Zu+r/o73p2Zqe - 3/iFiNr/NT/O/y86zv8vOs7/LzrO/y86zv8uOs6+HD2+BwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACc5PX/nOT1/5zk9f+c5PX/nOT1/5zk9f+c5PX/nOT1/5zk9f+c5PX/nOT1/5zk - 9f+c5PX/nOT1/5zk9f+c5PX/pOL13qHK7uOZu+r/mbvq/5m76v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m7 - 6v+ltufVmZve/5mb3v+Zm97/hYja/zU/zv8vOs7/LzrO/y46zd4uPs8PAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACc5PX/nOT1/5zk9f+c5PX/nOT1/5zk9f+c5PX/nOT1/5zk - 9f+c5PX/nOT1/5zk9f+c5PX/nOT1/6Hj9Oeiz+/fmbvq/5m76v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m7 - 6v+Zu+r/nL3q86Ku5N6Zm97/mZve/5mb3v+Zm97/mZve/4WI2v81P87/LjnN7iw5zCcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACc5PX/nOT1/5zk9f+c5PX/nOT1/5zk - 9f+c5PX/nOT1/5zk9f+c5PX/nOT1/6Hj9eun3vPSoszu4Jm76v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m7 - 6v+Zu+r/mbvq/5m76v+fvurnn6fh5pmb3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Fh9n3LjjNRwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACc5PX/nOT1/5zk - 9f+c5PX/nOT1/5zk9f+c5PX/nOT1/6Tk9OCn2PHSoMfs5pm76v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m7 - 6v+Zu+r/mbvq/5m76v+Zu+r/mbvq/6O/6tqcoN/zmZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mZve/5aY - 3fJ/gtlJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACl4/XcpeP13KXj9dyl4/Xcp93z0afY8dKjze7cnMDr85m76v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m7 - 6v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m76v+gv+rjoq7j3Jmb3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb - 3v+Zm97/lJbc2X6A2SUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACZu+r/mbvq/5m76v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m7 - 6v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m76v+Zu+r/nr7q6qWz5dWZm97/mZve/5mb3v+Zm97/mZve/5mb - 3v+Zm97/mZve/5mb3v+Sld2+aXDWEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZu+r/mbvq/5m76v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m7 - 6v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5y96vOmuOfSmp7f+Jmb3v+Zm97/mZve/5mb - 3v+Zm97/mZve/5mb3v+Zm97/mZve/4mL2pYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZu+r/mbvq/5m76v+Zu+r/mbvq/5m7 - 6v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m76v+dvervprrn0pyg3/OZm97/mZve/5mb - 3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+WmN34io3aZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZu+r/mbvq/5m7 - 6v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m76v+avOr5pL7q1qOw5NmZm97/mZve/5mb - 3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mZve/5OW3eyEh9o4AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACZu+r/mbvq/5m76v+Zu+r/mbvq/5m76v+Zu+r/mbvq/5m76v+iv+rcprrn0qKu49yZm97/mZve/5mb - 3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm974i43al4SLzwgAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACiv+rcor/q3KK/6tyiv+rcpL7q16a659KksuXXoKni45mb3v+Zm97/mZve/5mb - 3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mZve/5SW3cWEh9gvAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb - 3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Vl93MjY/cTQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZm97/mZve/5mb3v+Zm97/mZve/5mb - 3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/kJLcy42P - 3E0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZm97/mZve/5mb - 3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/lZfd7I2P - 26aEh9o4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACZm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mJre7JOV - 3bCHitlUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAACZm97/mZve/5mb3v+Zm97/mZve/5mb3v+Zm97/mZve/5mb3v+Ymt3ylJbdvo+R - 23mMj9oxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVl93MlZfdzJWX3cyVl93MlJbdxZGT25KPkdpxjY/cTYSL - zwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//8AAAAAAAP//gAAAAAAA//+AAAAA - AAD//4AAAAAAAP//gAAAAAAA//+AAAAAAAD//wAAAAAAAP//AAAAAAAA//4AAAAAAAD//gAAAAAAAP/8 - AAAAAQAA//gAAAABAAD/8AAAAAEAAP/gAAAAAQAA/8AAAAADAAD/AAAAAAMAAPgAAAAAAwAAAAAAAAAH - AAAAAAAAAAcAAAAAAAAADwAAAAAAAAAPAAAAAAAAAB8AAAAAAAAAHwAAAAAAAAA/AAAAAAAAAD8AAAAA - AAAAfwAAAAAAAAB/AAAAAAAAAP8AAAAAAAAB/wAAAAAAAAP/AAAAAAAAA/8AAAAAAAAH/wAAAAAAAA// - AAAAAAAAH/8AAAAAAAA//wAAAAAAAH//AAAAAAAA//8AAAAAAAP//wAAAAAAB///AAAAAAAP//8AAAAA - AB///wAAAAAAf///AAAAAAH///8AAAAAB////wAAAAAf////AAAAAP////8AAAAH/////wAAAH////// - AAA= - - \ No newline at end of file diff --git a/SCrawler/MainFrame.vb b/SCrawler/MainFrame.vb index ff8c439..8247d2a 100644 --- a/SCrawler/MainFrame.vb +++ b/SCrawler/MainFrame.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -6,9 +6,9 @@ ' ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY -Imports System.ComponentModel -Imports System.Globalization Imports System.Threading +Imports System.Globalization +Imports System.ComponentModel Imports PersonalUtilities.Forms Imports PersonalUtilities.Functions.Messaging Imports SCrawler.API @@ -16,14 +16,20 @@ Imports SCrawler.API.Base Imports SCrawler.Editors Imports SCrawler.DownloadObjects Imports SCrawler.Plugin.Hosts +Imports PauseModes = SCrawler.DownloadObjects.AutoDownloader.PauseModes Public Class MainFrame - Private MyView As FormsView +#Region "Declarations" + Private MyView As FormView + Private WithEvents MyActivator As FormActivator Private ReadOnly _VideoDownloadingMode As Boolean = False Private MyChannels As ChannelViewForm Private MySavedPosts As DownloadSavedPostsForm Private MyMissingPosts As MissingPostsForm Private MyFeed As DownloadFeedForm + Private MySearch As UserSearchForm Private _UFinit As Boolean = True +#End Region +#Region "Initializer" Public Sub New() InitializeComponent() Dim n As DateTimeFormatInfo = CultureInfo.GetCultureInfo("en-us").DateTimeFormat.Clone @@ -40,16 +46,19 @@ Public Class MainFrame End With Dim Args() As String = Environment.GetCommandLineArgs If Args.ListExists(2) AndAlso Args(1) = "v" Then - Using f As New VideosDownloaderForm : f.ShowDialog() : End Using + Using f As New VideosDownloaderForm With {.IsStandalone = True} : f.ShowDialog() : End Using _VideoDownloadingMode = True End If End Sub +#End Region +#Region "Form handlers" Private Sub MainFrame_Load(sender As Object, e As EventArgs) Handles Me.Load If _VideoDownloadingMode Then GoTo FormClosingInvoker If Now.Month.ValueBetween(6, 8) Then Text = "SCrawler: Happy LGBT Pride Month! :-)" Settings.DeleteCachePath() MainFrameObj = New MainFrameObjects(Me) MainFrameObj.ChangeCloseVisible() + MainFrameObj.PauseButtons.AddButtons() MainProgress = New Toolbars.MyProgress(Toolbar_BOTTOM, PR_MAIN, LBL_STATUS, "Downloading profiles' data") With { .ResetProgressOnMaximumChanges = False, .Visible = False} Downloader = New TDownloader @@ -59,13 +68,14 @@ Public Class MainFrame AddHandler Downloader.JobsChange, AddressOf Downloader_UpdateJobsCount AddHandler Downloader.Downloading, AddressOf Downloader_Downloading AddHandler Downloader.DownloadCountChange, AddressOf InfoForm.Downloader_DownloadCountChange - AddHandler Downloader.SendNotification, AddressOf NotificationMessage + AddHandler Downloader.SendNotification, AddressOf MainFrameObj.ShowNotification AddHandler InfoForm.UserFind, AddressOf FocusUser Settings.LoadUsers() - MyView = New FormsView(Me) - MyView.ImportFromXML(Settings.Design) - MyView.SetMeSize() + MyView = New FormView(Me) + MyView.Import(Settings.Design) + MyView.SetFormSize() If Settings.CloseToTray Then TrayIcon.Visible = True + MyActivator = New FormActivator(Me) With LIST_PROFILES.Groups .AddRange(GetLviGroupName(Nothing, True, False)) 'collections .AddRange(GetLviGroupName(Nothing, False, True)) 'channels @@ -103,8 +113,10 @@ Public Class MainFrame Settings.Automation = New Scheduler AddHandler Settings.Groups.Updated, AddressOf Settings.Automation.GROUPS_Updated AddHandler Settings.Groups.Deleted, AddressOf Settings.Automation.GROUPS_Deleted + AddHandler Settings.Automation.PauseDisabled, AddressOf MainFrameObj.PauseButtons.UpdatePauseButtons _UFinit = False Settings.Automation.Start(True) + UpdatePauseButtonsVisibility() GoTo EndFunction FormClosingInvoker: Close() @@ -133,6 +145,7 @@ EndFunction: If Downloader.Working Then _CloseInvoked = True : Downloader.Stop() If ChannelsWorking.Invoke Then _CloseInvoked = True : MyChannels.Stop(False) If SP_Working.Invoke Then _CloseInvoked = True : MySavedPosts.Stop() + MyActivator.DisposeIfReady() Settings.Automation.Stop() If _CloseInvoked Then e.Cancel = True @@ -143,12 +156,14 @@ EndFunction: Downloader.Dispose() MyProgressForm.Dispose() InfoForm.Dispose() - If Not MyMissingPosts Is Nothing Then MyMissingPosts.Dispose() - If Not MyFeed Is Nothing Then MyFeed.Dispose() + MyMissingPosts.DisposeIfReady() + MyFeed.DisposeIfReady() MainFrameObj.ClearNotifications() - If Not MyChannels Is Nothing Then MyChannels.Dispose() - If Not VideoDownloader Is Nothing Then VideoDownloader.Dispose() - If Not MySavedPosts Is Nothing Then MySavedPosts.Dispose() + MainFrameObj.PauseButtons.Dispose() + MyChannels.DisposeIfReady() + VideoDownloader.DisposeIfReady() + MySavedPosts.DisposeIfReady() + MySearch.DisposeIfReady() MyView.Dispose(Settings.Design) Settings.Dispose() Else @@ -176,11 +191,42 @@ CloseResume: If Not _DisableClosingScript And Not _VideoDownloadingMode Then ExecuteCommand(Settings.ClosingCommand) If Not MyMainLOG.IsEmptyString Then SaveLogToFile() End Sub -#Region "Tray" - Private Sub TrayIcon_MouseClick(sender As Object, e As MouseEventArgs) Handles TrayIcon.MouseClick - If e.Button = MouseButtons.Left Then - If Visible Then Hide() Else Show() + Private Sub MainFrame_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown + Dim b As Boolean = True + Select Case e.KeyCode + Case Keys.Insert : BTT_ADD_USER.PerformClick() + Case Keys.Delete : DeleteSelectedUser() + Case Keys.Enter : OpenFolder() + Case Keys.F1 : BTT_VERSION_INFO.PerformClick() + Case Keys.F3 : EditSelectedUser() + Case Keys.F5 : DownloadSelectedUser(DownUserLimits.None, New MyKeyEventArgs(e).IncludeInTheFeed) + Case Keys.F6 : BTT_DOWN_ALL_FULL_KeyClick(Nothing, New MyKeyEventArgs(e)) + Case Else : b = NumGroup(e) + End Select + If Not b And e.Control And e.KeyCode = Keys.F Then MySearch.FormShow() : b = True + If b Then e.Handled = True + End Sub + Private Function NumGroup(ByVal e As KeyEventArgs) As Boolean + Dim GroupExists As Func(Of Integer, Boolean) = Function(i) Settings.Groups.DownloadGroupIfExists(i - 1) + If e.Control And Settings.Groups.Count > 0 Then + Select Case e.KeyCode + Case Keys.D1, Keys.NumPad1 : Return GroupExists(1) + Case Keys.D2, Keys.NumPad2 : Return GroupExists(2) + Case Keys.D3, Keys.NumPad3 : Return GroupExists(3) + Case Keys.D4, Keys.NumPad4 : Return GroupExists(4) + Case Keys.D5, Keys.NumPad5 : Return GroupExists(5) + Case Keys.D6, Keys.NumPad6 : Return GroupExists(6) + Case Keys.D7, Keys.NumPad7 : Return GroupExists(7) + Case Keys.D8, Keys.NumPad8 : Return GroupExists(8) + Case Keys.D9, Keys.NumPad9 : Return GroupExists(9) + End Select End If + Return False + End Function +#End Region +#Region "Form Tray" + Private Sub MyActivator_TrayIconClick(Sender As Object, e As Controls.KeyClick.KeyClickEventArgs) Handles MyActivator.TrayIconClick + If e.Control Then ShowFeed() : e.Handled = True End Sub Private Sub BTT_TRAY_SHOW_HIDE_Click(sender As Object, e As EventArgs) Handles BTT_TRAY_SHOW_HIDE.Click If Visible Then Hide() Else Show() @@ -203,41 +249,7 @@ CloseResume: End If End Function #End Region - Private Sub MainFrame_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown - Dim b As Boolean = True - Select Case e.KeyCode - Case Keys.Insert : BTT_ADD_USER.PerformClick() - Case Keys.Delete : DeleteSelectedUser() - Case Keys.Enter : OpenFolder() - Case Keys.F1 : BTT_VERSION_INFO.PerformClick() - Case Keys.F2 : DownloadVideoByURL() - Case Keys.F3 : EditSelectedUser() - Case Keys.F5 : BTT_DOWN_SELECTED.PerformClick() - Case Keys.F6 : BTT_DOWN_ALL.PerformClick() - Case Else : b = NumGroup(e) - End Select - If b Then e.Handled = True - End Sub - Private Function NumGroup(ByVal e As KeyEventArgs) As Boolean - Dim GroupExists As Func(Of Integer, Boolean) = Function(i) Settings.Groups.DownloadGroupIfExists(i - 1) - If e.Control And Settings.Groups.Count > 0 Then - Select Case e.KeyCode - Case Keys.D1, Keys.NumPad1 : Return GroupExists(1) - Case Keys.D2, Keys.NumPad2 : Return GroupExists(2) - Case Keys.D3, Keys.NumPad3 : Return GroupExists(3) - Case Keys.D4, Keys.NumPad4 : Return GroupExists(4) - Case Keys.D5, Keys.NumPad5 : Return GroupExists(5) - Case Keys.D6, Keys.NumPad6 : Return GroupExists(6) - Case Keys.D7, Keys.NumPad7 : Return GroupExists(7) - Case Keys.D8, Keys.NumPad8 : Return GroupExists(8) - Case Keys.D9, Keys.NumPad9 : Return GroupExists(9) - End Select - End If - Return False - End Function - Private Sub BTT_VERSION_INFO_Click(sender As Object, e As EventArgs) Handles BTT_VERSION_INFO.Click - CheckVersion(True) - End Sub +#Region "List refill, update" Friend Sub RefillList() UserListLoader.Update() GC.Collect() @@ -245,26 +257,7 @@ CloseResume: Private Sub UserListUpdate(ByVal User As IUserData, ByVal Add As Boolean) UserListLoader.UpdateUser(User, Add) End Sub - Private Sub UpdateLabelsGroups() - If Settings.Labels.NewLabelsExists Then - If Settings.Labels.NewLabels.Count > 0 Then - Dim ll As ListViewGroup = Nothing - Dim a As Action = Sub() LIST_PROFILES.Groups.Add(ll) - For Each l$ In Settings.Labels.NewLabels - ll = New ListViewGroup(l, l) - If Not LIST_PROFILES.Groups.Contains(ll) Then - If LIST_PROFILES.InvokeRequired Then LIST_PROFILES.Invoke(a) Else a.Invoke - End If - Next - End If - Settings.Labels.NewLabels.Clear() - End If - End Sub - Private Sub OnUsersAddedHandler(ByVal StartIndex As Integer) - If StartIndex <= Settings.Users.Count - 1 Then - For i% = StartIndex To Settings.Users.Count - 1 : UserListUpdate(Settings.Users(i), True) : Next - End If - End Sub +#End Region #Region "Toolbar buttons" #Region "Settings" Private Sub BTT_SETTINGS_Click(sender As Object, e As EventArgs) Handles BTT_SETTINGS.Click @@ -280,12 +273,18 @@ CloseResume: TrayIcon.Visible = .CloseToTray LIST_PROFILES.ShowGroups = .UseGrouping If f.FeedParametersChanged And Not MyFeed Is Nothing Then MyFeed.UpdateSettings() + UpdateSilentButtons() End If End Using End With End Sub #End Region -#Region "User" +#Region "Add, Edit, Delete, Refresh" + Private Sub OnUsersAddedHandler(ByVal StartIndex As Integer) + If StartIndex <= Settings.Users.Count - 1 Then + For i% = StartIndex To Settings.Users.Count - 1 : UserListUpdate(Settings.Users(i), True) : Next + End If + End Sub Private Sub BTT_ADD_USER_Click(sender As Object, e As EventArgs) Handles BTT_ADD_USER.Click Using f As New UserCreatorForm f.ShowDialog() @@ -340,41 +339,32 @@ CloseResume: Private Sub BTT_REFRESH_Click(sender As Object, e As EventArgs) Handles BTT_REFRESH.Click RefillList() End Sub - Private Sub BTT_SHOW_INFO_Click(sender As Object, e As EventArgs) Handles BTT_SHOW_INFO.Click - ShowInfoForm(True) - End Sub +#End Region +#Region "Info, Feed, Channels, Saved posts" Private Sub BTT_SHOW_INFO_MouseDown(sender As Object, e As MouseEventArgs) Handles BTT_SHOW_INFO.MouseDown If e.Button = MouseButtons.Right Then If MyMissingPosts Is Nothing Then MyMissingPosts = New MissingPostsForm If MyMissingPosts.Visible Then MyMissingPosts.BringToFront() Else MyMissingPosts.Show() + ElseIf e.Button = MouseButtons.Left Then + InfoForm.FormShow() End If End Sub - Private Sub BTT_FEED_Click(sender As Object, e As EventArgs) Handles BTT_FEED.Click + Private Sub ShowFeed() Handles BTT_FEED.Click, BTT_TRAY_FEED_SHOW.Click If MyFeed Is Nothing Then MyFeed = New DownloadFeedForm : AddHandler Downloader.FeedFilesChanged, AddressOf MyFeed.Downloader_FilesChanged If MyFeed.Visible Then MyFeed.BringToFront() Else MyFeed.Show() End Sub - Private Overloads Sub ShowInfoForm() - ShowInfoForm(False) - End Sub - Private Overloads Sub ShowInfoForm(ByVal BringToFrontIfOpen As Boolean) - If InfoForm.Visible Then - If BringToFrontIfOpen Then InfoForm.BringToFront() - Else - InfoForm.Show() - End If - End Sub Private Sub BTT_CHANNELS_Click(sender As Object, e As EventArgs) Handles BTT_CHANNELS.Click If MyChannels Is Nothing Then MyChannels = New ChannelViewForm AddHandler MyChannels.OnUsersAdded, AddressOf OnUsersAddedHandler - AddHandler MyChannels.OnDownloadDone, AddressOf NotificationMessage + AddHandler MyChannels.OnDownloadDone, AddressOf MainFrameObj.ShowNotification End If If MyChannels.Visible Then MyChannels.BringToFront() Else MyChannels.Show() End Sub Private Sub BTT_DOWN_SAVED_Click(sender As Object, e As EventArgs) Handles BTT_DOWN_SAVED.Click If MySavedPosts Is Nothing Then MySavedPosts = New DownloadSavedPostsForm - AddHandler MySavedPosts.DownloadDone, AddressOf NotificationMessage + AddHandler MySavedPosts.DownloadDone, AddressOf MainFrameObj.ShowNotification End If With MySavedPosts If .Visible Then .BringToFront() Else .Show() @@ -382,23 +372,22 @@ CloseResume: End Sub #End Region #Region "Download" - Private Sub BTT_DOWN_SELECTED_Click(sender As Object, e As EventArgs) Handles BTT_DOWN_SELECTED.Click - DownloadSelectedUser(DownUserLimits.None) + Private Sub BTT_DOWN_SELECTED_KeyClick(sender As Object, e As MyKeyEventArgs) Handles BTT_DOWN_SELECTED.KeyClick + DownloadSelectedUser(DownUserLimits.None, e.IncludeInTheFeed) End Sub -#Region "Download all" - Private Sub BTT_DOWN_ALL_Click(sender As Object, e As EventArgs) Handles BTT_DOWN_ALL.Click - Downloader.AddRange(Settings.Users.Where(Function(u) u.ReadyForDownload)) + Private Sub BTT_DOWN_ALL_KeyClick(sender As Object, e As MyKeyEventArgs) Handles BTT_DOWN_ALL.KeyClick + Downloader.AddRange(Settings.Users.Where(Function(u) u.ReadyForDownload And u.Exists), e.IncludeInTheFeed) End Sub - Private Sub BTT_DOWN_SITE_Click(sender As Object, e As EventArgs) Handles BTT_DOWN_SITE.Click - DownloadSiteFull(True) + Private Sub BTT_DOWN_SITE_KeyClick(sender As Object, e As MyKeyEventArgs) Handles BTT_DOWN_SITE.KeyClick + DownloadSiteFull(True, e.IncludeInTheFeed) End Sub - Private Sub BTT_DOWN_ALL_FULL_Click(sender As Object, e As EventArgs) Handles BTT_DOWN_ALL_FULL.Click - Downloader.AddRange(Settings.Users) + Private Sub BTT_DOWN_ALL_FULL_KeyClick(sender As Object, e As MyKeyEventArgs) Handles BTT_DOWN_ALL_FULL.KeyClick + Downloader.AddRange(Settings.Users.Where(Function(u) u.Exists), e.IncludeInTheFeed) End Sub - Private Sub BTT_DOWN_SITE_FULL_Click(sender As Object, e As EventArgs) Handles BTT_DOWN_SITE_FULL.Click - DownloadSiteFull(False) + Private Sub BTT_DOWN_SITE_FULL_KeyClick(sender As Object, e As MyKeyEventArgs) Handles BTT_DOWN_SITE_FULL.KeyClick + DownloadSiteFull(False, e.IncludeInTheFeed) End Sub - Private Sub DownloadSiteFull(ByVal ReadyForDownloadOnly As Boolean) + Private Sub DownloadSiteFull(ByVal ReadyForDownloadOnly As Boolean, ByVal IncludeInTheFeed As Boolean) Using f As New SiteSelectionForm(Settings.LatestDownloadedSites.ValuesList) f.ShowDialog() If f.DialogResult = DialogResult.OK Then @@ -409,54 +398,73 @@ CloseResume: Downloader.AddRange(Settings.Users.SelectMany(Function(ByVal u As IUserData) As IEnumerable(Of IUserData) If u.IsCollection Then Return DirectCast(u, UserDataBind).Collections. - Where(Function(uu) f.SelectedSites.Contains(uu.Site) And + Where(Function(uu) f.SelectedSites.Contains(uu.Site) And u.Exists And (Not ReadyForDownloadOnly Or uu.ReadyForDownload)) - ElseIf f.SelectedSites.Contains(u.Site) And + ElseIf f.SelectedSites.Contains(u.Site) And u.Exists And (Not ReadyForDownloadOnly Or u.ReadyForDownload) Then Return {u} Else Return New IUserData() {} End If - End Function)) + End Function), IncludeInTheFeed) End If End If End Using End Sub -#End Region #Region "Download groups" Private Sub BTT_ADD_NEW_GROUP_Click(sender As Object, e As EventArgs) Handles BTT_ADD_NEW_GROUP.Click Settings.Groups.Add() End Sub Private Sub GROUPS_Added(ByVal Sender As Groups.DownloadGroup) Dim i% = MENU_DOWN_ALL.DropDownItems.IndexOf(BTT_ADD_NEW_GROUP) - Dim a As Action = Sub() MENU_DOWN_ALL.DropDownItems.Insert(i, Sender.GetControl) - If Toolbar_TOP.InvokeRequired Then Toolbar_TOP.Invoke(a) Else a.Invoke + ControlInvoke(Toolbar_TOP, MENU_DOWN_ALL, Sub() MENU_DOWN_ALL.DropDownItems.Insert(i, Sender.GetControl)) End Sub Private Sub GROUPS_Updated(ByVal Sender As Groups.DownloadGroup) Dim i% = MENU_DOWN_ALL.DropDownItems.IndexOf(Sender.GetControl) - Dim a As Action = Sub() MENU_DOWN_ALL.DropDownItems(i).Text = Sender.ToString - If Toolbar_TOP.InvokeRequired Then Toolbar_TOP.Invoke(a) Else a.Invoke + ControlInvoke(Toolbar_TOP, MENU_DOWN_ALL, Sub() MENU_DOWN_ALL.DropDownItems(i).Text = Sender.ToString) End Sub Private Sub GROUPS_Deleted(ByVal Sender As Groups.DownloadGroup) MENU_DOWN_ALL.DropDownItems.Remove(Sender.GetControl) End Sub #End Region + Private Sub BTT_SILENT_MODE_Click(sender As Object, e As EventArgs) Handles BTT_SILENT_MODE.Click, BTT_TRAY_SILENT_MODE.Click + With Settings : .NotificationsSilentMode = Not .NotificationsSilentMode : End With + UpdateSilentButtons() + End Sub + Private Sub UpdateSilentButtons() + With Settings + ControlInvokeFast(Toolbar_TOP, BTT_SILENT_MODE, Sub() BTT_SILENT_MODE.Checked = .NotificationsSilentMode) + ControlInvokeFast(Me, Sub() BTT_TRAY_SILENT_MODE.Checked = .NotificationsSilentMode) + End With + End Sub + Private Sub UpdatePauseButtonsVisibility() + Dim b As Boolean = Settings.Automation.Count > 0 + ControlInvokeFast(Toolbar_TOP, BTT_DOWN_AUTOMATION_PAUSE, Sub() BTT_DOWN_AUTOMATION_PAUSE.Visible = b) + ControlInvokeFast(Me, Sub() BTT_TRAY_PAUSE_AUTOMATION.Visible = b) + End Sub Private Sub BTT_DOWN_AUTOMATION_Click(sender As Object, e As EventArgs) Handles BTT_DOWN_AUTOMATION.Click Using f As New SchedulerEditorForm : f.ShowDialog() : End Using Settings.Automation.Start(False) + UpdatePauseButtonsVisibility() + MainFrameObj.PauseButtons.UpdatePauseButtons() End Sub - Private Sub BTT_DOWN_AUTOMATION_PAUSE_Click(sender As Object, e As EventArgs) Handles BTT_DOWN_AUTOMATION_PAUSE.Click - Settings.Automation.Pause = Not Settings.Automation.Pause - BTT_DOWN_AUTOMATION_PAUSE.Checked = Settings.Automation.Pause + Private Sub BTT_DOWN_AUTOMATION_PAUSE_Click(sender As Object, e As EventArgs) Handles BTT_DOWN_AUTOMATION_PAUSE.Click, BTT_TRAY_PAUSE_AUTOMATION.Click + Dim p As PauseModes = Settings.Automation.Pause + If p = PauseModes.Disabled Then p = PauseModes.Unlimited Else p = PauseModes.Disabled + Settings.Automation.Pause = p + MENU_DOWN_ALL.HideDropDown() + TrayIcon.ContextMenuStrip.Hide() + MainFrameObj.PauseButtons.UpdatePauseButtons() End Sub Private Sub BTT_DOWN_VIDEO_Click(sender As Object, e As EventArgs) Handles BTT_DOWN_VIDEO.Click - DownloadVideoByURL() + VideoDownloader.FormShow() End Sub Private Sub BTT_DOWN_STOP_Click(sender As Object, e As EventArgs) Handles BTT_DOWN_STOP.Click Downloader.Stop() End Sub #End Region #Region "View" +#Region "1 - view mode" Private Sub BTT_VIEW_LARGE_Click(sender As Object, e As EventArgs) Handles BTT_VIEW_LARGE.Click ApplyViewPattern(ViewModes.IconLarge) End Sub @@ -493,7 +501,7 @@ CloseResume: End If End Sub #End Region -#Region "View Site" +#Region "2 - view site" Private Sub BTT_SITE_ALL_Click(sender As Object, e As EventArgs) Handles BTT_SITE_ALL.Click Settings.SelectedSites.Clear() Settings.SelectedSites.Update() @@ -515,7 +523,7 @@ CloseResume: End Using End Sub #End Region -#Region "View menu" +#Region "3 - view filters" Private Sub BTT_SHOW_ALL_Click(sender As Object, e As EventArgs) Handles BTT_SHOW_ALL.Click SetShowButtonsCheckers(ShowingModes.All) End Sub @@ -599,6 +607,8 @@ CloseResume: End If End Using End Function +#End Region +#Region "4 - view dates" Private Sub BTT_SHOW_LIMIT_DATES_NOT_IN_Click(ByVal Sender As ToolStripMenuItem, ByVal e As EventArgs) Handles BTT_SHOW_LIMIT_DATES_NOT.Click, BTT_SHOW_LIMIT_DATES_IN.Click Dim r As Boolean = False @@ -624,25 +634,34 @@ CloseResume: .EndUpdate() End With End Sub - Using f As New FDatePickerForm(Settings.ViewDateFrom, Settings.ViewDateTo) + Using f As New DateTimeSelectionForm(DateTimeSelectionForm.ModesAllDate, Settings.Design) With { + .MyDateStart = Settings.ViewDateFrom, + .MyDateEnd = Settings.ViewDateTo, + .UseDeleteButton = True + } f.ShowDialog() Select Case f.DialogResult - Case DialogResult.Abort : UpSettings(f.DateFrom, f.DateTo, ShowingDates.Off) - Case DialogResult.OK : UpSettings(f.DateFrom, f.DateTo, Sender.Tag) + Case DialogResult.Abort : UpSettings(f.MyDateStart, f.MyDateEnd, ShowingDates.Off) + Case DialogResult.OK : UpSettings(f.MyDateStart, f.MyDateEnd, Sender.Tag) End Select End Using BTT_SHOW_LIMIT_DATES_NOT.Checked = Settings.ViewDateMode.Value = ShowingDates.Not BTT_SHOW_LIMIT_DATES_IN.Checked = Settings.ViewDateMode.Value = ShowingDates.In If r Then RefillList() End Sub +#End Region #End Region Private Sub BTT_LOG_Click(sender As Object, e As EventArgs) Handles BTT_LOG.Click MyMainLOG_ShowForm(Settings.Design,,,, Sub() MainFrameObj.UpdateLogButton()) End Sub + Private Sub BTT_VERSION_INFO_Click(sender As Object, e As EventArgs) Handles BTT_VERSION_INFO.Click + CheckVersion(True) + End Sub Private Sub BTT_DONATE_Click(sender As Object, e As EventArgs) Handles BTT_DONATE.Click Try : Process.Start("https://github.com/AAndyProgram/SCrawler/blob/main/HowToSupport.md") : Catch : End Try End Sub -#Region "List functions" +#End Region +#Region "List handlers" Private _LatestSelected As Integer = -1 Private Sub LIST_PROFILES_SelectedIndexChanged(sender As Object, e As EventArgs) Handles LIST_PROFILES.SelectedIndexChanged Dim a As Action = Sub() @@ -657,16 +676,20 @@ CloseResume: Private Sub LIST_PROFILES_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles LIST_PROFILES.MouseDoubleClick OpenFolder() End Sub +#End Region #Region "Context" - Private Sub BTT_CONTEXT_DOWN_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_DOWN.Click - DownloadSelectedUser(DownUserLimits.None) +#Region "1 - download" + Private Sub BTT_CONTEXT_DOWN_KeyClick(sender As Object, e As MyKeyEventArgs) Handles BTT_CONTEXT_DOWN.KeyClick + DownloadSelectedUser(DownUserLimits.None, e.IncludeInTheFeed) End Sub - Private Sub BTT_CONTEXT_DOWN_LIMITED_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_DOWN_LIMITED.Click - DownloadSelectedUser(DownUserLimits.Number) + Private Sub BTT_CONTEXT_DOWN_LIMITED_KeyClick(sender As Object, e As MyKeyEventArgs) Handles BTT_CONTEXT_DOWN_LIMITED.KeyClick + DownloadSelectedUser(DownUserLimits.Number, e.IncludeInTheFeed) End Sub - Private Sub BTT_CONTEXT_DOWN_DATE_LIMIT_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_DOWN_DATE_LIMIT.Click - DownloadSelectedUser(DownUserLimits.Date) + Private Sub BTT_CONTEXT_DOWN_DATE_LIMIT_KeyClick(sender As Object, e As MyKeyEventArgs) Handles BTT_CONTEXT_DOWN_DATE_LIMIT.KeyClick + DownloadSelectedUser(DownUserLimits.Date, e.IncludeInTheFeed) End Sub +#End Region +#Region "1 - edit, delete, copy" Private Sub BTT_CONTEXT_EDIT_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_EDIT.Click EditSelectedUser() End Sub @@ -676,25 +699,23 @@ CloseResume: Private Sub BTT_CONTEXT_COPY_TO_FOLDER_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_COPY_TO_FOLDER.Click CopyUserData() End Sub +#End Region +#Region "2 - user parameters" Private Sub BTT_CONTEXT_FAV_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_FAV.Click Dim users As List(Of IUserData) = GetSelectedUserArray() - If AskForMassReplace(users, "Favorite") Then - users.ForEach(Sub(u) - u.Favorite = Not u.Favorite - u.UpdateUserInformation() - UserListUpdate(u, False) - End Sub) - End If + If AskForMassReplace(users, "Favorite") Then users.ForEach(Sub(u) + u.Favorite = Not u.Favorite + u.UpdateUserInformation() + UserListUpdate(u, False) + End Sub) End Sub Private Sub BTT_CONTEXT_TEMP_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_TEMP.Click Dim users As List(Of IUserData) = GetSelectedUserArray() - If AskForMassReplace(users, "Temporary") Then - users.ForEach(Sub(u) - u.Temporary = Not u.Temporary - u.UpdateUserInformation() - UserListUpdate(u, False) - End Sub) - End If + If AskForMassReplace(users, "Temporary") Then users.ForEach(Sub(u) + u.Temporary = Not u.Temporary + u.UpdateUserInformation() + UserListUpdate(u, False) + End Sub) End Sub Private Sub BTT_CONTEXT_READY_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_READY.Click Dim users As List(Of IUserData) = GetSelectedUserArray() @@ -768,17 +789,6 @@ CloseResume: "Users' parameters change"}, MsgBoxStyle.Exclamation + MsgBoxStyle.YesNo) = MsgBoxResult.Yes) End Function - Private Sub BTT_CHANGE_IMAGE_Click(sender As Object, e As EventArgs) Handles BTT_CHANGE_IMAGE.Click - Dim user As IUserData = GetSelectedUser() - If Not user Is Nothing Then - Dim f As SFile = SFile.SelectFiles(user.File.CutPath(IIf(user.IsCollection, 2, 1)), False, "Select new user picture", - "Pictures|*.jpeg;*.jpg;*.png;*.webp|GIF|*.gif|All Files|*.*").FirstOrDefault - If Not f.IsEmptyString Then - user.SetPicture(f) - UserListUpdate(user, False) - End If - End If - End Sub Private Sub BTT_CONTEXT_ADD_TO_COL_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_ADD_TO_COL.Click Const MsgTitle$ = "Add users to the collection" If Settings.CollectionsPath.Value.IsEmptyString Then @@ -790,12 +800,13 @@ CloseResume: Dim _col_user As Predicate(Of IUserData) = Function(u) u.IsCollection Dim userCollection As UserDataBind = users.Find(_col_user) Dim _col_name$ = String.Empty + Dim userProvider As IFormatProvider = GetUserListProvider(False) If Not userCollection Is Nothing Then i = users.LongCount(Function(u) _col_user(u)) If i > 1 OrElse i = users.Count OrElse (i = 1 AndAlso MsgBoxE({$"Do you want to add the following users to the [{userCollection.Name}] collection?" & vbCr & - users.Where(Function(u) Not _col_user(u)).ListToString(vbCr), + users.Where(Function(u) Not _col_user(u)).ListToStringE(vbCr, userProvider), MsgTitle}, vbQuestion + vbYesNo) = vbNo) Then _ MsgBoxE({"The collection cannot be added to the collection!", MsgTitle}, MsgBoxStyle.Critical) : Exit Sub _col_name = userCollection.Name @@ -846,10 +857,10 @@ CloseResume: Else Dim m As New MMessage($"The following users have been added to the [{_col_name}] collection:{vbCr}", MsgTitle,, If(__added_users_not.Count > 0, vbExclamation, vbInformation)) - m.Text &= __added_users.ListToString(vbCr) + m.Text &= __added_users.ListToStringE(vbCr, userProvider) If __added_users_not.Count > 0 Then m.Text &= $"{vbNewLine.StringDup(2)}The following users have not been added to the [{_col_name}] collection:{vbCr}" - m.Text &= __added_users_not.ListToString(vbCr) + m.Text &= __added_users_not.ListToStringE(vbCr, userProvider) End If MsgBoxE(m) End If @@ -958,17 +969,37 @@ CloseResume: ErrorsDescriber.Execute(EDP.ShowAllMsg, ex, "Error while moving user") End Try End Sub +#End Region +#Region "3 - change image" + Private Sub BTT_CHANGE_IMAGE_Click(sender As Object, e As EventArgs) Handles BTT_CHANGE_IMAGE.Click + Dim user As IUserData = GetSelectedUser() + If Not user Is Nothing Then + Dim f As SFile = SFile.SelectFiles(user.File.CutPath(IIf(user.IsCollection, 2, 1)), False, "Select new user picture", + "Pictures|*.jpeg;*.jpg;*.png;*.webp|GIF|*.gif|All Files|*.*").FirstOrDefault + If Not f.IsEmptyString Then + user.SetPicture(f) + UserListUpdate(user, False) + End If + End If + End Sub +#End Region +#Region "4 - open folder" Private Sub BTT_CONTEXT_OPEN_PATH_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_OPEN_PATH.Click OpenFolder() End Sub +#End Region +#Region "5 - open site" Private Sub BTT_CONTEXT_OPEN_SITE_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_OPEN_SITE.Click Dim user As IUserData = GetSelectedUser() If Not user Is Nothing Then user.OpenSite() End Sub +#End Region +#Region "6 - information" Private Sub BTT_CONTEXT_INFO_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_INFO.Click Dim user As IUserData = GetSelectedUser() If Not user Is Nothing Then MsgBoxE(DirectCast(user, UserDataBase).GetUserInformation()) End Sub +#End Region Private Sub USER_CONTEXT_VisibleChanged(sender As Object, e As EventArgs) Handles USER_CONTEXT.VisibleChanged Try If USER_CONTEXT.Visible Then @@ -993,9 +1024,66 @@ CloseResume: End Try End Sub #End Region +#Region "Focus user" + Private Overloads Sub FocusUser(ByVal Key As String) + FocusUser(Key, True) + End Sub + Friend Overloads Sub FocusUser(ByVal Key As String, Optional ByVal ActivateMe As Boolean = False) + Dim a As Action = Sub() + Dim i% = LIST_PROFILES.Items.IndexOfKey(Key) + If i < 0 Then + Dim u As IUserData = Settings.GetUser(Key, True) + If Not u Is Nothing Then + UserListUpdate(u, True) + i = LIST_PROFILES.Items.IndexOfKey(u.Key) + End If + End If + If i >= 0 Then + LIST_PROFILES.Select() + LIST_PROFILES.SelectedIndices.Clear() + With LIST_PROFILES.Items(i) : .Selected = True : .Focused = True : End With + LIST_PROFILES.EnsureVisible(i) + If ActivateMe Then + If Visible Then BringToFront() Else Visible = True + End If + End If + End Sub + If LIST_PROFILES.InvokeRequired Then LIST_PROFILES.Invoke(a) Else a.Invoke + End Sub #End Region +#Region "Toolbar bottom" + Private Sub BTT_PR_INFO_Click(sender As Object, e As EventArgs) Handles BTT_PR_INFO.Click + If MyProgressForm.Visible Then MyProgressForm.BringToFront() Else MyProgressForm.Show() + End Sub +#End Region +#Region "Operation providers" + Private OperationsUserListProvider As IFormatProvider = Nothing + Private OperationsUserListProviderCollections As IFormatProvider = Nothing + Private Function GetUserListProvider(ByVal WithCollections As Boolean) As IFormatProvider + If WithCollections Then + If OperationsUserListProviderCollections Is Nothing Then _ + OperationsUserListProviderCollections = New CustomProvider(Function(v, d, p, n, ee) + Dim OutStr$ + With DirectCast(v, IUserData) + If .IsCollection Then + OutStr = $"Collection [{ .Name}]" + Else + OutStr = $"User [{ .Site}] { .Name}" + End If + End With + Return OutStr + End Function) + Return OperationsUserListProviderCollections + Else + If OperationsUserListProvider Is Nothing Then _ + OperationsUserListProvider = New CustomProvider(Function(v, d, p, n, ee) $"[{DirectCast(v, IUserData).Site}] {DirectCast(v, IUserData).Name}") + Return OperationsUserListProvider + End If + End Function +#End Region +#Region "Operations with selected users: modify" Private Function GetSelectedUser() As IUserData - If _LatestSelected >= 0 And _LatestSelected <= LIST_PROFILES.Items.Count - 1 Then + If _LatestSelected.ValueBetween(0, LIST_PROFILES.Items.Count - 1) Then Dim k$ = LIST_PROFILES.Items(_LatestSelected).Name Dim i% = Settings.Users.FindIndex(Function(u) u.Key = k) If i >= 0 Then @@ -1026,29 +1114,84 @@ CloseResume: Return ErrorsDescriber.Execute(EDP.SendInLog + EDP.ReturnValue, ex, "[MainFrame.GetSelectedUserArray]", New List(Of IUserData)) End Try End Function - Private Overloads Sub RemoveUserFromList(ByVal _User As IUserData) - RemoveUserFromList(LIST_PROFILES.Items.IndexOfKey(_User.Key), _User.Key) - End Sub - Private Overloads Sub RemoveUserFromList(ByVal _Index As Integer, ByVal Key As String) - Dim a As Action = Sub() - With LIST_PROFILES - If _Index >= 0 Then - .Items.RemoveAt(_Index) - If Settings.ViewModeIsPicture Then - Dim ImgIndx% - Select Case Settings.ViewMode.Value - Case View.LargeIcon - ImgIndx = .LargeImageList.Images.IndexOfKey(Key) - If ImgIndx >= 0 Then .LargeImageList.Images.RemoveAt(_Index) - Case View.SmallIcon - ImgIndx = .SmallImageList.Images.IndexOfKey(Key) - If ImgIndx >= 0 Then .SmallImageList.Images.RemoveAt(_Index) - End Select - End If - End If - End With - End Sub - If LIST_PROFILES.InvokeRequired Then LIST_PROFILES.Invoke(a) Else a.Invoke + Private Enum DownUserLimits : None : Number : [Date] : End Enum + Private Sub DownloadSelectedUser(ByVal UseLimits As DownUserLimits, Optional ByVal IncludeInTheFeed As Boolean = True) + Const MsgTitle$ = "Download limit" + Dim users As List(Of IUserData) = GetSelectedUserArray() + If users.ListExists Then + Dim limit%? = Nothing + Dim _from As Date? = Nothing + Dim _to As Date? = Nothing + Dim _fromStr$, _toStr$ + If UseLimits = DownUserLimits.Number Then + Do + limit = AConvert(Of Integer)(InputBoxE("Enter top posts limit for downloading:", MsgTitle, 10), AModes.Var, Nothing) + If limit.HasValue Then + Select Case MsgBoxE(New MMessage($"You are set up downloading top [{limit.Value}] posts", MsgTitle, + {"Confirm", "Try again", "Disable limit", "Cancel"}) With {.ButtonsPerRow = 2}).Index + Case 0 : Exit Do + Case 2 : limit = Nothing : Exit Do + Case 3 : GoTo CancelDownloadingOperation + End Select + Else + Select Case MsgBoxE({"You are not set up downloading limit", MsgTitle},,,, {"Confirm", "Try again", "Cancel"}).Index + Case 0 : Exit Do + Case 2 : GoTo CancelDownloadingOperation + End Select + End If + Loop + ElseIf UseLimits = DownUserLimits.Date Then + Do + Using fd As New DateTimeSelectionForm(DateTimeSelectionForm.ModesAllDate, Settings.Design) + fd.ShowDialog() + If fd.DialogResult = DialogResult.OK Then + _from = fd.MyDateStart + _to = fd.MyDateEnd + ElseIf fd.DialogResult = DialogResult.Abort Then + _from = Nothing + _to = Nothing + End If + End Using + If _from.HasValue Or _to.HasValue Then + _fromStr = AConvert(Of String)(_from, ADateTime.Formats.BaseDate, String.Empty) + _toStr = AConvert(Of String)(_to, ADateTime.Formats.BaseDate, String.Empty) + If Not _fromStr.IsEmptyString Then _fromStr = $"FROM [{_fromStr}]" + If Not _toStr.IsEmptyString Then _toStr = $"TO [{_toStr}]" + If Not _toStr.IsEmptyString And Not _fromStr.IsEmptyString Then _fromStr &= " " + Select Case MsgBoxE(New MMessage($"You have set a date limit for downloading posts: {_fromStr}{_toStr}", MsgTitle, + {"Confirm", "Try again", "Disable limit", "Cancel"}) With {.ButtonsPerRow = 2}).Index + Case 0 : Exit Do + Case 2 : _from = Nothing : _to = Nothing : Exit Do + Case 3 : GoTo CancelDownloadingOperation + End Select + Else + Select Case MsgBoxE({"You have not set a date limit", MsgTitle},,,, {"Confirm", "Try again", "Cancel"}).Index + Case 0 : Exit Do + Case 2 : GoTo CancelDownloadingOperation + End Select + End If + Loop + End If + If USER_CONTEXT.Visible Then USER_CONTEXT.Hide() + GoTo ResumeDownloadingOperation +CancelDownloadingOperation: + MsgBoxE("Operation canceled") + Exit Sub +ResumeDownloadingOperation: + Dim uStr$ = If(users.Count = 1, String.Empty, users.ListToStringE(vbNewLine, GetUserListProvider(True))) + Dim fStr$ = $"({IIf(IncludeInTheFeed, "included in", "excluded from")} the feed)" + If users.Count = 1 OrElse MsgBoxE({$"You have selected {users.Count} user profiles" & vbCr & + $"Do you want to download them all{fStr}?{vbNewLine.StringDup(2)}" & + $"Selected users:{vbNewLine}{uStr}", "Multiple users selected"}, + MsgBoxStyle.Question + MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then + users.ForEach(Sub(u) + u.DownloadTopCount = limit + u.DownloadDateFrom = _from + u.DownloadDateTo = _to + End Sub) + Downloader.AddRange(users, IncludeInTheFeed) + End If + End If End Sub Private Sub EditSelectedUser() Dim user As IUserData = GetSelectedUser() @@ -1070,8 +1213,9 @@ CloseResume: Dim users As List(Of IUserData) = GetSelectedUserArray() If users.ListExists Then If USER_CONTEXT.Visible Then USER_CONTEXT.Hide() - Dim ugn As Func(Of IUserData, String) = Function(u) $"{IIf(u.IsCollection, "Collection", "User")}: {u.Name}" - Dim m As New MMessage(users.Select(ugn).ListToString(vbNewLine), "Users deleting", + Dim userProvider As IFormatProvider = GetUserListProvider(True) + Dim ugn As Func(Of IUserData, String) = Function(u) AConvert(Of String)(u, userProvider) + Dim m As New MMessage(users.ListToStringE(vbNewLine, userProvider), "Users deleting", {New MsgBoxButton("Delete and ban") With {.ToolTip = "Users and their data will be deleted and added to the blacklist"}, New MsgBoxButton("Delete user only and ban") With { .ToolTip = "Users will be deleted and added to the blacklist (user data will not be deleted)"}, @@ -1085,6 +1229,7 @@ CloseResume: m.Text = $"The following users ({users.Count}) will be deleted:{vbNewLine}{m.Text}" Dim result% = MsgBoxE(m) If result < 6 Then + Dim IsMultiple As Boolean = users.Count > 1 Dim removedUsers As New List(Of String) Dim keepData As Boolean = Not (result Mod 2) = 0 Dim banUser As Boolean = result < 4 @@ -1096,7 +1241,15 @@ CloseResume: If setReason Then reason = InputBoxE("Enter a deletion reason:", "Deletion reason") For Each user In users If keepData Then - If banUser Then Settings.BlackList.ListAddValue(New UserBan(user.Name, reason), l) : b = True + If banUser Then + If user.IsCollection Then + Settings.BlackList.ListAddList(DirectCast(user, UserDataBind). + Collections.Select(Function(u) New UserBan(u.Name, reason)), l) + Else + Settings.BlackList.ListAddValue(New UserBan(user.Name, reason), l) + End If + b = True + End If If user.IsCollection Then With DirectCast(user, UserDataBind) If .Count > 0 Then .Collections.ForEach(Sub(c) Settings.UsersList.Remove(DirectCast(c, UserDataBase).User)) @@ -1110,7 +1263,7 @@ CloseResume: removedUsers.Add(ugn(user)) user.Dispose() Else - If user.Delete > 0 Then + If user.Delete(IsMultiple) > 0 Then If banUser Then Settings.BlackList.ListAddValue(New UserBan(user.Name, reason), l) : b = True RemoveUserFromList(user) removedUsers.Add(ugn(user)) @@ -1130,8 +1283,8 @@ CloseResume: m.Text = "No one user deleted!" m.Style = MsgBoxStyle.Critical Else - m.Text = $"The following users were deleted:{vbNewLine}{removedUsers.ListToString(vbNewLine)}{vbNewLine.StringDup(2)}" - m.Text &= $"The following users were NOT deleted:{vbNewLine}{leftUsers.ListToString(vbNewLine)}" + m.Text = $"The following users were deleted:{vbNewLine}{removedUsers.ListToStringE(vbNewLine, userProvider)}{vbNewLine.StringDup(2)}" + m.Text &= $"The following users were NOT deleted:{vbNewLine}{leftUsers.ListToStringE(vbNewLine, userProvider)}" m.Style = MsgBoxStyle.Exclamation End If If b Then Settings.UpdateBlackList() @@ -1173,6 +1326,7 @@ CloseResume: If Not _select_path.Invoke Then Exit Sub End If If f.Exists(SFO.Path, False) Then + Dim userProvider As IFormatProvider = GetUserListProvider(True) Settings.LastCopyPath.Value = f Using logger As New TextSaver With {.LogMode = True} Dim m As New MMessage("", MsgTitle,,, {logger}) @@ -1212,10 +1366,10 @@ CloseResume: m.Text = "No users have been copied." Else m.Text = $"The following users have been copied:{vbNewLine}" - m.Text &= __copied_users.ListToString(vbNewLine) + m.Text &= __copied_users.ListToStringE(vbNewLine, userProvider) If __copied_users_not.Count > 0 Then m.Text = $"{vbNewLine.StringDup(2)}The following users have not been copied:{vbNewLine}" - m.Text &= __copied_users_not.ListToString(vbNewLine) + m.Text &= __copied_users_not.ListToStringE(vbNewLine, userProvider) End If End If MsgBoxE(m,, err) @@ -1226,6 +1380,53 @@ CloseResume: ErrorsDescriber.Execute(EDP.LogMessageValue, ex, "Error when trying to copy data") End Try End Sub + Private Sub OpenFolder() + Dim user As IUserData = GetSelectedUser() + If Not user Is Nothing Then user.OpenFolder() + End Sub +#End Region +#Region "Operations with selected users: list" + Private Overloads Sub RemoveUserFromList(ByVal _User As IUserData) + RemoveUserFromList(LIST_PROFILES.Items.IndexOfKey(_User.Key), _User.Key) + End Sub + Private Overloads Sub RemoveUserFromList(ByVal _Index As Integer, ByVal Key As String) + Dim a As Action = Sub() + With LIST_PROFILES + If _Index >= 0 Then + .Items.RemoveAt(_Index) + If Settings.ViewModeIsPicture Then + Dim ImgIndx% + Select Case Settings.ViewMode.Value + Case View.LargeIcon + ImgIndx = .LargeImageList.Images.IndexOfKey(Key) + If ImgIndx >= 0 Then .LargeImageList.Images.RemoveAt(_Index) + Case View.SmallIcon + ImgIndx = .SmallImageList.Images.IndexOfKey(Key) + If ImgIndx >= 0 Then .SmallImageList.Images.RemoveAt(_Index) + End Select + End If + End If + End With + End Sub + If LIST_PROFILES.InvokeRequired Then LIST_PROFILES.Invoke(a) Else a.Invoke + End Sub +#End Region +#Region "Handlers" + Private Sub UpdateLabelsGroups() + If Settings.Labels.NewLabelsExists Then + If Settings.Labels.NewLabels.Count > 0 Then + Dim ll As ListViewGroup = Nothing + Dim a As Action = Sub() LIST_PROFILES.Groups.Add(ll) + For Each l$ In Settings.Labels.NewLabels + ll = New ListViewGroup(l, l) + If Not LIST_PROFILES.Groups.Contains(ll) Then + If LIST_PROFILES.InvokeRequired Then LIST_PROFILES.Invoke(a) Else a.Invoke + End If + Next + End If + Settings.Labels.NewLabels.Clear() + End If + End Sub Friend Sub UserRemovedFromCollection(ByVal User As IUserData) If LIST_PROFILES.Items.Count = 0 OrElse Not LIST_PROFILES.Items.ContainsKey(User.Key) Then UserListUpdate(User, True) End Sub @@ -1234,115 +1435,6 @@ CloseResume: If .Count > 0 AndAlso .ContainsKey(User.Key) Then .RemoveByKey(User.Key) End With End Sub - Private Enum DownUserLimits : None : Number : [Date] : End Enum - Private Sub DownloadSelectedUser(ByVal UseLimits As DownUserLimits) - Const MsgTitle$ = "Download limit" - Dim users As List(Of IUserData) = GetSelectedUserArray() - If users.ListExists Then - Dim limit%? = Nothing - Dim _from As Date? = Nothing - Dim _to As Date? = Nothing - Dim _fromStr$, _toStr$ - If UseLimits = DownUserLimits.Number Then - Do - limit = AConvert(Of Integer)(InputBoxE("Enter top posts limit for downloading:", MsgTitle, 10), AModes.Var, Nothing) - If limit.HasValue Then - Select Case MsgBoxE(New MMessage($"You are set up downloading top [{limit.Value}] posts", MsgTitle, - {"Confirm", "Try again", "Disable limit", "Cancel"}) With {.ButtonsPerRow = 2}).Index - Case 0 : Exit Do - Case 2 : limit = Nothing : Exit Do - Case 3 : GoTo CancelDownloadingOperation - End Select - Else - Select Case MsgBoxE({"You are not set up downloading limit", MsgTitle},,,, {"Confirm", "Try again", "Cancel"}).Index - Case 0 : Exit Do - Case 2 : GoTo CancelDownloadingOperation - End Select - End If - Loop - ElseIf UseLimits = DownUserLimits.Date Then - Do - Using fd As New FDatePickerForm(Nothing, Nothing) - fd.ShowDialog() - If fd.DialogResult = DialogResult.OK Then - _from = fd.DateFrom - _to = fd.DateTo - ElseIf fd.DialogResult = DialogResult.Abort Then - _from = Nothing - _to = Nothing - End If - End Using - If _from.HasValue Or _to.HasValue Then - _fromStr = AConvert(Of String)(_from, ADateTime.Formats.BaseDate, String.Empty) - _toStr = AConvert(Of String)(_to, ADateTime.Formats.BaseDate, String.Empty) - If Not _fromStr.IsEmptyString Then _fromStr = $"FROM [{_fromStr}]" - If Not _toStr.IsEmptyString Then _toStr = $"TO [{_toStr}]" - If Not _toStr.IsEmptyString And Not _fromStr.IsEmptyString Then _fromStr &= " " - Select Case MsgBoxE(New MMessage($"You have set a date limit for downloading posts: {_fromStr}{_toStr}", MsgTitle, - {"Confirm", "Try again", "Disable limit", "Cancel"}) With {.ButtonsPerRow = 2}).Index - Case 0 : Exit Do - Case 2 : _from = Nothing : _to = Nothing : Exit Do - Case 3 : GoTo CancelDownloadingOperation - End Select - Else - Select Case MsgBoxE({"You have not set a date limit", MsgTitle},,,, {"Confirm", "Try again", "Cancel"}).Index - Case 0 : Exit Do - Case 2 : GoTo CancelDownloadingOperation - End Select - End If - - Loop - End If - If USER_CONTEXT.Visible Then USER_CONTEXT.Hide() - GoTo ResumeDownloadingOperation -CancelDownloadingOperation: - MsgBoxE("Operation canceled") - Exit Sub -ResumeDownloadingOperation: - Dim uStr$ = If(users.Count = 1, String.Empty, users.Select(Function(u) u.ToString()).ListToString(vbNewLine)) - If users.Count = 1 OrElse MsgBoxE({$"You have selected {users.Count} user profiles" & vbCr & - $"Do you want to download them all?{vbNewLine.StringDup(2)}" & - $"Selected users:{vbNewLine}{uStr}", "Multiple users selected"}, - MsgBoxStyle.Question + MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then - users.ForEach(Sub(u) - u.DownloadTopCount = limit - u.DownloadDateFrom = _from - u.DownloadDateTo = _to - End Sub) - Downloader.AddRange(users) - End If - End If - End Sub - Private Sub OpenFolder() - Dim user As IUserData = GetSelectedUser() - If Not user Is Nothing Then user.OpenFolder() - End Sub -#End Region - Private Overloads Sub FocusUser(ByVal Key As String) - FocusUser(Key, True) - End Sub - Friend Overloads Sub FocusUser(ByVal Key As String, Optional ByVal ActivateMe As Boolean = False) - Dim a As Action = Sub() - Dim i% = LIST_PROFILES.Items.IndexOfKey(Key) - If i < 0 Then - Dim u As IUserData = Settings.GetUser(Key, True) - If Not u Is Nothing Then - UserListUpdate(u, True) - i = LIST_PROFILES.Items.IndexOfKey(u.Key) - End If - End If - If i >= 0 Then - LIST_PROFILES.Select() - LIST_PROFILES.SelectedIndices.Clear() - With LIST_PROFILES.Items(i) : .Selected = True : .Focused = True : End With - LIST_PROFILES.EnsureVisible(i) - If ActivateMe Then - If Visible Then BringToFront() Else Visible = True - End If - End If - End Sub - If LIST_PROFILES.InvokeRequired Then LIST_PROFILES.Invoke(a) Else a.Invoke - End Sub Friend Sub User_OnUserUpdated(ByVal User As IUserData) UserListUpdate(User, False) End Sub @@ -1362,10 +1454,5 @@ ResumeDownloadingOperation: Dim a As Action = Sub() BTT_DOWN_STOP.Enabled = Value Or Downloader.Working If Toolbar_TOP.InvokeRequired Then Toolbar_TOP.Invoke(a) Else a.Invoke End Sub - Private Sub NotificationMessage(ByVal Message As String) - If Settings.ShowNotifications Then MainFrameObj.ShowNotification(Message) - End Sub - Private Sub BTT_PR_INFO_Click(sender As Object, e As EventArgs) Handles BTT_PR_INFO.Click - If MyProgressForm.Visible Then MyProgressForm.BringToFront() Else MyProgressForm.Show() - End Sub +#End Region End Class \ No newline at end of file diff --git a/SCrawler/MainFrameObjects.vb b/SCrawler/MainFrameObjects.vb index 478c06f..1cdd10d 100644 --- a/SCrawler/MainFrameObjects.vb +++ b/SCrawler/MainFrameObjects.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -10,11 +10,13 @@ Imports SCrawler.API Imports SCrawler.API.Base Imports PersonalUtilities.Tools.Notifications Friend Class MainFrameObjects - Private ReadOnly Property MF As MainFrame + Friend ReadOnly Property MF As MainFrame Private WithEvents Notificator As NotificationsManager + Friend ReadOnly Property PauseButtons As DownloadObjects.AutoDownloaderPauseButtons Friend Sub New(ByRef f As MainFrame) MF = f Notificator = New NotificationsManager + PauseButtons = New DownloadObjects.AutoDownloaderPauseButtons(DownloadObjects.AutoDownloaderPauseButtons.ButtonsPlace.MainFrame) End Sub #Region "Users" Friend Sub FocusUser(ByVal Key As String, Optional ByVal ActivateForm As Boolean = False) @@ -58,14 +60,14 @@ Friend Class MainFrameObjects End Sub #End Region #Region "Notifications" - Friend Overloads Sub ShowNotification(ByVal Message As String) - MF.TrayIcon.ShowBalloonTip(2000, MF.TrayIcon.BalloonTipTitle, Message, ToolTipIcon.Info) + Friend Overloads Sub ShowNotification(ByVal Sender As SettingsCLS.NotificationObjects, ByVal Message As String) + If Settings.ProcessNotification(Sender) Then MF.TrayIcon.ShowBalloonTip(2000, MF.TrayIcon.BalloonTipTitle, Message, ToolTipIcon.Info) End Sub - Friend Overloads Sub ShowNotification(ByVal Message As String, ByVal Title As String) - MF.TrayIcon.ShowBalloonTip(2000, Title, Message, ToolTipIcon.Info) + Friend Overloads Sub ShowNotification(ByVal Sender As SettingsCLS.NotificationObjects, ByVal Message As String, ByVal Title As String) + If Settings.ProcessNotification(Sender) Then MF.TrayIcon.ShowBalloonTip(2000, Title, Message, ToolTipIcon.Info) End Sub - Friend Overloads Sub ShowNotification(ByVal Message As String, ByVal Title As String, ByVal Icon As ToolTipIcon) - MF.TrayIcon.ShowBalloonTip(2000, Title, Message, Icon) + Friend Overloads Sub ShowNotification(ByVal Sender As SettingsCLS.NotificationObjects, ByVal Message As String, ByVal Title As String, ByVal Icon As ToolTipIcon) + If Settings.ProcessNotification(Sender) Then MF.TrayIcon.ShowBalloonTip(2000, Title, Message, Icon) End Sub Friend Sub ClearNotifications() Notificator.Clear() diff --git a/SCrawler/MainMod.vb b/SCrawler/MainMod.vb index 321033a..f70de95 100644 --- a/SCrawler/MainMod.vb +++ b/SCrawler/MainMod.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -8,9 +8,9 @@ ' but WITHOUT ANY WARRANTY Imports PersonalUtilities.Functions.XML.Base Imports PersonalUtilities.Functions.RegularExpressions +Imports PersonalUtilities.Forms.Toolbars Imports PersonalUtilities.Tools Imports PersonalUtilities.Tools.WEB -Imports PersonalUtilities.Forms.Toolbars Imports SCrawler.API Imports SCrawler.API.Base Imports SCrawler.Plugin.Hosts @@ -20,7 +20,7 @@ Friend Module MainMod Friend Const SettingsFolderName As String = "Settings" Friend ReadOnly LinkPattern As RParams = RParams.DMS("[htps:]{0,6}[/]{0,2}(.+)", 1) Friend ReadOnly FilesPattern As RParams = RParams.DM("[^\./]+?\.\w+", 1, EDP.ReturnValue) - Friend Delegate Sub NotificationEventHandler(ByVal Message As String) + Friend Delegate Sub NotificationEventHandler(ByVal Sender As SettingsCLS.NotificationObjects, ByVal Message As String) Friend Const LVI_TempOption As String = "Temp" Friend Const LVI_FavOption As String = "Favorite" Friend Const CannelsLabelName As String = "Channels" @@ -148,18 +148,6 @@ Friend Module MainMod If Not (Not b.IsEmptyString AndAlso b.Length > 4 AndAlso b.StartsWith("http")) Then b = String.Empty Return b End Function - Friend Function GetNewVideoURL() As String - Dim URL$ = InputBoxE("Enter video URL:", "Download video by URL", GetCurrentBuffer()) - If Not URL.IsEmptyString Then Return URL Else Return String.Empty - End Function - Friend Sub DownloadVideoByURL() - If VideoDownloader Is Nothing Then VideoDownloader = New VideosDownloaderForm - If VideoDownloader.Visible Then - VideoDownloader.BringToFront() - Else - VideoDownloader.Show() - End If - End Sub Friend Function DownloadVideoByURL(ByVal URL As String, ByVal AskForPath As Boolean, ByVal Silent As Boolean) As Boolean Dim e As New ErrorsDescriber(Not Silent, Not Silent, True, False) Try @@ -175,8 +163,7 @@ Friend Module MainMod um = Settings(d.HostKey).GetSpecialData(URL, Settings.LatestSavingPath.Value, AskForPath) found = True If um.ListExists Then - If AskForPath And Not um(0).SpecialFolder.IsEmptyString And Not p.Settings.IsMyClass Then _ - Settings.LatestSavingPath.Value = um(0).SpecialFolder + If AskForPath And Not um(0).SpecialFolder.IsEmptyString Then Settings.LatestSavingPath.Value = um(0).SpecialFolder If um(0).State = UserMedia.States.Downloaded Then Return True End If Exit For @@ -209,12 +196,12 @@ Friend Module MainMod If AskForPath OrElse Not f.Exists(SFO.Path, False) Then #Disable Warning BC40000 ff = SFile.SaveAs(f, "Files destination",,,, EDP.ReturnValue) +#Enable Warning If Not ff.IsEmptyString Then f.Path = ff.Path Else f = Nothing End If -#Enable Warning AskForPath = False End If If Not f.IsEmptyString Then diff --git a/SCrawler/My Project/AssemblyInfo.vb b/SCrawler/My Project/AssemblyInfo.vb index 1bed40a..0282539 100644 --- a/SCrawler/My Project/AssemblyInfo.vb +++ b/SCrawler/My Project/AssemblyInfo.vb @@ -13,7 +13,7 @@ Imports System.Runtime.InteropServices - + @@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices ' by using the '*' as shown below: ' - - + + diff --git a/SCrawler/My Project/Resources.Designer.vb b/SCrawler/My Project/Resources.Designer.vb index 5f417d8..e08c57b 100644 --- a/SCrawler/My Project/Resources.Designer.vb +++ b/SCrawler/My Project/Resources.Designer.vb @@ -60,6 +60,36 @@ Namespace My.Resources End Set End Property + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property ApplicationPic_16() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("ApplicationPic_16", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + ''' + Friend ReadOnly Property ArrowDownIcon_Blue_24() As System.Drawing.Icon + Get + Dim obj As Object = ResourceManager.GetObject("ArrowDownIcon_Blue_24", resourceCulture) + Return CType(obj,System.Drawing.Icon) + End Get + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property ArrowDownPic_Blue_24() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("ArrowDownPic_Blue_24", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' @@ -70,6 +100,16 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + ''' + Friend ReadOnly Property BookmarkIcon_32() As System.Drawing.Icon + Get + Dim obj As Object = ResourceManager.GetObject("BookmarkIcon_32", resourceCulture) + Return CType(obj,System.Drawing.Icon) + End Get + End Property + ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' @@ -83,9 +123,9 @@ Namespace My.Resources ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' - Friend ReadOnly Property Delete() As System.Drawing.Bitmap + Friend ReadOnly Property DeletePic_24() As System.Drawing.Bitmap Get - Dim obj As Object = ResourceManager.GetObject("Delete", resourceCulture) + Dim obj As Object = ResourceManager.GetObject("DeletePic_24", resourceCulture) Return CType(obj,System.Drawing.Bitmap) End Get End Property @@ -93,9 +133,9 @@ Namespace My.Resources ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' - Friend ReadOnly Property Folder_32() As System.Drawing.Bitmap + Friend ReadOnly Property FolderPic_32() As System.Drawing.Bitmap Get - Dim obj As Object = ResourceManager.GetObject("Folder_32", resourceCulture) + Dim obj As Object = ResourceManager.GetObject("FolderPic_32", resourceCulture) Return CType(obj,System.Drawing.Bitmap) End Get End Property @@ -103,9 +143,9 @@ Namespace My.Resources ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' - Friend ReadOnly Property GlobeBlue_32() As System.Drawing.Bitmap + Friend ReadOnly Property GlobePic_32() As System.Drawing.Bitmap Get - Dim obj As Object = ResourceManager.GetObject("GlobeBlue_32", resourceCulture) + Dim obj As Object = ResourceManager.GetObject("GlobePic_32", resourceCulture) Return CType(obj,System.Drawing.Bitmap) End Get End Property @@ -113,9 +153,9 @@ Namespace My.Resources ''' ''' Looks up a localized resource of type System.Drawing.Icon similar to (Icon). ''' - Friend ReadOnly Property GroupBy_284() As System.Drawing.Icon + Friend ReadOnly Property GroupByIcon_16() As System.Drawing.Icon Get - Dim obj As Object = ResourceManager.GetObject("GroupBy_284", resourceCulture) + Dim obj As Object = ResourceManager.GetObject("GroupByIcon_16", resourceCulture) Return CType(obj,System.Drawing.Icon) End Get End Property @@ -140,22 +180,12 @@ Namespace My.Resources End Get End Property - ''' - ''' Looks up a localized resource of type System.Drawing.Icon similar to (Icon). - ''' - Friend ReadOnly Property InstagramIcon() As System.Drawing.Icon - Get - Dim obj As Object = ResourceManager.GetObject("InstagramIcon", resourceCulture) - Return CType(obj,System.Drawing.Icon) - End Get - End Property - ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' - Friend ReadOnly Property InstagramPic76() As System.Drawing.Bitmap + Friend ReadOnly Property MessagePic_16() As System.Drawing.Bitmap Get - Dim obj As Object = ResourceManager.GetObject("InstagramPic76", resourceCulture) + Dim obj As Object = ResourceManager.GetObject("MessagePic_16", resourceCulture) Return CType(obj,System.Drawing.Bitmap) End Get End Property @@ -163,9 +193,9 @@ Namespace My.Resources ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' - Friend ReadOnly Property NextPIC2() As System.Drawing.Bitmap + Friend ReadOnly Property OkPic_32() As System.Drawing.Bitmap Get - Dim obj As Object = ResourceManager.GetObject("NextPIC2", resourceCulture) + Dim obj As Object = ResourceManager.GetObject("OkPic_32", resourceCulture) Return CType(obj,System.Drawing.Bitmap) End Get End Property @@ -173,9 +203,9 @@ Namespace My.Resources ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' - Friend ReadOnly Property PastePic32() As System.Drawing.Bitmap + Friend ReadOnly Property PastePic_32() As System.Drawing.Bitmap Get - Dim obj As Object = ResourceManager.GetObject("PastePic32", resourceCulture) + Dim obj As Object = ResourceManager.GetObject("PastePic_32", resourceCulture) Return CType(obj,System.Drawing.Bitmap) End Get End Property @@ -193,9 +223,9 @@ Namespace My.Resources ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' - Friend ReadOnly Property PencilPic_01_16() As System.Drawing.Bitmap + Friend ReadOnly Property PencilPic_16() As System.Drawing.Bitmap Get - Dim obj As Object = ResourceManager.GetObject("PencilPic_01_16", resourceCulture) + Dim obj As Object = ResourceManager.GetObject("PencilPic_16", resourceCulture) Return CType(obj,System.Drawing.Bitmap) End Get End Property @@ -213,9 +243,9 @@ Namespace My.Resources ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' - Friend ReadOnly Property Pin_32() As System.Drawing.Bitmap + Friend ReadOnly Property PinPic_32() As System.Drawing.Bitmap Get - Dim obj As Object = ResourceManager.GetObject("Pin_32", resourceCulture) + Dim obj As Object = ResourceManager.GetObject("PinPic_32", resourceCulture) Return CType(obj,System.Drawing.Bitmap) End Get End Property @@ -223,19 +253,9 @@ Namespace My.Resources ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' - Friend ReadOnly Property PlusPIC() As System.Drawing.Bitmap + Friend ReadOnly Property PlusPic_24() As System.Drawing.Bitmap Get - Dim obj As Object = ResourceManager.GetObject("PlusPIC", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Looks up a localized resource of type System.Drawing.Bitmap. - ''' - Friend ReadOnly Property PrevPIC2() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("PrevPIC2", resourceCulture) + Dim obj As Object = ResourceManager.GetObject("PlusPic_24", resourceCulture) Return CType(obj,System.Drawing.Bitmap) End Get End Property @@ -243,19 +263,9 @@ Namespace My.Resources ''' ''' Looks up a localized resource of type System.Drawing.Icon similar to (Icon). ''' - Friend ReadOnly Property Rainbow() As System.Drawing.Icon + Friend ReadOnly Property RainbowIcon_48() As System.Drawing.Icon Get - Dim obj As Object = ResourceManager.GetObject("Rainbow", resourceCulture) - Return CType(obj,System.Drawing.Icon) - End Get - End Property - - ''' - ''' Looks up a localized resource of type System.Drawing.Icon similar to (Icon). - ''' - Friend ReadOnly Property RedditIcon() As System.Drawing.Icon - Get - Dim obj As Object = ResourceManager.GetObject("RedditIcon", resourceCulture) + Dim obj As Object = ResourceManager.GetObject("RainbowIcon_48", resourceCulture) Return CType(obj,System.Drawing.Icon) End Get End Property @@ -263,9 +273,9 @@ Namespace My.Resources ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' - Friend ReadOnly Property RedditPic512() As System.Drawing.Bitmap + Friend ReadOnly Property RefreshPic_24() As System.Drawing.Bitmap Get - Dim obj As Object = ResourceManager.GetObject("RedditPic512", resourceCulture) + Dim obj As Object = ResourceManager.GetObject("RefreshPic_24", resourceCulture) Return CType(obj,System.Drawing.Bitmap) End Get End Property @@ -273,9 +283,9 @@ Namespace My.Resources ''' ''' Looks up a localized resource of type System.Drawing.Icon similar to (Icon). ''' - Friend ReadOnly Property RedGifsIcon() As System.Drawing.Icon + Friend ReadOnly Property RSSIcon_32() As System.Drawing.Icon Get - Dim obj As Object = ResourceManager.GetObject("RedGifsIcon", resourceCulture) + Dim obj As Object = ResourceManager.GetObject("RSSIcon_32", resourceCulture) Return CType(obj,System.Drawing.Icon) End Get End Property @@ -283,9 +293,9 @@ Namespace My.Resources ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' - Friend ReadOnly Property RedGifsPic32() As System.Drawing.Bitmap + Friend ReadOnly Property RSSPic_512() As System.Drawing.Bitmap Get - Dim obj As Object = ResourceManager.GetObject("RedGifsPic32", resourceCulture) + Dim obj As Object = ResourceManager.GetObject("RSSPic_512", resourceCulture) Return CType(obj,System.Drawing.Bitmap) End Get End Property @@ -293,29 +303,9 @@ Namespace My.Resources ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' - Friend ReadOnly Property Refresh() As System.Drawing.Bitmap + Friend ReadOnly Property ScriptPic_32() As System.Drawing.Bitmap Get - Dim obj As Object = ResourceManager.GetObject("Refresh", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Looks up a localized resource of type System.Drawing.Bitmap. - ''' - Friend ReadOnly Property RSSPic() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("RSSPic", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Looks up a localized resource of type System.Drawing.Bitmap. - ''' - Friend ReadOnly Property ScriptPic32() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("ScriptPic32", resourceCulture) + Dim obj As Object = ResourceManager.GetObject("ScriptPic_32", resourceCulture) Return CType(obj,System.Drawing.Bitmap) End Get End Property @@ -323,9 +313,9 @@ Namespace My.Resources ''' ''' Looks up a localized resource of type System.Drawing.Icon similar to (Icon). ''' - Friend ReadOnly Property SettingsIcon() As System.Drawing.Icon + Friend ReadOnly Property SettingsIcon_48() As System.Drawing.Icon Get - Dim obj As Object = ResourceManager.GetObject("SettingsIcon", resourceCulture) + Dim obj As Object = ResourceManager.GetObject("SettingsIcon_48", resourceCulture) Return CType(obj,System.Drawing.Icon) End Get End Property @@ -353,9 +343,9 @@ Namespace My.Resources ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' - Friend ReadOnly Property StartPic_01_Green_16() As System.Drawing.Bitmap + Friend ReadOnly Property StartPic_Green_16() As System.Drawing.Bitmap Get - Dim obj As Object = ResourceManager.GetObject("StartPic_01_Green_16", resourceCulture) + Dim obj As Object = ResourceManager.GetObject("StartPic_Green_16", resourceCulture) Return CType(obj,System.Drawing.Bitmap) End Get End Property @@ -363,9 +353,9 @@ Namespace My.Resources ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' - Friend ReadOnly Property StopPic32() As System.Drawing.Bitmap + Friend ReadOnly Property StopPic_32() As System.Drawing.Bitmap Get - Dim obj As Object = ResourceManager.GetObject("StopPic32", resourceCulture) + Dim obj As Object = ResourceManager.GetObject("StopPic_32", resourceCulture) Return CType(obj,System.Drawing.Bitmap) End Get End Property @@ -373,21 +363,11 @@ Namespace My.Resources ''' ''' Looks up a localized resource of type System.Drawing.Icon similar to (Icon). ''' - Friend ReadOnly Property TwitterIcon() As System.Drawing.Icon + Friend ReadOnly Property UsersIcon_32() As System.Drawing.Icon Get - Dim obj As Object = ResourceManager.GetObject("TwitterIcon", resourceCulture) + Dim obj As Object = ResourceManager.GetObject("UsersIcon_32", resourceCulture) Return CType(obj,System.Drawing.Icon) End Get End Property - - ''' - ''' Looks up a localized resource of type System.Drawing.Bitmap. - ''' - Friend ReadOnly Property TwitterPic400() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("TwitterPic400", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property End Module End Namespace diff --git a/SCrawler/My Project/Resources.resx b/SCrawler/My Project/Resources.resx index 1711fa5..e3889b7 100644 --- a/SCrawler/My Project/Resources.resx +++ b/SCrawler/My Project/Resources.resx @@ -118,103 +118,97 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - ..\Content\Pictures\DBPic_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Content\Pictures\StarPic_24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Content\Pictures\PrevPIC2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Content\Pictures\TwitterPic400.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Content\Pictures\PicturePic_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Content\Pictures\NextPIC2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Content\Pictures\Folder_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Content\Pictures\PencilPic_01_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Content\Pictures\PlusPIC.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Content\Icons\TwitterIcon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Content\Pictures\SettingsPic_16.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Content\Pictures\Delete.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Content\Pictures\InstagramPic76.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Content\Icons\InstagramIcon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Content\Pictures\GlobeBlue_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Content\Pictures\InfoPic_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Content\Pictures\Refresh.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Content\Pictures\HeartPic_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Content\Icons\RedditIcon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Content\Icons\Rainbow.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Content\Pictures\Pin_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Content\Pictures\RedditPic512.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Content\Pictures\ApplicationPic_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Content\Pictures\BookmarkBlack_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Content\Pictures\StartPic_01_Green_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Content\Pictures\DBPic_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Content\Pictures\ScriptPic32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Content\Pictures\DeletePic_24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Content\Icons\GroupBy_284.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Content\Pictures\FolderPic_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Content\Pictures\GlobePic_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Content\Pictures\HeartPic_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Content\Pictures\InfoPic_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Content\Pictures\MessagePic_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Content\Pictures\OkPic_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Content\Pictures\PastePic_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Content\Pictures\Pause_Blue_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Content\Icons\SettingsIcon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Content\Pictures\PencilPic_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Content\Icons\RedGifsIcon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Content\Pictures\PicturePic_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Content\Pictures\RedGifsPic32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Content\Pictures\PlusPic_24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Content\Pictures\RSSPic.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Content\Pictures\RefreshPic_24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Content\Pictures\StopPic32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Content\Pictures\RSSPic_512.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Content\Pictures\PastePic32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Content\Pictures\ScriptPic_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Content\Pictures\SettingsPic_16.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Content\Pictures\StarPic_24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Content\Pictures\StartPic_Green_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Content\Pictures\StopPic_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Content\Icons\ArrowDownIcon_Blue_24.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Content\Pictures\ArrowDownPic_Blue_24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Content\Icons\BookmarkIcon_32.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Content\Icons\GroupByIcon_16.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Content\Icons\RainbowIcon_48.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Content\Icons\RSSIcon_32.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Content\Icons\SettingsIcon_48.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Content\Icons\UsersIcon_32.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Content\Pictures\PinPic_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a \ No newline at end of file diff --git a/SCrawler/PluginsEnvironment/Attributes/AttributesInternal.vb b/SCrawler/PluginsEnvironment/Attributes/AttributesInternal.vb deleted file mode 100644 index 32c1415..0000000 --- a/SCrawler/PluginsEnvironment/Attributes/AttributesInternal.vb +++ /dev/null @@ -1,12 +0,0 @@ -' Copyright (C) 2022 Andy -' This program is free software: you can redistribute it and/or modify -' it under the terms of the GNU General Public License as published by -' the Free Software Foundation, either version 3 of the License, or -' (at your option) any later version. -' -' This program is distributed in the hope that it will be useful, -' but WITHOUT ANY WARRANTY -Namespace Plugin.Attributes - Friend NotInheritable Class UseClassAsIs : Inherits Attribute - End Class -End Namespace \ No newline at end of file diff --git a/SCrawler/PluginsEnvironment/Hosts/PluginHost.vb b/SCrawler/PluginsEnvironment/Hosts/PluginHost.vb index 70e3321..00ae531 100644 --- a/SCrawler/PluginsEnvironment/Hosts/PluginHost.vb +++ b/SCrawler/PluginsEnvironment/Hosts/PluginHost.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -13,6 +13,7 @@ Imports PersonalUtilities.Functions.XML.Base Imports PersonalUtilities.Tools.WEB.GitHub Namespace Plugin.Hosts Friend Class PluginHost + Friend Const PluginsPath As String = "Plugins\" Friend ReadOnly Property Settings As SettingsHost Friend ReadOnly Property Name As String Get @@ -77,14 +78,17 @@ Namespace Plugin.Hosts Return {New PluginHost(New API.Reddit.SiteSettings, _XML, GlobalPath, _Temp, _Imgs, _Vids), New PluginHost(New API.Twitter.SiteSettings, _XML, GlobalPath, _Temp, _Imgs, _Vids), New PluginHost(New API.Instagram.SiteSettings(_XML, GlobalPath), _XML, GlobalPath, _Temp, _Imgs, _Vids), - New PluginHost(New API.RedGifs.SiteSettings, _XML, GlobalPath, _Temp, _Imgs, _Vids)} + New PluginHost(New API.RedGifs.SiteSettings, _XML, GlobalPath, _Temp, _Imgs, _Vids), + New PluginHost(New API.TikTok.SiteSettings, _XML, GlobalPath, _Temp, _Imgs, _Vids), + New PluginHost(New API.LPSG.SiteSettings, _XML, GlobalPath, _Temp, _Imgs, _Vids), + New PluginHost(New API.XVIDEOS.SiteSettings, _XML, GlobalPath, _Temp, _Imgs, _Vids)} End Function Friend Shared Function GetPluginsHosts(ByRef _XML As XmlFile, ByVal GlobalPath As SFile, ByRef _Temp As XMLValue(Of Boolean), ByRef _Imgs As XMLValue(Of Boolean), ByRef _Vids As XMLValue(Of Boolean)) As IEnumerable(Of PluginHost) Try Dim pList As New List(Of PluginHost) - Dim PluginsDir As SFile = SFile.GetPath($"{Application.StartupPath.CSFilePSN}\Plugins") + Dim PluginsDir As SFile = PluginsPath PluginsDir.Exists(SFO.Path) Dim fList As List(Of SFile) = SFile.GetFiles(PluginsDir, "*.dll",, EDP.ReturnValue).ListIfNothing If fList.Count > 0 Then diff --git a/SCrawler/PluginsEnvironment/Hosts/SettingsHost.vb b/SCrawler/PluginsEnvironment/Hosts/SettingsHost.vb index 99eb0c0..15ed660 100644 --- a/SCrawler/PluginsEnvironment/Hosts/SettingsHost.vb +++ b/SCrawler/PluginsEnvironment/Hosts/SettingsHost.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -61,7 +61,6 @@ Namespace Plugin.Hosts Return IIf(_Key.IsEmptyString, Name, _Key) End Get End Property - Friend ReadOnly Property IsMyClass As Boolean = False Friend ReadOnly Property IsSeparatedTasks As Boolean = False Friend ReadOnly Property IsSavedPostsCompatible As Boolean = False Private ReadOnly _TaskCountDefined As Integer? = Nothing @@ -152,8 +151,6 @@ Namespace Plugin.Hosts For Each a As Attribute In ClsAttr If TypeOf a Is Manifest Then _Key = DirectCast(a, Manifest).GUID - ElseIf TypeOf a Is UseClassAsIs Then - IsMyClass = True ElseIf TypeOf a Is SeparatedTasks Then IsSeparatedTasks = True With DirectCast(a, SeparatedTasks) @@ -290,24 +287,22 @@ Namespace Plugin.Hosts Return s End Function Friend Function GetSpecialData(ByVal URL As String, ByVal Path As SFile, ByVal AskForPath As Boolean) As IEnumerable(Of UserMedia) - If IsMyClass Then - Return DirectCast(Source, SiteSettingsBase).GetSpecialDataF(URL) - Else - Dim um As IEnumerable(Of PluginUserMedia) = Source.GetSpecialData(URL, Path, AskForPath) - If um.ListExists Then - Dim u As New List(Of UserMedia) - For Each d As PluginUserMedia In um : u.Add(New UserMedia(d)) : Next - Return u + Dim um As IEnumerable = Source.GetSpecialData(URL, Path, AskForPath) + If Not um Is Nothing Then + If TypeOf um Is IEnumerable(Of UserMedia) Then + Return um + ElseIf TypeOf um Is IEnumerable(Of PluginUserMedia) Then + Return um.ToObjectsList.ListCast(Of UserMedia)(New ListAddParams With {.Converter = Function(v) New UserMedia(DirectCast(v, PluginUserMedia))}) End If - Return Nothing End If + Return Nothing End Function Friend Function GetInstance(ByVal What As Download, ByVal u As UserInfo, Optional ByVal _LoadUserInformation As Boolean = True, Optional ByVal AttachUserInfo As Boolean = True) As IUserData Dim p As IPluginContentProvider = Source.GetInstance(What) If Not p Is Nothing Then Dim pp As IUserData - If IsMyClass Then pp = p Else pp = New UserDataHost(p) + If TypeOf p Is IUserData Then pp = p Else pp = New UserDataHost(p) pp.SetEnvironment(Me, u, _LoadUserInformation, AttachUserInfo) Return pp Else @@ -347,7 +342,7 @@ Namespace Plugin.Hosts Source.DownloadDone(What) End Sub Private Function ConvertUser(ByVal User As IUserData) As Object - If IsMyClass Then Return User Else Return DirectCast(User, UserDataBase).ExternalPlugin + Return If(DirectCast(User, UserDataBase).ExternalPlugin, User) End Function #End Region End Class diff --git a/SCrawler/PluginsEnvironment/Hosts/UserDataHost.vb b/SCrawler/PluginsEnvironment/Hosts/UserDataHost.vb index 8535e2a..215055e 100644 --- a/SCrawler/PluginsEnvironment/Hosts/UserDataHost.vb +++ b/SCrawler/PluginsEnvironment/Hosts/UserDataHost.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -95,7 +95,8 @@ Namespace Plugin.Hosts End With End If End Sub - Protected Overrides Function DownloadingException(ByVal ex As Exception, ByVal Message As String, Optional ByVal FromPE As Boolean = False) As Integer + Protected Overrides Function DownloadingException(ByVal ex As Exception, ByVal Message As String, Optional ByVal FromPE As Boolean = False, + Optional ByVal EObj As Object = Nothing) As Integer LogError(ex, Message) HasError = True Return 0 diff --git a/SCrawler/RedditIcon.ico b/SCrawler/RedditIcon.ico deleted file mode 100644 index c9ee6a3..0000000 Binary files a/SCrawler/RedditIcon.ico and /dev/null differ diff --git a/SCrawler/SCrawler.vbproj b/SCrawler/SCrawler.vbproj index 17d1a1e..5c55b7b 100644 --- a/SCrawler/SCrawler.vbproj +++ b/SCrawler/SCrawler.vbproj @@ -73,7 +73,7 @@ On - Content\Icons\Rainbow.ico + Content\Icons\RainbowIcon_48.ico true @@ -163,6 +163,12 @@ + + AdditionalSettingsForm.vb + + + Form + OptionsForm.vb @@ -170,6 +176,10 @@ Form + + + + RedditViewSettingsForm.vb @@ -177,35 +187,49 @@ Form + + + + + + + SettingsForm.vb + + + Form + + + ActiveDownloadingProgress.vb Form - - + + AutoDownloaderEditorForm.vb - + Form - + + DownloadFeedForm.vb - + Form - + FeedMedia.vb - + UserControl - + FeedVideo.vb - + UserControl @@ -227,14 +251,15 @@ Form - - + + SchedulerEditorForm.vb - + Form + True @@ -324,12 +349,6 @@ Form - - FDatePickerForm.vb - - - Form - @@ -351,13 +370,20 @@ Settings.settings True - + + True + True + SiteResources.resx + + + Component + @@ -367,21 +393,33 @@ Form + + UserSearchForm.vb + + + Form + + + AdditionalSettingsForm.vb + OptionsForm.vb RedditViewSettingsForm.vb + + SettingsForm.vb + ChannelsStatsForm.vb ChannelViewForm.vb - + AutoDownloaderEditorForm.vb @@ -390,16 +428,16 @@ ActiveDownloadingProgress.vb - + DownloadFeedForm.vb DownloadSavedPostsForm.vb - + FeedMedia.vb - + FeedVideo.vb @@ -408,7 +446,7 @@ MissingPostsForm.vb - + SchedulerEditorForm.vb @@ -429,9 +467,6 @@ UserCreatorForm.vb - - FDatePickerForm.vb - MainFrame.vb @@ -444,9 +479,39 @@ VideosDownloaderForm.vb + + My.Resources + ResXFileCodeGenerator + SiteResources.Designer.vb + + + UserSearchForm.vb + + + + + + + + + + + + + + + + + + + + + + + MyApplicationCodeGenerator @@ -475,28 +540,32 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest - @@ -510,6 +579,7 @@ false + diff --git a/SCrawler/SettingsCLS.vb b/SCrawler/SettingsCLS.vb index 011c3aa..3012f33 100644 --- a/SCrawler/SettingsCLS.vb +++ b/SCrawler/SettingsCLS.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -6,6 +6,7 @@ ' ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY +Imports PersonalUtilities.Functions.Messaging Imports PersonalUtilities.Functions.XML Imports PersonalUtilities.Functions.XML.Base Imports PersonalUtilities.Forms.Controls @@ -21,7 +22,7 @@ Friend Class SettingsCLS : Implements IDisposable Friend Const CookieEncryptKey As String = "SCrawlerCookiesEncryptKeyword" Friend ReadOnly Design As XmlFile Private ReadOnly MyXML As XmlFile - Private ReadOnly OS64 As Boolean + Friend ReadOnly OS64 As Boolean Private ReadOnly FfmpegExists As Boolean Friend ReadOnly FfmpegFile As SFile Friend ReadOnly Property UseM3U8 As Boolean @@ -29,6 +30,7 @@ Friend Class SettingsCLS : Implements IDisposable Return OS64 And FfmpegExists End Get End Property + Private ReadOnly FFMPEGNotification As XMLValue(Of Boolean) Friend ReadOnly Property CachePath As SFile = "_Cache\" Friend ReadOnly Plugins As List(Of PluginHost) Friend ReadOnly Property Users As List(Of IUserData) @@ -41,11 +43,33 @@ Friend Class SettingsCLS : Implements IDisposable Friend ReadOnly Property BlackList As List(Of UserBan) Private ReadOnly BlackListFile As SFile = $"{SettingsFolderName}\BlackList.txt" Private ReadOnly UsersSettingsFile As SFile = $"{SettingsFolderName}\Users.xml" + Private Sub RemoveUnusedPlugins() + Dim f As SFile = PluginHost.PluginsPath + If f.Exists(SFO.Path, False) Then + Dim fpe As SFile = f + fpe.Name = "PersonalUtilities" + fpe.Extension = "dll" + Dim fpp As SFile = fpe + fpp.Name = "SCrawler.PluginProvider" + Dim ff As List(Of SFile) = SFile.GetFiles(f, "*.dll") + If ff.ListExists Then + For i% = ff.Count - 1 To 0 Step -1 + Select Case ff(i).Name + Case "SCrawler.Plugin.LPSG" : If ff(i).Delete Then ff.RemoveAt(i) + Case "SCrawler.Plugin.XVIDEOS" : If ff(i).Delete Then ff.RemoveAt(i) + End Select + Next + If ff.Count > 0 AndAlso ((ff.Count = 2 And ff.Contains(fpe) And ff.Contains(fpp)) Or (ff.Count = 1 And ff.Contains(fpp))) Then _ + fpe.Delete() : fpp.Delete() + End If + End If + End Sub Friend Sub New() + RemoveUnusedPlugins() OS64 = Environment.Is64BitOperatingSystem FfmpegFile = "ffmpeg.exe" FfmpegExists = FfmpegFile.Exists - If OS64 And Not FfmpegExists Then MsgBoxE("[ffmpeg.exe] is missing", vbExclamation) + Design = New XmlFile("Settings\Design.xml", Protector.Modes.All) MyXML = New XmlFile(Nothing) With {.AutoUpdateFile = True} MyXML.BeginUpdate() @@ -55,6 +79,18 @@ Friend Class SettingsCLS : Implements IDisposable Plugins = New List(Of PluginHost) LastCollections = New List(Of String) + FFMPEGNotification = New XMLValue(Of Boolean)("FFMPEGNotification", True, MyXML) + If OS64 And Not FfmpegExists Then + If FFMPEGNotification.Value AndAlso MsgBoxE(New MMessage("[ffmpeg.exe] is missing", "ffmpeg.exe", + {"OK", New MsgBoxButton("Disable notification") With { + .IsDialogResultButton = False, .ToolTip = "Disable ffmpeg missing notification"}}, vbExclamation) With { + .DefaultButton = 0, .CancelButton = 0}) = 1 Then + FFMPEGNotification.Value = False + End If + Else + FFMPEGNotification.Value = True + End If + GlobalPath = New XMLValue(Of SFile)("GlobalPath", New SFile($"{SFile.GetPath(Application.StartupPath).PathWithSeparator}Data\"), MyXML,, New XMLValueBase.ToFilePath) LastCopyPath = New XMLValue(Of SFile)("LastCopyPath",, MyXML,, New XMLValueBase.ToFilePath) @@ -65,12 +101,18 @@ Friend Class SettingsCLS : Implements IDisposable SeparateVideoFolder = New XMLValue(Of Boolean)("SeparateVideoFolder", True, MyXML) CollectionsPath = New XMLValue(Of String)("CollectionsPath", "Collections", MyXML) - Dim n() As String = {"Defaults"} + Dim n() As String = {"Search"} + SearchInName = New XMLValue(Of Boolean)("SearchInName", True, MyXML, n) + SearchInDescription = New XMLValue(Of Boolean)("SearchInDescription", False, MyXML, n) + SearchInLabel = New XMLValue(Of Boolean)("SearchInLabel", False, MyXML, n) + + n = {"Defaults"} DefaultTemporary = New XMLValue(Of Boolean)("Temporary", False, MyXML, n) DefaultDownloadImages = New XMLValue(Of Boolean)("DownloadImages", True, MyXML, n) DefaultDownloadVideos = New XMLValue(Of Boolean)("DownloadVideos", True, MyXML, n) ChangeReadyForDownOnTempChange = New XMLValue(Of Boolean)("ChangeReadyForDownOnTempChange", True, MyXML, n) DownloadNativeImageFormat = New XMLValue(Of Boolean)("DownloadNativeImageFormat", True, MyXML, n) + ReparseMissingInTheRoutine = New XMLValue(Of Boolean)("ReparseMissingInTheRoutine", False, MyXML, n) Plugins.AddRange(PluginHost.GetMyHosts(MyXML, GlobalPath.Value, DefaultTemporary, DefaultDownloadImages, DefaultDownloadVideos)) Dim tmpPluginList As IEnumerable(Of PluginHost) = PluginHost.GetPluginsHosts(MyXML, GlobalPath.Value, DefaultTemporary, @@ -127,6 +169,7 @@ Friend Class SettingsCLS : Implements IDisposable FeedEndless = New XMLValue(Of Boolean)("Endless", True, MyXML, n) FeedAddDateToCaption = New XMLValue(Of Boolean)("AddDateToCaption", True, MyXML, n) FeedAddSessionToCaption = New XMLValue(Of Boolean)("AddSessionToCaption", False, MyXML, n) + FeedStoreSessionsData = New XMLValue(Of Boolean)("StoreSessionsData", True, MyXML, n) n = {"Users"} FromChannelDownloadTop = New XMLValue(Of Integer)("FromChannelDownloadTop", 10, MyXML, n) @@ -149,9 +192,16 @@ Friend Class SettingsCLS : Implements IDisposable ShowNewVersionNotification = New XMLValue(Of Boolean)("ShowNewVersionNotification", True, MyXML) LatestVersion = New XMLValue(Of String)("LatestVersion", String.Empty, MyXML) + n = {"Notifications"} + ShowNotifications = New XMLValue(Of Boolean)("ShowNotifications", True, MyXML, n) + ShowNotifications.ReplaceByValue("ShowNotifications") 'TODELETE: 2022.9.24.0 + ShowNotificationsDownProfiles = New XMLValue(Of Boolean)("Profiles", True, MyXML, n) + ShowNotificationsDownAutoDownloader = New XMLValue(Of Boolean)("AutoDownloader", True, MyXML, n) + ShowNotificationsDownChannels = New XMLValue(Of Boolean)("Channels", True, MyXML, n) + ShowNotificationsDownSavedPosts = New XMLValue(Of Boolean)("SavedPosts", True, MyXML, n) + ExitConfirm = New XMLValue(Of Boolean)("ExitConfirm", True, MyXML) CloseToTray = New XMLValue(Of Boolean)("CloseToTray", True, MyXML) - ShowNotifications = New XMLValue(Of Boolean)("ShowNotifications", True, MyXML) OpenFolderInOtherProgram = New XMLValueAttribute(Of String, Boolean)("OpenFolderInOtherProgram", "Use",,, MyXML) DeleteToRecycleBin = New XMLValue(Of Boolean)("DeleteToRecycleBin", True, MyXML) @@ -375,6 +425,30 @@ Friend Class SettingsCLS : Implements IDisposable End If Return Nothing End Function + Friend Overloads Function GetUser(ByVal User As UserInfo) As IUserData + If Users.Count > 0 Then + Dim i%, ii% + For i = 0 To Users.Count - 1 + With Users(i) + If .IsCollection Then + If User.IncludedInCollection And .CollectionName = User.CollectionName Then + With DirectCast(.Self, UserDataBind) + If .Count > 0 Then + For ii = 0 To .Count - 1 + If DirectCast(.Item(ii), UserDataBase).User.Equals(User) Then Return .Item(ii) + Next + End If + End With + Return Nothing + End If + ElseIf Not User.IncludedInCollection Then + If DirectCast(.Self, UserDataBase).User.Equals(User) Then Return .Self + End If + End With + Next + End If + Return Nothing + End Function #End Region Friend Sub UpdateBlackList() If BlackList.Count > 0 Then @@ -386,8 +460,8 @@ Friend Class SettingsCLS : Implements IDisposable Friend Sub DeleteCachePath() Reddit.ChannelsCollection.ChannelsPathCache.Delete(SFO.Path, SFODelete.None, EDP.None) End Sub - Friend Overloads Function UserExists(ByVal s As String, ByVal UserID As String) As Boolean - Dim UserFinderBase As Predicate(Of IUserData) = Function(user) user.Site = s And user.Name = UserID + Friend Overloads Function UserExists(ByVal UserSite As String, ByVal UserID As String) As Boolean + Dim UserFinderBase As Predicate(Of IUserData) = Function(user) user.Site = UserSite And user.Name = UserID Dim UserFinder As Predicate(Of IUserData) = Function(ByVal user As IUserData) As Boolean If user.IsCollection Then With DirectCast(user, UserDataBind) @@ -442,12 +516,18 @@ Friend Class SettingsCLS : Implements IDisposable Private ReadOnly Property CookiesEncrypted As XMLValue(Of Boolean) Friend ReadOnly Property AddMissingToLog As XMLValue(Of Boolean) Friend ReadOnly Property AddMissingErrorsToLog As XMLValue(Of Boolean) +#Region "Search" + Friend ReadOnly Property SearchInName As XMLValue(Of Boolean) + Friend ReadOnly Property SearchInDescription As XMLValue(Of Boolean) + Friend ReadOnly Property SearchInLabel As XMLValue(Of Boolean) +#End Region #Region "Defaults" Friend ReadOnly Property DefaultTemporary As XMLValue(Of Boolean) Friend ReadOnly Property DefaultDownloadImages As XMLValue(Of Boolean) Friend ReadOnly Property DefaultDownloadVideos As XMLValue(Of Boolean) Friend ReadOnly Property ChangeReadyForDownOnTempChange As XMLValue(Of Boolean) Friend ReadOnly Property DownloadNativeImageFormat As XMLValue(Of Boolean) + Friend ReadOnly Property ReparseMissingInTheRoutine As XMLValue(Of Boolean) #End Region #Region "User data" Friend ReadOnly Property FromChannelDownloadTop As XMLValue(Of Integer) @@ -491,7 +571,7 @@ Friend Class SettingsCLS : Implements IDisposable If _ViewDateFrom.ValueF.Exists Then Return _ViewDateFrom.Value Else Return Nothing End Get Set(ByVal d As Date?) - If Not d.HasValue Then _ViewDateFrom.ValueF = Nothing Else _ViewDateFrom.Value = d.Value + If Not d.HasValue Then _ViewDateFrom.ValueF = Nothing Else _ViewDateFrom.Value = d.Value.Date End Set End Property Private ReadOnly _ViewDateTo As XMLValue(Of Date) @@ -500,7 +580,7 @@ Friend Class SettingsCLS : Implements IDisposable If _ViewDateTo.ValueF.Exists Then Return _ViewDateTo.Value Else Return Nothing End Get Set(ByVal d As Date?) - If Not d.HasValue Then _ViewDateTo.ValueF = Nothing Else _ViewDateTo.Value = d.Value + If Not d.HasValue Then _ViewDateTo.ValueF = Nothing Else _ViewDateTo.Value = d.Value.Date End Set End Property Friend ReadOnly Property ViewDateMode As XMLValue(Of Integer) @@ -527,16 +607,47 @@ Friend Class SettingsCLS : Implements IDisposable Friend ReadOnly Property FeedEndless As XMLValue(Of Boolean) Friend ReadOnly Property FeedAddDateToCaption As XMLValue(Of Boolean) Friend ReadOnly Property FeedAddSessionToCaption As XMLValue(Of Boolean) + Friend ReadOnly Property FeedStoreSessionsData As XMLValue(Of Boolean) #End Region #Region "New version properties" Friend ReadOnly Property CheckUpdatesAtStart As XMLValue(Of Boolean) Friend ReadOnly Property ShowNewVersionNotification As XMLValue(Of Boolean) Friend ReadOnly Property LatestVersion As XMLValue(Of String) #End Region +#Region "Notifications" + Friend Enum NotificationObjects + All + Profiles + AutoDownloader + Channels + SavedPosts + End Enum + Friend ReadOnly Property ProcessNotification(ByVal Sender As NotificationObjects) As Boolean + Get + If Not NotificationsSilentMode And ShowNotifications Then + Select Case Sender + Case NotificationObjects.All : Return ShowNotifications + Case NotificationObjects.Profiles : Return ShowNotificationsDownProfiles + Case NotificationObjects.AutoDownloader : Return ShowNotificationsDownAutoDownloader + Case NotificationObjects.Channels : Return ShowNotificationsDownChannels + Case NotificationObjects.SavedPosts : Return ShowNotificationsDownSavedPosts + Case Else : Return True + End Select + Else + Return False + End If + End Get + End Property + Friend Property NotificationsSilentMode As Boolean = False + Friend ReadOnly Property ShowNotifications As XMLValue(Of Boolean) + Friend ReadOnly Property ShowNotificationsDownProfiles As XMLValue(Of Boolean) + Friend ReadOnly Property ShowNotificationsDownAutoDownloader As XMLValue(Of Boolean) + Friend ReadOnly Property ShowNotificationsDownChannels As XMLValue(Of Boolean) + Friend ReadOnly Property ShowNotificationsDownSavedPosts As XMLValue(Of Boolean) +#End Region #Region "Other program properties" Friend ReadOnly Property ExitConfirm As XMLValue(Of Boolean) Friend ReadOnly Property CloseToTray As XMLValue(Of Boolean) - Friend ReadOnly Property ShowNotifications As XMLValue(Of Boolean) Friend ReadOnly Property OpenFolderInOtherProgram As XMLValueAttribute(Of String, Boolean) Friend ReadOnly Property DeleteToRecycleBin As XMLValue(Of Boolean) Friend ReadOnly Property DeleteMode As SFODelete diff --git a/SCrawler/SiteResources.Designer.vb b/SCrawler/SiteResources.Designer.vb new file mode 100644 index 0000000..cd72662 --- /dev/null +++ b/SCrawler/SiteResources.Designer.vb @@ -0,0 +1,207 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.42000 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Class SiteResources + + Private Shared resourceMan As Global.System.Resources.ResourceManager + + Private Shared resourceCulture As Global.System.Globalization.CultureInfo + + _ + Friend Sub New() + MyBase.New + End Sub + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend Shared ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("SCrawler.SiteResources", GetType(SiteResources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Shared Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + ''' + Friend Shared ReadOnly Property InstagramIcon_32() As System.Drawing.Icon + Get + Dim obj As Object = ResourceManager.GetObject("InstagramIcon_32", resourceCulture) + Return CType(obj,System.Drawing.Icon) + End Get + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend Shared ReadOnly Property InstagramPic_76() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("InstagramPic_76", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + ''' + Friend Shared ReadOnly Property LPSGIcon_48() As System.Drawing.Icon + Get + Dim obj As Object = ResourceManager.GetObject("LPSGIcon_48", resourceCulture) + Return CType(obj,System.Drawing.Icon) + End Get + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend Shared ReadOnly Property LPSGPic_32() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("LPSGPic_32", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + ''' + Friend Shared ReadOnly Property RedditIcon_128() As System.Drawing.Icon + Get + Dim obj As Object = ResourceManager.GetObject("RedditIcon_128", resourceCulture) + Return CType(obj,System.Drawing.Icon) + End Get + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend Shared ReadOnly Property RedditPic_512() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("RedditPic_512", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + ''' + Friend Shared ReadOnly Property RedGifsIcon_32() As System.Drawing.Icon + Get + Dim obj As Object = ResourceManager.GetObject("RedGifsIcon_32", resourceCulture) + Return CType(obj,System.Drawing.Icon) + End Get + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend Shared ReadOnly Property RedGifsPic_32() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("RedGifsPic_32", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + ''' + Friend Shared ReadOnly Property TikTokIcon_32() As System.Drawing.Icon + Get + Dim obj As Object = ResourceManager.GetObject("TikTokIcon_32", resourceCulture) + Return CType(obj,System.Drawing.Icon) + End Get + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend Shared ReadOnly Property TikTokPic_192() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("TikTokPic_192", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + ''' + Friend Shared ReadOnly Property TwitterIcon_32() As System.Drawing.Icon + Get + Dim obj As Object = ResourceManager.GetObject("TwitterIcon_32", resourceCulture) + Return CType(obj,System.Drawing.Icon) + End Get + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend Shared ReadOnly Property TwitterPic_400() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("TwitterPic_400", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + ''' + Friend Shared ReadOnly Property XvideosIcon_48() As System.Drawing.Icon + Get + Dim obj As Object = ResourceManager.GetObject("XvideosIcon_48", resourceCulture) + Return CType(obj,System.Drawing.Icon) + End Get + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend Shared ReadOnly Property XvideosPic_32() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("XvideosPic_32", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + End Class +End Namespace diff --git a/SCrawler/SiteResources.resx b/SCrawler/SiteResources.resx new file mode 100644 index 0000000..74a01bc --- /dev/null +++ b/SCrawler/SiteResources.resx @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Content\Icons\SiteIcons\InstagramIcon_32.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Content\Pictures\SitePictures\InstagramPic_76.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Content\Icons\SiteIcons\LPSGIcon_48.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Content\Pictures\SitePictures\LPSGPic_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Content\Icons\SiteIcons\RedditIcon_128.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Content\Pictures\SitePictures\RedditPic_512.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Content\Icons\SiteIcons\RedGifsIcon_32.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Content\Pictures\SitePictures\RedGifsPic_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Content\Icons\SiteIcons\TikTokIcon_32.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Content\Pictures\SitePictures\TikTokPic_192.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Content\Icons\SiteIcons\TwitterIcon_32.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Content\Pictures\SitePictures\TwitterPic_400.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Content\Icons\SiteIcons\XvideosIcon_48.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Content\Pictures\SitePictures\XvideosPic_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/SCrawler/ToolStripKeysButton.vb b/SCrawler/ToolStripKeysButton.vb new file mode 100644 index 0000000..ccd1378 --- /dev/null +++ b/SCrawler/ToolStripKeysButton.vb @@ -0,0 +1,64 @@ +' Copyright (C) 2023 Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY +Imports System.ComponentModel +Imports PersonalUtilities.Forms.Controls.KeyClick +Public Class ToolStripKeyMenuItem : Inherits ToolStripMenuItemKeyClick + Public Sub New() + MyEventArgs = New MyKeyEventArgs + End Sub + Public Sub New(ByVal Text As String, ByVal Image As Image) + MyBase.New(Text, Image) + MyEventArgs = New MyKeyEventArgs + End Sub + Friend Const FeedToolTipText As String = "Click: download, include in the feed." & vbCr & "Ctrl+Click: download, exclude from feed." + Private _AddFeedText As Boolean = True + Public Property AddFeedText As Boolean + Get + Return _AddFeedText + End Get + Set(ByVal _AddFeedText As Boolean) + Me._AddFeedText = _AddFeedText + ToolTipText = _ToolTipTextOriginal + End Set + End Property + Protected _ToolTipTextOriginal As String = String.Empty + Public Overloads Property ToolTipText As String + Get + Return _ToolTipTextOriginal + End Get + Set(ByVal t As String) + _ToolTipTextOriginal = t + If AddFeedText Then + If _ToolTipTextOriginal.IsEmptyString Then + MyBase.ToolTipText = FeedToolTipText + Else + MyBase.ToolTipText = $"{_ToolTipTextOriginal}{vbCr}{FeedToolTipText}" + End If + Else + MyBase.ToolTipText = _ToolTipTextOriginal + End If + End Set + End Property +End Class +Public Class MyKeyEventArgs : Inherits KeyClickEventArgs + Public Property IncludeInTheFeed As Boolean + Get + Return Not _Control + End Get + Set(ByVal Included As Boolean) + _Control = Not Included + End Set + End Property + Public Sub New() + MyBase.New() + End Sub + Public Sub New(ByVal e As KeyEventArgs) + MyBase.New(e) + End Sub +End Class \ No newline at end of file diff --git a/SCrawler/UserInfo.vb b/SCrawler/UserInfo.vb index 3adfde2..191225f 100644 --- a/SCrawler/UserInfo.vb +++ b/SCrawler/UserInfo.vb @@ -1,4 +1,4 @@ -' Copyright (C) 2022 Andy +' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or @@ -14,12 +14,15 @@ Imports SCrawler.Plugin.Hosts Imports DownOptions = SCrawler.Plugin.ISiteSettings.Download Partial Friend Module MainMod Friend Structure UserInfo : Implements IComparable(Of UserInfo), IEquatable(Of UserInfo), ICloneable, IEContainerProvider +#Region "XML Names" Friend Const Name_Site As String = "Site" Friend Const Name_Plugin As String = "Plugin" Friend Const Name_Collection As String = "Collection" Friend Const Name_Merged As String = "Merged" Friend Const Name_IsChannel As String = "IsChannel" Friend Const Name_SpecialPath As String = "SpecialPath" + Friend Const Name_UserNode As String = "User" +#End Region Friend Name As String Friend Site As String Friend Plugin As String @@ -59,7 +62,6 @@ Partial Friend Module MainMod Merged = x.Attribute(Name_Merged).Value.FromXML(Of Boolean)(False) SpecialPath = SFile.GetPath(x.Attribute(Name_SpecialPath).Value) IsChannel = x.Attribute(Name_IsChannel).Value.FromXML(Of Boolean)(False) - 'UpdateUserFile() End Sub Friend Sub New(ByVal c As Reddit.Channel) Name = c.Name @@ -109,13 +111,13 @@ Partial Friend Module MainMod End If End If End Function - Friend Function GetContainer(Optional ByVal e As ErrorsDescriber = Nothing) As EContainer Implements IEContainerProvider.ToEContainer - Return New EContainer("User", Name, {New EAttribute(Name_Site, Site), - New EAttribute(Name_Plugin, Plugin), - New EAttribute(Name_Collection, CollectionName), - New EAttribute(Name_Merged, Merged.BoolToInteger), - New EAttribute(Name_IsChannel, IsChannel.BoolToInteger), - New EAttribute(Name_SpecialPath, SpecialPath.PathWithSeparator)}) + Friend Function ToEContainer(Optional ByVal e As ErrorsDescriber = Nothing) As EContainer Implements IEContainerProvider.ToEContainer + Return New EContainer(Name_UserNode, Name, {New EAttribute(Name_Site, Site), + New EAttribute(Name_Plugin, Plugin), + New EAttribute(Name_Collection, CollectionName), + New EAttribute(Name_Merged, Merged.BoolToInteger), + New EAttribute(Name_IsChannel, IsChannel.BoolToInteger), + New EAttribute(Name_SpecialPath, SpecialPath.PathWithSeparator)}) End Function Friend Function CompareTo(ByVal Other As UserInfo) As Integer Implements IComparable(Of UserInfo).CompareTo If Site = Other.Site Then diff --git a/SCrawler/UserSearchForm.Designer.vb b/SCrawler/UserSearchForm.Designer.vb new file mode 100644 index 0000000..408d6fc --- /dev/null +++ b/SCrawler/UserSearchForm.Designer.vb @@ -0,0 +1,166 @@ +' Copyright (C) 2023 Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY + +Partial Friend Class UserSearchForm : Inherits System.Windows.Forms.Form + + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + Private components As System.ComponentModel.IContainer + + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container() + Dim TP_MAIN As System.Windows.Forms.TableLayoutPanel + Dim TP_OPTIONS As System.Windows.Forms.TableLayoutPanel + Dim TT_MAIN As System.Windows.Forms.ToolTip + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(UserSearchForm)) + Me.TXT_SEARCH = New System.Windows.Forms.RichTextBox() + Me.LIST_SEARCH = New System.Windows.Forms.ListBox() + Me.CH_SEARCH_IN_DESCR = New System.Windows.Forms.CheckBox() + Me.CH_SEARCH_IN_NAME = New System.Windows.Forms.CheckBox() + Me.CH_SEARCH_IN_LABEL = New System.Windows.Forms.CheckBox() + Me.CH_LEAVE_OPEN = New System.Windows.Forms.CheckBox() + TP_MAIN = New System.Windows.Forms.TableLayoutPanel() + TP_OPTIONS = New System.Windows.Forms.TableLayoutPanel() + TT_MAIN = New System.Windows.Forms.ToolTip(Me.components) + TP_MAIN.SuspendLayout() + TP_OPTIONS.SuspendLayout() + Me.SuspendLayout() + ' + 'TP_MAIN + ' + TP_MAIN.ColumnCount = 1 + TP_MAIN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + TP_MAIN.Controls.Add(Me.TXT_SEARCH, 0, 0) + TP_MAIN.Controls.Add(Me.LIST_SEARCH, 0, 1) + TP_MAIN.Controls.Add(TP_OPTIONS, 0, 2) + TP_MAIN.Dock = System.Windows.Forms.DockStyle.Fill + TP_MAIN.Location = New System.Drawing.Point(0, 0) + TP_MAIN.Name = "TP_MAIN" + TP_MAIN.RowCount = 3 + TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 50.0!)) + TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 56.0!)) + TP_MAIN.Size = New System.Drawing.Size(334, 311) + TP_MAIN.TabIndex = 0 + ' + 'TXT_SEARCH + ' + Me.TXT_SEARCH.Dock = System.Windows.Forms.DockStyle.Fill + Me.TXT_SEARCH.Location = New System.Drawing.Point(1, 1) + Me.TXT_SEARCH.Margin = New System.Windows.Forms.Padding(1) + Me.TXT_SEARCH.Name = "TXT_SEARCH" + Me.TXT_SEARCH.Size = New System.Drawing.Size(332, 48) + Me.TXT_SEARCH.TabIndex = 0 + Me.TXT_SEARCH.Text = "" + ' + 'LIST_SEARCH + ' + Me.LIST_SEARCH.Dock = System.Windows.Forms.DockStyle.Fill + Me.LIST_SEARCH.FormattingEnabled = True + Me.LIST_SEARCH.Location = New System.Drawing.Point(1, 51) + Me.LIST_SEARCH.Margin = New System.Windows.Forms.Padding(1) + Me.LIST_SEARCH.Name = "LIST_SEARCH" + Me.LIST_SEARCH.Size = New System.Drawing.Size(332, 203) + Me.LIST_SEARCH.TabIndex = 1 + ' + 'TP_OPTIONS + ' + TP_OPTIONS.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single] + TP_OPTIONS.ColumnCount = 2 + TP_OPTIONS.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + TP_OPTIONS.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + TP_OPTIONS.Controls.Add(Me.CH_SEARCH_IN_DESCR, 1, 0) + TP_OPTIONS.Controls.Add(Me.CH_SEARCH_IN_NAME, 0, 0) + TP_OPTIONS.Controls.Add(Me.CH_SEARCH_IN_LABEL, 0, 1) + TP_OPTIONS.Controls.Add(Me.CH_LEAVE_OPEN, 1, 1) + TP_OPTIONS.Dock = System.Windows.Forms.DockStyle.Fill + TP_OPTIONS.Location = New System.Drawing.Point(3, 258) + TP_OPTIONS.Name = "TP_OPTIONS" + TP_OPTIONS.RowCount = 2 + TP_OPTIONS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + TP_OPTIONS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + TP_OPTIONS.Size = New System.Drawing.Size(328, 50) + TP_OPTIONS.TabIndex = 2 + ' + 'CH_SEARCH_IN_DESCR + ' + Me.CH_SEARCH_IN_DESCR.AutoSize = True + Me.CH_SEARCH_IN_DESCR.Dock = System.Windows.Forms.DockStyle.Fill + Me.CH_SEARCH_IN_DESCR.Location = New System.Drawing.Point(167, 4) + Me.CH_SEARCH_IN_DESCR.Name = "CH_SEARCH_IN_DESCR" + Me.CH_SEARCH_IN_DESCR.Size = New System.Drawing.Size(157, 17) + Me.CH_SEARCH_IN_DESCR.TabIndex = 2 + Me.CH_SEARCH_IN_DESCR.Text = "Search in description" + TT_MAIN.SetToolTip(Me.CH_SEARCH_IN_DESCR, "Search also in the description") + Me.CH_SEARCH_IN_DESCR.UseVisualStyleBackColor = True + ' + 'CH_SEARCH_IN_NAME + ' + Me.CH_SEARCH_IN_NAME.AutoSize = True + Me.CH_SEARCH_IN_NAME.Dock = System.Windows.Forms.DockStyle.Fill + Me.CH_SEARCH_IN_NAME.Location = New System.Drawing.Point(4, 4) + Me.CH_SEARCH_IN_NAME.Name = "CH_SEARCH_IN_NAME" + Me.CH_SEARCH_IN_NAME.Size = New System.Drawing.Size(156, 17) + Me.CH_SEARCH_IN_NAME.TabIndex = 3 + Me.CH_SEARCH_IN_NAME.Text = "Search in name" + Me.CH_SEARCH_IN_NAME.UseVisualStyleBackColor = True + ' + 'CH_SEARCH_IN_LABEL + ' + Me.CH_SEARCH_IN_LABEL.AutoSize = True + Me.CH_SEARCH_IN_LABEL.Dock = System.Windows.Forms.DockStyle.Fill + Me.CH_SEARCH_IN_LABEL.Location = New System.Drawing.Point(4, 28) + Me.CH_SEARCH_IN_LABEL.Name = "CH_SEARCH_IN_LABEL" + Me.CH_SEARCH_IN_LABEL.Size = New System.Drawing.Size(156, 18) + Me.CH_SEARCH_IN_LABEL.TabIndex = 4 + Me.CH_SEARCH_IN_LABEL.Text = "Search in labels" + Me.CH_SEARCH_IN_LABEL.UseVisualStyleBackColor = True + ' + 'CH_LEAVE_OPEN + ' + Me.CH_LEAVE_OPEN.AutoSize = True + Me.CH_LEAVE_OPEN.Dock = System.Windows.Forms.DockStyle.Fill + Me.CH_LEAVE_OPEN.Location = New System.Drawing.Point(167, 28) + Me.CH_LEAVE_OPEN.Name = "CH_LEAVE_OPEN" + Me.CH_LEAVE_OPEN.Size = New System.Drawing.Size(157, 18) + Me.CH_LEAVE_OPEN.TabIndex = 5 + Me.CH_LEAVE_OPEN.Text = "Leave open" + TT_MAIN.SetToolTip(Me.CH_LEAVE_OPEN, "Leave the form open after double clicking on the found user") + Me.CH_LEAVE_OPEN.UseVisualStyleBackColor = True + ' + 'UserSearchForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(334, 311) + Me.Controls.Add(TP_MAIN) + Me.Icon = Global.SCrawler.My.Resources.UsersIcon_32 + Me.KeyPreview = True + Me.MinimumSize = New System.Drawing.Size(250, 250) + Me.Name = "UserSearchForm" + Me.Text = "Search users" + TP_MAIN.ResumeLayout(False) + TP_OPTIONS.ResumeLayout(False) + TP_OPTIONS.PerformLayout() + Me.ResumeLayout(False) + End Sub + Private WithEvents TXT_SEARCH As RichTextBox + Private WithEvents LIST_SEARCH As ListBox + Private WithEvents CH_SEARCH_IN_DESCR As CheckBox + Private WithEvents CH_SEARCH_IN_NAME As CheckBox + Private WithEvents CH_SEARCH_IN_LABEL As CheckBox + Private WithEvents CH_LEAVE_OPEN As CheckBox +End Class \ No newline at end of file diff --git a/SCrawler/UserSearchForm.resx b/SCrawler/UserSearchForm.resx new file mode 100644 index 0000000..8abb5c0 --- /dev/null +++ b/SCrawler/UserSearchForm.resx @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + False + + + False + + + False + + + + 17, 17 + + \ No newline at end of file diff --git a/SCrawler/UserSearchForm.vb b/SCrawler/UserSearchForm.vb new file mode 100644 index 0000000..92dc7bf --- /dev/null +++ b/SCrawler/UserSearchForm.vb @@ -0,0 +1,166 @@ +' Copyright (C) 2023 Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY +Imports System.ComponentModel +Imports PersonalUtilities.Forms +Imports SCrawler.API +Imports SCrawler.API.Base +Friend Class UserSearchForm + Private ReadOnly MyView As FormView + Private ReadOnly Results As List(Of SearchResult) + Private ReadOnly RLP As New ListAddParams(LAP.NotContainsOnly) + Private _UFInit As Boolean = True + Private Structure SearchResult : Implements IComparable(Of SearchResult) + Friend Enum Modes : URL : Name : Description : Label : End Enum + Friend ReadOnly Key As String + Friend ReadOnly Text As String + Friend ReadOnly IsCollection As Boolean + Friend ReadOnly Mode As Modes + Friend Sub New(ByVal User As IUserData, ByVal Mode As Modes) + Key = User.Key + IsCollection = User.IsCollection + Text = $"[{IIf(IsCollection, "C", "U")}] " + If IsCollection Then + Text &= $"[{User.CollectionName}] " + Else + If User.IncludedInCollection Then Text &= $"[{User.CollectionName}] " + Text &= $"[{User.Site}] [{User.Name}]" + End If + Me.Mode = Mode + End Sub + Private Function CompareTo(ByVal Other As SearchResult) As Integer Implements IComparable(Of SearchResult).CompareTo + If CInt(Mode).CompareTo(CInt(Other.Mode)) = 0 Then + Return IsCollection.CompareTo(Other.IsCollection) + Else + Return CInt(Mode).CompareTo(CInt(Other.Mode)) = 0 + End If + End Function + Public Overrides Function Equals(ByVal Obj As Object) As Boolean + With DirectCast(Obj, SearchResult) : Return Key = .Key And Mode = .Mode : End With + End Function + End Structure + Public Sub New() + InitializeComponent() + Results = New List(Of SearchResult) + MyView = New FormView(Me) + MyView.Import(Settings.Design) + End Sub + Private Sub UserSearchForm_Load(sender As Object, e As EventArgs) Handles Me.Load + MyView.SetFormSize() + CH_SEARCH_IN_NAME.Checked = Settings.SearchInName + CH_SEARCH_IN_DESCR.Checked = Settings.SearchInDescription + CH_SEARCH_IN_LABEL.Checked = Settings.SearchInLabel + _UFInit = False + End Sub + Private Sub UserSearchForm_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing + e.Cancel = True + Hide() + End Sub + Private Sub UserSearchForm_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown + If e.KeyCode = Keys.Escape Then Hide() : e.Handled = True + End Sub + Private Sub UserSearchForm_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed + Results.Clear() + End Sub + Private Sub TXT_SEARCH_TextChanged(sender As Object, e As EventArgs) Handles TXT_SEARCH.TextChanged + SearchUser() + End Sub + Private Sub TXT_SEARCH_KeyDown(sender As Object, e As KeyEventArgs) Handles TXT_SEARCH.KeyDown + If e.KeyCode = Keys.Enter And Not e.Shift Then SearchUser() : e.Handled = True + End Sub + Private Sub LIST_SEARCH_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles LIST_SEARCH.MouseDoubleClick + FocusUser() + End Sub + Private Sub LIST_SEARCH_KeyDown(sender As Object, e As KeyEventArgs) Handles LIST_SEARCH.KeyDown + If e.KeyCode = Keys.Enter Then FocusUser() : e.Handled = True + End Sub + Private Sub CH_SEARCH_IN_NAME_CheckedChanged(sender As Object, e As EventArgs) Handles CH_SEARCH_IN_NAME.CheckedChanged + If Not _UFInit Then Settings.SearchInName.Value = CH_SEARCH_IN_NAME.Checked + End Sub + Private Sub CH_SEARCH_IN_DESCR_CheckedChanged(sender As Object, e As EventArgs) Handles CH_SEARCH_IN_DESCR.CheckedChanged + If Not _UFInit Then Settings.SearchInDescription.Value = CH_SEARCH_IN_DESCR.Checked + End Sub + Private Sub CH_SEARCH_IN_LABEL_CheckedChanged(sender As Object, e As EventArgs) Handles CH_SEARCH_IN_LABEL.CheckedChanged + If Not _UFInit Then Settings.SearchInLabel.Value = CH_SEARCH_IN_LABEL.Checked + End Sub + Private Sub SearchUser() + Try + LIST_SEARCH.BeginUpdate() + ControlInvokeFast(LIST_SEARCH, Sub() LIST_SEARCH.Items.Clear()) + Results.Clear() + Dim t$ = TXT_SEARCH.Text.Trim + With Settings + If Not t.IsEmptyString And .Users.Count > 0 Then + Dim i% + Dim s As Plugin.ExchangeOptions = Nothing + Dim cu As Boolean = False + Dim __descr As Boolean = CH_SEARCH_IN_DESCR.Checked + Dim __name As Boolean = CH_SEARCH_IN_NAME.Checked + Dim __lbl As Boolean = CH_SEARCH_IN_LABEL.Checked + Dim _CheckUrl As Action(Of IUserData) = Sub(ByVal u As IUserData) + If cu AndAlso ((u.Site = s.SiteName Or u.HOST.Key = s.HostKey) And u.Name.ToLower = s.UserName) Then _ + Results.ListAddValue(New SearchResult(u, SearchResult.Modes.URL), RLP) + End Sub + Dim _CheckDescr As Action(Of IUserData) = Sub(ByVal u As IUserData) + If __descr AndAlso Not u.Description.IsEmptyString AndAlso + u.Description.Contains(t) Then _ + Results.ListAddValue(New SearchResult(u, SearchResult.Modes.Description), RLP) + End Sub + Dim _LabelPredicate As Predicate(Of String) = Function(l) l.ToLower.Contains(t) + Dim _CheckLabels As Action(Of IUserData) = Sub(ByVal u As IUserData) + If __lbl AndAlso u.Labels.ListExists AndAlso u.Labels.Exists(_LabelPredicate) Then _ + Results.ListAddValue(New SearchResult(u, SearchResult.Modes.Label), RLP) + End Sub + + If t.Length >= 4 AndAlso t.StartsWith("http") Then + For Each p In Settings.Plugins + s = p.Settings.IsMyUser(t) + If Not s.UserName.IsEmptyString Then Exit For + Next + End If + cu = Not s.UserName.IsEmptyString + t = t.ToLower + + For Each user As IUserData In .Users + If __name AndAlso user.Name.ToLower.Contains(t) Then Results.ListAddValue(New SearchResult(user, SearchResult.Modes.Name), RLP) + If user.IsCollection Then + With DirectCast(user, UserDataBind) + If .Count > 0 Then + For i = 0 To .Count - 1 + If __name AndAlso .Item(i).Name.ToLower = t Then Results.ListAddValue(New SearchResult(.Item(i), SearchResult.Modes.Name), RLP) + _CheckUrl(.Item(i)) + _CheckDescr(.Item(i)) + _CheckLabels(.Item(i)) + Next + End If + End With + Else + _CheckUrl(user) + _CheckDescr(user) + _CheckLabels(user) + End If + Next + If Results.Count > 0 Then + Results.Sort() + ControlInvokeFast(LIST_SEARCH, Sub() Results.ForEach(Sub(d) LIST_SEARCH.Items.Add(d.Text))) + End If + End If + End With + Catch aex As ArgumentOutOfRangeException + Catch ex As Exception + ErrorsDescriber.Execute(EDP.SendInLog, ex, $"[UserSearchForm.SearchUser({TXT_SEARCH.Text})]") + Finally + LIST_SEARCH.EndUpdate() + End Try + End Sub + Private Sub FocusUser() + Dim i% = LIST_SEARCH.SelectedIndex + If i.ValueBetween(0, Results.Count - 1) Then MainFrameObj.FocusUser(Results(i).Key, True) + If Not CH_LEAVE_OPEN.Checked Then Hide() + End Sub +End Class \ No newline at end of file