PK {7content/PK {7content/flashgot/PK {7content/flashgot/en-US/PK {7locale/PK {7 locale/am-HY/PK {7locale/am-HY/flashgot/PK {7 locale/ar/PK {7 locale/ar-JO/PK {7locale/ar-JO/flashgot/PK {7 locale/ar-SA/PK {7locale/ar-SA/flashgot/PK {7locale/ar/flashgot/PK {7 locale/be-BY/PK {7locale/be-BY/flashgot/PK {7 locale/bg-BG/PK {7locale/bg-BG/flashgot/PK {7 locale/ca-AD/PK {7locale/ca-AD/flashgot/PK {7 locale/cs-CZ/PK {7locale/cs-CZ/flashgot/PK {7 locale/da-DK/PK {7locale/da-DK/flashgot/PK {7 locale/de-DE/PK {7locale/de-DE/flashgot/PK {7 locale/el-GR/PK {7locale/el-GR/flashgot/PK {7 locale/en-US/PK {7locale/en-US/flashgot/PK {7 locale/es-AR/PK {7locale/es-AR/flashgot/PK {7 locale/es-CL/PK {7locale/es-CL/flashgot/PK {7 locale/es-ES/PK {7locale/es-ES/flashgot/PK {7 locale/fa-IR/PK {7locale/fa-IR/flashgot/PK {7 locale/fi-FI/PK {7locale/fi-FI/flashgot/PK {7 locale/fr-FR/PK {7locale/fr-FR/flashgot/PK {7 locale/he-IL/PK {7locale/he-IL/flashgot/PK {7 locale/hi-IN/PK {7locale/hi-IN/flashgot/PK {7 locale/hr-HR/PK {7locale/hr-HR/flashgot/PK {7 locale/hu-HU/PK {7locale/hu-HU/flashgot/PK {7 locale/id-ID/PK {7locale/id-ID/flashgot/PK {7 locale/it-IT/PK {7locale/it-IT/flashgot/PK {7 locale/ja-JP/PK {7locale/ja-JP/flashgot/PK {7 locale/km-KH/PK {7locale/km-KH/flashgot/PK {7 locale/ko-KR/PK {7locale/ko-KR/flashgot/PK {7 locale/lt-LT/PK {7locale/lt-LT/flashgot/PK {7 locale/mn-MN/PK {7locale/mn-MN/flashgot/PK {7 locale/ms-MY/PK {7locale/ms-MY/flashgot/PK {7 locale/nb-NO/PK {7locale/nb-NO/flashgot/PK {7 locale/nl-NL/PK {7locale/nl-NL/flashgot/PK {7 locale/pl-PL/PK {7locale/pl-PL/flashgot/PK {7 locale/pt-BR/PK {7locale/pt-BR/flashgot/PK {7 locale/pt-PT/PK {7locale/pt-PT/flashgot/PK {7 locale/ro-RO/PK {7locale/ro-RO/flashgot/PK {7 locale/ru-RU/PK {7locale/ru-RU/flashgot/PK {7 locale/sk-SK/PK {7locale/sk-SK/flashgot/PK {7 locale/sl-SI/PK {7locale/sl-SI/flashgot/PK {7 locale/sq-AL/PK {7locale/sq-AL/flashgot/PK {7 locale/sr-YU/PK {7locale/sr-YU/flashgot/PK {7 locale/sv-SE/PK {7locale/sv-SE/flashgot/PK {7 locale/th-TH/PK {7locale/th-TH/flashgot/PK {7 locale/tr-TR/PK {7locale/tr-TR/flashgot/PK {7 locale/uk-UA/PK {7locale/uk-UA/flashgot/PK {7 locale/vi-VN/PK {7locale/vi-VN/flashgot/PK {7 locale/zh-CN/PK {7locale/zh-CN/flashgot/PK {7 locale/zh-TW/PK {7locale/zh-TW/flashgot/PK {7skin/PK {7 skin/classic/PK {7skin/classic/flashgot/PK {7Uoocontent/flashgot/CHANGELOGFlashGot CHANGELOG v 0.7 ====================================================== + depositfiles.com Gold support + tinyurl.com batch redirection support + lix.in link protection service support + link-protector.com link protection service support + anonym.to redirection support + flashgot.redir.[service].anonymous preference to strip referrer from download batches including links redirected through a [service] among "link_in", "link_protector_com" or "anonym_to". v 0.6.9.9 ====================================================== + Firefox 3 compatibility + Updated locales x Fixed regression, Build Gallery broken on referrer-less pages v 0.6.9.8 ======================================================= x Restored Unix-style download managers on Mac OS X x New Mac OS X support made compatible with temporary directories containing special characters v 0.6.9.7 ======================================================= x Improved new Mac OS X support x Faster startup x More reliable "detect now" feature v 0.6.9.6 ======================================================= x Fixed regression from 0.6.9.5 - unrecognized Windows download managers v 0.6.9.5 ======================================================= x Better Leopard startup work-around, disabling *X command line support on Mac OS X (e.g. cURL) v 0.6.9.4 ======================================================= x Work-around for repeated Leopard warnings on startup (user will be asked to allow the "FlashGot" script just once, after FlashGot is installed) v 0.6.9.3 ======================================================= x Netscape 9.0.* compatibility v 0.6.9.2 ======================================================= x Fixed Build Gallery parameters persistence regression due to automatic native wrappers (thanks DuncanMc) v 0.6.9.1 ======================================================= + Better ReGet 5.x support + Build Gallery mp4 support (thanks Ewen) x Fixed trunk "basic" Unknown Content Type Dialog, see https://bugzilla.mozilla.org/show_bug.cgi?id=399873 x General compatibility enhancements v 0.6.9 ======================================================= + Retriever automatic detection on Windows (see FAQ for manual cross-platform setup, thanks Hayden Legendre) x Footprint reduction x capped links number preference for custom download managers to prevent DOS conditions on batch downloads (flashgot.custom.[Download Manager Name].maxLinks) v 0.6.8 ====================================================== x Fixed progress meter issue with text box selections v 0.6.7 ====================================================== + FlashGot Selection *inside* textarea and text boxes x Fixed localization-related Seamokey install problem v 0.6.6 ====================================================== + FlashGot Selection grabs links from text boxes too (thanks qwer1304 for request) v 0.6.5 ====================================================== x Fixed both single right-clicked link and other links extracted from selection being sent separately by the new direct context menu download manager access: now selected links are sent without redundancies, no matter what's clicked (thanks therube for reporting) v 0.6.4 ====================================================== + "Shown in context menu" option for each download manager definition, allowing DownloadWith-style usage patterns (thanks VitaR for request) v 0.6.3 ====================================================== + [UFILE] line separator set to CRLF on Windows v 0.6.2 ====================================================== x Fixed missing download managers list in SeaMonkey "Opening..." dialog (10x therube) v 0.6.1 ====================================================== x Fixed "Open with..." missing regression (10x Totya) v 0.6 ====================================================== x Improved DTA compatibility x Restored Flock compatibility x FlashGot Selection top-down order is always honored v 0.5.99 ====================================================== + Archive password added to download description if detected in "FlashGot Selection" (e.g. Pass: xyz) + Public Download Accelerator Plus (DAP) support x Fixed download dialog drop-downs when DTA installed x Updated Polish (thanks Piecu) x Updated Chinese Traditional (thanks Greener) v 0.5.98.070331 ====================================================== + Neater POST interception x Fixed Downloader 4 X support regression v 0.5.98.070328 ====================================================== x Expiration time for download cookies set to 1 hour v 0.5.98.070327 ====================================================== + Optimization for grabbing thousands of links at once + Better custom download manager support (allows Portable wxDownloadFast configuration) + Support for latest Thunder versions (10x YuanHongYe) x Fixed "intercept all" downloading RSS feeds v 0.5.98.070302 ====================================================== x Fixed nasty "FlashGot Selection" regression v 0.5.98 ====================================================== + BitComet support (thanks to Zhang Ji) + Minefield (3.0a3) support + Better duplicate removal on "FlashGot Selection", optimized for those links having an "abbreviated" (and broken) version of their actual URL in their description (often seen in forum posts) v 0.5.97.03 ====================================================== + Minefield (3.0a2) support v 0.5.97.02 ====================================================== + Rapidshare Premium support updated for new rapidshare.com link system + Orbit support + Belarusian (thanks DRKA) v 0.5.97.01 ====================================================== x Bug fix: adding wxDownload Fast broke custom download managers support v 0.5.97 ====================================================== + wxDownload Fast (open source multi-platform download manager) support + Faster, safer and more flexible JavaScript support in Build Gallery. Warning: it will work on Fx >= 1.5 only and it may break some (few) old expressions, if arguments are not properly quoted - e.g. [myfunc([1-9])] works, [myfunc('[a-z]')] works, [myfunc([a-z])] won't work unless variables a to z are defined. + Metalink 3 support + Improved POST support + Improved "autostart" and "intercept all" + All UI links open in tabs x Restored Flock compatibility x Restored Netscape compatibility x Fixed incorrect escaping of URLs with fragment (thank to Peteyy) x Fixed Seamonkey regression in save dialog box x Fixed FlashGot Selection menu enablement bug x Fixed nsISupports QueryInterface bug x Fixed strict warnings v 0.5.96.060910 ====================================================== + Firefox 2 new "basic" save dialog compatibility x Minor bug fixes v 0.5.96.060826 ====================================================== x Fixed Thai encoding v 0.5.96.060823 ====================================================== x Fixed Spanish (Chile) packaging problem causing Seamonkey installation to fail (thanks to Therube) v 0.5.96.060822 ====================================================== x HTTP authentication correctly handles port numbers (thanks to sphere) v 0.5.96 ====================================================== + Better GetRight cookie support (e.g. for GMail) + GwGet "FlashGot All" calls filter dialog + Croatian translation (Krcko) + Spanish (Chile) translation (Nameless) + Ukraininan translation (Sergey Khoruzhin) v 0.5.95.060611 ====================================================== x Fixed HiDownload startup bug (URL forgotten if HiDownload not running yet) x Fixed WellGet double startup bug v 0.5.95.060607 ====================================================== x Fixed GetRight metalink side effect (alt+click always uses the internal prompt) v 0.5.95.060511 ====================================================== x Minefield compatibility upgrade (Moz bug 326273) v 0.5.9.995 ====================================================== + Metalink support (for GetRight >= 5.2d), thanks to Ant Bryan and Darius Liktorius + Optional HTTP Basic/Digest authentication support (Options|Privacy|HTTP Authentication, default off) + GigaGet support + Always prompt for directory on multiple downloads with non-gui external download managers (e.g. cURL); it can be changed toggling the flashgot.multiQuiet preference in about:config x Fixed Alt+Shift+Click regression x Fixed post data always sent (even if empty) to custom download managers v 0.5.9.994 ====================================================== + Support for Speed Download versions > 3.019 x Patch for the AdBlock FilterUpdate.G "pseudo-leak" v 0.5.9.993 ====================================================== x Work around for single link bug in WellGet 1.25beta x Fixed the perceived UI hang on startup x Fixed Portuguese locales (Options dialog XML error) v 0.5.9.992 ====================================================== x Fixed very silly bug preventing cookies to be passed to certain download managers (e.g. ReGet) x Removed most of the multithreaded code to make code review and debugging easier for 3rd parties developers v 0.5.9.991 ====================================================== + Netscape 8.1 compatibility x Fixed default download directory regression x Honour the "intecept all" setting for mass downloads x Fixed a regression making difficult changing temp directory when download manager's not been detected v 0.5.9.99 ====================================================== + Much better POST handling, e.g. with rapidshare.de (now it works also with late FlashGot choice, i.e. from unknown content type dialog, and data is automatically converted into a GET query strings if download manager doesn't support POST requests) + Portable WellGet option - thanks to James DuRant for suggestion. + Portable Custom Download Manager support (first executable path component is automatically swapped with profile's one if file can't be found) + Two new Custom Download Manager placeholders: UFILE - a text file containing all the URLs of this job, one per line (e.g. useful for -i wget option). If this is found, the URL and COOKIE arguments are ignored (use CFILE). Thanks to Kamal for suggestion. CFILE - path to cookies.txt file for this profile (useful, for instance, for --load-cookies wget option, especially with [-i UFILE]) + File extension filter optionally applies to batch downloads (FlashGot Tabs / All / Selection) - thanks to Stefan Schulz for suggestion v 0.5.9.98 ====================================================== + Net Transport 2 support x Internet Download Manager not installed detection x Fixed first install issue with Seamonkey x Updated Chinese Simplified v 0.5.9.97 ====================================================== + Flock 1.0+ support + Netscape 8.0.4 support + Thunderbird 1.5beta support v 0.5.9.96 ====================================================== + iGetter support x Bug fix: no download manager detected if profile directory contained special chars v 0.5.9.95 ====================================================== + Build Gallery dramatic performance boost x Fixed sporadic initialization bug x Updated Finnish, Polish and Turkish translations v 0.5.9.94 ====================================================== + Better Build Gallery referrer handling x Fixed "FlashGot All" IDM bug ("Download Manager not properly installed") x Work-aroud for Deer Park bug 310068 x Updated French v 0.5.9.93 ====================================================== + Internet Download Manager support + Catalan (thanks to Gaspar Alomar Trías) x Fixed crash when custom download manager executable doesn't exist and user cancels the prompt x Fixed a minor Build Gallery bug x Various languages updated v 0.5.9.92 ====================================================== + Downloader 4 X 2.5.5 compatibility, with referer and intermediate dialogs support x Thunder support updated for 4.5/5.0+ compatibility x Improved themes support (skinnable toolbar button) v 0.5.9.91 ====================================================== + gwget support (thanks to Jan Janssen) x Repackaged for Deer Park / Firefox 1.6 compatibility v 0.5.9.9 ====================================================== x Fixed regression: new custom download managers couldn't be saved x Fixed toolbar button bug (download started always, no matter which command/option was choosen) v 0.5.9.8 ====================================================== + Huge performance improvement in link scanning + Unique per-profile temporary folder + Netscape compatibility + Finnish translation (thanks to Jouko Saarinen) x Fixed SeaMonkey/Thunderbird menu glitches x Fixed build gallery menu item hiding x Many translations have been updated x Fixed CURL built-in support bug v 0.5.9.7 ====================================================== + Experimental Custom Download Manager support + "FlashGot Tabs" command (hidden in popup by default) + "Compact context menu" option + Option to turn off Download Manager Autodetection + Malay translation (thanks to Ahmad Zhafir) x Minor icon maquillage x Improved GetRight file name and charset guessing x Fixed skipped links with big cookies (e.g. Easynews) v 0.5.9.6 ====================================================== + LeechGet 2005 "official" support x Fixed startup problems sometimes reported in 0.5.9.5 x Fixed "Build Gallery" issues with latest nightlies v 0.5.9.5 ====================================================== + NetAnts support + Thai translation (thanks to Patipat Susumpow) + Updated Dutch x Fixed cURL referer bug x Fixed Linux/FreeBSD shell escaping issue (thanks to Thomas Keller for hints) x Fixed regression: area tags in image maps are again detected as links (thanks to pseudo_sapien report) x Fixed minor CSS typos (thanks to b3virq3b and pyu) v 0.5.9.4 ====================================================== + InstantGet support x Updated Build Gallery JavaScript functions to work with Firefox 1.0.4 x Updated Traditional Chinese (thanks to Cola99) v 0.5.9.3 ====================================================== + Build Gallery references to bracket ranges (thanks to DuncanMC for suggestion): [$1] stands for the first range, [$2] for the second and so on, up to the 9th. [$0] returns current global index (like this.index in JavaScript), while trailing zeroes after the "$" effect padding (e.g. [3-3]-[$01] evaluates to 3-03) + Albanian translation (thanks to Besmir Godole) + Updated Turkish (thanks to Ömer Fadıl USTA) + Updated Simplified Chinese (thanks to Duriel) x Changed German "Link mit FlashGot laden" access key from "G" to "N" x Fixed d4x backward compatibility problem v 0.5.9.2 ====================================================== + Toolbar button for Selection/All downloads + Changing default download manager from contextual menu and toolbar button popup will trigger suitable download operation, depending on context + curl experimental support + Restored GetRight "Autostart downloads" option + Improved "hide menu icons" option + Danish translation (thanks to Martin Harder) x Fixed Aria bug affecting multiple downloads (thanks to SHiNE & Michal Duda) x Improved compatibility with Noia Extreme and other custom themes x Fixed Seamonkey prefs/themes bug (thanks to therube) v 0.5.9.1 ====================================================== + "Menu|Hide icons" option x Fixed Russian encoding mismatch x Shortcuts work in Thunderbird too v 0.5.9 ====================================================== + Thunderbird compatibility + Menu icons + Updated Czech (thanks to Michal Duda) v 0.5.8.6 ====================================================== x Fixed GetRight too picky about URLs problem x Fixed progressbar bug v 0.5.8.5 ====================================================== x Fixed ReGet cookie regression v 0.5.8.4 ====================================================== + Build Gallery JavaScript security improvements + Seamonkey compatibility improvements + GetRight better file name processing + Updated Russian (Thanks to Ragnaar) v 0.5.8.3 ====================================================== + Arabic translation (thanks to Basem Narmok) + Bulgarian translation (thanks to splt-rmx) x Fixed "WellGet always detected" bug x Improved link processing v 0.5.8.2 ====================================================== x Fixed Build Gallery bugs x Safe DOM management (XPCNativeConnect) v 0.5.8.1 ====================================================== + Updated Japanese (JP+JPM, thanks to Hadakadenkyu) x Fixed Changelog and Log dialogs to be resizable v 0.5.8 ====================================================== + TrueDownloader support + HiDownload support + WellGet COM-less interface (it should work even if WellGet has been installed under a non-administrative account) + Multithreaded initialization for faster startup + Updated German (thanks to Thomas Weber) + Updated Indonesian (thanks to Robert Setiadi) + Updated Portuguese (thanks to Emilio Malaman) + Updated Spanish (thanks to Jarol) + Updated Traditional Chinese (thanks to Cola99) + Better Mac OS X compatibility x Menu Editor compatibility x Fixed autostart bug v 0.5.7.8.1 (Linux and FreeBSD edition) ====================================================== x Fixed Linux/FreeBSD bug (downloads don't start) v 0.5.7.8 ====================================================== + ReGet Deluxe and Speed Download 3 POST data support (catches downloads triggered by form submissions) x Various minor bug fixes v 0.5.7.7.3 beta ====================================================== + BuildGallery "this.index" special property gives JavaScript access to current global iteration index (1 based) + BuildGallery functions have been made persistent + Slovenian translation (thanks to Jure Osredkar) x Fixed interception code to avoid unknown content types and unappropriate schemes (e.g. file://) v 0.5.7.7.2 beta ====================================================== + "Intercept every download" option + Better one-click interception + Alt+Shift+Click bypasses interception + Download Master cookie support + FreshDownload cookie support + Internet Download Accelerator cookie support + LeechGet cookie support + "Advanced|Log|Disable" option x Fixed GetRight cookie quirks v 0.5.7.7.1 ====================================================== + Updated French translation (thanks to J. Letellier) x Fixed GetRight regression (download all and download selection not working if referers are enabled) v 0.5.7.7 ====================================================== + Mass Downloader full support (cookie and referer) + Speed Download 3 full support (cookie and referer) + Thunder (Chinese only popular download manager) full support (cookie and referer) + Improved ReGet support + Choosable temp dir (FlashGot Options|Advanced) + "Autostart Downloads" option to quickly enable/disable one-click interception by file type + You can choose not to send any referer with GetRight putting an empty string in "FlashGot Options| Privacy|Use always this Referrer URL" + FlashGot now escapes also those malformed URLs wich use the '#' character in their file name (while it should be only the "hash" prefix) + Dutch translation (thanks to Steven Hemelaere) v 0.5.7.6.6 ====================================================== + Speed Download 3 support v 0.5.7.6.1 ====================================================== + Persian translation (thanks to Mohsen Qorbani) + ReGet unified support (fixes also a bug with ReGet auto-close option, thanks to daVil for report) + COM support refactoring v 0.5.7.6 ====================================================== + WellGet (http://www.wellget.com) support + GetRight: cookie and referrer supported also with togetright.exe (GetRight v. 5.2c or above only) + Fixed an issue with Net Transport not able to handle encoded URLs: now FlashGot decodes URLs before sending them to NT (previous behaviour applies if new "Send encoded URLs" option is ON) - Removed GetRight autostart option (did not work as expected, and it is mostly superseded by togetright.exe improvements) x Build Gallery alpha ranges bug fix (thanx to Duncan) x GetRight bug fix (ignored togetright.exe option) v 0.5.7.5 ====================================================== + Fresh Download support (http://www.freshdevices.com) + "FlashGot Options" inline menu rationalization for faster download manager switching + GetRight "Autostart downloads" option (thanks to Roberto Casula for suggestion) + GetRight cookies support (GetRight version 5.2c or above required). Notice: if togetright.exe option is enabled, cookies will work only with multiple links downloads + "Open with" UI tweaks (no download manager menu if only one download manager is installed, better alignment otherwise). + Slovak translation (thanks to Wladow) v 0.5.7.4 ====================================================== + Experimental KGet support (thanks to Frantisek Augusztin and Axel Zechner) x Fixed a major bug in Linux/FreeBSD version preventing download manager auto-detection (thanks to martimus8 for debug) v 0.5.7.3 ====================================================== x Fixed threading problem introduced in 0.5.7.2 and causing Download Master to hang x Minor bug fixes in save as dialog v 0.5.7.2 ====================================================== + ReGet "Quiet" options splitted (link/selection/all) + Download manager can be choosen just before download + GetRight option to use togetright.exe for single downloads (quicker but no referrer) + Various performance improvements + Romanian translation (thanks to iLogiK) + Norwegian Bokmål translation (thanks to Martin Joné) + Czech translation (thanks to Michal Duda) + Korean translation (thanks to Gomyoung Kim) + Updated Japanese translation (thank to Hadakadenkyu) + Updated French translation (thanks to Yann Bill) v 0.5.7.1 ====================================================== + Net Transport Cookie Support + WinInet cookie self-destruction (better privacy) x Huge code refactoring for better modularity x Minor bug-fixes v 0.5.7 ====================================================== + Star Downloader support (thanks to Kalen donation) + FlashGet cookie support + Free Download Manager cookie support v 0.5.6.3 ====================================================== + Updated Russian translation (thanks to Alexey S. Gubanov aka Ragnaar) + Updated Chinese Simplified translation (thanks to Duriel) v 0.5.6.2 ====================================================== + Updated German translation (thanks to Thomas Weber) x Workarounds for various Mozilla 1.8x bugs v 0.5.6.1 ====================================================== + Updated Chinese Traditional traslation (thanks to Cola99) x Fixed LeechGet conflict with backgroud processing v 0.5.6 ====================================================== + Long awaited "auto-download by type" feature (you can choose wich file extensions trigger FlashGot using "FlashGot Options|Extensions" or checking the "Do this automatically for file like this from now on" checkbox + Privacy Options (Referrer & Cookies) + Advanced Options (Background Processing & Log) + Build Gallery dialog has been made resizable + Build Gallery synchronization improvement (empty range is synchronized with alternate range content, and file extension autodetection is attempted) + LeechGet "FlashGot All" now works also with local (file://...) URLs, for instance with Build Gallery pages + GetRight referrer support (FlashGot will "automagically" support cookies too when GetRight does). Due to current GetRight limitations, this feature applies to "FlashGot All" and "FlashGot Selection" only + GetRight support uses ToGetRight.exe when possible + ReGet "Skip Confirmation Dialogs" option + FlashGot Options|More Options... contextual menu + Japanese translation (thanks to Hadakadenkyu) + Polish Translation (thanks to Artek Działek and Piotr Konieczny) + Indonesian translation (thanks to BNDT) + New About Box with Changelog link x Fixed images/movies FlashGot selection regression x Fixed image content Build Gallery regression ( preview images were not properly detected if content was an image too) x Fixed encodings for el-GR, pt-BR and zh-CN (thanks to Phil Ringnalda and Charlie Chen) x Other minor bug fixes v 0.5.5 ====================================================== + (Long awaited) Option Dialog + Customizable contextual menu items + Huge speedup in duplicate links removal + Huge speedup in cookie handling + Multithreaded optimization for large amounts of links (FlashGot All and FlashGot Selection processing no longer blocks user interface) + Alt+Click now is enabled by default + Chinese simplified translation (thanks to Duriel) + Greek translation (thanks to Kesisidis Dimitrios) + Lithuanian translation (thanks to Marius Navickas) v 0.5.4 ====================================================== + Alt+Click now triggers "FlashGot Link" if mouse pointer is over an anchor, or "FlashGot Selection" if there is an active selection (enable this feature from "FlashGot Options | Alt+Click = FlashGot") + LeechGet "Save dialog" now popups or not, according to Firefox download option "Ask me where to save any file" (thanks to ajhubble for suggestion) + Improved GetRight multiple file handling: directory chooser popups only if Firefox download option "Ask me where to save any file" is checked, and in this case malformed file names are filtered out + Chinese Traditional traslation (thanks to Cola99 and Pshadow) + Serbian translation (thanks to Љубиша Радовановић) + Turkish translation (thanks to Levent Karakas) x Linux and BSD support is more compatible with generic "sh" shell (no more bash-isms and ksh-isms, thanks to Jan Stocker for his report) x Minor contextual menu items positioning improvement (thanks to Tycho Quad for suggestion) v 0.5.3 ====================================================== + Mac OS X support layer (many thanks to Martin Zakora for testing) + Specific iGetter for Mac OS X support + Specific Speed Download 2 for Mac OS X support + Duplicate URLs removal code + Hebrew Translation (thanks to Jonathan Avraham) + ksh compatibility (thanks to Artur Siekielski) - Dropped [Plugin] support - it was too hackish ;-) x "Hide Disabled Commands" preference defaults to true x Fixed regression: Build Gallery referrer respected x Fixed LeechGet 2004 detection (thanks to Jack Head) v 0.5.2 ====================================================== + French Translation (thanks to Yann Bill) x Fixed Portuguese translation bug x More accurate cookie management (MANY thanks toDietrich Streifert) v 0.5.1 ====================================================== x Workaround for a Linux file picker problem (http://bugzilla.mozilla.org/show_bug.cgi?id=267152) x Fixed a permission issue affecting Linux unprivileged users (thanks to Denis "Darky") x Fixed the red XUL bug affecting Hungarian users in version 0.5.0 (thanks to Skullkid) v 0.5.0 ====================================================== + Aria for Linux support (http://duda.wz.cz/software/aria/index_en.php) + Downloader 4 X for Linux/FreeBSD support (http://www.krasu.ru/soft/chuchelo/) + Improved "FlashGot selection", now it works also with image-only selections + Added directory chooser before "all" and "selection" downloads with GetRight x Fixed ReGet startup error dialog (thanks to gordho) v 0.4.1 ====================================================== + Portuguese translation (thanks to Diogo Mafra) x Fixed GetRight 5.2 auto-detection bug (thanks to Adam Porter) x Fixed ReGet POST and cookie bug (thanks to TJ and Winfried Posur) x Fixed referrer handling regression (thanks to Hjgab) x Fixed other minor bugs (thanks to Bar Shaked) v 0.4.0 ====================================================== + Experimental [Plugin] support, should add "all" and "selection" modes to download managers that provide a click/URL monitor plugin for Mozilla (tested on Speed Download 2 for Mac OS X and Star Downloader Free for Windows) x True referrer URL is now used when invoked from UnknownContentType dialog too x More "hi-fi" ReGet integration with distinction between single and multiple download dialogs v 0.3.7.1 ====================================================== x service update for Firefox 1.0 RC compatibility v 0.3.7 ====================================================== + ReGet full support (including cookie management) + Cyrillic Download Master support + URL capture (useful to download embedded audio/video clips and Flash content) + Improved and faster download auto-detection routine + Improved malformed URL handling x Solved Free Download Manager "early wake up" bug v 0.3.6 ====================================================== + Internet Download Accelerator (AKA Download Master) support (http://www.westbyte.com/ida) + Free Download Manager support (http://www.freedownloadmanager.org) + LeechGet 2002 support + Support for encoded URIs x Minor bug fixes (i.e. in download manager auto-detection) v 0.3.5 ====================================================== + Experimental GetRight support (http://www.getright.com) x Bug "problems uninstalling FlashGot 0.3.3.x" fixed, now you can uninstall FlashGot with no problems x Bug "installation of FlashGot 0.3.3.1 needed to install FlashGot 0.3.4" fixed: FlashGot 0.3.5 can be installed on a clean profile or overwrite previous versions indifferently v 0.3.4 ====================================================== + LeechGet support (http://www.leechget.net) + Huge refactoring in both C++ and JavaScript code, with a better download manager support abstraction and a simple http based inter-process communication (tested for LeechGet "download selection" command, it should also make easier adding Linux/Unix support for Wget and/or Prozilla and/or Axel) v 0.3.3.1 ====================================================== - Fixed hook in default Firefox download dialog, for those experiencing incompatibility problems v 0.3.3 ====================================================== + Hook to choose FlashGot from browser default download dialog (quite rude, needs improvement...) + Keyboard shortcuts for FlashGot download actions (Firefox only) + Download manager choosen via options (no more multiple menu items for FlashGet and Net Transport) + Major refactorings (XPCOM service for global storage reducing startup time with lazy initialization and making room for new planned features) + Hungarian translation (thanks to Bálint Farkas) + Swedish translation (thanks to Leif Larsson) + Better temporary directory management v 0.3.2 ====================================================== + Spanish translation (thanks to M. Agras) x Fixed download manager autodetection bug v 0.3.1 ====================================================== + "JavaScript functions" support in "Build gallery" x Fixed a locale check bug (alert on startup about deleting XUL.mfl) v 0.3.0 ====================================================== + Experimental "Build gallery" command x Workaround for the infamous "red XUL status bar bug" (references: http://bugzilla.mozilla.org/show_bug.cgi?id=216489 http://bugzilla.mozilla.org/show_bug.cgi?id=246014 ) v 0.2.91 ====================================================== x Fixed a subtle bug: multiple windows opened and closed in various order caused FlashGot silently die + Russian translation (thanks to Ragnaar and Unghost) = Small refactorings in JS code v 0.2.9 ====================================================== x Fixed minor German translation bug v 0.2.8 ====================================================== x Fixed a critic bug that used to prevent fresh installations on Firefox + Improved German translation (thanks to Thomas Weber) v 0.2.7 ====================================================== + German translation (thanks to Thomas Weber) + Italian translation + "FlashGot options" menu + Option to download images from the source page too + Option to hide/show disabled contextual menu items + Cleanup and small optimization in C++ code v 0.2.6 ====================================================== x Bug fix: 0.2.5 used to forgot removing temporary files (previous version worked right) - 0.2.5 treats images as links (src==href). This is the default behaviour of Net Transport IE "download all" plugin, but FlashGot's one is the opposite So I decided to remove this features, because is rather confusing and also because the browser cache makes more convenient saving images directly from the navigator interface v 0.2.5 ====================================================== + Net Transport support (http://www.xi-soft.com) x Fixed popup menuitem "Flashgot Selection" problem + Major performance improvements v 0.2.0 ====================================================== + Consolidated "FlashGot Selection" command + Improved speed v 0.1.5 ====================================================== + Added experimental "FlashGot Selection" command v 0.1.4 ====================================================== x Rewrited translating the COM client code VBS -> C++ to solve antivirus issue + Improved URL escaping and Unicode behaviour v 0.1.3 ======================================================= = First public release ======================================================= v 0.1.0 - 0.1.3 = Internal use onlyPK {7vߥcontent/flashgot/DAP.cpp#include "FlashGot.h" #define DMS_POLL_DELAY 50 #define DMS_POLL_TIMEOUT 30000 #import "progid:InternetExplorer.Application.1" #import "progid:ScriptBridge.ScriptBridge.1" using namespace SHDocVw; using namespace MSHTML; void DMSDownloadAcceleratorPlus::dispatch(const DownloadInfo *downloadInfo) { HELPER(helper); switch(downloadInfo->opType) { case OP_ONE: { VARIANT v[4]; LinkInfo l=downloadInfo->links[0]; v[0].vt=v[1].vt=v[2].vt=v[3].vt=v[3].vt=VT_BSTR; v[3].bstrVal= l.url; // URL v[2].bstrVal= downloadInfo->referer ; // Referer v[1].bstrVal= l.cookie ; // cookie v[0].bstrVal= l.comment ; // info helper.invoke("MenuUrl2",v,4); break; } case OP_SEL: case OP_ALL: { IWebBrowser2Ptr ie(__uuidof(InternetExplorer)); InternetSetCookie(downloadInfo->referer,NULL,downloadInfo->extras[0]); ie->PutSilent(VARIANT_TRUE); ie->PutOffline(VARIANT_TRUE); VARIANT v1,v2; v1.vt=v2.vt=VT_BSTR; v1.bstrVal=downloadInfo->referer; v2.bstrVal="Referer: "+downloadInfo->extras[1]; ie->Navigate2(&v1,&vtMissing,&vtMissing,&vtMissing,&v2); long timeout=DMS_POLL_TIMEOUT; for(int j = 2; j--> 0;) { while(!ie->ReadyState) { if( (timeout -= DMS_POLL_DELAY) <0) { fail("DAP Timeout", 9000); } Sleep(DMS_POLL_DELAY); } } ie->Stop(); IHTMLDocument2Ptr doc=NULL; try { doc=ie->GetDocument(); } catch(...) { } if(doc) { bstr_t html; LinkInfo *links=downloadInfo->links; for(int j=0, linksCount=downloadInfo->linksCount; j" +l.comment+""; } IHTMLElementPtr body = doc->Getbody(); if(body) { body->innerHTML=html; VARIANT v; v.vt=VT_DISPATCH ; v.pdispVal = doc; helper.invoke("LeechLinks",&v,1); } } } } }PK {7"content/flashgot/FlashGot.cpp/***** BEGIN LICENSE BLOCK ***** FlashGot - a Firefox extension for external download managers integration Copyright (C) 2004-2007 Giorgio Maone - g.maone@informaction.com contributors: Max Velasques (wxDownload Fast support) Zhang Ji (BitComet support) YuanHongYe (new Thunder support) 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 2 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; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ***** END LICENSE BLOCK *****/ #include "FlashGot.h" FGCOMGuard *FGCOMGuard::instance = NULL; int FGCOMGuard::refCount = 0; #define BUF_SIZE 1024 char g_buf[BUF_SIZE]; wchar_t g_wbuf[BUF_SIZE]; extern void fail(char *msg, int code) { MessageBox(NULL, msg, "FlashGot Error", MB_OK | MB_ICONERROR); exit(code); } using namespace std; class DMSAddUrlFamily : public DMSupportCOM { void dispatch(const DownloadInfo *downloadInfo) { CookieManager cm(downloadInfo); HELPER(h); int linksCount=downloadInfo->linksCount; if(linksCount>0) { if(linksCount<2) { LinkInfo link=downloadInfo->links[0]; VARIANT v[3]; v[2].vt=v[1].vt=v[0].vt=VT_BSTR; v[2].bstrVal=link.url; v[1].bstrVal=link.comment; v[0].bstrVal=downloadInfo->referer; h.invoke("AddUrl",v,3); } else { FGArray fgArray(downloadInfo); h.invoke("AddUrlList",fgArray.asVariant(),1); } } } }; class DMSFlashGet : public DMSAddUrlFamily { protected: const char * getProgId() { return "JetCar.Netscape"; } public: const char * getName() { return "FlashGet"; } }; class DMSFreeDownloadManager : public DMSupportCOM { protected: const char * getProgId() { return "WG.WGUrlListReceiver"; } public: const char * getName() { return "Free Download Manager"; } void dispatch(const DownloadInfo *downloadInfo ) { int linksCount=downloadInfo->linksCount; if(linksCount>0) { CookieManager cm(downloadInfo); const char *progId; char *methodName; if(linksCount<2) { progId="WG.WGUrlReceiver"; methodName="AddDownload"; } else { progId=getProgId(); methodName="AddURLToList"; } FGCOMHelper fdm(progId); fdm.set("Referer",downloadInfo->referer); LinkInfo *links=downloadInfo->links; for(int j=0; j< linksCount; j++) { LinkInfo l=links[j]; fdm.set("Url",l.url); fdm.set("Comment",l.comment); fdm.invoke(methodName); } if(linksCount>1) fdm.invoke("ShowAddUrlListDialog"); } } }; class DMSBitComet : public DMSupportCOM { protected: const char * getProgId() { return "BitCometAgent.BcAgent.1"; } public: const char * getName() { return "BitComet"; } void dispatch(const DownloadInfo *downloadInfo) { HELPER(h); int linksCount = downloadInfo->linksCount; if (linksCount > 0) { if (linksCount < 2) { VARIANT v[5]; // write title to param array v[0].vt = VT_NULL; // write ref URL to param array v[1].vt = VT_BSTR; v[1].bstrVal = downloadInfo->referer; // write URL title to param array v[2].vt = VT_BSTR; v[2].bstrVal = downloadInfo->links[0].comment; // write target URL to param array v[3].vt = VT_BSTR; v[3].bstrVal = downloadInfo->links[0].url; // write html content to param array v[4].vt = VT_NULL; h.invoke("AddLink", v, 5); } else { VARIANT v[5]; HRESULT hResult = S_OK; SAFEARRAY *pSA_URL = NULL; SAFEARRAY *pSA_FLASH = NULL; SAFEARRAYBOUND bound_url[1]; SAFEARRAYBOUND bound_flash[1]; bound_url[0].lLbound = 0; bound_url[0].cElements = 2 * linksCount; bound_flash[0].lLbound = 0; bound_flash[0].cElements = 0; // write Flash URL link list to param array if ( NULL == (pSA_FLASH = SafeArrayCreate(VT_VARIANT, 1, bound_flash)) ) { return; } v[0].vt = VT_ARRAY | VT_BYREF | VT_VARIANT; v[0].pparray = &pSA_FLASH; // write pair list to param array if ( NULL == (pSA_URL = SafeArrayCreate(VT_VARIANT, 1, bound_url)) ) { return; } long index[1]; index[0] = 0; VARIANT varStr; varStr.vt = VT_BSTR; for (int i=0; i < linksCount; i++) { varStr.bstrVal = downloadInfo->links[i].url; hResult = SafeArrayPutElement(pSA_URL, index, &varStr); if (hResult != S_OK) { return; } index[0]++; varStr.bstrVal = downloadInfo->links[i].comment; hResult = SafeArrayPutElement(pSA_URL, index, &varStr); if (hResult != S_OK) { return; } index[0]++; } v[1].vt = VT_ARRAY | VT_BYREF | VT_VARIANT; v[1].pparray = &pSA_URL; // write page title to param array BSTR page_title = SysAllocString(L"title"); v[2].vt = VT_BSTR; v[2].bstrVal = page_title; // write refer url to param array BSTR refer_url = SysAllocString(L"unknown"); v[3].vt = VT_BSTR; v[3].bstrVal = refer_url;//downloadInfo->referer; // write html content to param array BSTR html_content = SysAllocString(L"unkown"); v[4].vt = VT_BSTR; v[4].bstrVal = html_content; // invoke AddLinkList() h.invoke("AddLinkList", v, 5); // cleanup SafeArrayDestroy(pSA_URL); SafeArrayDestroy(pSA_FLASH); SysFreeString(page_title); SysFreeString(refer_url); SysFreeString(html_content); } } } }; class DMSFreshDownload : public DMSupportCOM { protected: const char * getProgId() { return "fdcatch.fdnscatcher"; } public: const char * getName() { return "FreshDownload"; } void dispatch(const DownloadInfo *downloadInfo) { HELPER(h); CookieManager cm(downloadInfo); if(downloadInfo->opType==OP_ONE) { LinkInfo l=downloadInfo->links[0]; VARIANT v[3]; v[2].vt=v[1].vt=VT_BSTR; v[2].bstrVal=l.url; // URL v[1].bstrVal=downloadInfo->referer; // referer v[0].vt=VT_INT; v[0].intVal=0; // quiet (0 means "show dialog") h.invoke("AddURL",v,3); } else { h.invoke("AddUrlList",FGArray(downloadInfo).asVariant(),1); } } }; class DMSGetRight : public DMSupport { private: static char *findGetRight(HKEY baseKey, char *leafPath, char *exeName) { long res; HKEY hk; char *path=NULL; if( (res=RegOpenKeyEx(baseKey,leafPath,0,KEY_QUERY_VALUE,&hk))==ERROR_SUCCESS) { char *installKey="InstallDir"; long pathLen=0; if((res=RegQueryValueEx(hk,installKey,0,NULL,NULL,(LPDWORD)&pathLen))==ERROR_SUCCESS) { BOOL lastAttempt; do { lastAttempt=exeName==NULL; if(lastAttempt) exeName="getright.exe"; path=new char[pathLen+strlen(exeName)+2]; BOOL fileExists=FALSE; if((res=RegQueryValueEx(hk,installKey,0,NULL,(LPBYTE)path,(LPDWORD)&pathLen))==ERROR_SUCCESS) { strcat(path,"\\"); strcat(path,exeName); struct stat statbuf; fileExists=!stat(path,&statbuf); } if(!fileExists) { delete path; path=NULL; if(!lastAttempt) exeName=NULL; } } while(! (path || lastAttempt) ); } RegCloseKey(hk); } return path; } static char *findGetRight(char *exeName) { char *path; if( ( path=findGetRight(HKEY_CURRENT_USER,"Software\\Headlight\\GetRight\\Config",exeName) ) || ( path=findGetRight(HKEY_LOCAL_MACHINE,"Software\\Headlight\\GetRight",exeName) ) ) { return path; } throw "Can't find GetRight executable"; } static char *createCmdLine(char *path, char *opts, char *arg) { char *cmdLine=new char[strlen(path)+strlen(opts)+strlen(arg)+6]; sprintf(cmdLine,"\"%s\" %s %s",path,opts,arg); return cmdLine; } public: const char * getName() { return "GetRight"; } void check() { delete findGetRight(NULL); } void dispatch(const DownloadInfo *downloadInfo) { char *cmdLine=NULL; char *path=NULL; char *exeName; char *arg; char *tgargs=NULL; if(downloadInfo->linksCount) { exeName="togetright.exe"; if( strlen(downloadInfo->extras[2]) && (strcmp("old",downloadInfo->extras[2])==0)) { arg = downloadInfo->links[0].url; // CHECK ME!!! } else { char *pattern = "/referer=%s /cookie=%s /url=%s"; char *cookie = downloadInfo->links[0].cookie; char *referer = downloadInfo->referer; char *url = downloadInfo->links[0].url; arg=tgargs=new char[ strlen(referer)+ strlen(cookie)+ strlen(url)+ strlen(pattern)]; sprintf(tgargs,pattern, referer,cookie,url); } } else { exeName=NULL; arg=(char *)downloadInfo->referer; } /* // GetRight doesn't work if not already started... needs more investigation if(!FindWindow(NULL, "GetRight ")) { path = findGetRight(NULL); if(createProcess(cmdLine = createCmdLine(path, "", ""), NULL)) { for(int j = 100; j-- > 0;) // 10 secs for GetRight to show up { if(FindWindow(NULL, "GetRight ")) break; sleep(100); if(j == 50) createProcess(cmdLine, NULL); } } if(cmdLine) delete[] cmdLine; } */ if(exeName || !path) path = findGetRight(exeName); BOOL ret=createProcess(cmdLine=createCmdLine(path = findGetRight(exeName), downloadInfo->extras[0], arg),NULL); if(tgargs) delete [] tgargs; // supplementary post-command if( ret && (!exeName) && strlen(downloadInfo->extras[1])) { if(cmdLine) delete[] cmdLine; Sleep(500); createProcess(cmdLine = createCmdLine(path, downloadInfo->extras[1], ""),NULL); } if(cmdLine) delete [] cmdLine; if(path) delete [] path; if(!ret) throw "Can't launch GetRight"; } }; class DMSHiDownload : public DMSupportCOM { protected: const char * getProgId() { return "NetMoles.NetMoles"; } public: const char * getName() { return "HiDownload"; } void dispatch(const DownloadInfo *downloadInfo) { CookieManager cm(downloadInfo); HELPER(h); if(downloadInfo->linksCount == 1 && !FindWindow("HiDownload", NULL)) { VARIANT v[2]; v[1].vt = v[0].vt = VT_BSTR; LinkInfo l = downloadInfo->links[0]; v[1].bstrVal = l.url; v[0].bstrVal = l.comment; h.invoke("NMAddUrl", v, 2); } else { FGArray fgArray(downloadInfo); VARIANT v; v.vt=VT_BYREF | VT_VARIANT; v.pvarVal=fgArray.asVariant(); h.invoke("NMAddAllUrl", &v, 1); } } }; class DMSInstantGet : public DMSAddUrlFamily { protected: const char * getProgId() { return "InstantGet.AddUrl"; } public: const char * getName() { return "InstantGet"; } }; #import "IDManTypeInfo.tlb" #include "IDManTypeInfo.h" #include "IDManTypeInfo_i.c" class DMSInternetDownloadManager : public DMSupportCOM { protected: const char * getProgId() { return "IDMGetAll.IDMAllLinksProcessor"; } public: const char * getName() { return "Internet Download Manager"; } void dispatch(const DownloadInfo *downloadInfo) { long lc = downloadInfo->linksCount; if(lc<1) return; LinkInfo *links=downloadInfo->links; LinkInfo *l; ICIDMLinkTransmitter2* pIDM; HRESULT hr = CoCreateInstance(CLSID_CIDMLinkTransmitter, NULL, CLSCTX_LOCAL_SERVER, IID_ICIDMLinkTransmitter2, (void**)&pIDM); if (S_OK != hr) return; if(lc < 2) { VARIANT reserved; reserved.vt=VT_EMPTY; l = &links[0]; pIDM->SendLinkToIDM2(l->url, downloadInfo->referer, l->cookie, l->postdata, NULL, NULL, NULL, NULL, 0, reserved, reserved); } else { SAFEARRAY *pSA = NULL; SAFEARRAYBOUND bound[2]; bound[0].lLbound = 0; bound[0].cElements = lc; bound[1].lLbound = 0; bound[1].cElements = 4; if ( pSA = SafeArrayCreate(VT_BSTR, 2, bound) ) { long index[2]; CComBSTR url, cookie, comment; for(long j = 0; j < lc; j++) { index[0] = j; l = &links[j]; index[1] = 0; url = (LPCOLESTR)l->url; cookie = (LPCOLESTR)l->cookie; comment = (LPCOLESTR)l->comment; SafeArrayPutElement(pSA, index, url); index[1] = 1; SafeArrayPutElement(pSA, index, cookie); index[1] = 2; SafeArrayPutElement(pSA, index, comment); index[1] = 3; SafeArrayPutElement(pSA, index, NULL); } VARIANT array; VariantInit(&array); array.vt = VT_ARRAY | VT_BSTR; array.parray = pSA; pIDM->SendLinksArray(downloadInfo->referer, &array); SafeArrayDestroy(pSA); } } pIDM->Release(); } }; class DMSLeechGetBase : public DMSupportCOM { public: void dispatch(const DownloadInfo *downloadInfo) { HELPER(h); CookieManager cm(downloadInfo); if(downloadInfo->linksCount>0) { h.invoke(downloadInfo->opType==OP_ONE?"AddURL":"Wizard", downloadInfo->links[0].url); } else { h.invoke("Parse",downloadInfo->referer); } } }; class DMSLeechGet2002 : public DMSLeechGetBase { protected: const char * getProgId() { return "LeechGetIE.AddURL"; } public: const char * getName() { return "LeechGet 2002"; } }; class DMSLeechGet : public DMSLeechGetBase { protected: const char * getProgId() { return "LeechGetIE.LeechIE"; } public: const char * getName() { return "LeechGet"; } }; class DMSMass_Downloader : public DMSupportCOM { protected: const char * getProgId() { return "MassDown.AddUrl.1"; } public: const char * getName() { return "Mass Downloader"; } void dispatch(const DownloadInfo *downloadInfo) { int linksCount=downloadInfo->linksCount; if(linksCount<1) return; { VARIANT v[3]; v[2].vt=v[1].vt=v[0].vt=VT_BSTR; HELPER(h); CookieManager cg(downloadInfo); DISPID di_AddUrlWithReferer; h.getMemberID("AddUrlWithReferer",&di_AddUrlWithReferer); if(linksCount>1) { v[1].bstrVal=v[0].bstrVal=bstr_t("Begin."); h.invoke("AddUrl",v,2); } v[0].bstrVal=downloadInfo->referer; LinkInfo *links=downloadInfo->links; for(int j=0; j1) { v[1].bstrVal=v[0].bstrVal=bstr_t("End."); h.invoke("AddUrl",v,2); } } } }; class DMSNetAnts : public DMSAddUrlFamily { protected: const char * getProgId() { return "NetAnts.API"; } public: const char * getName() { return "NetAnts"; } }; class DMSNet_Transport : public DMSupportCOM { protected: const char * getProgId() { return "NTIEHelper.NTIEAddUrl"; } public: const char * getName() { return "Net Transport"; } void dispatch(const DownloadInfo *downloadInfo) { CookieManager cm(downloadInfo); int linksCount=downloadInfo->linksCount; bstr_t *parms=downloadInfo->rawParms; SAFEARRAY *psaa[2]= { FGArray::createSafeArray(linksCount), FGArray::createSafeArray(linksCount) }; VARIANT vstr; vstr.vt = VT_BSTR; long ix[]={0}; for(int j=1; ix[0]referer; v[1].vt=v[0].vt=VT_VARIANT | VT_BYREF ; SafeArrayAccessData(psaa[0], (void **)&(v[1].pvarVal)); SafeArrayAccessData(psaa[1], (void **)&(v[0].pparray)); HELPER(h); h.invoke("AddList",v,3); SafeArrayUnlock(psaa[1]); SafeArrayUnlock(psaa[0]); SafeArrayDestroy(psaa[0]); SafeArrayDestroy(psaa[1]); } }; class DMSNet_Transport2 : public DMSNet_Transport { protected: const char * getProgId() { return "NXIEHelper.NXIEAddURL"; } public: const char * getName() { return "Net Transport 2"; } }; class DMSWestByte : public DMSupportCOM { public: void dispatch(const DownloadInfo *downloadInfo) { int linksCount=downloadInfo->linksCount; bstr_t *parms=downloadInfo->rawParms; if(linksCount>0) { VARIANT v[2]; v[0].vt = VT_BSTR ; v[0].bstrVal=downloadInfo->referer; // referer HELPER(h); CookieManager cm(downloadInfo); if(linksCount==1) { v[1].vt = VT_BSTR; // VBScript Array v[1].bstrVal=downloadInfo->links[0].url; h.invoke("AddURL",v,2); } else { FGArray fgArray(linksCount * 2); LinkInfo *links=downloadInfo->links; for (int j=0; j < linksCount; j++) { LinkInfo l=links[j]; fgArray.addString(l.url); fgArray.addString(l.comment); } fgArray.asVariant(&v[1]); h.invoke("AddURLs",v,2); } } } }; class DMSOrbit : public DMSupportCOM { protected: const char * getProgId() { return "Orbitmxt.Orbit"; } public: const char * getName() { return "Orbit"; } void dispatch(const DownloadInfo *downloadInfo) { CookieManager cm(downloadInfo); HELPER(h); int linksCount=downloadInfo->linksCount; if(linksCount>0) { if(linksCount<2) { LinkInfo link=downloadInfo->links[0]; VARIANT v[4]; v[3].vt=v[2].vt=v[1].vt=v[0].vt=VT_BSTR; v[0].bstrVal=link.cookie; v[1].bstrVal=downloadInfo->referer; v[2].bstrVal=link.comment; v[3].bstrVal=link.url; h.invoke("download",v,4); } else { VARIANT v[4]; FGArray urlArray(linksCount); FGArray txtArray(linksCount); for(int i=0;ilinks[i].url ); txtArray.addString( downloadInfo->links[i].comment ); } urlArray.asVariant(&v[3]); txtArray.asVariant(&v[2]); v[1].vt=v[0].vt=VT_BSTR; v[1].bstrVal=downloadInfo->referer; v[0].bstrVal=downloadInfo->links[0].cookie; h.invoke("downloadList",v, 4); } } } }; class DMSwxDownloadFast : public DMSupport { private: static char *findProgram(HKEY baseKey, char *leafPath) { long res; HKEY hk; char *exe=NULL; if( (res=RegOpenKeyEx(baseKey,leafPath,0,KEY_QUERY_VALUE,&hk))==ERROR_SUCCESS) { char *exepath="ExePath"; long pathLen=0; if((res=RegQueryValueEx(hk,exepath,0,NULL,NULL,(LPDWORD)&pathLen))==ERROR_SUCCESS) { exe=new char[pathLen+1]; BOOL fileExists=FALSE; if((res=RegQueryValueEx(hk,exepath,0,NULL,(LPBYTE)exe,(LPDWORD)&pathLen))==ERROR_SUCCESS) { struct stat statbuf; fileExists=!stat(exe,&statbuf); } if(!fileExists) { delete exe; exe=NULL; } } RegCloseKey(hk); } return exe; } static char *findProgram() { char *path; if( (path = findProgram(HKEY_CURRENT_USER,"Software\\wxWidgets Program\\wxDownload Fast")) || (path = findProgram(HKEY_LOCAL_MACHINE,"Software\\wxWidgets Program\\wxDownload Fast")) // Ma1 20061510 ) return path; throw "Can't find wxDownload Fast executable"; } static char *createCmdLine(char *path, char *arg) { char *cmdLine=new char[strlen(path)+strlen(arg)+8]; sprintf(cmdLine,"\"%s\" %s ",path,arg); return cmdLine; } public: const char * getName() { return "wxDownload Fast"; } void check() { delete findProgram(); } void dispatch(const DownloadInfo *downloadInfo) { char *cmdLine=NULL; char *path=NULL; char *arg; char *tgargs=NULL; BOOL ret = false; if(downloadInfo->linksCount) { char *referer=downloadInfo->referer; if (downloadInfo->linksCount == 1) { char *pattern="--reference=%s \"%s\""; char *url=downloadInfo->links[0].url; arg=tgargs=new char[ strlen(referer)+ strlen(url)+ strlen(pattern)]; sprintf(tgargs,pattern,referer,url); } else { char *pattern="--reference=%s --list=\"%s\""; FILE * fp; char tmppath[1024]; if (GetTempPath(1024,tmppath)==0) { strcpy(tmppath, "c:"); } strcat(tmppath, "TEMPURL.LST"); if(!(fp = fopen(tmppath, "w"))) { throw "FlashGot can't create file TEMPURL.LST for wxDownload Fast"; } for(int j=0,count=downloadInfo->linksCount; jlinks[j].url,fp); fputc('\n',fp); } fclose(fp); arg=tgargs=new char[ strlen(referer)+ strlen(tmppath)+ strlen(pattern)]; sprintf(tgargs,pattern,referer,tmppath); } ret=createProcess(cmdLine=createCmdLine(path=findProgram(), arg),NULL); } if(tgargs) delete [] tgargs; if(cmdLine) delete [] cmdLine; if(path) delete [] path; if(!ret) throw "Can't launch wxDownload Fast"; } }; class DMSDownloadMaster : public DMSWestByte { protected: const char * getProgId() { return "DMIE.MoveURL"; } public: const char * getName() { return "Download Master"; } }; class DMSInternetDownloadAccelerator : public DMSWestByte { protected: const char * getProgId() { return "IDAIE.MoveURLIDA"; } public: const char * getName() { return "Internet Download Accelerator"; } }; class DMSReGet : public DMSupportCOM { protected: const char * getProgId() { return "ClickCatcher.DownloadAllFromContextMenu"; } public: const char * getName() { return "ReGet"; } void dispatch(const DownloadInfo *downloadInfo) { int linksCount=downloadInfo->linksCount; VARIANT v[5]; v[0].vt=v[1].vt=v[2].vt=v[3].vt=v[4].vt=VT_BSTR; bstr_t referer=downloadInfo->referer; // referer FGCOMHelper *regetAll=NULL; DISPID di_AddDownload; if(linksCount>1) { regetAll=new FGCOMHelper(getProgId()); regetAll->getMemberID("AddDownloadToList",&di_AddDownload); } else if(linksCount==1) { LinkInfo l=downloadInfo->links[0]; if(strlen(l.postdata)) { try { FGCOMHelper dl("ReGetDx.RegetDownloadApi"); dl.set("Url",l.url); dl.set("Referer",referer); dl.set("Cookie",l.cookie); dl.set("Info",l.comment); dl.set("PostData",l.postdata); dl.invoke("AddDownload"); return; } catch(...) {} } } CookieManager cm(downloadInfo); LinkInfo *links=downloadInfo->links; for(int j=0; j0;) { // we give ReGet 2mins to wake up try { FGCOMHelper dl("ClickCatcher.DownloadFromContextMenu"); dl.set("Url",l.url); dl.set("Referer",referer); dl.set("Info",l.comment); dl.set("Cookie",l.cookie); // -- it seems a dummy property, we use CookieManager which works if(regetAll) { VARIANT vdl; vdl.vt=VT_DISPATCH; vdl.pdispVal=dl.getIDispatch(); regetAll->invoke(&di_AddDownload,&vdl,1); } else { dl.invoke("AddDownload"); } break; } catch(_com_error ce) { Sleep(1000); if(attempts==0) throw "ReGet timeout"; } } } if(regetAll) try { regetAll->invoke("UrlList",NULL,0); delete regetAll; } catch(...) {} } }; class DMSStarDownloader : public DMSupportCOM { protected: const char * getProgId() { return "SDExt.StarDownExt"; } public: const char * getName() { return "Star Downloader"; } void dispatch(const DownloadInfo *downloadInfo) { HELPER(downloader); DISPID di_DownloadURL; downloader.getMemberID("DownloadURL",&di_DownloadURL); VARIANT v[2]; v[0].vt = v[1].vt = VT_BSTR; v[0].bstrVal = downloadInfo->referer; // referrer LinkInfo *links=downloadInfo->links; for (long j=0, len=downloadInfo->linksCount; j < len ; j++) { v[1].bstrVal=links[j].url; downloader.invoke(&di_DownloadURL,v,2); } } }; class DMSThunder : public DMSupportCOM { protected: const char * getProgId() { return "ThunderAgent.Agent"; } public: const char * getName() { return "Thunder"; } void dispatch(const DownloadInfo *downloadInfo) { CookieManager cm(downloadInfo); HELPER(h); VARIANT v[8]; v[7].vt = v[6].vt = v[5].vt = v[4].vt = v[3].vt = VT_BSTR; v[2].vt = v[1].vt = v[0].vt = VT_INT; LinkInfo *links=downloadInfo->links; for (long j=0, len=downloadInfo->linksCount; jreferer; v[2].intVal=-1; v[1].intVal=0; v[0].intVal=-1; h.invoke("AddTask",v,8); } h.invoke("CommitTasks"); } }; class DMSGigaGet : public DMSupportCOM { protected: const char * getProgId() { return "GigaGetBho.CatchRightClick.1"; } public: const char * getName() { return "GigaGet"; } void dispatch(const DownloadInfo *downloadInfo) { CookieManager cm(downloadInfo); HELPER(h); VARIANT v[2]; v[0].vt= VT_BYREF; FGArray fgArray(downloadInfo); v[1].vt=VT_BYREF | VT_VARIANT; v[1].pvarVal=fgArray.asVariant(); h.get("AddAllUrl",v,1); } }; class DMSThunderOld : public DMSGigaGet { protected: const char * getProgId() { return "Xunleibho.CatchRightClick.1"; } public: const char * getName() { return "Thunder (Old)"; } }; class DMSTrueDownloader : public DMSupportCOM { protected: const char * getProgId() { return "TrueDownloaderProject.TrueDownloader"; } public: const char * getName() { return "TrueDownloader"; } void dispatch(const DownloadInfo *downloadInfo) { HELPER(downloader); DISPID di_MenuURL; downloader.getMemberID("MenuURL",&di_MenuURL); VARIANT v[3]; v[0].vt = v[1].vt = v[2].vt = VT_BSTR; v[1].bstrVal = downloadInfo->referer; // referrer LinkInfo *links=downloadInfo->links; for (long j=0, len=downloadInfo->linksCount; j < len ; j++) { v[2].bstrVal=links[j].url; v[0].bstrVal=links[j].cookie; downloader.invoke(&di_MenuURL,v,3); } } }; class DMSWellGet : public DMSupport { const char * getProgId() { return "NxApi.myComponent"; } public: const char * getName() { return "WellGet"; } void check() { dispatch(NULL); } void dispatch(const DownloadInfo *downloadInfo) { HKEY hk = NULL; BOOL ok = false; CString apppath; if(downloadInfo && strlen((char *)(downloadInfo->extras[2]))) { // explicit path apppath = (char *)downloadInfo->extras[2]; } else if(RegOpenKeyEx(HKEY_CURRENT_USER,_T("Software\\WellGet"),0,KEY_QUERY_VALUE,&hk)==ERROR_SUCCESS) { DWORD dwDisposition = 1023; BYTE szpath[1024]; DWORD type_1=REG_SZ ; if(RegQueryValueEx(hk, NULL, NULL,&type_1, szpath, &dwDisposition)==ERROR_SUCCESS) { apppath.Format("%s\\WellGet.exe",szpath); } RegCloseKey(hk); } // check WellGet path struct stat statbuf; if(stat(apppath,&statbuf)) throw "Can't find WellGet executable"; if(downloadInfo && downloadInfo->linksCount > 0) { CookieManager cm(downloadInfo); CString parms; if(downloadInfo->opType==OP_ONE) { try // try COM first, to overcome command line bug in latest (1.25 - 0118) build { HELPER(h); LinkInfo l=downloadInfo->links[0]; VARIANT v[3]; v[2].vt=v[1].vt=v[0].vt=VT_BSTR; v[2].bstrVal=l.url; // URL v[1].bstrVal=l.comment; v[0].bstrVal=downloadInfo->referer; // referer h.invoke("AddURL",v,3); return; } catch(...) { // fall back to command line LinkInfo l=downloadInfo->links[0]; parms.Format("-r:\"%s\" -c:\"%s\" \"%s\"", (char *)downloadInfo->referer, (char *)l.comment, (char *)l.url); } } else { LinkInfo *links=downloadInfo->links; FILE * fp; char path[1024]; if (GetTempPath(1024,path)==0) { strcpy(path,"c:"); } strcat(path,"TEMPURL.TXT"); if(!(fp = fopen(path, "w"))) { throw "FlasGot can't create file TEMPURL.TXT for WellGet"; } fputs(downloadInfo->referer,fp); fputc('\n',fp); for(int j=0,count=downloadInfo->linksCount; jprev=NULL; last->id=1; } else { DMSNode *newNode=new DMSNode(); newNode->prev=last; newNode->id=last->id << 1; last=newNode; } return last->dms=dms; } DMSFactory() : last(NULL) { add(new DMSBitComet()); add(new DMSDownloadAcceleratorPlus()); add(new DMSDownloadMaster()); add(new DMSFlashGet()); add(new DMSFreeDownloadManager()); add(new DMSFreshDownload()); add(new DMSGetRight()); add(new DMSGigaGet()); add(new DMSHiDownload()); add(new DMSInstantGet()); add(new DMSInternetDownloadAccelerator()); add(new DMSInternetDownloadManager()); add(new DMSLeechGet2002()); add(new DMSLeechGet()); add(new DMSMass_Downloader()); add(new DMSNetAnts()); add(new DMSNet_Transport()); add(new DMSNet_Transport2()); add(new DMSOrbit()); add(new DMSReGet()); add(new DMSStarDownloader()); add(new DMSTrueDownloader()); add(new DMSThunder()); add(new DMSThunderOld()); add(new DMSWellGet()); add(new DMSwxDownloadFast()); } public: static DMSFactory *getInstance() { return instance?instance:instance=new DMSFactory(); } DMSupport *getDMS(char *name) { DMSNode *cursor=last; for(; cursor && strcmp(cursor->dms->getName(),name); cursor=cursor->prev); return cursor ?cursor->dms :NULL; } unsigned int checkAll() { unsigned int retVal=0; fprintf(stdout,"FlashGot Win Bridge %s\r\n",VERSION); FGCOMGuard::addClient(); for(DMSNode *cursor=last; cursor; cursor=cursor->prev) { try { fprintf(stdout,"%s|",cursor->dms->getName()); cursor->dms->check(); fprintf(stdout,"OK\n"); continue; } catch(_com_error ce) { fprintf(stdout,"BAD\nCOM error: %s\n", ce.ErrorMessage()); } catch(...) { fprintf(stdout,"BAD\nunexpected unknown error!\n"); } retVal |= cursor->id; } FGCOMGuard::removeClient(); return retVal; } ~DMSFactory() { DMSNode *cursor=last; while( cursor ) { delete cursor->dms; last=cursor; cursor=last->prev; delete last; } } }; DMSFactory * DMSFactory::instance=NULL; DMSupport* createDMS(char *name) { DMSupport *res=DMSFactory::getInstance()->getDMS(name); if(res) return res; sprintf(g_buf,"Unsupported Download Manager %s", name); fail(g_buf,-8000); return NULL; } wchar_t *UTF8toUnicode(const char *src) { return src && ( MultiByteToWideChar(CP_UTF8,0,src,-1, g_wbuf, BUF_SIZE) || MultiByteToWideChar(CP_ACP,0,src,-1,g_wbuf, BUF_SIZE) ) ? g_wbuf : L"" ; } bstr_t * readLine(FILE *stream, bstr_t *buffer) { bool isLine=false; for(char *res; res=fgets(g_buf,BUF_SIZE,stream); ) { size_t lastPos=strlen(res)-1; while(lastPos>=0 && (res[lastPos]==0x0a || res[lastPos]==0x0d) ) { res[lastPos--]='\0'; isLine=true; } buffer->Assign(*buffer + UTF8toUnicode((const char*) res)); if(isLine) break; } return buffer; } int performTest(char *outfname) { if(outfname) { freopen(outfname,"w", stdout); freopen(outfname,"a", stderr); } exit(DMSFactory::getInstance()->checkAll()); } void parseHeader(DownloadInfo *downloadInfo, char *header_buf) { #define HEADER_COUNT 4 char *header[HEADER_COUNT]; char *cur=header_buf; for(int j=0; jlinksCount=atoi(header[0]); downloadInfo->dmName=header[1]; int typeId=atoi(header[2]); downloadInfo->opType = (typeIdOP_MAX) ?OP_ALL:(OpType)typeId; downloadInfo->folder = bstr_t(UTF8toUnicode((const char *)header[3])); } void processJobFile(FILE *f) { DMSupport *dms = NULL; const char *errMsg="Download manager not properly installed.\n%s"; BOOL completed=FALSE; try { DownloadInfo downloadInfo; char header_buf[BUF_SIZE]; if(fgets(header_buf,BUF_SIZE,f)) { parseHeader(&downloadInfo,header_buf); int linksCount=downloadInfo.linksCount; int parmsCount=1 + linksCount*4 + EXTRAS_COUNT; // referer + (url + info + cookie + postdata) * 4 + referer cookie + referer referer :-) bstr_t *parms=downloadInfo.rawParms=new bstr_t[parmsCount]; LinkInfo *links=downloadInfo.links=new LinkInfo[linksCount]; for(int j=0; jdispatch(&downloadInfo); printf("%s",downloadInfo.folder); } completed=TRUE; } catch(_com_error ce) { sprintf(g_buf,errMsg,ce.ErrorMessage()); } catch(char *ex) { sprintf(g_buf,errMsg,ex); } //catch(...) { // sprintf(g_buf,errMsg,""); //} if(dms) delete dms; if(!completed) fail(g_buf,0x02000); } int performDownload(char *fname) { FILE *f; char *done=strcat(strcpy(new char[(strlen(fname)+6)],fname),".done"); if(!(f=fopen(fname,"rb"))) { struct stat statbuf; if(stat(done,&statbuf)) // done file doesn't exist { sprintf(g_buf,"Can't open file %s",fname); fail(g_buf,0x01000); } else { remove(done); } } else { if(!feof(f)) { processJobFile(f); } else { sprintf(g_buf,"Temporary file %s is empty",fname); fail(g_buf,0x03000); } fclose(f); if(!strstr(done,"test")) { remove(done); rename(fname,done); } } delete [] done; return 0; } int main(int argc, char* argv[]) { return (argc<2 || strcmp(argv[1],"-o") == 0 ) ?performTest(argc>2?argv[2]:NULL) :performDownload(argv[1]); } int WINAPI WinMain(HINSTANCE inst, HINSTANCE previnst, LPSTR cmdline, int cmdshow) { return main(__argc, __argv); } PK {7єJKcontent/flashgot/FlashGot.exeMZ@ !L!This program cannot be run in DOS mode. $-LLLLELCLCLLCLLLLRichLPEL hF @!:P@.text@ `.rdataU`@@.data@P P@.rsrcp@@UVu3;t#9E tufVju Pu,A#3^]UEEhX'BEPdVt$u3 W|$tWPtPQ>_^UE 3RRuUUURjhEEhtBuEPQ1AË Vt$fF,^V~u 6褏FF^VtPAvtV裔Y^ËD$Vf FD$ AFt |$tPQ^ VFAtPQv tVA^UEVjuu N03Ʌ^t eeEh'BEPEA D$VAHN@f FtPQ^VWVP8} hAVW_^UVWuuuu uV} hAVWÏ_^]UQVMQV} hAVP藏E^Vt$V} hAVPq^Vt$V} hAVPM^UTB3ʼnEEVu WMQPA|WhAuEVPAM_3^蹒 V>u h@ڎ^ËD$L$ +;sWL$3ËD$VtPQ^VtPQD$^jZAj őYȉMet u"3Mu h=" t3ËttPA3UQSVWMgGM 4VjEAu hǍQM t 3ɅtTRQVP袛E t3ɅtEDPQPXPw_^[VD$tVY^UTB3ʼnESVW,TB}tu AF?~e6蚖SVuPEu GhjURhtBPQ3Ʌt eeEh'BEPEAae_^[M3hUVEPu:uEu P^] ;D$t t$QtPQËD$VW>;ttPQtWP_^D$Vt PA^VFtPQvtVP^UQeeVMQVPH} hAVPϋEM^UQeeVMQVP$} hAVP虋EM^UVWtPQEtHEPhAuu uA|EuA|EWhAPEPQWhAuu uA}'_^] UQS]VWt-MURhAP|E3P! j`@tSP_^[VWFP0Aut~V<Y_^Vt$t$&t$} =@tPF^ UQVQ̉euw/} =@tP^Vte&^jZAkj 9YȉMet uW3Mu h谉 7芗jAeQM\u MeExEPjAؖeeu MuMeE8EVW|$ WGPNGPN WN _^VN NN^UVWv M2t3Sjj~P]M3ۅÅɉt[t"eeEh'BEPEA 7N_^jAÕu3FEFEEF ZfFjA舕}et3PV} h(AVPt4贕UTjluAkP PM[u`F3;É]<HjShAMT F;Et R3N;t@3WSPAjMTQjMT@F;fE$fEtE]FPE@htAP ;tE,],M@;t;]@E$P0TBPPPEPMTj0u_O2yh(#hhAYYj24AMTtυȍMT~^3ۉ]PMTEfM Q_PMPEE ;EtPQE @Ëu`3ۋ}P;]HFv;EWMh`AMLEYh\AM`E HEPE4hPAPE Q M`QMDQE MQMj=EE }t+EAMAUtAE Dž MEUR<\>jπEE }tMJbE\AM DžUEEP<=jpEE }tMaMDAU DžEEMQ<=jEE }tM> DžUEEPwEEE]UQMA]UQMA]UjhAdPDTB3PEdEEhMQP ҉HEЉPPEUԉLLEHMMfEEUBEȃ}^}MQRM@EfEfEfEfMfM}t U DžM}t U DžMU$$8t$(( DžUjEPhAMEMvMQT5Edf `tJPhAMjQRMEtPAEMMd Y]Ujh(AdPTB3ʼnEPEdEPE EMʉEMUR豔PhAj@EPDMQUEHMUEE~>MMQM0EUREPMQ; EM?벋Md YM3v]U8} /E 8t0M UE8tMRAEEẺEEMȉM}MEURݕMTR@sEEEM E}MtE u UUj;EPE}tMUUEPh$AMQUR耓P臓P~PjEPAMMmUUEPu]UME8t3MUEEMyuUPpMAUBEEE]UDEHT UEEEMQjj ADB DMH$DB(DfQ̉eMUEH U:tEMURAE艅@DGMQDD]UjhXAdPTB3PEd$EHMEUBE MMU;UEEPMEQ̉eԉMUE؉M9tUEMQAU $gQĉeЉEMU܉E8tMUEPAM$%EM:Md Y]U0MԋEԋMԋP(;Q$}h}t EMEUԋEЉBMQUԃ(REԋH QAUԋB(MԉA(E}tMTEEE}tM3EE]UQMEH QA]UQM4A]UQMDA]UQMPA]UQMhA]UjhAdP TB3PEdEHM}UUhEP }}EAEAB ЉEEAMMUEEĉEMEUU܍MfEEEEMUBM9tUEMQAUE}t E DžUԍEPhAM/E}tMdEMQUE EEM;MUURMEX\\U\8t\``PA\EXtX DžMԍURhAMLEXtX{DžX@PPUP8tPTTPAPE@t@ DžMԍURhAME@t@Dž@jEPMQMEMST}~)$RhAMjEP$QMEMMd Y]UlTB3ʼnEM,TBEEE}u EMQ AE}?~ EbEteЋỦU}t}u E:EfMQURjEPjMQ,AEԃ}u EUЉUEEMMU REPMy3ɅU E8tIMUEAEEEE}t3tUE PQh'BEP^leM3hm]U,MԋEEMQhjURhtBEԋQUԋQ҉E}|EE؋M QUREԋQ EE]U}u @}u WEEEEEEEMMU t&M tE u U%@t6jjjMQjhhtBU REURAЉE}|E(jjjMQjhhtBU REURAЋ]UQMA]UQMA]UjhAdPTB3PEdB ЉMЉEEԉEUMfEEEHMȃ}a}fDžtfEU8t DžUfEEH:t DžMfEUB9t DžEfEjtQh8AM@DžlDžDžDžU≕DžDžPjj AuEMfDž `$Rjj AuEM|DžfDžDž;MKEP9t DžQRPAlltEMEHT8t DžPQRAlltEMfDž, `4h,AA fDž< DhAAfDžLTh AApfDž\pdtRhAM jPtQMRAPA QARApPAEMMd Y]UQM@A]UQMTA]UjhKAdPHTB3PEdB ЉHMЉPPEEԉLLEHUMlfEEEEhMQ"UzEHQMEfEfUfU}t E DžUE$$9t$(( DžEfEEjMQhdAMEM]URTEf ` ARhAMjPQMAEtRAEMMd Y]UQMlA]UHjEEP#a]UEPhAhT E}uMQhAh5 E}tEExAh$*BURb]UXEEPjjM QURAE}EAEEPjjjMQURAE}3}E}tEAMQ諂UDP`EMMEUREPjjMQURAE}u;hAEP藀MQUR臀EPMQ:E}u&UUEP_E}uE}u }!MQAE]U\VEEEExE4AMIP胁t3UJPh0AÅuEHQEEAMI4EM&E؋UJE܋EP MQUREPVJ^EԋMԉMUUEPMQUREPMQxoEME}u}uUREEPEMQUJYPEP EjMQE}tUUЋEP`}tu}uoMIPtT}tUŰEPX`h4AhAMIPUR EjEPX}tMMȋUR`}tEEċMQ_}uEAh$*BUR^^]UXjDjEP- EDE} uj)_EMMUU jjE P M QURjjjjjjEPjU REPM QUR} | E̋U ;Q~ hWwE̋U QE̋U ]UMEMUEMyuU3z ȅt/3| Ey} hW1wU@MDE IUREUȋBЋMMB ЉEMU ]U MEMUB;E~ MQUE3Ƀx хtEPMYMMQ;U}BEHM}~UUEEM;M}UUEPM]UMEMUBEMEBЉEjMQUM҉E}uE;E}MMUUEEMQUREPMQeUEBM JEPMEBЋMU ]UMEMUEMQ;U}}>0jEPMQUMP҉E}uEM]Uht]UEEMQU RME]UM}u hWtE PMQ=EUEM+Q UEH+MMU U} EPM{MUEEM QUREPMQ/<}| UM;H~ hWsUMHUM]U TB3ʼnEV3AjMQhPAtMɍEtk @tЊuuAM3^ jXUTB3ʼnEhPDžhAxul@sX@Ph,TBhA,TBM3ÀyBtItQAt$jqA|$tt$jqAU39Eu u !9E u uP3u uPqA]t$jqAVhD$tVY^L$HB3@H HfHfH@D$d$ wvWËL$3ËI`3ҍABAËD$VBtV|Y^UVuWu EVP |6uEjPt |!OutN`8@ p3_^]UVu WuE VP+ |-u E jPCt |u OuPtNp3_^] Ujh2Bh@dPTB1E3ʼnESVWPEdeutUV A}jjWVjj,Au؅u45AօPw3% P^3E6} eċ؉]E2P؉]EËe3ۉ]E}u؅uh3YVSWMQjj,Au=S/SA| Su hǍeȋMd Y_^[M3>]Ujh`AdPQSVWTB3PEdeUtmpffujjj+jxWRjjAuR5AօP3Md Y_^[]% P3Md Y_^[]VE؃Eu&h3Md Y_^[]p@ËEjjVSWPjjAu-S5A3օ % P$ËMd Y_^[]̋D$jP@TBQD$ $tQT$ RhBPЅ|jVvv jt$$vt$$V ^U8S}#uT@M 3@eE܀@TBM3EEEE EEEE EeeeemdE؍EdEEE̋EEXEԍEPE0UYYe}td]؉d EdE[UQSE H3M 5E@ftE @$3@ljjE pE pE p juE puT E x$u uu jjjjjEPh#E] ck 3@[UQSVW}Gw E-uZMNkM9H};H~u M ]u} }ʋEF0E;_ w;vZkE_^[ËD$Vt$~WFpW^aW ;L$t @u@3V?Wt$;u.WN^W H;txu^ ZNH^UTBeM3MEE EE@E{@MEdEEduQuYȋEdPd5D$ +d$ SVW(衤TB3PuEEdPd5D$ +d$ SVW(衤TB3PeuEEdËMd Y__^[]QUVuW3;u3e9}u<j^0WWWWW>E9}t9u rVuuA u Wu 9}t9u s<j"YjX_^]jh3BY9eMx:M+M MUEEEEE8csmt EEXeEO9̋D$L$ ȋL$ u D$S؋D$d$؋D$[u;t$95TBRhЃ hBAthBPAtt$t$Yt$Aj6-YjU,YV tЃ;t$r^Vt$3utу;t$ r^ËL$V3;u5;VVVVVL=jX^átB;tډ3^ËD$V3;u:VVVVV=jX^95tBtۋ tB3^Ã=`Bth`BoDYt t$`BYWh,AhA6YYuTVWh A)Aƿ A;YstЃ;r=B_^thBDYt jjjB3j h3B7j+Ye3F95tBtk5tBEtB} uG5BQ5BQYYEtm9}r Eth#u@FPuEPEPMtOF9]w9]vE+}8]tiMap`M9]Eu-9]w(,"3,&9]vEn,SSSSS.8]tE`p3^_[jjt$t$t$t$8UVuW3;}u,j^WWWWW0*.j$hV* E ;tˋ@;ljME|;s +j^0| o@wSWh3PQ"nȃF+yjd}M؋Ǚ_jh+؋EDAڙRP3+jQSRP }U}M|sGEǀ3UȁEyIAu jdYuEluAU2EȁyIAu jdYuEluEEjSuFWmjFhRPhU}(cBu\cBF3A9B} A9|QIN+jF E Sp0ljY3ShuWVljFhRPSUj3[_^Vmu^t$VYY#^UQQEPAEMj*h!NbQPmMtQW|$n$L$Wtt=u~Ѓ3ƒtAt#ttt͍y yyyL$ ttfu~Ѓ3‹tt4t'ttljD$_fD$G_fD$_ÈD$_̍B[Í$d$3D$ST$t :tτtQu WV ؋ ~333ƃu%t%uu^_[3ËB:t6t:t't:tt:tt^_B[ÍB^_[ÍB^_[ÍB^_[̋L$t$tNu$$~Ѓ3ƒtAt2t$tt͍AL$+ÍAL$+ÍAL$+ÍAL$+VoYri<\t\t /t@:u8t)@8t$:t\t /t@:u8t8Pu3@3U$hTB3ʼnSV3;Wuu$&p&SSSSS(;th\BVpYYt>&j^0G&0~:u:t8^tPoY`=nEEPVAEhXBV]WpYYthVPi ;u%8"pSVSi E;tqVYt gt\V AvP9]t uYjSSSjjhE]]]juʃG W$GOG(O,h9]u?Y9]u 9]u_ _$ZEPEPA]EPEPAGEjPEPEPEPEPEP[jG W$9]u9]uG GG$GZEPEPAEPEPAEjPEPEPEPEPEPiGW9]u9]uG G(G$G,REPEPAt}EPEPAtkEjPEPEPEPEPEPiG(W,uAVuhfGEGEHYGYfGf_f_ f_ 3AP#YuA_^3[0̋T$L$u<:u. t&:au% t:Au t:au uҋ3Ðt:u ttf:u t:au t̋T$ L$ti3D$ur=dBtwmWr1كt +шuʃtt uD$_ËD$SVt$ W3;u3"WWWWWJ$BF t7VMoVoVnPn}F;t PY~~ _^[j h4BM3u3;;u!WWWWW# F @t ~ EVY}V.YEEՋuVYj h04B+3ۉ]3u ;;u 5!SSSSSL#VnY]F @VmYt.VmYt"Vm<`BVmYYk(cB@$uEVmYt.VmYt"Vm<`BVxmYYk(cB@$tw SSSSS"M9]u!NxE VuAYYEE EIËu VYjhP4B339];u SSSSS"3u ;;tF @VlYt.VlYt"Vl<`BVlYYk(cB@$uVblYt.VVlYt"VJl<`BV:lYYk(cB@$:uEVYY]V#pVujupEVWpE3M9MHËu VYj hp4B3ۉ]3};;uSSSSS 3y3u ;;t38;ttE;u sʉ]8u _jEPhTB3& PuVWqEE EBuYj@t$ t$ - jh4BEEE3;u$9] tSSSSS3739] ;t3u;;t9] tڋ}VY]F @VijYt0V]jYt$VQj<`BVAjYYk(cB@$uHV"jYt1VjYt%V j<`BViYYk(}cB@$tSSSSS ]9]tAM t7Ox AWmsYE؃u E;Eu]ME< uċEE EË}W(Yj h4BL3}3;;uYj^0SSSSSq@3M ;;t39];t3u;;t8u!ÉuVNY]F tVY^^ ^Vuuu nE 9t33ۋ}uOYUQej@uEu uP EøUBáBVj^u;}ƣBjPjSYYBujV5BQSYYBujX^3ҹUBB  XB|j^3ҹUBWk(`Bt;tu1 BUB|_3^}i=tBtr5BYËD$UB;r=WBw+P2 Yà PAËD$} P YËD$ PAËD$UB;r=WBw+P Yà PAËD$} P YËD$ PAj h4B3ۉ]3u;;u SSSSS39] ;tԉuVY]F @VfYt.VsfYt"Vgf<`BVWfYYk(cB@$uEV:fYt.V.fYt"V"f<`BVfYYk(cB@$tSSSSS(M9]u#ViEPSu V<EVWpjE EuaYj jt$ HH_^[US39]u.SSSSSE[Vu;t9] w 0uuuu VhKA;}u"SSSSS^[]t$jt$t$t$cU V39u uVVVVV'uEuEu EBPuuU^t$jt$ h9AÃ=tBut$hkYYf=@MZu3<@@PEu"f@ ut@v39@3j`h05BeEP(AEWjAPAu jVY>VAVjuPAlFEFE܋FE؋~ PAutM܋U‰5tBtB tBtB=tBE3CSYujY8-ujY/]a}jY$ABq~tB}}jY*{}j YSYtPYz]tMj YQPjh@"E}uP.E MPQN/YYËeEԉE}uPEE3@ËeE~QSUVW5B(5Bt$(;YYr|+ލkrpV2;YsJ;s;rPt$IYYuF;r;Pt$IYYt+P<(YBt$7W'BY3_^][YVjj DIV' BBujX^Ã&3^j hX5B eeuYEE E Dt$YHøeA[B[B\A[Bx\A[B\A[B"\A[B[B8eA[B8\A[B[A[B1[A莉|$tBtj hx5B jYeuNt/tBtBEt9u,HJPYvYfE ËjYVW3tB<XBuXB8h0e0YYt F$|3@_^Ã$XB3S,AVXBW>t~t WW~&Y0YB|ܾXB_t ~uPӃ0YB|^[UE4XBA]j h5B 3G}39DvBuj h?YYu4XB9tnjFY;u 3Qj YY]9u,hW`/YYuWY ] >WYE E j *YUEV4XB>uP$Yuj?Y6A^]h@j5DvBApBuËL$%@vB%lBxB3 tB|B@Ë lBpBkT$+P r ;r3UMAVu W+y iDMIMS1UVUU] utJ?vj?ZK;KuB sL!\D u#M!JL! uM!Y] S[MMZU ZRSMJ?vj?Z]]+u]j?u K^;vMJ;։Mv;t^M q;qu; s!tDLu!M!1K!LuM!qM qINM qINu ]}u;M ыYN^qNqN;Nu`LM Ls%}uʻM DD )}uJM YJꍄ ED0E@vB B50Ah@H SQ֋ B@vB P@vB@ B@vB@HC@vBHyCu `@vBxueSjp ֡@vBpj5DvBA lB@vBkpB+ȍLQHQPeE lB;@vBvmpBxBE@vB=B[_^á|BV5lBW3;u4kP5pBW5DvBA;u3x|B5lBpBk5pBhAj5DvBA;ljFtjh hWA;ljF uvW5DvBA뛃N>~lBF_^UQQMASVqW3C}i0Dj?EZ@@Jujhy hWAup;UwC+ GAH@PǀIuˋUEO HAJ HAdD3GFCENCu x!P_^[U MASVuW} +Q iDMOI;|9M]UE;;MI?Mvj?YM_;_uC sML!\D u&M!ML! uM!YO_YOyM+M}}M O?L1vj?_]][Y]YKYKY;YuWLM Ls}uϻM DD }uOM YO U MD2LU FBD2<38/] )uNK\3uN?] Kvj?^EuN?vj?^O;OuB st!\Du#M!NL! uM!Y] OwqwOquuuN?vj?^M yK{YKYK;KuWLM Ls}uοM 9DD }uNM yN ED3@_^[UlBMkpBMSI VW} M 3U xBS;#U# u ;؉]r;upBS;#U# u ;ى]r;u[ {u ];r;u1pB {u ;ى]r;u؅ۉ]u3 S@YKC8txBCUt|D#M# u)eHD9#U# uEUiDMLD3#u#Mj _G}MT +MN?M~j?^;J;Ju\ }&M|8Ӊ]#\D\Du3M]! ,OM|8!]u ]M!K]}JzyJzyM yJzQJQJ;Ju^LM L}#} u ;οM |D)} u N {MN 7Mt LMuэN L2uɍy>u;@vBuM; Bu%@vBMB_^[h@d5D$l$l$+SVWTB1E3PeuEEEEdËMd Y__^[]QUQQVE3PuumYt VVVVVEPYt VVVVV}^u }r3@jX39D$jhP4ADvBu3}hBu$hYu5DvBA%DvB3@QS\$ VW33;8YBtG|wUj~Y1j~Yu =XB?hBSHvBU9 t VVVVVhavBVjewB@Au&hBhV8 t3PPPPPyV@ ]D$T$UL$)qqq( ]UVWS33333[_^]Ëjv33333USVWjjh#@Q_^[]Ul$RQt$ ]̋L$f9MZt3ËA<8PEu3fx ̋D$H<ASVq3҅WDv|$H ;r X;r (;r3_^[jh5B"e@RsYt=E+PRYYt+@$ЃE E3=ËeE3TBVTBD$tV脫Y^VW|$ GtIP:tAt$N;tQR;YYt3%ttD$tttt3@_^ËD$=MOCt=csmu+\ K~ =3jh5B}]ssue;ute~;w|Oȋ1uEytshSOt eu2YËee}]uuE;uts{Ë]uh ~ Z Ë8csmu8xu2H t!t"uxu 3A 3jh6BMt*9csmu"At@tePq襲E38E ËevL$Vt$ƃy|QI42 ^U u =e?E~SSVE@@ ۍp~3EEMqPGEPn u KEEE;|^[Ej{A觵 teM Mjjgj,hx6Bً} u]eGEvEPYYE E E t Me3@EEuuSuWUEeoEËe1 u} ~OO^eE;F skËP;~@;H;FLQVjWeeuEEEE맋} uE܉GuYY Mԉ MЉ>csmuB~uWt?s9t+>MOCt#u$u uuuu V} uR uEPEPVu W3E;Es[S;7|G;wBG OHtyu*X@u"u$u u juuuuuEE;Er[_^U,M S]C=VWEIIM|;| ucsm9>~ )F;t=!t ="~J8u*jVEpiYYu 9>u&~u F;t=!t="u ~uu3Yu\39~GLhx[Bou F;7|BjunYYEPME\Bh6BEPETBucsm9>~~F;t=!t ="e} EPEPuu WE;EE9;G|GEG E~lF@ XE~#vPuE uM9EME}(u$]u EuuuuVu @uE]}}t jV7YY}%=!VY}$MVuu u$誩ujVuu v]{ v&}u$u uSuuu V t_^[Vt$TB^USVWO EMcsm"u ;t&t#;r @ Aft#x}u}jPuu jx u#ց!rXxtR99u2yr,9Yv'QRtu$Vu uPuuu Q҃ u uu$Puuu Q 3@_^[]V5[B5XAօt![BtP5[BЅth|BAthlBPAt t$ЉD$D$^jYV5[B5XAօt![BtP5[BЅth|BAthBPAt t$ЉD$D$^\A5[BXAu5|ByYP5[B`Aá[BtP5|BTYЃ [B[BtPdA [Bj h7Bh|BAEuF\[B3G~t$hlBPAӉhBuӉ~pƆCƆKC`\BFhPAj PYeE FluhbBFlvl2YEj ?YVWA5[B5[BXAЋuNhjLYYt:V5[B5|B*YЅtjVYYlAN VY3WhA_^VwujY^jh87BuF$tPʝYF,tP輝YF4tP讝YF=u Fd.=u Fd=u Fd=uFdvdjY~d`QӋEYF`[_^ËD$|B|B|B|BËD$ L\BV9Ptk t$ ;rk L$^;s9Pt35|B*Yj h7B3}}؋] LtjY+t"+t+td+uDw}؅ua|B|B`w\`ZÃt<t+Ht3PPPPP뮾|B|B|B|B |B|BEPfEY3}9Eujצ9EtPY3Et tuO`MԉG`u@OdMGdu. @\BM܋ D\B@\B9M}Mk W\DEEuwdSUY]}؃}tjkYSUYt tuEԉG`uEЉGd3ËD$|BËD$|BËD$|Bt$tA3@jh7B 3}5|B.Y;uSEPǣY;t WWWWW(}t!hBA;thBPA;u AVnY|B}u u։E/EE3=Ëe}ujhAeEEUQVu VJ+E F YuU N -@t :"S3ۨt^NF F f F ^]u,{ ;t o@;u u fYuVeYfF WF>HN+I;N~WPu d EM F yM ttk(`BcB@ tjSSQ]#ƒt%FM3GWEPu @d E9}t N E%_[^G @SVt4u.D$ -L$ ;C>u8*uϰ?;|$ ^[U$xTB3ʼnSV3W MEЉ}ԉuuuuuĉuuI9uu-dVVVVV{}tE`pE@ @P)Yt6u)Yt(u(u4`B(k(YY3cB@$uu(Yt6u(Yt(u(u4`B(k(YY3cB@$";3Ʉ҉ủu؉uUC}], t-tHHt:M1M(MMM *u }ԋ;}M]Ek ʍDЉEu*u}ԋ;}MEk ʍDЉEItFht8ltwyMm;luCM]XMOM F<6u{4uCCM])<3u{2uCCe]9E~E}~-u]VUYEt E܉uE3EGEEPuu}PuESP5[BYЋ}t9uuEPS5[BYYY}gu;uEPS5[BqYYY;-u MC]SrEM!spHHZE'EEEQE0EEf t@}tGG@Gt3҉}@t;|;s؃ځMfEڋu3ۃ}} Ee9E~E ueEM t$EؙRPSWL_09]~MN̍+FfEE؉utLt΀90tAM܋M0@2If90t@@;u+E;uP\BE܋EI8t@;u+E܉E؃}E@t%ftE-tE+t E E]+]+]E uuЍESj 2 uċ}ЍE̍MJEYtEuWSj0E2 }EtQ~Mu܉EMPjPEFPF]u9EtuE̍}YuM MPEY}|EtWSj E(2 }t uӊeY]Et$M}Ԋ(3PPPPP#}tE`pE̋_^3[#ÍI{AAALAAAAAU$X(TB3ʼnX\BVtj YtjYX\B]|ux}tfff]pfElfehfmdE@jPEjP误E EЍEjE@uEDAEPPAjޘ̋L$X\BT$#T$# ʉ X\B-t"t t Ht3øøøøSUVWU3^WS~~~ 3~`\B +Ɗ  CMuANu_^][U$dTB3ʼnSWEPvxA3@;rEƅ t+];w+@P j Rg CCujv EvPWPjjAa3SvWPWPWv S&_DSvWPWPhv S_$3LEtLtL Ƅ@;rME3)EUЍZ w Lр wL р A;rŋ_3[Ŝj h7BaBGptltwhuj Yj Yewhu;5`Bt6tV0Au`\BtVÆY`BGh5`BuVAE뎋uj FYUS3SM7|Bu|B|A8]tEMapE`BD;FG;v}FF>uыuE}urlj{CjC C`BZf1Af0A@@JuL@;vFF~4C@IuC\C Ss3{95|BM_^3[jh8BMP}_huE;CWh Y؅Fwh#SuYYEuvh0AuFh=`\BtPۃY^hS=AFpaBj YuaBtVxY^3j h 8B aBFpt"~ltpluj ݌Yj iYeFl=hbBiEEj fYuËL$S3;VWt|$;wqj^0SSSSS1t$;uًъBF:tOu;u5j"Y3_^[VW3t$ x~Yu'9}BvV4A;}Bvuɋ_^VW3jt$t$詀 u'9}BvV4A;}Bvu_^VW3t$t$YYu-9D$t'9}BvV4A;}Bvu_^VW3t$t$t$范 u-9D$t'9}BvV4A;}Bvu_^ËD$V3;uVVVVV jX^Ë |bB3^ËD$V3;uVVVVVjX^Ë bB3^ËD$V3;uVVVVVjX^Ë xbB3^ø|bBøbBøxbBøcBj,h@8B!3ۉ]ȉ]ԉ]]܉]؉]jַY]EEPxY;t SSSSS/EPY;t SSSSSEPY;t SSSSSXẺ}B=cB=cBh, BZYu;t|8tx}B;t!PV4YYI}B;tP|YV贝@P9YY}B;VV藝Y@P5}B ;SSSSSQ}B;t P1|Y}Bh}BA;3A }B}Bk-uEFV YiE<+t<0|<9F3ۋujoYÀ>:u8FVتYk<E<9F<0}>:uFV踪YE<9F<0}9]t]E;t#jVj@w>tSSSSSUGu04U e} SVW}%yH@Eu jd[ult XcB $cBE +_jd_FjEÙU}+ЋڍGimÍ%[Ek+E;Ut}}u jd[ult E \cB E (cB;~D?%yH@u jd[ult 4XcB4$cBuk<M k<M$iM(}u5cB cB=cBkEP5 cB $cBYt3PPPPPEi$cBy$cB\& cB\&9$cB| )$cB cB=cB_^[UQVE3PuYt VVVVV$9uu32WS3C;cBu ;cB95}Bf95}B}B }BP}BP}BPu}BVP}BPRS }BPVVRV}BS]j}B d}B$f95\}BPh}BPf}BPu`}BVPb}BPwSb}BPVVwV^}BV$.VVVVVSRSSjYjXVVVVVjwSVjYj XH cB cB;ȋW};|";;~;}[^;|;;~;}3Gk<Gk<i;u 3;cB 3;$cBjh`8B?395}Bu*jYu95}Bu }BEKjYj h8Bj蹰Ye}EE E j赯YËT$Vt$WHFw  yBw t;t_+^USuMq39]u.芾SSSSS8]tE`pW} ;u+TSSSSSk8]tE`pUE9Xu Wu@YY4VEMQPREMQPRG;t;t+^8]tMap_[Uu M蟅EMA%}tMapjt$YYWVS3D$ }GT$ڃD$T$D$ }GT$ڃD$T$ uL$D$3؋D$A؋L$T$D$ ud$ȋD$r;T$wr;D$vN3ҋOu؃[^_QVjuƼ 3)~Du j$YFDu袼 D$FD^YSVD$ uL$D$3؋D$ Aȋ\$T$D$ ud$ȋD$r;T$wr;D$ vN3ҋ^[UQQE S3;VW89]5Au[SSSP;uAP3};wv»3jWu;YYEu4蟻 ۋ};w苻SSSSS袽뺋EEEPuWu ;r9]u utrYL";u9]OuQrYAE uuRYY_^[D$Vt$ ~:WuN\t/uyt u ҿu@@j.V%  ~UYYtGhH BVTYYt3h@ BVTYYt"h8 BVvTYYth0 BVeTYYu@8  _^U4MV3FuuuM|L~#)VVVVV@=S] C w}w };w};v#VVVVV}W|O\cBx+;E}_%yH@u jd[ulu] u}~#oVVVVV膻E%}yH@u jd_ulu~E+yjd؋Ǚ_Vhm+؍ADڋFRP|EڙVjSW|ȋEVj<WQ~|ȋEVj<WQh|Eڙ EPmYt VVVVV茹EPYt VVVVVqEPYt VVVVVVEEEEEE H} E܋EEԋEEЋEEt} u9utEPYtEڋNj_[^U$lTB3ʼneSVW=A]Ph׋~8FjPE؅YYuq 3EtSu׋3t{:uP)SY@ 2 }tSBnY_^3[oŔUSu M~]vaȈEE]Du}tE`p[jpMjQjMQhp EPD$tEME@t À}tMap[jt$QYYUSVuM~u39^uu uIJYYM;u(SSSSS/8]tE`p3h9] t8tKWE (D7t:uP:QtP8t :t@8u8uD0tA8tA8u_#8]tMap^[jt$ t$ ' U}}M f$ffGfG fG0fG@fGPfG`fGpIuЋ}]U}E3+3+u+~,WPVxYP9 ;uF yF N _Ff^[Vt$u V3Y^VYt^fF @tVPRYY^3^jh8B3}}j豣Y}3u;5BB98t^@ tVPV\YY3BUBH t/9UuPPYtE9}utP5Yu E܉}F3uࡈB4VIYYE}EtEqjYjYjTh8B 3}EP(AEj(j ^V(YY;`B5TB)@@ x@$@% @& ( `B;rf9}E;8X;E;|3FRj(j YYtM `BTB &@@ ``$@% @& (;rF9=TB|=TBe~mEtVtQtKu QAt%uN@ uNhF P YYt7F N@Cg5TBA33@ËeEVt$VP7YYt{b ;u3R@;u_3@tBfF uNSW<}B?u SxYuFjFXFF ?~>^^N _3[@^3^Ã|$t'Vt$ fF tVf f&fY^UQQEEE ESEVufF tNMEWEN t0~t);sWu6)~> +};]rZt VYu?}t 3ҋu+WuVpYP4 t;NjwM+;s9N E+3u 4EVPYYtEFKEE2E_^[ÃN U@BS3Vu E]]]F> t tjVhP BVU udhX BVEYYu M ;h` BVEYYu M hl BVDYYuM F> t8t֪SSSSShuEu uP3St3 EtBMH MXXXH_^[jh9BL33}jY]3u;5BB9tP@ uAFwFPYB4V蘏YYB@ t PVӏYYF뙋bj8Y BB9tFh PYYBu4`YB PAB<};t__ __OE 脦Ë}j,YVt$W3;uCWWWWWZF @t F f F u V0YFvvVYPX ;ljFtF uOVYt.VYt"VV<`Bzk(YYcB@$t }w u,9uv'ͥE"tME$ƉEEt8Et]}tE`pEEt0}tE`p3[_^U39|BPuu uuhpbBP]UWVu M};v;r=dBtWV;^_u^_]!ur*$DIAǺr $XHA$TIA$HAhHAHAHA#ъFGFGr$DIAI#ъFGr$DIA#ъr$DIAI;IA(IA IAIAIAIAIAHADDDDDDDDDDDDDD$DIATIA\IAhIA|IAE^_ÐE^_ÐFGE^_ÍIFGFGE^_Ðt1|9u$r $JA$JAIǺr +$IA$JAIAJA@JAF#шGr$JAIF#шGFGr$JAF#шGFGFGV$JAIJAJAJAJAJAJAJAJADDDDDDDDD D DDDD$JAJAJAKAKAE^_ÐFGE^_ÍIFGFGE^_ÐFGFGFGE^_A @tyt$Ix  QP4YYu UVMEM >t} ^]U$xTB3ʼnSV3W MEЉ}ԉuuuuuĉuuh9uu-VVVVV(}tE`pE@ @PYt6uYt(uu4`Bk(YY3cB@$uuhYt6uZYt(uLu4`B:k(YY3cB@$";҉ủu؉uuU C39Ẻ]ʀ Xw X BMk x Bj^;ƉEjY;{$UA3MEEEEĉEEWƒ t<t++tHHt9 u1M(MMM *u }ԋ}M]Ek ʍDЉEe*u}ԋ}MEk ʍDЉEItFht8ltwxMl;luCM]WMNM E<6u{4uCCM](<3u{2uCCe] ;YY=tBtˋ5tBU@VUoE>=Yt/jU;YYtJVUP[ t SSSSS8u5tBMtBB3Y]_^[5tBMtBUQMS39EVU t ]EE>"u39E"FE<tBU PFGYt} t M E FۋU Mt2}u t utBe>< t< uFN>}t EE3C3FA>\t>"u&u}t F8"u 339EEtIt\BuU tU}u< tK< tGt=Pt#FYt M E FM E  FYtFU FVtBU ME^[t U S39BVWu/h}BVS~B@AB;É5tBt8EuuUEPSS}E =?sJMsB;r6PO;Yt)UEPWV}E HtB5tB3_^[QQ~BSUVW=A33;j]u-׋;t ~B"Axu ţ~B~B;u׋;u3f9tf9uf9u=ASSS+S@PVSSD$4׋;t2Ux;YD$t#SSUPt$$VSSׅut$JY\$\$VAX;t;uA;p8t @8u@8u+@U;Yu VADUVWi VA_^][YYUTBeeSWN@;ǻt t УTB`VEPAu3uA3lA3A3EPAE3E3;uO@ u 5TB։5TB^_[jhH9BF3]3;;uSWWWWWjS=hBu8jكY}SHYE;t s uuE%9}uSW5DvBA3]uj詂YUVu MYuP'e FP%YuP'xYuFFM  FFu8M^tE`pUVu M)YEɋut:t@u@t6 et Et@uH80t S:[uH @BɈu}^tE`pD$Az3@3UQQ}uutEPBME MHEP8CE M jt$t$t$ÅVtVh@PVV)^jt$zYYjt$YYUSVWuMW3;u+j_VVVVV81}tE`p!9uv9u ~E 3 9Ew Տj"뺀}tU39u 3Ƀ:-ˋ:}?-u-s} ~FE38EE }u+]h BSV 3ۅt SSSSSn9]NtEG F80t.GHy-Fd| jd_F | j _FDBt90ujAPQ }tE`p3_^[U,TB3ʼnEESVW} j^VMQMQp0]C3ۃ;u萎SSSSS0諐oE;vuu3Ƀ}-+3;+MQNQP3}-3;QyA;tuESPuVuM_^3[FUjuuuu u]U$VWuME3E0U9}}}u ;u+認j^WWWWW0}tE`p9}vЋE 9Ew lj"}EGS#3;Eu ju^PSW t}Map;-u-F0F}je$xFV>YYL}ɀp@2%3 t-F]0F$xOFۃ3'3 u!0OF uU E1FF9UE uM܋ OMw;UE}~MW#UM#E Bf0f=9vËMmEFMf}EM}f}|QW#UM#EAf=v1FftFu0H;E t9u: @}~uj0Vh uE 8u}4$pWFXA3%#+ESYx ;r+F -F;Ӌ0|$;rSQRP3@0F;Uu |drjjdRP @0UF;u | rjj RP?0UF]0F}tE`p3[_^USVWu؋sMN/Ru-Kj^03PPPPPa}tE`p}v̀}t;u u3;-0@;-u-wC3G n0F} ~DYE[F}&ۀ}u9] |] } (Wj0Vf }tE`p3_^[U,TB3ʼnEESVW} j^VMQMQp0 >3ۃ;u>SSSSS0YZE;vu 3Ƀ}-+uMQMQP3}-P8<;tuESVudM_^3[AU0TB3ʼnEESVu Wj_WMQMQp0R=3ۃ;u腈SSSSS8蠊M;vދEHE3}-<0u +ȍEPuQW;;tXEH9E|-;E}(:t Gu_uEjuuuEjPuuuM_^3[@UEet_EtZfuu uuu u&]ÃatAtu uuuu u0u uuuu uu uuuu u|]Ujuuuuu u^]Vhh3V]= t VVVVV*^U B] B]EuMm]]z3@3h BAth BPAtjU SVW萝39 BE]]]hBpA;u3Y5AhBW;tP$xBW BPΜ$dBW$BP蹜(BEPJYYt SSSSS }u,hHBWP脜;Y0Bth0BWPlY,B,Bu;tm950BteP踜Y;t%MQj MQjP50B虜YЅtEu3EPcJYt SSSSS荆}r M :M1$B;t(PJY;ÉEt(B;tuP.YЉEuu uu5 BY_^[ËD$S3;VWt|$;w݄j^0SSSSS=t$;uً8tBOu;t BF:tOu;u蕄j"Y3_^[USVu39]Wu;u9] u3_^[];t} ;wVj^0SSSSSn9]uʋU;uу}u @B:tOu @B:tOtMu9]u;u}uE jP\Xx܃j"Y낋L$V3;|~ utB^átB tB^襃VVVVV輅^3@|$u3Ã%PBU}uu }MfofoNfoV fo^0ffOfW f_0fof@fonPfov`fo~pfg@foPfw`fpIuu}]U}u]] ÙȋE3+ʃ3+ʙ3+3+ uJu΃M;t+VSP' EMtw]U +щU+ى]u}MES;u5كMu }MMMU UE+EPRQL Eu }MʃE]u}]USVWUjjh kAu2l]_^[]ËL$At2D$H3:UhP(RP$R]D$T$SVWD$UPjhkAd5TB3PD$dD$(Xp t:|$,t;t$,v-4v L$ H |uhDID_뷋L$d _^[3d ykAuQ R 9QuSQcB SQcBL$ KCk UQPXY]Y[jDYUu MHE~EPjuH1 MH}tMapÃ=|BuD$ XbBAjt$YYUQQE VuEEWVE;Yu- NjJuMQuPA;ljEuAt PYϋƃk(`BD0 EU_^jhh9B|u܉uEu  Ƌ3;|;TBr!8 WWWWW藁ȋ`Bk( L1u&Y8? WWWWWV[P\Y}D0tuuu uE܉U~ ~8MME E܋U{uYU$TB3ʼn$V39(Euuu3t;u'~0n~VVVVV腀I Sރk(W<`BÊH$}Mtu3(u&~30~VVVVV@ tjjjVVYDϖ@l39HEP4At }Ae(uEueuE3< PM虿YujEVP5 0E+(jEVP5 FE3PPj QjMQPuFEuAOjEPV P48A%EE; }jEPj Pƅ  48A}EEd<t<u3f FFEMuU<t<u9u2f;EYE}tj XPE2f;EYtEE(9Eyc@%E3}u9(EeMe+ME;(s'UEA u E @E@E}rыE+jEPVEP48AEE;E+E;(r}9(EM3+ME;(s1UEAAf u Ef @@FF}f@@FFrNjE+jEPVEP48A'EE;"E+E;(w 9(E-Me+Mj^;(s,Uuf u f uufƁ}Rr3VVhQ++PPVhA;tyjEP+P5PE48At u; AE;GE+E;(E60jMQ(u08At EeE AEEuV}39ut j^9uu Ny +udyY'D@t E8u3!y)y0+E_[3^1jh9BuEux x 3;|;TBr!x8x WWWWWzɋ`Bk( L1tPY}D0tuu u EHx Px8ME EFuuYtBhYL$At I AI AAAAaËD$uw 3V3;|;TBrwVVVVV y3^Ëȃk( `BD@^USVu 3;W}u;v E;t3E;tv9wj^SSSSS0QyRuM>E9XfEf=v6;t;v WSV0T v*v8]tMap_^[;t.;w(vj"^SSSSS0x8]tE`puE;t8]0E`p$M QSWVjMQS] pA;t9] bM;tAzH;k;cWSV]S Sjt$t$t$t$VD$ u(L$D$ 3؋D$d$ȋd$Gȋ\$T$ D$ ud$ȋD$r;T$ wr;D$v N+D$T$3+D$T$ ؃ʋӋًȋ^UTB3ʼnESV394BWu8SS3GWhBhSPAt=4BAxu 4B9]~"MEI8t@;uE+H;E}@E4B;9] ]u@E 5,A39]$SSuuPu ֋;~Cj3Xr7D?=w2;tP*;Yt E]9]=Wuuuju օ5PASSWuu u֋;ˉMfE t)9];MuuWuu u;~Ej3Xr9D =w52;tjP);Yt 3;tAuVWuu uPAt"9]SSuSSuuuVSu AEV;Yu;EYY9]]]u@E9] u@E u+YEu3!;E SSMQuPu +;ÉEtԋ5TASSuPu u;ÉEu3~=w8=w1;tP(;Yt 3;tuSWO uWuuu u;ÉEu3%uEuPWu u +u#uWj:Yuuuuu uTA9]t u)YE;t 9EtP(Yƍe_^[M3*UuM9u(Mu$u uuuuu - }tMapUQQTB3ʼnE8BSV3;Wu:EP3FVhBVlAt58B4Axu jX8B8B;9]]u@E5,A39] SSuu Pu֋;~<w4D?=w&v06&v4.&v&&v8&v<&@v@ &vD&vH%vL%vP%vT%vX%v\%v`%vd%vh%vl%vp%vt%vx%v|%@%z%o%d%Y%N%C%8%-%"%%,^Vt$t5;cBtP$YF;cBtP$Yv;5cBtV$Y^Vt$t~F ;cBtP$YF;cBtP$YF;cBtP$YF;cBtP$YF;cBtPp$YF ;cBtP^$Yv$;5dBtVL$Y^>ȋAl;hbBtaBQpu@UV3PPPPPPPPU I t $uI t $s ^UQeS]u3Wru{vnM EtR:QuMPt<:Qu7Pt&:Qu!Pt:Qu E9}r?@IF@I<@I2@I(M Et:u@AE9]r3_[ +UV3PPPPPPPPU I t $u t $sF ^Ã=BV5tBu3^ÅSWu95tBtQ (uH5tBt>\$t6SCY%PC;Yv<8=uWSP' tu3_[^ËD8USVu M2];sTM胹~EPjSM Xt}tE`pE胸~1]}EPE%P贬YYtEjE]EYlj*3Ɉ]EAEjpUjRQMQVpEP$ouE M3e }tMap^[Ã=|BuD$Hw jt$YYUEu3@]@EEPE :E \E  Atu3]UQQS39]t7uYu1iiSSSSS k3蘱EW} ;t-M;JiSSSSSak3M];t@EE:E.]E.]V5AEPWuEP;te;t;E|Xh"Z;E~Eju";YYuh h(EPWuEP;t ;E}APhY3^_[j h9BIejZYeu uj EE E[ejYYUVuM/U3;u/hVVVVV%j}tE`pS] ;u/gVVVVVi}tE`pE9pu$EPSR }uMapiWf BDUtY:u3ljpMjQjJRWp EP$ufEfEfMffEEэ At ff CDtU;u3hjpMjQjKQWp EP$ufEuHfEfMffȋECэ At ff;u,ftHt2Ht&]]j^SSSSS0_E E@ME+t5+t(+t+t@u39MEUE E]E#¹;>t3;t/=t==PE/E&E=t=td;EMȿttB#Ux3G@tM}uMft tEtu\p\PESWuEPuuu |Au46ƃk(`BD0 AP?\Y\WA;u$6ƃk(`BD0 W8A븃uM@ uMW6Ѓk(`BYYMLЃk(`BD$ MeHMEtqjW62 ;ljEu^[8tM6jEP6]N u}uERP61 ;tSS6 ;tE0@M@uE#u } EE#;tD=t)=@t"=t)=@t"=t=@uEM#;u E]EE@]E#=@=tw;E;yvv0fE3H&HREEjSS6 tSSS6#ƒjEP6 utk}uYEE;bPjSS6 CSSS6#ƒE%=u6趤Y,Yj^0=uSj6 EASS6 EEE+PD=P6 9}ۋȃk( `BD$2M0ȃk( `BD$M 8]u!Et6ƃk(`BD0 _^[jhP:BU3u3};;uXj_8VVVVV7ZY39u;t9utE%@t‰uuuu uEPKEEE;tT3}9ut(9utk( `BD 7VYUjuuuuu ]US39]u3=WuM}9_u&uu uv 8]Map9]u.WSSSSSY8]tE`pVu ;u.VSSSSSX8]tE`pEfM@D:Et,9]u3D8u^F:u3 3EfFD:t9]u3M:t3ۊF3f;u!f;t 9]v8]tE`p3^_[H8]tMapjt$t$t$UUVujX;EUuU U jW3;|;5TBr'U8UWWWWW W3ƃk(S`BƊHu]U8CU G;׉}M ;@$EHHuШUM E<GHtvO tn39Utg @M8UED tN L% tC9Ut> @M}ED% u$ L& t9Ut @MED& jMQuP4xA};}}DR}rtyM9 uqoШu!T8SWWWWWV;jY;MrEu裋;YES Sc }E;}EM<< t GAMEH;sA8 u AAM uEmEjEPjEP4xAu AuE}t?DHt} t ML%;}u} tjjju} t GE9EGD@uG+E}EOxG3@;}rO@ dBt dBu ZR*zA;u@ AHt$GQ|  T%Gu  T&G+ؙjRPuE+}Pu Wujh,AEu4APQYME;E tPYE}EuEօtMf9 u }E;}EEff tfGG@@EM;s!Hf9 uEf MEjEPjEP4xAu AuZ}tTDHt'f} tf MLML%D& );}uf} tjjju`f} tf GGE9E t@uffGG+}}Aj^;ubP jP0xmhej3[_^jhp:B MEu1P P 3;|;TBr!P8O WWWWWRɋ`Bk( L1tPY}D0tuu u EO O8ME ELu:YUSuM$]C=wE苀Xu]}EPE%P?YYtEjE]EY 3Ɉ]EAEjppEPQEPEjP u8EtE`p3E#E }tMap[UuMoE MUTu}tMA#E3t3@}tMapjjt$ jUW}3كE 8t3_U(TB3ʼnESVuWu} MEP3SSSSWEPEPEEVP (Eu+u8]tE`pjX/u8]tE`pjEuEu8]tE`p3M_^3[(U(TB3ʼnESVuWu} MEP3SSSSWEPEPEEVP(Eu+u8]tE`pjX/u8]tE`pjEuEu8]tE`p3M_^3[UMSVu3;Wy uLj^0SSSSSN9] v݋U;ӈ~3@9E wgLj"Y;0F~:tGj0Y@J;M;ӈ|?5| 0H89t>1uA~W]$@PWVԦ3_^[]UQU BSVW%#ωE Bپ%ۉut;t<($3;u;uEfM XL<] ME ΉHuP Ɂ։PtM _^fH[U0TB3ʼnEES]VEWEPEPYYEPjj ufuЉCE։EԉCEPuVR$t3PPPPPKM_s ^3[|WVU33D$ }GET$ڃD$T$D$ }GT$ڃD$T$ u(L$D$3؋D$d$ȋd$G؋L$T$D$ ud$ȋD$r;T$wr;D$v N+D$T$3+D$T$My؃ʋӋًȋOu؃]^_̀@s sË3Ҁ33UEM %#Vt1W}3;t VV%YYIj_VVVVV8K_uPu t $$YY3^]UTB3ʼnEV395 eBtN=XeBu'XeBuf pVMQjMQP`Aug= eBuAxuЉ5 eBVVjEPjEPVdAPA XeBtVURPEPQtAtfEM3^\ eBUSVu 3;t9]t8uE;tf3^[uM-E9XuE;tff8]tE`p3@ʍEPPIYYt}E~%9M| 39]RuQVj p,AEuM;r 8^t8]eMapYG*8]tE`p:39]PuEjVj p,A:jt$t$t$U TB3ʼnEjEPhuEAu EPp.YM3U4TB3ʼnEEME؋ESEЋVE܋EW3;E M̉}}_5xAMQPօ,At^}uXEPu օtK}uEu܃Eu uYF;~[wSD6=w/;t8-WWuujuӋ;u3P;Yt E}9}t؍6PWuW# VuuujuӅt];tWWuSVuWu At`][9}ԋAuWWWWVuWu Ӌ;t38XtB;tBMu 4tB;u`9] t$9tBtktJ^_[9]jR;YtBtމ9tBujtR;YtBtÉ5tB;ut}+}uc;Y|R9tN469]YuEEFEG49u?sjjW5tBR ;tUN9];}ߍG;3=?(Pj5tBR ;U YMtB9] txujV@Y@PQ;YYt\VV@Y@PW Q t SSSSSM+E@#QWXAuMW*WmY9]t u_YEjuNEY3UUTB3ʼnEESV39u WEN@0ppFX}𥥥< ыH Ή}e ˋ] ׍<;0PHr;sE39]8tr;rs3CۉptAHHU3;r;s3FXt@MHe ?< PU މxX4;Ur;sE}0tO3;rs3B҉HtCXM E} 3&HP EH9ptջXu00xE04? H ʅˉpHtfMfH M_^3[jh:B%39dBtVE@tH94hBt@EU.E=t =t33@Ëe%4hBeUEeUS\$U3;u3=VWSFV;YYt SVW%N t UUUUU3_^][USuMZE3;u(qSSSSS8]tE`p3tVu9^u:u PYYAD2t@:t> 9M u H9U t @ff;u9M u8]tMap8]tE`p3^[jt$ t$ 7 %AupYËT$B J3^'BE eMz@ËT$B J3*'BM=M=T$B J3((BkM%@T$B J3T(BHM=MT=MP=M =MH?M@ML?M`?M4?MD?MYË@P0YË8P"YËT$B 3 H)B̍M;M;MT$B 3J3*BM>T$B $3]*B̍M;M;Ma;Mg=Mn>XT=@I=T$B 3+Bi̍M:M:M;T$B 3+B/̍Mz:Mr:M:M=TXT$B 3j+B̍M*:M":Mq:M=TWT$B 3,B̍M4M4M4T$B 83d,BO̍M9M9M9;;T$B 3,B̍MJ9MB9M9lVX9839,(9 994: 66688881T$B 3]/B̍M6M6Ma6T$B 3X0B̍M5M5M!6T$B 30BO̍P5T5L5T$B \30B̍M7M7T$B J3h1B̋EPOYËT$B J3=01B̋EPYËT$B J3 \1B̋T$B J31BZ̍eT$B 3J342B"̋EPYËT$B J3}`2B̋T$B J3X2BT$B J3=P6BAhALtBBPtBTtBsYhLtBXtBh AXYh A?Y̹LtBXtBBh0TBAttBBttB >>>========>(>0>>>P>`>n>RDBD2DDDDDj=dDn@DDDDvD DDCCCCCCrCXCJC|?????????? @@.@@@T@`@8C@@@@@@@ A$A>>H=&?8?B?R??AAA@@S!Ar8AÉA@A<@@ hFU  bad allocationDeleteNoRemoveForceRemoveValBDMSAAAAAAA|AxB@*0[ a ӯ>OnF%D,3&OFP0 MenuUrl2LeechLinksDAP TimeoutReferer: FAAAAAAA|AjKK.=sbДuO4%@:UCw3btI/{|̤FlashGot ErrorUnsupported Download Manager %s!BT@PV@T@|!B@\@`\@0\@(!B@*@pN@Q@Q@@ B@*@pN@P@P@@H B@*@I@I@pI@@B@*@ Q@Y@Y@@B@*@+@`I@PI@@PB@*@@G@0G@ G@@B@*@Z@Y@Y@@BA@C@pA@dB@*@@?@0?@ ?@@B@*@3@3@3@@B@*@+@3@p3@@B@*@ Q@Y@Y@@B@*@;@+@+@@TB@*@9@9@9@@B@*@@@@@B@@@FGGuard Illegal statedapie.catcherDownload Accelerator PlusAddUrlListAddUrl%a, %d-%b-%Y %H:%M:%S GMT; expires = JetCar.NetscapeFlashGetWG.WGUrlListReceiverFree Download ManagerShowAddUrlListDialogCommentUrlRefererAddURLToListAddDownloadWG.WGUrlReceiverBitCometAgent.BcAgent.1BitCometAddLinkListunkownunknowntitleAddLinkfdcatch.fdnscatcherFreshDownloadAddURLGetRightCan't find GetRight executableSoftware\Headlight\GetRightSoftware\Headlight\GetRight\Config\getright.exeInstallDirCan't launch GetRight/referer=%s /cookie=%s /url=%soldtogetright.exe"%s" %s %sNetMoles.NetMolesHiDownloadNMAddAllUrlNMAddUrlInstantGet.AddUrlInstantGetIDMGetAll.IDMAllLinksProcessorInternet Download ManagerParseWizardLeechGetIE.AddURLLeechGet 2002LeechGetIE.LeechIELeechGetAddURLswxDownload FastCan't find wxDownload Fast executableSoftware\wxWidgets Program\wxDownload FastExePathCan't launch wxDownload FastFlashGot can't create file TEMPURL.LST for wxDownload FastwTEMPURL.LSTc:--reference=%s --list="%s"--reference=%s "%s""%s" %s DMIE.MoveURLDownload MasterIDAIE.MoveURLIDAInternet Download AcceleratorGigaGetBho.CatchRightClick.1GigaGetAddAllUrlWellGetopen-u addlistFlasGot can't create file TEMPURL.TXT for WellGetTEMPURL.TXT-r:"%s" -c:"%s" "%s"NxApi.myComponentCan't find WellGet executable%s\WellGet.exeSoftware\WellGet"B@*@d@d@pd@@MassDown.AddUrl.1Mass DownloaderEnd.Begin.AddUrlWithRefererx"B@*@+@ph@`h@@d"B@*@+@@@@NetAnts.APINetAnts"B@*@h@h@h@@NTIEHelper.NTIEAddUrlNet TransportAddList#B@*@h@l@l@@NXIEHelper.NXIEAddURLNet Transport 2p#B@*@pl@`l@Pl@@Orbitmxt.OrbitOrbitdownloadListdownload#B@*@q@q@q@@ClickCatcher.DownloadAllFromContextMenuReGetUrlListReGet timeoutClickCatcher.DownloadFromContextMenuPostDataInfoCookieReGetDx.RegetDownloadApiAddDownloadToList$B@*@~@}@}@@SDExt.StarDownExtStar DownloaderDownloadURL`$B@*@@@@@TrueDownloaderProject.TrueDownloaderTrueDownloaderMenuURL$B@*@@@0@ @@ThunderAgent.AgentThunderCommitTasksAddTask%B@*@Z@@@0@@Xunleibho.CatchRightClick.1Thunder (Old)T%B@*@ Q@@@@h%B@*@pN@@@@aBAD unexpected unknown error! BAD COM error: %s OK %s|FlashGot Win Bridge %s 0.5.99Unknown error 0x%0lXIDispatch error #%dMalformed header%sDownload manager not properly installed. %stestTemporary file %s is emptyCan't open file %srb.done-o@@R@k@@@S@@@%@3@6@`= ߏTe++|%Bۢ@csm %B @!@kernel32.dllCorExitProcessmscoree.dllHH:mm:ssdddd, MMMM dd, yyyyMM/dd/yyPMAMDecemberNovemberOctoberSeptemberAugustJulyJuneAprilMarchFebruaryJanuaryDecNovOctSepAugJulJunMayAprMarFebJanSaturdayFridayThursdayWednesdayTuesdayMondaySundaySatFriThuWedTueMonSuna/pam/pm./\?*@K@K@runtime error TLOSS error SING error DOMAIN error R6034 An application has made an attempt to load the C runtime library incorrectly. Please contact the application's support team for more information. R6033 - Attempt to use MSIL code from this assembly during native code initialization This indicates a bug in your application. It is most likely the result of calling an MSIL-compiled (/clr) function from a native constructor or from DllMain. R6032 - not enough space for locale information R6031 - Attempt to initialize the CRT more than once. This indicates a bug in your application. R6030 - CRT not initialized R6028 - unable to initialize heap R6027 - not enough space for lowio initialization R6026 - not enough space for stdio initialization R6025 - pure virtual function call R6024 - not enough space for _onexit/atexit table R6019 - unable to open console device R6018 - unexpected heap error R6017 - unexpected multithread lock error R6016 - not enough space for thread data This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information. R6009 - not enough space for environment R6008 - not enough space for arguments R6002 - floating point not loaded Microsoft Visual C++ Runtime Library ...Runtime Error! Program: D&B.@!@Unknown exceptionpyByB@X&B)@!@bad exceptionEncodePointerKERNEL32.DLLDecodePointerFlsFreeFlsSetValueFlsGetValueFlsAllocInitializeCriticalSectionAndSpinCount(null)(null)EEE50P( 8PX700WP `h````xpxxxx  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~=SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDecTZ.com.bat.cmd.execcs=UTF-8UTF-16LEUNICODEEEE00P('8PW700PP (`h`hhhxppwppe+000~PAGAIsProcessorFeaturePresentKERNEL32 Complete Object Locator' Class Hierarchy Descriptor' Base Class Array' Base Class Descriptor at ( Type Descriptor'`local static thread guard'`managed vector copy constructor iterator'`vector vbase copy constructor iterator'`vector copy constructor iterator'`dynamic atexit destructor for '`dynamic initializer for '`eh vector vbase copy constructor iterator'`eh vector copy constructor iterator'`managed vector destructor iterator'`managed vector constructor iterator'`placement delete[] closure'`placement delete closure'`omni callsig' delete[] new[]`local vftable constructor closure'`local vftable'`RTTI`EH`udt returning'`copy constructor closure'`eh vector vbase constructor iterator'`eh vector destructor iterator'`eh vector constructor iterator'`virtual displacement map'`vector vbase constructor iterator'`vector destructor iterator'`vector constructor iterator'`scalar deleting destructor'`default constructor closure'`vector deleting destructor'`vbase destructor'`string'`local static guard'`typeof'`vcall'`vbtable'`vftable'^=|=&=<<=>>=%=/=-=+=*=||&&|^~(),>=><=<%/->*&+---++*->operator[]!===!<<>> delete new__unaligned__restrict__ptr64__clrcall__fastcall__thiscall__stdcall__pascal__cdecl__based(BBBBxBlB`BXBLB@BA Bh BT B4 B B8B0B B,B(B$B BBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBxBpBdBLB@B,B BBBBBhBLB(BB B B B B B Bt Bl B` BP B4 B B B B Bp BT B0 B B B B BAGetProcessWindowStationGetUserObjectInformationAGetLastActivePopupGetActiveWindowMessageBoxAUSER32.DLL ((((( H h(((( H H  !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~1#QNAN1#INF1#IND1#SNANCONOUT$HTB&B&RSDSI9tXNx:\CVS\mozilla\flashgot\native\FlashGot\Release\FlashGot.pdb$PBBBB$PB@BDPBBBBDPB@B\PBB,B8BB\PB@BxPBhBxBB8BBxPB@hBPBBBB8BBPB@BPBBB,BHB8BBPB@BPB@dBtBHB8BBPBBBBB8BBPB@BQB@BBB8BB8QB(B8BHB8BB8QB@(B`QBxBBB8BB`QB@xBQBBBBBQB@BQBB$B4B8BBQB@BQBdBtBB8BBQB@dBQBBBBB8BBQB@BQB B B, BHB8BBQB@ B RB\ Bl B| B8BB RB@\ BLRB B B B B8BBLRB@ BlRB@!B!B B8BBRBnAtA˄A0ALAыAAΌAwAXAAAA(=^=\;>=>L;>=?0=d?<n?>>>========>(>0>>>P>`>n>RDBD2DDDDDj=dDn@DDDDvD DDCCCCCCrCXCJC|?????????? @@.@@@T@`@8C@@@@@@@ A$A>>H=&?8?B?R??InternetSetCookieAWININET.dll)InterlockedExchangeuMultiByteToWideCharWideCharToMultiByteqGetLastError,InterlockedIncrement\LocalFreelstrlenA:CompareStringA;CompareStringW(InterlockedDecrementVSleep4CloseHandlefCreateProcessAGetTempPathAXLocalAllocFormatMessageAKERNEL32.dllMessageBoxAFindWindowAUSER32.dllRegCloseKeyRegQueryValueExARegOpenKeyExAADVAPI32.dllShellExecuteASHELL32.dllCoCreateInstanceCLSIDFromProgIDOleRun;CoInitializeiCoUninitializeole32.dllOLEAUT32.dllGetACPtGetLocaleInfoAGetThreadLocaleGetVersionExAHeapDestroyHeapAllocHeapFreeHeapReAllocHeapSizeGetProcessHeapRaiseExceptionVirtualAllocGetProcAddressGetModuleHandleARtlUnwindExitProcessGetTimeFormatAGGetDateFormatAGetSystemTimeAsFileTimeFindCloseFileTimeToSystemTimeFileTimeToLocalFileTimeSGetDriveTypeAFindFirstFileAEnterCriticalSectionQLeaveCriticalSectionnMoveFileADeleteFileAGetCommandLineAGetStartupInfoADeleteCriticalSectionVirtualFreeHeapCreateWriteFileGetStdHandle}GetModuleFileNameAJSetUnhandledExceptionFilter^TerminateProcessBGetCurrentProcessnUnhandledExceptionFilter9IsDebuggerPresenteTlsGetValuecTlsAllocfTlsSetValuedTlsFree(SetLastErrorFGetCurrentThreadIdRLoadLibraryA#InitializeCriticalSectionGetCPInfoGetOEMCPGetTimeZoneInformationiGetFullPathNameA@GetCurrentDirectoryA$SetHandleCountfGetFileTypeFreeEnvironmentStringsAUGetEnvironmentStringsFreeEnvironmentStringsWWGetEnvironmentStringsWQueryPerformanceCounterGetTickCountCGetCurrentProcessIdSetFilePointer"GetConsoleCP3GetConsoleModeDLCMapStringAELCMapStringWGetStringTypeAGetStringTypeW7SetStdHandleFlushFileBuffersSCreateFileAReadFileWriteConsoleA5GetConsoleOutputCPWriteConsoleWSetEndOfFileSetEnvironmentVariableAlAB.?AVCAtlException@ATL@@B.?AV_com_error@@lAB.?AVDMSupport@@B.?AVDMSupportCOM@@B.?AVDMSBitComet@@B.?AVDMSDownloadAcceleratorPlus@@B.?AVDMSDownloadMaster@@B.?AVDMSWestByte@@B.?AVDMSFlashGet@@B.?AVDMSAddUrlFamily@@B.?AVDMSFreeDownloadManager@@B.?AVDMSFreshDownload@@B.?AVDMSGetRight@@B.?AVDMSGigaGet@@B.?AVDMSHiDownload@@B.?AVDMSInstantGet@@B.?AVDMSInternetDownloadAccelerator@@B.?AVDMSInternetDownloadManager@@B.?AVDMSLeechGet2002@@B.?AVDMSLeechGetBase@@B.?AVDMSLeechGet@@B.?AVDMSWellGet@@B.?AVDMSwxDownloadFast@@B.PADB.PAXB.?AVDMSMass_Downloader@@B.?AVDMSNetAnts@@B.?AVDMSNet_Transport@@B.?AVDMSNet_Transport2@@B.?AVDMSOrbit@@B.?AVDMSReGet@@B.?AVDMSStarDownloader@@B.?AVDMSTrueDownloader@@B.?AVDMSThunder@@B.?AVDMSThunderOld@@@ @lAlAB.?AVtype_info@@r@lAB.?AVbad_alloc@std@@B.?AVexception@std@@N@D@HBDB@B<B8B4B0B(B BB BBBBBBBBBBBBBBBBBBBBBBBBtBlB`BTBPBLB@B,B B TBBBuslABlB @B B|BLB(BBBBdB,BBBB HB!PB"BxByBzB|BlB        ! 5A CPR S WY l m pr   )    lAlAr@B.?AVbad_exception@std@@+lA+lA+lA+lA+lA+lA+lA+lA+lA+lA x BB abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ`\B`y!@~ڣ @ڣ AϢ[@~QQ^ _j21~BCaBaBaBaBaBcBB0BBTBaBaB`\BpPSTPDTbBbB;Zx0Nm:Yw/Ml BB.cB<B<B<B<B<B<B<B<B<BcB.5 @ @@@@ @P@$@@ @4@N@ p+ŝi@]%O@qוC)@D@<զIx@oGAkU'9p|Bݎ~QCv)/&D(DJzEeǑF e uuvHMXB䧓9;5SM]=];Z] T7aZ%]g']݀nLɛ R`%u?q= ףp= ף?Zd;On?,eX?#GGŧ?@il7?3=BzՔ?aw̫?/L[Mľ?S;uD?g9Eϔ?$#⼺;1az?aUY~S|_?/D?$?9'*?}d|FU>c{#Tw=:zc%C1 PAPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPK {7$!){!{!content/flashgot/FlashGot.h#include "stdafx.h" #include #include #include #include #include #include #include #include #include #include #define VERSION "0.5.99" #define DMS_POLL_DELAY 100 #define DMS_POLL_TIMEOUT 60000 enum OpType { OP_ONE=0, OP_SEL=1, OP_ALL=2, OP_QET=3, OP_MIN=OP_ONE, OP_MAX=OP_QET }; typedef struct _LinkInfo { bstr_t url; bstr_t comment; bstr_t cookie; bstr_t postdata; } LinkInfo; #define EXTRAS_COUNT 5 typedef struct _DownloadInfo { char *dmName; OpType opType; bstr_t folder; bstr_t *rawParms; bstr_t referer; LinkInfo *links; int linksCount; bstr_t *extras; } DownloadInfo; void fail(char *msg, int code); class CookieManager { private: const DownloadInfo *downloadInfo; public: CookieManager() : downloadInfo(NULL) {} CookieManager(const DownloadInfo *downloadInfo) : downloadInfo(downloadInfo) { setAll(downloadInfo, 3600); // 1 hour timespan; } static void makeExpiration(char *expiration, size_t buflen, int offset) { time_t now; time(&now); now += offset; strftime(expiration, buflen, "%a, %d-%b-%Y %H:%M:%S GMT", gmtime(&now) ); } static void setCookie(const bstr_t *url, const bstr_t *cookie, char *expiration) { int cookieLen; if(cookie && (cookieLen=cookie->length())) { char *lpszUrl=*url; char *lpszCookie=new char[cookieLen+16+strlen(expiration)]; for(char *cookiePiece=*cookie; cookiePiece && cookiePiece[0]; ) { if(cookiePiece[0]==' ') { cookiePiece++; continue; } char *nextPiece=strchr(cookiePiece,';'); if(nextPiece) { nextPiece[0]='\0'; nextPiece++; } ; InternetSetCookie(lpszUrl, NULL, strcat(strcat(strcpy(lpszCookie,cookiePiece),"; expires = "),expiration)); cookiePiece=nextPiece; } delete [] lpszCookie; } } static void setAll(const DownloadInfo *downloadInfo, long offsetExpiration) { char expiration[64]; makeExpiration(expiration,64,offsetExpiration); LinkInfo *links=downloadInfo->links; for(int j=downloadInfo->linksCount; j-->0;) { LinkInfo l=links[j]; setCookie(&l.url,&l.cookie,expiration); } } }; class FGArray { private: VARIANT varStr,array; SAFEARRAY *psa; int elemCount; long ix[1]; void init(int elemCount) { this->psa=createSafeArray(elemCount); this->elemCount=elemCount; ix[0]=0; varStr.vt=VT_BSTR; } public: static SAFEARRAY *createSafeArray(int elemCount) { SAFEARRAYBOUND bounds [1]; bounds[0].cElements=elemCount; bounds[0].lLbound=0; return SafeArrayCreate(VT_VARIANT, 1, bounds); } FGArray(int elemCount) { init(elemCount); } FGArray(const DownloadInfo *downloadInfo) { init(downloadInfo->linksCount * 2 + 1); // linksCount * 2 (url,info) addString(downloadInfo->referer); addLinks(downloadInfo); } void addLinks(const DownloadInfo *downloadInfo) { LinkInfo *links=downloadInfo->links; for (int j=0, linksCount=downloadInfo->linksCount; j < linksCount ; j++) { LinkInfo l=links[j]; addString(l.url); addString(l.comment); } } BOOL addString(bstr_t s) { if(ix[0]vt = VT_ARRAY | VT_VARIANT | VT_BYREF; // VBScript Array array->pparray=&psa; return array; } VARIANT *asVariant() { return asVariant(&this->array); } ~FGArray() { SafeArrayDestroy(psa); } }; class FGCOMGuard { private: static FGCOMGuard *instance; static int refCount; FGCOMGuard() { CoInitialize(NULL); } ~FGCOMGuard() { CoUninitialize(); } public: static void addClient() { if(!instance) instance=new FGCOMGuard(); refCount++; } static void removeClient() { if(--refCount<0 || !instance) throw "FGGuard Illegal state"; if(refCount == 0) { delete instance; } } }; // [START DOWNLOAD MANAGER SUPPORT CLASSES] class DMSupport { protected: static BOOL createProcess(char *commandLine, PROCESS_INFORMATION *pi) { STARTUPINFO si; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); PROCESS_INFORMATION *mypi=NULL; if(!pi) { pi=mypi=new PROCESS_INFORMATION; } ZeroMemory(pi, sizeof(pi) ); BOOL ret=CreateProcess( NULL, commandLine, // Command line. NULL, // Process handle not inheritable. NULL, // Thread handle not inheritable. FALSE, // Set handle inheritance to FALSE. 0, // No creation flags. NULL, // Use parent's environment block. NULL, // Use parent's starting directory. &si, // Pointer to STARTUPINFO structure. pi ) // Pointer to PROCESS_INFORMATION structure. ; if(mypi) { closeProcess(mypi); delete mypi; } return ret; } static void closeProcess(PROCESS_INFORMATION *pi) { CloseHandle( pi->hProcess ); CloseHandle( pi->hThread ); } public: virtual void check(void) = 0; virtual void dispatch(const DownloadInfo *downloadInfo) = 0; virtual const char *getName(void) = 0; }; #define COMCALL(Call) if(hr=FAILED(Call)) throw _com_error(hr) #define HELPER(name) FGCOMHelper name(this->getProgId()) class FGCOMHelper { private: HRESULT hr; CComDispatchDriver comObj; CComPtr lpTDispatch; VARIANT tmpVarStr; const char *className; void prepareCOMObj() { COMCALL(lpTDispatch.CoCreateInstance(_bstr_t(className),NULL)); comObj=lpTDispatch; } public: void getMemberID(char *memberName, DISPID *dispid) { USES_CONVERSION; OLECHAR FAR* oleMember=A2OLE(memberName); COMCALL(comObj->GetIDsOfNames(IID_NULL, &oleMember, 1, LOCALE_SYSTEM_DEFAULT, dispid)); } void invoke(DISPID *dispid, VARIANT *parms, const unsigned int parmsCount) { COMCALL(comObj.InvokeN(*dispid,parms,parmsCount,NULL)); } void invoke(DISPID *dispid) { COMCALL(comObj.Invoke0(*dispid,NULL)); } void invoke(char *memberName, VARIANT *parms, const unsigned int parmsCount) { DISPID dispid; getMemberID(memberName,&dispid); invoke(&dispid,parms,parmsCount); } void invoke(char *memberName, _bstr_t parm) { tmpVarStr.bstrVal=parm; invoke(memberName,&tmpVarStr,1); } void invoke(char *memberName) { invoke(memberName,&tmpVarStr,0); } IDispatch *getIDispatch() { return lpTDispatch; } void set(char *propertyName, VARIANT *val) { USES_CONVERSION; LPCOLESTR oleMember=A2COLE(propertyName); COMCALL(comObj.PutPropertyByName(oleMember, val)); } void set(char *propertyName, bstr_t val) { tmpVarStr.bstrVal=val; set(propertyName,&tmpVarStr); } void get(char *propertyName, VARIANT *val, UINT indexCount) { DISPPARAMS dispparams = {indexCount==0?NULL:&(val[1]), NULL, indexCount, 0}; DISPID dispid; getMemberID(propertyName,&dispid); COMCALL(lpTDispatch->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, &dispparams, val, NULL, NULL)); } FGCOMHelper(const char *className) { this->className=className; prepareCOMObj(); tmpVarStr.vt=VT_BSTR; } ~FGCOMHelper() { } }; class DMSupportCOM : public DMSupport { protected: virtual const char * getProgId() = 0; public: DMSupportCOM() { FGCOMGuard::addClient(); } void check() { HRESULT hr; CLSID clsid; COMCALL(CLSIDFromProgID(_bstr_t(getProgId()),&clsid)); } virtual ~DMSupportCOM() { FGCOMGuard::removeClient(); } }; class DMSDownloadAcceleratorPlus: public DMSupportCOM { protected: const char * getProgId() { return "dapie.catcher"; } public: const char * getName() { return "Download Accelerator Plus"; } void dispatch(const DownloadInfo *downloadInfo); }; PK {7Hҭ%content/flashgot/FlashGot_License.txtFlashGot - a Firefox extension for external download managers integration Copyright (C) 2004-2007 Giorgio Maone - g.maone@informaction.com This program is released under a *modified* version of the GPL General Public License (see ***Exceptions to GPL*** below). 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 2 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; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***Exceptions to GPL*** The following exceptions apply to DAP-Enabled FlashGot, which is a FlashGot build working in conjunction with Download Accelerator Plus: 1 - You can NOT redistribute and/or modify a DAP-Enabled FlashGot. Redistributing and/or modifying a DAP-Enabled FlashGot copy is a copyright violation. 2 - You can't reverse engineer or decompile a DAP-Enabled FlashGot copy. Such a behaviour is a copyright violation. GPL "WITHOUT ANY WARRANTY" statement still applies. ***End GPL Exceptions*** You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA PK {7&&content/flashgot/about.xul Enables Firefox, Mozilla Suite, Netscape and Thunderbird to handle single and massive ("all" and "selection") downloads using the most popular external download managers for Windows, Mac OS X, Linux and FreeBSD (dozens currently supported, see Extension's Home Page for details). FlashGot offers also a Build Gallery functionality which helps to synthetize full media galleries in one page, from serial contents originally scattered on several pages, for easy and fast "download all".PK {7h-N content/flashgot/contents.rdf chrome://flashgot/content/flashgotOverlayFF.xul chrome://flashgot/content/flashgotOverlay.xul chrome://flashgot/content/localeCheckOverlay.xul chrome://flashgot/content/flashgotOverlayMoz.xul chrome://flashgot/content/flashgotOverlay.xul chrome://flashgot/content/localeCheckOverlay.xul chrome://flashgot/content/flashgotOverlayTB.xul chrome://flashgot/content/flashgotDMOverlayMoz.xul chrome://flashgot/content/flashgotDMOverlayFF.xul chrome://flashgot/content/filepickerOverlay.xul PK {7 h'content/flashgot/en-US/about.propertiesextensions.{19503e42-ca3c-4c27-b1e2-9cdb2170ee34}.description=Enables single and massive ("all" and "selection") downloads using the most popular external download managers for Windows, Mac OS X, Linux and FreeBSD (dozens currently supported, see Extension's Home Page for details). FlashGot offers also a Build Gallery functionality which helps to synthetize full media galleries in one page from serial contents originally scattered on several pages, for easy and fast "download all". aboutTitle=About %S extensionContributors=Contributors: extensionContributors.tip=People you should thank for this extension extensionCreatorLabel=Author: changelog=Changelog changelog.tip=Show changelog license=License license.tip=Read end-user license logo.tip=Visit extension home page sponsor.tip=Visit sponsor home page informaction.tip=Visit InformAction home page extensionHomepage.tip=Visit extension home page extensionCreator.tip=Visit author home page PK {7uHH#content/flashgot/en-US/contents.rdf PK {7^#content/flashgot/en-US/flashgot.dtd PK {7*content/flashgot/en-US/flashgot.propertiesflashgot=FlashGot custom.exeFile=Locate executable file custom.new.title=New Custom Download Manager custom.new.text=Enter Download Manager name: custom.new.error=Error:\nDownload Manager name is invalid or already in use! ph.URL=URL ph.REFERER=Referer URL ph.COOKIE=Cookie ph.FOLDER=Destination folder ph.POST=POST data ph.UFILE=URL list file ph.CFILE=cookies.txt file wellget.mustBeSameDrive=WellGet portable path must point to an executable located\nin the same drive as as your Firefox portable profile (%S). PK {7\%  %content/flashgot/filepickerOverlay.js/***** BEGIN LICENSE BLOCK ***** FlashGot - a Firefox extension for external download managers integration Copyright (C) 2004-2007 Giorgio Maone - g.maone@informaction.com 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 2 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; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ***** END LICENSE BLOCK *****/ window.addEventListener("load",filePickerDirtyPatch,false); function filePickerDirtyPatch() { if(window.title && window.title.indexOf("FlashGot")==0 && typeof(window.gotoDirectory)=="function") { window.fpdp_gotoDirectory=window.gotoDirectory; window.gotoDirectory=function(d) { window.fpdp_gotoDirectory(d); if( filePickerMode == nsIFilePicker.modeGetFolder && textInput && (!textInput.value) && d && d.path ) { textInput.value="."+(d.path.indexOf("\\")>-1?"\\":"/"); textInput.select(); textInput.focus(); } } } } PK {78Lh&content/flashgot/filepickerOverlay.xul