diff --git a/CHANGELOG.md b/CHANGELOG.md index 7bba7e7dc..b41acc890 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,251 @@ +**Note**: Installing the script from one of the links below will disable automatic updates. If you want automatic updates, install the script from the links on the [main page](https://www.4chan-x.net/). + Sometimes the changelog has notes (not comprehensive) acknowledging people's work. This does not mean the changes are their fault, only that their code was used. All changes to the script are chosen by and the fault of the maintainer (ccd0). -The links to individual versions below are to copies of the script with the update URL removed. If you want automatic updates, install the script from the links on the [main page](https://github.com/ccd0/4chan-x). +### v1.11.9 + +**v1.11.9.2** *(2015-08-16)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.9.2/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.9.2/builds/4chan-X-noupdate.crx "Chromium version")] +- Merge v1.11.8.9: Fix regression from v1.11.8.0 that caused the cooldown to stop working in certain circumstances. + +**v1.11.9.1** *(2015-08-16)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.9.1/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.9.1/builds/4chan-X-noupdate.crx "Chromium version")] +- Add more info and a reporting link to error messages. + +**v1.11.9.0** *(2015-08-15)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.9.0/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.9.0/builds/4chan-X-noupdate.crx "Chromium version")] +- Based on v1.11.8.8. +- Add `Randomize Filename` option: Replaces filenames with a random timestamp from the past year. +- Fix bugs with cached captchas when you change captcha settings. + +### v1.11.8 + +**v1.11.8.9** *(2015-08-16)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.8.9/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.8.9/builds/4chan-X-noupdate.crx "Chromium version")] +- Fix regression from v1.11.8.0 that caused the cooldown to stop working in certain circumstances. + +**v1.11.8.8** *(2015-08-15)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.8.8/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.8.8/builds/4chan-X-noupdate.crx "Chromium version")] +- Add link to new anonymous bug reporting form: https://gitreports.com/issue/ccd0/4chan-x + +**v1.11.8.7** *(2015-08-14)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.8.7/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.8.7/builds/4chan-X-noupdate.crx "Chromium version")] +- Fix captcha issues in Pale Moon in some cases where it was still not working. + +**v1.11.8.6** *(2015-08-14)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.8.6/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.8.6/builds/4chan-X-noupdate.crx "Chromium version")] +- Add .xyz to TLDs recognized by linkifier without http://. + +**v1.11.8.5** *(2015-08-12)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.8.5/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.8.5/builds/4chan-X-noupdate.crx "Chromium version")] +- Change script home page and update URLs to the new https://www.4chan-x.net/ site. + +**v1.11.8.4** *(2015-08-10)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.8.4/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.8.4/builds/4chan-X-noupdate.crx "Chromium version")] +- Merge v1.11.7.5: Fix captcha issues in Pale Moon. + +**v1.11.8.3** *(2015-08-09)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.8.3/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.8.3/builds/4chan-X-noupdate.crx "Chromium version")] +- Fix `Show Updated Notifications` setting. + +**v1.11.8.2** *(2015-08-08)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.8.2/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.8.2/builds/4chan-X-noupdate.crx "Chromium version")] +- Fix bug in infinite scrolling causing skipped pages. + +**v1.11.8.1** *(2015-08-08)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.8.1/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.8.1/builds/4chan-X-noupdate.crx "Chromium version")] +- Merge v1.11.7.4: Fix cooldown bug. + +**v1.11.8.0** *(2015-08-08)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.8.0/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.8.0/builds/4chan-X-noupdate.crx "Chromium version")] +- Based on v1.11.7.3. +- Posts selected for deletion will now be auto-deleted when 4chan's 60-second deletion cooldown expires. +- The setting `Except Archives from Encryption` has been changed to `Exempt Archives from Encryption`. +- Bug fixes. + +### v1.11.7 + +**v1.11.7.5** *(2015-08-10)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.7.5/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.7.5/builds/4chan-X-noupdate.crx "Chromium version")] +- Fix captcha issues in Pale Moon. + +**v1.11.7.4** *(2015-08-08)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.7.4/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.7.4/builds/4chan-X-noupdate.crx "Chromium version")] +- Fix cooldown bug. + +**v1.11.7.3** *(2015-08-06)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.7.3/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.7.3/builds/4chan-X-noupdate.crx "Chromium version")] +- Turn `Custom Board Navigation` back on by default for now until we support better migration of old settings. + +**v1.11.7.2** *(2015-08-05)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.7.2/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.7.2/builds/4chan-X-noupdate.crx "Chromium version")] +- Merge v1.11.6.2: Fix bug where clicking on scrollbar of captcha image selection bubble could mess up the captcha. +- Redirect threads deleted but with stubs left behind to archive. + +**v1.11.7.1** *(2015-08-02)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.7.1/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.7.1/builds/4chan-X-noupdate.crx "Chromium version")] +- Merge v1.11.6.1: Update banner list. + +**v1.11.7.0** *(2015-08-02)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.7.0/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.7.0/builds/4chan-X-noupdate.crx "Chromium version")] +- Based on v1.11.6.0. +- Turn `Custom Board Navigation` off by default. To turn it back on, check `Header` > `Custom board navigation` in the header menu. +- Experimental MS Edge support via https://github.com/ccd0/4chan-x-proxy. + +### v1.11.6 + +**v1.11.6.2** *(2015-08-05)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.6.2/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.6.2/builds/4chan-X-noupdate.crx "Chromium version")] +- Fix bug where clicking on scrollbar of captcha image selection bubble could mess up the captcha. + +**v1.11.6.1** *(2015-08-02)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.6.1/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.6.1/builds/4chan-X-noupdate.crx "Chromium version")] +- Update banner list. + +**v1.11.6.0** *(2015-07-19)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.6.0/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.6.0/builds/4chan-X-noupdate.crx "Chromium version")] +- Based on v1.11.5.2. +- Implement 404 Redirect for `sys.4chan.org/board/imgboard.php?res=` URLs. +- Index navigation bugfixes. + +### v1.11.5 + +**v1.11.5.2** *(2015-07-15)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.5.2/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.5.2/builds/4chan-X-noupdate.crx "Chromium version")] +- Update `Disable Autoplaying Sounds` so the video in https://boards.4chan.org/g/thread/49036627 is visible. +- Tweak position of expanded images. + +**v1.11.5.1** *(2015-07-14)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.5.1/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.5.1/builds/4chan-X-noupdate.crx "Chromium version")] +- Bugfixes. + +**v1.11.5.0** *(2015-07-14)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.5.0/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.5.0/builds/4chan-X-noupdate.crx "Chromium version")] +- Based on v1.11.4.1. +- When posting a reply with a file on /f/, add a link to it in the comment. + +### v1.11.4 + +**v1.11.4.1** *(2015-07-13)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.4.1/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.4.1/builds/4chan-X-noupdate.crx "Chromium version")] +- Merge v1.11.3.5: Fix video not being displayed when 'Disable Autoplaying Sounds' is enabled. + +**v1.11.4.0** *(2015-07-12)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.4.0/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.4.0/builds/4chan-X-noupdate.crx "Chromium version")] +- Based on v1.11.3.4. +- Show files in replies on /f/. +- Remove code that disabled the updater if you were offline since detection was too unreliable. + +### v1.11.3 + +**v1.11.3.5** *(2015-07-13)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.3.5/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.3.5/builds/4chan-X-noupdate.crx "Chromium version")] +- Fix video not being displayed when 'Disable Autoplaying Sounds' is enabled. + +**v1.11.3.4** *(2015-07-12)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.3.4/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.3.4/builds/4chan-X-noupdate.crx "Chromium version")] +- Fix captcha in original post form obscuring file field for some users. +- Turn `Ignore Offline Status` on by default. + +**v1.11.3.3** *(2015-07-07)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.3.3/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.3.3/builds/4chan-X-noupdate.crx "Chromium version")] +- Merge v1.11.2.5: Add fireden.net archive. + +**v1.11.3.2** *(2015-07-05)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.3.2/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.3.2/builds/4chan-X-noupdate.crx "Chromium version")] +- Get posting from URLs, WebM titles, and Vocaroo/Clyp embedding working in Safari. + +**v1.11.3.1** *(2015-07-04)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.3.1/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.3.1/builds/4chan-X-noupdate.crx "Chromium version")] +- Make posting from URL more efficient, and make it work in Tampermonkey. + +**v1.11.3.0** *(2015-07-04)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.3.0/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.3.0/builds/4chan-X-noupdate.crx "Chromium version")] +- Based on v1.11.2.4. +- Improved Tampermonkey and WebKit support. +- Minor bugfixes. + +### v1.11.2 + +**v1.11.2.5** *(2015-07-07)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.2.5/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.2.5/builds/4chan-X-noupdate.crx "Chromium version")] +- Add fireden.net archive. + +**v1.11.2.4** *(2015-07-03)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.2.4/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.2.4/builds/4chan-X-noupdate.crx "Chromium version")] +- Minor bugfixes. + +**v1.11.2.3** *(2015-06-30)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.2.3/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.2.3/builds/4chan-X-noupdate.crx "Chromium version")] +- Add 'webkit' CSS class to document when WebKit engine is detected. +- Various CSS-related bugfixes. + +**v1.11.2.2** *(2015-06-30)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.2.2/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.2.2/builds/4chan-X-noupdate.crx "Chromium version")] +- Fix bug from v1.11.2.0 that broke `Use Recaptcha v1` when the original post form was hidden. + +**v1.11.2.1** *(2015-06-30)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.2.1/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.2.1/builds/4chan-X-noupdate.crx "Chromium version")] +- CSS bugfixes for thread watcher and header. + +**v1.11.2.0** *(2015-06-29)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.2.0/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.2.0/builds/4chan-X-noupdate.crx "Chromium version")] +- Based on v1.11.1.3. +- `Use Recaptcha v1` option now works on the original post form. +- Captcha section of QR can now be opened with the space bar. +- Minor bugfixes. + +### v1.11.1 + +**v1.11.1.3** *(2015-06-26)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.1.3/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.1.3/builds/4chan-X-noupdate.crx "Chromium version")] +- Merge v1.11.0.10: (Hasumi) Update archive list. + +**v1.11.1.2** *(2015-06-23)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.1.2/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.1.2/builds/4chan-X-noupdate.crx "Chromium version")] +- Improved compatibility: Fix some issues in dwb and Midori; add partial support for Luakit. + +**v1.11.1.1** *(2015-06-22)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.1.1/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.1.1/builds/4chan-X-noupdate.crx "Chromium version")] +- Add `Use Recaptcha v2 in Reports` option to use the image selection captcha in the report window. + +**v1.11.1.0** *(2015-06-22)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.1.0/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.1.0/builds/4chan-X-noupdate.crx "Chromium version")] +- Based on v1.11.0.9. +- Add partial support for Midori and other browsers whose userscript engines don't implement the Greasemonkey API. Some features will not work in these browsers. + +## v1.11.0 + +**v1.11.0.10** *(2015-06-25)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.0.10/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.0.10/builds/4chan-X-noupdate.crx "Chromium version")] +- (Hasumi) Update archive list. + +**v1.11.0.9** *(2015-06-21)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.0.9/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.0.9/builds/4chan-X-noupdate.crx "Chromium version")] +- Fix caching of v1 captchas. +- Other minor bugfixes. + +**v1.11.0.8** *(2015-06-21)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.0.8/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.0.8/builds/4chan-X-noupdate.crx "Chromium version")] +- Support noscript version of Recaptcha v1. +- Captcha-related bugfixes/improvements. + +**v1.11.0.7** *(2015-06-21)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.0.7/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.0.7/builds/4chan-X-noupdate.crx "Chromium version")] +- Add `Use Recaptcha v1` option to use the old text-based captchas in the Quick Reply. + +**v1.11.0.6** *(2015-06-20)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.0.6/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.0.6/builds/4chan-X-noupdate.crx "Chromium version")] +- Support toggling images in the captcha with the number keys (as arranged in the numpad) and the UIOJKLM,. keys. +- Arrow key navigation now works in noscript captcha. +- Various captcha-related improvements/bugfixes. +- Support space bar, numbers in numpad, comma, and space in keybinds. + +**v1.11.0.5** *(2015-06-20)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.0.5/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.0.5/builds/4chan-X-noupdate.crx "Chromium version")] +- Add `Captcha Language` setting in the `Advanced` panel. +- Minor bugfixes. + +**v1.11.0.4** *(2015-06-20)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.0.4/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.0.4/builds/4chan-X-noupdate.crx "Chromium version")] +- Noscript captcha improvements, including the ability to click the image rather than the little checkbox. + +**v1.11.0.3** *(2015-06-19)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.0.3/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.0.3/builds/4chan-X-noupdate.crx "Chromium version")] +- Merge v1.10.14.4: Update script for new non-Javascript captcha using image selection. + +**v1.11.0.2** *(2015-06-19)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.0.2/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.0.2/builds/4chan-X-noupdate.crx "Chromium version")] +- Remove code that focused on first image of the captcha as Google now focuses on the refresh button. + +**v1.11.0.1** *(2015-06-16)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.0.1/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.0.1/builds/4chan-X-noupdate.crx "Chromium version")] +- Merge v1.10.14.3: Fix words being cut off in non-Javascript captcha. + +**v1.11.0.0** *(2015-06-14)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.0.0/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.0.0/builds/4chan-X-noupdate.crx "Chromium version")] +- Based on v1.10.14.2. +- Gallery now preloads the next image in sequence. +- `Stretch to Fit` option added to gallery. +- Various bug fixes. +- Drop workarounds for old versions of Chromium (< v34). + +### v1.10.14 + +**v1.10.14.4** *(2015-06-19)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.14.4/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.14.4/builds/4chan-X-noupdate.crx "Chromium version")] +- Update script for new non-Javascript captcha using image selection. + +**v1.10.14.3** *(2015-06-16)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.14.3/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.14.3/builds/4chan-X-noupdate.crx "Chromium version")] +- Fix words being cut off in non-Javascript captcha. + +**v1.10.14.2** *(2015-06-11)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.14.2/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.14.2/builds/4chan-X-noupdate.crx "Chromium version")] +- Bring back workaround for scrolling to top caused by captcha as some users are still reporting it happening. + +**v1.10.14.1** *(2015-06-11)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.14.1/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.14.1/builds/4chan-X-noupdate.crx "Chromium version")] +- Add ImgOps to default sauce examples: `//imgops.com/%URL;types:gif,jpg,png` + +**v1.10.14.0** *(2015-06-07)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.14.0/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.14.0/builds/4chan-X-noupdate.crx "Chromium version")] +- Based on v1.10.13.4. +- Fix board-specific filters in thread watcher (filters apply to unread posts quoting you). ### v1.10.13 +**v1.10.13.4** *(2015-06-05)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.13.4/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.13.4/builds/4chan-X-noupdate.crx "Chromium version")] +- Support selecting images in the image captcha with the space bar in addition to the enter key. + +**v1.10.13.3** *(2015-06-03)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.13.3/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.13.3/builds/4chan-X-noupdate.crx "Chromium version")] +- Merge v1.10.12.10: Revert workaround for scrolling to top as it seems to have been fixed on Google's end. + +**v1.10.13.2** *(2015-06-03)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.13.2/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.13.2/builds/4chan-X-noupdate.crx "Chromium version")] +- Merge v1.10.12.9: Update for captcha changes. +- Merge v1.10.12.9: Work around issue where the captcha causes scrolling to the top of the page. + **v1.10.13.1** *(2015-05-27)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.13.1/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.13.1/builds/4chan-X-noupdate.crx "Chromium version")] - Fix manual page number updating not working when `Updater and Stats in Header` is off. @@ -20,6 +262,13 @@ The links to individual versions below are to copies of the script with the upda ### v1.10.12 +**v1.10.12.10** *(2015-06-03)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.12.10/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.12.10/builds/4chan-X-noupdate.crx "Chromium version")] +- Revert workaround for scrolling to top as it seems to have been fixed on Google's end. + +**v1.10.12.9** *(2015-06-03)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.12.9/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.12.9/builds/4chan-X-noupdate.crx "Chromium version")] +- Update for captcha changes. +- Work around issue where the captcha causes scrolling to the top of the page. + **v1.10.12.8** *(2015-05-22)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.12.8/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.12.8/builds/4chan-X-noupdate.crx "Chromium version")] - Remove guard against dropping files into captcha due to continued reports of disabled captchas. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1a81550ca..04966e25a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,10 @@ ## Reporting bugs -If I can't reproduce a bug, I probably won't be able to fix it. You can help by doing the following when you [report a bug](https://github.com/ccd0/4chan-x/issues): +Bug reports and feature requests for 4chan X are tracked at **https://github.com/ccd0/4chan-x/issues**. + +You can submit a bug report / feature request either via your Github account or the [anonymous report form](https://gitreports.com/issue/ccd0/4chan-x). + +If you're reporting a bug, the more detail you can give, the better. If I can't reproduce your bug, I probably won't be able to fix it. You can help by doing the following: 1. Include precise steps to reproduce the problem, with the expected and actual results. 2. Make sure your **browser**, **4chan X**, and (if applicable) **Greasemonkey** are up to date. Include the versions you're using in bug reports. @@ -14,10 +18,10 @@ If I can't reproduce a bug, I probably won't be able to fix it. You can help by ### Get started - Install [node.js](http://nodejs.org/). -- Install [Grunt's CLI](http://gruntjs.com/) with `npm install -g grunt-cli`. -- Clone 4chan X. -- `cd` into it. -- Install/Update 4chan X dependencies with `npm install`. +- Install [Grunt's CLI](http://gruntjs.com/): `npm install -g grunt-cli` +- Clone 4chan X: `git clone https://github.com/ccd0/4chan-x.git` +- Open the directory: `cd 4chan-x` +- Install/Update 4chan X dependencies: `npm install` ### Build @@ -29,6 +33,9 @@ If I can't reproduce a bug, I probably won't be able to fix it. You can help by - Edit the sources (not the compiled scripts in the builds/ directory). - Compile the script with `grunt`. - Install the compiled script (found in the testbuilds/ directory), and test your changes. -- Open a pull request. +- Open a pull request by doing any of the following: + - Fork this repository on Github, push your changes to your fork, and make a pull request via Github's mechanism. + - Push your changes to any online Git repository, and [open an issue](https://gitreports.com/issue/ccd0/4chan-x) with an explanation of your changes and the URL, branch, and commit you want me to pull from. + - Export your changes via `git bundle` (e.g. `git bundle create file.bundle master..your-branch`), and upload them to a file host like https://jii.moe/. Then [open an issue](https://gitreports.com/issue/ccd0/4chan-x) with an explanation of your changes and the URL of the file. Archive list updates should go to https://github.com/MayhemYDG/archives.json. diff --git a/Gruntfile.coffee b/Gruntfile.coffee index 7ffd6b5da..c91cac904 100755 --- a/Gruntfile.coffee +++ b/Gruntfile.coffee @@ -8,6 +8,12 @@ module.exports = (grunt) -> json = (data) -> "`#{JSON.stringify(data).replace(/`/g, '\\`')}`" + importCSS = (filenames...) -> + grunt.template.process( + filenames.map((name) -> grunt.file.read "src/General/css/#{name}.css").join(''), + {data: grunt.config 'pkg'} + ).trim().replace(/\n+/g, '\n').split(/^/m).map(JSON.stringify).join(' +\n').replace(/`/g, '\\`') + importHTML = (filename) -> html grunt.template.process(grunt.file.read("src/General/html/#{filename}.html").replace(/^ +/gm, '').replace(/\r?\n/g, ''), data: grunt.config('pkg')) @@ -69,6 +75,7 @@ module.exports = (grunt) -> options: process: Object.create(null, data: get: -> pkg = grunt.config 'pkg' + pkg.importCSS = importCSS pkg.importHTML = importHTML pkg.html = html pkg.assert = assert @@ -166,8 +173,6 @@ module.exports = (grunt) -> stdout: true stderr: true failOnError: true - checkout: - command: 'git checkout <%= pkg.meta.mainBranch %>' commit: command: """ git commit -am "Release <%= pkg.meta.name %> v<%= pkg.meta.version %>." @@ -185,12 +190,12 @@ module.exports = (grunt) -> """.split('\n').join('&&') stable: command: """ + git push . HEAD:bstable git tag -af stable -m "<%= pkg.meta.name %> v<%= pkg.meta.version %>." git checkout gh-pages git pull git merge --no-commit -s ours stable - git checkout stable builds - git checkout HEAD "builds/*<%= pkg.meta.suffix.beta %>.*" + git checkout stable "builds/<%= pkg.name %>.*" builds/updates.xml git commit -am "Move <%= pkg.meta.name %> v<%= pkg.meta.version %> to stable channel." git checkout - """.split('\n').join('&&') @@ -201,12 +206,24 @@ module.exports = (grunt) -> git checkout gh-pages git pull git merge --no-commit -s ours - - git checkout - README.md index.html web.css img src/General/img/icon.gif + git checkout - README.md index.html web.css img git commit -am "Update web page." git checkout - """.split('\n').join('&&') push: command: 'git push origin --tags -f && git push origin --all' + aws: + command: """ + git checkout gh-pages + aws s3 cp builds/ s3://<%= pkg.meta.awsBucket %>/builds/ --recursive --exclude "*" --include "*.js" --cache-control "max-age=600" --content-type "application/javascript; charset=utf-8" + aws s3 cp builds/ s3://<%= pkg.meta.awsBucket %>/builds/ --recursive --exclude "*" --include "*.crx" --cache-control "max-age=600" --content-type "application/x-chrome-extension" + aws s3 cp builds/ s3://<%= pkg.meta.awsBucket %>/builds/ --recursive --exclude "*" --include "*.xml" --cache-control "max-age=600" --content-type "text/xml; charset=utf-8" + aws s3 cp builds/ s3://<%= pkg.meta.awsBucket %>/builds/ --recursive --exclude "*" --include "*.zip" --cache-control "max-age=600" --content-type "application/zip" + aws s3 cp img/ s3://<%= pkg.meta.awsBucket %>/img/ --recursive --cache-control "max-age=600" + aws s3 cp index.html s3://<%= pkg.meta.awsBucket %> --cache-control "max-age=600" --content-type "text/html; charset=utf-8" + aws s3 cp web.css s3://<%= pkg.meta.awsBucket %> --cache-control "max-age=600" --content-type "text/css; charset=utf-8" + git checkout - + """.split('\n').join('&&') npm: command: 'npm install' update: @@ -282,9 +299,10 @@ module.exports = (grunt) -> GM_setValue: true GM_deleteValue: true GM_listValues: true + GM_addValueChangeListener: true GM_openInTab: true - GM_info: true GM_xmlhttpRequest: true + GM_info: true cloneInto: true unsafeWindow: true chrome: true @@ -432,6 +450,10 @@ module.exports = (grunt) -> 'shell:push' ] + grunt.registerTask 'aws', [ + 'shell:aws' + ] + grunt.registerTask 'store', [ 'webstore_upload' ] diff --git a/README.md b/README.md index 2e750592f..e752af203 100755 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -![screenshot](https://ccd0.github.io/4chan-x/img/screenshot.png) +![screenshot](https://www.4chan-x.net/img/screenshot.png) # 4chan X Adds various features to 4chan. Previously developed by [aeosynth](https://github.com/aeosynth/4chan-x), [Mayhem](https://github.com/MayhemYDG/4chan-x), [ihavenoface](https://github.com/ihavenoface/4chan-x), [Zixaphir](https://github.com/zixaphir/appchan-x), [Seaweed](https://github.com/seaweedchan/4chan-x), and [Spittie](https://github.com/Spittie/4chan-x), with contributions from many others. @@ -6,47 +6,71 @@ Previously developed by [aeosynth](https://github.com/aeosynth/4chan-x), [Mayhem If you're looking for a maintained fork of OneeChan (a style script used in addition to 4chan X), try https://github.com/Nebukazar/OneeChan. -## Firefox version: [Click to Install](https://ccd0.github.io/4chan-x/builds/4chan-X.user.js) -Install [Greasemonkey](https://addons.mozilla.org/en-US/firefox/addon/greasemonkey/), then click the link above to install 4chan X. If you're using a fork of Firefox (e.g. Pale Moon), you may need to use [Greasemonkey 1.15](https://addons.mozilla.org/en-US/firefox/addon/greasemonkey/versions/#version-1.15) instead of the most recent version. +**Note**: 4chan X disables the native extension, so if you uninstall 4chan X, you'll need to re-enable it. To do this, click the `[Settings]` link in the top right corner and uncheck "`Disable the native extension`" in the panel that appears. -**WARNING**: -If you're switching to this fork from someone else's fork of 4chan X, back up your old script before installing this one as the old one may be overwritten. +## Install -**Known issues**: -Greasemonkey 3.0 has a [bug](https://github.com/greasemonkey/greasemonkey/issues/2094) causing 4chan X to open multiple tabs when you open a new tab (for example, when starting a thread). If you're having this problem, [updating](https://addons.mozilla.org/en-US/firefox/addon/greasemonkey/) to Greasemonkey 3.1 or later should fix it. +### Firefox +Install [Greasemonkey](https://addons.mozilla.org/en-US/firefox/addon/greasemonkey/), then **[click here to install 4chan X](https://www.4chan-x.net/builds/4chan-X.user.js)**. -## Chromium version: [Click to Install](https://ccd0.github.io/4chan-x/builds/4chan-X.crx) -Download the file from the link above and add drag it to your `chrome://extensions` page. -This should also work for non-Windows/dev/canary Chrome and Chromium-based versions of Opera. +- **Pale Moon** users should use [Greasemonkey 1.15](https://addons.mozilla.org/en-US/firefox/addon/greasemonkey/versions/1.15.1-signed). +- **SeaMonkey** users should use Greasemonkey 2.3 converted with [this tool](http://addonconverter.fotokraina.com/?url=https://addons.mozilla.org/firefox/downloads/file/282084/greasemonkey-2.3-fx.xpi). -**The above will not work in Chrome (stable or beta) users on Windows; you must install from the [Chrome store](https://chrome.google.com/webstore/detail/4chan-x/ohnjgmpcibpbafdlkimncjhflgedgpam).** +### Chromium +4chan X is available as a Chrome extension. The Chrome extension has the additional feature of being able to sync your settings and data with other devices via Chrome Sync. -## Chromium version (Chrome store): [Click to Install](https://chrome.google.com/webstore/detail/4chan-x/ohnjgmpcibpbafdlkimncjhflgedgpam) -The stable and beta releases of Chrome on Windows will disable extensions not installed from the Chrome store, so users will need to install 4chan X from the link above. -Only the latest stable version of 4chan X is available. +- **Chromium**: **[Download 4chan X](https://www.4chan-x.net/builds/4chan-X.crx)**, then open `chrome://extensions` and drag the downloaded file onto the page. Alternatively, you can install 4chan X from the **[Chrome store](https://chrome.google.com/webstore/detail/4chan-x/ohnjgmpcibpbafdlkimncjhflgedgpam)**. +- **Opera**: **[Click to install 4chan X](https://www.4chan-x.net/builds/4chan-X.crx)**, then follow the prompts to activate it in your extension manager. Note: This version does not work with Opera 12; try [loadletter's fork](https://github.com/loadletter/4chan-x) instead. +- **Chrome**, **Vivaldi**: Install 4chan X from the **[Chrome store](https://chrome.google.com/webstore/detail/4chan-x/ohnjgmpcibpbafdlkimncjhflgedgpam)**. -## Other browsers -This fork of 4chan X is not guaranteed to work correctly in other browsers, but you are welcome to try your luck. Pull requests to fix the bugs you will likely find are always welcome. You may fare better with [loadletter's fork](https://github.com/loadletter/4chan-x), which has fewer features but less dependence on browser-specific APIs. +You can also use the [userscript version of 4chan X](https://www.4chan-x.net/builds/4chan-X.user.js) with [Tampermonkey](https://tampermonkey.net/). -- Some people have reported success in Safari using [JS Blocker](http://jsblocker.toggleable.com/) to install the Firefox/Greasemonkey version. -- Instructions are available for [installing 4chan X in dwb](https://github.com/ccd0/4chan-x/wiki/Installing-4chan-X-in-dwb). +### Safari +Install [JS Blocker](http://jsblocker.toggleable.com/), then **[click here to install 4chan X](https://www.4chan-x.net/builds/4chan-X.user.js)**. + +### WebKitGTK+ +Several WebKitGTK+ based browsers have support for userscripts and can run 4chan X. Due to the lack of the cross-site GM_* API, and lack of support for userscripts in iframes, not all features will work. You may experience crashes when repeatedly solving the default image-based captchas. You can avoid this problem by enabling `Use Recaptcha v1` in your settings. + +- **dwb**: Install the userscripts extension, then save the [script](https://www.4chan-x.net/builds/4chan-X.user.js) to the `$XDG_CONFIG_HOME/dwb/greasemonkey` or `$HOME/.config/dwb/greasemonkey` directory (creating it if necessary): + + dwbem -N -i userscripts + wget -P ${XDG_CONFIG_HOME:-$HOME/.config}/dwb/greasemonkey https://www.4chan-x.net/builds/4chan-X.user.js + +- **Midori**: Enable `User addons` in your preferences, under the Extensions tab. In the Privacy tab, check `Enable HTML5 local storage support`. Optionally, if you want 4chan X to be able to open new tabs when you start or reply to a thread, you will need to check `Allow scripts to open popups` under the Behavior tab. Then click the link to the [script](https://www.4chan-x.net/builds/4chan-X.user.js) to install it. + +- **Luakit**: Navigate to the [script](https://www.4chan-x.net/builds/4chan-X.user.js), then type the command `:usi` to install it. + +- **uzbl**: Install the script from https://github.com/singpolyma/singpolyma/blob/master/uzbl/data/scripts/userscript.sh, enable it in your config file, and then save [4chan X](https://www.4chan-x.net/builds/4chan-X.user.js) to `$XDG_DATA_HOME/uzbl/userscripts` (or `$HOME/.local/share/uzbl/userscripts`). + + wget -P ${XDG_DATA_HOME:-$HOME/.local/share}/uzbl/scripts https://raw.githubusercontent.com/singpolyma/singpolyma/master/uzbl/data/scripts/userscript.sh + chmod +x ${XDG_DATA_HOME:-$HOME/.local/share}/uzbl/scripts/userscript.sh + echo '@on_event LOAD_COMMIT spawn @scripts_dir/userscript.sh document-start' >> ${XDG_CONFIG_HOME:-$HOME/.config}/uzbl/config + echo '@on_event LOAD_FINISH spawn @scripts_dir/userscript.sh document-end' >> ${XDG_CONFIG_HOME:-$HOME/.config}/uzbl/config + wget -P ${XDG_DATA_HOME:-$HOME/.local/share}/uzbl/userscripts https://www.4chan-x.net/builds/4chan-X.user.js + +### Other browsers +4chan X can be used in some browsers that do not support userscripts, such as **Microsoft Edge**, using [a local proxy](https://github.com/ccd0/4chan-x-proxy). Not all features will work. ## Beta version New features and non-urgent bugfixes are released on the beta channel for further testing before they are moved the stable version. Please [report](https://github.com/ccd0/4chan-x/issues) any issues you find, and be sure to mention which version you're using. You should back up your settings regularly to prevent them from being lost due to bugs. -- [Firefox version](https://ccd0.github.io/4chan-x/builds/4chan-X-beta.user.js) -- [Chromium version](https://ccd0.github.io/4chan-x/builds/4chan-X-beta.crx) -If you want to install the current beta version but get updates from the stable channel after that, install it from [here](https://github.com/ccd0/4chan-x/raw/beta/builds/4chan-X.user.js) for Firefox or [here](https://github.com/ccd0/4chan-x/raw/beta/builds/4chan-X.crx) for Chromium. +To install the current **beta** version but get updates from the **stable** channel (recommended if you want a particular recent feature): +- [Install userscript](https://github.com/ccd0/4chan-x/raw/beta/builds/4chan-X.user.js) (use with Greasemonkey / Tampermonkey / JS Blocker / etc.) +- [Download Chrome extension](https://github.com/ccd0/4chan-x/raw/beta/builds/4chan-X.crx) (download and drag to `chrome://extensions`) + +To install the **beta** version and get updates whenever there's a new **beta** version: +- [Install userscript](https://www.4chan-x.net/builds/4chan-X-beta.user.js) +- [Download Chrome extension](https://www.4chan-x.net/builds/4chan-X-beta.crx) ## Security note 4chan X currently shares your settings and post history between the HTTP and HTTPS versions of 4chan. If you are concerned about protecting your privacy against a man-in-the-middle attack, you should disable 4chan X on the HTTP version of 4chan and/or install [HTTPS Everywhere](https://www.eff.org/https-everywhere). -## Uninstalling -4chan X disables the native extension, so if you uninstall 4chan X, you'll need to re-enable it. To do this, click the `[Settings]` link in the top right corner and uncheck "`Disable the native extension`" in the panel that appears. +## Troubleshooting +If you encounter a bug, try the steps [here](https://github.com/ccd0/4chan-x/blob/master/CONTRIBUTING.md#reporting-bugs), then report it to the [issue tracker](https://github.com/ccd0/4chan-x/issues). You can report bugs without a Github account via [this form](https://gitreports.com/issue/ccd0/4chan-x). If the bug seems to be caused by a script update, you can install a old version from the [changelog](https://github.com/ccd0/4chan-x/blob/master/CHANGELOG.md). ## More information - [Changelog](https://github.com/ccd0/4chan-x/blob/master/CHANGELOG.md) - [Frequently Asked Questions](https://github.com/ccd0/4chan-x/wiki/Frequently-Asked-Questions) -- [Report Bugs](https://github.com/ccd0/4chan-x/issues) +- [Report Bugs](https://gitreports.com/issue/ccd0/4chan-x) - [Contributing](https://github.com/ccd0/4chan-x/blob/master/CONTRIBUTING.md) diff --git a/builds/4chan-X-beta.crx b/builds/4chan-X-beta.crx index 2ba5f9e95..447250849 100644 Binary files a/builds/4chan-X-beta.crx and b/builds/4chan-X-beta.crx differ diff --git a/builds/4chan-X-beta.meta.js b/builds/4chan-X-beta.meta.js index 8bbc03024..981fc5e6a 100644 --- a/builds/4chan-X-beta.meta.js +++ b/builds/4chan-X-beta.meta.js @@ -1,26 +1,38 @@ // ==UserScript== // @name 4chan X beta -// @version 1.10.13.1 +// @version 1.11.9.2 // @minGMVer 1.14 // @minFFVer 26 // @namespace 4chan-X // @description Cross-browser userscript for maximum lurking on 4chan. // @license MIT; https://github.com/ccd0/4chan-x/blob/master/LICENSE -// @match *://boards.4chan.org/* -// @match *://sys.4chan.org/* -// @match *://a.4cdn.org/* -// @match *://i.4cdn.org/* -// @match https://www.google.com/recaptcha/api2/anchor?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* -// @match https://www.google.com/recaptcha/api2/frame?*&k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* -// @match *://www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc +// @include http://boards.4chan.org/* +// @include https://boards.4chan.org/* +// @include http://sys.4chan.org/* +// @include https://sys.4chan.org/* +// @include http://a.4cdn.org/* +// @include https://a.4cdn.org/* +// @include http://i.4cdn.org/* +// @include https://i.4cdn.org/* +// @include http://www.4chan.org/banned +// @include https://www.4chan.org/banned +// @include http://www.4chan.org/feedback +// @include https://www.4chan.org/feedback +// @include https://www.google.com/recaptcha/api2/anchor?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* +// @include https://www.google.com/recaptcha/api2/frame?*&k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* +// @include http://www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* +// @include https://www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* +// @include http://www.google.com/recaptcha/api/noscript?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* +// @include https://www.google.com/recaptcha/api/noscript?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* // @grant GM_getValue // @grant GM_setValue // @grant GM_deleteValue // @grant GM_listValues +// @grant GM_addValueChangeListener // @grant GM_openInTab // @grant GM_xmlhttpRequest // @run-at document-start -// @updateURL https://ccd0.github.io/4chan-x/builds/4chan-X-beta.meta.js -// @downloadURL https://ccd0.github.io/4chan-x/builds/4chan-X-beta.user.js +// @updateURL https://www.4chan-x.net/builds/4chan-X-beta.meta.js +// @downloadURL https://www.4chan-x.net/builds/4chan-X-beta.user.js // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAACVBMVEUAAGcAAABmzDNZt9VtAAAAAXRSTlMAQObYZgAAAF5JREFUeNrtkTESABAQxPD/R6tsE2dUGYUtFJvLDKf93KevHJAjpBorAQWSBIKqFASC4G0pCAkm4GfaEvgYXl0T6HBaE97f0vmnfYHbZOMLZCx9ISdKWwjOWZSC8GYm4SUGwfYgqI4AAAAASUVORK5CYII= // ==/UserScript== diff --git a/builds/4chan-X-beta.user.js b/builds/4chan-X-beta.user.js index 482f76d67..257742e1f 100644 --- a/builds/4chan-X-beta.user.js +++ b/builds/4chan-X-beta.user.js @@ -1,28 +1,40 @@ // Generated by CoffeeScript // ==UserScript== // @name 4chan X beta -// @version 1.10.13.1 +// @version 1.11.9.2 // @minGMVer 1.14 // @minFFVer 26 // @namespace 4chan-X // @description Cross-browser userscript for maximum lurking on 4chan. // @license MIT; https://github.com/ccd0/4chan-x/blob/master/LICENSE -// @match *://boards.4chan.org/* -// @match *://sys.4chan.org/* -// @match *://a.4cdn.org/* -// @match *://i.4cdn.org/* -// @match https://www.google.com/recaptcha/api2/anchor?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* -// @match https://www.google.com/recaptcha/api2/frame?*&k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* -// @match *://www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc +// @include http://boards.4chan.org/* +// @include https://boards.4chan.org/* +// @include http://sys.4chan.org/* +// @include https://sys.4chan.org/* +// @include http://a.4cdn.org/* +// @include https://a.4cdn.org/* +// @include http://i.4cdn.org/* +// @include https://i.4cdn.org/* +// @include http://www.4chan.org/banned +// @include https://www.4chan.org/banned +// @include http://www.4chan.org/feedback +// @include https://www.4chan.org/feedback +// @include https://www.google.com/recaptcha/api2/anchor?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* +// @include https://www.google.com/recaptcha/api2/frame?*&k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* +// @include http://www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* +// @include https://www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* +// @include http://www.google.com/recaptcha/api/noscript?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* +// @include https://www.google.com/recaptcha/api/noscript?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* // @grant GM_getValue // @grant GM_setValue // @grant GM_deleteValue // @grant GM_listValues +// @grant GM_addValueChangeListener // @grant GM_openInTab // @grant GM_xmlhttpRequest // @run-at document-start -// @updateURL https://ccd0.github.io/4chan-x/builds/4chan-X-beta.meta.js -// @downloadURL https://ccd0.github.io/4chan-x/builds/4chan-X-beta.user.js +// @updateURL https://www.4chan-x.net/builds/4chan-X-beta.meta.js +// @downloadURL https://www.4chan-x.net/builds/4chan-X-beta.user.js // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAACVBMVEUAAGcAAABmzDNZt9VtAAAAAXRSTlMAQObYZgAAAF5JREFUeNrtkTESABAQxPD/R6tsE2dUGYUtFJvLDKf93KevHJAjpBorAQWSBIKqFASC4G0pCAkm4GfaEvgYXl0T6HBaE97f0vmnfYHbZOMLZCx9ISdKWwjOWZSC8GYm4SUGwfYgqI4AAAAASUVORK5CYII= // ==/UserScript== @@ -126,7 +138,7 @@ 'Desktop Notifications': [true, 'Enables desktop notifications across various 4chan X features.'], '404 Redirect': [true, 'Redirect dead threads and images to the archives.'], 'Archive Report': [true, 'Enable reporting posts to supported archives.'], - 'Except Archives from Encryption': [false, 'Permit loading content from, and warningless redirects to, HTTP-only archives from HTTPS pages.'], + 'Exempt Archives from Encryption': [false, 'Permit loading content from, and warningless redirects to, HTTP-only archives from HTTPS pages.'], 'Keybinds': [true, 'Bind actions to keyboard shortcuts.'], 'Time Formatting': [true, 'Localize and format timestamps.'], 'Relative Post Dates': [true, 'Display dates like "3 minutes ago". Tooltip shows the timestamp.'], @@ -214,11 +226,11 @@ 'Page Count in Stats': [true, 'Display the page count in the thread stats.', 1], 'Updater and Stats in Header': [true, 'Places the thread updater and thread stats in the header instead of floating them.'], 'Thread Watcher': [true, 'Bookmark threads.'], - 'Fixed Thread Watcher': [null, 'Makes the thread watcher scroll with the page.', 1], + 'Fixed Thread Watcher': [true, 'Makes the thread watcher scroll with the page.', 1], 'Toggleable Thread Watcher': [true, 'Adds a shortcut for the thread watcher and hides the watcher by default.', 1], 'Mark New IPs': [false, 'Label each post from a new IP with the thread\'s current IP count.'] }, - 'Posting': { + 'Posting and Captchas': { 'Quick Reply': [true, 'All-in-one form to reply, create threads, automate dumping and more.'], 'QR Shortcut': [true, 'Add a shortcut to the header to toggle the QR.', 1], 'Persistent QR': [true, 'The Quick reply won\'t disappear after posting.', 1], @@ -226,6 +238,7 @@ 'Open Post in New Tab': [true, 'Open new threads or replies to a thread from the index in a new tab.', 1], 'Remember QR Size': [false, 'Remember the size of the Quick reply.', 1], 'Remember Spoiler': [false, 'Remember the spoiler state, instead of resetting after posting.', 1], + 'Randomize Filename': [false, 'Set the filename to a random timestamp within the past year. Disabled on /f/.', 1], 'Show New Thread Option in Threads': [false, 'Show the option to post a new / different thread from inside a thread.', 1], 'Show Name and Subject': [false, 'Show the classic name, email, and subject fields in the QR, even when 4chan doesn\'t use them all.', 1], 'Hide Original Post Form': [true, 'Hide the normal post form.', 1], @@ -235,7 +248,9 @@ 'Auto-load captcha': [false, 'Automatically load the captcha in the QR even if your post is empty.', 1], 'Post on Captcha Completion': [false, 'Submit the post immediately when the captcha is completed.', 1], 'Bottom QR Link': [true, 'Places a link on the bottom of threads to open the QR.', 1], - 'Captcha Fixes': [true, 'Make captcha more keyboard-navigable.'] + 'Captcha Fixes': [true, 'Make captcha easier to use, especially with the keyboard.'], + 'Use Recaptcha v1': [false, 'Use the old text version of Recaptcha.'], + 'Use Recaptcha v2 in Reports': [false, 'Use the image selection captcha in the report window.'] }, 'Quote Links': { 'Quote Backlinks': [true, 'Add quote backlinks.'], @@ -267,6 +282,7 @@ 'Hide Thumbnails': [false], 'Fit Width': [true], 'Fit Height': [true], + 'Stretch to Fit': [false], 'Scroll to Post': [true], 'Slide Delay': [6.0] }, @@ -285,14 +301,14 @@ tripcode: "# Filter any tripfag\n#/^!/", capcode: "# Set a custom class for mods:\n#/Mod$/;highlight:mod;op:yes\n# Set a custom class for moot:\n#/Admin$/;highlight:moot;op:yes", subject: "# Filter Generals on /v/:\n#/general/i;boards:v;op:only", - comment: "# Filter Stallman copypasta on /g/:\n#/what you\'re refer+ing to as linux/i;boards:g", + comment: "# Filter Stallman copypasta on /g/:\n#/what you\'re refer+ing to as linux/i;boards:g\n# Filter posts with 20 or more quote links:\n#/(?:>>\\d(?:(?!>>\\d)[^])*){20}/\n# Filter posts like T H I S / H / I / S:\n#/^>?\\s?\\w\\s?(\\w)\\s?(\\w)\\s?(\\w).*$[\\s>]+\\1[\\s>]+\\2[\\s>]+\\3/im", flag: '', filename: '', dimensions: "# Highlight potential wallpapers:\n#/1920x1080/;op:yes;highlight;top:no;boards:w,wg", filesize: '', MD5: '' }, - sauces: "https://www.google.com/searchbyimage?image_url=%IMG\nhttp://iqdb.org/?url=%IMG\nhttp://eye.swfchan.com/search/?q=%name;types:swf;sandbox\n#//tineye.com/search?url=%IMG\n#https://www.yandex.com/images/search?rpt=imageview&img_url=%IMG\n#//saucenao.com/search.php?url=%IMG\n#http://3d.iqdb.org/?url=%IMG\n#http://regex.info/exif.cgi?imgurl=%URL\n# uploaders:\n#//imgur.com/upload?url=%URL;types:gif,jpg,png,pdf;text:Upload to imgur\n# \"View Same\" in archives:\n#https://archive.moe/_/search/image/%MD5/;text:View same on archive.moe\n#https://archive.moe/%board/search/image/%MD5/;text:View same on archive.moe/%board/;boards:a,biz,c,co,diy,fit,gd,h,i,jp,k,m,mlp,po,qa,r9k,s4s,sci,tg,u,v,vg,vp,vr,wsg\n#https://rbt.asia/%board/image/%MD5;text:View same on RBT /%board/;boards:cgl,g,mu,qa,w", + sauces: "https://www.google.com/searchbyimage?image_url=%IMG\nhttp://iqdb.org/?url=%IMG\nhttp://eye.swfchan.com/search/?q=%name;types:swf;sandbox\n#//tineye.com/search?url=%IMG\n#https://www.yandex.com/images/search?rpt=imageview&img_url=%IMG\n#//saucenao.com/search.php?url=%IMG\n#http://3d.iqdb.org/?url=%IMG\n# tools:\n#http://regex.info/exif.cgi?imgurl=%URL\n#//imgops.com/%URL;types:gif,jpg,png\n# uploaders:\n#//imgur.com/upload?url=%URL;types:gif,jpg,png,pdf;text:Upload to imgur\n# \"View Same\" in archives:\n#https://archive.moe/_/search/image/%MD5/;text:View same on archive.moe\n#https://archive.moe/%board/search/image/%MD5/;text:View same on archive.moe/%board/;boards:a,an,biz,c,co,diy,fit,gd,gif,h,i,int,jp,k,m,mlp,out,po,qa,r9k,s4s,sci,tg,u,v,vg,vp,vr,wsg\n#https://rbt.asia/%board/image/%MD5;text:View same on RBT /%board/;boards:cgl,g,mu,qa,w", FappeT: { werk: false }, @@ -322,6 +338,7 @@ QR: { 'QR.personas': "#options:\"sage\";boards:jp;always" }, + captchaLanguage: '', time: '%m/%d/%y(%a)%H:%M:%S', backlink: '>>%id', fileInfo: '%l (%p%s, %r%g)', @@ -378,7 +395,6 @@ 'Bottom Scroll': [false, 'Always scroll to the bottom, not the first new post. Useful for event threads.'], 'Scroll BG': [false, 'Auto-scroll background tabs.'], 'Auto Update': [true, 'Automatically fetch new posts.'], - 'Ignore Offline Status': [false, 'Update even if your browser reports you are offline.'], 'Optional Increase': [false, 'Increase the intervals between updates on threads without new posts.'] }, 'Interval': 30 @@ -396,7 +412,7 @@ doc = d.documentElement; g = { - VERSION: '1.10.13.1', + VERSION: '1.11.9.2', NAMESPACE: '4chan X.', boards: {} }; @@ -616,6 +632,14 @@ if (el = $(selector, root)) { return cb(el); } + if ($.engine === 'edge' && d.readyState === 'loading') { + $.asap((function() { + return d.readyState !== 'loading' || $(selector, root); + }), function() { + return $.onExists(root, selector, subtree, cb); + }); + return; + } observer = new MutationObserver(function() { if (el = $(selector, root)) { observer.disconnect(); @@ -681,7 +705,7 @@ }; $.rm = function(el) { - return el.remove(); + return el != null ? el.remove() : void 0; }; $.rmAll = function(root) { @@ -778,7 +802,9 @@ })); }; - $.open = GM_openInTab; + $.open = typeof GM_openInTab !== "undefined" && GM_openInTab !== null ? GM_openInTab : function(url) { + return window.open(url, '_blank'); + }; $.debounce = function(wait, fn) { var args, exec, lastCall, that, timeout; @@ -854,6 +880,21 @@ return video.mozHasAudio || !!video.webkitAudioDecodedByteCount; }; + $.engine = (function() { + if (/Edge\//.test(navigator.userAgent)) { + return 'edge'; + } + if (/Chrome\//.test(navigator.userAgent)) { + return 'blink'; + } + if (/WebKit\//.test(navigator.userAgent)) { + return 'webkit'; + } + if (/Gecko\/|Goanna/.test(navigator.userAgent)) { + return 'gecko'; + } + })(); + $.item = function(key, val) { var item; item = {}; @@ -863,42 +904,109 @@ $.syncing = {}; - $.oldValue = {}; - - $.sync = function(key, cb) { - key = g.NAMESPACE + key; - $.syncing[key] = cb; - return $.oldValue[key] = GM_getValue(key); - }; - - (function() { - var onChange; - onChange = function(key) { - var cb, newValue; - if (!(cb = $.syncing[key])) { - return; + if (typeof GM_deleteValue !== "undefined" && GM_deleteValue !== null) { + $.getValue = GM_getValue; + $.listValues = function() { + return GM_listValues(); + }; + } else { + $.getValue = function(key) { + return localStorage[key]; + }; + $.listValues = function() { + var key, results; + results = []; + for (key in localStorage) { + if (key.slice(0, g.NAMESPACE.length) === g.NAMESPACE) { + results.push(key); + } } - newValue = GM_getValue(key); - if (newValue === $.oldValue[key]) { - return; + return results; + }; + } + + if (typeof GM_addValueChangeListener !== "undefined" && GM_addValueChangeListener !== null) { + $.setValue = GM_setValue; + $.deleteValue = GM_deleteValue; + } else if (typeof GM_deleteValue !== "undefined" && GM_deleteValue !== null) { + $.oldValue = {}; + $.setValue = function(key, val) { + GM_setValue(key, val); + if (key in $.syncing) { + $.oldValue[key] = val; + return localStorage[key] = val; } - if (newValue != null) { - $.oldValue[key] = newValue; - return cb(JSON.parse(newValue), key); - } else { + }; + $.deleteValue = function(key) { + GM_deleteValue(key); + if (key in $.syncing) { delete $.oldValue[key]; - return cb(void 0, key); + return delete localStorage[key]; } }; - $.on(window, 'storage', function(arg) { - var key; - key = arg.key; - return onChange(key); - }); - return $.forceSync = function(key) { - return onChange(g.NAMESPACE + key); + } else { + $.oldValue = {}; + $.setValue = function(key, val) { + if (key in $.syncing) { + $.oldValue[key] = val; + } + return localStorage[key] = val; }; - })(); + $.deleteValue = function(key) { + if (key in $.syncing) { + delete $.oldValue[key]; + } + return delete localStorage[key]; + }; + } + + if (typeof GM_addValueChangeListener !== "undefined" && GM_addValueChangeListener !== null) { + $.sync = function(key, cb) { + return $.syncing[key] = GM_addValueChangeListener(g.NAMESPACE + key, function(key2, oldValue, newValue, remote) { + if (remote) { + if (newValue !== void 0) { + newValue = JSON.parse(newValue); + } + return cb(newValue, key); + } + }); + }; + $.forceSync = function() {}; + } else { + $.sync = function(key, cb) { + key = g.NAMESPACE + key; + $.syncing[key] = cb; + return $.oldValue[key] = $.getValue(key); + }; + (function() { + var onChange; + onChange = function(key) { + var cb, newValue; + if (!(cb = $.syncing[key])) { + return; + } + newValue = $.getValue(key); + if (newValue === $.oldValue[key]) { + return; + } + if (newValue != null) { + $.oldValue[key] = newValue; + return cb(JSON.parse(newValue), key.slice(g.NAMESPACE.length)); + } else { + delete $.oldValue[key]; + return cb(void 0, key.slice(g.NAMESPACE.length)); + } + }; + $.on(window, 'storage', function(arg) { + var key; + key = arg.key; + return onChange(key); + }); + return $.forceSync = function(key) { + return onChange(g.NAMESPACE + key); + }; + })(); + } $["delete"] = function(keys) { var k, key, len1; @@ -907,12 +1015,7 @@ } for (k = 0, len1 = keys.length; k < len1; k++) { key = keys[k]; - key = g.NAMESPACE + key; - GM_deleteValue(key); - if (key in $.syncing) { - delete $.oldValue[key]; - localStorage.removeItem(key); - } + $.deleteValue(g.NAMESPACE + key); } }; @@ -926,7 +1029,7 @@ } return $.queueTask(function() { for (key in items) { - if (val = GM_getValue(g.NAMESPACE + key)) { + if (val = $.getValue(g.NAMESPACE + key)) { items[key] = JSON.parse(val); } } @@ -934,36 +1037,24 @@ }); }; - $.set = (function() { - var set; - set = function(key, val) { - key = g.NAMESPACE + key; - val = JSON.stringify(val); - GM_setValue(key, val); - if (key in $.syncing) { - $.oldValue[key] = val; - return localStorage.setItem(key, val); + $.set = function(keys, val, cb) { + var key, value; + if (typeof keys === 'string') { + $.setValue(g.NAMESPACE + keys, JSON.stringify(val)); + } else { + for (key in keys) { + value = keys[key]; + $.setValue(g.NAMESPACE + key, JSON.stringify(value)); } - }; - return function(keys, val, cb) { - var key, value; - if (typeof keys === 'string') { - set(keys, val); - } else { - for (key in keys) { - value = keys[key]; - set(key, value); - } - cb = val; - } - return typeof cb === "function" ? cb() : void 0; - }; - })(); + cb = val; + } + return typeof cb === "function" ? cb() : void 0; + }; $.clear = function(cb) { - var a, board, boards, id; + var id; $["delete"](Object.keys(Conf)); - $["delete"](['previousversion', 'AutoWatch', 'cooldown.global', 'QR Size', 'captchas', 'QR.persona', 'hiddenPSA']); + $["delete"](['previousversion', 'AutoWatch', 'QR Size', 'captchas', 'QR.persona', 'hiddenPSA']); $["delete"]((function() { var k, len1, ref, results; ref = ['embedding', 'updater', 'thread-stats', 'thread-watcher', 'qr']; @@ -974,28 +1065,8 @@ } return results; })()); - boards = (function() { - var k, len1, ref, results; - ref = $$('#boardNavDesktop > .boardList > a'); - results = []; - for (k = 0, len1 = ref.length; k < len1; k++) { - a = ref[k]; - results.push(a.textContent); - } - return results; - })(); - boards.push('qa'); - $["delete"]((function() { - var k, len1, results; - results = []; - for (k = 0, len1 = boards.length; k < len1; k++) { - board = boards[k]; - results.push("cooldown." + board); - } - return results; - })()); try { - $["delete"](GM_listValues().map(function(key) { + $["delete"]($.listValues().map(function(key) { return key.replace(g.NAMESPACE, ''); })); } catch (_error) {} @@ -1024,13 +1095,17 @@ return this[name] = cb; }; - Callbacks.prototype.execute = function(node) { + Callbacks.prototype.execute = function(node, keys) { var err, errors, k, len1, name, ref; - ref = this.keys; - for (k = 0, len1 = ref.length; k < len1; k++) { - name = ref[k]; + if (keys == null) { + keys = this.keys; + } + for (k = 0, len1 = keys.length; k < len1; k++) { + name = keys[k]; try { - this[name].call(node); + if ((ref = this[name]) != null) { + ref.call(node); + } } catch (_error) { err = _error; if (!errors) { @@ -1230,9 +1305,19 @@ quote: $('.postNum > a:nth-of-type(2)', info), comment: $('.postMessage', post), links: [], - quotelinks: [], - backlinks: info.getElementsByClassName('backlink') + quotelinks: [] }; + if ($.engine === 'edge') { + Object.defineProperty(this.nodes, 'backlinks', { + configurable: true, + enumerable: true, + get: function() { + return info.getElementsByClassName('backlink'); + } + }); + } else { + this.nodes.backlinks = info.getElementsByClassName('backlink'); + } if (!(this.isReply = $.hasClass(post, 'reply'))) { this.thread.OP = this; this.thread.isArchived = !!$('.archivedIcon', info); @@ -1448,7 +1533,7 @@ Post.prototype.resurrect = function() { var clone, k, len1, len2, q, quotelink, ref, ref1, strong; - delete this.isDead; + this.isDead = false; $.rmClass(this.nodes.root, 'deleted-post'); strong = $('strong.warning', this.nodes.info); if (this.file && this.file.isDead) { @@ -1476,7 +1561,6 @@ }; Post.prototype.collect = function() { - this.kill(); g.posts.rm(this.fullID); this.thread.posts.rm(this); return this.board.posts.rm(this); @@ -1523,9 +1607,19 @@ nameBlock: $('.nameBlock', info), quote: $('.postNum > a:nth-of-type(2)', info), comment: $('.postMessage', post), - quotelinks: [], - backlinks: info.getElementsByClassName('backlink') + quotelinks: [] }; + if ($.engine === 'edge') { + Object.defineProperty(this.nodes, 'backlinks', { + configurable: true, + enumerable: true, + get: function() { + return info.getElementsByClassName('backlink'); + } + }); + } else { + this.nodes.backlinks = info.getElementsByClassName('backlink'); + } ref1 = $$('.inline', post); for (q = 0, len2 = ref1.length; q < len2; q++) { inline = ref1[q]; @@ -2053,19 +2147,27 @@ function Connection(target1, origin1, cb1) { this.target = target1; this.origin = origin1; - this.cb = cb1; + this.cb = cb1 != null ? cb1 : {}; this.onMessage = bind(this.onMessage, this); this.send = bind(this.send, this); $.on(window, 'message', this.onMessage); } + Connection.prototype.targetWindow = function() { + if (this.target instanceof window.HTMLIFrameElement) { + return this.target.contentWindow; + } else { + return this.target; + } + }; + Connection.prototype.send = function(data) { - return this.target.postMessage("" + g.NAMESPACE + (JSON.stringify(data)), this.origin); + return this.targetWindow().postMessage("" + g.NAMESPACE + (JSON.stringify(data)), this.origin); }; Connection.prototype.onMessage = function(e) { var base1, data, type, value; - if (!(e.source === this.target && e.origin === this.origin && typeof e.data === 'string' && e.data.slice(0, g.NAMESPACE.length) === g.NAMESPACE)) { + if (!(e.source === this.targetWindow() && e.origin === this.origin && typeof e.data === 'string' && e.data.slice(0, g.NAMESPACE.length) === g.NAMESPACE)) { return; } data = JSON.parse(e.data.slice(g.NAMESPACE.length)); @@ -2185,7 +2287,7 @@ if (/^https:\/\//.test(url) || location.protocol === 'http:') { $.cache(url, (function(self) { return function() { - return self.parseArchivedPost(this.response); + return self.parseArchivedPost(this.response, url); }; })(this), { responseType: 'json', @@ -2206,7 +2308,7 @@ } } } - return _this.parseArchivedPost(response); + return _this.parseArchivedPost(response, url); }; })(this)); return true; @@ -2214,8 +2316,8 @@ return false; }; - Fetcher.prototype.parseArchivedPost = function(data) { - var board, comment, greentext, i, j, o, post, ref, text, text2, thread; + Fetcher.prototype.parseArchivedPost = function(data, url) { + var board, comment, greentext, i, j, key, o, post, ref, ref1, text, text2, thread, val; if (post = g.posts[this.boardID + "." + this.postID]) { this.insert(post); return; @@ -2292,6 +2394,13 @@ delete o.info.uniqueID; } if ((ref = data.media) != null ? ref.media_filename : void 0) { + ref1 = data.media; + for (key in ref1) { + val = ref1[key]; + if (/_link$/.test(key) && (val != null ? val[0] : void 0) === '/') { + data.media[key] = url.split('/', 3).join('/') + val; + } + } o.file = { name: data.media.media_filename, url: data.media.media_link || data.media.remote_media_link || (location.protocol + "//i.4cdn.org/" + this.boardID + "/" + (encodeURIComponent(data.media[this.boardID === 'f' ? 'media_filename' : 'media_orig']))), @@ -2365,26 +2474,7 @@ Polyfill = { init: function() { - this.notificationPermission(); - this.toBlob(); - return this.visibility(); - }, - notificationPermission: function() { - if (!window.Notification || 'permission' in Notification || !window.webkitNotifications) { - return; - } - return Object.defineProperty(Notification, 'permission', { - get: function() { - switch (webkitNotifications.checkPermission()) { - case 0: - return 'granted'; - case 1: - return 'default'; - case 2: - return 'denied'; - } - } - }); + return this.toBlob(); }, toBlob: function() { var base1; @@ -2400,26 +2490,6 @@ type: 'image/png' })); }); - }, - visibility: function() { - if ('visibilityState' in d) { - return; - } - Object.defineProperties(HTMLDocument.prototype, { - visibilityState: { - get: function() { - return this.webkitVisibilityState; - } - }, - hidden: { - get: function() { - return this.webkitHidden; - } - } - }); - return $.on(d, 'webkitvisibilitychange', function() { - return $.event('visibilitychange'); - }); } }; @@ -3153,7 +3223,7 @@ $.asap((function() { return $('.board > .thread > .postContainer', doc) || d.readyState !== 'loading'; }), function() { - var board, el, len3, len4, ref6, ref7, ref8, threadRoot, topNavPos, u, w; + var board, el, len3, len4, ref6, ref7, threadRoot, topNavPos, u, v; if (!Main.isThisPageLegit()) { return; } @@ -3170,13 +3240,11 @@ $.event('PostsInserted'); d.implementation.createDocument(null, null, null).appendChild(board); ref7 = $$('.navLinks'); - for (w = 0, len4 = ref7.length; w < len4; w++) { - el = ref7[w]; + for (v = 0, len4 = ref7.length; v < len4; v++) { + el = ref7[v]; $.rm(el); } - if ((ref8 = $.id('search-box')) != null) { - ref8.parentNode.remove(); - } + $.rm($.id('ctrl-top')); topNavPos = $.id('delform').previousElementSibling; $.before(topNavPos, $.el('hr')); return $.before(topNavPos, Index.navLinks); @@ -3349,7 +3417,6 @@ var mode, page, ref, ref1, search, state; if (e != null ? e.state : void 0) { ref = e.state, search = ref.search, mode = ref.mode; - page = Index.getCurrentPage(); state = {}; if (Index.search !== search) { state.search = Index.search = search; @@ -3358,6 +3425,7 @@ state.mode = mode; Index.saveMode(mode); } + page = Index.getCurrentPage(); if (Index.currentPage !== page) { state.page = Index.currentPage = page; } @@ -3601,7 +3669,6 @@ }, update: function(state) { var now, ref, ref1; - delete Index.pageNum; if ((ref = Index.req) != null) { ref.abort(); } @@ -3916,10 +3983,12 @@ Index.pushState({ page: page }); + Index.setPage(); } } nodes = Index.buildSinglePage(Index.getCurrentPage()); } + delete Index.pageNum; $.rmAll(Index.root); $.rmAll(Header.hover); if (Conf['Index Mode'] === 'catalog') { @@ -4238,7 +4307,7 @@ return Build.postFromObject(data, board.ID); }, catalogThread: function(thread) { - var br, cc, comment, data, exif, fileCount, gifIcon, href, imgClass, k, len1, len2, len3, len4, pageCount, postCount, pp, q, quote, ref, ref1, ref2, ref3, ref4, root, spoilerRange, src, staticPath, u, w; + var br, cc, comment, data, exif, fileCount, gifIcon, href, imgClass, k, len1, len2, len3, len4, pageCount, postCount, pp, q, quote, ref, ref1, ref2, ref3, ref4, root, spoilerRange, src, staticPath, u, v; staticPath = Build.staticPath, gifIcon = Build.gifIcon; data = Index.liveThreadData[Index.liveThreadIDs.indexOf(thread.ID)]; if (data.spoiler && !Conf['Reveal Spoiler Thumbnails']) { @@ -4296,8 +4365,8 @@ $.replace(pp, cc); } ref3 = $$('br', root.lastElementChild); - for (w = 0, len4 = ref3.length; w < len4; w++) { - br = ref3[w]; + for (v = 0, len4 = ref3.length; v < len4; v++) { + br = ref3[v]; if (((ref4 = br.previousSibling) != null ? ref4.nodeName : void 0) === 'BR') { $.rm(br); } @@ -4551,9 +4620,18 @@ }; Menu.prototype.insertEntry = function(entry, parent, data) { - var k, len1, ref, subEntry, submenu; + var err, k, len1, ref, subEntry, submenu; if (typeof entry.open === 'function') { - if (!entry.open(data)) { + try { + if (!entry.open(data)) { + return; + } + } catch (_error) { + err = _error; + Main.handleErrors({ + message: "Error in building the " + this.type + " menu.", + error: err + }); return; } } @@ -4872,25 +4950,36 @@ CrossOrigin = (function() { return { binary: function(url, cb, headers) { + var options, ref, workaround; if (headers == null) { headers = {}; } - return GM_xmlhttpRequest({ + workaround = $.engine === 'gecko' && (typeof GM_info !== "undefined" && GM_info !== null) && /^[0-2]\.|^3\.[01](?!\d)/.test(GM_info.version); + workaround || (workaround = (typeof GM_info !== "undefined" && GM_info !== null ? (ref = GM_info.script) != null ? ref.includeJSB : void 0 : void 0) != null); + options = { method: "GET", url: url, headers: headers, - overrideMimeType: "text/plain; charset=x-user-defined", onload: function(xhr) { - var contentDisposition, contentType, data, i, r, ref, ref1; - r = xhr.responseText; - data = new Uint8Array(r.length); - i = 0; - while (i < r.length) { - data[i] = r.charCodeAt(i); - i++; + var contentDisposition, contentType, data, i, r, ref1, ref2; + if (workaround) { + r = xhr.responseText; + data = new Uint8Array(r.length); + i = 0; + while (i < r.length) { + data[i] = r.charCodeAt(i); + i++; + } + } else { + data = new Uint8Array(xhr.response); + } + if (typeof xhr.responseHeaders === 'object') { + contentType = xhr.responseHeaders['Content-Type']; + contentDisposition = xhr.responseHeaders['Content-Disposition']; + } else { + contentType = (ref1 = xhr.responseHeaders.match(/Content-Type:\s*(.*)/i)) != null ? ref1[1] : void 0; + contentDisposition = (ref2 = xhr.responseHeaders.match(/Content-Disposition:\s*(.*)/i)) != null ? ref2[1] : void 0; } - contentType = (ref = xhr.responseHeaders.match(/Content-Type:\s*(.*)/i)) != null ? ref[1] : void 0; - contentDisposition = (ref1 = xhr.responseHeaders.match(/Content-Disposition:\s*(.*)/i)) != null ? ref1[1] : void 0; return cb(data, contentType, contentDisposition); }, onerror: function() { @@ -4899,11 +4988,17 @@ onabort: function() { return cb(null); } - }); + }; + if (workaround) { + options.overrideMimeType = options.mimeType = 'text/plain; charset=x-user-defined'; + } else { + options.responseType = 'arraybuffer'; + } + return GM_xmlhttpRequest(options); }, file: function(url, cb) { return CrossOrigin.binary(url, function(data, contentType, contentDisposition) { - var blob, match, mime, name, ref, ref1, ref2; + var blob, match, mime, name, ref, ref1, ref2, ref3; if (data == null) { return cb(null); } @@ -4913,6 +5008,9 @@ if (match) { name = match.replace(/\\"/g, '"'); } + if ((typeof GM_info !== "undefined" && GM_info !== null ? (ref3 = GM_info.script) != null ? ref3.includeJSB : void 0 : void 0) != null) { + mime = QR.typeFromExtension[name.match(/[^.]*$/)[0].toLowerCase()] || 'application/octet-stream'; + } blob = new Blob([data], { type: mime }); @@ -5012,7 +5110,7 @@ Filter = { filters: {}, init: function() { - var boards, err, filter, hl, k, key, len1, line, op, ref, ref1, ref2, ref3, ref4, ref5, ref6, regexp, stub, top; + var boards, err, filter, hl, k, key, len1, line, op, ref, ref1, ref2, ref3, ref4, ref5, regexp, stub, top; if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Filter'])) { return; } @@ -5032,9 +5130,7 @@ } filter = line.replace(regexp[0], ''); boards = ((ref2 = filter.match(/boards:([^;]+)/)) != null ? ref2[1].toLowerCase() : void 0) || 'global'; - if (boards !== 'global' && (ref3 = g.BOARD.ID, indexOf.call(boards.split(','), ref3) < 0)) { - continue; - } + boards = boards === 'global' ? null : boards.split(','); if (key === 'uniqueID' || key === 'MD5') { regexp = regexp[1]; } else { @@ -5046,10 +5142,10 @@ continue; } } - op = ((ref4 = filter.match(/[^t]op:(yes|no|only)/)) != null ? ref4[1] : void 0) || 'yes'; + op = ((ref3 = filter.match(/[^t]op:(yes|no|only)/)) != null ? ref3[1] : void 0) || 'yes'; stub = (function() { - var ref5; - switch ((ref5 = filter.match(/stub:(yes|no)/)) != null ? ref5[1] : void 0) { + var ref4; + switch ((ref4 = filter.match(/stub:(yes|no)/)) != null ? ref4[1] : void 0) { case 'yes': return true; case 'no': @@ -5059,11 +5155,11 @@ } })(); if (hl = /highlight/.test(filter)) { - hl = ((ref5 = filter.match(/highlight:([\w-]+)/)) != null ? ref5[1] : void 0) || 'filter-highlight'; - top = ((ref6 = filter.match(/top:(yes|no)/)) != null ? ref6[1] : void 0) || 'yes'; + hl = ((ref4 = filter.match(/highlight:([\w-]+)/)) != null ? ref4[1] : void 0) || 'filter-highlight'; + top = ((ref5 = filter.match(/top:(yes|no)/)) != null ? ref5[1] : void 0) || 'yes'; top = top === 'yes'; } - this.filters[key].push(this.createFilter(regexp, op, stub, hl, top)); + this.filters[key].push(this.createFilter(regexp, boards, op, stub, hl, top)); } if (!this.filters[key].length) { delete this.filters[key]; @@ -5077,7 +5173,7 @@ cb: this.node }); }, - createFilter: function(regexp, op, stub, hl, top) { + createFilter: function(regexp, boards, op, stub, hl, top) { var settings, test; test = typeof regexp === 'string' ? function(value) { return regexp === value; @@ -5090,7 +5186,10 @@ "class": hl, top: top }; - return function(value, isReply) { + return function(value, boardID, isReply) { + if (boards && indexOf.call(boards, boardID) < 0) { + return false; + } if (isReply && op === 'only' || !isReply && op === 'no') { return false; } @@ -5110,7 +5209,7 @@ ref = Filter.filters[key]; for (k = 0, len1 = ref.length; k < len1; k++) { filter = ref[k]; - if (!(result = filter(value, this.isReply))) { + if (!(result = filter(value, this.board.ID, this.isReply))) { continue; } if (result.hide && !this.isFetchedQuote) { @@ -5141,7 +5240,7 @@ ref = Filter.filters[key]; for (k = 0, len1 = ref.length; k < len1; k++) { filter = ref[k]; - if (result = filter(value, post.isReply)) { + if (result = filter(value, post.boardID, post.isReply)) { if (result.hide) { return true; } @@ -6704,8 +6803,18 @@ QR = { mimeTypes: ['image/jpeg', 'image/png', 'image/gif', 'application/pdf', 'application/vnd.adobe.flash.movie', 'application/x-shockwave-flash', 'video/webm'], + validExtension: /\.(jpe?g|png|gif|pdf|swf|webm)$/i, + typeFromExtension: { + 'jpg': 'image/jpeg', + 'jpeg': 'image/jpeg', + 'png': 'image/png', + 'gif': 'image/gif', + 'pdf': 'application/pdf', + 'swf': 'application/vnd.adobe.flash.movie', + 'webm': 'video/webm' + }, init: function() { - var noscript, sc; + var noscript, sc, version; if (!Conf['Quick Reply']) { return; } @@ -6714,8 +6823,8 @@ if (g.VIEW === 'archive') { return; } - noscript = Conf['Force Noscript Captcha'] || !$.hasClass(doc, 'js-enabled'); - this.captcha = Captcha[noscript ? 'noscript' : 'v2']; + version = Conf['Use Recaptcha v1'] ? (noscript = Conf['Force Noscript Captcha'] || !$.hasClass(doc, 'js-enabled'), noscript ? 'noscript' : 'v1') : 'v2'; + this.captcha = Captcha[version]; $.on(d, '4chanXInitFinished', this.initReady); Post.callbacks.push({ name: 'Quick Reply', @@ -6868,16 +6977,20 @@ QR.hasFocus = d.activeElement && QR.nodes.el.contains(d.activeElement); QR.nodes.el.classList.toggle('focus', QR.hasFocus); } - if (QR.inCaptcha()) { - QR.scrollY = window.scrollY; - return $.on(d, 'scroll', QR.scrollLock); - } else { - return $.off(d, 'scroll', QR.scrollLock); + if (QR.captcha.isEnabled && QR.captcha === Captcha.v2 && !QR.captcha.noscript) { + if (QR.inCaptcha()) { + QR.scrollY = window.scrollY; + return $.on(d, 'scroll', QR.scrollLock); + } else { + return $.off(d, 'scroll', QR.scrollLock); + } } }); }, inBubble: function() { - return $$('.goog-bubble-content > iframe').some(function(el) { + var bubbles, ref; + bubbles = $$('.goog-bubble-content > iframe'); + return (ref = d.activeElement, indexOf.call(bubbles, ref) >= 0) || bubbles.some(function(el) { return el.getBoundingClientRect().bottom > 0; }); }, @@ -6938,24 +7051,26 @@ return alert(el.textContent); } } else if (d.hidden || !(focusOverride || d.hasFocus())) { - notif = new Notification(el.textContent, { - body: el.textContent, - icon: Favicon.logo - }); - notif.onclick = function() { - return window.focus(); - }; - if (typeof chrome !== "undefined" && chrome !== null) { - notif.onclose = function() { - return notice.close(); + try { + notif = new Notification(el.textContent, { + body: el.textContent, + icon: Favicon.logo + }); + notif.onclick = function() { + return window.focus(); }; - return notif.onshow = function() { - return setTimeout(function() { - notif.onclose = null; - return notif.close(); - }, 7 * $.SECOND); - }; - } + if ($.engine !== 'gecko') { + notif.onclose = function() { + return notice.close(); + }; + return notif.onshow = function() { + return setTimeout(function() { + notif.onclose = null; + return notif.close(); + }, 7 * $.SECOND); + }; + } + } catch (_error) {} } }, notifications: [], @@ -6985,7 +7100,7 @@ return status.disabled = disabled || false; }, quote: function(e) { - var ancestor, caretPos, com, frag, index, insideCode, k, len1, len2, len3, len4, len5, len6, node, post, q, range, ref, ref1, ref2, ref3, ref4, ref5, ref6, ref7, sel, text, thread, u, w, y, z; + var ancestor, caretPos, com, frag, index, insideCode, k, len1, len2, len3, len4, len5, len6, node, post, q, range, ref, ref1, ref2, ref3, ref4, ref5, ref6, ref7, sel, text, thread, u, v, w, y; if (e != null) { e.preventDefault(); } @@ -7025,18 +7140,18 @@ $.replace(node, [$.tn('[spoiler]')].concat(slice.call(node.childNodes), [$.tn('[/spoiler]')])); } ref3 = $$('.prettyprint', frag); - for (w = 0, len4 = ref3.length; w < len4; w++) { - node = ref3[w]; + for (v = 0, len4 = ref3.length; v < len4; v++) { + node = ref3[v]; $.replace(node, [$.tn('[code]')].concat(slice.call(node.childNodes), [$.tn('[/code]')])); } ref4 = $$('.linkify[data-original]', frag); - for (y = 0, len5 = ref4.length; y < len5; y++) { - node = ref4[y]; + for (w = 0, len5 = ref4.length; w < len5; w++) { + node = ref4[w]; $.replace(node, $.tn(node.dataset.original)); } ref5 = $$('.embedder', frag); - for (z = 0, len6 = ref5.length; z < len6; z++) { - node = ref5[z]; + for (y = 0, len6 = ref5.length; y < len6; y++) { + node = ref5[y]; if (((ref6 = node.previousSibling) != null ? ref6.nodeValue : void 0) === ' ') { $.rm(node.previousSibling); } @@ -7148,7 +7263,7 @@ blob = new Blob([arr], { type: m[1] }); - blob.name = "image." + m[2]; + blob.name = "file." + m[2]; QR.handleFiles([blob]); } else if (/^https?:\/\//.test(src)) { QR.handleUrl(src); @@ -7351,7 +7466,7 @@ window.addEventListener('focus', QR.focus, true); window.addEventListener('blur', QR.focus, true); $.on(d, 'click', QR.focus); - if (typeof chrome === "undefined" || chrome === null) { + if ($.engine === 'gecko') { nodes.pasteArea.hidden = false; new MutationObserver(QR.pasteFF).observe(nodes.pasteArea, { childList: true @@ -7369,7 +7484,7 @@ event = node.nodeName === 'SELECT' ? 'change' : 'input'; $.on(nodes[name], event, save); } - if (Conf['Remember QR Size']) { + if ($.engine === 'gecko' && Conf['Remember QR Size']) { $.get('QR Size', '', function(item) { return nodes.com.style.cssText = item['QR Size']; }); @@ -7384,7 +7499,7 @@ QR.persona.init(); new QR.post(true); QR.status(); - QR.cooldown.init(); + QR.cooldown.setup(); QR.captcha.init(); $.add(d.body, dialog); QR.captcha.setup(); @@ -7478,7 +7593,6 @@ upCallbacks: { onload: function() { QR.req.isUploadFinished = true; - QR.req.uploadEndTime = Date.now(); QR.req.progress = '...'; return QR.status(); }, @@ -7490,7 +7604,12 @@ }; cb = function(response) { if (response != null) { - extra.form.append('g-recaptcha-response', response); + if (response.challenge != null) { + extra.form.append('recaptcha_challenge_field', response.challenge); + extra.form.append('recaptcha_response_field', response.response); + } else { + extra.form.append('g-recaptcha-response', response.response); + } } QR.req = $.ajax("https://sys.4chan.org/" + g.BOARD + "/post", options, extra); return QR.req.progress = '...'; @@ -7602,7 +7721,7 @@ post.rm(); QR.captcha.setup(d.activeElement === QR.nodes.status); } - QR.cooldown.add(req.uploadEndTime, threadID, postID); + QR.cooldown.add(threadID, postID); URL = threadID === postID ? window.location.origin + "/" + g.BOARD + "/thread/" + threadID : g.VIEW === 'index' && lastPostToThread && Conf['Open Post in New Tab'] ? window.location.origin + "/" + g.BOARD + "/thread/" + threadID + "#p" + postID : void 0; if (URL) { open = Conf['Open Post in New Tab'] || postsCount ? function() { @@ -7652,13 +7771,17 @@ Captcha = {}; Captcha.fixes = { - css: '.rc-imageselect-target > .rc-imageselect-tile > img:focus {\n outline: 2px solid #4a90e2;\n}\n.rc-button-default:focus {\n box-shadow: inset 0 0 0 2px #0063d6;\n}', + imageKeys: '789456123uiojklm'.split('').concat(['Comma', 'Period']), + css: '.rc-imageselect-target > div:focus {\n outline: 2px solid #4a90e2;\n}\n.rc-button-default:focus {\n box-shadow: inset 0 0 0 2px #0063d6;\n}', + cssNoscript: '.fbc-payload-imageselect {\n position: relative;\n}\n.fbc-payload-imageselect > label {\n position: absolute;\n display: block;\n height: 93.3px;\n width: 93.3px;\n}\nlabel[data-row="0"] {top: 0px;}\nlabel[data-row="1"] {top: 93.3px;}\nlabel[data-row="2"] {top: 186.6px;}\nlabel[data-col="0"] {left: 0px;}\nlabel[data-col="1"] {left: 93.3px;}\nlabel[data-col="2"] {left: 186.6px;}', init: function() { switch (location.pathname.split('/')[3]) { case 'anchor': return this.initMain(); case 'frame': return this.initPopup(); + case 'fallback': + return this.initNoscript(); } }, initMain: function() { @@ -7688,84 +7811,119 @@ }); return $.on(d, 'keydown', this.keybinds.bind(this)); }, - fixImages: function() { - var focus, img, k, len1, ref; - if (!(this.images = $$('.rc-imageselect-target > .rc-imageselect-tile > img')).length) { + initNoscript: function() { + this.noscript = true; + this.images = $$('.fbc-payload-imageselect > input'); + if (!this.images.length) { return; } - focus = this.images[0].tabIndex !== 0; + $.addStyle(this.cssNoscript); + this.addLabels(); + $.on(d, 'keydown', this.keybinds.bind(this)); + return $.on($('.fbc-imageselect-challenge > form'), 'submit', this.checkForm.bind(this)); + }, + fixImages: function() { + var img, k, len1, ref; + this.images = $$('.rc-imageselect-target > div'); ref = this.images; for (k = 0, len1 = ref.length; k < len1; k++) { img = ref[k]; img.tabIndex = 0; } - if (focus) { - return $.queueTask((function(_this) { - return function() { - return _this.focusImage(); - }; - })(this)); + if (this.images.length) { + return this.addTooltips(this.images); } }, - focusImage: function() { - var img; - img = this.images[0]; - return $.asap(function() { - if (!doc.contains(img)) { - return true; + addLabels: function() { + var checkbox, i, imageSelect, label, labels; + imageSelect = $('.fbc-payload-imageselect'); + labels = (function() { + var k, len1, ref, results; + ref = this.images; + results = []; + for (i = k = 0, len1 = ref.length; k < len1; i = ++k) { + checkbox = ref[i]; + checkbox.id = "checkbox-" + i; + label = $.el('label', { + htmlFor: checkbox.id + }); + label.dataset.row = Math.floor(i / 3); + label.dataset.col = i % 3; + results.push(label); } - img.focus(); - return d.activeElement === img; - }, function() {}); + return results; + }).call(this); + $.add(imageSelect, labels); + return this.addTooltips(labels); + }, + addTooltips: function(nodes) { + var i, k, len1, node; + for (i = k = 0, len1 = nodes.length; k < len1; i = ++k) { + node = nodes[i]; + node.title = this.imageKeys[i] + " or " + (this.imageKeys[i + 9][0].toUpperCase()) + this.imageKeys[i + 9].slice(1); + } + }, + checkForm: function(e) { + var checkbox, k, len1, n, ref; + n = 0; + ref = this.images; + for (k = 0, len1 = ref.length; k < len1; k++) { + checkbox = ref[k]; + if (checkbox.checked) { + n++; + } + } + if (n === 0) { + return e.preventDefault(); + } }, keybinds: function(e) { - var dx, reload, verify, x; - if (!(this.images && doc.contains(this.images[0]) && d.activeElement)) { + var dx, i, key, reload, verify, x; + if (!(this.images && doc.contains(this.images[0]))) { return; } - reload = $.id('recaptcha-reload-button'); - verify = $.id('recaptcha-verify-button'); + reload = $('#recaptcha-reload-button, .fbc-button-reload'); + verify = $('#recaptcha-verify-button, .fbc-button-verify > input'); x = this.images.indexOf(d.activeElement); if (x < 0) { - if (!$('.rc-controls').contains(d.activeElement)) { - return; - } x = d.activeElement === verify ? 11 : 9; } - if (!(dx = { - 38: 9, - 40: 3, - 37: 11, - 39: 1, - 73: 9, - 75: 3, - 74: 11, - 76: 1 - }[e.keyCode])) { + key = Keybinds.keyCode(e); + if (!this.noscript && key === 'Space' && x < 9) { + this.images[x].click(); + } else if ((i = this.imageKeys.indexOf(key)) >= 0) { + this.images[i % 9].click(); + verify.focus(); + } else if (dx = { + 'Up': 9, + 'Down': 3, + 'Left': 11, + 'Right': 1 + }[key]) { + x = (x + dx) % 12; + if (x === 10) { + x = dx === 11 ? 9 : 11; + } + (this.images[x] || { + 9: reload, + 11: verify + }[x]).focus(); + } else { return; } - x = (x + dx) % 12; - if (x === 10) { - x = dx === 11 ? 9 : 11; - } - (this.images[x] || { - 9: reload, - 11: verify - }[x]).focus(); e.preventDefault(); return e.stopPropagation(); } }; Captcha.noscript = { - lifetime: 2 * $.MINUTE, - iframeURL: '//www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc', + lifetime: 30 * $.MINUTE, init: function() { var container, input; if (d.cookie.indexOf('pass_enabled=1') >= 0) { return; } - if (!(this.isEnabled = !!$.id('g-recaptcha'))) { + if (!(this.isEnabled = !!$('#g-recaptcha, #captchaContainerAlt'))) { return; } container = $.el('div', { @@ -7794,7 +7952,7 @@ token: this.save.bind(this), error: this.error.bind(this) }); - $.addClass(QR.nodes.el, 'has-captcha'); + $.addClass(QR.nodes.el, 'has-captcha', 'captcha-v1', 'noscript-captcha'); $.after(QR.nodes.com.parentNode, [container, input]); this.captchas = []; $.get('captchas', [], function(arg) { @@ -7811,17 +7969,20 @@ var cb, conn, img, ref, ref1; conn = new Connection(window.parent, location.protocol + "//boards.4chan.org", { response: function(response) { - $.id('response').value = response; - return $('.fbc-challenge > form').submit(); + $.id('recaptcha_response_field').value = response; + return HTMLFormElement.prototype.submit.call($('form')); } }); - conn.send({ - token: (ref = $('.fbc-verification-token > textarea')) != null ? ref.value : void 0, - error: (ref1 = $('.fbc-error')) != null ? ref1.textContent : void 0 - }); - if (!(img = $('.fbc-payload > img'))) { + if (location.hash === '#response') { + conn.send({ + token: (ref = $('textarea')) != null ? ref.value : void 0, + error: (ref1 = $('.recaptcha_input_area')) != null ? ref1.textContent.replace(/:$/, '') : void 0 + }); + } + if (!(img = $('img'))) { return; } + $('form').action = '#response'; cb = function() { var canvas; canvas = $.el('canvas'); @@ -7839,6 +8000,14 @@ } }, timers: {}, + iframeURL: function() { + var lang, url; + url = '//www.google.com/recaptcha/api/noscript?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc'; + if (lang = Conf['captchaLanguage'].trim()) { + url += "&hl=" + (encodeURIComponent(lang)); + } + return url; + }, cb: { focus: function() { return QR.captcha.setup(false, true); @@ -7874,12 +8043,12 @@ if (!this.nodes.iframe) { this.nodes.iframe = $.el('iframe', { id: 'qr-captcha-iframe', - src: this.iframeURL + src: this.iframeURL() }); - $.add(d.body, this.nodes.iframe); - this.conn.target = this.nodes.iframe.contentWindow; + $.add(QR.nodes.el, this.nodes.iframe); + this.conn.target = this.nodes.iframe; } else if (!this.occupied || force) { - this.nodes.iframe.src = this.iframeURL; + this.nodes.iframe.src = this.iframeURL(); } this.occupied = true; if (focus) { @@ -7902,13 +8071,9 @@ if (!this.isEnabled) { return; } - if (this.nodes.img) { - $.rm(this.nodes.img); - } + $.rm(this.nodes.img); delete this.nodes.img; - if (this.nodes.iframe) { - $.rm(this.nodes.iframe); - } + $.rm(this.nodes.iframe); delete this.nodes.iframe; delete this.occupied; return this.beforeSetup(); @@ -7926,7 +8091,7 @@ if (captcha = this.captchas.shift()) { this.count(); $.set('captchas', this.captchas); - return captcha.response; + return captcha; } else if (/\S/.test(this.nodes.input.value)) { return (function(_this) { return function(cb) { @@ -7948,10 +8113,16 @@ } }, save: function(token) { + var captcha; delete this.occupied; this.nodes.input.value = ''; + captcha = { + challenge: token, + response: 'manual_challenge', + timeout: this.timeout + }; if (this.submitCB) { - this.submitCB(token); + this.submitCB(captcha); delete this.submitCB; if (this.needed()) { return this.reload(); @@ -7960,10 +8131,7 @@ } } else { $.forceSync('captchas'); - this.captchas.push({ - response: token, - timeout: this.timeout - }); + this.captchas.push(captcha); this.count(); $.set('captchas', this.captchas); return this.reload(); @@ -8056,7 +8224,7 @@ }, reload: function() { var ref; - this.nodes.iframe.src = this.iframeURL; + this.nodes.iframe.src = this.iframeURL(); this.occupied = true; return (ref = this.nodes.img) != null ? ref.hidden = true : void 0; }, @@ -8076,6 +8244,362 @@ } }; + Captcha.replace = { + init: function() { + var jsEnabled; + if (!(d.cookie.indexOf('pass_enabled=1') < 0)) { + return; + } + if (location.hostname === 'boards.4chan.org' && Conf['Hide Original Post Form']) { + return; + } + jsEnabled = $.hasClass(doc, 'js-enabled'); + if (location.hostname === 'sys.4chan.org' && Conf['Use Recaptcha v2 in Reports'] && jsEnabled) { + $.ready(Captcha.replace.v2); + return; + } + if (Conf['Use Recaptcha v1'] && jsEnabled && location.hostname !== 'www.4chan.org') { + $.ready(Captcha.replace.v1); + return; + } + if (Conf['captchaLanguage'].trim()) { + if (location.hostname === 'boards.4chan.org') { + return $.onExists(doc, '#captchaFormPart', true, function(node) { + return $.onExists(node, 'iframe', true, Captcha.replace.iframe); + }); + } else { + return $.onExists(doc, 'iframe', true, Captcha.replace.iframe); + } + } + }, + v1: function() { + var form, link; + if (!$.id('g-recaptcha')) { + return; + } + Captcha.v1.replace(); + if (link = $.id('form-link')) { + return $.on(link, 'click', function() { + return Captcha.v1.create(); + }); + } else if (location.hostname === 'boards.4chan.org') { + form = $.id('postForm'); + return form.addEventListener('focus', (function() { + return Captcha.v1.create(); + }), true); + } else { + return Captcha.v1.create(); + } + }, + v2: function() { + var container, lang, old, script, url; + if (!(old = $.id('captchaContainerAlt'))) { + return; + } + container = $.el('div', { + className: 'g-recaptcha' + }); + $.extend(container.dataset, { + sitekey: '6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc', + tabindex: 3 + }); + $.replace(old, container); + url = 'https://www.google.com/recaptcha/api.js'; + if (lang = Conf['captchaLanguage'].trim()) { + url += "?hl=" + (encodeURIComponent(lang)); + } + script = $.el('script', { + src: url + }); + return $.add(d.head, script); + }, + iframe: function(el) { + var lang, src; + if (!(lang = Conf['captchaLanguage'].trim())) { + return; + } + src = /[?&]hl=/.test(el.src) ? el.src.replace(/([?&]hl=)[^&]*/, '$1' + encodeURIComponent(lang)) : el.src + ("&hl=" + (encodeURIComponent(lang))); + if (el.src !== src) { + return el.src = src; + } + } + }; + + Captcha.v1 = { + blank: "data:image/svg+xml,", + init: function() { + var imgContainer, input; + if (d.cookie.indexOf('pass_enabled=1') >= 0) { + return; + } + if (!(this.isEnabled = !!$('#g-recaptcha, #captchaContainerAlt'))) { + return; + } + imgContainer = $.el('div', { + className: 'captcha-img', + title: 'Reload reCAPTCHA' + }); + $.extend(imgContainer, { + innerHTML: "" + }); + input = $.el('input', { + className: 'captcha-input field', + title: 'Verification', + autocomplete: 'off', + spellcheck: false + }); + this.nodes = { + img: imgContainer.firstChild, + input: input + }; + $.on(input, 'blur', QR.focusout); + $.on(input, 'focus', QR.focusin); + $.on(input, 'keydown', QR.captcha.keydown.bind(QR.captcha)); + $.on(this.nodes.img.parentNode, 'click', QR.captcha.reload.bind(QR.captcha)); + $.addClass(QR.nodes.el, 'has-captcha', 'captcha-v1'); + $.after(QR.nodes.com.parentNode, [imgContainer, input]); + this.captchas = []; + $.get('captchas', [], function(arg) { + var captchas; + captchas = arg.captchas; + QR.captcha.sync(captchas); + return QR.captcha.clear(); + }); + $.sync('captchas', this.sync); + this.replace(); + this.beforeSetup(); + if (Conf['Auto-load captcha']) { + this.setup(); + } + new MutationObserver(this.afterSetup).observe($.id('captchaContainerAlt'), { + childList: true + }); + return this.afterSetup(); + }, + replace: function() { + var container, old; + if (this.script) { + return; + } + if (!(this.script = $('script[src="//www.google.com/recaptcha/api/js/recaptcha_ajax.js"]', d.head))) { + this.script = $.el('script', { + src: '//www.google.com/recaptcha/api/js/recaptcha_ajax.js' + }); + $.add(d.head, this.script); + } + if (old = $.id('g-recaptcha')) { + container = $.el('div', { + id: 'captchaContainerAlt' + }); + return $.replace(old, container); + } + }, + create: function() { + return $.globalEval('(function() {\n var container = document.getElementById("captchaContainerAlt");\n if (container.firstChild) return;\n var options = {\n theme: "clean",\n tabindex: {"boards.4chan.org": 5, "sys.4chan.org": 3}[location.hostname]\n };\n if (window.Recaptcha) {\n window.Recaptcha.create("6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc", container, options);\n } else {\n var script = document.head.querySelector(\'script[src="//www.google.com/recaptcha/api/js/recaptcha_ajax.js"]\');\n script.addEventListener(\'load\', function() {\n window.Recaptcha.create("6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc", container, options);\n }, false);\n }\n})();'); + }, + cb: { + focus: function() { + return QR.captcha.setup(false, true); + } + }, + beforeSetup: function() { + var img, input, ref; + ref = this.nodes, img = ref.img, input = ref.input; + img.parentNode.hidden = true; + img.src = this.blank; + input.value = ''; + input.placeholder = 'Focus to load reCAPTCHA'; + this.count(); + return $.on(input, 'focus click', this.cb.focus); + }, + needed: function() { + var captchaCount, postsCount; + captchaCount = this.captchas.length; + if (QR.req) { + captchaCount++; + } + postsCount = QR.posts.length; + if (postsCount === 1 && !Conf['Auto-load captcha'] && !QR.posts[0].com && !QR.posts[0].file) { + postsCount = 0; + } + return captchaCount < postsCount; + }, + onNewPost: function() {}, + onPostChange: function() {}, + setup: function(focus, force) { + if (!(this.isEnabled && (force || this.needed()))) { + return; + } + this.create(); + if (focus) { + return this.nodes.input.focus(); + } + }, + afterSetup: function() { + var challenge, img, input, ref, setLifetime; + if (!(challenge = $.id('recaptcha_challenge_field_holder'))) { + return; + } + if (challenge === QR.captcha.nodes.challenge) { + return; + } + setLifetime = function(e) { + return QR.captcha.lifetime = e.detail; + }; + $.on(window, 'captcha:timeout', setLifetime); + $.globalEval('window.dispatchEvent(new CustomEvent("captcha:timeout", {detail: RecaptchaState.timeout}))'); + $.off(window, 'captcha:timeout', setLifetime); + ref = QR.captcha.nodes, img = ref.img, input = ref.input; + img.parentNode.hidden = false; + input.placeholder = 'Verification'; + QR.captcha.count(); + $.off(input, 'focus click', QR.captcha.cb.focus); + QR.captcha.nodes.challenge = challenge; + new MutationObserver(QR.captcha.load.bind(QR.captcha)).observe(challenge, { + childList: true, + subtree: true, + attributes: true + }); + QR.captcha.load(); + if (QR.nodes.el.getBoundingClientRect().bottom > doc.clientHeight) { + QR.nodes.el.style.top = null; + return QR.nodes.el.style.bottom = '0px'; + } + }, + destroy: function() { + if (!this.script) { + return; + } + $.globalEval('window.Recaptcha.destroy();'); + if (this.nodes) { + return this.beforeSetup(); + } + }, + sync: function(captchas) { + if (captchas == null) { + captchas = []; + } + QR.captcha.captchas = captchas; + return QR.captcha.count(); + }, + getOne: function() { + var captcha, challenge, response, timeout; + this.clear(); + if (captcha = this.captchas.shift()) { + this.count(); + $.set('captchas', this.captchas); + return captcha; + } else { + challenge = this.nodes.img.alt; + timeout = this.timeout; + if (/\S/.test(response = this.nodes.input.value)) { + this.destroy(); + return { + challenge: challenge, + response: response, + timeout: timeout + }; + } else { + return null; + } + } + }, + save: function() { + var response; + if (!/\S/.test(response = this.nodes.input.value)) { + return; + } + this.nodes.input.value = ''; + this.captchas.push({ + challenge: this.nodes.img.alt, + response: response, + timeout: this.timeout + }); + this.count(); + this.destroy(); + this.setup(false, true); + return $.set('captchas', this.captchas); + }, + clear: function() { + var captcha, i, k, len1, now, ref; + if (!this.captchas.length) { + return; + } + $.forceSync('captchas'); + now = Date.now(); + ref = this.captchas; + for (i = k = 0, len1 = ref.length; k < len1; i = ++k) { + captcha = ref[i]; + if (captcha.timeout > now) { + break; + } + } + if (!i) { + return; + } + this.captchas = this.captchas.slice(i); + this.count(); + return $.set('captchas', this.captchas); + }, + load: function() { + var challenge, challenge_image; + if ($('#captchaContainerAlt[class~="recaptcha_is_showing_audio"]')) { + this.nodes.img.src = this.blank; + return; + } + if (!this.nodes.challenge.firstChild) { + return; + } + if (!(challenge_image = $.id('recaptcha_challenge_image'))) { + return; + } + this.timeout = Date.now() + this.lifetime * $.SECOND - $.MINUTE; + challenge = this.nodes.challenge.firstChild.value; + this.nodes.img.alt = challenge; + this.nodes.img.src = challenge_image.src; + this.nodes.input.value = ''; + return this.clear(); + }, + count: function() { + var count, placeholder; + count = this.captchas ? this.captchas.length : 0; + placeholder = this.nodes.input.placeholder.replace(/\ \(.*\)$/, ''); + placeholder += (function() { + switch (count) { + case 0: + if (placeholder === 'Verification') { + return ' (Shift + Enter to cache)'; + } else { + return ''; + } + break; + case 1: + return ' (1 cached captcha)'; + default: + return " (" + count + " cached captchas)"; + } + })(); + this.nodes.input.placeholder = placeholder; + return this.nodes.input.alt = count; + }, + reload: function(focus) { + $.globalEval('if (window.Recaptcha.type === "image") {\n window.Recaptcha.reload();\n} else {\n window.Recaptcha.switch_type("image");\n}\nwindow.Recaptcha.should_focus = false;'); + if (focus) { + return this.nodes.input.focus(); + } + }, + keydown: function(e) { + if (e.keyCode === 8 && !this.nodes.input.value) { + this.reload(); + } else if (e.keyCode === 13 && e.shiftKey) { + this.save(); + } else { + return; + } + return e.preventDefault(); + } + }; + Captcha.v2 = { lifetime: 2 * $.MINUTE, init: function() { @@ -8083,9 +8607,19 @@ if (d.cookie.indexOf('pass_enabled=1') >= 0) { return; } - if (!(this.isEnabled = !!$.id('g-recaptcha'))) { + if (!(this.isEnabled = !!$('#g-recaptcha, #captchaContainerAlt'))) { return; } + if (this.noscript = Conf['Force Noscript Captcha'] || !$.hasClass(doc, 'js-enabled')) { + this.conn = new Connection(null, location.protocol + "//www.google.com", { + token: (function(_this) { + return function(token) { + return _this.save(true, token); + }; + })(this) + }); + $.addClass(QR.nodes.el, 'noscript-captcha'); + } this.captchas = []; $.get('captchas', [], function(arg) { var captchas; @@ -8105,9 +8639,19 @@ counter: counter }; this.count(); - $.addClass(QR.nodes.el, 'has-captcha'); + $.addClass(QR.nodes.el, 'has-captcha', 'captcha-v2'); $.after(QR.nodes.com.parentNode, root); $.on(counter, 'click', this.toggle.bind(this)); + $.on(counter, 'keydown', (function(_this) { + return function(e) { + if (Keybinds.keyCode(e) !== 'Space') { + return; + } + _this.toggle(); + e.preventDefault(); + return e.stopPropagation(); + }; + })(this)); return $.on(window, 'captcha:success', (function(_this) { return function() { return $.queueTask(function() { @@ -8116,9 +8660,26 @@ }; })(this)); }, + initFrame: function() { + var conn, ref, token; + if (token = (ref = $('.fbc-verification-token > textarea')) != null ? ref.value : void 0) { + conn = new Connection(window.parent, location.protocol + "//boards.4chan.org"); + return conn.send({ + token: token + }); + } + }, shouldFocus: false, timeouts: {}, postsCount: 0, + noscriptURL: function() { + var lang, url; + url = '//www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc'; + if (lang = Conf['captchaLanguage'].trim()) { + url += "&hl=" + (encodeURIComponent(lang)); + } + return url; + }, needed: function() { var captchaCount; captchaCount = this.captchas.length; @@ -8165,6 +8726,7 @@ if (this.nodes.container) { if (this.shouldFocus && (iframe = $('iframe', this.nodes.container))) { iframe.focus(); + QR.focus(); delete this.shouldFocus; } return; @@ -8177,6 +8739,22 @@ childList: true, subtree: true }); + if (this.noscript) { + return this.setupNoscript(); + } else { + return this.setupJS(); + } + }, + setupNoscript: function() { + var iframe; + iframe = $.el('iframe', { + id: 'qr-captcha-iframe', + src: this.noscriptURL() + }); + $.add(this.nodes.container, iframe); + return this.conn.target = iframe; + }, + setupJS: function() { return $.globalEval('(function() {\n function render() {\n var container = document.querySelector("#qr .captcha-container");\n container.dataset.widgetID = window.grecaptcha.render(container, {\n sitekey: \'6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc\',\n theme: document.documentElement.classList.contains(\'tomorrow\') ? \'dark\' : \'light\',\n callback: function(response) {\n window.dispatchEvent(new CustomEvent("captcha:success", {detail: response}));\n }\n });\n }\n if (window.grecaptcha) {\n render();\n } else {\n var cbNative = window.onRecaptchaLoaded;\n window.onRecaptchaLoaded = function() {\n render();\n cbNative();\n }\n }\n})();'); }, afterSetup: function(mutations) { @@ -8196,7 +8774,7 @@ } }, setupIFrame: function(iframe) { - this.setupTime = Date.now(); + Captcha.replace.iframe(iframe); $.addClass(QR.nodes.el, 'captcha-open'); if (QR.nodes.el.getBoundingClientRect().bottom > doc.clientHeight) { QR.nodes.el.style.top = null; @@ -8248,21 +8826,21 @@ if (captcha = this.captchas.shift()) { $.set('captchas', this.captchas); this.count(); - return captcha.response; + return captcha; } else { return null; } }, - save: function(pasted) { - var base1, focus, ref, ref1; + save: function(pasted, token) { + var base1, focus, ref; $.forceSync('captchas'); this.captchas.push({ - response: $('textarea', this.nodes.container).value, - timeout: (pasted ? this.setupTime : Date.now()) + this.lifetime + response: token || $('textarea', this.nodes.container).value, + timeout: Date.now() + this.lifetime }); $.set('captchas', this.captchas); this.count(); - focus = ((ref = d.activeElement) != null ? ref.nodeName : void 0) === 'IFRAME' && ((ref1 = d.activeElement.src) != null ? ref1.slice(0, 38) : void 0) === 'https://www.google.com/recaptcha/api2/'; + focus = ((ref = d.activeElement) != null ? ref.nodeName : void 0) === 'IFRAME' && /https?:\/\/www\.google\.com\/recaptcha\//.test(d.activeElement.src); if (this.needed()) { if (focus) { if (QR.cooldown.auto || Conf['Post on Captcha Completion']) { @@ -8318,7 +8896,11 @@ } }, reload: function() { - return $.globalEval('(function() {\n var container = document.querySelector("#qr .captcha-container");\n window.grecaptcha.reset(container.dataset.widgetID);\n})();'); + if (this.noscript) { + return $('iframe', this.nodes.container).src = this.noscriptURL(); + } else { + return $.globalEval('(function() {\n var container = document.querySelector("#qr .captcha-container");\n window.grecaptcha.reset(container.dataset.widgetID);\n})();'); + } } }; @@ -8346,70 +8928,62 @@ QR.cooldown = { seconds: 0, + delays: { + thread: 0, + reply: 0, + image: 0, + reply_intra: 0, + image_intra: 0, + deletion: 60, + thread_global: 300 + }, init: function() { - var delay, items, key, keys, m, ref, results, scope, type; + if (!(Conf['Quick Reply'] && Conf['Cooldown'])) { + return; + } + this.data = Conf['cooldowns']; + return $.sync('cooldowns', this.sync); + }, + setup: function() { + var delay, m, ref, type; if (!Conf['Cooldown']) { return; } - QR.cooldown.delays = (m = Get.scriptData().match(/\bcooldowns *= *({[^}]+})/)) ? JSON.parse(m[1]) : { - thread: 0, - reply: 0, - image: 0, - reply_intra: 0, - image_intra: 0 - }; + if (m = Get.scriptData().match(/\bcooldowns *= *({[^}]+})/)) { + $.extend(QR.cooldown.delays, JSON.parse(m[1])); + } QR.cooldown.maxDelay = 0; ref = QR.cooldown.delays; for (type in ref) { delay = ref[type]; - if (type !== 'thread') { + if (type !== 'thread' && type !== 'thread_global') { QR.cooldown.maxDelay = Math.max(QR.cooldown.maxDelay, delay); } } - QR.cooldown.delays['thread_global'] = 300; - keys = QR.cooldown.keys = { - local: "cooldown." + g.BOARD, - global: 'cooldown.global' - }; - items = {}; - for (scope in keys) { - key = keys[scope]; - items[key] = {}; - } - $.get(items, function(items) { - for (scope in keys) { - key = keys[scope]; - QR.cooldown[scope] = items[key]; - } - return QR.cooldown.start(); - }); - results = []; - for (scope in keys) { - key = keys[scope]; - results.push($.sync(key, QR.cooldown.sync(scope))); - } - return results; + QR.cooldown.isSetup = true; + return QR.cooldown.start(); }, start: function() { - if (QR.cooldown.isCounting || Object.keys(QR.cooldown.local).length + Object.keys(QR.cooldown.global).length === 0) { + var data; + data = QR.cooldown.data; + if (!(QR.cooldown.isSetup && !QR.cooldown.isCounting && Object.keys(data[g.BOARD.ID] || {}).length + Object.keys(data.global || {}).length > 0)) { return; } QR.cooldown.isCounting = true; return QR.cooldown.count(); }, - sync: function(scope) { - return function(cooldowns) { - QR.cooldown[scope] = cooldowns || {}; - return QR.cooldown.start(); - }; + sync: function(data) { + QR.cooldown.data = data || {}; + return QR.cooldown.start(); }, - add: function(start, threadID, postID) { - var boardID; + add: function(threadID, postID) { + var boardID, start; if (!Conf['Cooldown']) { return; } + start = Date.now(); boardID = g.BOARD.ID; - QR.cooldown.set('local', start, { + QR.cooldown.set(boardID, start, { threadID: threadID, postID: postID }); @@ -8429,23 +9003,35 @@ } cooldown = QR.cooldown.categorize(post); cooldown.delay = delay; - QR.cooldown.set('local', Date.now(), cooldown); + QR.cooldown.set(g.BOARD.ID, Date.now(), cooldown); return QR.cooldown.start(); }, "delete": function(post) { - var cooldown, id, ref; - if (!(Conf['Cooldown'] && g.BOARD.ID === post.board.ID)) { + var base1, cooldown, cooldowns, id, name1; + if (!Conf['Cooldown']) { return; } - $.forceSync(QR.cooldown.keys.local); - ref = QR.cooldown.local; - for (id in ref) { - cooldown = ref[id]; + $.forceSync('cooldowns'); + cooldowns = ((base1 = QR.cooldown.data)[name1 = post.board.ID] || (base1[name1] = {})); + for (id in cooldowns) { + cooldown = cooldowns[id]; if ((cooldown.delay == null) && cooldown.threadID === post.thread.ID && cooldown.postID === post.ID) { - delete QR.cooldown.local[id]; + delete cooldowns[id]; } } - return QR.cooldown.save('local'); + return QR.cooldown.save([post.board.ID]); + }, + secondsDeletion: function(post) { + var cooldown, cooldowns, seconds, start; + cooldowns = QR.cooldown.data[post.board.ID] || {}; + for (start in cooldowns) { + cooldown = cooldowns[start]; + if ((cooldown.delay == null) && cooldown.threadID === post.thread.ID && cooldown.postID === post.ID) { + seconds = QR.cooldown.delays.deletion - Math.floor((Date.now() - start) / $.SECOND); + return Math.max(seconds, 0); + } + } + return 0; }, categorize: function(post) { if (post.thread === 'new') { @@ -8460,41 +9046,48 @@ } }, set: function(scope, id, value) { - $.forceSync(QR.cooldown.keys[scope]); - QR.cooldown[scope][id] = value; - return $.set(QR.cooldown.keys[scope], QR.cooldown[scope]); + var base1, cooldowns; + $.forceSync('cooldowns'); + cooldowns = ((base1 = QR.cooldown.data)[scope] || (base1[scope] = {})); + cooldowns[id] = value; + return $.set('cooldowns', QR.cooldown.data); }, - save: function(scope) { - if (Object.keys(QR.cooldown[scope]).length) { - return $.set(QR.cooldown.keys[scope], QR.cooldown[scope]); - } else { - return $["delete"](QR.cooldown.keys[scope]); + save: function(scopes) { + var data, k, len1, scope; + data = QR.cooldown.data; + for (k = 0, len1 = scopes.length; k < len1; k++) { + scope = scopes[k]; + if (scope in data && !Object.keys(data[scope]).length) { + delete data[scope]; + } } + return $.set('cooldowns', data); }, count: function() { - var cooldown, elapsed, key, maxDelay, now, ref, ref1, ref2, save, scope, seconds, start, suffix, threadID, type, update; + var base1, cooldown, cooldowns, elapsed, k, len1, maxDelay, nCooldowns, now, ref, ref1, save, scope, seconds, start, suffix, threadID, type, update; + $.forceSync('cooldowns'); + save = []; + nCooldowns = 0; now = Date.now(); ref = QR.cooldown.categorize(QR.posts[0]), type = ref.type, threadID = ref.threadID; seconds = 0; - ref1 = QR.cooldown.keys; - for (scope in ref1) { - key = ref1[scope]; - $.forceSync(key); - save = false; - ref2 = QR.cooldown[scope]; - for (start in ref2) { - cooldown = ref2[start]; + ref1 = [g.BOARD.ID, 'global']; + for (k = 0, len1 = ref1.length; k < len1; k++) { + scope = ref1[k]; + cooldowns = ((base1 = QR.cooldown.data)[scope] || (base1[scope] = {})); + for (start in cooldowns) { + cooldown = cooldowns[start]; start = +start; elapsed = Math.floor((now - start) / $.SECOND); if (elapsed < 0) { - delete QR.cooldown[scope][start]; - save = true; + delete cooldowns[start]; + save.push(scope); continue; } if (cooldown.delay != null) { if (cooldown.delay <= elapsed) { - delete QR.cooldown[scope][start]; - save = true; + delete cooldowns[start]; + save.push(scope); } else if (cooldown.type === type && cooldown.threadID === threadID) { seconds = Math.max(seconds, cooldown.delay - elapsed); } @@ -8505,8 +9098,8 @@ maxDelay = Math.max(maxDelay, parseInt(Conf['customCooldown'], 10)); } if (maxDelay <= elapsed) { - delete QR.cooldown[scope][start]; - save = true; + delete cooldowns[start]; + save.push(scope); continue; } if ((type === 'thread') === (cooldown.threadID === cooldown.postID) && cooldown.boardID !== g.BOARD.ID) { @@ -8517,11 +9110,12 @@ seconds = Math.max(seconds, parseInt(Conf['customCooldown'], 10) - elapsed); } } - if (save) { - QR.cooldown.save(scope); - } + nCooldowns += Object.keys(cooldowns).length; } - if (Object.keys(QR.cooldown.local).length + Object.keys(QR.cooldown.global).length) { + if (save.length) { + QR.cooldown.save(save); + } + if (nCooldowns) { clearTimeout(QR.cooldown.timeout); QR.cooldown.timeout = setTimeout(QR.cooldown.count, $.SECOND); } else { @@ -8765,7 +9359,7 @@ if (!(node = QR.nodes[name])) { continue; } - node.value = this[name] || node.dataset["default"] || null; + node.value = this[name] || node.dataset["default"] || ''; } (this.thread !== 'new' ? $.addClass : $.rmClass)(QR.nodes.el, 'reply-to-thread'); this.showFileData(); @@ -8783,7 +9377,8 @@ switch (name) { case 'thread': (this.thread !== 'new' ? $.addClass : $.rmClass)(QR.nodes.el, 'reply-to-thread'); - return QR.status(); + QR.status(); + return this.updateFlashURL(); case 'com': this.nodes.span.textContent = this.com; QR.captcha.onPostChange(); @@ -8796,11 +9391,9 @@ if (!this.file) { return; } - this.file.newName = this.filename.replace(/[\/\\]/g, '-'); - if (!/\.(jpe?g|png|gif|pdf|swf|webm)$/i.test(this.filename)) { - this.file.newName += '.jpg'; - } - return this.updateFilename(); + this.saveFilename(); + this.updateFilename(); + return this.updateFlashURL(); case 'name': return QR.persona.set(this); } @@ -8892,9 +9485,16 @@ }; _Class.prototype.setFile = function(file1) { - var ref; + var ext, ref; this.file = file1; - this.filename = this.file.name; + if (Conf['Randomize Filename'] && g.BOARD.ID !== 'f') { + this.filename = "" + (Date.now() - Math.floor(Math.random() * 365 * $.DAY)); + if (ext = this.file.name.match(QR.validExtension)) { + this.filename += ext[0]; + } + } else { + this.filename = this.file.name; + } this.filesize = $.bytesToString(this.file.size); this.checkSize(); if (QR.spoiler) { @@ -8902,11 +9502,13 @@ } QR.captcha.onPostChange(); URL.revokeObjectURL(this.URL); + this.saveFilename(); if (this === QR.selected) { this.showFileData(); } else { this.updateFilename(); } + this.updateFlashURL(); this.nodes.el.style.backgroundImage = null; if (ref = this.file.type, indexOf.call(QR.mimeTypes, ref) < 0) { return this.fileError('Unsupported file type.'); @@ -8930,6 +9532,9 @@ var el, event, isVideo, onerror, onload; isVideo = /^video\//.test(this.file.type); el = $.el(isVideo ? 'video' : 'img'); + if (isVideo && !el.canPlayType(this.file.type)) { + return; + } event = isVideo ? 'loadeddata' : 'load'; onload = (function(_this) { return function() { @@ -9035,12 +9640,20 @@ this.nodes.label.hidden = true; } this.showFileData(); + this.updateFlashURL(); URL.revokeObjectURL(this.URL); return this.dismissErrors(function(error) { return $.hasClass(error, 'file-error'); }); }; + _Class.prototype.saveFilename = function() { + this.file.newName = (this.filename || '').replace(/[\/\\]/g, '-'); + if (!QR.validExtension.test(this.filename)) { + return this.file.newName += '.jpg'; + } + }; + _Class.prototype.updateFilename = function() { var long; long = this.filename + " (" + this.filesize + ")"; @@ -9062,6 +9675,36 @@ } }; + _Class.prototype.updateFlashURL = function() { + var oldURL, ref, url; + if (g.BOARD.ID !== 'f') { + return; + } + if (this.thread === 'new' || !this.file) { + url = ''; + } else { + url = this.file.newName; + if ((ref = $.engine) === 'blink' || ref === 'webkit') { + url = url.replace(/"/g, '%22'); + } + url = url.replace(/[\t\n\f\r \xa0\u200B\u2029\u3000]+/g, ' ').replace(/(^ | $)/g, '').replace(/\.[0-9A-Za-z]+$/, ''); + url = "https://i.4cdn.org/f/" + (encodeURIComponent(E(url))) + ".swf\n"; + } + oldURL = this.flashURL || ''; + if (url !== oldURL) { + this.com || (this.com = ''); + if (this.com.slice(0, oldURL.length) === oldURL) { + this.com = this.com.slice(oldURL.length); + } + this.com = (url + this.com) || null; + if (this === QR.selected) { + QR.nodes.com.value = this.com; + QR.characterCount(); + } + return this.flashURL = url; + } + }; + _Class.prototype.pasteText = function(file) { var reader; this.pasting = true; @@ -9172,10 +9815,7 @@ }); }, node: function() { - if (this.file) { - return; - } - return $.addClass(this.nodes.root, "noFile"); + return this.nodes.root.classList.toggle('noFile', !this.file); }, catalogNode: function() { var file, filename; @@ -9355,29 +9995,43 @@ Gallery.images.push(thumb); return $.add(Gallery.nodes.thumbs, thumb); }, + load: function(thumb, errorCB) { + var elType, ext, file; + ext = thumb.href.match(/\w*$/); + elType = { + 'webm': 'video', + 'pdf': 'iframe' + }[ext] || 'img'; + file = $.el(elType, { + title: thumb.title + }); + $.extend(file.dataset, thumb.dataset); + $.on(file, 'error', errorCB); + file.src = thumb.href; + return file; + }, open: function(thumb) { - var el, elType, file, name, newID, nodes, oldID, post, ref, slideshow; + var el, file, newID, nodes, oldID, post, ref; nodes = Gallery.nodes; - name = nodes.name; oldID = +nodes.current.dataset.id; newID = +thumb.dataset.id; - slideshow = Gallery.slideshow && (newID > oldID || (oldID === Gallery.images.length - 1 && newID === 0)); - if (el = $('.gal-highlight', nodes.thumbs)) { + if (el = Gallery.images[oldID]) { $.rmClass(el, 'gal-highlight'); } $.addClass(thumb, 'gal-highlight'); - elType = /\.webm$/.test(thumb.href) ? 'video' : /\.pdf$/.test(thumb.href) ? 'iframe' : 'img'; - $[elType === 'iframe' ? 'addClass' : 'rmClass'](doc, 'gal-pdf'); - file = $.el(elType, { - title: name.download = name.textContent = thumb.title - }); - $.extend(file.dataset, thumb.dataset); - $.on(file, 'error', Gallery.error); - file.src = name.href = thumb.href; + nodes.thumbs.scrollTop = thumb.offsetTop + thumb.offsetHeight / 2 - nodes.thumbs.clientHeight / 2; + if (((ref = Gallery.cache) != null ? ref.dataset.id : void 0) === '' + newID) { + file = Gallery.cache; + $.off(file, 'error', Gallery.cacheError); + $.on(file, 'error', Gallery.error); + } else { + file = Gallery.load(thumb, Gallery.error); + } $.off(nodes.current, 'error', Gallery.error); ImageCommon.pause(nodes.current); $.replace(nodes.current, file); - if (elType === 'video') { + nodes.current = file; + if (file.nodeName === 'VIDEO') { file.loop = true; Volume.setup(file); if (Conf['Autoplay']) { @@ -9387,19 +10041,22 @@ ImageCommon.addControls(file); } } + doc.classList.toggle('gal-pdf', file.nodeName === 'IFRAME'); + Gallery.cb.setHeight(); nodes.count.textContent = +thumb.dataset.id + 1; - nodes.current = file; + nodes.name.download = nodes.name.textContent = thumb.title; + nodes.name.href = thumb.href; nodes.frame.scrollTop = 0; nodes.next.focus(); - if (slideshow) { + if (Gallery.slideshow && (newID > oldID || (oldID === Gallery.images.length - 1 && newID === 0))) { Gallery.setupTimer(); } else { Gallery.cb.stop(); } - if (Conf['Scroll to Post'] && (post = (ref = (post = g.posts[file.dataset.post])) != null ? ref.nodes.root : void 0)) { - Header.scrollTo(post); + if (Conf['Scroll to Post'] && (post = g.posts[file.dataset.post])) { + Header.scrollTo(post.nodes.root); } - return nodes.thumbs.scrollTop = thumb.offsetTop + thumb.offsetHeight / 2 - nodes.thumbs.clientHeight / 2; + return Gallery.cache = Gallery.load(Gallery.images[(newID + 1) % Gallery.images.length], Gallery.cacheError); }, error: function() { var ref; @@ -9421,6 +10078,9 @@ }; })(this)); }, + cacheError: function() { + return delete Gallery.cache; + }, cleanupTimer: function() { var current; clearTimeout(Gallery.timeoutID); @@ -9582,6 +10242,11 @@ setFitness: function() { return (this.checked ? $.addClass : $.rmClass)(doc, "gal-" + (this.name.toLowerCase().replace(/\s+/g, '-'))); }, + setHeight: function() { + var current, dim, frame, height, ref, ref1, ref2, width; + ref = Gallery.nodes, current = ref.current, frame = ref.frame; + return current.style.minHeight = Conf['Stretch to Fit'] && (dim = (ref1 = g.posts[current.dataset.post]) != null ? ref1.file.dimensions : void 0) ? ((ref2 = dim.split('x'), width = ref2[0], height = ref2[1], ref2), Math.min(doc.clientHeight - 25, height / width * frame.clientWidth) + 'px') : null; + }, setDelay: function() { return Gallery.delay = +this.value; } @@ -9606,11 +10271,14 @@ var input, label; label = UI.checkbox(name, name); input = label.firstElementChild; - if (name === 'Fit Width' || name === 'Fit Height' || name === 'Hide Thumbnails') { + if (name === 'Hide Thumbnails' || name === 'Fit Width' || name === 'Fit Height') { $.on(input, 'change', Gallery.cb.setFitness); } $.event('change', null, input); $.on(input, 'change', $.cb.checked); + if (name === 'Hide Thumbnails' || name === 'Fit Width' || name === 'Fit Height' || name === 'Stretch to Fit') { + $.on(input, 'change', Gallery.cb.setHeight); + } return { el: label }; @@ -9619,7 +10287,7 @@ var delayInput, delayLabel, item, subEntries; subEntries = (function() { var k, len1, ref, results; - ref = ['Hide Thumbnails', 'Fit Width', 'Fit Height', 'Scroll to Post']; + ref = ['Hide Thumbnails', 'Fit Width', 'Fit Height', 'Stretch to Fit', 'Scroll to Post']; results = []; for (k = 0, len1 = ref.length; k < len1; k++) { item = ref[k]; @@ -9756,7 +10424,7 @@ $.off(video, 'mouseover', handler); t = new Date().getTime(); return $.asap((function() { - return (typeof chrome !== "undefined" && chrome !== null) || (video.readyState >= 3 && video.currentTime <= Math.max(0.1, video.duration - 0.5)) || new Date().getTime() >= t + 1000; + return $.engine !== 'gecko' || (video.readyState >= 3 && video.currentTime <= Math.max(0.1, video.duration - 0.5)) || new Date().getTime() >= t + 1000; }), function() { return video.controls = true; }); @@ -9936,9 +10604,7 @@ } $.rmClass(post.nodes.root, 'expanded-image'); $.rmClass(file.thumb, 'expanding'); - if (file.videoControls) { - $.rm(file.videoControls); - } + $.rm(file.videoControls); file.thumb.parentNode.href = file.url; file.thumb.parentNode.target = '_blank'; ref = ['isExpanding', 'isExpanded', 'videoControls', 'wasPlaying', 'scrollIntoView']; @@ -10053,7 +10719,7 @@ } if (file.scrollIntoView) { delete file.scrollIntoView; - imageBottom = Header.getBottomOf(file.fullImage) - 25; + imageBottom = Math.min(doc.clientHeight - file.fullImage.getBoundingClientRect().bottom - 25, Header.getBottomOf(file.fullImage)); if (imageBottom < 0) { window.scrollBy(0, Math.min(-imageBottom, Header.getTopOf(file.fullImage))); } @@ -10262,7 +10928,7 @@ return results; })(), width = ref1[0], height = ref1[1]; ref2 = this.getBoundingClientRect(), left = ref2.left, right = ref2.right; - padding = 16; + padding = 25; maxWidth = Math.max(left, doc.clientWidth - right); maxHeight = doc.clientHeight - padding; scale = Math.min(1, maxWidth / width, maxHeight / height); @@ -10399,7 +11065,7 @@ clone.file.thumb.preload = 'auto'; } thumb.preload = 'auto'; - if (typeof chrome === "undefined" || chrome === null) { + if ($.engine === 'gecko') { $.on(thumb, 'loadeddata', function() { return this.removeAttribute('poster'); }); @@ -10794,6 +11460,9 @@ }, wheel: function(e) { var el, volume; + if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) { + return; + } if (!(el = $('video:not([data-md5])', this))) { return; } @@ -11214,7 +11883,7 @@ } }, { key: 'TwitchTV', - regExp: /^\w+:\/\/(?:www\.)?twitch\.tv\/([^#\&\?]*)/, + regExp: /^\w+:\/\/(?:www\.)?twitch\.tv\/(\w[^#\&\?]*)/, httpOnly: true, style: "border: none; width: 640px; height: 360px;", el: function(a) { @@ -11250,11 +11919,14 @@ regExp: /^\w+:\/\/(?:www\.)?vocaroo\.com\/i\/(\w+)/, style: '', el: function(a) { - return $.el('audio', { + var el, type; + el = $.el('audio', { controls: true, - preload: 'auto', - src: "http://vocaroo.com/media_command.php?media=" + a.dataset.uid + "&command=download_ogg" + preload: 'auto' }); + type = el.canPlayType('audio/ogg') ? 'ogg' : 'mp3'; + el.src = "http://vocaroo.com/media_command.php?media=" + a.dataset.uid + "&command=download_" + type; + return el; } }, { key: 'Vimeo', @@ -11394,11 +12066,14 @@ regExp: /^\w+:\/\/(?:www\.)?clyp\.it\/(\w+)/, style: '', el: function(a) { - return $.el('audio', { + var el, type; + el = $.el('audio', { controls: true, - preload: 'auto', - src: "http://clyp.it/" + a.dataset.uid + ".ogg" + preload: 'auto' }); + type = el.canPlayType('audio/ogg') ? 'ogg' : 'mp3'; + el.src = "http://clyp.it/" + a.dataset.uid + "." + type; + return el; } }, { key: 'Loopvid-dummy', @@ -11511,7 +12186,7 @@ } return links; }, - regString: /((https?|mailto|git|magnet|ftp|irc):([a-z\d%\/?])|([-a-z\d]+[.])+(aero|asia|biz|cat|com|coop|dance|info|int|jobs|mobi|moe|museum|name|net|org|post|pro|tel|travel|xxx|edu|gov|mil|[a-z]{2})([:\/]|(?![^\s'"]))|[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}|[-\w\d.@]+@[a-z\d.-]+\.[a-z\d])/i, + regString: /((https?|mailto|git|magnet|ftp|irc):([a-z\d%\/?])|([-a-z\d]+[.])+(aero|asia|biz|cat|com|coop|dance|info|int|jobs|mobi|moe|museum|name|net|org|post|pro|tel|travel|xxx|xyz|edu|gov|mil|[a-z]{2})([:\/]|(?![^\s'"]))|[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}|[-\w\d.@]+@[a-z\d.-]+\.[a-z\d])/i, makeRange: function(startNode, endNode, startOffset, endOffset) { var range; range = document.createRange(); @@ -11631,6 +12306,7 @@ }; DeleteLink = { + auto: [{}, {}], init: function() { var div, fileEl, fileEntry, postEl, postEntry, ref; if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Menu'] && Conf['Delete Link'])) { @@ -11648,11 +12324,15 @@ className: 'delete-file', href: 'javascript:;' }); + this.nodes = { + menu: div.firstChild, + links: [postEl, fileEl] + }; postEntry = { el: postEl, open: function() { - postEl.textContent = 'Post'; - $.on(postEl, 'click', DeleteLink["delete"]); + postEl.textContent = DeleteLink.linkText(false); + $.on(postEl, 'click', DeleteLink.toggle); return true; } }; @@ -11664,8 +12344,8 @@ if (!file || file.isDead) { return false; } - fileEl.textContent = 'File'; - $.on(fileEl, 'click', DeleteLink["delete"]); + fileEl.textContent = DeleteLink.linkText(true); + $.on(fileEl, 'click', DeleteLink.toggle); return true; } }; @@ -11673,35 +12353,61 @@ el: div, order: 40, open: function(post) { - var node; if (post.isDead) { return false; } DeleteLink.post = post; - node = div.firstChild; - node.textContent = 'Delete'; - DeleteLink.cooldown.start(post, node); + DeleteLink.nodes.menu.textContent = DeleteLink.menuText(); + DeleteLink.cooldown.start(post); return true; }, subEntries: [postEntry, fileEntry] }); }, - "delete": function() { - var fileOnly, form, link, post; - post = DeleteLink.post; - if (DeleteLink.cooldown.counting === post) { - return; + menuText: function() { + var seconds; + if (seconds = DeleteLink.cooldown.seconds[DeleteLink.post.fullID]) { + return "Delete (" + seconds + ")"; + } else { + return 'Delete'; } - $.off(this, 'click', DeleteLink["delete"]); + }, + linkText: function(fileOnly) { + var text; + text = fileOnly ? 'File' : 'Post'; + if (DeleteLink.auto[+fileOnly][DeleteLink.post.fullID]) { + text = "Deleting " + (text.toLowerCase()) + "..."; + } + return text; + }, + toggle: function() { + var auto, fileOnly, post; + post = DeleteLink.post; fileOnly = $.hasClass(this, 'delete-file'); - this.textContent = "Deleting " + (fileOnly ? 'file' : 'post') + "..."; + auto = DeleteLink.auto[+fileOnly]; + if (auto[post.fullID]) { + delete auto[post.fullID]; + } else { + auto[post.fullID] = true; + } + this.textContent = DeleteLink.linkText(fileOnly); + if (!DeleteLink.cooldown.seconds[post.fullID]) { + return DeleteLink["delete"](post, fileOnly); + } + }, + "delete": function(post, fileOnly) { + var form, link; + link = DeleteLink.nodes.links[+fileOnly]; + delete DeleteLink.auto[+fileOnly][post.fullID]; + if (post.fullID === DeleteLink.post.fullID) { + $.off(link, 'click', DeleteLink.toggle); + } form = { mode: 'usrdel', onlyimgdel: fileOnly, pwd: QR.persona.getPassword() }; form[post.ID] = 'delete'; - link = this; return $.ajax($.id('delform').action.replace("/" + g.BOARD + "/", "/" + post.board + "/"), { responseType: 'document', withCredentials: true, @@ -11709,61 +12415,80 @@ return DeleteLink.load(link, post, fileOnly, this.response); }, onerror: function() { - return DeleteLink.error(link); + return DeleteLink.error(link, post); } }, { form: $.formData(form) }); }, load: function(link, post, fileOnly, resDoc) { - var msg, s; + var el, msg; + link.textContent = DeleteLink.linkText(fileOnly); if (resDoc.title === '4chan - Banned') { - s = 'Banned!'; + el = $.el('span', { + innerHTML: "You can't delete posts because you are banned." + }); + return new Notice('warning', el, 20); } else if (msg = resDoc.getElementById('errmsg')) { - s = msg.textContent; - $.on(link, 'click', DeleteLink["delete"]); + new Notice('warning', msg.textContent, 20); + if (post.fullID === DeleteLink.post.fullID) { + $.on(link, 'click', DeleteLink.toggle); + } + if (/\bwait\b/i.test(msg.textContent)) { + DeleteLink.cooldown.start(post, 5); + DeleteLink.auto[+fileOnly][post.fullID] = true; + return DeleteLink.nodes.links[+fileOnly].textContent = DeleteLink.linkText(fileOnly); + } } else { - if (resDoc.title === 'Updating index...') { + if (!fileOnly) { QR.cooldown["delete"](post); + } + if (resDoc.title === 'Updating index...') { (post.origin || post).kill(fileOnly); } - s = 'Deleted'; + if (post.fullID === DeleteLink.post.fullID) { + return link.textContent = 'Deleted'; + } } - return link.textContent = s; }, - error: function(link) { - link.textContent = 'Connection error, please retry.'; - return $.on(link, 'click', DeleteLink["delete"]); + error: function(link, post) { + new Notice('warning', 'Connection error, please retry.', 20); + if (post.fullID === DeleteLink.post.fullID) { + return $.on(link, 'click', DeleteLink.toggle); + } }, cooldown: { - start: function(post, node) { - var length, ref, seconds; - if (!((ref = QR.db) != null ? ref.get({ - boardID: post.board.ID, - threadID: post.thread.ID, - postID: post.ID - }) : void 0)) { - delete DeleteLink.cooldown.counting; + seconds: {}, + start: function(post, seconds) { + if (DeleteLink.cooldown.seconds[post.fullID] != null) { return; } - DeleteLink.cooldown.counting = post; - length = 60; - seconds = Math.ceil((length * $.SECOND - (Date.now() - post.info.date)) / $.SECOND); - return DeleteLink.cooldown.count(post, seconds, length, node); + if (seconds == null) { + seconds = QR.cooldown.secondsDeletion(post); + } + if (seconds > 0) { + DeleteLink.cooldown.seconds[post.fullID] = seconds; + return DeleteLink.cooldown.count(post); + } }, - count: function(post, seconds, length, node) { - if (DeleteLink.cooldown.counting !== post) { - return; + count: function(post) { + var fileOnly, k, len1, ref; + if (post.fullID === DeleteLink.post.fullID) { + DeleteLink.nodes.menu.textContent = DeleteLink.menuText(); } - if (!((0 <= seconds && seconds <= length))) { - if (DeleteLink.cooldown.counting === post) { - node.textContent = 'Delete'; - delete DeleteLink.cooldown.counting; + if (DeleteLink.cooldown.seconds[post.fullID] > 0) { + DeleteLink.cooldown.seconds[post.fullID]--; + setTimeout(DeleteLink.cooldown.count, 1000, post); + } else { + delete DeleteLink.cooldown.seconds[post.fullID]; + ref = [false, true]; + for (k = 0, len1 = ref.length; k < len1; k++) { + fileOnly = ref[k]; + if (DeleteLink.auto[+fileOnly][post.fullID]) { + DeleteLink["delete"](post, fileOnly); + } } - return; } - setTimeout(DeleteLink.cooldown.count, 1000, post, seconds - 1, length, node); - return node.textContent = "Delete (" + seconds + ")"; } } }; @@ -11856,7 +12581,7 @@ if (!(post.isDead || (post.thread.isDead && !post.thread.isArchived))) { a.textContent = 'Report this post'; ReportLink.url = "//sys.4chan.org/" + post.board + "/imgboard.php?mode=report&no=" + post; - ReportLink.height = 200; + ReportLink.height = 180; } else if (Conf['Archive Report']) { a.textContent = 'Report to archive'; ReportLink.url = Redirect.to('report', { @@ -12229,10 +12954,12 @@ ThreadUpdater.cb.interval.call($.el('input', { value: Conf['Interval'] })); - $.on(window, 'online offline', ThreadUpdater.cb.online); $.on(d, 'QRPostSuccessful', ThreadUpdater.cb.checkpost); $.on(d, 'visibilitychange', ThreadUpdater.cb.visibility); - return ThreadUpdater.setInterval(); + ThreadUpdater.setInterval(); + if (this.board.ID === 'f') { + return ThreadUpdater.update(); + } }, /* @@ -12241,20 +12968,6 @@ */ beep: 'data:audio/wav;base64,UklGRjQDAABXQVZFZm10IBAAAAABAAEAgD4AAIA+AAABAAgAc21wbDwAAABBAAADAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkYXRhzAIAAGMms8em0tleMV4zIpLVo8nhfSlcPR102Ki+5JspVEkdVtKzs+K1NEhUIT7DwKrcy0g6WygsrM2k1NpiLl0zIY/WpMrjgCdbPhxw2Kq+5Z4qUkkdU9K1s+K5NkVTITzBwqnczko3WikrqM+l1NxlLF0zIIvXpsnjgydZPhxs2ay95aIrUEkdUdC3suK8N0NUIjq+xKrcz002WioppdGm091pK1w0IIjYp8jkhydXPxxq2K295aUrTkoeTs65suK+OUFUIzi7xqrb0VA0WSoootKm0t5tKlo1H4TYqMfkiydWQBxm16+85actTEseS8y7seHAPD9TIza5yKra01QyWSson9On0d5wKVk2H4DYqcfkjidUQB1j1rG75KsvSkseScu8seDCPz1TJDW2yara1FYxWSwnm9Sn0N9zKVg2H33ZqsXkkihSQR1g1bK65K0wSEsfR8i+seDEQTxUJTOzy6rY1VowWC0mmNWoz993KVc3H3rYq8TklSlRQh1d1LS647AyR0wgRMbAsN/GRDpTJTKwzKrX1l4vVy4lldWpzt97KVY4IXbUr8LZljVPRCxhw7W3z6ZISkw1VK+4sMWvXEhSPk6buay9sm5JVkZNiLWqtrJ+TldNTnquqbCwilZXU1BwpKirrpNgWFhTaZmnpquZbFlbVmWOpaOonHZcXlljhaGhpZ1+YWBdYn2cn6GdhmdhYGN3lp2enIttY2Jjco+bnJuOdGZlZXCImJqakHpoZ2Zug5WYmZJ/bGlobX6RlpeSg3BqaW16jZSVkoZ0bGtteImSk5KIeG5tbnaFkJKRinxxbm91gY2QkIt/c3BwdH6Kj4+LgnZxcXR8iI2OjIR5c3J0e4WLjYuFe3VzdHmCioyLhn52dHR5gIiKioeAeHV1eH+GiYqHgXp2dnh9hIiJh4J8eHd4fIKHiIeDfXl4eHyBhoeHhH96eHmA', cb: { - online: function() { - if (ThreadUpdater.thread.isDead) { - return; - } - if (navigator.onLine) { - ThreadUpdater.set('status', ''); - } else { - ThreadUpdater.set('status', 'Offline', 'warning'); - } - if (Conf['Auto Update'] && !Conf['Ignore Offline Status']) { - ThreadUpdater.outdateCount = 0; - return ThreadUpdater.setInterval(); - } - }, checkpost: function(e) { if (e.detail.threadID !== ThreadUpdater.thread.ID) { return; @@ -12372,13 +13085,6 @@ ThreadUpdater.set('timer', 'Update'); return; } - if (!navigator.onLine) { - ThreadUpdater.set('status', 'Offline', 'warning'); - if (!Conf['Ignore Offline Status']) { - ThreadUpdater.set('timer', ''); - return; - } - } interval = ThreadUpdater.interval; if (Conf['Optional Increase']) { limit = d.hidden ? 10 : 5; @@ -12443,7 +13149,7 @@ return new Notice('info', "The thread is " + change + ".", 30); }, parse: function(req) { - var ID, OP, board, deletedFiles, deletedPosts, files, firstPost, index, ipCountEl, k, lastPost, len1, len2, len3, len4, newPosts, node, post, postObject, postObjects, posts, q, ref, ref1, ref2, ref3, ref4, ref5, scroll, thread, u, unreadCount, w; + var ID, OP, board, deletedFiles, deletedPosts, files, firstPost, index, ipCountEl, k, lastPost, len1, len2, len3, len4, newPosts, node, post, postObject, postObjects, posts, q, ref, ref1, ref2, ref3, ref4, ref5, scroll, thread, u, unreadCount, v; postObjects = req.response.posts; OP = postObjects[0]; thread = ThreadUpdater.thread; @@ -12472,6 +13178,12 @@ if (postObject.fsize) { files.push(ID); } + if (board.ID === 'f' && postObject.fsize && (post = thread.posts[ID]) && !post.file) { + node = Build.postFromObject(postObject, board.ID); + $.after(post.nodes.info, $('.file', node)); + post.parseFile(); + Post.callbacks.execute(post, ['Filter', 'File Info Formatting', 'Fappe Tyme', 'Sauce']); + } if (ID <= lastPost) { continue; } @@ -12525,8 +13237,8 @@ } scroll = Conf['Auto Scroll'] && ThreadUpdater.scrollBG() && ThreadUpdater.root.getBoundingClientRect().bottom - doc.clientHeight < 25; firstPost = null; - for (w = 0, len4 = posts.length; w < len4; w++) { - post = posts[w]; + for (v = 0, len4 = posts.length; v < len4; v++) { + post = posts[v]; if (!QuoteThreading.insert(post)) { firstPost || (firstPost = post.nodes.root); $.add(ThreadUpdater.root, post.nodes.root); @@ -13476,19 +14188,21 @@ if (!Header.areNotificationsEnabled) { return; } - notif = new Notification(post.info.nameBlock + " replied to you", { - body: post.info.commentDisplay, - icon: Favicon.logo - }); - notif.onclick = function() { - Header.scrollToIfNeeded(post.nodes.root, true); - return window.focus(); - }; - return notif.onshow = function() { - return setTimeout(function() { - return notif.close(); - }, 7 * $.SECOND); - }; + try { + notif = new Notification(post.info.nameBlock + " replied to you", { + body: post.info.commentDisplay, + icon: Favicon.logo + }); + notif.onclick = function() { + Header.scrollToIfNeeded(post.nodes.root, true); + return window.focus(); + }; + return notif.onshow = function() { + return setTimeout(function() { + return notif.close(); + }, 7 * $.SECOND); + }; + } catch (_error) {} }, onUpdate: function(e) { if (!e.detail[404]) { @@ -13607,9 +14321,7 @@ if (Conf['Unread Favicon']) { isDead = Unread.thread.isDead; Favicon.el.href = countQuotingYou ? Favicon[isDead ? 'unreadDeadY' : 'unreadY'] : count ? Favicon[isDead ? 'unreadDead' : 'unread'] : Favicon[isDead ? 'dead' : 'default']; - if (typeof chrome === "undefined" || chrome === null) { - return $.add(d.head, Favicon.el); - } + return $.add(d.head, Favicon.el); } } }; @@ -13664,7 +14376,7 @@ } return Redirect.data = o; }, - archives: [{"uid":0,"name":"Moe","domain":"archive.moe","http":false,"https":true,"software":"foolfuuka","boards":["a","an","biz","c","co","diy","fit","gd","gif","h","i","int","jp","k","m","mlp","out","po","qa","r9k","s4s","sci","tg","tv","u","v","vg","vp","vr","wsg"],"files":["a","biz","c","co","diy","fit","gd","h","i","jp","k","m","mlp","po","qa","r9k","s4s","sci","tg","u","v","vg","vp","vr","wsg"]},{"uid":3,"name":"4plebs Archive","domain":"archive.4plebs.org","http":true,"https":true,"software":"foolfuuka","boards":["adv","f","hr","o","pol","s4s","tg","trv","tv","x"],"files":["adv","f","hr","o","pol","s4s","tg","trv","tv","x"]},{"uid":4,"name":"Nyafuu Archive","domain":"archive.nyafuu.org","http":true,"https":true,"software":"foolfuuka","boards":["c","e","w","wg"],"files":["c","e","w","wg"]},{"uid":5,"name":"Love is Over","domain":"archive.loveisover.me","http":true,"https":true,"software":"foolfuuka","boards":["c","d","e","i","lgbt","t","u"],"files":["c","d","e","i","lgbt","t","u"]},{"uid":8,"name":"Rebecca Black Tech","domain":"rbt.asia","http":false,"https":true,"software":"fuuka","boards":["cgl","g","mu","qa","w"],"files":["cgl","g","mu","qa","w"]},{"uid":10,"name":"warosu","domain":"warosu.org","http":false,"https":true,"software":"fuuka","boards":["3","biz","cgl","ck","diy","fa","g","ic","jp","lit","sci","tg","vr"],"files":["3","biz","cgl","ck","diy","fa","g","ic","jp","lit","sci","tg","vr"]},{"uid":15,"name":"fgts","domain":"fgts.jp","http":true,"https":true,"software":"foolfuuka","boards":["asp","b","cm","h","hc","hm","n","p","qa","r","s","soc","toy","y"],"files":["asp","b","cm","h","hc","hm","n","p","qa","r","s","soc","toy","y"]},{"uid":22,"name":"not4plebs","domain":"totally.not4plebs.org","http":true,"https":true,"software":"foolfuuka","boards":["sp"],"files":["sp"]},{"uid":23,"name":"DesuStorage","domain":"archive.desustorage.org","http":false,"https":true,"software":"foolfuuka","boards":["mlp","qa"],"files":["mlp","qa"]}], + archives: [{"uid":0,"name":"Moe","domain":"archive.moe","http":false,"https":true,"software":"foolfuuka","boards":["a","an","biz","c","co","diy","fit","gd","gif","h","i","int","jp","k","m","mlp","out","po","qa","r9k","s4s","sci","tg","tv","u","v","vg","vp","vr","wsg"],"files":["a","an","biz","c","co","diy","fit","gd","gif","h","i","int","jp","k","m","mlp","out","po","qa","r9k","s4s","sci","tg","u","v","vg","vp","vr","wsg"]},{"uid":3,"name":"4plebs Archive","domain":"archive.4plebs.org","http":true,"https":true,"software":"foolfuuka","boards":["adv","f","hr","o","pol","s4s","tg","trv","tv","x"],"files":["adv","f","hr","o","pol","s4s","tg","trv","tv","x"]},{"uid":4,"name":"Nyafuu Archive","domain":"archive.nyafuu.org","http":true,"https":true,"software":"foolfuuka","boards":["c","e","w","wg"],"files":["c","e","w","wg"]},{"uid":5,"name":"Love is Over","domain":"archive.loveisover.me","http":true,"https":true,"software":"foolfuuka","boards":["c","d","e","i","lgbt","t","u"],"files":["c","d","e","i","lgbt","t","u"]},{"uid":8,"name":"Rebecca Black Tech","domain":"rbt.asia","http":false,"https":true,"software":"fuuka","boards":["cgl","g","mu","qa","w"],"files":["cgl","g","mu","qa","w"]},{"uid":10,"name":"warosu","domain":"warosu.org","http":false,"https":true,"software":"fuuka","boards":["3","biz","cgl","ck","diy","fa","g","ic","jp","lit","sci","tg","vr"],"files":["3","biz","cgl","ck","diy","fa","g","ic","jp","lit","sci","tg","vr"]},{"uid":15,"name":"fgts","domain":"fgts.jp","http":true,"https":true,"software":"foolfuuka","boards":["asp","b","cm","h","hc","hm","n","p","qa","r","s","soc","toy","y"],"files":["asp","b","cm","h","hc","hm","n","p","qa","r","s","soc","toy","y"]},{"uid":22,"name":"not4plebs","domain":"totally.not4plebs.org","http":true,"https":true,"software":"foolfuuka","boards":["sp"],"files":["sp"]},{"uid":23,"name":"DesuStorage","domain":"archive.desustorage.org","http":false,"https":true,"software":"foolfuuka","boards":["mlp","qa"],"files":["mlp","qa"]},{"uid":24,"name":"fireden.net","domain":"boards.fireden.net","http":false,"https":true,"software":"foolfuuka","boards":["cm","ic","vg","y"],"files":["cm","ic","vg","y"]}], to: function(dest, data) { var archive; archive = (dest === 'search' || dest === 'board' ? Redirect.data.thread : Redirect.data[dest])[data.boardID]; @@ -13735,9 +14447,14 @@ securityCheck: function(URL) { return /^https:\/\//.test(URL) || location.protocol === 'http:' || Conf['Except Archives from Encryption']; }, - navigate: function(URL, alternative) { - if (URL && (Redirect.securityCheck(URL) || confirm("Redirect to " + URL + "?\n\nYour connection will not be encrypted."))) { - return location.replace(URL); + navigate: function(dest, data, alternative) { + var url; + if (!Redirect.data) { + Redirect.init(); + } + url = Redirect.to(dest, data); + if (url && (Redirect.securityCheck(url) || confirm("Redirect to " + url + "?\n\nYour connection will not be encrypted."))) { + return location.replace(url); } else if (alternative) { return location.replace(alternative); } @@ -13869,17 +14586,19 @@ for (k = 0, len1 = ref.length; k < len1; k++) { iframe = ref[k]; iframe.src = iframe.src.replace(/\?autoplay=1&?/, '?').replace('&autoplay=1', ''); + $.addClass(iframe, 'autoplay-removed'); } ref1 = $$('object[data*="youtube"][data*="autoplay=1"]', root); for (q = 0, len2 = ref1.length; q < len2; q++) { object = ref1[q]; object.data = object.data.replace(/\?autoplay=1&?/, '?').replace('&autoplay=1', ''); + $.addClass(object, 'autoplay-removed'); } } }; Banner = { - banners: ["0.jpg","1.jpg","2.jpg","4.jpg","6.jpg","7.jpg","8.jpg","9.jpg","10.jpg","11.jpg","12.jpg","13.jpg","14.jpg","16.jpg","17.jpg","18.jpg","19.jpg","20.jpg","21.jpg","22.jpg","24.jpg","25.jpg","26.jpg","28.jpg","29.jpg","33.jpg","38.jpg","39.jpg","43.jpg","44.jpg","45.jpg","46.jpg","47.jpg","52.jpg","54.jpg","57.jpg","59.jpg","60.jpg","61.jpg","64.jpg","66.jpg","67.jpg","69.jpg","71.jpg","72.jpg","76.jpg","77.jpg","81.jpg","82.jpg","83.jpg","84.jpg","88.jpg","90.jpg","91.jpg","96.jpg","98.jpg","99.jpg","100.jpg","104.jpg","106.jpg","116.jpg","119.jpg","137.jpg","140.jpg","148.jpg","149.jpg","150.jpg","154.jpg","156.jpg","157.jpg","158.jpg","159.jpg","161.jpg","162.jpg","164.jpg","165.jpg","166.jpg","167.jpg","168.jpg","169.jpg","170.jpg","171.jpg","172.jpg","173.jpg","174.jpg","175.jpg","176.jpg","178.jpg","179.jpg","180.jpg","181.jpg","182.jpg","183.jpg","186.jpg","189.jpg","190.jpg","192.jpg","193.jpg","194.jpg","197.jpg","198.jpg","200.jpg","201.jpg","202.jpg","203.jpg","205.jpg","206.jpg","207.jpg","208.jpg","210.jpg","213.jpg","214.jpg","215.jpg","216.jpg","218.jpg","219.jpg","220.jpg","221.jpg","222.jpg","223.jpg","224.jpg","227.jpg","0.png","1.png","2.png","3.png","5.png","6.png","9.png","10.png","11.png","12.png","14.png","16.png","19.png","20.png","21.png","22.png","23.png","24.png","26.png","27.png","28.png","29.png","30.png","31.png","32.png","33.png","34.png","37.png","39.png","40.png","41.png","42.png","43.png","44.png","45.png","48.png","49.png","50.png","51.png","52.png","53.png","57.png","58.png","59.png","64.png","66.png","67.png","68.png","69.png","70.png","71.png","72.png","76.png","78.png","81.png","82.png","85.png","86.png","87.png","89.png","95.png","98.png","100.png","101.png","102.png","105.png","106.png","107.png","109.png","110.png","111.png","112.png","113.png","114.png","115.png","116.png","118.png","119.png","120.png","121.png","122.png","123.png","126.png","128.png","130.png","134.png","136.png","138.png","139.png","140.png","142.png","145.png","146.png","149.png","150.png","151.png","152.png","153.png","154.png","155.png","156.png","157.png","158.png","159.png","160.png","163.png","164.png","165.png","166.png","167.png","168.png","169.png","170.png","171.png","172.png","173.png","174.png","178.png","179.png","180.png","181.png","182.png","184.png","186.png","188.png","190.png","192.png","193.png","194.png","195.png","196.png","197.png","198.png","200.png","202.png","203.png","205.png","206.png","207.png","209.png","212.png","213.png","214.png","216.png","217.png","218.png","219.png","220.png","221.png","222.png","223.png","224.png","225.png","226.png","229.png","231.png","232.png","233.png","234.png","235.png","237.png","238.png","239.png","240.png","241.png","242.png","244.png","245.png","246.png","247.png","248.png","249.png","250.png","253.png","254.png","255.png","257.png","258.png","259.png","260.png","262.png","268.png","0.gif","1.gif","2.gif","3.gif","4.gif","5.gif","6.gif","7.gif","8.gif","9.gif","10.gif","12.gif","13.gif","14.gif","15.gif","16.gif","18.gif","19.gif","20.gif","21.gif","22.gif","23.gif","24.gif","28.gif","29.gif","30.gif","33.gif","34.gif","35.gif","36.gif","37.gif","39.gif","40.gif","42.gif","44.gif","45.gif","46.gif","48.gif","50.gif","52.gif","54.gif","55.gif","57.gif","58.gif","59.gif","60.gif","61.gif","62.gif","63.gif","64.gif","66.gif","67.gif","68.gif","69.gif","70.gif","72.gif","73.gif","75.gif","76.gif","77.gif","78.gif","80.gif","81.gif","82.gif","83.gif","86.gif","87.gif","88.gif","92.gif","93.gif","94.gif","95.gif","96.gif","97.gif","98.gif","99.gif","100.gif","101.gif","102.gif","103.gif","104.gif","105.gif","106.gif","108.gif","109.gif","110.gif","111.gif","112.gif","113.gif","115.gif","116.gif","117.gif","118.gif","119.gif","120.gif","122.gif","123.gif","124.gif","127.gif","129.gif","130.gif","131.gif","134.gif","135.gif","136.gif","138.gif","139.gif","141.gif","144.gif","146.gif","148.gif","149.gif","153.gif","154.gif","155.gif","157.gif","158.gif","159.gif","160.gif","161.gif","162.gif","164.gif","166.gif","167.gif","168.gif","169.gif","170.gif","171.gif","172.gif","173.gif","174.gif","175.gif","176.gif","177.gif","178.gif","181.gif","182.gif","183.gif","185.gif","186.gif","187.gif","188.gif","189.gif","190.gif","191.gif","192.gif","193.gif","195.gif","196.gif","197.gif","200.gif","201.gif","202.gif","203.gif","204.gif","205.gif","206.gif","207.gif","208.gif","209.gif","210.gif","211.gif","212.gif","213.gif","214.gif","215.gif","216.gif","217.gif","219.gif","220.gif","221.gif","222.gif","224.gif","225.gif","226.gif","227.gif","228.gif","230.gif","232.gif","233.gif","234.gif","235.gif","238.gif","240.gif","241.gif","243.gif","244.gif","245.gif","246.gif","247.gif","249.gif","250.gif","251.gif","253.gif"], + banners: ["0.jpg","1.jpg","2.jpg","4.jpg","6.jpg","7.jpg","8.jpg","9.jpg","10.jpg","11.jpg","12.jpg","13.jpg","14.jpg","16.jpg","17.jpg","18.jpg","19.jpg","20.jpg","21.jpg","22.jpg","24.jpg","25.jpg","26.jpg","28.jpg","29.jpg","33.jpg","38.jpg","39.jpg","43.jpg","44.jpg","45.jpg","46.jpg","47.jpg","52.jpg","54.jpg","57.jpg","59.jpg","60.jpg","61.jpg","64.jpg","66.jpg","67.jpg","69.jpg","71.jpg","72.jpg","76.jpg","77.jpg","81.jpg","82.jpg","83.jpg","84.jpg","88.jpg","90.jpg","91.jpg","96.jpg","98.jpg","99.jpg","100.jpg","104.jpg","106.jpg","116.jpg","119.jpg","137.jpg","140.jpg","148.jpg","149.jpg","150.jpg","154.jpg","156.jpg","157.jpg","158.jpg","159.jpg","161.jpg","162.jpg","164.jpg","165.jpg","166.jpg","167.jpg","168.jpg","169.jpg","170.jpg","171.jpg","172.jpg","173.jpg","174.jpg","175.jpg","176.jpg","178.jpg","179.jpg","180.jpg","181.jpg","182.jpg","183.jpg","186.jpg","189.jpg","190.jpg","192.jpg","193.jpg","194.jpg","197.jpg","198.jpg","200.jpg","201.jpg","202.jpg","203.jpg","205.jpg","206.jpg","207.jpg","208.jpg","210.jpg","213.jpg","214.jpg","215.jpg","216.jpg","218.jpg","219.jpg","220.jpg","221.jpg","222.jpg","223.jpg","224.jpg","227.jpg","0.png","1.png","2.png","3.png","5.png","6.png","9.png","10.png","11.png","12.png","14.png","16.png","19.png","20.png","21.png","22.png","23.png","24.png","26.png","27.png","28.png","29.png","30.png","31.png","32.png","33.png","34.png","37.png","39.png","40.png","41.png","42.png","43.png","44.png","45.png","48.png","49.png","50.png","51.png","52.png","53.png","57.png","58.png","59.png","64.png","66.png","67.png","68.png","69.png","70.png","71.png","72.png","76.png","78.png","81.png","82.png","85.png","86.png","87.png","89.png","95.png","98.png","100.png","101.png","102.png","105.png","106.png","107.png","109.png","110.png","111.png","112.png","113.png","114.png","115.png","116.png","118.png","119.png","120.png","121.png","122.png","123.png","126.png","128.png","130.png","134.png","136.png","138.png","139.png","140.png","142.png","145.png","146.png","149.png","150.png","151.png","152.png","153.png","154.png","155.png","156.png","157.png","158.png","159.png","160.png","163.png","164.png","165.png","166.png","167.png","168.png","169.png","170.png","171.png","172.png","173.png","174.png","178.png","179.png","180.png","181.png","182.png","184.png","186.png","188.png","190.png","192.png","193.png","194.png","195.png","196.png","197.png","198.png","200.png","202.png","203.png","205.png","206.png","207.png","209.png","212.png","213.png","214.png","216.png","217.png","218.png","219.png","220.png","221.png","222.png","223.png","224.png","225.png","226.png","229.png","231.png","232.png","233.png","234.png","235.png","237.png","238.png","239.png","240.png","241.png","242.png","244.png","245.png","246.png","247.png","248.png","249.png","250.png","253.png","254.png","255.png","256.png","257.png","258.png","259.png","260.png","262.png","268.png","0.gif","1.gif","2.gif","3.gif","4.gif","5.gif","6.gif","7.gif","8.gif","9.gif","10.gif","12.gif","13.gif","14.gif","15.gif","16.gif","18.gif","19.gif","20.gif","21.gif","22.gif","23.gif","24.gif","28.gif","29.gif","30.gif","33.gif","34.gif","35.gif","36.gif","37.gif","39.gif","40.gif","42.gif","44.gif","45.gif","46.gif","48.gif","50.gif","52.gif","54.gif","55.gif","57.gif","58.gif","59.gif","60.gif","61.gif","63.gif","64.gif","66.gif","67.gif","68.gif","69.gif","70.gif","72.gif","73.gif","75.gif","76.gif","77.gif","78.gif","80.gif","81.gif","82.gif","83.gif","86.gif","87.gif","88.gif","92.gif","93.gif","94.gif","95.gif","96.gif","97.gif","98.gif","99.gif","100.gif","101.gif","102.gif","103.gif","104.gif","105.gif","106.gif","108.gif","109.gif","110.gif","111.gif","112.gif","113.gif","115.gif","116.gif","117.gif","118.gif","119.gif","120.gif","122.gif","123.gif","124.gif","127.gif","129.gif","130.gif","131.gif","134.gif","135.gif","136.gif","138.gif","139.gif","141.gif","144.gif","146.gif","148.gif","149.gif","153.gif","154.gif","155.gif","157.gif","158.gif","159.gif","160.gif","161.gif","162.gif","164.gif","166.gif","167.gif","168.gif","169.gif","170.gif","171.gif","172.gif","173.gif","174.gif","175.gif","176.gif","177.gif","178.gif","181.gif","182.gif","183.gif","185.gif","186.gif","187.gif","188.gif","189.gif","190.gif","191.gif","192.gif","193.gif","195.gif","196.gif","197.gif","200.gif","201.gif","202.gif","203.gif","204.gif","205.gif","206.gif","207.gif","208.gif","209.gif","210.gif","211.gif","212.gif","213.gif","214.gif","215.gif","216.gif","217.gif","219.gif","220.gif","221.gif","222.gif","224.gif","225.gif","226.gif","227.gif","228.gif","230.gif","232.gif","233.gif","234.gif","235.gif","238.gif","240.gif","241.gif","243.gif","244.gif","245.gif","246.gif","247.gif","249.gif","250.gif","251.gif","253.gif"], init: function() { if (Conf['Custom Board Titles']) { this.db = new DataBoard('customTitles', null, true); @@ -14757,7 +15476,7 @@ if (!Conf['Keybinds']) { return; } - for (hotkey in Conf.hotkeys) { + for (hotkey in Config.hotkeys) { $.sync(hotkey, Keybinds.sync); } init = function() { @@ -15091,6 +15810,8 @@ return 'Enter'; case 27: return 'Esc'; + case 32: + return 'Space'; case 37: return 'Left'; case 38: @@ -15099,9 +15820,15 @@ return 'Right'; case 40: return 'Down'; + case 188: + return 'Comma'; + case 190: + return 'Period'; default: if ((48 <= kc && kc <= 57) || (65 <= kc && kc <= 90)) { return String.fromCharCode(kc).toLowerCase(); + } else if ((96 <= kc && kc <= 105)) { + return String.fromCharCode(kc - 48).toLowerCase(); } else { return null; } @@ -15461,12 +16188,18 @@ }; Report = { - css: ':root:not(.js-enabled) #g-recaptcha {\n height: auto;\n}', + css: ":root:not(.js-enabled) #captchaContainerAlt {\n" + +" height: auto;\n" + +"}\n" + +"noscript > iframe, #recaptcha_challenge_field {\n" + +" width: 500px;\n" + +"}", init: function() { var match; if (!(/\bmode=report\b/.test(location.search) && (match = location.search.match(/\bno=(\d+)/)))) { return; } + Captcha.replace.init(); this.postID = +match[1]; return $.ready(this.ready); }, @@ -15475,7 +16208,7 @@ if (Conf['Archive Report']) { Report.archive(); } - if ($.hasClass(doc, 'js-enabled')) { + if (Conf['Use Recaptcha v2 in Reports'] && $.hasClass(doc, 'js-enabled')) { return new MutationObserver(function() { return Report.fit('.gc-bubbleDefault'); }).observe(d.body, { @@ -15526,8 +16259,7 @@ $.add(d.body, [$.tn(' ['), link, $.tn(']')]); if (types = $.id('reportTypes')) { return $.on(types, 'change', function(e) { - var ref; - return $('form').action = (ref = e.target.value) === 'illegal' || ref === 'spam' ? '#redirect' : ''; + return $('form').action = e.target.value === 'illegal' ? '#redirect' : ''; }); } } @@ -15675,7 +16407,7 @@ className: 'dialog' }); $.extend(dialog, { - innerHTML: "
" + innerHTML: "
" }); Settings.overlay = overlay = $.el('div', { id: 'overlay' @@ -15765,6 +16497,9 @@ div = $.el('div', { innerHTML: ": " + E(description) + "" }); + if ($.engine !== 'gecko' && key === 'Remember QR Size') { + div.hidden = true; + } input = $('input', div); $.on(input, 'change', function() { this.parentNode.parentNode.dataset.checked = this.checked; @@ -16031,7 +16766,7 @@ return; } $.extend(div, { - innerHTML: "
Filter is disabled.

Use regular expressions, one per line.
Lines starting with a # will be ignored.
For example, /weeaboo/i will filter posts containing the string \`weeaboo\`, case-insensitive.
MD5 filtering uses exact string matching, not regular expressions.

Note: If you're using the native catalog rather than 4chan X's catalog, 4chan X's filters do not apply there.
The native catalog has its own separate filter list.

" + innerHTML: "
Filter is disabled.

Use regular expressions, one per line.
Lines starting with a # will be ignored.
For example, /weeaboo/i will filter posts containing the string \`weeaboo\`, case-insensitive.
MD5 filtering uses exact string matching, not regular expressions.

Note: If you're using the native catalog rather than 4chan X's catalog, 4chan X's filters do not apply there.
The native catalog has its own separate filter list.

" }); return $('.warning', div).hidden = Conf['Filter']; }, @@ -16048,9 +16783,9 @@ return $.on(ta, 'change', $.cb.value); }, advanced: function(section) { - var aa, applyCSS, archBoards, boardID, boardOptions, boardSelect, boards, customCSS, files, i, input, inputs, interval, item, items, k, len1, len2, len3, len4, len5, len6, len7, name, o, q, ref, ref1, ref2, ref3, ref4, ref5, ref6, row, rows, software, ta, table, u, w, warning, withCredentials, y, z; + var applyCSS, archBoards, boardID, boardOptions, boardSelect, boards, customCSS, files, i, input, inputs, interval, item, items, k, len1, len2, len3, len4, len5, len6, len7, name, o, q, ref, ref1, ref2, ref3, ref4, ref5, ref6, row, rows, software, ta, table, u, v, w, warning, withCredentials, y, z; $.extend(section, { - innerHTML: "
Archiver
404 Redirect is disabled.
Thread redirectionPost fetchingFile redirection
Custom Board Navigation
New lines will be converted into spaces.

In the following examples for /g/, g can be changed to a different board ID (a, b, etc...), the current board (current), or the Twitter link (@).
Board link: g
Archive link: g-archive
Internal archive link: g-expired
Title link: g-title
Board link (Replace with title when on that board): g-replace
Full text link: g-full
Custom text link: g-text:"Install Gentoo"
Index-only link: g-index
Catalog-only link: g-catalog
External link: external-text:"Google","http://www.google.com"
Combinations are possible: g-index-text:"Technology Index"
Full board list toggle: toggle-all

[ toggle-all ] [current-title] [g-title / a-title / jp-title] [x / wsg / h] [t-text:"Piracy"]
will give you
[ + ] [Technology] [Technology / Anime & Manga / Otaku Culture] [x / wsg / h] [Piracy]
if you are on /g/.
Time Formatting is disabled.
:
Supported format specifiers:
Day: %a, %A, %d, %e
Month: %m, %b, %B
Year: %y, %Y
Hour: %k, %H, %l, %I, %p, %P
Minute: %M
Second: %S
Literal %: %%
Quote Backlinks formatting is disabled.
:
File Info Formatting is disabled.
:
Link: %l (truncated), %L (untruncated), %T (4chan filename)
Filename: %n (truncated), %N (untruncated), %t (4chan filename)
Spoiler indicator: %p
Size: %B (Bytes), %K (KB), %M (MB), %s (4chan default)
Resolution: %r (Displays 'PDF' for PDF files)
Tag: %g
Literal %: %%
Quick Reply Personas

One item per line.
Items will be added in the relevant input's auto-completion list.
Password items will always be used, since there is no password input.
Lines starting with a # will be ignored.

Unread Favicon is disabled.
Thread Updater is disabled.
Interval: seconds
Custom Cooldown Time
Seconds:
" + innerHTML: "
Archiver
404 Redirect is disabled.
Thread redirectionPost fetchingFile redirection
Captcha Language
Choose from list of language codes. Leave blank to autoselect.
Custom Board Navigation
New lines will be converted into spaces.

In the following examples for /g/, g can be changed to a different board ID (a, b, etc...), the current board (current), or the Twitter link (@).
Board link: g
Archive link: g-archive
Internal archive link: g-expired
Title link: g-title
Board link (Replace with title when on that board): g-replace
Full text link: g-full
Custom text link: g-text:"Install Gentoo"
Index-only link: g-index
Catalog-only link: g-catalog
External link: external-text:"Google","http://www.google.com"
Combinations are possible: g-index-text:"Technology Index"
Full board list toggle: toggle-all

[ toggle-all ] [current-title] [g-title / a-title / jp-title] [x / wsg / h] [t-text:"Piracy"]
will give you
[ + ] [Technology] [Technology / Anime & Manga / Otaku Culture] [x / wsg / h] [Piracy]
if you are on /g/.
Time Formatting is disabled.
:
Supported format specifiers:
Day: %a, %A, %d, %e
Month: %m, %b, %B
Year: %y, %Y
Hour: %k, %H, %l, %I, %p, %P
Minute: %M
Second: %S
Literal %: %%
Quote Backlinks formatting is disabled.
:
File Info Formatting is disabled.
:
Link: %l (truncated), %L (untruncated), %T (4chan filename)
Filename: %n (truncated), %N (untruncated), %t (4chan filename)
Spoiler indicator: %p
Size: %B (Bytes), %K (KB), %M (MB), %s (4chan default)
Resolution: %r (Displays 'PDF' for PDF files)
Tag: %g
Literal %: %%
Quick Reply Personas

One item per line.
Items will be added in the relevant input's auto-completion list.
Password items will always be used, since there is no password input.
Lines starting with a # will be ignored.

Unread Favicon is disabled.
Thread Updater is disabled.
Interval: seconds
Custom Cooldown Time
Seconds:
" }); ref = $$('.warning', section); for (k = 0, len1 = ref.length; k < len1; k++) { @@ -16059,7 +16794,7 @@ } items = {}; inputs = {}; - ref1 = ['boardnav', 'time', 'backlink', 'fileInfo', 'favicon', 'usercss', 'customCooldown']; + ref1 = ['captchaLanguage', 'boardnav', 'time', 'backlink', 'fileInfo', 'favicon', 'usercss', 'customCooldown']; for (q = 0, len2 = ref1.length; q < len2; q++) { name = ref1[q]; input = $("[name='" + name + "']", section); @@ -16072,7 +16807,9 @@ $.on(input, 'change', Settings[name]); } else { $.on(input, 'input', $.cb.value); - $.on(input, 'input', Settings[name]); + if (name in Settings) { + $.on(input, 'input', Settings[name]); + } } } ta = $('.personafield', section); @@ -16086,10 +16823,9 @@ val = items[key]; input = inputs[key]; input.value = val; - if (key === 'usercss' || key === 'customCooldown') { - continue; + if (key in Settings && key !== 'usercss') { + Settings[key].call(input); } - Settings[key].call(input); } }); interval = $('input[name="Interval"]', section); @@ -16106,8 +16842,8 @@ ref2 = Redirect.archives; for (u = 0, len3 = ref2.length; u < len3; u++) { ref3 = ref2[u], name = ref3.name, boards = ref3.boards, files = ref3.files, software = ref3.software, withCredentials = ref3.withCredentials; - for (w = 0, len4 = boards.length; w < len4; w++) { - boardID = boards[w]; + for (v = 0, len4 = boards.length; v < len4; v++) { + boardID = boards[v]; o = archBoards[boardID] || (archBoards[boardID] = { thread: [[], []], post: [[], []], @@ -16126,8 +16862,8 @@ for (boardID in archBoards) { o = archBoards[boardID]; ref4 = ['thread', 'post', 'file']; - for (y = 0, len5 = ref4.length; y < len5; y++) { - item = ref4[y]; + for (w = 0, len5 = ref4.length; w < len5; w++) { + item = ref4[w]; i = o[item][0].length ? 1 : 0; o[item][i].push('disabled'); o[item] = o[item][0].concat(o[item][1]); @@ -16136,8 +16872,8 @@ rows = []; boardOptions = []; ref5 = Object.keys(archBoards).sort(); - for (z = 0, len6 = ref5.length; z < len6; z++) { - boardID = ref5[z]; + for (y = 0, len6 = ref5.length; y < len6; y++) { + boardID = ref5[y]; row = $.el('tr', { className: "board-" + boardID }); @@ -16149,8 +16885,8 @@ })); o = archBoards[boardID]; ref6 = ['thread', 'post', 'file']; - for (aa = 0, len7 = ref6.length; aa < len7; aa++) { - item = ref6[aa]; + for (z = 0, len7 = ref6.length; z < len7; z++) { + item = ref6[z]; $.add(row, Settings.addArchiveCell(boardID, o, item)); } rows.push(row); @@ -16324,23 +17060,35 @@ Main = { init: function() { - var db, flatten, k, len1, pathname, ref, ref1, ref2; + var db, flatten, items, k, key, len1, pathname, ref, ref1, ref2; + if (d.body && !$('title', d.head)) { + return; + } + if (window['4chan X antidup']) { + return; + } + window['4chan X antidup'] = true; if (location.hostname === 'www.google.com') { - if (location.pathname === '/recaptcha/api/fallback') { + if (location.pathname === '/recaptcha/api/noscript') { $.ready(function() { return Captcha.noscript.initFrame(); }); - } else { - $.get('Captcha Fixes', true, function(arg) { - var enabled; - enabled = arg['Captcha Fixes']; - if (enabled) { - return $.ready(function() { - return Captcha.fixes.init(); - }); - } + return; + } + if (location.pathname === '/recaptcha/api/fallback') { + $.ready(function() { + return Captcha.v2.initFrame(); }); } + $.get('Captcha Fixes', true, function(arg) { + var enabled; + enabled = arg['Captcha Fixes']; + if (enabled) { + return $.ready(function() { + return Captcha.fixes.init(); + }); + } + }); return; } g.threads = new SimpleDict(); @@ -16394,14 +17142,32 @@ }; } Conf['selectedArchives'] = {}; - $.get(Conf, function(items) { - $.extend(Conf, items); - if (Conf['Fixed Thread Watcher'] == null) { - Conf['Fixed Thread Watcher'] = Conf['Toggleable Thread Watcher']; - } + Conf['cooldowns'] = {}; + Conf['Except Archives from Encryption'] = false; + items = {}; + for (key in Conf) { + items[key] = void 0; + } + items['previousversion'] = void 0; + $.get(items, function(items) { return $.asap((function() { return doc = d.documentElement; - }), Main.initFeatures); + }), function() { + var ref3, val; + if (items.previousversion == null) { + Main.ready(function() { + $.set('previousversion', g.VERSION); + return Settings.open(); + }); + } else if (items.previousversion !== g.VERSION) { + Main.upgrade(items); + } + for (key in Conf) { + val = Conf[key]; + Conf[key] = (ref3 = items[key]) != null ? ref3 : val; + } + return Main.initFeatures(); + }); }); return $.asap((function() { return doc = d.documentElement; @@ -16409,12 +17175,43 @@ return $.onExists(doc, 'body', false, Main.initStyle); }); }, + upgrade: function(items) { + var compareString, items2, previousversion, ref, ref1; + previousversion = items.previousversion; + items2 = { + previousversion: g.VERSION + }; + compareString = previousversion.replace(/\d+/g, function(x) { + return ('0000' + x).slice(-5); + }); + if (compareString < '00001.00011.00008.00000') { + if (items['Fixed Thread Watcher'] == null) { + items2['Fixed Thread Watcher'] = (ref = items['Toggleable Thread Watcher']) != null ? ref : true; + } + if (items['Exempt Archives from Encryption'] == null) { + items2['Exempt Archives from Encryption'] = (ref1 = items['Except Archives from Encryption']) != null ? ref1 : false; + } + } + $.extend(items, items2); + return $.set(items2, function() { + var el, ref2; + if ((ref2 = items['Show Updated Notifications']) != null ? ref2 : true) { + el = $.el('span', { + innerHTML: "4chan X has been updated to version " + E(g.VERSION) + "." + }); + return new Notice('info', el, 15); + } + }); + }, initFeatures: function() { - var err, feature, k, len1, name, pathname, ref, ref1, ref2; - if ((ref = location.hostname) === 'boards.4chan.org' || ref === 'sys.4chan.org') { + var err, feature, k, len1, match, name, pathname, ref, ref1, ref2; + if ((ref = location.hostname) === 'boards.4chan.org' || ref === 'sys.4chan.org' || ref === 'www.4chan.org') { $.globalEval('document.documentElement.classList.add("js-enabled");'); } switch (location.hostname) { + case 'www.4chan.org': + Captcha.replace.init(); + return; case 'a.4cdn.org': return; case 'sys.4chan.org': @@ -16422,20 +17219,29 @@ if (g.VIEW === 'post') { PostSuccessful.init(); } + if (Conf['404 Redirect'] && /\/imgboard\.php$/.test(location.pathname) && (match = location.search.match(/\bres=(\d+)/))) { + $.ready(function() { + var ref1; + if (((ref1 = $.id('errmsg')) != null ? ref1.textContent : void 0) === 'Error: Specified thread does not exist.') { + return Redirect.navigate('thread', { + boardID: g.BOARD.ID, + postID: +match[1] + }); + } + }); + } return; case 'i.4cdn.org': $.asap((function() { return d.readyState !== 'loading'; }), function() { - var URL, pathname, ref1, video; + var pathname, ref1, video; if (Conf['404 Redirect'] && ((ref1 = d.title) === '4chan - Temporarily Offline' || ref1 === '4chan - 404 Not Found')) { - Redirect.init(); pathname = location.pathname.split('/'); - URL = Redirect.to('file', { + return Redirect.navigate('file', { boardID: g.BOARD.ID, filename: pathname[pathname.length - 1] }); - return Redirect.navigate(URL); } else if (video = $('video')) { if (Conf['Volume in New Tab']) { Volume.setup(video); @@ -16474,6 +17280,9 @@ }, initStyle: function() { var keyboard, ref; + if (location.hostname === 'www.4chan.org') { + $.addStyle(Main.cssWWW); + } if (!Main.isThisPageLegit() || $.hasClass(doc, 'fourchan-x')) { return; } @@ -16482,7 +17291,9 @@ } $.addClass(doc, 'fourchan-x', 'seaweedchan'); $.addClass(doc, g.VIEW === 'thread' ? 'thread-view' : g.VIEW); - $.addClass(doc, typeof chrome !== "undefined" && chrome !== null ? 'blink' : 'gecko'); + if ($.engine) { + $.addClass(doc, $.engine); + } $.addStyle(Main.css, 'fourchanx-css'); keyboard = false; $.on(d, 'mousedown', function() { @@ -16529,21 +17340,20 @@ }); }, initReady: function() { - var GMver, err, i, k, len1, passLink, ref, ref1, styleSelector, v; - if ((ref = d.title) === '4chan - Temporarily Offline' || ref === '4chan - 404 Not Found') { - if (g.VIEW === 'thread') { - ThreadWatcher.set404(g.BOARD.ID, g.THREADID, function() { - var href; - if (Conf['404 Redirect']) { - href = Redirect.to('thread', { - boardID: g.BOARD.ID, - threadID: g.THREADID, - postID: +location.hash.match(/\d+/) - }); - return Redirect.navigate(href, "/" + g.BOARD + "/"); - } - }); - } + var err, passLink, ref, ref1, styleSelector; + if (g.VIEW === 'thread' && (((ref = d.title) === '4chan - Temporarily Offline' || ref === '4chan - 404 Not Found') || ($('.board') && !$('.opContainer')))) { + ThreadWatcher.set404(g.BOARD.ID, g.THREADID, function() { + if (Conf['404 Redirect']) { + return Redirect.navigate('thread', { + boardID: g.BOARD.ID, + threadID: g.THREADID, + postID: +location.hash.match(/\d+/) + }, "/" + g.BOARD + "/"); + } + }); + return; + } + if ((ref1 = d.title) === '4chan - Temporarily Offline' || ref1 === '4chan - 404 Not Found') { return; } if (styleSelector = $.id('styleSelector')) { @@ -16561,33 +17371,7 @@ } else { $.event('4chanXInitFinished'); } - $.get('previousversion', null, function(arg) { - var el, previousversion; - previousversion = arg.previousversion; - if (previousversion === g.VERSION) { - return; - } - if (previousversion) { - el = $.el('span', { - innerHTML: "4chan X has been updated to version " + E(g.VERSION) + "." - }); - new Notice('info', el, 15); - } else { - Settings.open(); - } - return $.set('previousversion', g.VERSION); - }); if (Conf['Show Support Message']) { - GMver = GM_info.version.split('.'); - ref1 = "1.14".split('.'); - for (i = k = 0, len1 = ref1.length; k < len1; i = ++k) { - v = ref1[i]; - if (v === GMver[i]) { - continue; - } - (v < GMver[i]) || new Notice('warning', "Your version of Greasemonkey is outdated (v" + GM_info.version + " instead of v1.14 minimum) and 4chan X may not operate correctly.", 30); - break; - } try { return localStorage.getItem('4chan-settings'); } catch (_error) { @@ -16687,11 +17471,11 @@ error = errors[0]; } if (error) { - new Notice('error', Main.parseError(error), 15); + new Notice('error', Main.parseError(error, Main.reportLink([error])), 15); return; } div = $.el('div', { - innerHTML: E(errors.length) + " errors occurred. [show]" + innerHTML: E(errors.length) + " errors occurred." + Main.reportLink(errors).innerHTML + " [show]" }); $.on(div.lastElementChild, 'click', function() { var ref; @@ -16706,16 +17490,34 @@ } return new Notice('error', [div, logs], 30); }, - parseError: function(data) { - var error, message; + parseError: function(data, reportLink) { + var context, error, lines, message, ref, ref1; c.error(data.message, data.error.stack); message = $.el('div', { - textContent: data.message + innerHTML: E(data.message) + (reportLink ? reportLink.innerHTML : "") }); error = $.el('div', { textContent: (data.error.name || 'Error') + ": " + (data.error.message || 'see console for details') }); - return [message, error]; + lines = ((ref = data.error.stack) != null ? (ref1 = ref.match(/\d+(?=:\d+\)?$)/mg)) != null ? ref1.join().replace(/^/, ' at ') : void 0 : void 0) || ''; + context = $.el('div', { + textContent: "(4chan X ccd0 v" + g.VERSION + " userscript on " + $.engine + lines + ")" + }); + return [message, error, context]; + }, + reportLink: function(errors) { + var data, details, ref, title, url; + data = errors[0]; + title = data.message; + if (errors.length > 1) { + title += " (+" + (errors.length - 1) + " other errors)"; + } + details = "[Please describe the steps needed to reproduce this error.]\n\nScript: 4chan X ccd0 v" + g.VERSION + " userscript\nUser agent: " + navigator.userAgent + "\nURL: " + location.href + "\n\n" + data.error + "\n" + (((ref = data.error.stack) != null ? ref.replace(data.error.toString(), '').trim() : void 0) || ''); + details = details.replace(/file:\/{3}.+\//g, ''); + url = "https://gitreports.com/issue/ccd0/4chan-x?issue_title=" + (encodeURIComponent(title)) + "&details=" + (encodeURIComponent(details)); + return { + innerHTML: " [report]" + }; }, isThisPageLegit: function() { var ref; @@ -16732,12 +17534,12 @@ }); }, css: "/*!\n" + -" * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome\n" + +" * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome\n" + " * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n" + " */\n" + "@font-face {\n" + " font-family: FontAwesome;\n" + -" src: url('data:application/font-woff;base64,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') format('woff');\n" + +" src: url('data:application/font-woff;base64,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') format('woff');\n" + " font-weight: 400;\n" + " font-style: normal;\n" + "}\n" + @@ -16924,7 +17726,7 @@ ".fa-github:before {content: \"\\f09b\";}\n" + ".fa-unlock:before {content: \"\\f09c\";}\n" + ".fa-credit-card:before {content: \"\\f09d\";}\n" + -".fa-rss:before {content: \"\\f09e\";}\n" + +".fa-feed:before, .fa-rss:before {content: \"\\f09e\";}\n" + ".fa-hdd-o:before {content: \"\\f0a0\";}\n" + ".fa-bullhorn:before {content: \"\\f0a1\";}\n" + ".fa-bell:before {content: \"\\f0f3\";}\n" + @@ -17200,14 +18002,14 @@ ".fa-ge:before, .fa-empire:before {content: \"\\f1d1\";}\n" + ".fa-git-square:before {content: \"\\f1d2\";}\n" + ".fa-git:before {content: \"\\f1d3\";}\n" + -".fa-hacker-news:before {content: \"\\f1d4\";}\n" + +".fa-y-combinator-square:before, .fa-yc-square:before, .fa-hacker-news:before {content: \"\\f1d4\";}\n" + ".fa-tencent-weibo:before {content: \"\\f1d5\";}\n" + ".fa-qq:before {content: \"\\f1d6\";}\n" + ".fa-wechat:before, .fa-weixin:before {content: \"\\f1d7\";}\n" + ".fa-send:before, .fa-paper-plane:before {content: \"\\f1d8\";}\n" + ".fa-send-o:before, .fa-paper-plane-o:before {content: \"\\f1d9\";}\n" + ".fa-history:before {content: \"\\f1da\";}\n" + -".fa-genderless:before, .fa-circle-thin:before {content: \"\\f1db\";}\n" + +".fa-circle-thin:before {content: \"\\f1db\";}\n" + ".fa-header:before {content: \"\\f1dc\";}\n" + ".fa-paragraph:before {content: \"\\f1dd\";}\n" + ".fa-sliders:before {content: \"\\f1de\";}\n" + @@ -17274,7 +18076,7 @@ ".fa-venus:before {content: \"\\f221\";}\n" + ".fa-mars:before {content: \"\\f222\";}\n" + ".fa-mercury:before {content: \"\\f223\";}\n" + -".fa-transgender:before {content: \"\\f224\";}\n" + +".fa-intersex:before, .fa-transgender:before {content: \"\\f224\";}\n" + ".fa-transgender-alt:before {content: \"\\f225\";}\n" + ".fa-venus-double:before {content: \"\\f226\";}\n" + ".fa-mars-double:before {content: \"\\f227\";}\n" + @@ -17283,6 +18085,7 @@ ".fa-mars-stroke-v:before {content: \"\\f22a\";}\n" + ".fa-mars-stroke-h:before {content: \"\\f22b\";}\n" + ".fa-neuter:before {content: \"\\f22c\";}\n" + +".fa-genderless:before {content: \"\\f22d\";}\n" + ".fa-facebook-official:before {content: \"\\f230\";}\n" + ".fa-pinterest-p:before {content: \"\\f231\";}\n" + ".fa-whatsapp:before {content: \"\\f232\";}\n" + @@ -17294,6 +18097,71 @@ ".fa-train:before {content: \"\\f238\";}\n" + ".fa-subway:before {content: \"\\f239\";}\n" + ".fa-medium:before {content: \"\\f23a\";}\n" + +".fa-yc:before, .fa-y-combinator:before {content: \"\\f23b\";}\n" + +".fa-optin-monster:before {content: \"\\f23c\";}\n" + +".fa-opencart:before {content: \"\\f23d\";}\n" + +".fa-expeditedssl:before {content: \"\\f23e\";}\n" + +".fa-battery-4:before, .fa-battery-full:before {content: \"\\f240\";}\n" + +".fa-battery-3:before, .fa-battery-three-quarters:before {content: \"\\f241\";}\n" + +".fa-battery-2:before, .fa-battery-half:before {content: \"\\f242\";}\n" + +".fa-battery-1:before, .fa-battery-quarter:before {content: \"\\f243\";}\n" + +".fa-battery-0:before, .fa-battery-empty:before {content: \"\\f244\";}\n" + +".fa-mouse-pointer:before {content: \"\\f245\";}\n" + +".fa-i-cursor:before {content: \"\\f246\";}\n" + +".fa-object-group:before {content: \"\\f247\";}\n" + +".fa-object-ungroup:before {content: \"\\f248\";}\n" + +".fa-sticky-note:before {content: \"\\f249\";}\n" + +".fa-sticky-note-o:before {content: \"\\f24a\";}\n" + +".fa-cc-jcb:before {content: \"\\f24b\";}\n" + +".fa-cc-diners-club:before {content: \"\\f24c\";}\n" + +".fa-clone:before {content: \"\\f24d\";}\n" + +".fa-balance-scale:before {content: \"\\f24e\";}\n" + +".fa-hourglass-o:before {content: \"\\f250\";}\n" + +".fa-hourglass-1:before, .fa-hourglass-start:before {content: \"\\f251\";}\n" + +".fa-hourglass-2:before, .fa-hourglass-half:before {content: \"\\f252\";}\n" + +".fa-hourglass-3:before, .fa-hourglass-end:before {content: \"\\f253\";}\n" + +".fa-hourglass:before {content: \"\\f254\";}\n" + +".fa-hand-grab-o:before, .fa-hand-rock-o:before {content: \"\\f255\";}\n" + +".fa-hand-stop-o:before, .fa-hand-paper-o:before {content: \"\\f256\";}\n" + +".fa-hand-scissors-o:before {content: \"\\f257\";}\n" + +".fa-hand-lizard-o:before {content: \"\\f258\";}\n" + +".fa-hand-spock-o:before {content: \"\\f259\";}\n" + +".fa-hand-pointer-o:before {content: \"\\f25a\";}\n" + +".fa-hand-peace-o:before {content: \"\\f25b\";}\n" + +".fa-trademark:before {content: \"\\f25c\";}\n" + +".fa-registered:before {content: \"\\f25d\";}\n" + +".fa-creative-commons:before {content: \"\\f25e\";}\n" + +".fa-gg:before {content: \"\\f260\";}\n" + +".fa-gg-circle:before {content: \"\\f261\";}\n" + +".fa-tripadvisor:before {content: \"\\f262\";}\n" + +".fa-odnoklassniki:before {content: \"\\f263\";}\n" + +".fa-odnoklassniki-square:before {content: \"\\f264\";}\n" + +".fa-get-pocket:before {content: \"\\f265\";}\n" + +".fa-wikipedia-w:before {content: \"\\f266\";}\n" + +".fa-safari:before {content: \"\\f267\";}\n" + +".fa-chrome:before {content: \"\\f268\";}\n" + +".fa-firefox:before {content: \"\\f269\";}\n" + +".fa-opera:before {content: \"\\f26a\";}\n" + +".fa-internet-explorer:before {content: \"\\f26b\";}\n" + +".fa-tv:before, .fa-television:before {content: \"\\f26c\";}\n" + +".fa-contao:before {content: \"\\f26d\";}\n" + +".fa-500px:before {content: \"\\f26e\";}\n" + +".fa-amazon:before {content: \"\\f270\";}\n" + +".fa-calendar-plus-o:before {content: \"\\f271\";}\n" + +".fa-calendar-minus-o:before {content: \"\\f272\";}\n" + +".fa-calendar-times-o:before {content: \"\\f273\";}\n" + +".fa-calendar-check-o:before {content: \"\\f274\";}\n" + +".fa-industry:before {content: \"\\f275\";}\n" + +".fa-map-pin:before {content: \"\\f276\";}\n" + +".fa-map-signs:before {content: \"\\f277\";}\n" + +".fa-map-o:before {content: \"\\f278\";}\n" + +".fa-map:before {content: \"\\f279\";}\n" + +".fa-commenting:before {content: \"\\f27a\";}\n" + +".fa-commenting-o:before {content: \"\\f27b\";}\n" + +".fa-houzz:before {content: \"\\f27c\";}\n" + +".fa-vimeo:before {content: \"\\f27d\";}\n" + +".fa-black-tie:before {content: \"\\f27e\";}\n" + +".fa-fonticons:before {content: \"\\f280\";}\n" + ".fa-spin::before {\n" + " -webkit-animation:spin 2s infinite linear;\n" + " -moz-animation:spin 2s infinite linear;\n" + @@ -17418,9 +18286,16 @@ " /* party hats */\n" + " pointer-events: none;\n" + "}\n" + +"#g-recaptcha {\n" + +" min-height: 78px;\n" + +" height: auto;\n" + +"}\n" + ":root:not(.js-enabled) #postForm {\n" + " display: table;\n" + "}\n" + +"#captchaContainerAlt td:nth-child(2) {\n" + +" display: table-cell !important;\n" + +"}\n" + "/* Anti-autoplay */\n" + "audio.controls-added {\n" + " display: block;\n" + @@ -17432,6 +18307,11 @@ " height: auto;\n" + " text-align: center;\n" + "}\n" + +":root.anti-autoplay .autoplay-removed {\n" + +" display: block !important;\n" + +" min-width: 640px;\n" + +" min-height: 390px;\n" + +"}\n" + "/* fixed, z-index */\n" + "#overlay,\n" + "#fourchanx-settings,\n" + @@ -17472,9 +18352,15 @@ "#embedding {\n" + " z-index: 11;\n" + "}\n" + -"#thread-watcher {\n" + +":root.fixed-watcher #thread-watcher {\n" + " z-index: 10;\n" + "}\n" + +":root.fixed:not(.gallery-open) #header-bar:not(:hover) {\n" + +" z-index: 8;\n" + +"}\n" + +"#thread-watcher {\n" + +" z-index: 5;\n" + +"}\n" + "/* Header */\n" + ".fixed.top-header body {\n" + " padding-top: 2em;\n" + @@ -17549,7 +18435,7 @@ " height: 10px;\n" + " position: absolute;\n" + "}\n" + -":root:not(.autohide) #scroll-marker {\n" + +"#header-bar:not(.autohide) #scroll-marker {\n" + " pointer-events: none;\n" + "}\n" + "#header-bar #scroll-marker {\n" + @@ -17628,6 +18514,7 @@ " flex: auto;\n" + " display: -webkit-flex;\n" + " display: flex;\n" + +" width: 0px; /* XXX Fixes Edge not shrinking the board list below default size when needed */\n" + " }\n" + " :root.fixed:not(.centered-links) #full-board-list > .boardList > a,\n" + " :root.fixed:not(.centered-links) #full-board-list > .boardList > span:not(.space):not(.spacer) {\n" + @@ -17839,7 +18726,7 @@ ".section-filter textarea {\n" + " height: 500px;\n" + "}\n" + -".section-filter a {\n" + +".section-filter a, .section-advanced a {\n" + " text-decoration: underline;\n" + "}\n" + ".section-sauce textarea {\n" + @@ -17929,6 +18816,10 @@ " left: -1em;\n" + " width: 0;\n" + "}\n" + +"/* \`\`::-webkit-*'' selectors break selector lists on Firefox. */\n" + +"#index-search::-webkit-search-cancel-button {\n" + +" display: none;\n" + +"}\n" + "#index-search:not([data-searching]) + #index-search-clear {\n" + " display: none;\n" + "}\n" + @@ -18091,10 +18982,11 @@ "#thread-watcher {\n" + " padding-bottom: 3px;\n" + " padding-left: 3px;\n" + -" overflow: hidden;\n" + " white-space: nowrap;\n" + " min-width: 146px;\n" + -" max-height: 92%;\n" + +"}\n" + +"#watched-threads {\n" + +" overflow-x: hidden;\n" + " overflow-y: auto;\n" + "}\n" + "#thread-watcher .refresh {\n" + @@ -18103,7 +18995,12 @@ ":root.fixed-watcher #thread-watcher {\n" + " position: fixed;\n" + "}\n" + -":root:not(.fixed-watcher) #thread-watcher:not(:hover) {\n" + +":root.fixed-watcher #watched-threads {\n" + +" /* XXX https://code.google.com/p/chromium/issues/detail?id=168840, https://bugs.webkit.org/show_bug.cgi?id=94158 */\n" + +" max-height: 85vh;\n" + +" max-height: calc(100vh - 75px);\n" + +"}\n" + +":root:not(.fixed-watcher) #watched-threads:not(:hover) {\n" + " max-height: 210px;\n" + " overflow-y: hidden;\n" + "}\n" + @@ -18270,6 +19167,11 @@ ":root.fit-height .full-image {\n" + " max-height: 100vh;\n" + "}\n" + +":root.fit-height.fixed .full-image {\n" + +" /* XXX https://code.google.com/p/chromium/issues/detail?id=168840, https://bugs.webkit.org/show_bug.cgi?id=94158 */\n" + +" max-height: 93vh;\n" + +" max-height: calc(100vh - 35px);\n" + +"}\n" + ":root.fit-width .full-image {\n" + " max-width: 100%;\n" + "}\n" + @@ -18439,6 +19341,13 @@ " min-width: 300px;\n" + " border-radius: 3px 3px 0 0;\n" + "}\n" + +"#qr > form {\n" + +" /* XXX https://code.google.com/p/chromium/issues/detail?id=168840, https://bugs.webkit.org/show_bug.cgi?id=94158 */\n" + +" max-height: 85vh;\n" + +" max-height: calc(100vh - 75px);\n" + +" overflow-y: auto;\n" + +" overflow-x: hidden;\n" + +"}\n" + "#qrtab {\n" + " border-radius: 3px 3px 0 0;\n" + "}\n" + @@ -18510,7 +19419,7 @@ " position: relative;\n" + " top: 2px;\n" + "}\n" + -"/* Noscript Recaptcha */\n" + +"/* Recaptcha v1 */\n" + ".captcha-img {\n" + " margin: 0px;\n" + " text-align: center;\n" + @@ -18519,11 +19428,11 @@ " min-height: 59px;\n" + " min-width: 302px;\n" + "}\n" + -".captcha-input{\n" + +".captcha-input {\n" + " width: 100%;\n" + " margin: 1px 0 0;\n" + "}\n" + -"#qr-captcha-iframe {\n" + +"#qr.captcha-v1 #qr-captcha-iframe {\n" + " display: none;\n" + "}\n" + "/* Recaptcha v2 */\n" + @@ -18550,6 +19459,13 @@ " display: block;\n" + " width: 100%;\n" + "}\n" + +"#qr.captcha-v2 #qr-captcha-iframe {\n" + +" width: 302px;\n" + +" height: 423px;\n" + +" border: 0;\n" + +" display: block;\n" + +" margin: auto;\n" + +"}\n" + ".goog-bubble-content {\n" + " max-width: 100vw;\n" + " max-height: 100vh;\n" + @@ -18603,6 +19519,7 @@ ".has-file #qr-filename {\n" + " -webkit-flex: 1 1 auto;\n" + " flex: 1 1 auto;\n" + +" width: 0px; /* XXX Fixes filename not shrinking to allow space for buttons in Edge */\n" + " display: inline-block;\n" + " padding: 0;\n" + " padding-left: 3px;\n" + @@ -18749,6 +19666,8 @@ "}\n" + ".textarea {\n" + " position: relative;\n" + +" display: -webkit-flex;\n" + +" display: flex;\n" + "}\n" + ":root.webkit .textarea {\n" + " margin-bottom: -2px;\n" + @@ -18787,7 +19706,7 @@ " height: 15px;\n" + " text-align: center;\n" + "}\n" + -".menu-button + .container:not(:empty) {\n" + +".menu-button + .container :first-child {\n" + " margin-left: -5px;\n" + "}\n" + "#menu {\n" + @@ -19070,12 +19989,7 @@ "}\n" + ".gal-fit-height .gal-image img,\n" + ".gal-fit-height .gal-image video {\n" + -" /*\n" + -" Chrome doesn't support viewpoint units in calc()\n" + -" http://bugs.chromium.org/168840\n" + -" \"It looks like the original author of viewport units in WebKit is not coming back to fix this stuff.\"\n" + -" Well, fuck.\n" + -" */\n" + +" /* XXX https://code.google.com/p/chromium/issues/detail?id=168840, https://bugs.webkit.org/show_bug.cgi?id=94158 */\n" + " max-height: 95vh;\n" + " max-height: calc(100vh - 25px);\n" + "}\n" + @@ -19178,7 +20092,7 @@ " width: 4em;\n" + "}\n" + ":root.gallery-open.fixed #header-bar:not(.autohide),\n" + -":root.gallery-open.fixed #header-bar:not(.autohide) .fa::before {\n" + +":root.gallery-open.fixed #header-bar:not(.autohide) #shortcuts .fa::before {\n" + " visibility: hidden;\n" + "}\n" + "/* General */\n" + @@ -19708,7 +20622,10 @@ " font-family: sans-serif !important;\n" + " text-shadow: 1px 1px 1px rgba(0,74,153,0.6);\n" + "}", - features: [['Polyfill', Polyfill], ['Redirect', Redirect], ['Header', Header], ['Catalog Links', CatalogLinks], ['Settings', Settings], ['Index Generator', Index], ['Disable Autoplay', AntiAutoplay], ['Announcement Hiding', PSAHiding], ['Fourchan thingies', Fourchan], ['Color User IDs', IDColor], ['Highlight by User ID', IDHighlight], ['Custom CSS', CustomCSS], ['Linkify', Linkify], ['Reveal Spoilers', RemoveSpoilers], ['Resurrect Quotes', Quotify], ['Filter', Filter], ['Thread Hiding Buttons', ThreadHiding], ['Reply Hiding Buttons', PostHiding], ['Recursive', Recursive], ['Strike-through Quotes', QuoteStrikeThrough], ['Quick Reply', QR], ['Menu', Menu], ['Index Generator (Menu)', Index.menu], ['Report Link', ReportLink], ['Thread Hiding (Menu)', ThreadHiding.menu], ['Reply Hiding (Menu)', PostHiding.menu], ['Delete Link', DeleteLink], ['Filter (Menu)', Filter.menu], ['Download Link', DownloadLink], ['Archive Link', ArchiveLink], ['Quote Inlining', QuoteInline], ['Quote Previewing', QuotePreview], ['Quote Backlinks', QuoteBacklink], ['Mark Quotes of You', QuoteYou], ['Mark OP Quotes', QuoteOP], ['Mark Cross-thread Quotes', QuoteCT], ['Anonymize', Anonymize], ['Time Formatting', Time], ['Relative Post Dates', RelativeDates], ['File Info Formatting', FileInfo], ['Fappe Tyme', FappeTyme], ['Gallery', Gallery], ['Gallery (menu)', Gallery.menu], ['Sauce', Sauce], ['Image Expansion', ImageExpand], ['Image Expansion (Menu)', ImageExpand.menu], ['Reveal Spoiler Thumbnails', RevealSpoilers], ['Image Loading', ImageLoader], ['Image Hover', ImageHover], ['Volume Control', Volume], ['WEBM Metadata', Metadata], ['Comment Expansion', ExpandComment], ['Thread Expansion', ExpandThread], ['Thread Excerpt', ThreadExcerpt], ['Favicon', Favicon], ['Unread', Unread], ['Quote Threading', QuoteThreading], ['Thread Stats', ThreadStats], ['Thread Updater', ThreadUpdater], ['Thread Watcher', ThreadWatcher], ['Thread Watcher (Menu)', ThreadWatcher.menu], ['Mark New IPs', MarkNewIPs], ['Index Navigation', Nav], ['Keybinds', Keybinds], ['Banner', Banner], ['Flash Features', Flash]] + cssWWW: "#captcha-cnt {\n" + +" height: auto;\n" + +"}", + features: [['Polyfill', Polyfill], ['Captcha Replacement', Captcha.replace], ['Redirect', Redirect], ['Header', Header], ['Catalog Links', CatalogLinks], ['Settings', Settings], ['Index Generator', Index], ['Disable Autoplay', AntiAutoplay], ['Announcement Hiding', PSAHiding], ['Fourchan thingies', Fourchan], ['Color User IDs', IDColor], ['Highlight by User ID', IDHighlight], ['Custom CSS', CustomCSS], ['Linkify', Linkify], ['Reveal Spoilers', RemoveSpoilers], ['Resurrect Quotes', Quotify], ['Filter', Filter], ['Thread Hiding Buttons', ThreadHiding], ['Reply Hiding Buttons', PostHiding], ['Recursive', Recursive], ['Strike-through Quotes', QuoteStrikeThrough], ['Quick Reply', QR], ['Cooldown', QR.cooldown], ['Menu', Menu], ['Index Generator (Menu)', Index.menu], ['Report Link', ReportLink], ['Thread Hiding (Menu)', ThreadHiding.menu], ['Reply Hiding (Menu)', PostHiding.menu], ['Delete Link', DeleteLink], ['Filter (Menu)', Filter.menu], ['Download Link', DownloadLink], ['Archive Link', ArchiveLink], ['Quote Inlining', QuoteInline], ['Quote Previewing', QuotePreview], ['Quote Backlinks', QuoteBacklink], ['Mark Quotes of You', QuoteYou], ['Mark OP Quotes', QuoteOP], ['Mark Cross-thread Quotes', QuoteCT], ['Anonymize', Anonymize], ['Time Formatting', Time], ['Relative Post Dates', RelativeDates], ['File Info Formatting', FileInfo], ['Fappe Tyme', FappeTyme], ['Gallery', Gallery], ['Gallery (menu)', Gallery.menu], ['Sauce', Sauce], ['Image Expansion', ImageExpand], ['Image Expansion (Menu)', ImageExpand.menu], ['Reveal Spoiler Thumbnails', RevealSpoilers], ['Image Loading', ImageLoader], ['Image Hover', ImageHover], ['Volume Control', Volume], ['WEBM Metadata', Metadata], ['Comment Expansion', ExpandComment], ['Thread Expansion', ExpandThread], ['Thread Excerpt', ThreadExcerpt], ['Favicon', Favicon], ['Unread', Unread], ['Quote Threading', QuoteThreading], ['Thread Stats', ThreadStats], ['Thread Updater', ThreadUpdater], ['Thread Watcher', ThreadWatcher], ['Thread Watcher (Menu)', ThreadWatcher.menu], ['Mark New IPs', MarkNewIPs], ['Index Navigation', Nav], ['Keybinds', Keybinds], ['Banner', Banner], ['Flash Features', Flash]] }; Main.init(); diff --git a/builds/4chan-X-noupdate.crx b/builds/4chan-X-noupdate.crx index 7c6180b80..dd5584d49 100644 Binary files a/builds/4chan-X-noupdate.crx and b/builds/4chan-X-noupdate.crx differ diff --git a/builds/4chan-X-noupdate.user.js b/builds/4chan-X-noupdate.user.js index 9beaa6fc3..a5609951c 100644 --- a/builds/4chan-X-noupdate.user.js +++ b/builds/4chan-X-noupdate.user.js @@ -1,27 +1,39 @@ // Generated by CoffeeScript // ==UserScript== // @name 4chan X -// @version 1.10.13.1 +// @version 1.11.9.2 // @minGMVer 1.14 // @minFFVer 26 // @namespace 4chan-X // @description Cross-browser userscript for maximum lurking on 4chan. // @license MIT; https://github.com/ccd0/4chan-x/blob/master/LICENSE -// @match *://boards.4chan.org/* -// @match *://sys.4chan.org/* -// @match *://a.4cdn.org/* -// @match *://i.4cdn.org/* -// @match https://www.google.com/recaptcha/api2/anchor?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* -// @match https://www.google.com/recaptcha/api2/frame?*&k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* -// @match *://www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc +// @include http://boards.4chan.org/* +// @include https://boards.4chan.org/* +// @include http://sys.4chan.org/* +// @include https://sys.4chan.org/* +// @include http://a.4cdn.org/* +// @include https://a.4cdn.org/* +// @include http://i.4cdn.org/* +// @include https://i.4cdn.org/* +// @include http://www.4chan.org/banned +// @include https://www.4chan.org/banned +// @include http://www.4chan.org/feedback +// @include https://www.4chan.org/feedback +// @include https://www.google.com/recaptcha/api2/anchor?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* +// @include https://www.google.com/recaptcha/api2/frame?*&k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* +// @include http://www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* +// @include https://www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* +// @include http://www.google.com/recaptcha/api/noscript?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* +// @include https://www.google.com/recaptcha/api/noscript?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* // @grant GM_getValue // @grant GM_setValue // @grant GM_deleteValue // @grant GM_listValues +// @grant GM_addValueChangeListener // @grant GM_openInTab // @grant GM_xmlhttpRequest // @run-at document-start -// @downloadURL https://ccd0.github.io/4chan-x/builds/4chan-X-noupdate.user.js +// @downloadURL https://www.4chan-x.net/builds/4chan-X-noupdate.user.js // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAACVBMVEUAAGcAAABmzDNZt9VtAAAAAXRSTlMAQObYZgAAAF5JREFUeNrtkTESABAQxPD/R6tsE2dUGYUtFJvLDKf93KevHJAjpBorAQWSBIKqFASC4G0pCAkm4GfaEvgYXl0T6HBaE97f0vmnfYHbZOMLZCx9ISdKWwjOWZSC8GYm4SUGwfYgqI4AAAAASUVORK5CYII= // ==/UserScript== @@ -125,7 +137,7 @@ 'Desktop Notifications': [true, 'Enables desktop notifications across various 4chan X features.'], '404 Redirect': [true, 'Redirect dead threads and images to the archives.'], 'Archive Report': [true, 'Enable reporting posts to supported archives.'], - 'Except Archives from Encryption': [false, 'Permit loading content from, and warningless redirects to, HTTP-only archives from HTTPS pages.'], + 'Exempt Archives from Encryption': [false, 'Permit loading content from, and warningless redirects to, HTTP-only archives from HTTPS pages.'], 'Keybinds': [true, 'Bind actions to keyboard shortcuts.'], 'Time Formatting': [true, 'Localize and format timestamps.'], 'Relative Post Dates': [true, 'Display dates like "3 minutes ago". Tooltip shows the timestamp.'], @@ -213,11 +225,11 @@ 'Page Count in Stats': [true, 'Display the page count in the thread stats.', 1], 'Updater and Stats in Header': [true, 'Places the thread updater and thread stats in the header instead of floating them.'], 'Thread Watcher': [true, 'Bookmark threads.'], - 'Fixed Thread Watcher': [null, 'Makes the thread watcher scroll with the page.', 1], + 'Fixed Thread Watcher': [true, 'Makes the thread watcher scroll with the page.', 1], 'Toggleable Thread Watcher': [true, 'Adds a shortcut for the thread watcher and hides the watcher by default.', 1], 'Mark New IPs': [false, 'Label each post from a new IP with the thread\'s current IP count.'] }, - 'Posting': { + 'Posting and Captchas': { 'Quick Reply': [true, 'All-in-one form to reply, create threads, automate dumping and more.'], 'QR Shortcut': [true, 'Add a shortcut to the header to toggle the QR.', 1], 'Persistent QR': [true, 'The Quick reply won\'t disappear after posting.', 1], @@ -225,6 +237,7 @@ 'Open Post in New Tab': [true, 'Open new threads or replies to a thread from the index in a new tab.', 1], 'Remember QR Size': [false, 'Remember the size of the Quick reply.', 1], 'Remember Spoiler': [false, 'Remember the spoiler state, instead of resetting after posting.', 1], + 'Randomize Filename': [false, 'Set the filename to a random timestamp within the past year. Disabled on /f/.', 1], 'Show New Thread Option in Threads': [false, 'Show the option to post a new / different thread from inside a thread.', 1], 'Show Name and Subject': [false, 'Show the classic name, email, and subject fields in the QR, even when 4chan doesn\'t use them all.', 1], 'Hide Original Post Form': [true, 'Hide the normal post form.', 1], @@ -234,7 +247,9 @@ 'Auto-load captcha': [false, 'Automatically load the captcha in the QR even if your post is empty.', 1], 'Post on Captcha Completion': [false, 'Submit the post immediately when the captcha is completed.', 1], 'Bottom QR Link': [true, 'Places a link on the bottom of threads to open the QR.', 1], - 'Captcha Fixes': [true, 'Make captcha more keyboard-navigable.'] + 'Captcha Fixes': [true, 'Make captcha easier to use, especially with the keyboard.'], + 'Use Recaptcha v1': [false, 'Use the old text version of Recaptcha.'], + 'Use Recaptcha v2 in Reports': [false, 'Use the image selection captcha in the report window.'] }, 'Quote Links': { 'Quote Backlinks': [true, 'Add quote backlinks.'], @@ -266,6 +281,7 @@ 'Hide Thumbnails': [false], 'Fit Width': [true], 'Fit Height': [true], + 'Stretch to Fit': [false], 'Scroll to Post': [true], 'Slide Delay': [6.0] }, @@ -284,14 +300,14 @@ tripcode: "# Filter any tripfag\n#/^!/", capcode: "# Set a custom class for mods:\n#/Mod$/;highlight:mod;op:yes\n# Set a custom class for moot:\n#/Admin$/;highlight:moot;op:yes", subject: "# Filter Generals on /v/:\n#/general/i;boards:v;op:only", - comment: "# Filter Stallman copypasta on /g/:\n#/what you\'re refer+ing to as linux/i;boards:g", + comment: "# Filter Stallman copypasta on /g/:\n#/what you\'re refer+ing to as linux/i;boards:g\n# Filter posts with 20 or more quote links:\n#/(?:>>\\d(?:(?!>>\\d)[^])*){20}/\n# Filter posts like T H I S / H / I / S:\n#/^>?\\s?\\w\\s?(\\w)\\s?(\\w)\\s?(\\w).*$[\\s>]+\\1[\\s>]+\\2[\\s>]+\\3/im", flag: '', filename: '', dimensions: "# Highlight potential wallpapers:\n#/1920x1080/;op:yes;highlight;top:no;boards:w,wg", filesize: '', MD5: '' }, - sauces: "https://www.google.com/searchbyimage?image_url=%IMG\nhttp://iqdb.org/?url=%IMG\nhttp://eye.swfchan.com/search/?q=%name;types:swf;sandbox\n#//tineye.com/search?url=%IMG\n#https://www.yandex.com/images/search?rpt=imageview&img_url=%IMG\n#//saucenao.com/search.php?url=%IMG\n#http://3d.iqdb.org/?url=%IMG\n#http://regex.info/exif.cgi?imgurl=%URL\n# uploaders:\n#//imgur.com/upload?url=%URL;types:gif,jpg,png,pdf;text:Upload to imgur\n# \"View Same\" in archives:\n#https://archive.moe/_/search/image/%MD5/;text:View same on archive.moe\n#https://archive.moe/%board/search/image/%MD5/;text:View same on archive.moe/%board/;boards:a,biz,c,co,diy,fit,gd,h,i,jp,k,m,mlp,po,qa,r9k,s4s,sci,tg,u,v,vg,vp,vr,wsg\n#https://rbt.asia/%board/image/%MD5;text:View same on RBT /%board/;boards:cgl,g,mu,qa,w", + sauces: "https://www.google.com/searchbyimage?image_url=%IMG\nhttp://iqdb.org/?url=%IMG\nhttp://eye.swfchan.com/search/?q=%name;types:swf;sandbox\n#//tineye.com/search?url=%IMG\n#https://www.yandex.com/images/search?rpt=imageview&img_url=%IMG\n#//saucenao.com/search.php?url=%IMG\n#http://3d.iqdb.org/?url=%IMG\n# tools:\n#http://regex.info/exif.cgi?imgurl=%URL\n#//imgops.com/%URL;types:gif,jpg,png\n# uploaders:\n#//imgur.com/upload?url=%URL;types:gif,jpg,png,pdf;text:Upload to imgur\n# \"View Same\" in archives:\n#https://archive.moe/_/search/image/%MD5/;text:View same on archive.moe\n#https://archive.moe/%board/search/image/%MD5/;text:View same on archive.moe/%board/;boards:a,an,biz,c,co,diy,fit,gd,gif,h,i,int,jp,k,m,mlp,out,po,qa,r9k,s4s,sci,tg,u,v,vg,vp,vr,wsg\n#https://rbt.asia/%board/image/%MD5;text:View same on RBT /%board/;boards:cgl,g,mu,qa,w", FappeT: { werk: false }, @@ -321,6 +337,7 @@ QR: { 'QR.personas': "#options:\"sage\";boards:jp;always" }, + captchaLanguage: '', time: '%m/%d/%y(%a)%H:%M:%S', backlink: '>>%id', fileInfo: '%l (%p%s, %r%g)', @@ -377,7 +394,6 @@ 'Bottom Scroll': [false, 'Always scroll to the bottom, not the first new post. Useful for event threads.'], 'Scroll BG': [false, 'Auto-scroll background tabs.'], 'Auto Update': [true, 'Automatically fetch new posts.'], - 'Ignore Offline Status': [false, 'Update even if your browser reports you are offline.'], 'Optional Increase': [false, 'Increase the intervals between updates on threads without new posts.'] }, 'Interval': 30 @@ -395,7 +411,7 @@ doc = d.documentElement; g = { - VERSION: '1.10.13.1', + VERSION: '1.11.9.2', NAMESPACE: '4chan X.', boards: {} }; @@ -615,6 +631,14 @@ if (el = $(selector, root)) { return cb(el); } + if ($.engine === 'edge' && d.readyState === 'loading') { + $.asap((function() { + return d.readyState !== 'loading' || $(selector, root); + }), function() { + return $.onExists(root, selector, subtree, cb); + }); + return; + } observer = new MutationObserver(function() { if (el = $(selector, root)) { observer.disconnect(); @@ -680,7 +704,7 @@ }; $.rm = function(el) { - return el.remove(); + return el != null ? el.remove() : void 0; }; $.rmAll = function(root) { @@ -777,7 +801,9 @@ })); }; - $.open = GM_openInTab; + $.open = typeof GM_openInTab !== "undefined" && GM_openInTab !== null ? GM_openInTab : function(url) { + return window.open(url, '_blank'); + }; $.debounce = function(wait, fn) { var args, exec, lastCall, that, timeout; @@ -853,6 +879,21 @@ return video.mozHasAudio || !!video.webkitAudioDecodedByteCount; }; + $.engine = (function() { + if (/Edge\//.test(navigator.userAgent)) { + return 'edge'; + } + if (/Chrome\//.test(navigator.userAgent)) { + return 'blink'; + } + if (/WebKit\//.test(navigator.userAgent)) { + return 'webkit'; + } + if (/Gecko\/|Goanna/.test(navigator.userAgent)) { + return 'gecko'; + } + })(); + $.item = function(key, val) { var item; item = {}; @@ -862,42 +903,109 @@ $.syncing = {}; - $.oldValue = {}; - - $.sync = function(key, cb) { - key = g.NAMESPACE + key; - $.syncing[key] = cb; - return $.oldValue[key] = GM_getValue(key); - }; - - (function() { - var onChange; - onChange = function(key) { - var cb, newValue; - if (!(cb = $.syncing[key])) { - return; + if (typeof GM_deleteValue !== "undefined" && GM_deleteValue !== null) { + $.getValue = GM_getValue; + $.listValues = function() { + return GM_listValues(); + }; + } else { + $.getValue = function(key) { + return localStorage[key]; + }; + $.listValues = function() { + var key, results; + results = []; + for (key in localStorage) { + if (key.slice(0, g.NAMESPACE.length) === g.NAMESPACE) { + results.push(key); + } } - newValue = GM_getValue(key); - if (newValue === $.oldValue[key]) { - return; + return results; + }; + } + + if (typeof GM_addValueChangeListener !== "undefined" && GM_addValueChangeListener !== null) { + $.setValue = GM_setValue; + $.deleteValue = GM_deleteValue; + } else if (typeof GM_deleteValue !== "undefined" && GM_deleteValue !== null) { + $.oldValue = {}; + $.setValue = function(key, val) { + GM_setValue(key, val); + if (key in $.syncing) { + $.oldValue[key] = val; + return localStorage[key] = val; } - if (newValue != null) { - $.oldValue[key] = newValue; - return cb(JSON.parse(newValue), key); - } else { + }; + $.deleteValue = function(key) { + GM_deleteValue(key); + if (key in $.syncing) { delete $.oldValue[key]; - return cb(void 0, key); + return delete localStorage[key]; } }; - $.on(window, 'storage', function(arg) { - var key; - key = arg.key; - return onChange(key); - }); - return $.forceSync = function(key) { - return onChange(g.NAMESPACE + key); + } else { + $.oldValue = {}; + $.setValue = function(key, val) { + if (key in $.syncing) { + $.oldValue[key] = val; + } + return localStorage[key] = val; }; - })(); + $.deleteValue = function(key) { + if (key in $.syncing) { + delete $.oldValue[key]; + } + return delete localStorage[key]; + }; + } + + if (typeof GM_addValueChangeListener !== "undefined" && GM_addValueChangeListener !== null) { + $.sync = function(key, cb) { + return $.syncing[key] = GM_addValueChangeListener(g.NAMESPACE + key, function(key2, oldValue, newValue, remote) { + if (remote) { + if (newValue !== void 0) { + newValue = JSON.parse(newValue); + } + return cb(newValue, key); + } + }); + }; + $.forceSync = function() {}; + } else { + $.sync = function(key, cb) { + key = g.NAMESPACE + key; + $.syncing[key] = cb; + return $.oldValue[key] = $.getValue(key); + }; + (function() { + var onChange; + onChange = function(key) { + var cb, newValue; + if (!(cb = $.syncing[key])) { + return; + } + newValue = $.getValue(key); + if (newValue === $.oldValue[key]) { + return; + } + if (newValue != null) { + $.oldValue[key] = newValue; + return cb(JSON.parse(newValue), key.slice(g.NAMESPACE.length)); + } else { + delete $.oldValue[key]; + return cb(void 0, key.slice(g.NAMESPACE.length)); + } + }; + $.on(window, 'storage', function(arg) { + var key; + key = arg.key; + return onChange(key); + }); + return $.forceSync = function(key) { + return onChange(g.NAMESPACE + key); + }; + })(); + } $["delete"] = function(keys) { var k, key, len1; @@ -906,12 +1014,7 @@ } for (k = 0, len1 = keys.length; k < len1; k++) { key = keys[k]; - key = g.NAMESPACE + key; - GM_deleteValue(key); - if (key in $.syncing) { - delete $.oldValue[key]; - localStorage.removeItem(key); - } + $.deleteValue(g.NAMESPACE + key); } }; @@ -925,7 +1028,7 @@ } return $.queueTask(function() { for (key in items) { - if (val = GM_getValue(g.NAMESPACE + key)) { + if (val = $.getValue(g.NAMESPACE + key)) { items[key] = JSON.parse(val); } } @@ -933,36 +1036,24 @@ }); }; - $.set = (function() { - var set; - set = function(key, val) { - key = g.NAMESPACE + key; - val = JSON.stringify(val); - GM_setValue(key, val); - if (key in $.syncing) { - $.oldValue[key] = val; - return localStorage.setItem(key, val); + $.set = function(keys, val, cb) { + var key, value; + if (typeof keys === 'string') { + $.setValue(g.NAMESPACE + keys, JSON.stringify(val)); + } else { + for (key in keys) { + value = keys[key]; + $.setValue(g.NAMESPACE + key, JSON.stringify(value)); } - }; - return function(keys, val, cb) { - var key, value; - if (typeof keys === 'string') { - set(keys, val); - } else { - for (key in keys) { - value = keys[key]; - set(key, value); - } - cb = val; - } - return typeof cb === "function" ? cb() : void 0; - }; - })(); + cb = val; + } + return typeof cb === "function" ? cb() : void 0; + }; $.clear = function(cb) { - var a, board, boards, id; + var id; $["delete"](Object.keys(Conf)); - $["delete"](['previousversion', 'AutoWatch', 'cooldown.global', 'QR Size', 'captchas', 'QR.persona', 'hiddenPSA']); + $["delete"](['previousversion', 'AutoWatch', 'QR Size', 'captchas', 'QR.persona', 'hiddenPSA']); $["delete"]((function() { var k, len1, ref, results; ref = ['embedding', 'updater', 'thread-stats', 'thread-watcher', 'qr']; @@ -973,28 +1064,8 @@ } return results; })()); - boards = (function() { - var k, len1, ref, results; - ref = $$('#boardNavDesktop > .boardList > a'); - results = []; - for (k = 0, len1 = ref.length; k < len1; k++) { - a = ref[k]; - results.push(a.textContent); - } - return results; - })(); - boards.push('qa'); - $["delete"]((function() { - var k, len1, results; - results = []; - for (k = 0, len1 = boards.length; k < len1; k++) { - board = boards[k]; - results.push("cooldown." + board); - } - return results; - })()); try { - $["delete"](GM_listValues().map(function(key) { + $["delete"]($.listValues().map(function(key) { return key.replace(g.NAMESPACE, ''); })); } catch (_error) {} @@ -1023,13 +1094,17 @@ return this[name] = cb; }; - Callbacks.prototype.execute = function(node) { + Callbacks.prototype.execute = function(node, keys) { var err, errors, k, len1, name, ref; - ref = this.keys; - for (k = 0, len1 = ref.length; k < len1; k++) { - name = ref[k]; + if (keys == null) { + keys = this.keys; + } + for (k = 0, len1 = keys.length; k < len1; k++) { + name = keys[k]; try { - this[name].call(node); + if ((ref = this[name]) != null) { + ref.call(node); + } } catch (_error) { err = _error; if (!errors) { @@ -1229,9 +1304,19 @@ quote: $('.postNum > a:nth-of-type(2)', info), comment: $('.postMessage', post), links: [], - quotelinks: [], - backlinks: info.getElementsByClassName('backlink') + quotelinks: [] }; + if ($.engine === 'edge') { + Object.defineProperty(this.nodes, 'backlinks', { + configurable: true, + enumerable: true, + get: function() { + return info.getElementsByClassName('backlink'); + } + }); + } else { + this.nodes.backlinks = info.getElementsByClassName('backlink'); + } if (!(this.isReply = $.hasClass(post, 'reply'))) { this.thread.OP = this; this.thread.isArchived = !!$('.archivedIcon', info); @@ -1447,7 +1532,7 @@ Post.prototype.resurrect = function() { var clone, k, len1, len2, q, quotelink, ref, ref1, strong; - delete this.isDead; + this.isDead = false; $.rmClass(this.nodes.root, 'deleted-post'); strong = $('strong.warning', this.nodes.info); if (this.file && this.file.isDead) { @@ -1475,7 +1560,6 @@ }; Post.prototype.collect = function() { - this.kill(); g.posts.rm(this.fullID); this.thread.posts.rm(this); return this.board.posts.rm(this); @@ -1522,9 +1606,19 @@ nameBlock: $('.nameBlock', info), quote: $('.postNum > a:nth-of-type(2)', info), comment: $('.postMessage', post), - quotelinks: [], - backlinks: info.getElementsByClassName('backlink') + quotelinks: [] }; + if ($.engine === 'edge') { + Object.defineProperty(this.nodes, 'backlinks', { + configurable: true, + enumerable: true, + get: function() { + return info.getElementsByClassName('backlink'); + } + }); + } else { + this.nodes.backlinks = info.getElementsByClassName('backlink'); + } ref1 = $$('.inline', post); for (q = 0, len2 = ref1.length; q < len2; q++) { inline = ref1[q]; @@ -2052,19 +2146,27 @@ function Connection(target1, origin1, cb1) { this.target = target1; this.origin = origin1; - this.cb = cb1; + this.cb = cb1 != null ? cb1 : {}; this.onMessage = bind(this.onMessage, this); this.send = bind(this.send, this); $.on(window, 'message', this.onMessage); } + Connection.prototype.targetWindow = function() { + if (this.target instanceof window.HTMLIFrameElement) { + return this.target.contentWindow; + } else { + return this.target; + } + }; + Connection.prototype.send = function(data) { - return this.target.postMessage("" + g.NAMESPACE + (JSON.stringify(data)), this.origin); + return this.targetWindow().postMessage("" + g.NAMESPACE + (JSON.stringify(data)), this.origin); }; Connection.prototype.onMessage = function(e) { var base1, data, type, value; - if (!(e.source === this.target && e.origin === this.origin && typeof e.data === 'string' && e.data.slice(0, g.NAMESPACE.length) === g.NAMESPACE)) { + if (!(e.source === this.targetWindow() && e.origin === this.origin && typeof e.data === 'string' && e.data.slice(0, g.NAMESPACE.length) === g.NAMESPACE)) { return; } data = JSON.parse(e.data.slice(g.NAMESPACE.length)); @@ -2184,7 +2286,7 @@ if (/^https:\/\//.test(url) || location.protocol === 'http:') { $.cache(url, (function(self) { return function() { - return self.parseArchivedPost(this.response); + return self.parseArchivedPost(this.response, url); }; })(this), { responseType: 'json', @@ -2205,7 +2307,7 @@ } } } - return _this.parseArchivedPost(response); + return _this.parseArchivedPost(response, url); }; })(this)); return true; @@ -2213,8 +2315,8 @@ return false; }; - Fetcher.prototype.parseArchivedPost = function(data) { - var board, comment, greentext, i, j, o, post, ref, text, text2, thread; + Fetcher.prototype.parseArchivedPost = function(data, url) { + var board, comment, greentext, i, j, key, o, post, ref, ref1, text, text2, thread, val; if (post = g.posts[this.boardID + "." + this.postID]) { this.insert(post); return; @@ -2291,6 +2393,13 @@ delete o.info.uniqueID; } if ((ref = data.media) != null ? ref.media_filename : void 0) { + ref1 = data.media; + for (key in ref1) { + val = ref1[key]; + if (/_link$/.test(key) && (val != null ? val[0] : void 0) === '/') { + data.media[key] = url.split('/', 3).join('/') + val; + } + } o.file = { name: data.media.media_filename, url: data.media.media_link || data.media.remote_media_link || (location.protocol + "//i.4cdn.org/" + this.boardID + "/" + (encodeURIComponent(data.media[this.boardID === 'f' ? 'media_filename' : 'media_orig']))), @@ -2364,26 +2473,7 @@ Polyfill = { init: function() { - this.notificationPermission(); - this.toBlob(); - return this.visibility(); - }, - notificationPermission: function() { - if (!window.Notification || 'permission' in Notification || !window.webkitNotifications) { - return; - } - return Object.defineProperty(Notification, 'permission', { - get: function() { - switch (webkitNotifications.checkPermission()) { - case 0: - return 'granted'; - case 1: - return 'default'; - case 2: - return 'denied'; - } - } - }); + return this.toBlob(); }, toBlob: function() { var base1; @@ -2399,26 +2489,6 @@ type: 'image/png' })); }); - }, - visibility: function() { - if ('visibilityState' in d) { - return; - } - Object.defineProperties(HTMLDocument.prototype, { - visibilityState: { - get: function() { - return this.webkitVisibilityState; - } - }, - hidden: { - get: function() { - return this.webkitHidden; - } - } - }); - return $.on(d, 'webkitvisibilitychange', function() { - return $.event('visibilitychange'); - }); } }; @@ -3152,7 +3222,7 @@ $.asap((function() { return $('.board > .thread > .postContainer', doc) || d.readyState !== 'loading'; }), function() { - var board, el, len3, len4, ref6, ref7, ref8, threadRoot, topNavPos, u, w; + var board, el, len3, len4, ref6, ref7, threadRoot, topNavPos, u, v; if (!Main.isThisPageLegit()) { return; } @@ -3169,13 +3239,11 @@ $.event('PostsInserted'); d.implementation.createDocument(null, null, null).appendChild(board); ref7 = $$('.navLinks'); - for (w = 0, len4 = ref7.length; w < len4; w++) { - el = ref7[w]; + for (v = 0, len4 = ref7.length; v < len4; v++) { + el = ref7[v]; $.rm(el); } - if ((ref8 = $.id('search-box')) != null) { - ref8.parentNode.remove(); - } + $.rm($.id('ctrl-top')); topNavPos = $.id('delform').previousElementSibling; $.before(topNavPos, $.el('hr')); return $.before(topNavPos, Index.navLinks); @@ -3348,7 +3416,6 @@ var mode, page, ref, ref1, search, state; if (e != null ? e.state : void 0) { ref = e.state, search = ref.search, mode = ref.mode; - page = Index.getCurrentPage(); state = {}; if (Index.search !== search) { state.search = Index.search = search; @@ -3357,6 +3424,7 @@ state.mode = mode; Index.saveMode(mode); } + page = Index.getCurrentPage(); if (Index.currentPage !== page) { state.page = Index.currentPage = page; } @@ -3600,7 +3668,6 @@ }, update: function(state) { var now, ref, ref1; - delete Index.pageNum; if ((ref = Index.req) != null) { ref.abort(); } @@ -3915,10 +3982,12 @@ Index.pushState({ page: page }); + Index.setPage(); } } nodes = Index.buildSinglePage(Index.getCurrentPage()); } + delete Index.pageNum; $.rmAll(Index.root); $.rmAll(Header.hover); if (Conf['Index Mode'] === 'catalog') { @@ -4237,7 +4306,7 @@ return Build.postFromObject(data, board.ID); }, catalogThread: function(thread) { - var br, cc, comment, data, exif, fileCount, gifIcon, href, imgClass, k, len1, len2, len3, len4, pageCount, postCount, pp, q, quote, ref, ref1, ref2, ref3, ref4, root, spoilerRange, src, staticPath, u, w; + var br, cc, comment, data, exif, fileCount, gifIcon, href, imgClass, k, len1, len2, len3, len4, pageCount, postCount, pp, q, quote, ref, ref1, ref2, ref3, ref4, root, spoilerRange, src, staticPath, u, v; staticPath = Build.staticPath, gifIcon = Build.gifIcon; data = Index.liveThreadData[Index.liveThreadIDs.indexOf(thread.ID)]; if (data.spoiler && !Conf['Reveal Spoiler Thumbnails']) { @@ -4295,8 +4364,8 @@ $.replace(pp, cc); } ref3 = $$('br', root.lastElementChild); - for (w = 0, len4 = ref3.length; w < len4; w++) { - br = ref3[w]; + for (v = 0, len4 = ref3.length; v < len4; v++) { + br = ref3[v]; if (((ref4 = br.previousSibling) != null ? ref4.nodeName : void 0) === 'BR') { $.rm(br); } @@ -4550,9 +4619,18 @@ }; Menu.prototype.insertEntry = function(entry, parent, data) { - var k, len1, ref, subEntry, submenu; + var err, k, len1, ref, subEntry, submenu; if (typeof entry.open === 'function') { - if (!entry.open(data)) { + try { + if (!entry.open(data)) { + return; + } + } catch (_error) { + err = _error; + Main.handleErrors({ + message: "Error in building the " + this.type + " menu.", + error: err + }); return; } } @@ -4871,25 +4949,36 @@ CrossOrigin = (function() { return { binary: function(url, cb, headers) { + var options, ref, workaround; if (headers == null) { headers = {}; } - return GM_xmlhttpRequest({ + workaround = $.engine === 'gecko' && (typeof GM_info !== "undefined" && GM_info !== null) && /^[0-2]\.|^3\.[01](?!\d)/.test(GM_info.version); + workaround || (workaround = (typeof GM_info !== "undefined" && GM_info !== null ? (ref = GM_info.script) != null ? ref.includeJSB : void 0 : void 0) != null); + options = { method: "GET", url: url, headers: headers, - overrideMimeType: "text/plain; charset=x-user-defined", onload: function(xhr) { - var contentDisposition, contentType, data, i, r, ref, ref1; - r = xhr.responseText; - data = new Uint8Array(r.length); - i = 0; - while (i < r.length) { - data[i] = r.charCodeAt(i); - i++; + var contentDisposition, contentType, data, i, r, ref1, ref2; + if (workaround) { + r = xhr.responseText; + data = new Uint8Array(r.length); + i = 0; + while (i < r.length) { + data[i] = r.charCodeAt(i); + i++; + } + } else { + data = new Uint8Array(xhr.response); + } + if (typeof xhr.responseHeaders === 'object') { + contentType = xhr.responseHeaders['Content-Type']; + contentDisposition = xhr.responseHeaders['Content-Disposition']; + } else { + contentType = (ref1 = xhr.responseHeaders.match(/Content-Type:\s*(.*)/i)) != null ? ref1[1] : void 0; + contentDisposition = (ref2 = xhr.responseHeaders.match(/Content-Disposition:\s*(.*)/i)) != null ? ref2[1] : void 0; } - contentType = (ref = xhr.responseHeaders.match(/Content-Type:\s*(.*)/i)) != null ? ref[1] : void 0; - contentDisposition = (ref1 = xhr.responseHeaders.match(/Content-Disposition:\s*(.*)/i)) != null ? ref1[1] : void 0; return cb(data, contentType, contentDisposition); }, onerror: function() { @@ -4898,11 +4987,17 @@ onabort: function() { return cb(null); } - }); + }; + if (workaround) { + options.overrideMimeType = options.mimeType = 'text/plain; charset=x-user-defined'; + } else { + options.responseType = 'arraybuffer'; + } + return GM_xmlhttpRequest(options); }, file: function(url, cb) { return CrossOrigin.binary(url, function(data, contentType, contentDisposition) { - var blob, match, mime, name, ref, ref1, ref2; + var blob, match, mime, name, ref, ref1, ref2, ref3; if (data == null) { return cb(null); } @@ -4912,6 +5007,9 @@ if (match) { name = match.replace(/\\"/g, '"'); } + if ((typeof GM_info !== "undefined" && GM_info !== null ? (ref3 = GM_info.script) != null ? ref3.includeJSB : void 0 : void 0) != null) { + mime = QR.typeFromExtension[name.match(/[^.]*$/)[0].toLowerCase()] || 'application/octet-stream'; + } blob = new Blob([data], { type: mime }); @@ -5011,7 +5109,7 @@ Filter = { filters: {}, init: function() { - var boards, err, filter, hl, k, key, len1, line, op, ref, ref1, ref2, ref3, ref4, ref5, ref6, regexp, stub, top; + var boards, err, filter, hl, k, key, len1, line, op, ref, ref1, ref2, ref3, ref4, ref5, regexp, stub, top; if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Filter'])) { return; } @@ -5031,9 +5129,7 @@ } filter = line.replace(regexp[0], ''); boards = ((ref2 = filter.match(/boards:([^;]+)/)) != null ? ref2[1].toLowerCase() : void 0) || 'global'; - if (boards !== 'global' && (ref3 = g.BOARD.ID, indexOf.call(boards.split(','), ref3) < 0)) { - continue; - } + boards = boards === 'global' ? null : boards.split(','); if (key === 'uniqueID' || key === 'MD5') { regexp = regexp[1]; } else { @@ -5045,10 +5141,10 @@ continue; } } - op = ((ref4 = filter.match(/[^t]op:(yes|no|only)/)) != null ? ref4[1] : void 0) || 'yes'; + op = ((ref3 = filter.match(/[^t]op:(yes|no|only)/)) != null ? ref3[1] : void 0) || 'yes'; stub = (function() { - var ref5; - switch ((ref5 = filter.match(/stub:(yes|no)/)) != null ? ref5[1] : void 0) { + var ref4; + switch ((ref4 = filter.match(/stub:(yes|no)/)) != null ? ref4[1] : void 0) { case 'yes': return true; case 'no': @@ -5058,11 +5154,11 @@ } })(); if (hl = /highlight/.test(filter)) { - hl = ((ref5 = filter.match(/highlight:([\w-]+)/)) != null ? ref5[1] : void 0) || 'filter-highlight'; - top = ((ref6 = filter.match(/top:(yes|no)/)) != null ? ref6[1] : void 0) || 'yes'; + hl = ((ref4 = filter.match(/highlight:([\w-]+)/)) != null ? ref4[1] : void 0) || 'filter-highlight'; + top = ((ref5 = filter.match(/top:(yes|no)/)) != null ? ref5[1] : void 0) || 'yes'; top = top === 'yes'; } - this.filters[key].push(this.createFilter(regexp, op, stub, hl, top)); + this.filters[key].push(this.createFilter(regexp, boards, op, stub, hl, top)); } if (!this.filters[key].length) { delete this.filters[key]; @@ -5076,7 +5172,7 @@ cb: this.node }); }, - createFilter: function(regexp, op, stub, hl, top) { + createFilter: function(regexp, boards, op, stub, hl, top) { var settings, test; test = typeof regexp === 'string' ? function(value) { return regexp === value; @@ -5089,7 +5185,10 @@ "class": hl, top: top }; - return function(value, isReply) { + return function(value, boardID, isReply) { + if (boards && indexOf.call(boards, boardID) < 0) { + return false; + } if (isReply && op === 'only' || !isReply && op === 'no') { return false; } @@ -5109,7 +5208,7 @@ ref = Filter.filters[key]; for (k = 0, len1 = ref.length; k < len1; k++) { filter = ref[k]; - if (!(result = filter(value, this.isReply))) { + if (!(result = filter(value, this.board.ID, this.isReply))) { continue; } if (result.hide && !this.isFetchedQuote) { @@ -5140,7 +5239,7 @@ ref = Filter.filters[key]; for (k = 0, len1 = ref.length; k < len1; k++) { filter = ref[k]; - if (result = filter(value, post.isReply)) { + if (result = filter(value, post.boardID, post.isReply)) { if (result.hide) { return true; } @@ -6703,8 +6802,18 @@ QR = { mimeTypes: ['image/jpeg', 'image/png', 'image/gif', 'application/pdf', 'application/vnd.adobe.flash.movie', 'application/x-shockwave-flash', 'video/webm'], + validExtension: /\.(jpe?g|png|gif|pdf|swf|webm)$/i, + typeFromExtension: { + 'jpg': 'image/jpeg', + 'jpeg': 'image/jpeg', + 'png': 'image/png', + 'gif': 'image/gif', + 'pdf': 'application/pdf', + 'swf': 'application/vnd.adobe.flash.movie', + 'webm': 'video/webm' + }, init: function() { - var noscript, sc; + var noscript, sc, version; if (!Conf['Quick Reply']) { return; } @@ -6713,8 +6822,8 @@ if (g.VIEW === 'archive') { return; } - noscript = Conf['Force Noscript Captcha'] || !$.hasClass(doc, 'js-enabled'); - this.captcha = Captcha[noscript ? 'noscript' : 'v2']; + version = Conf['Use Recaptcha v1'] ? (noscript = Conf['Force Noscript Captcha'] || !$.hasClass(doc, 'js-enabled'), noscript ? 'noscript' : 'v1') : 'v2'; + this.captcha = Captcha[version]; $.on(d, '4chanXInitFinished', this.initReady); Post.callbacks.push({ name: 'Quick Reply', @@ -6867,16 +6976,20 @@ QR.hasFocus = d.activeElement && QR.nodes.el.contains(d.activeElement); QR.nodes.el.classList.toggle('focus', QR.hasFocus); } - if (QR.inCaptcha()) { - QR.scrollY = window.scrollY; - return $.on(d, 'scroll', QR.scrollLock); - } else { - return $.off(d, 'scroll', QR.scrollLock); + if (QR.captcha.isEnabled && QR.captcha === Captcha.v2 && !QR.captcha.noscript) { + if (QR.inCaptcha()) { + QR.scrollY = window.scrollY; + return $.on(d, 'scroll', QR.scrollLock); + } else { + return $.off(d, 'scroll', QR.scrollLock); + } } }); }, inBubble: function() { - return $$('.goog-bubble-content > iframe').some(function(el) { + var bubbles, ref; + bubbles = $$('.goog-bubble-content > iframe'); + return (ref = d.activeElement, indexOf.call(bubbles, ref) >= 0) || bubbles.some(function(el) { return el.getBoundingClientRect().bottom > 0; }); }, @@ -6937,24 +7050,26 @@ return alert(el.textContent); } } else if (d.hidden || !(focusOverride || d.hasFocus())) { - notif = new Notification(el.textContent, { - body: el.textContent, - icon: Favicon.logo - }); - notif.onclick = function() { - return window.focus(); - }; - if (typeof chrome !== "undefined" && chrome !== null) { - notif.onclose = function() { - return notice.close(); + try { + notif = new Notification(el.textContent, { + body: el.textContent, + icon: Favicon.logo + }); + notif.onclick = function() { + return window.focus(); }; - return notif.onshow = function() { - return setTimeout(function() { - notif.onclose = null; - return notif.close(); - }, 7 * $.SECOND); - }; - } + if ($.engine !== 'gecko') { + notif.onclose = function() { + return notice.close(); + }; + return notif.onshow = function() { + return setTimeout(function() { + notif.onclose = null; + return notif.close(); + }, 7 * $.SECOND); + }; + } + } catch (_error) {} } }, notifications: [], @@ -6984,7 +7099,7 @@ return status.disabled = disabled || false; }, quote: function(e) { - var ancestor, caretPos, com, frag, index, insideCode, k, len1, len2, len3, len4, len5, len6, node, post, q, range, ref, ref1, ref2, ref3, ref4, ref5, ref6, ref7, sel, text, thread, u, w, y, z; + var ancestor, caretPos, com, frag, index, insideCode, k, len1, len2, len3, len4, len5, len6, node, post, q, range, ref, ref1, ref2, ref3, ref4, ref5, ref6, ref7, sel, text, thread, u, v, w, y; if (e != null) { e.preventDefault(); } @@ -7024,18 +7139,18 @@ $.replace(node, [$.tn('[spoiler]')].concat(slice.call(node.childNodes), [$.tn('[/spoiler]')])); } ref3 = $$('.prettyprint', frag); - for (w = 0, len4 = ref3.length; w < len4; w++) { - node = ref3[w]; + for (v = 0, len4 = ref3.length; v < len4; v++) { + node = ref3[v]; $.replace(node, [$.tn('[code]')].concat(slice.call(node.childNodes), [$.tn('[/code]')])); } ref4 = $$('.linkify[data-original]', frag); - for (y = 0, len5 = ref4.length; y < len5; y++) { - node = ref4[y]; + for (w = 0, len5 = ref4.length; w < len5; w++) { + node = ref4[w]; $.replace(node, $.tn(node.dataset.original)); } ref5 = $$('.embedder', frag); - for (z = 0, len6 = ref5.length; z < len6; z++) { - node = ref5[z]; + for (y = 0, len6 = ref5.length; y < len6; y++) { + node = ref5[y]; if (((ref6 = node.previousSibling) != null ? ref6.nodeValue : void 0) === ' ') { $.rm(node.previousSibling); } @@ -7147,7 +7262,7 @@ blob = new Blob([arr], { type: m[1] }); - blob.name = "image." + m[2]; + blob.name = "file." + m[2]; QR.handleFiles([blob]); } else if (/^https?:\/\//.test(src)) { QR.handleUrl(src); @@ -7350,7 +7465,7 @@ window.addEventListener('focus', QR.focus, true); window.addEventListener('blur', QR.focus, true); $.on(d, 'click', QR.focus); - if (typeof chrome === "undefined" || chrome === null) { + if ($.engine === 'gecko') { nodes.pasteArea.hidden = false; new MutationObserver(QR.pasteFF).observe(nodes.pasteArea, { childList: true @@ -7368,7 +7483,7 @@ event = node.nodeName === 'SELECT' ? 'change' : 'input'; $.on(nodes[name], event, save); } - if (Conf['Remember QR Size']) { + if ($.engine === 'gecko' && Conf['Remember QR Size']) { $.get('QR Size', '', function(item) { return nodes.com.style.cssText = item['QR Size']; }); @@ -7383,7 +7498,7 @@ QR.persona.init(); new QR.post(true); QR.status(); - QR.cooldown.init(); + QR.cooldown.setup(); QR.captcha.init(); $.add(d.body, dialog); QR.captcha.setup(); @@ -7477,7 +7592,6 @@ upCallbacks: { onload: function() { QR.req.isUploadFinished = true; - QR.req.uploadEndTime = Date.now(); QR.req.progress = '...'; return QR.status(); }, @@ -7489,7 +7603,12 @@ }; cb = function(response) { if (response != null) { - extra.form.append('g-recaptcha-response', response); + if (response.challenge != null) { + extra.form.append('recaptcha_challenge_field', response.challenge); + extra.form.append('recaptcha_response_field', response.response); + } else { + extra.form.append('g-recaptcha-response', response.response); + } } QR.req = $.ajax("https://sys.4chan.org/" + g.BOARD + "/post", options, extra); return QR.req.progress = '...'; @@ -7601,7 +7720,7 @@ post.rm(); QR.captcha.setup(d.activeElement === QR.nodes.status); } - QR.cooldown.add(req.uploadEndTime, threadID, postID); + QR.cooldown.add(threadID, postID); URL = threadID === postID ? window.location.origin + "/" + g.BOARD + "/thread/" + threadID : g.VIEW === 'index' && lastPostToThread && Conf['Open Post in New Tab'] ? window.location.origin + "/" + g.BOARD + "/thread/" + threadID + "#p" + postID : void 0; if (URL) { open = Conf['Open Post in New Tab'] || postsCount ? function() { @@ -7651,13 +7770,17 @@ Captcha = {}; Captcha.fixes = { - css: '.rc-imageselect-target > .rc-imageselect-tile > img:focus {\n outline: 2px solid #4a90e2;\n}\n.rc-button-default:focus {\n box-shadow: inset 0 0 0 2px #0063d6;\n}', + imageKeys: '789456123uiojklm'.split('').concat(['Comma', 'Period']), + css: '.rc-imageselect-target > div:focus {\n outline: 2px solid #4a90e2;\n}\n.rc-button-default:focus {\n box-shadow: inset 0 0 0 2px #0063d6;\n}', + cssNoscript: '.fbc-payload-imageselect {\n position: relative;\n}\n.fbc-payload-imageselect > label {\n position: absolute;\n display: block;\n height: 93.3px;\n width: 93.3px;\n}\nlabel[data-row="0"] {top: 0px;}\nlabel[data-row="1"] {top: 93.3px;}\nlabel[data-row="2"] {top: 186.6px;}\nlabel[data-col="0"] {left: 0px;}\nlabel[data-col="1"] {left: 93.3px;}\nlabel[data-col="2"] {left: 186.6px;}', init: function() { switch (location.pathname.split('/')[3]) { case 'anchor': return this.initMain(); case 'frame': return this.initPopup(); + case 'fallback': + return this.initNoscript(); } }, initMain: function() { @@ -7687,84 +7810,119 @@ }); return $.on(d, 'keydown', this.keybinds.bind(this)); }, - fixImages: function() { - var focus, img, k, len1, ref; - if (!(this.images = $$('.rc-imageselect-target > .rc-imageselect-tile > img')).length) { + initNoscript: function() { + this.noscript = true; + this.images = $$('.fbc-payload-imageselect > input'); + if (!this.images.length) { return; } - focus = this.images[0].tabIndex !== 0; + $.addStyle(this.cssNoscript); + this.addLabels(); + $.on(d, 'keydown', this.keybinds.bind(this)); + return $.on($('.fbc-imageselect-challenge > form'), 'submit', this.checkForm.bind(this)); + }, + fixImages: function() { + var img, k, len1, ref; + this.images = $$('.rc-imageselect-target > div'); ref = this.images; for (k = 0, len1 = ref.length; k < len1; k++) { img = ref[k]; img.tabIndex = 0; } - if (focus) { - return $.queueTask((function(_this) { - return function() { - return _this.focusImage(); - }; - })(this)); + if (this.images.length) { + return this.addTooltips(this.images); } }, - focusImage: function() { - var img; - img = this.images[0]; - return $.asap(function() { - if (!doc.contains(img)) { - return true; + addLabels: function() { + var checkbox, i, imageSelect, label, labels; + imageSelect = $('.fbc-payload-imageselect'); + labels = (function() { + var k, len1, ref, results; + ref = this.images; + results = []; + for (i = k = 0, len1 = ref.length; k < len1; i = ++k) { + checkbox = ref[i]; + checkbox.id = "checkbox-" + i; + label = $.el('label', { + htmlFor: checkbox.id + }); + label.dataset.row = Math.floor(i / 3); + label.dataset.col = i % 3; + results.push(label); } - img.focus(); - return d.activeElement === img; - }, function() {}); + return results; + }).call(this); + $.add(imageSelect, labels); + return this.addTooltips(labels); + }, + addTooltips: function(nodes) { + var i, k, len1, node; + for (i = k = 0, len1 = nodes.length; k < len1; i = ++k) { + node = nodes[i]; + node.title = this.imageKeys[i] + " or " + (this.imageKeys[i + 9][0].toUpperCase()) + this.imageKeys[i + 9].slice(1); + } + }, + checkForm: function(e) { + var checkbox, k, len1, n, ref; + n = 0; + ref = this.images; + for (k = 0, len1 = ref.length; k < len1; k++) { + checkbox = ref[k]; + if (checkbox.checked) { + n++; + } + } + if (n === 0) { + return e.preventDefault(); + } }, keybinds: function(e) { - var dx, reload, verify, x; - if (!(this.images && doc.contains(this.images[0]) && d.activeElement)) { + var dx, i, key, reload, verify, x; + if (!(this.images && doc.contains(this.images[0]))) { return; } - reload = $.id('recaptcha-reload-button'); - verify = $.id('recaptcha-verify-button'); + reload = $('#recaptcha-reload-button, .fbc-button-reload'); + verify = $('#recaptcha-verify-button, .fbc-button-verify > input'); x = this.images.indexOf(d.activeElement); if (x < 0) { - if (!$('.rc-controls').contains(d.activeElement)) { - return; - } x = d.activeElement === verify ? 11 : 9; } - if (!(dx = { - 38: 9, - 40: 3, - 37: 11, - 39: 1, - 73: 9, - 75: 3, - 74: 11, - 76: 1 - }[e.keyCode])) { + key = Keybinds.keyCode(e); + if (!this.noscript && key === 'Space' && x < 9) { + this.images[x].click(); + } else if ((i = this.imageKeys.indexOf(key)) >= 0) { + this.images[i % 9].click(); + verify.focus(); + } else if (dx = { + 'Up': 9, + 'Down': 3, + 'Left': 11, + 'Right': 1 + }[key]) { + x = (x + dx) % 12; + if (x === 10) { + x = dx === 11 ? 9 : 11; + } + (this.images[x] || { + 9: reload, + 11: verify + }[x]).focus(); + } else { return; } - x = (x + dx) % 12; - if (x === 10) { - x = dx === 11 ? 9 : 11; - } - (this.images[x] || { - 9: reload, - 11: verify - }[x]).focus(); e.preventDefault(); return e.stopPropagation(); } }; Captcha.noscript = { - lifetime: 2 * $.MINUTE, - iframeURL: '//www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc', + lifetime: 30 * $.MINUTE, init: function() { var container, input; if (d.cookie.indexOf('pass_enabled=1') >= 0) { return; } - if (!(this.isEnabled = !!$.id('g-recaptcha'))) { + if (!(this.isEnabled = !!$('#g-recaptcha, #captchaContainerAlt'))) { return; } container = $.el('div', { @@ -7793,7 +7951,7 @@ token: this.save.bind(this), error: this.error.bind(this) }); - $.addClass(QR.nodes.el, 'has-captcha'); + $.addClass(QR.nodes.el, 'has-captcha', 'captcha-v1', 'noscript-captcha'); $.after(QR.nodes.com.parentNode, [container, input]); this.captchas = []; $.get('captchas', [], function(arg) { @@ -7810,17 +7968,20 @@ var cb, conn, img, ref, ref1; conn = new Connection(window.parent, location.protocol + "//boards.4chan.org", { response: function(response) { - $.id('response').value = response; - return $('.fbc-challenge > form').submit(); + $.id('recaptcha_response_field').value = response; + return HTMLFormElement.prototype.submit.call($('form')); } }); - conn.send({ - token: (ref = $('.fbc-verification-token > textarea')) != null ? ref.value : void 0, - error: (ref1 = $('.fbc-error')) != null ? ref1.textContent : void 0 - }); - if (!(img = $('.fbc-payload > img'))) { + if (location.hash === '#response') { + conn.send({ + token: (ref = $('textarea')) != null ? ref.value : void 0, + error: (ref1 = $('.recaptcha_input_area')) != null ? ref1.textContent.replace(/:$/, '') : void 0 + }); + } + if (!(img = $('img'))) { return; } + $('form').action = '#response'; cb = function() { var canvas; canvas = $.el('canvas'); @@ -7838,6 +7999,14 @@ } }, timers: {}, + iframeURL: function() { + var lang, url; + url = '//www.google.com/recaptcha/api/noscript?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc'; + if (lang = Conf['captchaLanguage'].trim()) { + url += "&hl=" + (encodeURIComponent(lang)); + } + return url; + }, cb: { focus: function() { return QR.captcha.setup(false, true); @@ -7873,12 +8042,12 @@ if (!this.nodes.iframe) { this.nodes.iframe = $.el('iframe', { id: 'qr-captcha-iframe', - src: this.iframeURL + src: this.iframeURL() }); - $.add(d.body, this.nodes.iframe); - this.conn.target = this.nodes.iframe.contentWindow; + $.add(QR.nodes.el, this.nodes.iframe); + this.conn.target = this.nodes.iframe; } else if (!this.occupied || force) { - this.nodes.iframe.src = this.iframeURL; + this.nodes.iframe.src = this.iframeURL(); } this.occupied = true; if (focus) { @@ -7901,13 +8070,9 @@ if (!this.isEnabled) { return; } - if (this.nodes.img) { - $.rm(this.nodes.img); - } + $.rm(this.nodes.img); delete this.nodes.img; - if (this.nodes.iframe) { - $.rm(this.nodes.iframe); - } + $.rm(this.nodes.iframe); delete this.nodes.iframe; delete this.occupied; return this.beforeSetup(); @@ -7925,7 +8090,7 @@ if (captcha = this.captchas.shift()) { this.count(); $.set('captchas', this.captchas); - return captcha.response; + return captcha; } else if (/\S/.test(this.nodes.input.value)) { return (function(_this) { return function(cb) { @@ -7947,10 +8112,16 @@ } }, save: function(token) { + var captcha; delete this.occupied; this.nodes.input.value = ''; + captcha = { + challenge: token, + response: 'manual_challenge', + timeout: this.timeout + }; if (this.submitCB) { - this.submitCB(token); + this.submitCB(captcha); delete this.submitCB; if (this.needed()) { return this.reload(); @@ -7959,10 +8130,7 @@ } } else { $.forceSync('captchas'); - this.captchas.push({ - response: token, - timeout: this.timeout - }); + this.captchas.push(captcha); this.count(); $.set('captchas', this.captchas); return this.reload(); @@ -8055,7 +8223,7 @@ }, reload: function() { var ref; - this.nodes.iframe.src = this.iframeURL; + this.nodes.iframe.src = this.iframeURL(); this.occupied = true; return (ref = this.nodes.img) != null ? ref.hidden = true : void 0; }, @@ -8075,6 +8243,362 @@ } }; + Captcha.replace = { + init: function() { + var jsEnabled; + if (!(d.cookie.indexOf('pass_enabled=1') < 0)) { + return; + } + if (location.hostname === 'boards.4chan.org' && Conf['Hide Original Post Form']) { + return; + } + jsEnabled = $.hasClass(doc, 'js-enabled'); + if (location.hostname === 'sys.4chan.org' && Conf['Use Recaptcha v2 in Reports'] && jsEnabled) { + $.ready(Captcha.replace.v2); + return; + } + if (Conf['Use Recaptcha v1'] && jsEnabled && location.hostname !== 'www.4chan.org') { + $.ready(Captcha.replace.v1); + return; + } + if (Conf['captchaLanguage'].trim()) { + if (location.hostname === 'boards.4chan.org') { + return $.onExists(doc, '#captchaFormPart', true, function(node) { + return $.onExists(node, 'iframe', true, Captcha.replace.iframe); + }); + } else { + return $.onExists(doc, 'iframe', true, Captcha.replace.iframe); + } + } + }, + v1: function() { + var form, link; + if (!$.id('g-recaptcha')) { + return; + } + Captcha.v1.replace(); + if (link = $.id('form-link')) { + return $.on(link, 'click', function() { + return Captcha.v1.create(); + }); + } else if (location.hostname === 'boards.4chan.org') { + form = $.id('postForm'); + return form.addEventListener('focus', (function() { + return Captcha.v1.create(); + }), true); + } else { + return Captcha.v1.create(); + } + }, + v2: function() { + var container, lang, old, script, url; + if (!(old = $.id('captchaContainerAlt'))) { + return; + } + container = $.el('div', { + className: 'g-recaptcha' + }); + $.extend(container.dataset, { + sitekey: '6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc', + tabindex: 3 + }); + $.replace(old, container); + url = 'https://www.google.com/recaptcha/api.js'; + if (lang = Conf['captchaLanguage'].trim()) { + url += "?hl=" + (encodeURIComponent(lang)); + } + script = $.el('script', { + src: url + }); + return $.add(d.head, script); + }, + iframe: function(el) { + var lang, src; + if (!(lang = Conf['captchaLanguage'].trim())) { + return; + } + src = /[?&]hl=/.test(el.src) ? el.src.replace(/([?&]hl=)[^&]*/, '$1' + encodeURIComponent(lang)) : el.src + ("&hl=" + (encodeURIComponent(lang))); + if (el.src !== src) { + return el.src = src; + } + } + }; + + Captcha.v1 = { + blank: "data:image/svg+xml,", + init: function() { + var imgContainer, input; + if (d.cookie.indexOf('pass_enabled=1') >= 0) { + return; + } + if (!(this.isEnabled = !!$('#g-recaptcha, #captchaContainerAlt'))) { + return; + } + imgContainer = $.el('div', { + className: 'captcha-img', + title: 'Reload reCAPTCHA' + }); + $.extend(imgContainer, { + innerHTML: "" + }); + input = $.el('input', { + className: 'captcha-input field', + title: 'Verification', + autocomplete: 'off', + spellcheck: false + }); + this.nodes = { + img: imgContainer.firstChild, + input: input + }; + $.on(input, 'blur', QR.focusout); + $.on(input, 'focus', QR.focusin); + $.on(input, 'keydown', QR.captcha.keydown.bind(QR.captcha)); + $.on(this.nodes.img.parentNode, 'click', QR.captcha.reload.bind(QR.captcha)); + $.addClass(QR.nodes.el, 'has-captcha', 'captcha-v1'); + $.after(QR.nodes.com.parentNode, [imgContainer, input]); + this.captchas = []; + $.get('captchas', [], function(arg) { + var captchas; + captchas = arg.captchas; + QR.captcha.sync(captchas); + return QR.captcha.clear(); + }); + $.sync('captchas', this.sync); + this.replace(); + this.beforeSetup(); + if (Conf['Auto-load captcha']) { + this.setup(); + } + new MutationObserver(this.afterSetup).observe($.id('captchaContainerAlt'), { + childList: true + }); + return this.afterSetup(); + }, + replace: function() { + var container, old; + if (this.script) { + return; + } + if (!(this.script = $('script[src="//www.google.com/recaptcha/api/js/recaptcha_ajax.js"]', d.head))) { + this.script = $.el('script', { + src: '//www.google.com/recaptcha/api/js/recaptcha_ajax.js' + }); + $.add(d.head, this.script); + } + if (old = $.id('g-recaptcha')) { + container = $.el('div', { + id: 'captchaContainerAlt' + }); + return $.replace(old, container); + } + }, + create: function() { + return $.globalEval('(function() {\n var container = document.getElementById("captchaContainerAlt");\n if (container.firstChild) return;\n var options = {\n theme: "clean",\n tabindex: {"boards.4chan.org": 5, "sys.4chan.org": 3}[location.hostname]\n };\n if (window.Recaptcha) {\n window.Recaptcha.create("6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc", container, options);\n } else {\n var script = document.head.querySelector(\'script[src="//www.google.com/recaptcha/api/js/recaptcha_ajax.js"]\');\n script.addEventListener(\'load\', function() {\n window.Recaptcha.create("6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc", container, options);\n }, false);\n }\n})();'); + }, + cb: { + focus: function() { + return QR.captcha.setup(false, true); + } + }, + beforeSetup: function() { + var img, input, ref; + ref = this.nodes, img = ref.img, input = ref.input; + img.parentNode.hidden = true; + img.src = this.blank; + input.value = ''; + input.placeholder = 'Focus to load reCAPTCHA'; + this.count(); + return $.on(input, 'focus click', this.cb.focus); + }, + needed: function() { + var captchaCount, postsCount; + captchaCount = this.captchas.length; + if (QR.req) { + captchaCount++; + } + postsCount = QR.posts.length; + if (postsCount === 1 && !Conf['Auto-load captcha'] && !QR.posts[0].com && !QR.posts[0].file) { + postsCount = 0; + } + return captchaCount < postsCount; + }, + onNewPost: function() {}, + onPostChange: function() {}, + setup: function(focus, force) { + if (!(this.isEnabled && (force || this.needed()))) { + return; + } + this.create(); + if (focus) { + return this.nodes.input.focus(); + } + }, + afterSetup: function() { + var challenge, img, input, ref, setLifetime; + if (!(challenge = $.id('recaptcha_challenge_field_holder'))) { + return; + } + if (challenge === QR.captcha.nodes.challenge) { + return; + } + setLifetime = function(e) { + return QR.captcha.lifetime = e.detail; + }; + $.on(window, 'captcha:timeout', setLifetime); + $.globalEval('window.dispatchEvent(new CustomEvent("captcha:timeout", {detail: RecaptchaState.timeout}))'); + $.off(window, 'captcha:timeout', setLifetime); + ref = QR.captcha.nodes, img = ref.img, input = ref.input; + img.parentNode.hidden = false; + input.placeholder = 'Verification'; + QR.captcha.count(); + $.off(input, 'focus click', QR.captcha.cb.focus); + QR.captcha.nodes.challenge = challenge; + new MutationObserver(QR.captcha.load.bind(QR.captcha)).observe(challenge, { + childList: true, + subtree: true, + attributes: true + }); + QR.captcha.load(); + if (QR.nodes.el.getBoundingClientRect().bottom > doc.clientHeight) { + QR.nodes.el.style.top = null; + return QR.nodes.el.style.bottom = '0px'; + } + }, + destroy: function() { + if (!this.script) { + return; + } + $.globalEval('window.Recaptcha.destroy();'); + if (this.nodes) { + return this.beforeSetup(); + } + }, + sync: function(captchas) { + if (captchas == null) { + captchas = []; + } + QR.captcha.captchas = captchas; + return QR.captcha.count(); + }, + getOne: function() { + var captcha, challenge, response, timeout; + this.clear(); + if (captcha = this.captchas.shift()) { + this.count(); + $.set('captchas', this.captchas); + return captcha; + } else { + challenge = this.nodes.img.alt; + timeout = this.timeout; + if (/\S/.test(response = this.nodes.input.value)) { + this.destroy(); + return { + challenge: challenge, + response: response, + timeout: timeout + }; + } else { + return null; + } + } + }, + save: function() { + var response; + if (!/\S/.test(response = this.nodes.input.value)) { + return; + } + this.nodes.input.value = ''; + this.captchas.push({ + challenge: this.nodes.img.alt, + response: response, + timeout: this.timeout + }); + this.count(); + this.destroy(); + this.setup(false, true); + return $.set('captchas', this.captchas); + }, + clear: function() { + var captcha, i, k, len1, now, ref; + if (!this.captchas.length) { + return; + } + $.forceSync('captchas'); + now = Date.now(); + ref = this.captchas; + for (i = k = 0, len1 = ref.length; k < len1; i = ++k) { + captcha = ref[i]; + if (captcha.timeout > now) { + break; + } + } + if (!i) { + return; + } + this.captchas = this.captchas.slice(i); + this.count(); + return $.set('captchas', this.captchas); + }, + load: function() { + var challenge, challenge_image; + if ($('#captchaContainerAlt[class~="recaptcha_is_showing_audio"]')) { + this.nodes.img.src = this.blank; + return; + } + if (!this.nodes.challenge.firstChild) { + return; + } + if (!(challenge_image = $.id('recaptcha_challenge_image'))) { + return; + } + this.timeout = Date.now() + this.lifetime * $.SECOND - $.MINUTE; + challenge = this.nodes.challenge.firstChild.value; + this.nodes.img.alt = challenge; + this.nodes.img.src = challenge_image.src; + this.nodes.input.value = ''; + return this.clear(); + }, + count: function() { + var count, placeholder; + count = this.captchas ? this.captchas.length : 0; + placeholder = this.nodes.input.placeholder.replace(/\ \(.*\)$/, ''); + placeholder += (function() { + switch (count) { + case 0: + if (placeholder === 'Verification') { + return ' (Shift + Enter to cache)'; + } else { + return ''; + } + break; + case 1: + return ' (1 cached captcha)'; + default: + return " (" + count + " cached captchas)"; + } + })(); + this.nodes.input.placeholder = placeholder; + return this.nodes.input.alt = count; + }, + reload: function(focus) { + $.globalEval('if (window.Recaptcha.type === "image") {\n window.Recaptcha.reload();\n} else {\n window.Recaptcha.switch_type("image");\n}\nwindow.Recaptcha.should_focus = false;'); + if (focus) { + return this.nodes.input.focus(); + } + }, + keydown: function(e) { + if (e.keyCode === 8 && !this.nodes.input.value) { + this.reload(); + } else if (e.keyCode === 13 && e.shiftKey) { + this.save(); + } else { + return; + } + return e.preventDefault(); + } + }; + Captcha.v2 = { lifetime: 2 * $.MINUTE, init: function() { @@ -8082,9 +8606,19 @@ if (d.cookie.indexOf('pass_enabled=1') >= 0) { return; } - if (!(this.isEnabled = !!$.id('g-recaptcha'))) { + if (!(this.isEnabled = !!$('#g-recaptcha, #captchaContainerAlt'))) { return; } + if (this.noscript = Conf['Force Noscript Captcha'] || !$.hasClass(doc, 'js-enabled')) { + this.conn = new Connection(null, location.protocol + "//www.google.com", { + token: (function(_this) { + return function(token) { + return _this.save(true, token); + }; + })(this) + }); + $.addClass(QR.nodes.el, 'noscript-captcha'); + } this.captchas = []; $.get('captchas', [], function(arg) { var captchas; @@ -8104,9 +8638,19 @@ counter: counter }; this.count(); - $.addClass(QR.nodes.el, 'has-captcha'); + $.addClass(QR.nodes.el, 'has-captcha', 'captcha-v2'); $.after(QR.nodes.com.parentNode, root); $.on(counter, 'click', this.toggle.bind(this)); + $.on(counter, 'keydown', (function(_this) { + return function(e) { + if (Keybinds.keyCode(e) !== 'Space') { + return; + } + _this.toggle(); + e.preventDefault(); + return e.stopPropagation(); + }; + })(this)); return $.on(window, 'captcha:success', (function(_this) { return function() { return $.queueTask(function() { @@ -8115,9 +8659,26 @@ }; })(this)); }, + initFrame: function() { + var conn, ref, token; + if (token = (ref = $('.fbc-verification-token > textarea')) != null ? ref.value : void 0) { + conn = new Connection(window.parent, location.protocol + "//boards.4chan.org"); + return conn.send({ + token: token + }); + } + }, shouldFocus: false, timeouts: {}, postsCount: 0, + noscriptURL: function() { + var lang, url; + url = '//www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc'; + if (lang = Conf['captchaLanguage'].trim()) { + url += "&hl=" + (encodeURIComponent(lang)); + } + return url; + }, needed: function() { var captchaCount; captchaCount = this.captchas.length; @@ -8164,6 +8725,7 @@ if (this.nodes.container) { if (this.shouldFocus && (iframe = $('iframe', this.nodes.container))) { iframe.focus(); + QR.focus(); delete this.shouldFocus; } return; @@ -8176,6 +8738,22 @@ childList: true, subtree: true }); + if (this.noscript) { + return this.setupNoscript(); + } else { + return this.setupJS(); + } + }, + setupNoscript: function() { + var iframe; + iframe = $.el('iframe', { + id: 'qr-captcha-iframe', + src: this.noscriptURL() + }); + $.add(this.nodes.container, iframe); + return this.conn.target = iframe; + }, + setupJS: function() { return $.globalEval('(function() {\n function render() {\n var container = document.querySelector("#qr .captcha-container");\n container.dataset.widgetID = window.grecaptcha.render(container, {\n sitekey: \'6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc\',\n theme: document.documentElement.classList.contains(\'tomorrow\') ? \'dark\' : \'light\',\n callback: function(response) {\n window.dispatchEvent(new CustomEvent("captcha:success", {detail: response}));\n }\n });\n }\n if (window.grecaptcha) {\n render();\n } else {\n var cbNative = window.onRecaptchaLoaded;\n window.onRecaptchaLoaded = function() {\n render();\n cbNative();\n }\n }\n})();'); }, afterSetup: function(mutations) { @@ -8195,7 +8773,7 @@ } }, setupIFrame: function(iframe) { - this.setupTime = Date.now(); + Captcha.replace.iframe(iframe); $.addClass(QR.nodes.el, 'captcha-open'); if (QR.nodes.el.getBoundingClientRect().bottom > doc.clientHeight) { QR.nodes.el.style.top = null; @@ -8247,21 +8825,21 @@ if (captcha = this.captchas.shift()) { $.set('captchas', this.captchas); this.count(); - return captcha.response; + return captcha; } else { return null; } }, - save: function(pasted) { - var base1, focus, ref, ref1; + save: function(pasted, token) { + var base1, focus, ref; $.forceSync('captchas'); this.captchas.push({ - response: $('textarea', this.nodes.container).value, - timeout: (pasted ? this.setupTime : Date.now()) + this.lifetime + response: token || $('textarea', this.nodes.container).value, + timeout: Date.now() + this.lifetime }); $.set('captchas', this.captchas); this.count(); - focus = ((ref = d.activeElement) != null ? ref.nodeName : void 0) === 'IFRAME' && ((ref1 = d.activeElement.src) != null ? ref1.slice(0, 38) : void 0) === 'https://www.google.com/recaptcha/api2/'; + focus = ((ref = d.activeElement) != null ? ref.nodeName : void 0) === 'IFRAME' && /https?:\/\/www\.google\.com\/recaptcha\//.test(d.activeElement.src); if (this.needed()) { if (focus) { if (QR.cooldown.auto || Conf['Post on Captcha Completion']) { @@ -8317,7 +8895,11 @@ } }, reload: function() { - return $.globalEval('(function() {\n var container = document.querySelector("#qr .captcha-container");\n window.grecaptcha.reset(container.dataset.widgetID);\n})();'); + if (this.noscript) { + return $('iframe', this.nodes.container).src = this.noscriptURL(); + } else { + return $.globalEval('(function() {\n var container = document.querySelector("#qr .captcha-container");\n window.grecaptcha.reset(container.dataset.widgetID);\n})();'); + } } }; @@ -8345,70 +8927,62 @@ QR.cooldown = { seconds: 0, + delays: { + thread: 0, + reply: 0, + image: 0, + reply_intra: 0, + image_intra: 0, + deletion: 60, + thread_global: 300 + }, init: function() { - var delay, items, key, keys, m, ref, results, scope, type; + if (!(Conf['Quick Reply'] && Conf['Cooldown'])) { + return; + } + this.data = Conf['cooldowns']; + return $.sync('cooldowns', this.sync); + }, + setup: function() { + var delay, m, ref, type; if (!Conf['Cooldown']) { return; } - QR.cooldown.delays = (m = Get.scriptData().match(/\bcooldowns *= *({[^}]+})/)) ? JSON.parse(m[1]) : { - thread: 0, - reply: 0, - image: 0, - reply_intra: 0, - image_intra: 0 - }; + if (m = Get.scriptData().match(/\bcooldowns *= *({[^}]+})/)) { + $.extend(QR.cooldown.delays, JSON.parse(m[1])); + } QR.cooldown.maxDelay = 0; ref = QR.cooldown.delays; for (type in ref) { delay = ref[type]; - if (type !== 'thread') { + if (type !== 'thread' && type !== 'thread_global') { QR.cooldown.maxDelay = Math.max(QR.cooldown.maxDelay, delay); } } - QR.cooldown.delays['thread_global'] = 300; - keys = QR.cooldown.keys = { - local: "cooldown." + g.BOARD, - global: 'cooldown.global' - }; - items = {}; - for (scope in keys) { - key = keys[scope]; - items[key] = {}; - } - $.get(items, function(items) { - for (scope in keys) { - key = keys[scope]; - QR.cooldown[scope] = items[key]; - } - return QR.cooldown.start(); - }); - results = []; - for (scope in keys) { - key = keys[scope]; - results.push($.sync(key, QR.cooldown.sync(scope))); - } - return results; + QR.cooldown.isSetup = true; + return QR.cooldown.start(); }, start: function() { - if (QR.cooldown.isCounting || Object.keys(QR.cooldown.local).length + Object.keys(QR.cooldown.global).length === 0) { + var data; + data = QR.cooldown.data; + if (!(QR.cooldown.isSetup && !QR.cooldown.isCounting && Object.keys(data[g.BOARD.ID] || {}).length + Object.keys(data.global || {}).length > 0)) { return; } QR.cooldown.isCounting = true; return QR.cooldown.count(); }, - sync: function(scope) { - return function(cooldowns) { - QR.cooldown[scope] = cooldowns || {}; - return QR.cooldown.start(); - }; + sync: function(data) { + QR.cooldown.data = data || {}; + return QR.cooldown.start(); }, - add: function(start, threadID, postID) { - var boardID; + add: function(threadID, postID) { + var boardID, start; if (!Conf['Cooldown']) { return; } + start = Date.now(); boardID = g.BOARD.ID; - QR.cooldown.set('local', start, { + QR.cooldown.set(boardID, start, { threadID: threadID, postID: postID }); @@ -8428,23 +9002,35 @@ } cooldown = QR.cooldown.categorize(post); cooldown.delay = delay; - QR.cooldown.set('local', Date.now(), cooldown); + QR.cooldown.set(g.BOARD.ID, Date.now(), cooldown); return QR.cooldown.start(); }, "delete": function(post) { - var cooldown, id, ref; - if (!(Conf['Cooldown'] && g.BOARD.ID === post.board.ID)) { + var base1, cooldown, cooldowns, id, name1; + if (!Conf['Cooldown']) { return; } - $.forceSync(QR.cooldown.keys.local); - ref = QR.cooldown.local; - for (id in ref) { - cooldown = ref[id]; + $.forceSync('cooldowns'); + cooldowns = ((base1 = QR.cooldown.data)[name1 = post.board.ID] || (base1[name1] = {})); + for (id in cooldowns) { + cooldown = cooldowns[id]; if ((cooldown.delay == null) && cooldown.threadID === post.thread.ID && cooldown.postID === post.ID) { - delete QR.cooldown.local[id]; + delete cooldowns[id]; } } - return QR.cooldown.save('local'); + return QR.cooldown.save([post.board.ID]); + }, + secondsDeletion: function(post) { + var cooldown, cooldowns, seconds, start; + cooldowns = QR.cooldown.data[post.board.ID] || {}; + for (start in cooldowns) { + cooldown = cooldowns[start]; + if ((cooldown.delay == null) && cooldown.threadID === post.thread.ID && cooldown.postID === post.ID) { + seconds = QR.cooldown.delays.deletion - Math.floor((Date.now() - start) / $.SECOND); + return Math.max(seconds, 0); + } + } + return 0; }, categorize: function(post) { if (post.thread === 'new') { @@ -8459,41 +9045,48 @@ } }, set: function(scope, id, value) { - $.forceSync(QR.cooldown.keys[scope]); - QR.cooldown[scope][id] = value; - return $.set(QR.cooldown.keys[scope], QR.cooldown[scope]); + var base1, cooldowns; + $.forceSync('cooldowns'); + cooldowns = ((base1 = QR.cooldown.data)[scope] || (base1[scope] = {})); + cooldowns[id] = value; + return $.set('cooldowns', QR.cooldown.data); }, - save: function(scope) { - if (Object.keys(QR.cooldown[scope]).length) { - return $.set(QR.cooldown.keys[scope], QR.cooldown[scope]); - } else { - return $["delete"](QR.cooldown.keys[scope]); + save: function(scopes) { + var data, k, len1, scope; + data = QR.cooldown.data; + for (k = 0, len1 = scopes.length; k < len1; k++) { + scope = scopes[k]; + if (scope in data && !Object.keys(data[scope]).length) { + delete data[scope]; + } } + return $.set('cooldowns', data); }, count: function() { - var cooldown, elapsed, key, maxDelay, now, ref, ref1, ref2, save, scope, seconds, start, suffix, threadID, type, update; + var base1, cooldown, cooldowns, elapsed, k, len1, maxDelay, nCooldowns, now, ref, ref1, save, scope, seconds, start, suffix, threadID, type, update; + $.forceSync('cooldowns'); + save = []; + nCooldowns = 0; now = Date.now(); ref = QR.cooldown.categorize(QR.posts[0]), type = ref.type, threadID = ref.threadID; seconds = 0; - ref1 = QR.cooldown.keys; - for (scope in ref1) { - key = ref1[scope]; - $.forceSync(key); - save = false; - ref2 = QR.cooldown[scope]; - for (start in ref2) { - cooldown = ref2[start]; + ref1 = [g.BOARD.ID, 'global']; + for (k = 0, len1 = ref1.length; k < len1; k++) { + scope = ref1[k]; + cooldowns = ((base1 = QR.cooldown.data)[scope] || (base1[scope] = {})); + for (start in cooldowns) { + cooldown = cooldowns[start]; start = +start; elapsed = Math.floor((now - start) / $.SECOND); if (elapsed < 0) { - delete QR.cooldown[scope][start]; - save = true; + delete cooldowns[start]; + save.push(scope); continue; } if (cooldown.delay != null) { if (cooldown.delay <= elapsed) { - delete QR.cooldown[scope][start]; - save = true; + delete cooldowns[start]; + save.push(scope); } else if (cooldown.type === type && cooldown.threadID === threadID) { seconds = Math.max(seconds, cooldown.delay - elapsed); } @@ -8504,8 +9097,8 @@ maxDelay = Math.max(maxDelay, parseInt(Conf['customCooldown'], 10)); } if (maxDelay <= elapsed) { - delete QR.cooldown[scope][start]; - save = true; + delete cooldowns[start]; + save.push(scope); continue; } if ((type === 'thread') === (cooldown.threadID === cooldown.postID) && cooldown.boardID !== g.BOARD.ID) { @@ -8516,11 +9109,12 @@ seconds = Math.max(seconds, parseInt(Conf['customCooldown'], 10) - elapsed); } } - if (save) { - QR.cooldown.save(scope); - } + nCooldowns += Object.keys(cooldowns).length; } - if (Object.keys(QR.cooldown.local).length + Object.keys(QR.cooldown.global).length) { + if (save.length) { + QR.cooldown.save(save); + } + if (nCooldowns) { clearTimeout(QR.cooldown.timeout); QR.cooldown.timeout = setTimeout(QR.cooldown.count, $.SECOND); } else { @@ -8764,7 +9358,7 @@ if (!(node = QR.nodes[name])) { continue; } - node.value = this[name] || node.dataset["default"] || null; + node.value = this[name] || node.dataset["default"] || ''; } (this.thread !== 'new' ? $.addClass : $.rmClass)(QR.nodes.el, 'reply-to-thread'); this.showFileData(); @@ -8782,7 +9376,8 @@ switch (name) { case 'thread': (this.thread !== 'new' ? $.addClass : $.rmClass)(QR.nodes.el, 'reply-to-thread'); - return QR.status(); + QR.status(); + return this.updateFlashURL(); case 'com': this.nodes.span.textContent = this.com; QR.captcha.onPostChange(); @@ -8795,11 +9390,9 @@ if (!this.file) { return; } - this.file.newName = this.filename.replace(/[\/\\]/g, '-'); - if (!/\.(jpe?g|png|gif|pdf|swf|webm)$/i.test(this.filename)) { - this.file.newName += '.jpg'; - } - return this.updateFilename(); + this.saveFilename(); + this.updateFilename(); + return this.updateFlashURL(); case 'name': return QR.persona.set(this); } @@ -8891,9 +9484,16 @@ }; _Class.prototype.setFile = function(file1) { - var ref; + var ext, ref; this.file = file1; - this.filename = this.file.name; + if (Conf['Randomize Filename'] && g.BOARD.ID !== 'f') { + this.filename = "" + (Date.now() - Math.floor(Math.random() * 365 * $.DAY)); + if (ext = this.file.name.match(QR.validExtension)) { + this.filename += ext[0]; + } + } else { + this.filename = this.file.name; + } this.filesize = $.bytesToString(this.file.size); this.checkSize(); if (QR.spoiler) { @@ -8901,11 +9501,13 @@ } QR.captcha.onPostChange(); URL.revokeObjectURL(this.URL); + this.saveFilename(); if (this === QR.selected) { this.showFileData(); } else { this.updateFilename(); } + this.updateFlashURL(); this.nodes.el.style.backgroundImage = null; if (ref = this.file.type, indexOf.call(QR.mimeTypes, ref) < 0) { return this.fileError('Unsupported file type.'); @@ -8929,6 +9531,9 @@ var el, event, isVideo, onerror, onload; isVideo = /^video\//.test(this.file.type); el = $.el(isVideo ? 'video' : 'img'); + if (isVideo && !el.canPlayType(this.file.type)) { + return; + } event = isVideo ? 'loadeddata' : 'load'; onload = (function(_this) { return function() { @@ -9034,12 +9639,20 @@ this.nodes.label.hidden = true; } this.showFileData(); + this.updateFlashURL(); URL.revokeObjectURL(this.URL); return this.dismissErrors(function(error) { return $.hasClass(error, 'file-error'); }); }; + _Class.prototype.saveFilename = function() { + this.file.newName = (this.filename || '').replace(/[\/\\]/g, '-'); + if (!QR.validExtension.test(this.filename)) { + return this.file.newName += '.jpg'; + } + }; + _Class.prototype.updateFilename = function() { var long; long = this.filename + " (" + this.filesize + ")"; @@ -9061,6 +9674,36 @@ } }; + _Class.prototype.updateFlashURL = function() { + var oldURL, ref, url; + if (g.BOARD.ID !== 'f') { + return; + } + if (this.thread === 'new' || !this.file) { + url = ''; + } else { + url = this.file.newName; + if ((ref = $.engine) === 'blink' || ref === 'webkit') { + url = url.replace(/"/g, '%22'); + } + url = url.replace(/[\t\n\f\r \xa0\u200B\u2029\u3000]+/g, ' ').replace(/(^ | $)/g, '').replace(/\.[0-9A-Za-z]+$/, ''); + url = "https://i.4cdn.org/f/" + (encodeURIComponent(E(url))) + ".swf\n"; + } + oldURL = this.flashURL || ''; + if (url !== oldURL) { + this.com || (this.com = ''); + if (this.com.slice(0, oldURL.length) === oldURL) { + this.com = this.com.slice(oldURL.length); + } + this.com = (url + this.com) || null; + if (this === QR.selected) { + QR.nodes.com.value = this.com; + QR.characterCount(); + } + return this.flashURL = url; + } + }; + _Class.prototype.pasteText = function(file) { var reader; this.pasting = true; @@ -9171,10 +9814,7 @@ }); }, node: function() { - if (this.file) { - return; - } - return $.addClass(this.nodes.root, "noFile"); + return this.nodes.root.classList.toggle('noFile', !this.file); }, catalogNode: function() { var file, filename; @@ -9354,29 +9994,43 @@ Gallery.images.push(thumb); return $.add(Gallery.nodes.thumbs, thumb); }, + load: function(thumb, errorCB) { + var elType, ext, file; + ext = thumb.href.match(/\w*$/); + elType = { + 'webm': 'video', + 'pdf': 'iframe' + }[ext] || 'img'; + file = $.el(elType, { + title: thumb.title + }); + $.extend(file.dataset, thumb.dataset); + $.on(file, 'error', errorCB); + file.src = thumb.href; + return file; + }, open: function(thumb) { - var el, elType, file, name, newID, nodes, oldID, post, ref, slideshow; + var el, file, newID, nodes, oldID, post, ref; nodes = Gallery.nodes; - name = nodes.name; oldID = +nodes.current.dataset.id; newID = +thumb.dataset.id; - slideshow = Gallery.slideshow && (newID > oldID || (oldID === Gallery.images.length - 1 && newID === 0)); - if (el = $('.gal-highlight', nodes.thumbs)) { + if (el = Gallery.images[oldID]) { $.rmClass(el, 'gal-highlight'); } $.addClass(thumb, 'gal-highlight'); - elType = /\.webm$/.test(thumb.href) ? 'video' : /\.pdf$/.test(thumb.href) ? 'iframe' : 'img'; - $[elType === 'iframe' ? 'addClass' : 'rmClass'](doc, 'gal-pdf'); - file = $.el(elType, { - title: name.download = name.textContent = thumb.title - }); - $.extend(file.dataset, thumb.dataset); - $.on(file, 'error', Gallery.error); - file.src = name.href = thumb.href; + nodes.thumbs.scrollTop = thumb.offsetTop + thumb.offsetHeight / 2 - nodes.thumbs.clientHeight / 2; + if (((ref = Gallery.cache) != null ? ref.dataset.id : void 0) === '' + newID) { + file = Gallery.cache; + $.off(file, 'error', Gallery.cacheError); + $.on(file, 'error', Gallery.error); + } else { + file = Gallery.load(thumb, Gallery.error); + } $.off(nodes.current, 'error', Gallery.error); ImageCommon.pause(nodes.current); $.replace(nodes.current, file); - if (elType === 'video') { + nodes.current = file; + if (file.nodeName === 'VIDEO') { file.loop = true; Volume.setup(file); if (Conf['Autoplay']) { @@ -9386,19 +10040,22 @@ ImageCommon.addControls(file); } } + doc.classList.toggle('gal-pdf', file.nodeName === 'IFRAME'); + Gallery.cb.setHeight(); nodes.count.textContent = +thumb.dataset.id + 1; - nodes.current = file; + nodes.name.download = nodes.name.textContent = thumb.title; + nodes.name.href = thumb.href; nodes.frame.scrollTop = 0; nodes.next.focus(); - if (slideshow) { + if (Gallery.slideshow && (newID > oldID || (oldID === Gallery.images.length - 1 && newID === 0))) { Gallery.setupTimer(); } else { Gallery.cb.stop(); } - if (Conf['Scroll to Post'] && (post = (ref = (post = g.posts[file.dataset.post])) != null ? ref.nodes.root : void 0)) { - Header.scrollTo(post); + if (Conf['Scroll to Post'] && (post = g.posts[file.dataset.post])) { + Header.scrollTo(post.nodes.root); } - return nodes.thumbs.scrollTop = thumb.offsetTop + thumb.offsetHeight / 2 - nodes.thumbs.clientHeight / 2; + return Gallery.cache = Gallery.load(Gallery.images[(newID + 1) % Gallery.images.length], Gallery.cacheError); }, error: function() { var ref; @@ -9420,6 +10077,9 @@ }; })(this)); }, + cacheError: function() { + return delete Gallery.cache; + }, cleanupTimer: function() { var current; clearTimeout(Gallery.timeoutID); @@ -9581,6 +10241,11 @@ setFitness: function() { return (this.checked ? $.addClass : $.rmClass)(doc, "gal-" + (this.name.toLowerCase().replace(/\s+/g, '-'))); }, + setHeight: function() { + var current, dim, frame, height, ref, ref1, ref2, width; + ref = Gallery.nodes, current = ref.current, frame = ref.frame; + return current.style.minHeight = Conf['Stretch to Fit'] && (dim = (ref1 = g.posts[current.dataset.post]) != null ? ref1.file.dimensions : void 0) ? ((ref2 = dim.split('x'), width = ref2[0], height = ref2[1], ref2), Math.min(doc.clientHeight - 25, height / width * frame.clientWidth) + 'px') : null; + }, setDelay: function() { return Gallery.delay = +this.value; } @@ -9605,11 +10270,14 @@ var input, label; label = UI.checkbox(name, name); input = label.firstElementChild; - if (name === 'Fit Width' || name === 'Fit Height' || name === 'Hide Thumbnails') { + if (name === 'Hide Thumbnails' || name === 'Fit Width' || name === 'Fit Height') { $.on(input, 'change', Gallery.cb.setFitness); } $.event('change', null, input); $.on(input, 'change', $.cb.checked); + if (name === 'Hide Thumbnails' || name === 'Fit Width' || name === 'Fit Height' || name === 'Stretch to Fit') { + $.on(input, 'change', Gallery.cb.setHeight); + } return { el: label }; @@ -9618,7 +10286,7 @@ var delayInput, delayLabel, item, subEntries; subEntries = (function() { var k, len1, ref, results; - ref = ['Hide Thumbnails', 'Fit Width', 'Fit Height', 'Scroll to Post']; + ref = ['Hide Thumbnails', 'Fit Width', 'Fit Height', 'Stretch to Fit', 'Scroll to Post']; results = []; for (k = 0, len1 = ref.length; k < len1; k++) { item = ref[k]; @@ -9755,7 +10423,7 @@ $.off(video, 'mouseover', handler); t = new Date().getTime(); return $.asap((function() { - return (typeof chrome !== "undefined" && chrome !== null) || (video.readyState >= 3 && video.currentTime <= Math.max(0.1, video.duration - 0.5)) || new Date().getTime() >= t + 1000; + return $.engine !== 'gecko' || (video.readyState >= 3 && video.currentTime <= Math.max(0.1, video.duration - 0.5)) || new Date().getTime() >= t + 1000; }), function() { return video.controls = true; }); @@ -9935,9 +10603,7 @@ } $.rmClass(post.nodes.root, 'expanded-image'); $.rmClass(file.thumb, 'expanding'); - if (file.videoControls) { - $.rm(file.videoControls); - } + $.rm(file.videoControls); file.thumb.parentNode.href = file.url; file.thumb.parentNode.target = '_blank'; ref = ['isExpanding', 'isExpanded', 'videoControls', 'wasPlaying', 'scrollIntoView']; @@ -10052,7 +10718,7 @@ } if (file.scrollIntoView) { delete file.scrollIntoView; - imageBottom = Header.getBottomOf(file.fullImage) - 25; + imageBottom = Math.min(doc.clientHeight - file.fullImage.getBoundingClientRect().bottom - 25, Header.getBottomOf(file.fullImage)); if (imageBottom < 0) { window.scrollBy(0, Math.min(-imageBottom, Header.getTopOf(file.fullImage))); } @@ -10261,7 +10927,7 @@ return results; })(), width = ref1[0], height = ref1[1]; ref2 = this.getBoundingClientRect(), left = ref2.left, right = ref2.right; - padding = 16; + padding = 25; maxWidth = Math.max(left, doc.clientWidth - right); maxHeight = doc.clientHeight - padding; scale = Math.min(1, maxWidth / width, maxHeight / height); @@ -10398,7 +11064,7 @@ clone.file.thumb.preload = 'auto'; } thumb.preload = 'auto'; - if (typeof chrome === "undefined" || chrome === null) { + if ($.engine === 'gecko') { $.on(thumb, 'loadeddata', function() { return this.removeAttribute('poster'); }); @@ -10793,6 +11459,9 @@ }, wheel: function(e) { var el, volume; + if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) { + return; + } if (!(el = $('video:not([data-md5])', this))) { return; } @@ -11213,7 +11882,7 @@ } }, { key: 'TwitchTV', - regExp: /^\w+:\/\/(?:www\.)?twitch\.tv\/([^#\&\?]*)/, + regExp: /^\w+:\/\/(?:www\.)?twitch\.tv\/(\w[^#\&\?]*)/, httpOnly: true, style: "border: none; width: 640px; height: 360px;", el: function(a) { @@ -11249,11 +11918,14 @@ regExp: /^\w+:\/\/(?:www\.)?vocaroo\.com\/i\/(\w+)/, style: '', el: function(a) { - return $.el('audio', { + var el, type; + el = $.el('audio', { controls: true, - preload: 'auto', - src: "http://vocaroo.com/media_command.php?media=" + a.dataset.uid + "&command=download_ogg" + preload: 'auto' }); + type = el.canPlayType('audio/ogg') ? 'ogg' : 'mp3'; + el.src = "http://vocaroo.com/media_command.php?media=" + a.dataset.uid + "&command=download_" + type; + return el; } }, { key: 'Vimeo', @@ -11393,11 +12065,14 @@ regExp: /^\w+:\/\/(?:www\.)?clyp\.it\/(\w+)/, style: '', el: function(a) { - return $.el('audio', { + var el, type; + el = $.el('audio', { controls: true, - preload: 'auto', - src: "http://clyp.it/" + a.dataset.uid + ".ogg" + preload: 'auto' }); + type = el.canPlayType('audio/ogg') ? 'ogg' : 'mp3'; + el.src = "http://clyp.it/" + a.dataset.uid + "." + type; + return el; } }, { key: 'Loopvid-dummy', @@ -11510,7 +12185,7 @@ } return links; }, - regString: /((https?|mailto|git|magnet|ftp|irc):([a-z\d%\/?])|([-a-z\d]+[.])+(aero|asia|biz|cat|com|coop|dance|info|int|jobs|mobi|moe|museum|name|net|org|post|pro|tel|travel|xxx|edu|gov|mil|[a-z]{2})([:\/]|(?![^\s'"]))|[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}|[-\w\d.@]+@[a-z\d.-]+\.[a-z\d])/i, + regString: /((https?|mailto|git|magnet|ftp|irc):([a-z\d%\/?])|([-a-z\d]+[.])+(aero|asia|biz|cat|com|coop|dance|info|int|jobs|mobi|moe|museum|name|net|org|post|pro|tel|travel|xxx|xyz|edu|gov|mil|[a-z]{2})([:\/]|(?![^\s'"]))|[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}|[-\w\d.@]+@[a-z\d.-]+\.[a-z\d])/i, makeRange: function(startNode, endNode, startOffset, endOffset) { var range; range = document.createRange(); @@ -11630,6 +12305,7 @@ }; DeleteLink = { + auto: [{}, {}], init: function() { var div, fileEl, fileEntry, postEl, postEntry, ref; if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Menu'] && Conf['Delete Link'])) { @@ -11647,11 +12323,15 @@ className: 'delete-file', href: 'javascript:;' }); + this.nodes = { + menu: div.firstChild, + links: [postEl, fileEl] + }; postEntry = { el: postEl, open: function() { - postEl.textContent = 'Post'; - $.on(postEl, 'click', DeleteLink["delete"]); + postEl.textContent = DeleteLink.linkText(false); + $.on(postEl, 'click', DeleteLink.toggle); return true; } }; @@ -11663,8 +12343,8 @@ if (!file || file.isDead) { return false; } - fileEl.textContent = 'File'; - $.on(fileEl, 'click', DeleteLink["delete"]); + fileEl.textContent = DeleteLink.linkText(true); + $.on(fileEl, 'click', DeleteLink.toggle); return true; } }; @@ -11672,35 +12352,61 @@ el: div, order: 40, open: function(post) { - var node; if (post.isDead) { return false; } DeleteLink.post = post; - node = div.firstChild; - node.textContent = 'Delete'; - DeleteLink.cooldown.start(post, node); + DeleteLink.nodes.menu.textContent = DeleteLink.menuText(); + DeleteLink.cooldown.start(post); return true; }, subEntries: [postEntry, fileEntry] }); }, - "delete": function() { - var fileOnly, form, link, post; - post = DeleteLink.post; - if (DeleteLink.cooldown.counting === post) { - return; + menuText: function() { + var seconds; + if (seconds = DeleteLink.cooldown.seconds[DeleteLink.post.fullID]) { + return "Delete (" + seconds + ")"; + } else { + return 'Delete'; } - $.off(this, 'click', DeleteLink["delete"]); + }, + linkText: function(fileOnly) { + var text; + text = fileOnly ? 'File' : 'Post'; + if (DeleteLink.auto[+fileOnly][DeleteLink.post.fullID]) { + text = "Deleting " + (text.toLowerCase()) + "..."; + } + return text; + }, + toggle: function() { + var auto, fileOnly, post; + post = DeleteLink.post; fileOnly = $.hasClass(this, 'delete-file'); - this.textContent = "Deleting " + (fileOnly ? 'file' : 'post') + "..."; + auto = DeleteLink.auto[+fileOnly]; + if (auto[post.fullID]) { + delete auto[post.fullID]; + } else { + auto[post.fullID] = true; + } + this.textContent = DeleteLink.linkText(fileOnly); + if (!DeleteLink.cooldown.seconds[post.fullID]) { + return DeleteLink["delete"](post, fileOnly); + } + }, + "delete": function(post, fileOnly) { + var form, link; + link = DeleteLink.nodes.links[+fileOnly]; + delete DeleteLink.auto[+fileOnly][post.fullID]; + if (post.fullID === DeleteLink.post.fullID) { + $.off(link, 'click', DeleteLink.toggle); + } form = { mode: 'usrdel', onlyimgdel: fileOnly, pwd: QR.persona.getPassword() }; form[post.ID] = 'delete'; - link = this; return $.ajax($.id('delform').action.replace("/" + g.BOARD + "/", "/" + post.board + "/"), { responseType: 'document', withCredentials: true, @@ -11708,61 +12414,80 @@ return DeleteLink.load(link, post, fileOnly, this.response); }, onerror: function() { - return DeleteLink.error(link); + return DeleteLink.error(link, post); } }, { form: $.formData(form) }); }, load: function(link, post, fileOnly, resDoc) { - var msg, s; + var el, msg; + link.textContent = DeleteLink.linkText(fileOnly); if (resDoc.title === '4chan - Banned') { - s = 'Banned!'; + el = $.el('span', { + innerHTML: "You can't delete posts because you are banned." + }); + return new Notice('warning', el, 20); } else if (msg = resDoc.getElementById('errmsg')) { - s = msg.textContent; - $.on(link, 'click', DeleteLink["delete"]); + new Notice('warning', msg.textContent, 20); + if (post.fullID === DeleteLink.post.fullID) { + $.on(link, 'click', DeleteLink.toggle); + } + if (/\bwait\b/i.test(msg.textContent)) { + DeleteLink.cooldown.start(post, 5); + DeleteLink.auto[+fileOnly][post.fullID] = true; + return DeleteLink.nodes.links[+fileOnly].textContent = DeleteLink.linkText(fileOnly); + } } else { - if (resDoc.title === 'Updating index...') { + if (!fileOnly) { QR.cooldown["delete"](post); + } + if (resDoc.title === 'Updating index...') { (post.origin || post).kill(fileOnly); } - s = 'Deleted'; + if (post.fullID === DeleteLink.post.fullID) { + return link.textContent = 'Deleted'; + } } - return link.textContent = s; }, - error: function(link) { - link.textContent = 'Connection error, please retry.'; - return $.on(link, 'click', DeleteLink["delete"]); + error: function(link, post) { + new Notice('warning', 'Connection error, please retry.', 20); + if (post.fullID === DeleteLink.post.fullID) { + return $.on(link, 'click', DeleteLink.toggle); + } }, cooldown: { - start: function(post, node) { - var length, ref, seconds; - if (!((ref = QR.db) != null ? ref.get({ - boardID: post.board.ID, - threadID: post.thread.ID, - postID: post.ID - }) : void 0)) { - delete DeleteLink.cooldown.counting; + seconds: {}, + start: function(post, seconds) { + if (DeleteLink.cooldown.seconds[post.fullID] != null) { return; } - DeleteLink.cooldown.counting = post; - length = 60; - seconds = Math.ceil((length * $.SECOND - (Date.now() - post.info.date)) / $.SECOND); - return DeleteLink.cooldown.count(post, seconds, length, node); + if (seconds == null) { + seconds = QR.cooldown.secondsDeletion(post); + } + if (seconds > 0) { + DeleteLink.cooldown.seconds[post.fullID] = seconds; + return DeleteLink.cooldown.count(post); + } }, - count: function(post, seconds, length, node) { - if (DeleteLink.cooldown.counting !== post) { - return; + count: function(post) { + var fileOnly, k, len1, ref; + if (post.fullID === DeleteLink.post.fullID) { + DeleteLink.nodes.menu.textContent = DeleteLink.menuText(); } - if (!((0 <= seconds && seconds <= length))) { - if (DeleteLink.cooldown.counting === post) { - node.textContent = 'Delete'; - delete DeleteLink.cooldown.counting; + if (DeleteLink.cooldown.seconds[post.fullID] > 0) { + DeleteLink.cooldown.seconds[post.fullID]--; + setTimeout(DeleteLink.cooldown.count, 1000, post); + } else { + delete DeleteLink.cooldown.seconds[post.fullID]; + ref = [false, true]; + for (k = 0, len1 = ref.length; k < len1; k++) { + fileOnly = ref[k]; + if (DeleteLink.auto[+fileOnly][post.fullID]) { + DeleteLink["delete"](post, fileOnly); + } } - return; } - setTimeout(DeleteLink.cooldown.count, 1000, post, seconds - 1, length, node); - return node.textContent = "Delete (" + seconds + ")"; } } }; @@ -11855,7 +12580,7 @@ if (!(post.isDead || (post.thread.isDead && !post.thread.isArchived))) { a.textContent = 'Report this post'; ReportLink.url = "//sys.4chan.org/" + post.board + "/imgboard.php?mode=report&no=" + post; - ReportLink.height = 200; + ReportLink.height = 180; } else if (Conf['Archive Report']) { a.textContent = 'Report to archive'; ReportLink.url = Redirect.to('report', { @@ -12228,10 +12953,12 @@ ThreadUpdater.cb.interval.call($.el('input', { value: Conf['Interval'] })); - $.on(window, 'online offline', ThreadUpdater.cb.online); $.on(d, 'QRPostSuccessful', ThreadUpdater.cb.checkpost); $.on(d, 'visibilitychange', ThreadUpdater.cb.visibility); - return ThreadUpdater.setInterval(); + ThreadUpdater.setInterval(); + if (this.board.ID === 'f') { + return ThreadUpdater.update(); + } }, /* @@ -12240,20 +12967,6 @@ */ beep: 'data:audio/wav;base64,UklGRjQDAABXQVZFZm10IBAAAAABAAEAgD4AAIA+AAABAAgAc21wbDwAAABBAAADAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkYXRhzAIAAGMms8em0tleMV4zIpLVo8nhfSlcPR102Ki+5JspVEkdVtKzs+K1NEhUIT7DwKrcy0g6WygsrM2k1NpiLl0zIY/WpMrjgCdbPhxw2Kq+5Z4qUkkdU9K1s+K5NkVTITzBwqnczko3WikrqM+l1NxlLF0zIIvXpsnjgydZPhxs2ay95aIrUEkdUdC3suK8N0NUIjq+xKrcz002WioppdGm091pK1w0IIjYp8jkhydXPxxq2K295aUrTkoeTs65suK+OUFUIzi7xqrb0VA0WSoootKm0t5tKlo1H4TYqMfkiydWQBxm16+85actTEseS8y7seHAPD9TIza5yKra01QyWSson9On0d5wKVk2H4DYqcfkjidUQB1j1rG75KsvSkseScu8seDCPz1TJDW2yara1FYxWSwnm9Sn0N9zKVg2H33ZqsXkkihSQR1g1bK65K0wSEsfR8i+seDEQTxUJTOzy6rY1VowWC0mmNWoz993KVc3H3rYq8TklSlRQh1d1LS647AyR0wgRMbAsN/GRDpTJTKwzKrX1l4vVy4lldWpzt97KVY4IXbUr8LZljVPRCxhw7W3z6ZISkw1VK+4sMWvXEhSPk6buay9sm5JVkZNiLWqtrJ+TldNTnquqbCwilZXU1BwpKirrpNgWFhTaZmnpquZbFlbVmWOpaOonHZcXlljhaGhpZ1+YWBdYn2cn6GdhmdhYGN3lp2enIttY2Jjco+bnJuOdGZlZXCImJqakHpoZ2Zug5WYmZJ/bGlobX6RlpeSg3BqaW16jZSVkoZ0bGtteImSk5KIeG5tbnaFkJKRinxxbm91gY2QkIt/c3BwdH6Kj4+LgnZxcXR8iI2OjIR5c3J0e4WLjYuFe3VzdHmCioyLhn52dHR5gIiKioeAeHV1eH+GiYqHgXp2dnh9hIiJh4J8eHd4fIKHiIeDfXl4eHyBhoeHhH96eHmA', cb: { - online: function() { - if (ThreadUpdater.thread.isDead) { - return; - } - if (navigator.onLine) { - ThreadUpdater.set('status', ''); - } else { - ThreadUpdater.set('status', 'Offline', 'warning'); - } - if (Conf['Auto Update'] && !Conf['Ignore Offline Status']) { - ThreadUpdater.outdateCount = 0; - return ThreadUpdater.setInterval(); - } - }, checkpost: function(e) { if (e.detail.threadID !== ThreadUpdater.thread.ID) { return; @@ -12371,13 +13084,6 @@ ThreadUpdater.set('timer', 'Update'); return; } - if (!navigator.onLine) { - ThreadUpdater.set('status', 'Offline', 'warning'); - if (!Conf['Ignore Offline Status']) { - ThreadUpdater.set('timer', ''); - return; - } - } interval = ThreadUpdater.interval; if (Conf['Optional Increase']) { limit = d.hidden ? 10 : 5; @@ -12442,7 +13148,7 @@ return new Notice('info', "The thread is " + change + ".", 30); }, parse: function(req) { - var ID, OP, board, deletedFiles, deletedPosts, files, firstPost, index, ipCountEl, k, lastPost, len1, len2, len3, len4, newPosts, node, post, postObject, postObjects, posts, q, ref, ref1, ref2, ref3, ref4, ref5, scroll, thread, u, unreadCount, w; + var ID, OP, board, deletedFiles, deletedPosts, files, firstPost, index, ipCountEl, k, lastPost, len1, len2, len3, len4, newPosts, node, post, postObject, postObjects, posts, q, ref, ref1, ref2, ref3, ref4, ref5, scroll, thread, u, unreadCount, v; postObjects = req.response.posts; OP = postObjects[0]; thread = ThreadUpdater.thread; @@ -12471,6 +13177,12 @@ if (postObject.fsize) { files.push(ID); } + if (board.ID === 'f' && postObject.fsize && (post = thread.posts[ID]) && !post.file) { + node = Build.postFromObject(postObject, board.ID); + $.after(post.nodes.info, $('.file', node)); + post.parseFile(); + Post.callbacks.execute(post, ['Filter', 'File Info Formatting', 'Fappe Tyme', 'Sauce']); + } if (ID <= lastPost) { continue; } @@ -12524,8 +13236,8 @@ } scroll = Conf['Auto Scroll'] && ThreadUpdater.scrollBG() && ThreadUpdater.root.getBoundingClientRect().bottom - doc.clientHeight < 25; firstPost = null; - for (w = 0, len4 = posts.length; w < len4; w++) { - post = posts[w]; + for (v = 0, len4 = posts.length; v < len4; v++) { + post = posts[v]; if (!QuoteThreading.insert(post)) { firstPost || (firstPost = post.nodes.root); $.add(ThreadUpdater.root, post.nodes.root); @@ -13475,19 +14187,21 @@ if (!Header.areNotificationsEnabled) { return; } - notif = new Notification(post.info.nameBlock + " replied to you", { - body: post.info.commentDisplay, - icon: Favicon.logo - }); - notif.onclick = function() { - Header.scrollToIfNeeded(post.nodes.root, true); - return window.focus(); - }; - return notif.onshow = function() { - return setTimeout(function() { - return notif.close(); - }, 7 * $.SECOND); - }; + try { + notif = new Notification(post.info.nameBlock + " replied to you", { + body: post.info.commentDisplay, + icon: Favicon.logo + }); + notif.onclick = function() { + Header.scrollToIfNeeded(post.nodes.root, true); + return window.focus(); + }; + return notif.onshow = function() { + return setTimeout(function() { + return notif.close(); + }, 7 * $.SECOND); + }; + } catch (_error) {} }, onUpdate: function(e) { if (!e.detail[404]) { @@ -13606,9 +14320,7 @@ if (Conf['Unread Favicon']) { isDead = Unread.thread.isDead; Favicon.el.href = countQuotingYou ? Favicon[isDead ? 'unreadDeadY' : 'unreadY'] : count ? Favicon[isDead ? 'unreadDead' : 'unread'] : Favicon[isDead ? 'dead' : 'default']; - if (typeof chrome === "undefined" || chrome === null) { - return $.add(d.head, Favicon.el); - } + return $.add(d.head, Favicon.el); } } }; @@ -13663,7 +14375,7 @@ } return Redirect.data = o; }, - archives: [{"uid":0,"name":"Moe","domain":"archive.moe","http":false,"https":true,"software":"foolfuuka","boards":["a","an","biz","c","co","diy","fit","gd","gif","h","i","int","jp","k","m","mlp","out","po","qa","r9k","s4s","sci","tg","tv","u","v","vg","vp","vr","wsg"],"files":["a","biz","c","co","diy","fit","gd","h","i","jp","k","m","mlp","po","qa","r9k","s4s","sci","tg","u","v","vg","vp","vr","wsg"]},{"uid":3,"name":"4plebs Archive","domain":"archive.4plebs.org","http":true,"https":true,"software":"foolfuuka","boards":["adv","f","hr","o","pol","s4s","tg","trv","tv","x"],"files":["adv","f","hr","o","pol","s4s","tg","trv","tv","x"]},{"uid":4,"name":"Nyafuu Archive","domain":"archive.nyafuu.org","http":true,"https":true,"software":"foolfuuka","boards":["c","e","w","wg"],"files":["c","e","w","wg"]},{"uid":5,"name":"Love is Over","domain":"archive.loveisover.me","http":true,"https":true,"software":"foolfuuka","boards":["c","d","e","i","lgbt","t","u"],"files":["c","d","e","i","lgbt","t","u"]},{"uid":8,"name":"Rebecca Black Tech","domain":"rbt.asia","http":false,"https":true,"software":"fuuka","boards":["cgl","g","mu","qa","w"],"files":["cgl","g","mu","qa","w"]},{"uid":10,"name":"warosu","domain":"warosu.org","http":false,"https":true,"software":"fuuka","boards":["3","biz","cgl","ck","diy","fa","g","ic","jp","lit","sci","tg","vr"],"files":["3","biz","cgl","ck","diy","fa","g","ic","jp","lit","sci","tg","vr"]},{"uid":15,"name":"fgts","domain":"fgts.jp","http":true,"https":true,"software":"foolfuuka","boards":["asp","b","cm","h","hc","hm","n","p","qa","r","s","soc","toy","y"],"files":["asp","b","cm","h","hc","hm","n","p","qa","r","s","soc","toy","y"]},{"uid":22,"name":"not4plebs","domain":"totally.not4plebs.org","http":true,"https":true,"software":"foolfuuka","boards":["sp"],"files":["sp"]},{"uid":23,"name":"DesuStorage","domain":"archive.desustorage.org","http":false,"https":true,"software":"foolfuuka","boards":["mlp","qa"],"files":["mlp","qa"]}], + archives: [{"uid":0,"name":"Moe","domain":"archive.moe","http":false,"https":true,"software":"foolfuuka","boards":["a","an","biz","c","co","diy","fit","gd","gif","h","i","int","jp","k","m","mlp","out","po","qa","r9k","s4s","sci","tg","tv","u","v","vg","vp","vr","wsg"],"files":["a","an","biz","c","co","diy","fit","gd","gif","h","i","int","jp","k","m","mlp","out","po","qa","r9k","s4s","sci","tg","u","v","vg","vp","vr","wsg"]},{"uid":3,"name":"4plebs Archive","domain":"archive.4plebs.org","http":true,"https":true,"software":"foolfuuka","boards":["adv","f","hr","o","pol","s4s","tg","trv","tv","x"],"files":["adv","f","hr","o","pol","s4s","tg","trv","tv","x"]},{"uid":4,"name":"Nyafuu Archive","domain":"archive.nyafuu.org","http":true,"https":true,"software":"foolfuuka","boards":["c","e","w","wg"],"files":["c","e","w","wg"]},{"uid":5,"name":"Love is Over","domain":"archive.loveisover.me","http":true,"https":true,"software":"foolfuuka","boards":["c","d","e","i","lgbt","t","u"],"files":["c","d","e","i","lgbt","t","u"]},{"uid":8,"name":"Rebecca Black Tech","domain":"rbt.asia","http":false,"https":true,"software":"fuuka","boards":["cgl","g","mu","qa","w"],"files":["cgl","g","mu","qa","w"]},{"uid":10,"name":"warosu","domain":"warosu.org","http":false,"https":true,"software":"fuuka","boards":["3","biz","cgl","ck","diy","fa","g","ic","jp","lit","sci","tg","vr"],"files":["3","biz","cgl","ck","diy","fa","g","ic","jp","lit","sci","tg","vr"]},{"uid":15,"name":"fgts","domain":"fgts.jp","http":true,"https":true,"software":"foolfuuka","boards":["asp","b","cm","h","hc","hm","n","p","qa","r","s","soc","toy","y"],"files":["asp","b","cm","h","hc","hm","n","p","qa","r","s","soc","toy","y"]},{"uid":22,"name":"not4plebs","domain":"totally.not4plebs.org","http":true,"https":true,"software":"foolfuuka","boards":["sp"],"files":["sp"]},{"uid":23,"name":"DesuStorage","domain":"archive.desustorage.org","http":false,"https":true,"software":"foolfuuka","boards":["mlp","qa"],"files":["mlp","qa"]},{"uid":24,"name":"fireden.net","domain":"boards.fireden.net","http":false,"https":true,"software":"foolfuuka","boards":["cm","ic","vg","y"],"files":["cm","ic","vg","y"]}], to: function(dest, data) { var archive; archive = (dest === 'search' || dest === 'board' ? Redirect.data.thread : Redirect.data[dest])[data.boardID]; @@ -13734,9 +14446,14 @@ securityCheck: function(URL) { return /^https:\/\//.test(URL) || location.protocol === 'http:' || Conf['Except Archives from Encryption']; }, - navigate: function(URL, alternative) { - if (URL && (Redirect.securityCheck(URL) || confirm("Redirect to " + URL + "?\n\nYour connection will not be encrypted."))) { - return location.replace(URL); + navigate: function(dest, data, alternative) { + var url; + if (!Redirect.data) { + Redirect.init(); + } + url = Redirect.to(dest, data); + if (url && (Redirect.securityCheck(url) || confirm("Redirect to " + url + "?\n\nYour connection will not be encrypted."))) { + return location.replace(url); } else if (alternative) { return location.replace(alternative); } @@ -13868,17 +14585,19 @@ for (k = 0, len1 = ref.length; k < len1; k++) { iframe = ref[k]; iframe.src = iframe.src.replace(/\?autoplay=1&?/, '?').replace('&autoplay=1', ''); + $.addClass(iframe, 'autoplay-removed'); } ref1 = $$('object[data*="youtube"][data*="autoplay=1"]', root); for (q = 0, len2 = ref1.length; q < len2; q++) { object = ref1[q]; object.data = object.data.replace(/\?autoplay=1&?/, '?').replace('&autoplay=1', ''); + $.addClass(object, 'autoplay-removed'); } } }; Banner = { - banners: ["0.jpg","1.jpg","2.jpg","4.jpg","6.jpg","7.jpg","8.jpg","9.jpg","10.jpg","11.jpg","12.jpg","13.jpg","14.jpg","16.jpg","17.jpg","18.jpg","19.jpg","20.jpg","21.jpg","22.jpg","24.jpg","25.jpg","26.jpg","28.jpg","29.jpg","33.jpg","38.jpg","39.jpg","43.jpg","44.jpg","45.jpg","46.jpg","47.jpg","52.jpg","54.jpg","57.jpg","59.jpg","60.jpg","61.jpg","64.jpg","66.jpg","67.jpg","69.jpg","71.jpg","72.jpg","76.jpg","77.jpg","81.jpg","82.jpg","83.jpg","84.jpg","88.jpg","90.jpg","91.jpg","96.jpg","98.jpg","99.jpg","100.jpg","104.jpg","106.jpg","116.jpg","119.jpg","137.jpg","140.jpg","148.jpg","149.jpg","150.jpg","154.jpg","156.jpg","157.jpg","158.jpg","159.jpg","161.jpg","162.jpg","164.jpg","165.jpg","166.jpg","167.jpg","168.jpg","169.jpg","170.jpg","171.jpg","172.jpg","173.jpg","174.jpg","175.jpg","176.jpg","178.jpg","179.jpg","180.jpg","181.jpg","182.jpg","183.jpg","186.jpg","189.jpg","190.jpg","192.jpg","193.jpg","194.jpg","197.jpg","198.jpg","200.jpg","201.jpg","202.jpg","203.jpg","205.jpg","206.jpg","207.jpg","208.jpg","210.jpg","213.jpg","214.jpg","215.jpg","216.jpg","218.jpg","219.jpg","220.jpg","221.jpg","222.jpg","223.jpg","224.jpg","227.jpg","0.png","1.png","2.png","3.png","5.png","6.png","9.png","10.png","11.png","12.png","14.png","16.png","19.png","20.png","21.png","22.png","23.png","24.png","26.png","27.png","28.png","29.png","30.png","31.png","32.png","33.png","34.png","37.png","39.png","40.png","41.png","42.png","43.png","44.png","45.png","48.png","49.png","50.png","51.png","52.png","53.png","57.png","58.png","59.png","64.png","66.png","67.png","68.png","69.png","70.png","71.png","72.png","76.png","78.png","81.png","82.png","85.png","86.png","87.png","89.png","95.png","98.png","100.png","101.png","102.png","105.png","106.png","107.png","109.png","110.png","111.png","112.png","113.png","114.png","115.png","116.png","118.png","119.png","120.png","121.png","122.png","123.png","126.png","128.png","130.png","134.png","136.png","138.png","139.png","140.png","142.png","145.png","146.png","149.png","150.png","151.png","152.png","153.png","154.png","155.png","156.png","157.png","158.png","159.png","160.png","163.png","164.png","165.png","166.png","167.png","168.png","169.png","170.png","171.png","172.png","173.png","174.png","178.png","179.png","180.png","181.png","182.png","184.png","186.png","188.png","190.png","192.png","193.png","194.png","195.png","196.png","197.png","198.png","200.png","202.png","203.png","205.png","206.png","207.png","209.png","212.png","213.png","214.png","216.png","217.png","218.png","219.png","220.png","221.png","222.png","223.png","224.png","225.png","226.png","229.png","231.png","232.png","233.png","234.png","235.png","237.png","238.png","239.png","240.png","241.png","242.png","244.png","245.png","246.png","247.png","248.png","249.png","250.png","253.png","254.png","255.png","257.png","258.png","259.png","260.png","262.png","268.png","0.gif","1.gif","2.gif","3.gif","4.gif","5.gif","6.gif","7.gif","8.gif","9.gif","10.gif","12.gif","13.gif","14.gif","15.gif","16.gif","18.gif","19.gif","20.gif","21.gif","22.gif","23.gif","24.gif","28.gif","29.gif","30.gif","33.gif","34.gif","35.gif","36.gif","37.gif","39.gif","40.gif","42.gif","44.gif","45.gif","46.gif","48.gif","50.gif","52.gif","54.gif","55.gif","57.gif","58.gif","59.gif","60.gif","61.gif","62.gif","63.gif","64.gif","66.gif","67.gif","68.gif","69.gif","70.gif","72.gif","73.gif","75.gif","76.gif","77.gif","78.gif","80.gif","81.gif","82.gif","83.gif","86.gif","87.gif","88.gif","92.gif","93.gif","94.gif","95.gif","96.gif","97.gif","98.gif","99.gif","100.gif","101.gif","102.gif","103.gif","104.gif","105.gif","106.gif","108.gif","109.gif","110.gif","111.gif","112.gif","113.gif","115.gif","116.gif","117.gif","118.gif","119.gif","120.gif","122.gif","123.gif","124.gif","127.gif","129.gif","130.gif","131.gif","134.gif","135.gif","136.gif","138.gif","139.gif","141.gif","144.gif","146.gif","148.gif","149.gif","153.gif","154.gif","155.gif","157.gif","158.gif","159.gif","160.gif","161.gif","162.gif","164.gif","166.gif","167.gif","168.gif","169.gif","170.gif","171.gif","172.gif","173.gif","174.gif","175.gif","176.gif","177.gif","178.gif","181.gif","182.gif","183.gif","185.gif","186.gif","187.gif","188.gif","189.gif","190.gif","191.gif","192.gif","193.gif","195.gif","196.gif","197.gif","200.gif","201.gif","202.gif","203.gif","204.gif","205.gif","206.gif","207.gif","208.gif","209.gif","210.gif","211.gif","212.gif","213.gif","214.gif","215.gif","216.gif","217.gif","219.gif","220.gif","221.gif","222.gif","224.gif","225.gif","226.gif","227.gif","228.gif","230.gif","232.gif","233.gif","234.gif","235.gif","238.gif","240.gif","241.gif","243.gif","244.gif","245.gif","246.gif","247.gif","249.gif","250.gif","251.gif","253.gif"], + banners: ["0.jpg","1.jpg","2.jpg","4.jpg","6.jpg","7.jpg","8.jpg","9.jpg","10.jpg","11.jpg","12.jpg","13.jpg","14.jpg","16.jpg","17.jpg","18.jpg","19.jpg","20.jpg","21.jpg","22.jpg","24.jpg","25.jpg","26.jpg","28.jpg","29.jpg","33.jpg","38.jpg","39.jpg","43.jpg","44.jpg","45.jpg","46.jpg","47.jpg","52.jpg","54.jpg","57.jpg","59.jpg","60.jpg","61.jpg","64.jpg","66.jpg","67.jpg","69.jpg","71.jpg","72.jpg","76.jpg","77.jpg","81.jpg","82.jpg","83.jpg","84.jpg","88.jpg","90.jpg","91.jpg","96.jpg","98.jpg","99.jpg","100.jpg","104.jpg","106.jpg","116.jpg","119.jpg","137.jpg","140.jpg","148.jpg","149.jpg","150.jpg","154.jpg","156.jpg","157.jpg","158.jpg","159.jpg","161.jpg","162.jpg","164.jpg","165.jpg","166.jpg","167.jpg","168.jpg","169.jpg","170.jpg","171.jpg","172.jpg","173.jpg","174.jpg","175.jpg","176.jpg","178.jpg","179.jpg","180.jpg","181.jpg","182.jpg","183.jpg","186.jpg","189.jpg","190.jpg","192.jpg","193.jpg","194.jpg","197.jpg","198.jpg","200.jpg","201.jpg","202.jpg","203.jpg","205.jpg","206.jpg","207.jpg","208.jpg","210.jpg","213.jpg","214.jpg","215.jpg","216.jpg","218.jpg","219.jpg","220.jpg","221.jpg","222.jpg","223.jpg","224.jpg","227.jpg","0.png","1.png","2.png","3.png","5.png","6.png","9.png","10.png","11.png","12.png","14.png","16.png","19.png","20.png","21.png","22.png","23.png","24.png","26.png","27.png","28.png","29.png","30.png","31.png","32.png","33.png","34.png","37.png","39.png","40.png","41.png","42.png","43.png","44.png","45.png","48.png","49.png","50.png","51.png","52.png","53.png","57.png","58.png","59.png","64.png","66.png","67.png","68.png","69.png","70.png","71.png","72.png","76.png","78.png","81.png","82.png","85.png","86.png","87.png","89.png","95.png","98.png","100.png","101.png","102.png","105.png","106.png","107.png","109.png","110.png","111.png","112.png","113.png","114.png","115.png","116.png","118.png","119.png","120.png","121.png","122.png","123.png","126.png","128.png","130.png","134.png","136.png","138.png","139.png","140.png","142.png","145.png","146.png","149.png","150.png","151.png","152.png","153.png","154.png","155.png","156.png","157.png","158.png","159.png","160.png","163.png","164.png","165.png","166.png","167.png","168.png","169.png","170.png","171.png","172.png","173.png","174.png","178.png","179.png","180.png","181.png","182.png","184.png","186.png","188.png","190.png","192.png","193.png","194.png","195.png","196.png","197.png","198.png","200.png","202.png","203.png","205.png","206.png","207.png","209.png","212.png","213.png","214.png","216.png","217.png","218.png","219.png","220.png","221.png","222.png","223.png","224.png","225.png","226.png","229.png","231.png","232.png","233.png","234.png","235.png","237.png","238.png","239.png","240.png","241.png","242.png","244.png","245.png","246.png","247.png","248.png","249.png","250.png","253.png","254.png","255.png","256.png","257.png","258.png","259.png","260.png","262.png","268.png","0.gif","1.gif","2.gif","3.gif","4.gif","5.gif","6.gif","7.gif","8.gif","9.gif","10.gif","12.gif","13.gif","14.gif","15.gif","16.gif","18.gif","19.gif","20.gif","21.gif","22.gif","23.gif","24.gif","28.gif","29.gif","30.gif","33.gif","34.gif","35.gif","36.gif","37.gif","39.gif","40.gif","42.gif","44.gif","45.gif","46.gif","48.gif","50.gif","52.gif","54.gif","55.gif","57.gif","58.gif","59.gif","60.gif","61.gif","63.gif","64.gif","66.gif","67.gif","68.gif","69.gif","70.gif","72.gif","73.gif","75.gif","76.gif","77.gif","78.gif","80.gif","81.gif","82.gif","83.gif","86.gif","87.gif","88.gif","92.gif","93.gif","94.gif","95.gif","96.gif","97.gif","98.gif","99.gif","100.gif","101.gif","102.gif","103.gif","104.gif","105.gif","106.gif","108.gif","109.gif","110.gif","111.gif","112.gif","113.gif","115.gif","116.gif","117.gif","118.gif","119.gif","120.gif","122.gif","123.gif","124.gif","127.gif","129.gif","130.gif","131.gif","134.gif","135.gif","136.gif","138.gif","139.gif","141.gif","144.gif","146.gif","148.gif","149.gif","153.gif","154.gif","155.gif","157.gif","158.gif","159.gif","160.gif","161.gif","162.gif","164.gif","166.gif","167.gif","168.gif","169.gif","170.gif","171.gif","172.gif","173.gif","174.gif","175.gif","176.gif","177.gif","178.gif","181.gif","182.gif","183.gif","185.gif","186.gif","187.gif","188.gif","189.gif","190.gif","191.gif","192.gif","193.gif","195.gif","196.gif","197.gif","200.gif","201.gif","202.gif","203.gif","204.gif","205.gif","206.gif","207.gif","208.gif","209.gif","210.gif","211.gif","212.gif","213.gif","214.gif","215.gif","216.gif","217.gif","219.gif","220.gif","221.gif","222.gif","224.gif","225.gif","226.gif","227.gif","228.gif","230.gif","232.gif","233.gif","234.gif","235.gif","238.gif","240.gif","241.gif","243.gif","244.gif","245.gif","246.gif","247.gif","249.gif","250.gif","251.gif","253.gif"], init: function() { if (Conf['Custom Board Titles']) { this.db = new DataBoard('customTitles', null, true); @@ -14756,7 +15475,7 @@ if (!Conf['Keybinds']) { return; } - for (hotkey in Conf.hotkeys) { + for (hotkey in Config.hotkeys) { $.sync(hotkey, Keybinds.sync); } init = function() { @@ -15090,6 +15809,8 @@ return 'Enter'; case 27: return 'Esc'; + case 32: + return 'Space'; case 37: return 'Left'; case 38: @@ -15098,9 +15819,15 @@ return 'Right'; case 40: return 'Down'; + case 188: + return 'Comma'; + case 190: + return 'Period'; default: if ((48 <= kc && kc <= 57) || (65 <= kc && kc <= 90)) { return String.fromCharCode(kc).toLowerCase(); + } else if ((96 <= kc && kc <= 105)) { + return String.fromCharCode(kc - 48).toLowerCase(); } else { return null; } @@ -15460,12 +16187,18 @@ }; Report = { - css: ':root:not(.js-enabled) #g-recaptcha {\n height: auto;\n}', + css: ":root:not(.js-enabled) #captchaContainerAlt {\n" + +" height: auto;\n" + +"}\n" + +"noscript > iframe, #recaptcha_challenge_field {\n" + +" width: 500px;\n" + +"}", init: function() { var match; if (!(/\bmode=report\b/.test(location.search) && (match = location.search.match(/\bno=(\d+)/)))) { return; } + Captcha.replace.init(); this.postID = +match[1]; return $.ready(this.ready); }, @@ -15474,7 +16207,7 @@ if (Conf['Archive Report']) { Report.archive(); } - if ($.hasClass(doc, 'js-enabled')) { + if (Conf['Use Recaptcha v2 in Reports'] && $.hasClass(doc, 'js-enabled')) { return new MutationObserver(function() { return Report.fit('.gc-bubbleDefault'); }).observe(d.body, { @@ -15525,8 +16258,7 @@ $.add(d.body, [$.tn(' ['), link, $.tn(']')]); if (types = $.id('reportTypes')) { return $.on(types, 'change', function(e) { - var ref; - return $('form').action = (ref = e.target.value) === 'illegal' || ref === 'spam' ? '#redirect' : ''; + return $('form').action = e.target.value === 'illegal' ? '#redirect' : ''; }); } } @@ -15674,7 +16406,7 @@ className: 'dialog' }); $.extend(dialog, { - innerHTML: "
" + innerHTML: "
" }); Settings.overlay = overlay = $.el('div', { id: 'overlay' @@ -15764,6 +16496,9 @@ div = $.el('div', { innerHTML: ": " + E(description) + "" }); + if ($.engine !== 'gecko' && key === 'Remember QR Size') { + div.hidden = true; + } input = $('input', div); $.on(input, 'change', function() { this.parentNode.parentNode.dataset.checked = this.checked; @@ -16030,7 +16765,7 @@ return; } $.extend(div, { - innerHTML: "
Filter is disabled.

Use regular expressions, one per line.
Lines starting with a # will be ignored.
For example, /weeaboo/i will filter posts containing the string \`weeaboo\`, case-insensitive.
MD5 filtering uses exact string matching, not regular expressions.

Note: If you're using the native catalog rather than 4chan X's catalog, 4chan X's filters do not apply there.
The native catalog has its own separate filter list.

" + innerHTML: "
Filter is disabled.

Use regular expressions, one per line.
Lines starting with a # will be ignored.
For example, /weeaboo/i will filter posts containing the string \`weeaboo\`, case-insensitive.
MD5 filtering uses exact string matching, not regular expressions.

Note: If you're using the native catalog rather than 4chan X's catalog, 4chan X's filters do not apply there.
The native catalog has its own separate filter list.

" }); return $('.warning', div).hidden = Conf['Filter']; }, @@ -16047,9 +16782,9 @@ return $.on(ta, 'change', $.cb.value); }, advanced: function(section) { - var aa, applyCSS, archBoards, boardID, boardOptions, boardSelect, boards, customCSS, files, i, input, inputs, interval, item, items, k, len1, len2, len3, len4, len5, len6, len7, name, o, q, ref, ref1, ref2, ref3, ref4, ref5, ref6, row, rows, software, ta, table, u, w, warning, withCredentials, y, z; + var applyCSS, archBoards, boardID, boardOptions, boardSelect, boards, customCSS, files, i, input, inputs, interval, item, items, k, len1, len2, len3, len4, len5, len6, len7, name, o, q, ref, ref1, ref2, ref3, ref4, ref5, ref6, row, rows, software, ta, table, u, v, w, warning, withCredentials, y, z; $.extend(section, { - innerHTML: "
Archiver
404 Redirect is disabled.
Thread redirectionPost fetchingFile redirection
Custom Board Navigation
New lines will be converted into spaces.

In the following examples for /g/, g can be changed to a different board ID (a, b, etc...), the current board (current), or the Twitter link (@).
Board link: g
Archive link: g-archive
Internal archive link: g-expired
Title link: g-title
Board link (Replace with title when on that board): g-replace
Full text link: g-full
Custom text link: g-text:"Install Gentoo"
Index-only link: g-index
Catalog-only link: g-catalog
External link: external-text:"Google","http://www.google.com"
Combinations are possible: g-index-text:"Technology Index"
Full board list toggle: toggle-all

[ toggle-all ] [current-title] [g-title / a-title / jp-title] [x / wsg / h] [t-text:"Piracy"]
will give you
[ + ] [Technology] [Technology / Anime & Manga / Otaku Culture] [x / wsg / h] [Piracy]
if you are on /g/.
Time Formatting is disabled.
:
Supported format specifiers:
Day: %a, %A, %d, %e
Month: %m, %b, %B
Year: %y, %Y
Hour: %k, %H, %l, %I, %p, %P
Minute: %M
Second: %S
Literal %: %%
Quote Backlinks formatting is disabled.
:
File Info Formatting is disabled.
:
Link: %l (truncated), %L (untruncated), %T (4chan filename)
Filename: %n (truncated), %N (untruncated), %t (4chan filename)
Spoiler indicator: %p
Size: %B (Bytes), %K (KB), %M (MB), %s (4chan default)
Resolution: %r (Displays 'PDF' for PDF files)
Tag: %g
Literal %: %%
Quick Reply Personas

One item per line.
Items will be added in the relevant input's auto-completion list.
Password items will always be used, since there is no password input.
Lines starting with a # will be ignored.

Unread Favicon is disabled.
Thread Updater is disabled.
Interval: seconds
Custom Cooldown Time
Seconds:
" + innerHTML: "
Archiver
404 Redirect is disabled.
Thread redirectionPost fetchingFile redirection
Captcha Language
Choose from list of language codes. Leave blank to autoselect.
Custom Board Navigation
New lines will be converted into spaces.

In the following examples for /g/, g can be changed to a different board ID (a, b, etc...), the current board (current), or the Twitter link (@).
Board link: g
Archive link: g-archive
Internal archive link: g-expired
Title link: g-title
Board link (Replace with title when on that board): g-replace
Full text link: g-full
Custom text link: g-text:"Install Gentoo"
Index-only link: g-index
Catalog-only link: g-catalog
External link: external-text:"Google","http://www.google.com"
Combinations are possible: g-index-text:"Technology Index"
Full board list toggle: toggle-all

[ toggle-all ] [current-title] [g-title / a-title / jp-title] [x / wsg / h] [t-text:"Piracy"]
will give you
[ + ] [Technology] [Technology / Anime & Manga / Otaku Culture] [x / wsg / h] [Piracy]
if you are on /g/.
Time Formatting is disabled.
:
Supported format specifiers:
Day: %a, %A, %d, %e
Month: %m, %b, %B
Year: %y, %Y
Hour: %k, %H, %l, %I, %p, %P
Minute: %M
Second: %S
Literal %: %%
Quote Backlinks formatting is disabled.
:
File Info Formatting is disabled.
:
Link: %l (truncated), %L (untruncated), %T (4chan filename)
Filename: %n (truncated), %N (untruncated), %t (4chan filename)
Spoiler indicator: %p
Size: %B (Bytes), %K (KB), %M (MB), %s (4chan default)
Resolution: %r (Displays 'PDF' for PDF files)
Tag: %g
Literal %: %%
Quick Reply Personas

One item per line.
Items will be added in the relevant input's auto-completion list.
Password items will always be used, since there is no password input.
Lines starting with a # will be ignored.

Unread Favicon is disabled.
Thread Updater is disabled.
Interval: seconds
Custom Cooldown Time
Seconds:
" }); ref = $$('.warning', section); for (k = 0, len1 = ref.length; k < len1; k++) { @@ -16058,7 +16793,7 @@ } items = {}; inputs = {}; - ref1 = ['boardnav', 'time', 'backlink', 'fileInfo', 'favicon', 'usercss', 'customCooldown']; + ref1 = ['captchaLanguage', 'boardnav', 'time', 'backlink', 'fileInfo', 'favicon', 'usercss', 'customCooldown']; for (q = 0, len2 = ref1.length; q < len2; q++) { name = ref1[q]; input = $("[name='" + name + "']", section); @@ -16071,7 +16806,9 @@ $.on(input, 'change', Settings[name]); } else { $.on(input, 'input', $.cb.value); - $.on(input, 'input', Settings[name]); + if (name in Settings) { + $.on(input, 'input', Settings[name]); + } } } ta = $('.personafield', section); @@ -16085,10 +16822,9 @@ val = items[key]; input = inputs[key]; input.value = val; - if (key === 'usercss' || key === 'customCooldown') { - continue; + if (key in Settings && key !== 'usercss') { + Settings[key].call(input); } - Settings[key].call(input); } }); interval = $('input[name="Interval"]', section); @@ -16105,8 +16841,8 @@ ref2 = Redirect.archives; for (u = 0, len3 = ref2.length; u < len3; u++) { ref3 = ref2[u], name = ref3.name, boards = ref3.boards, files = ref3.files, software = ref3.software, withCredentials = ref3.withCredentials; - for (w = 0, len4 = boards.length; w < len4; w++) { - boardID = boards[w]; + for (v = 0, len4 = boards.length; v < len4; v++) { + boardID = boards[v]; o = archBoards[boardID] || (archBoards[boardID] = { thread: [[], []], post: [[], []], @@ -16125,8 +16861,8 @@ for (boardID in archBoards) { o = archBoards[boardID]; ref4 = ['thread', 'post', 'file']; - for (y = 0, len5 = ref4.length; y < len5; y++) { - item = ref4[y]; + for (w = 0, len5 = ref4.length; w < len5; w++) { + item = ref4[w]; i = o[item][0].length ? 1 : 0; o[item][i].push('disabled'); o[item] = o[item][0].concat(o[item][1]); @@ -16135,8 +16871,8 @@ rows = []; boardOptions = []; ref5 = Object.keys(archBoards).sort(); - for (z = 0, len6 = ref5.length; z < len6; z++) { - boardID = ref5[z]; + for (y = 0, len6 = ref5.length; y < len6; y++) { + boardID = ref5[y]; row = $.el('tr', { className: "board-" + boardID }); @@ -16148,8 +16884,8 @@ })); o = archBoards[boardID]; ref6 = ['thread', 'post', 'file']; - for (aa = 0, len7 = ref6.length; aa < len7; aa++) { - item = ref6[aa]; + for (z = 0, len7 = ref6.length; z < len7; z++) { + item = ref6[z]; $.add(row, Settings.addArchiveCell(boardID, o, item)); } rows.push(row); @@ -16323,23 +17059,35 @@ Main = { init: function() { - var db, flatten, k, len1, pathname, ref, ref1, ref2; + var db, flatten, items, k, key, len1, pathname, ref, ref1, ref2; + if (d.body && !$('title', d.head)) { + return; + } + if (window['4chan X antidup']) { + return; + } + window['4chan X antidup'] = true; if (location.hostname === 'www.google.com') { - if (location.pathname === '/recaptcha/api/fallback') { + if (location.pathname === '/recaptcha/api/noscript') { $.ready(function() { return Captcha.noscript.initFrame(); }); - } else { - $.get('Captcha Fixes', true, function(arg) { - var enabled; - enabled = arg['Captcha Fixes']; - if (enabled) { - return $.ready(function() { - return Captcha.fixes.init(); - }); - } + return; + } + if (location.pathname === '/recaptcha/api/fallback') { + $.ready(function() { + return Captcha.v2.initFrame(); }); } + $.get('Captcha Fixes', true, function(arg) { + var enabled; + enabled = arg['Captcha Fixes']; + if (enabled) { + return $.ready(function() { + return Captcha.fixes.init(); + }); + } + }); return; } g.threads = new SimpleDict(); @@ -16393,14 +17141,32 @@ }; } Conf['selectedArchives'] = {}; - $.get(Conf, function(items) { - $.extend(Conf, items); - if (Conf['Fixed Thread Watcher'] == null) { - Conf['Fixed Thread Watcher'] = Conf['Toggleable Thread Watcher']; - } + Conf['cooldowns'] = {}; + Conf['Except Archives from Encryption'] = false; + items = {}; + for (key in Conf) { + items[key] = void 0; + } + items['previousversion'] = void 0; + $.get(items, function(items) { return $.asap((function() { return doc = d.documentElement; - }), Main.initFeatures); + }), function() { + var ref3, val; + if (items.previousversion == null) { + Main.ready(function() { + $.set('previousversion', g.VERSION); + return Settings.open(); + }); + } else if (items.previousversion !== g.VERSION) { + Main.upgrade(items); + } + for (key in Conf) { + val = Conf[key]; + Conf[key] = (ref3 = items[key]) != null ? ref3 : val; + } + return Main.initFeatures(); + }); }); return $.asap((function() { return doc = d.documentElement; @@ -16408,12 +17174,43 @@ return $.onExists(doc, 'body', false, Main.initStyle); }); }, + upgrade: function(items) { + var compareString, items2, previousversion, ref, ref1; + previousversion = items.previousversion; + items2 = { + previousversion: g.VERSION + }; + compareString = previousversion.replace(/\d+/g, function(x) { + return ('0000' + x).slice(-5); + }); + if (compareString < '00001.00011.00008.00000') { + if (items['Fixed Thread Watcher'] == null) { + items2['Fixed Thread Watcher'] = (ref = items['Toggleable Thread Watcher']) != null ? ref : true; + } + if (items['Exempt Archives from Encryption'] == null) { + items2['Exempt Archives from Encryption'] = (ref1 = items['Except Archives from Encryption']) != null ? ref1 : false; + } + } + $.extend(items, items2); + return $.set(items2, function() { + var el, ref2; + if ((ref2 = items['Show Updated Notifications']) != null ? ref2 : true) { + el = $.el('span', { + innerHTML: "4chan X has been updated to version " + E(g.VERSION) + "." + }); + return new Notice('info', el, 15); + } + }); + }, initFeatures: function() { - var err, feature, k, len1, name, pathname, ref, ref1, ref2; - if ((ref = location.hostname) === 'boards.4chan.org' || ref === 'sys.4chan.org') { + var err, feature, k, len1, match, name, pathname, ref, ref1, ref2; + if ((ref = location.hostname) === 'boards.4chan.org' || ref === 'sys.4chan.org' || ref === 'www.4chan.org') { $.globalEval('document.documentElement.classList.add("js-enabled");'); } switch (location.hostname) { + case 'www.4chan.org': + Captcha.replace.init(); + return; case 'a.4cdn.org': return; case 'sys.4chan.org': @@ -16421,20 +17218,29 @@ if (g.VIEW === 'post') { PostSuccessful.init(); } + if (Conf['404 Redirect'] && /\/imgboard\.php$/.test(location.pathname) && (match = location.search.match(/\bres=(\d+)/))) { + $.ready(function() { + var ref1; + if (((ref1 = $.id('errmsg')) != null ? ref1.textContent : void 0) === 'Error: Specified thread does not exist.') { + return Redirect.navigate('thread', { + boardID: g.BOARD.ID, + postID: +match[1] + }); + } + }); + } return; case 'i.4cdn.org': $.asap((function() { return d.readyState !== 'loading'; }), function() { - var URL, pathname, ref1, video; + var pathname, ref1, video; if (Conf['404 Redirect'] && ((ref1 = d.title) === '4chan - Temporarily Offline' || ref1 === '4chan - 404 Not Found')) { - Redirect.init(); pathname = location.pathname.split('/'); - URL = Redirect.to('file', { + return Redirect.navigate('file', { boardID: g.BOARD.ID, filename: pathname[pathname.length - 1] }); - return Redirect.navigate(URL); } else if (video = $('video')) { if (Conf['Volume in New Tab']) { Volume.setup(video); @@ -16473,6 +17279,9 @@ }, initStyle: function() { var keyboard, ref; + if (location.hostname === 'www.4chan.org') { + $.addStyle(Main.cssWWW); + } if (!Main.isThisPageLegit() || $.hasClass(doc, 'fourchan-x')) { return; } @@ -16481,7 +17290,9 @@ } $.addClass(doc, 'fourchan-x', 'seaweedchan'); $.addClass(doc, g.VIEW === 'thread' ? 'thread-view' : g.VIEW); - $.addClass(doc, typeof chrome !== "undefined" && chrome !== null ? 'blink' : 'gecko'); + if ($.engine) { + $.addClass(doc, $.engine); + } $.addStyle(Main.css, 'fourchanx-css'); keyboard = false; $.on(d, 'mousedown', function() { @@ -16528,21 +17339,20 @@ }); }, initReady: function() { - var GMver, err, i, k, len1, passLink, ref, ref1, styleSelector, v; - if ((ref = d.title) === '4chan - Temporarily Offline' || ref === '4chan - 404 Not Found') { - if (g.VIEW === 'thread') { - ThreadWatcher.set404(g.BOARD.ID, g.THREADID, function() { - var href; - if (Conf['404 Redirect']) { - href = Redirect.to('thread', { - boardID: g.BOARD.ID, - threadID: g.THREADID, - postID: +location.hash.match(/\d+/) - }); - return Redirect.navigate(href, "/" + g.BOARD + "/"); - } - }); - } + var err, passLink, ref, ref1, styleSelector; + if (g.VIEW === 'thread' && (((ref = d.title) === '4chan - Temporarily Offline' || ref === '4chan - 404 Not Found') || ($('.board') && !$('.opContainer')))) { + ThreadWatcher.set404(g.BOARD.ID, g.THREADID, function() { + if (Conf['404 Redirect']) { + return Redirect.navigate('thread', { + boardID: g.BOARD.ID, + threadID: g.THREADID, + postID: +location.hash.match(/\d+/) + }, "/" + g.BOARD + "/"); + } + }); + return; + } + if ((ref1 = d.title) === '4chan - Temporarily Offline' || ref1 === '4chan - 404 Not Found') { return; } if (styleSelector = $.id('styleSelector')) { @@ -16560,33 +17370,7 @@ } else { $.event('4chanXInitFinished'); } - $.get('previousversion', null, function(arg) { - var el, previousversion; - previousversion = arg.previousversion; - if (previousversion === g.VERSION) { - return; - } - if (previousversion) { - el = $.el('span', { - innerHTML: "4chan X has been updated to version " + E(g.VERSION) + "." - }); - new Notice('info', el, 15); - } else { - Settings.open(); - } - return $.set('previousversion', g.VERSION); - }); if (Conf['Show Support Message']) { - GMver = GM_info.version.split('.'); - ref1 = "1.14".split('.'); - for (i = k = 0, len1 = ref1.length; k < len1; i = ++k) { - v = ref1[i]; - if (v === GMver[i]) { - continue; - } - (v < GMver[i]) || new Notice('warning', "Your version of Greasemonkey is outdated (v" + GM_info.version + " instead of v1.14 minimum) and 4chan X may not operate correctly.", 30); - break; - } try { return localStorage.getItem('4chan-settings'); } catch (_error) { @@ -16686,11 +17470,11 @@ error = errors[0]; } if (error) { - new Notice('error', Main.parseError(error), 15); + new Notice('error', Main.parseError(error, Main.reportLink([error])), 15); return; } div = $.el('div', { - innerHTML: E(errors.length) + " errors occurred. [show]" + innerHTML: E(errors.length) + " errors occurred." + Main.reportLink(errors).innerHTML + " [show]" }); $.on(div.lastElementChild, 'click', function() { var ref; @@ -16705,16 +17489,34 @@ } return new Notice('error', [div, logs], 30); }, - parseError: function(data) { - var error, message; + parseError: function(data, reportLink) { + var context, error, lines, message, ref, ref1; c.error(data.message, data.error.stack); message = $.el('div', { - textContent: data.message + innerHTML: E(data.message) + (reportLink ? reportLink.innerHTML : "") }); error = $.el('div', { textContent: (data.error.name || 'Error') + ": " + (data.error.message || 'see console for details') }); - return [message, error]; + lines = ((ref = data.error.stack) != null ? (ref1 = ref.match(/\d+(?=:\d+\)?$)/mg)) != null ? ref1.join().replace(/^/, ' at ') : void 0 : void 0) || ''; + context = $.el('div', { + textContent: "(4chan X ccd0 v" + g.VERSION + " userscript on " + $.engine + lines + ")" + }); + return [message, error, context]; + }, + reportLink: function(errors) { + var data, details, ref, title, url; + data = errors[0]; + title = data.message; + if (errors.length > 1) { + title += " (+" + (errors.length - 1) + " other errors)"; + } + details = "[Please describe the steps needed to reproduce this error.]\n\nScript: 4chan X ccd0 v" + g.VERSION + " userscript\nUser agent: " + navigator.userAgent + "\nURL: " + location.href + "\n\n" + data.error + "\n" + (((ref = data.error.stack) != null ? ref.replace(data.error.toString(), '').trim() : void 0) || ''); + details = details.replace(/file:\/{3}.+\//g, ''); + url = "https://gitreports.com/issue/ccd0/4chan-x?issue_title=" + (encodeURIComponent(title)) + "&details=" + (encodeURIComponent(details)); + return { + innerHTML: " [report]" + }; }, isThisPageLegit: function() { var ref; @@ -16731,12 +17533,12 @@ }); }, css: "/*!\n" + -" * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome\n" + +" * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome\n" + " * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n" + " */\n" + "@font-face {\n" + " font-family: FontAwesome;\n" + -" src: url('data:application/font-woff;base64,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') format('woff');\n" + +" src: url('data:application/font-woff;base64,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') format('woff');\n" + " font-weight: 400;\n" + " font-style: normal;\n" + "}\n" + @@ -16923,7 +17725,7 @@ ".fa-github:before {content: \"\\f09b\";}\n" + ".fa-unlock:before {content: \"\\f09c\";}\n" + ".fa-credit-card:before {content: \"\\f09d\";}\n" + -".fa-rss:before {content: \"\\f09e\";}\n" + +".fa-feed:before, .fa-rss:before {content: \"\\f09e\";}\n" + ".fa-hdd-o:before {content: \"\\f0a0\";}\n" + ".fa-bullhorn:before {content: \"\\f0a1\";}\n" + ".fa-bell:before {content: \"\\f0f3\";}\n" + @@ -17199,14 +18001,14 @@ ".fa-ge:before, .fa-empire:before {content: \"\\f1d1\";}\n" + ".fa-git-square:before {content: \"\\f1d2\";}\n" + ".fa-git:before {content: \"\\f1d3\";}\n" + -".fa-hacker-news:before {content: \"\\f1d4\";}\n" + +".fa-y-combinator-square:before, .fa-yc-square:before, .fa-hacker-news:before {content: \"\\f1d4\";}\n" + ".fa-tencent-weibo:before {content: \"\\f1d5\";}\n" + ".fa-qq:before {content: \"\\f1d6\";}\n" + ".fa-wechat:before, .fa-weixin:before {content: \"\\f1d7\";}\n" + ".fa-send:before, .fa-paper-plane:before {content: \"\\f1d8\";}\n" + ".fa-send-o:before, .fa-paper-plane-o:before {content: \"\\f1d9\";}\n" + ".fa-history:before {content: \"\\f1da\";}\n" + -".fa-genderless:before, .fa-circle-thin:before {content: \"\\f1db\";}\n" + +".fa-circle-thin:before {content: \"\\f1db\";}\n" + ".fa-header:before {content: \"\\f1dc\";}\n" + ".fa-paragraph:before {content: \"\\f1dd\";}\n" + ".fa-sliders:before {content: \"\\f1de\";}\n" + @@ -17273,7 +18075,7 @@ ".fa-venus:before {content: \"\\f221\";}\n" + ".fa-mars:before {content: \"\\f222\";}\n" + ".fa-mercury:before {content: \"\\f223\";}\n" + -".fa-transgender:before {content: \"\\f224\";}\n" + +".fa-intersex:before, .fa-transgender:before {content: \"\\f224\";}\n" + ".fa-transgender-alt:before {content: \"\\f225\";}\n" + ".fa-venus-double:before {content: \"\\f226\";}\n" + ".fa-mars-double:before {content: \"\\f227\";}\n" + @@ -17282,6 +18084,7 @@ ".fa-mars-stroke-v:before {content: \"\\f22a\";}\n" + ".fa-mars-stroke-h:before {content: \"\\f22b\";}\n" + ".fa-neuter:before {content: \"\\f22c\";}\n" + +".fa-genderless:before {content: \"\\f22d\";}\n" + ".fa-facebook-official:before {content: \"\\f230\";}\n" + ".fa-pinterest-p:before {content: \"\\f231\";}\n" + ".fa-whatsapp:before {content: \"\\f232\";}\n" + @@ -17293,6 +18096,71 @@ ".fa-train:before {content: \"\\f238\";}\n" + ".fa-subway:before {content: \"\\f239\";}\n" + ".fa-medium:before {content: \"\\f23a\";}\n" + +".fa-yc:before, .fa-y-combinator:before {content: \"\\f23b\";}\n" + +".fa-optin-monster:before {content: \"\\f23c\";}\n" + +".fa-opencart:before {content: \"\\f23d\";}\n" + +".fa-expeditedssl:before {content: \"\\f23e\";}\n" + +".fa-battery-4:before, .fa-battery-full:before {content: \"\\f240\";}\n" + +".fa-battery-3:before, .fa-battery-three-quarters:before {content: \"\\f241\";}\n" + +".fa-battery-2:before, .fa-battery-half:before {content: \"\\f242\";}\n" + +".fa-battery-1:before, .fa-battery-quarter:before {content: \"\\f243\";}\n" + +".fa-battery-0:before, .fa-battery-empty:before {content: \"\\f244\";}\n" + +".fa-mouse-pointer:before {content: \"\\f245\";}\n" + +".fa-i-cursor:before {content: \"\\f246\";}\n" + +".fa-object-group:before {content: \"\\f247\";}\n" + +".fa-object-ungroup:before {content: \"\\f248\";}\n" + +".fa-sticky-note:before {content: \"\\f249\";}\n" + +".fa-sticky-note-o:before {content: \"\\f24a\";}\n" + +".fa-cc-jcb:before {content: \"\\f24b\";}\n" + +".fa-cc-diners-club:before {content: \"\\f24c\";}\n" + +".fa-clone:before {content: \"\\f24d\";}\n" + +".fa-balance-scale:before {content: \"\\f24e\";}\n" + +".fa-hourglass-o:before {content: \"\\f250\";}\n" + +".fa-hourglass-1:before, .fa-hourglass-start:before {content: \"\\f251\";}\n" + +".fa-hourglass-2:before, .fa-hourglass-half:before {content: \"\\f252\";}\n" + +".fa-hourglass-3:before, .fa-hourglass-end:before {content: \"\\f253\";}\n" + +".fa-hourglass:before {content: \"\\f254\";}\n" + +".fa-hand-grab-o:before, .fa-hand-rock-o:before {content: \"\\f255\";}\n" + +".fa-hand-stop-o:before, .fa-hand-paper-o:before {content: \"\\f256\";}\n" + +".fa-hand-scissors-o:before {content: \"\\f257\";}\n" + +".fa-hand-lizard-o:before {content: \"\\f258\";}\n" + +".fa-hand-spock-o:before {content: \"\\f259\";}\n" + +".fa-hand-pointer-o:before {content: \"\\f25a\";}\n" + +".fa-hand-peace-o:before {content: \"\\f25b\";}\n" + +".fa-trademark:before {content: \"\\f25c\";}\n" + +".fa-registered:before {content: \"\\f25d\";}\n" + +".fa-creative-commons:before {content: \"\\f25e\";}\n" + +".fa-gg:before {content: \"\\f260\";}\n" + +".fa-gg-circle:before {content: \"\\f261\";}\n" + +".fa-tripadvisor:before {content: \"\\f262\";}\n" + +".fa-odnoklassniki:before {content: \"\\f263\";}\n" + +".fa-odnoklassniki-square:before {content: \"\\f264\";}\n" + +".fa-get-pocket:before {content: \"\\f265\";}\n" + +".fa-wikipedia-w:before {content: \"\\f266\";}\n" + +".fa-safari:before {content: \"\\f267\";}\n" + +".fa-chrome:before {content: \"\\f268\";}\n" + +".fa-firefox:before {content: \"\\f269\";}\n" + +".fa-opera:before {content: \"\\f26a\";}\n" + +".fa-internet-explorer:before {content: \"\\f26b\";}\n" + +".fa-tv:before, .fa-television:before {content: \"\\f26c\";}\n" + +".fa-contao:before {content: \"\\f26d\";}\n" + +".fa-500px:before {content: \"\\f26e\";}\n" + +".fa-amazon:before {content: \"\\f270\";}\n" + +".fa-calendar-plus-o:before {content: \"\\f271\";}\n" + +".fa-calendar-minus-o:before {content: \"\\f272\";}\n" + +".fa-calendar-times-o:before {content: \"\\f273\";}\n" + +".fa-calendar-check-o:before {content: \"\\f274\";}\n" + +".fa-industry:before {content: \"\\f275\";}\n" + +".fa-map-pin:before {content: \"\\f276\";}\n" + +".fa-map-signs:before {content: \"\\f277\";}\n" + +".fa-map-o:before {content: \"\\f278\";}\n" + +".fa-map:before {content: \"\\f279\";}\n" + +".fa-commenting:before {content: \"\\f27a\";}\n" + +".fa-commenting-o:before {content: \"\\f27b\";}\n" + +".fa-houzz:before {content: \"\\f27c\";}\n" + +".fa-vimeo:before {content: \"\\f27d\";}\n" + +".fa-black-tie:before {content: \"\\f27e\";}\n" + +".fa-fonticons:before {content: \"\\f280\";}\n" + ".fa-spin::before {\n" + " -webkit-animation:spin 2s infinite linear;\n" + " -moz-animation:spin 2s infinite linear;\n" + @@ -17417,9 +18285,16 @@ " /* party hats */\n" + " pointer-events: none;\n" + "}\n" + +"#g-recaptcha {\n" + +" min-height: 78px;\n" + +" height: auto;\n" + +"}\n" + ":root:not(.js-enabled) #postForm {\n" + " display: table;\n" + "}\n" + +"#captchaContainerAlt td:nth-child(2) {\n" + +" display: table-cell !important;\n" + +"}\n" + "/* Anti-autoplay */\n" + "audio.controls-added {\n" + " display: block;\n" + @@ -17431,6 +18306,11 @@ " height: auto;\n" + " text-align: center;\n" + "}\n" + +":root.anti-autoplay .autoplay-removed {\n" + +" display: block !important;\n" + +" min-width: 640px;\n" + +" min-height: 390px;\n" + +"}\n" + "/* fixed, z-index */\n" + "#overlay,\n" + "#fourchanx-settings,\n" + @@ -17471,9 +18351,15 @@ "#embedding {\n" + " z-index: 11;\n" + "}\n" + -"#thread-watcher {\n" + +":root.fixed-watcher #thread-watcher {\n" + " z-index: 10;\n" + "}\n" + +":root.fixed:not(.gallery-open) #header-bar:not(:hover) {\n" + +" z-index: 8;\n" + +"}\n" + +"#thread-watcher {\n" + +" z-index: 5;\n" + +"}\n" + "/* Header */\n" + ".fixed.top-header body {\n" + " padding-top: 2em;\n" + @@ -17548,7 +18434,7 @@ " height: 10px;\n" + " position: absolute;\n" + "}\n" + -":root:not(.autohide) #scroll-marker {\n" + +"#header-bar:not(.autohide) #scroll-marker {\n" + " pointer-events: none;\n" + "}\n" + "#header-bar #scroll-marker {\n" + @@ -17627,6 +18513,7 @@ " flex: auto;\n" + " display: -webkit-flex;\n" + " display: flex;\n" + +" width: 0px; /* XXX Fixes Edge not shrinking the board list below default size when needed */\n" + " }\n" + " :root.fixed:not(.centered-links) #full-board-list > .boardList > a,\n" + " :root.fixed:not(.centered-links) #full-board-list > .boardList > span:not(.space):not(.spacer) {\n" + @@ -17838,7 +18725,7 @@ ".section-filter textarea {\n" + " height: 500px;\n" + "}\n" + -".section-filter a {\n" + +".section-filter a, .section-advanced a {\n" + " text-decoration: underline;\n" + "}\n" + ".section-sauce textarea {\n" + @@ -17928,6 +18815,10 @@ " left: -1em;\n" + " width: 0;\n" + "}\n" + +"/* \`\`::-webkit-*'' selectors break selector lists on Firefox. */\n" + +"#index-search::-webkit-search-cancel-button {\n" + +" display: none;\n" + +"}\n" + "#index-search:not([data-searching]) + #index-search-clear {\n" + " display: none;\n" + "}\n" + @@ -18090,10 +18981,11 @@ "#thread-watcher {\n" + " padding-bottom: 3px;\n" + " padding-left: 3px;\n" + -" overflow: hidden;\n" + " white-space: nowrap;\n" + " min-width: 146px;\n" + -" max-height: 92%;\n" + +"}\n" + +"#watched-threads {\n" + +" overflow-x: hidden;\n" + " overflow-y: auto;\n" + "}\n" + "#thread-watcher .refresh {\n" + @@ -18102,7 +18994,12 @@ ":root.fixed-watcher #thread-watcher {\n" + " position: fixed;\n" + "}\n" + -":root:not(.fixed-watcher) #thread-watcher:not(:hover) {\n" + +":root.fixed-watcher #watched-threads {\n" + +" /* XXX https://code.google.com/p/chromium/issues/detail?id=168840, https://bugs.webkit.org/show_bug.cgi?id=94158 */\n" + +" max-height: 85vh;\n" + +" max-height: calc(100vh - 75px);\n" + +"}\n" + +":root:not(.fixed-watcher) #watched-threads:not(:hover) {\n" + " max-height: 210px;\n" + " overflow-y: hidden;\n" + "}\n" + @@ -18269,6 +19166,11 @@ ":root.fit-height .full-image {\n" + " max-height: 100vh;\n" + "}\n" + +":root.fit-height.fixed .full-image {\n" + +" /* XXX https://code.google.com/p/chromium/issues/detail?id=168840, https://bugs.webkit.org/show_bug.cgi?id=94158 */\n" + +" max-height: 93vh;\n" + +" max-height: calc(100vh - 35px);\n" + +"}\n" + ":root.fit-width .full-image {\n" + " max-width: 100%;\n" + "}\n" + @@ -18438,6 +19340,13 @@ " min-width: 300px;\n" + " border-radius: 3px 3px 0 0;\n" + "}\n" + +"#qr > form {\n" + +" /* XXX https://code.google.com/p/chromium/issues/detail?id=168840, https://bugs.webkit.org/show_bug.cgi?id=94158 */\n" + +" max-height: 85vh;\n" + +" max-height: calc(100vh - 75px);\n" + +" overflow-y: auto;\n" + +" overflow-x: hidden;\n" + +"}\n" + "#qrtab {\n" + " border-radius: 3px 3px 0 0;\n" + "}\n" + @@ -18509,7 +19418,7 @@ " position: relative;\n" + " top: 2px;\n" + "}\n" + -"/* Noscript Recaptcha */\n" + +"/* Recaptcha v1 */\n" + ".captcha-img {\n" + " margin: 0px;\n" + " text-align: center;\n" + @@ -18518,11 +19427,11 @@ " min-height: 59px;\n" + " min-width: 302px;\n" + "}\n" + -".captcha-input{\n" + +".captcha-input {\n" + " width: 100%;\n" + " margin: 1px 0 0;\n" + "}\n" + -"#qr-captcha-iframe {\n" + +"#qr.captcha-v1 #qr-captcha-iframe {\n" + " display: none;\n" + "}\n" + "/* Recaptcha v2 */\n" + @@ -18549,6 +19458,13 @@ " display: block;\n" + " width: 100%;\n" + "}\n" + +"#qr.captcha-v2 #qr-captcha-iframe {\n" + +" width: 302px;\n" + +" height: 423px;\n" + +" border: 0;\n" + +" display: block;\n" + +" margin: auto;\n" + +"}\n" + ".goog-bubble-content {\n" + " max-width: 100vw;\n" + " max-height: 100vh;\n" + @@ -18602,6 +19518,7 @@ ".has-file #qr-filename {\n" + " -webkit-flex: 1 1 auto;\n" + " flex: 1 1 auto;\n" + +" width: 0px; /* XXX Fixes filename not shrinking to allow space for buttons in Edge */\n" + " display: inline-block;\n" + " padding: 0;\n" + " padding-left: 3px;\n" + @@ -18748,6 +19665,8 @@ "}\n" + ".textarea {\n" + " position: relative;\n" + +" display: -webkit-flex;\n" + +" display: flex;\n" + "}\n" + ":root.webkit .textarea {\n" + " margin-bottom: -2px;\n" + @@ -18786,7 +19705,7 @@ " height: 15px;\n" + " text-align: center;\n" + "}\n" + -".menu-button + .container:not(:empty) {\n" + +".menu-button + .container :first-child {\n" + " margin-left: -5px;\n" + "}\n" + "#menu {\n" + @@ -19069,12 +19988,7 @@ "}\n" + ".gal-fit-height .gal-image img,\n" + ".gal-fit-height .gal-image video {\n" + -" /*\n" + -" Chrome doesn't support viewpoint units in calc()\n" + -" http://bugs.chromium.org/168840\n" + -" \"It looks like the original author of viewport units in WebKit is not coming back to fix this stuff.\"\n" + -" Well, fuck.\n" + -" */\n" + +" /* XXX https://code.google.com/p/chromium/issues/detail?id=168840, https://bugs.webkit.org/show_bug.cgi?id=94158 */\n" + " max-height: 95vh;\n" + " max-height: calc(100vh - 25px);\n" + "}\n" + @@ -19177,7 +20091,7 @@ " width: 4em;\n" + "}\n" + ":root.gallery-open.fixed #header-bar:not(.autohide),\n" + -":root.gallery-open.fixed #header-bar:not(.autohide) .fa::before {\n" + +":root.gallery-open.fixed #header-bar:not(.autohide) #shortcuts .fa::before {\n" + " visibility: hidden;\n" + "}\n" + "/* General */\n" + @@ -19707,7 +20621,10 @@ " font-family: sans-serif !important;\n" + " text-shadow: 1px 1px 1px rgba(0,74,153,0.6);\n" + "}", - features: [['Polyfill', Polyfill], ['Redirect', Redirect], ['Header', Header], ['Catalog Links', CatalogLinks], ['Settings', Settings], ['Index Generator', Index], ['Disable Autoplay', AntiAutoplay], ['Announcement Hiding', PSAHiding], ['Fourchan thingies', Fourchan], ['Color User IDs', IDColor], ['Highlight by User ID', IDHighlight], ['Custom CSS', CustomCSS], ['Linkify', Linkify], ['Reveal Spoilers', RemoveSpoilers], ['Resurrect Quotes', Quotify], ['Filter', Filter], ['Thread Hiding Buttons', ThreadHiding], ['Reply Hiding Buttons', PostHiding], ['Recursive', Recursive], ['Strike-through Quotes', QuoteStrikeThrough], ['Quick Reply', QR], ['Menu', Menu], ['Index Generator (Menu)', Index.menu], ['Report Link', ReportLink], ['Thread Hiding (Menu)', ThreadHiding.menu], ['Reply Hiding (Menu)', PostHiding.menu], ['Delete Link', DeleteLink], ['Filter (Menu)', Filter.menu], ['Download Link', DownloadLink], ['Archive Link', ArchiveLink], ['Quote Inlining', QuoteInline], ['Quote Previewing', QuotePreview], ['Quote Backlinks', QuoteBacklink], ['Mark Quotes of You', QuoteYou], ['Mark OP Quotes', QuoteOP], ['Mark Cross-thread Quotes', QuoteCT], ['Anonymize', Anonymize], ['Time Formatting', Time], ['Relative Post Dates', RelativeDates], ['File Info Formatting', FileInfo], ['Fappe Tyme', FappeTyme], ['Gallery', Gallery], ['Gallery (menu)', Gallery.menu], ['Sauce', Sauce], ['Image Expansion', ImageExpand], ['Image Expansion (Menu)', ImageExpand.menu], ['Reveal Spoiler Thumbnails', RevealSpoilers], ['Image Loading', ImageLoader], ['Image Hover', ImageHover], ['Volume Control', Volume], ['WEBM Metadata', Metadata], ['Comment Expansion', ExpandComment], ['Thread Expansion', ExpandThread], ['Thread Excerpt', ThreadExcerpt], ['Favicon', Favicon], ['Unread', Unread], ['Quote Threading', QuoteThreading], ['Thread Stats', ThreadStats], ['Thread Updater', ThreadUpdater], ['Thread Watcher', ThreadWatcher], ['Thread Watcher (Menu)', ThreadWatcher.menu], ['Mark New IPs', MarkNewIPs], ['Index Navigation', Nav], ['Keybinds', Keybinds], ['Banner', Banner], ['Flash Features', Flash]] + cssWWW: "#captcha-cnt {\n" + +" height: auto;\n" + +"}", + features: [['Polyfill', Polyfill], ['Captcha Replacement', Captcha.replace], ['Redirect', Redirect], ['Header', Header], ['Catalog Links', CatalogLinks], ['Settings', Settings], ['Index Generator', Index], ['Disable Autoplay', AntiAutoplay], ['Announcement Hiding', PSAHiding], ['Fourchan thingies', Fourchan], ['Color User IDs', IDColor], ['Highlight by User ID', IDHighlight], ['Custom CSS', CustomCSS], ['Linkify', Linkify], ['Reveal Spoilers', RemoveSpoilers], ['Resurrect Quotes', Quotify], ['Filter', Filter], ['Thread Hiding Buttons', ThreadHiding], ['Reply Hiding Buttons', PostHiding], ['Recursive', Recursive], ['Strike-through Quotes', QuoteStrikeThrough], ['Quick Reply', QR], ['Cooldown', QR.cooldown], ['Menu', Menu], ['Index Generator (Menu)', Index.menu], ['Report Link', ReportLink], ['Thread Hiding (Menu)', ThreadHiding.menu], ['Reply Hiding (Menu)', PostHiding.menu], ['Delete Link', DeleteLink], ['Filter (Menu)', Filter.menu], ['Download Link', DownloadLink], ['Archive Link', ArchiveLink], ['Quote Inlining', QuoteInline], ['Quote Previewing', QuotePreview], ['Quote Backlinks', QuoteBacklink], ['Mark Quotes of You', QuoteYou], ['Mark OP Quotes', QuoteOP], ['Mark Cross-thread Quotes', QuoteCT], ['Anonymize', Anonymize], ['Time Formatting', Time], ['Relative Post Dates', RelativeDates], ['File Info Formatting', FileInfo], ['Fappe Tyme', FappeTyme], ['Gallery', Gallery], ['Gallery (menu)', Gallery.menu], ['Sauce', Sauce], ['Image Expansion', ImageExpand], ['Image Expansion (Menu)', ImageExpand.menu], ['Reveal Spoiler Thumbnails', RevealSpoilers], ['Image Loading', ImageLoader], ['Image Hover', ImageHover], ['Volume Control', Volume], ['WEBM Metadata', Metadata], ['Comment Expansion', ExpandComment], ['Thread Expansion', ExpandThread], ['Thread Excerpt', ThreadExcerpt], ['Favicon', Favicon], ['Unread', Unread], ['Quote Threading', QuoteThreading], ['Thread Stats', ThreadStats], ['Thread Updater', ThreadUpdater], ['Thread Watcher', ThreadWatcher], ['Thread Watcher (Menu)', ThreadWatcher.menu], ['Mark New IPs', MarkNewIPs], ['Index Navigation', Nav], ['Keybinds', Keybinds], ['Banner', Banner], ['Flash Features', Flash]] }; Main.init(); diff --git a/builds/4chan-X.crx b/builds/4chan-X.crx index 20bb17ce7..d2ddf59a7 100644 Binary files a/builds/4chan-X.crx and b/builds/4chan-X.crx differ diff --git a/builds/4chan-X.meta.js b/builds/4chan-X.meta.js index 74d907f89..d22715a88 100644 --- a/builds/4chan-X.meta.js +++ b/builds/4chan-X.meta.js @@ -1,26 +1,38 @@ // ==UserScript== // @name 4chan X -// @version 1.10.13.1 +// @version 1.11.9.2 // @minGMVer 1.14 // @minFFVer 26 // @namespace 4chan-X // @description Cross-browser userscript for maximum lurking on 4chan. // @license MIT; https://github.com/ccd0/4chan-x/blob/master/LICENSE -// @match *://boards.4chan.org/* -// @match *://sys.4chan.org/* -// @match *://a.4cdn.org/* -// @match *://i.4cdn.org/* -// @match https://www.google.com/recaptcha/api2/anchor?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* -// @match https://www.google.com/recaptcha/api2/frame?*&k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* -// @match *://www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc +// @include http://boards.4chan.org/* +// @include https://boards.4chan.org/* +// @include http://sys.4chan.org/* +// @include https://sys.4chan.org/* +// @include http://a.4cdn.org/* +// @include https://a.4cdn.org/* +// @include http://i.4cdn.org/* +// @include https://i.4cdn.org/* +// @include http://www.4chan.org/banned +// @include https://www.4chan.org/banned +// @include http://www.4chan.org/feedback +// @include https://www.4chan.org/feedback +// @include https://www.google.com/recaptcha/api2/anchor?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* +// @include https://www.google.com/recaptcha/api2/frame?*&k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* +// @include http://www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* +// @include https://www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* +// @include http://www.google.com/recaptcha/api/noscript?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* +// @include https://www.google.com/recaptcha/api/noscript?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* // @grant GM_getValue // @grant GM_setValue // @grant GM_deleteValue // @grant GM_listValues +// @grant GM_addValueChangeListener // @grant GM_openInTab // @grant GM_xmlhttpRequest // @run-at document-start -// @updateURL https://ccd0.github.io/4chan-x/builds/4chan-X.meta.js -// @downloadURL https://ccd0.github.io/4chan-x/builds/4chan-X.user.js +// @updateURL https://www.4chan-x.net/builds/4chan-X.meta.js +// @downloadURL https://www.4chan-x.net/builds/4chan-X.user.js // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAACVBMVEUAAGcAAABmzDNZt9VtAAAAAXRSTlMAQObYZgAAAF5JREFUeNrtkTESABAQxPD/R6tsE2dUGYUtFJvLDKf93KevHJAjpBorAQWSBIKqFASC4G0pCAkm4GfaEvgYXl0T6HBaE97f0vmnfYHbZOMLZCx9ISdKWwjOWZSC8GYm4SUGwfYgqI4AAAAASUVORK5CYII= // ==/UserScript== diff --git a/builds/4chan-X.user.js b/builds/4chan-X.user.js index 89454187d..b8b14fbaa 100644 --- a/builds/4chan-X.user.js +++ b/builds/4chan-X.user.js @@ -1,28 +1,40 @@ // Generated by CoffeeScript // ==UserScript== // @name 4chan X -// @version 1.10.13.1 +// @version 1.11.9.2 // @minGMVer 1.14 // @minFFVer 26 // @namespace 4chan-X // @description Cross-browser userscript for maximum lurking on 4chan. // @license MIT; https://github.com/ccd0/4chan-x/blob/master/LICENSE -// @match *://boards.4chan.org/* -// @match *://sys.4chan.org/* -// @match *://a.4cdn.org/* -// @match *://i.4cdn.org/* -// @match https://www.google.com/recaptcha/api2/anchor?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* -// @match https://www.google.com/recaptcha/api2/frame?*&k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* -// @match *://www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc +// @include http://boards.4chan.org/* +// @include https://boards.4chan.org/* +// @include http://sys.4chan.org/* +// @include https://sys.4chan.org/* +// @include http://a.4cdn.org/* +// @include https://a.4cdn.org/* +// @include http://i.4cdn.org/* +// @include https://i.4cdn.org/* +// @include http://www.4chan.org/banned +// @include https://www.4chan.org/banned +// @include http://www.4chan.org/feedback +// @include https://www.4chan.org/feedback +// @include https://www.google.com/recaptcha/api2/anchor?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* +// @include https://www.google.com/recaptcha/api2/frame?*&k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* +// @include http://www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* +// @include https://www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* +// @include http://www.google.com/recaptcha/api/noscript?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* +// @include https://www.google.com/recaptcha/api/noscript?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc* // @grant GM_getValue // @grant GM_setValue // @grant GM_deleteValue // @grant GM_listValues +// @grant GM_addValueChangeListener // @grant GM_openInTab // @grant GM_xmlhttpRequest // @run-at document-start -// @updateURL https://ccd0.github.io/4chan-x/builds/4chan-X.meta.js -// @downloadURL https://ccd0.github.io/4chan-x/builds/4chan-X.user.js +// @updateURL https://www.4chan-x.net/builds/4chan-X.meta.js +// @downloadURL https://www.4chan-x.net/builds/4chan-X.user.js // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAACVBMVEUAAGcAAABmzDNZt9VtAAAAAXRSTlMAQObYZgAAAF5JREFUeNrtkTESABAQxPD/R6tsE2dUGYUtFJvLDKf93KevHJAjpBorAQWSBIKqFASC4G0pCAkm4GfaEvgYXl0T6HBaE97f0vmnfYHbZOMLZCx9ISdKWwjOWZSC8GYm4SUGwfYgqI4AAAAASUVORK5CYII= // ==/UserScript== @@ -126,7 +138,7 @@ 'Desktop Notifications': [true, 'Enables desktop notifications across various 4chan X features.'], '404 Redirect': [true, 'Redirect dead threads and images to the archives.'], 'Archive Report': [true, 'Enable reporting posts to supported archives.'], - 'Except Archives from Encryption': [false, 'Permit loading content from, and warningless redirects to, HTTP-only archives from HTTPS pages.'], + 'Exempt Archives from Encryption': [false, 'Permit loading content from, and warningless redirects to, HTTP-only archives from HTTPS pages.'], 'Keybinds': [true, 'Bind actions to keyboard shortcuts.'], 'Time Formatting': [true, 'Localize and format timestamps.'], 'Relative Post Dates': [true, 'Display dates like "3 minutes ago". Tooltip shows the timestamp.'], @@ -214,11 +226,11 @@ 'Page Count in Stats': [true, 'Display the page count in the thread stats.', 1], 'Updater and Stats in Header': [true, 'Places the thread updater and thread stats in the header instead of floating them.'], 'Thread Watcher': [true, 'Bookmark threads.'], - 'Fixed Thread Watcher': [null, 'Makes the thread watcher scroll with the page.', 1], + 'Fixed Thread Watcher': [true, 'Makes the thread watcher scroll with the page.', 1], 'Toggleable Thread Watcher': [true, 'Adds a shortcut for the thread watcher and hides the watcher by default.', 1], 'Mark New IPs': [false, 'Label each post from a new IP with the thread\'s current IP count.'] }, - 'Posting': { + 'Posting and Captchas': { 'Quick Reply': [true, 'All-in-one form to reply, create threads, automate dumping and more.'], 'QR Shortcut': [true, 'Add a shortcut to the header to toggle the QR.', 1], 'Persistent QR': [true, 'The Quick reply won\'t disappear after posting.', 1], @@ -226,6 +238,7 @@ 'Open Post in New Tab': [true, 'Open new threads or replies to a thread from the index in a new tab.', 1], 'Remember QR Size': [false, 'Remember the size of the Quick reply.', 1], 'Remember Spoiler': [false, 'Remember the spoiler state, instead of resetting after posting.', 1], + 'Randomize Filename': [false, 'Set the filename to a random timestamp within the past year. Disabled on /f/.', 1], 'Show New Thread Option in Threads': [false, 'Show the option to post a new / different thread from inside a thread.', 1], 'Show Name and Subject': [false, 'Show the classic name, email, and subject fields in the QR, even when 4chan doesn\'t use them all.', 1], 'Hide Original Post Form': [true, 'Hide the normal post form.', 1], @@ -235,7 +248,9 @@ 'Auto-load captcha': [false, 'Automatically load the captcha in the QR even if your post is empty.', 1], 'Post on Captcha Completion': [false, 'Submit the post immediately when the captcha is completed.', 1], 'Bottom QR Link': [true, 'Places a link on the bottom of threads to open the QR.', 1], - 'Captcha Fixes': [true, 'Make captcha more keyboard-navigable.'] + 'Captcha Fixes': [true, 'Make captcha easier to use, especially with the keyboard.'], + 'Use Recaptcha v1': [false, 'Use the old text version of Recaptcha.'], + 'Use Recaptcha v2 in Reports': [false, 'Use the image selection captcha in the report window.'] }, 'Quote Links': { 'Quote Backlinks': [true, 'Add quote backlinks.'], @@ -267,6 +282,7 @@ 'Hide Thumbnails': [false], 'Fit Width': [true], 'Fit Height': [true], + 'Stretch to Fit': [false], 'Scroll to Post': [true], 'Slide Delay': [6.0] }, @@ -285,14 +301,14 @@ tripcode: "# Filter any tripfag\n#/^!/", capcode: "# Set a custom class for mods:\n#/Mod$/;highlight:mod;op:yes\n# Set a custom class for moot:\n#/Admin$/;highlight:moot;op:yes", subject: "# Filter Generals on /v/:\n#/general/i;boards:v;op:only", - comment: "# Filter Stallman copypasta on /g/:\n#/what you\'re refer+ing to as linux/i;boards:g", + comment: "# Filter Stallman copypasta on /g/:\n#/what you\'re refer+ing to as linux/i;boards:g\n# Filter posts with 20 or more quote links:\n#/(?:>>\\d(?:(?!>>\\d)[^])*){20}/\n# Filter posts like T H I S / H / I / S:\n#/^>?\\s?\\w\\s?(\\w)\\s?(\\w)\\s?(\\w).*$[\\s>]+\\1[\\s>]+\\2[\\s>]+\\3/im", flag: '', filename: '', dimensions: "# Highlight potential wallpapers:\n#/1920x1080/;op:yes;highlight;top:no;boards:w,wg", filesize: '', MD5: '' }, - sauces: "https://www.google.com/searchbyimage?image_url=%IMG\nhttp://iqdb.org/?url=%IMG\nhttp://eye.swfchan.com/search/?q=%name;types:swf;sandbox\n#//tineye.com/search?url=%IMG\n#https://www.yandex.com/images/search?rpt=imageview&img_url=%IMG\n#//saucenao.com/search.php?url=%IMG\n#http://3d.iqdb.org/?url=%IMG\n#http://regex.info/exif.cgi?imgurl=%URL\n# uploaders:\n#//imgur.com/upload?url=%URL;types:gif,jpg,png,pdf;text:Upload to imgur\n# \"View Same\" in archives:\n#https://archive.moe/_/search/image/%MD5/;text:View same on archive.moe\n#https://archive.moe/%board/search/image/%MD5/;text:View same on archive.moe/%board/;boards:a,biz,c,co,diy,fit,gd,h,i,jp,k,m,mlp,po,qa,r9k,s4s,sci,tg,u,v,vg,vp,vr,wsg\n#https://rbt.asia/%board/image/%MD5;text:View same on RBT /%board/;boards:cgl,g,mu,qa,w", + sauces: "https://www.google.com/searchbyimage?image_url=%IMG\nhttp://iqdb.org/?url=%IMG\nhttp://eye.swfchan.com/search/?q=%name;types:swf;sandbox\n#//tineye.com/search?url=%IMG\n#https://www.yandex.com/images/search?rpt=imageview&img_url=%IMG\n#//saucenao.com/search.php?url=%IMG\n#http://3d.iqdb.org/?url=%IMG\n# tools:\n#http://regex.info/exif.cgi?imgurl=%URL\n#//imgops.com/%URL;types:gif,jpg,png\n# uploaders:\n#//imgur.com/upload?url=%URL;types:gif,jpg,png,pdf;text:Upload to imgur\n# \"View Same\" in archives:\n#https://archive.moe/_/search/image/%MD5/;text:View same on archive.moe\n#https://archive.moe/%board/search/image/%MD5/;text:View same on archive.moe/%board/;boards:a,an,biz,c,co,diy,fit,gd,gif,h,i,int,jp,k,m,mlp,out,po,qa,r9k,s4s,sci,tg,u,v,vg,vp,vr,wsg\n#https://rbt.asia/%board/image/%MD5;text:View same on RBT /%board/;boards:cgl,g,mu,qa,w", FappeT: { werk: false }, @@ -322,6 +338,7 @@ QR: { 'QR.personas': "#options:\"sage\";boards:jp;always" }, + captchaLanguage: '', time: '%m/%d/%y(%a)%H:%M:%S', backlink: '>>%id', fileInfo: '%l (%p%s, %r%g)', @@ -378,7 +395,6 @@ 'Bottom Scroll': [false, 'Always scroll to the bottom, not the first new post. Useful for event threads.'], 'Scroll BG': [false, 'Auto-scroll background tabs.'], 'Auto Update': [true, 'Automatically fetch new posts.'], - 'Ignore Offline Status': [false, 'Update even if your browser reports you are offline.'], 'Optional Increase': [false, 'Increase the intervals between updates on threads without new posts.'] }, 'Interval': 30 @@ -396,7 +412,7 @@ doc = d.documentElement; g = { - VERSION: '1.10.13.1', + VERSION: '1.11.9.2', NAMESPACE: '4chan X.', boards: {} }; @@ -616,6 +632,14 @@ if (el = $(selector, root)) { return cb(el); } + if ($.engine === 'edge' && d.readyState === 'loading') { + $.asap((function() { + return d.readyState !== 'loading' || $(selector, root); + }), function() { + return $.onExists(root, selector, subtree, cb); + }); + return; + } observer = new MutationObserver(function() { if (el = $(selector, root)) { observer.disconnect(); @@ -681,7 +705,7 @@ }; $.rm = function(el) { - return el.remove(); + return el != null ? el.remove() : void 0; }; $.rmAll = function(root) { @@ -778,7 +802,9 @@ })); }; - $.open = GM_openInTab; + $.open = typeof GM_openInTab !== "undefined" && GM_openInTab !== null ? GM_openInTab : function(url) { + return window.open(url, '_blank'); + }; $.debounce = function(wait, fn) { var args, exec, lastCall, that, timeout; @@ -854,6 +880,21 @@ return video.mozHasAudio || !!video.webkitAudioDecodedByteCount; }; + $.engine = (function() { + if (/Edge\//.test(navigator.userAgent)) { + return 'edge'; + } + if (/Chrome\//.test(navigator.userAgent)) { + return 'blink'; + } + if (/WebKit\//.test(navigator.userAgent)) { + return 'webkit'; + } + if (/Gecko\/|Goanna/.test(navigator.userAgent)) { + return 'gecko'; + } + })(); + $.item = function(key, val) { var item; item = {}; @@ -863,42 +904,109 @@ $.syncing = {}; - $.oldValue = {}; - - $.sync = function(key, cb) { - key = g.NAMESPACE + key; - $.syncing[key] = cb; - return $.oldValue[key] = GM_getValue(key); - }; - - (function() { - var onChange; - onChange = function(key) { - var cb, newValue; - if (!(cb = $.syncing[key])) { - return; + if (typeof GM_deleteValue !== "undefined" && GM_deleteValue !== null) { + $.getValue = GM_getValue; + $.listValues = function() { + return GM_listValues(); + }; + } else { + $.getValue = function(key) { + return localStorage[key]; + }; + $.listValues = function() { + var key, results; + results = []; + for (key in localStorage) { + if (key.slice(0, g.NAMESPACE.length) === g.NAMESPACE) { + results.push(key); + } } - newValue = GM_getValue(key); - if (newValue === $.oldValue[key]) { - return; + return results; + }; + } + + if (typeof GM_addValueChangeListener !== "undefined" && GM_addValueChangeListener !== null) { + $.setValue = GM_setValue; + $.deleteValue = GM_deleteValue; + } else if (typeof GM_deleteValue !== "undefined" && GM_deleteValue !== null) { + $.oldValue = {}; + $.setValue = function(key, val) { + GM_setValue(key, val); + if (key in $.syncing) { + $.oldValue[key] = val; + return localStorage[key] = val; } - if (newValue != null) { - $.oldValue[key] = newValue; - return cb(JSON.parse(newValue), key); - } else { + }; + $.deleteValue = function(key) { + GM_deleteValue(key); + if (key in $.syncing) { delete $.oldValue[key]; - return cb(void 0, key); + return delete localStorage[key]; } }; - $.on(window, 'storage', function(arg) { - var key; - key = arg.key; - return onChange(key); - }); - return $.forceSync = function(key) { - return onChange(g.NAMESPACE + key); + } else { + $.oldValue = {}; + $.setValue = function(key, val) { + if (key in $.syncing) { + $.oldValue[key] = val; + } + return localStorage[key] = val; }; - })(); + $.deleteValue = function(key) { + if (key in $.syncing) { + delete $.oldValue[key]; + } + return delete localStorage[key]; + }; + } + + if (typeof GM_addValueChangeListener !== "undefined" && GM_addValueChangeListener !== null) { + $.sync = function(key, cb) { + return $.syncing[key] = GM_addValueChangeListener(g.NAMESPACE + key, function(key2, oldValue, newValue, remote) { + if (remote) { + if (newValue !== void 0) { + newValue = JSON.parse(newValue); + } + return cb(newValue, key); + } + }); + }; + $.forceSync = function() {}; + } else { + $.sync = function(key, cb) { + key = g.NAMESPACE + key; + $.syncing[key] = cb; + return $.oldValue[key] = $.getValue(key); + }; + (function() { + var onChange; + onChange = function(key) { + var cb, newValue; + if (!(cb = $.syncing[key])) { + return; + } + newValue = $.getValue(key); + if (newValue === $.oldValue[key]) { + return; + } + if (newValue != null) { + $.oldValue[key] = newValue; + return cb(JSON.parse(newValue), key.slice(g.NAMESPACE.length)); + } else { + delete $.oldValue[key]; + return cb(void 0, key.slice(g.NAMESPACE.length)); + } + }; + $.on(window, 'storage', function(arg) { + var key; + key = arg.key; + return onChange(key); + }); + return $.forceSync = function(key) { + return onChange(g.NAMESPACE + key); + }; + })(); + } $["delete"] = function(keys) { var k, key, len1; @@ -907,12 +1015,7 @@ } for (k = 0, len1 = keys.length; k < len1; k++) { key = keys[k]; - key = g.NAMESPACE + key; - GM_deleteValue(key); - if (key in $.syncing) { - delete $.oldValue[key]; - localStorage.removeItem(key); - } + $.deleteValue(g.NAMESPACE + key); } }; @@ -926,7 +1029,7 @@ } return $.queueTask(function() { for (key in items) { - if (val = GM_getValue(g.NAMESPACE + key)) { + if (val = $.getValue(g.NAMESPACE + key)) { items[key] = JSON.parse(val); } } @@ -934,36 +1037,24 @@ }); }; - $.set = (function() { - var set; - set = function(key, val) { - key = g.NAMESPACE + key; - val = JSON.stringify(val); - GM_setValue(key, val); - if (key in $.syncing) { - $.oldValue[key] = val; - return localStorage.setItem(key, val); + $.set = function(keys, val, cb) { + var key, value; + if (typeof keys === 'string') { + $.setValue(g.NAMESPACE + keys, JSON.stringify(val)); + } else { + for (key in keys) { + value = keys[key]; + $.setValue(g.NAMESPACE + key, JSON.stringify(value)); } - }; - return function(keys, val, cb) { - var key, value; - if (typeof keys === 'string') { - set(keys, val); - } else { - for (key in keys) { - value = keys[key]; - set(key, value); - } - cb = val; - } - return typeof cb === "function" ? cb() : void 0; - }; - })(); + cb = val; + } + return typeof cb === "function" ? cb() : void 0; + }; $.clear = function(cb) { - var a, board, boards, id; + var id; $["delete"](Object.keys(Conf)); - $["delete"](['previousversion', 'AutoWatch', 'cooldown.global', 'QR Size', 'captchas', 'QR.persona', 'hiddenPSA']); + $["delete"](['previousversion', 'AutoWatch', 'QR Size', 'captchas', 'QR.persona', 'hiddenPSA']); $["delete"]((function() { var k, len1, ref, results; ref = ['embedding', 'updater', 'thread-stats', 'thread-watcher', 'qr']; @@ -974,28 +1065,8 @@ } return results; })()); - boards = (function() { - var k, len1, ref, results; - ref = $$('#boardNavDesktop > .boardList > a'); - results = []; - for (k = 0, len1 = ref.length; k < len1; k++) { - a = ref[k]; - results.push(a.textContent); - } - return results; - })(); - boards.push('qa'); - $["delete"]((function() { - var k, len1, results; - results = []; - for (k = 0, len1 = boards.length; k < len1; k++) { - board = boards[k]; - results.push("cooldown." + board); - } - return results; - })()); try { - $["delete"](GM_listValues().map(function(key) { + $["delete"]($.listValues().map(function(key) { return key.replace(g.NAMESPACE, ''); })); } catch (_error) {} @@ -1024,13 +1095,17 @@ return this[name] = cb; }; - Callbacks.prototype.execute = function(node) { + Callbacks.prototype.execute = function(node, keys) { var err, errors, k, len1, name, ref; - ref = this.keys; - for (k = 0, len1 = ref.length; k < len1; k++) { - name = ref[k]; + if (keys == null) { + keys = this.keys; + } + for (k = 0, len1 = keys.length; k < len1; k++) { + name = keys[k]; try { - this[name].call(node); + if ((ref = this[name]) != null) { + ref.call(node); + } } catch (_error) { err = _error; if (!errors) { @@ -1230,9 +1305,19 @@ quote: $('.postNum > a:nth-of-type(2)', info), comment: $('.postMessage', post), links: [], - quotelinks: [], - backlinks: info.getElementsByClassName('backlink') + quotelinks: [] }; + if ($.engine === 'edge') { + Object.defineProperty(this.nodes, 'backlinks', { + configurable: true, + enumerable: true, + get: function() { + return info.getElementsByClassName('backlink'); + } + }); + } else { + this.nodes.backlinks = info.getElementsByClassName('backlink'); + } if (!(this.isReply = $.hasClass(post, 'reply'))) { this.thread.OP = this; this.thread.isArchived = !!$('.archivedIcon', info); @@ -1448,7 +1533,7 @@ Post.prototype.resurrect = function() { var clone, k, len1, len2, q, quotelink, ref, ref1, strong; - delete this.isDead; + this.isDead = false; $.rmClass(this.nodes.root, 'deleted-post'); strong = $('strong.warning', this.nodes.info); if (this.file && this.file.isDead) { @@ -1476,7 +1561,6 @@ }; Post.prototype.collect = function() { - this.kill(); g.posts.rm(this.fullID); this.thread.posts.rm(this); return this.board.posts.rm(this); @@ -1523,9 +1607,19 @@ nameBlock: $('.nameBlock', info), quote: $('.postNum > a:nth-of-type(2)', info), comment: $('.postMessage', post), - quotelinks: [], - backlinks: info.getElementsByClassName('backlink') + quotelinks: [] }; + if ($.engine === 'edge') { + Object.defineProperty(this.nodes, 'backlinks', { + configurable: true, + enumerable: true, + get: function() { + return info.getElementsByClassName('backlink'); + } + }); + } else { + this.nodes.backlinks = info.getElementsByClassName('backlink'); + } ref1 = $$('.inline', post); for (q = 0, len2 = ref1.length; q < len2; q++) { inline = ref1[q]; @@ -2053,19 +2147,27 @@ function Connection(target1, origin1, cb1) { this.target = target1; this.origin = origin1; - this.cb = cb1; + this.cb = cb1 != null ? cb1 : {}; this.onMessage = bind(this.onMessage, this); this.send = bind(this.send, this); $.on(window, 'message', this.onMessage); } + Connection.prototype.targetWindow = function() { + if (this.target instanceof window.HTMLIFrameElement) { + return this.target.contentWindow; + } else { + return this.target; + } + }; + Connection.prototype.send = function(data) { - return this.target.postMessage("" + g.NAMESPACE + (JSON.stringify(data)), this.origin); + return this.targetWindow().postMessage("" + g.NAMESPACE + (JSON.stringify(data)), this.origin); }; Connection.prototype.onMessage = function(e) { var base1, data, type, value; - if (!(e.source === this.target && e.origin === this.origin && typeof e.data === 'string' && e.data.slice(0, g.NAMESPACE.length) === g.NAMESPACE)) { + if (!(e.source === this.targetWindow() && e.origin === this.origin && typeof e.data === 'string' && e.data.slice(0, g.NAMESPACE.length) === g.NAMESPACE)) { return; } data = JSON.parse(e.data.slice(g.NAMESPACE.length)); @@ -2185,7 +2287,7 @@ if (/^https:\/\//.test(url) || location.protocol === 'http:') { $.cache(url, (function(self) { return function() { - return self.parseArchivedPost(this.response); + return self.parseArchivedPost(this.response, url); }; })(this), { responseType: 'json', @@ -2206,7 +2308,7 @@ } } } - return _this.parseArchivedPost(response); + return _this.parseArchivedPost(response, url); }; })(this)); return true; @@ -2214,8 +2316,8 @@ return false; }; - Fetcher.prototype.parseArchivedPost = function(data) { - var board, comment, greentext, i, j, o, post, ref, text, text2, thread; + Fetcher.prototype.parseArchivedPost = function(data, url) { + var board, comment, greentext, i, j, key, o, post, ref, ref1, text, text2, thread, val; if (post = g.posts[this.boardID + "." + this.postID]) { this.insert(post); return; @@ -2292,6 +2394,13 @@ delete o.info.uniqueID; } if ((ref = data.media) != null ? ref.media_filename : void 0) { + ref1 = data.media; + for (key in ref1) { + val = ref1[key]; + if (/_link$/.test(key) && (val != null ? val[0] : void 0) === '/') { + data.media[key] = url.split('/', 3).join('/') + val; + } + } o.file = { name: data.media.media_filename, url: data.media.media_link || data.media.remote_media_link || (location.protocol + "//i.4cdn.org/" + this.boardID + "/" + (encodeURIComponent(data.media[this.boardID === 'f' ? 'media_filename' : 'media_orig']))), @@ -2365,26 +2474,7 @@ Polyfill = { init: function() { - this.notificationPermission(); - this.toBlob(); - return this.visibility(); - }, - notificationPermission: function() { - if (!window.Notification || 'permission' in Notification || !window.webkitNotifications) { - return; - } - return Object.defineProperty(Notification, 'permission', { - get: function() { - switch (webkitNotifications.checkPermission()) { - case 0: - return 'granted'; - case 1: - return 'default'; - case 2: - return 'denied'; - } - } - }); + return this.toBlob(); }, toBlob: function() { var base1; @@ -2400,26 +2490,6 @@ type: 'image/png' })); }); - }, - visibility: function() { - if ('visibilityState' in d) { - return; - } - Object.defineProperties(HTMLDocument.prototype, { - visibilityState: { - get: function() { - return this.webkitVisibilityState; - } - }, - hidden: { - get: function() { - return this.webkitHidden; - } - } - }); - return $.on(d, 'webkitvisibilitychange', function() { - return $.event('visibilitychange'); - }); } }; @@ -3153,7 +3223,7 @@ $.asap((function() { return $('.board > .thread > .postContainer', doc) || d.readyState !== 'loading'; }), function() { - var board, el, len3, len4, ref6, ref7, ref8, threadRoot, topNavPos, u, w; + var board, el, len3, len4, ref6, ref7, threadRoot, topNavPos, u, v; if (!Main.isThisPageLegit()) { return; } @@ -3170,13 +3240,11 @@ $.event('PostsInserted'); d.implementation.createDocument(null, null, null).appendChild(board); ref7 = $$('.navLinks'); - for (w = 0, len4 = ref7.length; w < len4; w++) { - el = ref7[w]; + for (v = 0, len4 = ref7.length; v < len4; v++) { + el = ref7[v]; $.rm(el); } - if ((ref8 = $.id('search-box')) != null) { - ref8.parentNode.remove(); - } + $.rm($.id('ctrl-top')); topNavPos = $.id('delform').previousElementSibling; $.before(topNavPos, $.el('hr')); return $.before(topNavPos, Index.navLinks); @@ -3349,7 +3417,6 @@ var mode, page, ref, ref1, search, state; if (e != null ? e.state : void 0) { ref = e.state, search = ref.search, mode = ref.mode; - page = Index.getCurrentPage(); state = {}; if (Index.search !== search) { state.search = Index.search = search; @@ -3358,6 +3425,7 @@ state.mode = mode; Index.saveMode(mode); } + page = Index.getCurrentPage(); if (Index.currentPage !== page) { state.page = Index.currentPage = page; } @@ -3601,7 +3669,6 @@ }, update: function(state) { var now, ref, ref1; - delete Index.pageNum; if ((ref = Index.req) != null) { ref.abort(); } @@ -3916,10 +3983,12 @@ Index.pushState({ page: page }); + Index.setPage(); } } nodes = Index.buildSinglePage(Index.getCurrentPage()); } + delete Index.pageNum; $.rmAll(Index.root); $.rmAll(Header.hover); if (Conf['Index Mode'] === 'catalog') { @@ -4238,7 +4307,7 @@ return Build.postFromObject(data, board.ID); }, catalogThread: function(thread) { - var br, cc, comment, data, exif, fileCount, gifIcon, href, imgClass, k, len1, len2, len3, len4, pageCount, postCount, pp, q, quote, ref, ref1, ref2, ref3, ref4, root, spoilerRange, src, staticPath, u, w; + var br, cc, comment, data, exif, fileCount, gifIcon, href, imgClass, k, len1, len2, len3, len4, pageCount, postCount, pp, q, quote, ref, ref1, ref2, ref3, ref4, root, spoilerRange, src, staticPath, u, v; staticPath = Build.staticPath, gifIcon = Build.gifIcon; data = Index.liveThreadData[Index.liveThreadIDs.indexOf(thread.ID)]; if (data.spoiler && !Conf['Reveal Spoiler Thumbnails']) { @@ -4296,8 +4365,8 @@ $.replace(pp, cc); } ref3 = $$('br', root.lastElementChild); - for (w = 0, len4 = ref3.length; w < len4; w++) { - br = ref3[w]; + for (v = 0, len4 = ref3.length; v < len4; v++) { + br = ref3[v]; if (((ref4 = br.previousSibling) != null ? ref4.nodeName : void 0) === 'BR') { $.rm(br); } @@ -4551,9 +4620,18 @@ }; Menu.prototype.insertEntry = function(entry, parent, data) { - var k, len1, ref, subEntry, submenu; + var err, k, len1, ref, subEntry, submenu; if (typeof entry.open === 'function') { - if (!entry.open(data)) { + try { + if (!entry.open(data)) { + return; + } + } catch (_error) { + err = _error; + Main.handleErrors({ + message: "Error in building the " + this.type + " menu.", + error: err + }); return; } } @@ -4872,25 +4950,36 @@ CrossOrigin = (function() { return { binary: function(url, cb, headers) { + var options, ref, workaround; if (headers == null) { headers = {}; } - return GM_xmlhttpRequest({ + workaround = $.engine === 'gecko' && (typeof GM_info !== "undefined" && GM_info !== null) && /^[0-2]\.|^3\.[01](?!\d)/.test(GM_info.version); + workaround || (workaround = (typeof GM_info !== "undefined" && GM_info !== null ? (ref = GM_info.script) != null ? ref.includeJSB : void 0 : void 0) != null); + options = { method: "GET", url: url, headers: headers, - overrideMimeType: "text/plain; charset=x-user-defined", onload: function(xhr) { - var contentDisposition, contentType, data, i, r, ref, ref1; - r = xhr.responseText; - data = new Uint8Array(r.length); - i = 0; - while (i < r.length) { - data[i] = r.charCodeAt(i); - i++; + var contentDisposition, contentType, data, i, r, ref1, ref2; + if (workaround) { + r = xhr.responseText; + data = new Uint8Array(r.length); + i = 0; + while (i < r.length) { + data[i] = r.charCodeAt(i); + i++; + } + } else { + data = new Uint8Array(xhr.response); + } + if (typeof xhr.responseHeaders === 'object') { + contentType = xhr.responseHeaders['Content-Type']; + contentDisposition = xhr.responseHeaders['Content-Disposition']; + } else { + contentType = (ref1 = xhr.responseHeaders.match(/Content-Type:\s*(.*)/i)) != null ? ref1[1] : void 0; + contentDisposition = (ref2 = xhr.responseHeaders.match(/Content-Disposition:\s*(.*)/i)) != null ? ref2[1] : void 0; } - contentType = (ref = xhr.responseHeaders.match(/Content-Type:\s*(.*)/i)) != null ? ref[1] : void 0; - contentDisposition = (ref1 = xhr.responseHeaders.match(/Content-Disposition:\s*(.*)/i)) != null ? ref1[1] : void 0; return cb(data, contentType, contentDisposition); }, onerror: function() { @@ -4899,11 +4988,17 @@ onabort: function() { return cb(null); } - }); + }; + if (workaround) { + options.overrideMimeType = options.mimeType = 'text/plain; charset=x-user-defined'; + } else { + options.responseType = 'arraybuffer'; + } + return GM_xmlhttpRequest(options); }, file: function(url, cb) { return CrossOrigin.binary(url, function(data, contentType, contentDisposition) { - var blob, match, mime, name, ref, ref1, ref2; + var blob, match, mime, name, ref, ref1, ref2, ref3; if (data == null) { return cb(null); } @@ -4913,6 +5008,9 @@ if (match) { name = match.replace(/\\"/g, '"'); } + if ((typeof GM_info !== "undefined" && GM_info !== null ? (ref3 = GM_info.script) != null ? ref3.includeJSB : void 0 : void 0) != null) { + mime = QR.typeFromExtension[name.match(/[^.]*$/)[0].toLowerCase()] || 'application/octet-stream'; + } blob = new Blob([data], { type: mime }); @@ -5012,7 +5110,7 @@ Filter = { filters: {}, init: function() { - var boards, err, filter, hl, k, key, len1, line, op, ref, ref1, ref2, ref3, ref4, ref5, ref6, regexp, stub, top; + var boards, err, filter, hl, k, key, len1, line, op, ref, ref1, ref2, ref3, ref4, ref5, regexp, stub, top; if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Filter'])) { return; } @@ -5032,9 +5130,7 @@ } filter = line.replace(regexp[0], ''); boards = ((ref2 = filter.match(/boards:([^;]+)/)) != null ? ref2[1].toLowerCase() : void 0) || 'global'; - if (boards !== 'global' && (ref3 = g.BOARD.ID, indexOf.call(boards.split(','), ref3) < 0)) { - continue; - } + boards = boards === 'global' ? null : boards.split(','); if (key === 'uniqueID' || key === 'MD5') { regexp = regexp[1]; } else { @@ -5046,10 +5142,10 @@ continue; } } - op = ((ref4 = filter.match(/[^t]op:(yes|no|only)/)) != null ? ref4[1] : void 0) || 'yes'; + op = ((ref3 = filter.match(/[^t]op:(yes|no|only)/)) != null ? ref3[1] : void 0) || 'yes'; stub = (function() { - var ref5; - switch ((ref5 = filter.match(/stub:(yes|no)/)) != null ? ref5[1] : void 0) { + var ref4; + switch ((ref4 = filter.match(/stub:(yes|no)/)) != null ? ref4[1] : void 0) { case 'yes': return true; case 'no': @@ -5059,11 +5155,11 @@ } })(); if (hl = /highlight/.test(filter)) { - hl = ((ref5 = filter.match(/highlight:([\w-]+)/)) != null ? ref5[1] : void 0) || 'filter-highlight'; - top = ((ref6 = filter.match(/top:(yes|no)/)) != null ? ref6[1] : void 0) || 'yes'; + hl = ((ref4 = filter.match(/highlight:([\w-]+)/)) != null ? ref4[1] : void 0) || 'filter-highlight'; + top = ((ref5 = filter.match(/top:(yes|no)/)) != null ? ref5[1] : void 0) || 'yes'; top = top === 'yes'; } - this.filters[key].push(this.createFilter(regexp, op, stub, hl, top)); + this.filters[key].push(this.createFilter(regexp, boards, op, stub, hl, top)); } if (!this.filters[key].length) { delete this.filters[key]; @@ -5077,7 +5173,7 @@ cb: this.node }); }, - createFilter: function(regexp, op, stub, hl, top) { + createFilter: function(regexp, boards, op, stub, hl, top) { var settings, test; test = typeof regexp === 'string' ? function(value) { return regexp === value; @@ -5090,7 +5186,10 @@ "class": hl, top: top }; - return function(value, isReply) { + return function(value, boardID, isReply) { + if (boards && indexOf.call(boards, boardID) < 0) { + return false; + } if (isReply && op === 'only' || !isReply && op === 'no') { return false; } @@ -5110,7 +5209,7 @@ ref = Filter.filters[key]; for (k = 0, len1 = ref.length; k < len1; k++) { filter = ref[k]; - if (!(result = filter(value, this.isReply))) { + if (!(result = filter(value, this.board.ID, this.isReply))) { continue; } if (result.hide && !this.isFetchedQuote) { @@ -5141,7 +5240,7 @@ ref = Filter.filters[key]; for (k = 0, len1 = ref.length; k < len1; k++) { filter = ref[k]; - if (result = filter(value, post.isReply)) { + if (result = filter(value, post.boardID, post.isReply)) { if (result.hide) { return true; } @@ -6704,8 +6803,18 @@ QR = { mimeTypes: ['image/jpeg', 'image/png', 'image/gif', 'application/pdf', 'application/vnd.adobe.flash.movie', 'application/x-shockwave-flash', 'video/webm'], + validExtension: /\.(jpe?g|png|gif|pdf|swf|webm)$/i, + typeFromExtension: { + 'jpg': 'image/jpeg', + 'jpeg': 'image/jpeg', + 'png': 'image/png', + 'gif': 'image/gif', + 'pdf': 'application/pdf', + 'swf': 'application/vnd.adobe.flash.movie', + 'webm': 'video/webm' + }, init: function() { - var noscript, sc; + var noscript, sc, version; if (!Conf['Quick Reply']) { return; } @@ -6714,8 +6823,8 @@ if (g.VIEW === 'archive') { return; } - noscript = Conf['Force Noscript Captcha'] || !$.hasClass(doc, 'js-enabled'); - this.captcha = Captcha[noscript ? 'noscript' : 'v2']; + version = Conf['Use Recaptcha v1'] ? (noscript = Conf['Force Noscript Captcha'] || !$.hasClass(doc, 'js-enabled'), noscript ? 'noscript' : 'v1') : 'v2'; + this.captcha = Captcha[version]; $.on(d, '4chanXInitFinished', this.initReady); Post.callbacks.push({ name: 'Quick Reply', @@ -6868,16 +6977,20 @@ QR.hasFocus = d.activeElement && QR.nodes.el.contains(d.activeElement); QR.nodes.el.classList.toggle('focus', QR.hasFocus); } - if (QR.inCaptcha()) { - QR.scrollY = window.scrollY; - return $.on(d, 'scroll', QR.scrollLock); - } else { - return $.off(d, 'scroll', QR.scrollLock); + if (QR.captcha.isEnabled && QR.captcha === Captcha.v2 && !QR.captcha.noscript) { + if (QR.inCaptcha()) { + QR.scrollY = window.scrollY; + return $.on(d, 'scroll', QR.scrollLock); + } else { + return $.off(d, 'scroll', QR.scrollLock); + } } }); }, inBubble: function() { - return $$('.goog-bubble-content > iframe').some(function(el) { + var bubbles, ref; + bubbles = $$('.goog-bubble-content > iframe'); + return (ref = d.activeElement, indexOf.call(bubbles, ref) >= 0) || bubbles.some(function(el) { return el.getBoundingClientRect().bottom > 0; }); }, @@ -6938,24 +7051,26 @@ return alert(el.textContent); } } else if (d.hidden || !(focusOverride || d.hasFocus())) { - notif = new Notification(el.textContent, { - body: el.textContent, - icon: Favicon.logo - }); - notif.onclick = function() { - return window.focus(); - }; - if (typeof chrome !== "undefined" && chrome !== null) { - notif.onclose = function() { - return notice.close(); + try { + notif = new Notification(el.textContent, { + body: el.textContent, + icon: Favicon.logo + }); + notif.onclick = function() { + return window.focus(); }; - return notif.onshow = function() { - return setTimeout(function() { - notif.onclose = null; - return notif.close(); - }, 7 * $.SECOND); - }; - } + if ($.engine !== 'gecko') { + notif.onclose = function() { + return notice.close(); + }; + return notif.onshow = function() { + return setTimeout(function() { + notif.onclose = null; + return notif.close(); + }, 7 * $.SECOND); + }; + } + } catch (_error) {} } }, notifications: [], @@ -6985,7 +7100,7 @@ return status.disabled = disabled || false; }, quote: function(e) { - var ancestor, caretPos, com, frag, index, insideCode, k, len1, len2, len3, len4, len5, len6, node, post, q, range, ref, ref1, ref2, ref3, ref4, ref5, ref6, ref7, sel, text, thread, u, w, y, z; + var ancestor, caretPos, com, frag, index, insideCode, k, len1, len2, len3, len4, len5, len6, node, post, q, range, ref, ref1, ref2, ref3, ref4, ref5, ref6, ref7, sel, text, thread, u, v, w, y; if (e != null) { e.preventDefault(); } @@ -7025,18 +7140,18 @@ $.replace(node, [$.tn('[spoiler]')].concat(slice.call(node.childNodes), [$.tn('[/spoiler]')])); } ref3 = $$('.prettyprint', frag); - for (w = 0, len4 = ref3.length; w < len4; w++) { - node = ref3[w]; + for (v = 0, len4 = ref3.length; v < len4; v++) { + node = ref3[v]; $.replace(node, [$.tn('[code]')].concat(slice.call(node.childNodes), [$.tn('[/code]')])); } ref4 = $$('.linkify[data-original]', frag); - for (y = 0, len5 = ref4.length; y < len5; y++) { - node = ref4[y]; + for (w = 0, len5 = ref4.length; w < len5; w++) { + node = ref4[w]; $.replace(node, $.tn(node.dataset.original)); } ref5 = $$('.embedder', frag); - for (z = 0, len6 = ref5.length; z < len6; z++) { - node = ref5[z]; + for (y = 0, len6 = ref5.length; y < len6; y++) { + node = ref5[y]; if (((ref6 = node.previousSibling) != null ? ref6.nodeValue : void 0) === ' ') { $.rm(node.previousSibling); } @@ -7148,7 +7263,7 @@ blob = new Blob([arr], { type: m[1] }); - blob.name = "image." + m[2]; + blob.name = "file." + m[2]; QR.handleFiles([blob]); } else if (/^https?:\/\//.test(src)) { QR.handleUrl(src); @@ -7351,7 +7466,7 @@ window.addEventListener('focus', QR.focus, true); window.addEventListener('blur', QR.focus, true); $.on(d, 'click', QR.focus); - if (typeof chrome === "undefined" || chrome === null) { + if ($.engine === 'gecko') { nodes.pasteArea.hidden = false; new MutationObserver(QR.pasteFF).observe(nodes.pasteArea, { childList: true @@ -7369,7 +7484,7 @@ event = node.nodeName === 'SELECT' ? 'change' : 'input'; $.on(nodes[name], event, save); } - if (Conf['Remember QR Size']) { + if ($.engine === 'gecko' && Conf['Remember QR Size']) { $.get('QR Size', '', function(item) { return nodes.com.style.cssText = item['QR Size']; }); @@ -7384,7 +7499,7 @@ QR.persona.init(); new QR.post(true); QR.status(); - QR.cooldown.init(); + QR.cooldown.setup(); QR.captcha.init(); $.add(d.body, dialog); QR.captcha.setup(); @@ -7478,7 +7593,6 @@ upCallbacks: { onload: function() { QR.req.isUploadFinished = true; - QR.req.uploadEndTime = Date.now(); QR.req.progress = '...'; return QR.status(); }, @@ -7490,7 +7604,12 @@ }; cb = function(response) { if (response != null) { - extra.form.append('g-recaptcha-response', response); + if (response.challenge != null) { + extra.form.append('recaptcha_challenge_field', response.challenge); + extra.form.append('recaptcha_response_field', response.response); + } else { + extra.form.append('g-recaptcha-response', response.response); + } } QR.req = $.ajax("https://sys.4chan.org/" + g.BOARD + "/post", options, extra); return QR.req.progress = '...'; @@ -7602,7 +7721,7 @@ post.rm(); QR.captcha.setup(d.activeElement === QR.nodes.status); } - QR.cooldown.add(req.uploadEndTime, threadID, postID); + QR.cooldown.add(threadID, postID); URL = threadID === postID ? window.location.origin + "/" + g.BOARD + "/thread/" + threadID : g.VIEW === 'index' && lastPostToThread && Conf['Open Post in New Tab'] ? window.location.origin + "/" + g.BOARD + "/thread/" + threadID + "#p" + postID : void 0; if (URL) { open = Conf['Open Post in New Tab'] || postsCount ? function() { @@ -7652,13 +7771,17 @@ Captcha = {}; Captcha.fixes = { - css: '.rc-imageselect-target > .rc-imageselect-tile > img:focus {\n outline: 2px solid #4a90e2;\n}\n.rc-button-default:focus {\n box-shadow: inset 0 0 0 2px #0063d6;\n}', + imageKeys: '789456123uiojklm'.split('').concat(['Comma', 'Period']), + css: '.rc-imageselect-target > div:focus {\n outline: 2px solid #4a90e2;\n}\n.rc-button-default:focus {\n box-shadow: inset 0 0 0 2px #0063d6;\n}', + cssNoscript: '.fbc-payload-imageselect {\n position: relative;\n}\n.fbc-payload-imageselect > label {\n position: absolute;\n display: block;\n height: 93.3px;\n width: 93.3px;\n}\nlabel[data-row="0"] {top: 0px;}\nlabel[data-row="1"] {top: 93.3px;}\nlabel[data-row="2"] {top: 186.6px;}\nlabel[data-col="0"] {left: 0px;}\nlabel[data-col="1"] {left: 93.3px;}\nlabel[data-col="2"] {left: 186.6px;}', init: function() { switch (location.pathname.split('/')[3]) { case 'anchor': return this.initMain(); case 'frame': return this.initPopup(); + case 'fallback': + return this.initNoscript(); } }, initMain: function() { @@ -7688,84 +7811,119 @@ }); return $.on(d, 'keydown', this.keybinds.bind(this)); }, - fixImages: function() { - var focus, img, k, len1, ref; - if (!(this.images = $$('.rc-imageselect-target > .rc-imageselect-tile > img')).length) { + initNoscript: function() { + this.noscript = true; + this.images = $$('.fbc-payload-imageselect > input'); + if (!this.images.length) { return; } - focus = this.images[0].tabIndex !== 0; + $.addStyle(this.cssNoscript); + this.addLabels(); + $.on(d, 'keydown', this.keybinds.bind(this)); + return $.on($('.fbc-imageselect-challenge > form'), 'submit', this.checkForm.bind(this)); + }, + fixImages: function() { + var img, k, len1, ref; + this.images = $$('.rc-imageselect-target > div'); ref = this.images; for (k = 0, len1 = ref.length; k < len1; k++) { img = ref[k]; img.tabIndex = 0; } - if (focus) { - return $.queueTask((function(_this) { - return function() { - return _this.focusImage(); - }; - })(this)); + if (this.images.length) { + return this.addTooltips(this.images); } }, - focusImage: function() { - var img; - img = this.images[0]; - return $.asap(function() { - if (!doc.contains(img)) { - return true; + addLabels: function() { + var checkbox, i, imageSelect, label, labels; + imageSelect = $('.fbc-payload-imageselect'); + labels = (function() { + var k, len1, ref, results; + ref = this.images; + results = []; + for (i = k = 0, len1 = ref.length; k < len1; i = ++k) { + checkbox = ref[i]; + checkbox.id = "checkbox-" + i; + label = $.el('label', { + htmlFor: checkbox.id + }); + label.dataset.row = Math.floor(i / 3); + label.dataset.col = i % 3; + results.push(label); } - img.focus(); - return d.activeElement === img; - }, function() {}); + return results; + }).call(this); + $.add(imageSelect, labels); + return this.addTooltips(labels); + }, + addTooltips: function(nodes) { + var i, k, len1, node; + for (i = k = 0, len1 = nodes.length; k < len1; i = ++k) { + node = nodes[i]; + node.title = this.imageKeys[i] + " or " + (this.imageKeys[i + 9][0].toUpperCase()) + this.imageKeys[i + 9].slice(1); + } + }, + checkForm: function(e) { + var checkbox, k, len1, n, ref; + n = 0; + ref = this.images; + for (k = 0, len1 = ref.length; k < len1; k++) { + checkbox = ref[k]; + if (checkbox.checked) { + n++; + } + } + if (n === 0) { + return e.preventDefault(); + } }, keybinds: function(e) { - var dx, reload, verify, x; - if (!(this.images && doc.contains(this.images[0]) && d.activeElement)) { + var dx, i, key, reload, verify, x; + if (!(this.images && doc.contains(this.images[0]))) { return; } - reload = $.id('recaptcha-reload-button'); - verify = $.id('recaptcha-verify-button'); + reload = $('#recaptcha-reload-button, .fbc-button-reload'); + verify = $('#recaptcha-verify-button, .fbc-button-verify > input'); x = this.images.indexOf(d.activeElement); if (x < 0) { - if (!$('.rc-controls').contains(d.activeElement)) { - return; - } x = d.activeElement === verify ? 11 : 9; } - if (!(dx = { - 38: 9, - 40: 3, - 37: 11, - 39: 1, - 73: 9, - 75: 3, - 74: 11, - 76: 1 - }[e.keyCode])) { + key = Keybinds.keyCode(e); + if (!this.noscript && key === 'Space' && x < 9) { + this.images[x].click(); + } else if ((i = this.imageKeys.indexOf(key)) >= 0) { + this.images[i % 9].click(); + verify.focus(); + } else if (dx = { + 'Up': 9, + 'Down': 3, + 'Left': 11, + 'Right': 1 + }[key]) { + x = (x + dx) % 12; + if (x === 10) { + x = dx === 11 ? 9 : 11; + } + (this.images[x] || { + 9: reload, + 11: verify + }[x]).focus(); + } else { return; } - x = (x + dx) % 12; - if (x === 10) { - x = dx === 11 ? 9 : 11; - } - (this.images[x] || { - 9: reload, - 11: verify - }[x]).focus(); e.preventDefault(); return e.stopPropagation(); } }; Captcha.noscript = { - lifetime: 2 * $.MINUTE, - iframeURL: '//www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc', + lifetime: 30 * $.MINUTE, init: function() { var container, input; if (d.cookie.indexOf('pass_enabled=1') >= 0) { return; } - if (!(this.isEnabled = !!$.id('g-recaptcha'))) { + if (!(this.isEnabled = !!$('#g-recaptcha, #captchaContainerAlt'))) { return; } container = $.el('div', { @@ -7794,7 +7952,7 @@ token: this.save.bind(this), error: this.error.bind(this) }); - $.addClass(QR.nodes.el, 'has-captcha'); + $.addClass(QR.nodes.el, 'has-captcha', 'captcha-v1', 'noscript-captcha'); $.after(QR.nodes.com.parentNode, [container, input]); this.captchas = []; $.get('captchas', [], function(arg) { @@ -7811,17 +7969,20 @@ var cb, conn, img, ref, ref1; conn = new Connection(window.parent, location.protocol + "//boards.4chan.org", { response: function(response) { - $.id('response').value = response; - return $('.fbc-challenge > form').submit(); + $.id('recaptcha_response_field').value = response; + return HTMLFormElement.prototype.submit.call($('form')); } }); - conn.send({ - token: (ref = $('.fbc-verification-token > textarea')) != null ? ref.value : void 0, - error: (ref1 = $('.fbc-error')) != null ? ref1.textContent : void 0 - }); - if (!(img = $('.fbc-payload > img'))) { + if (location.hash === '#response') { + conn.send({ + token: (ref = $('textarea')) != null ? ref.value : void 0, + error: (ref1 = $('.recaptcha_input_area')) != null ? ref1.textContent.replace(/:$/, '') : void 0 + }); + } + if (!(img = $('img'))) { return; } + $('form').action = '#response'; cb = function() { var canvas; canvas = $.el('canvas'); @@ -7839,6 +8000,14 @@ } }, timers: {}, + iframeURL: function() { + var lang, url; + url = '//www.google.com/recaptcha/api/noscript?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc'; + if (lang = Conf['captchaLanguage'].trim()) { + url += "&hl=" + (encodeURIComponent(lang)); + } + return url; + }, cb: { focus: function() { return QR.captcha.setup(false, true); @@ -7874,12 +8043,12 @@ if (!this.nodes.iframe) { this.nodes.iframe = $.el('iframe', { id: 'qr-captcha-iframe', - src: this.iframeURL + src: this.iframeURL() }); - $.add(d.body, this.nodes.iframe); - this.conn.target = this.nodes.iframe.contentWindow; + $.add(QR.nodes.el, this.nodes.iframe); + this.conn.target = this.nodes.iframe; } else if (!this.occupied || force) { - this.nodes.iframe.src = this.iframeURL; + this.nodes.iframe.src = this.iframeURL(); } this.occupied = true; if (focus) { @@ -7902,13 +8071,9 @@ if (!this.isEnabled) { return; } - if (this.nodes.img) { - $.rm(this.nodes.img); - } + $.rm(this.nodes.img); delete this.nodes.img; - if (this.nodes.iframe) { - $.rm(this.nodes.iframe); - } + $.rm(this.nodes.iframe); delete this.nodes.iframe; delete this.occupied; return this.beforeSetup(); @@ -7926,7 +8091,7 @@ if (captcha = this.captchas.shift()) { this.count(); $.set('captchas', this.captchas); - return captcha.response; + return captcha; } else if (/\S/.test(this.nodes.input.value)) { return (function(_this) { return function(cb) { @@ -7948,10 +8113,16 @@ } }, save: function(token) { + var captcha; delete this.occupied; this.nodes.input.value = ''; + captcha = { + challenge: token, + response: 'manual_challenge', + timeout: this.timeout + }; if (this.submitCB) { - this.submitCB(token); + this.submitCB(captcha); delete this.submitCB; if (this.needed()) { return this.reload(); @@ -7960,10 +8131,7 @@ } } else { $.forceSync('captchas'); - this.captchas.push({ - response: token, - timeout: this.timeout - }); + this.captchas.push(captcha); this.count(); $.set('captchas', this.captchas); return this.reload(); @@ -8056,7 +8224,7 @@ }, reload: function() { var ref; - this.nodes.iframe.src = this.iframeURL; + this.nodes.iframe.src = this.iframeURL(); this.occupied = true; return (ref = this.nodes.img) != null ? ref.hidden = true : void 0; }, @@ -8076,6 +8244,362 @@ } }; + Captcha.replace = { + init: function() { + var jsEnabled; + if (!(d.cookie.indexOf('pass_enabled=1') < 0)) { + return; + } + if (location.hostname === 'boards.4chan.org' && Conf['Hide Original Post Form']) { + return; + } + jsEnabled = $.hasClass(doc, 'js-enabled'); + if (location.hostname === 'sys.4chan.org' && Conf['Use Recaptcha v2 in Reports'] && jsEnabled) { + $.ready(Captcha.replace.v2); + return; + } + if (Conf['Use Recaptcha v1'] && jsEnabled && location.hostname !== 'www.4chan.org') { + $.ready(Captcha.replace.v1); + return; + } + if (Conf['captchaLanguage'].trim()) { + if (location.hostname === 'boards.4chan.org') { + return $.onExists(doc, '#captchaFormPart', true, function(node) { + return $.onExists(node, 'iframe', true, Captcha.replace.iframe); + }); + } else { + return $.onExists(doc, 'iframe', true, Captcha.replace.iframe); + } + } + }, + v1: function() { + var form, link; + if (!$.id('g-recaptcha')) { + return; + } + Captcha.v1.replace(); + if (link = $.id('form-link')) { + return $.on(link, 'click', function() { + return Captcha.v1.create(); + }); + } else if (location.hostname === 'boards.4chan.org') { + form = $.id('postForm'); + return form.addEventListener('focus', (function() { + return Captcha.v1.create(); + }), true); + } else { + return Captcha.v1.create(); + } + }, + v2: function() { + var container, lang, old, script, url; + if (!(old = $.id('captchaContainerAlt'))) { + return; + } + container = $.el('div', { + className: 'g-recaptcha' + }); + $.extend(container.dataset, { + sitekey: '6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc', + tabindex: 3 + }); + $.replace(old, container); + url = 'https://www.google.com/recaptcha/api.js'; + if (lang = Conf['captchaLanguage'].trim()) { + url += "?hl=" + (encodeURIComponent(lang)); + } + script = $.el('script', { + src: url + }); + return $.add(d.head, script); + }, + iframe: function(el) { + var lang, src; + if (!(lang = Conf['captchaLanguage'].trim())) { + return; + } + src = /[?&]hl=/.test(el.src) ? el.src.replace(/([?&]hl=)[^&]*/, '$1' + encodeURIComponent(lang)) : el.src + ("&hl=" + (encodeURIComponent(lang))); + if (el.src !== src) { + return el.src = src; + } + } + }; + + Captcha.v1 = { + blank: "data:image/svg+xml,", + init: function() { + var imgContainer, input; + if (d.cookie.indexOf('pass_enabled=1') >= 0) { + return; + } + if (!(this.isEnabled = !!$('#g-recaptcha, #captchaContainerAlt'))) { + return; + } + imgContainer = $.el('div', { + className: 'captcha-img', + title: 'Reload reCAPTCHA' + }); + $.extend(imgContainer, { + innerHTML: "" + }); + input = $.el('input', { + className: 'captcha-input field', + title: 'Verification', + autocomplete: 'off', + spellcheck: false + }); + this.nodes = { + img: imgContainer.firstChild, + input: input + }; + $.on(input, 'blur', QR.focusout); + $.on(input, 'focus', QR.focusin); + $.on(input, 'keydown', QR.captcha.keydown.bind(QR.captcha)); + $.on(this.nodes.img.parentNode, 'click', QR.captcha.reload.bind(QR.captcha)); + $.addClass(QR.nodes.el, 'has-captcha', 'captcha-v1'); + $.after(QR.nodes.com.parentNode, [imgContainer, input]); + this.captchas = []; + $.get('captchas', [], function(arg) { + var captchas; + captchas = arg.captchas; + QR.captcha.sync(captchas); + return QR.captcha.clear(); + }); + $.sync('captchas', this.sync); + this.replace(); + this.beforeSetup(); + if (Conf['Auto-load captcha']) { + this.setup(); + } + new MutationObserver(this.afterSetup).observe($.id('captchaContainerAlt'), { + childList: true + }); + return this.afterSetup(); + }, + replace: function() { + var container, old; + if (this.script) { + return; + } + if (!(this.script = $('script[src="//www.google.com/recaptcha/api/js/recaptcha_ajax.js"]', d.head))) { + this.script = $.el('script', { + src: '//www.google.com/recaptcha/api/js/recaptcha_ajax.js' + }); + $.add(d.head, this.script); + } + if (old = $.id('g-recaptcha')) { + container = $.el('div', { + id: 'captchaContainerAlt' + }); + return $.replace(old, container); + } + }, + create: function() { + return $.globalEval('(function() {\n var container = document.getElementById("captchaContainerAlt");\n if (container.firstChild) return;\n var options = {\n theme: "clean",\n tabindex: {"boards.4chan.org": 5, "sys.4chan.org": 3}[location.hostname]\n };\n if (window.Recaptcha) {\n window.Recaptcha.create("6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc", container, options);\n } else {\n var script = document.head.querySelector(\'script[src="//www.google.com/recaptcha/api/js/recaptcha_ajax.js"]\');\n script.addEventListener(\'load\', function() {\n window.Recaptcha.create("6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc", container, options);\n }, false);\n }\n})();'); + }, + cb: { + focus: function() { + return QR.captcha.setup(false, true); + } + }, + beforeSetup: function() { + var img, input, ref; + ref = this.nodes, img = ref.img, input = ref.input; + img.parentNode.hidden = true; + img.src = this.blank; + input.value = ''; + input.placeholder = 'Focus to load reCAPTCHA'; + this.count(); + return $.on(input, 'focus click', this.cb.focus); + }, + needed: function() { + var captchaCount, postsCount; + captchaCount = this.captchas.length; + if (QR.req) { + captchaCount++; + } + postsCount = QR.posts.length; + if (postsCount === 1 && !Conf['Auto-load captcha'] && !QR.posts[0].com && !QR.posts[0].file) { + postsCount = 0; + } + return captchaCount < postsCount; + }, + onNewPost: function() {}, + onPostChange: function() {}, + setup: function(focus, force) { + if (!(this.isEnabled && (force || this.needed()))) { + return; + } + this.create(); + if (focus) { + return this.nodes.input.focus(); + } + }, + afterSetup: function() { + var challenge, img, input, ref, setLifetime; + if (!(challenge = $.id('recaptcha_challenge_field_holder'))) { + return; + } + if (challenge === QR.captcha.nodes.challenge) { + return; + } + setLifetime = function(e) { + return QR.captcha.lifetime = e.detail; + }; + $.on(window, 'captcha:timeout', setLifetime); + $.globalEval('window.dispatchEvent(new CustomEvent("captcha:timeout", {detail: RecaptchaState.timeout}))'); + $.off(window, 'captcha:timeout', setLifetime); + ref = QR.captcha.nodes, img = ref.img, input = ref.input; + img.parentNode.hidden = false; + input.placeholder = 'Verification'; + QR.captcha.count(); + $.off(input, 'focus click', QR.captcha.cb.focus); + QR.captcha.nodes.challenge = challenge; + new MutationObserver(QR.captcha.load.bind(QR.captcha)).observe(challenge, { + childList: true, + subtree: true, + attributes: true + }); + QR.captcha.load(); + if (QR.nodes.el.getBoundingClientRect().bottom > doc.clientHeight) { + QR.nodes.el.style.top = null; + return QR.nodes.el.style.bottom = '0px'; + } + }, + destroy: function() { + if (!this.script) { + return; + } + $.globalEval('window.Recaptcha.destroy();'); + if (this.nodes) { + return this.beforeSetup(); + } + }, + sync: function(captchas) { + if (captchas == null) { + captchas = []; + } + QR.captcha.captchas = captchas; + return QR.captcha.count(); + }, + getOne: function() { + var captcha, challenge, response, timeout; + this.clear(); + if (captcha = this.captchas.shift()) { + this.count(); + $.set('captchas', this.captchas); + return captcha; + } else { + challenge = this.nodes.img.alt; + timeout = this.timeout; + if (/\S/.test(response = this.nodes.input.value)) { + this.destroy(); + return { + challenge: challenge, + response: response, + timeout: timeout + }; + } else { + return null; + } + } + }, + save: function() { + var response; + if (!/\S/.test(response = this.nodes.input.value)) { + return; + } + this.nodes.input.value = ''; + this.captchas.push({ + challenge: this.nodes.img.alt, + response: response, + timeout: this.timeout + }); + this.count(); + this.destroy(); + this.setup(false, true); + return $.set('captchas', this.captchas); + }, + clear: function() { + var captcha, i, k, len1, now, ref; + if (!this.captchas.length) { + return; + } + $.forceSync('captchas'); + now = Date.now(); + ref = this.captchas; + for (i = k = 0, len1 = ref.length; k < len1; i = ++k) { + captcha = ref[i]; + if (captcha.timeout > now) { + break; + } + } + if (!i) { + return; + } + this.captchas = this.captchas.slice(i); + this.count(); + return $.set('captchas', this.captchas); + }, + load: function() { + var challenge, challenge_image; + if ($('#captchaContainerAlt[class~="recaptcha_is_showing_audio"]')) { + this.nodes.img.src = this.blank; + return; + } + if (!this.nodes.challenge.firstChild) { + return; + } + if (!(challenge_image = $.id('recaptcha_challenge_image'))) { + return; + } + this.timeout = Date.now() + this.lifetime * $.SECOND - $.MINUTE; + challenge = this.nodes.challenge.firstChild.value; + this.nodes.img.alt = challenge; + this.nodes.img.src = challenge_image.src; + this.nodes.input.value = ''; + return this.clear(); + }, + count: function() { + var count, placeholder; + count = this.captchas ? this.captchas.length : 0; + placeholder = this.nodes.input.placeholder.replace(/\ \(.*\)$/, ''); + placeholder += (function() { + switch (count) { + case 0: + if (placeholder === 'Verification') { + return ' (Shift + Enter to cache)'; + } else { + return ''; + } + break; + case 1: + return ' (1 cached captcha)'; + default: + return " (" + count + " cached captchas)"; + } + })(); + this.nodes.input.placeholder = placeholder; + return this.nodes.input.alt = count; + }, + reload: function(focus) { + $.globalEval('if (window.Recaptcha.type === "image") {\n window.Recaptcha.reload();\n} else {\n window.Recaptcha.switch_type("image");\n}\nwindow.Recaptcha.should_focus = false;'); + if (focus) { + return this.nodes.input.focus(); + } + }, + keydown: function(e) { + if (e.keyCode === 8 && !this.nodes.input.value) { + this.reload(); + } else if (e.keyCode === 13 && e.shiftKey) { + this.save(); + } else { + return; + } + return e.preventDefault(); + } + }; + Captcha.v2 = { lifetime: 2 * $.MINUTE, init: function() { @@ -8083,9 +8607,19 @@ if (d.cookie.indexOf('pass_enabled=1') >= 0) { return; } - if (!(this.isEnabled = !!$.id('g-recaptcha'))) { + if (!(this.isEnabled = !!$('#g-recaptcha, #captchaContainerAlt'))) { return; } + if (this.noscript = Conf['Force Noscript Captcha'] || !$.hasClass(doc, 'js-enabled')) { + this.conn = new Connection(null, location.protocol + "//www.google.com", { + token: (function(_this) { + return function(token) { + return _this.save(true, token); + }; + })(this) + }); + $.addClass(QR.nodes.el, 'noscript-captcha'); + } this.captchas = []; $.get('captchas', [], function(arg) { var captchas; @@ -8105,9 +8639,19 @@ counter: counter }; this.count(); - $.addClass(QR.nodes.el, 'has-captcha'); + $.addClass(QR.nodes.el, 'has-captcha', 'captcha-v2'); $.after(QR.nodes.com.parentNode, root); $.on(counter, 'click', this.toggle.bind(this)); + $.on(counter, 'keydown', (function(_this) { + return function(e) { + if (Keybinds.keyCode(e) !== 'Space') { + return; + } + _this.toggle(); + e.preventDefault(); + return e.stopPropagation(); + }; + })(this)); return $.on(window, 'captcha:success', (function(_this) { return function() { return $.queueTask(function() { @@ -8116,9 +8660,26 @@ }; })(this)); }, + initFrame: function() { + var conn, ref, token; + if (token = (ref = $('.fbc-verification-token > textarea')) != null ? ref.value : void 0) { + conn = new Connection(window.parent, location.protocol + "//boards.4chan.org"); + return conn.send({ + token: token + }); + } + }, shouldFocus: false, timeouts: {}, postsCount: 0, + noscriptURL: function() { + var lang, url; + url = '//www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc'; + if (lang = Conf['captchaLanguage'].trim()) { + url += "&hl=" + (encodeURIComponent(lang)); + } + return url; + }, needed: function() { var captchaCount; captchaCount = this.captchas.length; @@ -8165,6 +8726,7 @@ if (this.nodes.container) { if (this.shouldFocus && (iframe = $('iframe', this.nodes.container))) { iframe.focus(); + QR.focus(); delete this.shouldFocus; } return; @@ -8177,6 +8739,22 @@ childList: true, subtree: true }); + if (this.noscript) { + return this.setupNoscript(); + } else { + return this.setupJS(); + } + }, + setupNoscript: function() { + var iframe; + iframe = $.el('iframe', { + id: 'qr-captcha-iframe', + src: this.noscriptURL() + }); + $.add(this.nodes.container, iframe); + return this.conn.target = iframe; + }, + setupJS: function() { return $.globalEval('(function() {\n function render() {\n var container = document.querySelector("#qr .captcha-container");\n container.dataset.widgetID = window.grecaptcha.render(container, {\n sitekey: \'6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc\',\n theme: document.documentElement.classList.contains(\'tomorrow\') ? \'dark\' : \'light\',\n callback: function(response) {\n window.dispatchEvent(new CustomEvent("captcha:success", {detail: response}));\n }\n });\n }\n if (window.grecaptcha) {\n render();\n } else {\n var cbNative = window.onRecaptchaLoaded;\n window.onRecaptchaLoaded = function() {\n render();\n cbNative();\n }\n }\n})();'); }, afterSetup: function(mutations) { @@ -8196,7 +8774,7 @@ } }, setupIFrame: function(iframe) { - this.setupTime = Date.now(); + Captcha.replace.iframe(iframe); $.addClass(QR.nodes.el, 'captcha-open'); if (QR.nodes.el.getBoundingClientRect().bottom > doc.clientHeight) { QR.nodes.el.style.top = null; @@ -8248,21 +8826,21 @@ if (captcha = this.captchas.shift()) { $.set('captchas', this.captchas); this.count(); - return captcha.response; + return captcha; } else { return null; } }, - save: function(pasted) { - var base1, focus, ref, ref1; + save: function(pasted, token) { + var base1, focus, ref; $.forceSync('captchas'); this.captchas.push({ - response: $('textarea', this.nodes.container).value, - timeout: (pasted ? this.setupTime : Date.now()) + this.lifetime + response: token || $('textarea', this.nodes.container).value, + timeout: Date.now() + this.lifetime }); $.set('captchas', this.captchas); this.count(); - focus = ((ref = d.activeElement) != null ? ref.nodeName : void 0) === 'IFRAME' && ((ref1 = d.activeElement.src) != null ? ref1.slice(0, 38) : void 0) === 'https://www.google.com/recaptcha/api2/'; + focus = ((ref = d.activeElement) != null ? ref.nodeName : void 0) === 'IFRAME' && /https?:\/\/www\.google\.com\/recaptcha\//.test(d.activeElement.src); if (this.needed()) { if (focus) { if (QR.cooldown.auto || Conf['Post on Captcha Completion']) { @@ -8318,7 +8896,11 @@ } }, reload: function() { - return $.globalEval('(function() {\n var container = document.querySelector("#qr .captcha-container");\n window.grecaptcha.reset(container.dataset.widgetID);\n})();'); + if (this.noscript) { + return $('iframe', this.nodes.container).src = this.noscriptURL(); + } else { + return $.globalEval('(function() {\n var container = document.querySelector("#qr .captcha-container");\n window.grecaptcha.reset(container.dataset.widgetID);\n})();'); + } } }; @@ -8346,70 +8928,62 @@ QR.cooldown = { seconds: 0, + delays: { + thread: 0, + reply: 0, + image: 0, + reply_intra: 0, + image_intra: 0, + deletion: 60, + thread_global: 300 + }, init: function() { - var delay, items, key, keys, m, ref, results, scope, type; + if (!(Conf['Quick Reply'] && Conf['Cooldown'])) { + return; + } + this.data = Conf['cooldowns']; + return $.sync('cooldowns', this.sync); + }, + setup: function() { + var delay, m, ref, type; if (!Conf['Cooldown']) { return; } - QR.cooldown.delays = (m = Get.scriptData().match(/\bcooldowns *= *({[^}]+})/)) ? JSON.parse(m[1]) : { - thread: 0, - reply: 0, - image: 0, - reply_intra: 0, - image_intra: 0 - }; + if (m = Get.scriptData().match(/\bcooldowns *= *({[^}]+})/)) { + $.extend(QR.cooldown.delays, JSON.parse(m[1])); + } QR.cooldown.maxDelay = 0; ref = QR.cooldown.delays; for (type in ref) { delay = ref[type]; - if (type !== 'thread') { + if (type !== 'thread' && type !== 'thread_global') { QR.cooldown.maxDelay = Math.max(QR.cooldown.maxDelay, delay); } } - QR.cooldown.delays['thread_global'] = 300; - keys = QR.cooldown.keys = { - local: "cooldown." + g.BOARD, - global: 'cooldown.global' - }; - items = {}; - for (scope in keys) { - key = keys[scope]; - items[key] = {}; - } - $.get(items, function(items) { - for (scope in keys) { - key = keys[scope]; - QR.cooldown[scope] = items[key]; - } - return QR.cooldown.start(); - }); - results = []; - for (scope in keys) { - key = keys[scope]; - results.push($.sync(key, QR.cooldown.sync(scope))); - } - return results; + QR.cooldown.isSetup = true; + return QR.cooldown.start(); }, start: function() { - if (QR.cooldown.isCounting || Object.keys(QR.cooldown.local).length + Object.keys(QR.cooldown.global).length === 0) { + var data; + data = QR.cooldown.data; + if (!(QR.cooldown.isSetup && !QR.cooldown.isCounting && Object.keys(data[g.BOARD.ID] || {}).length + Object.keys(data.global || {}).length > 0)) { return; } QR.cooldown.isCounting = true; return QR.cooldown.count(); }, - sync: function(scope) { - return function(cooldowns) { - QR.cooldown[scope] = cooldowns || {}; - return QR.cooldown.start(); - }; + sync: function(data) { + QR.cooldown.data = data || {}; + return QR.cooldown.start(); }, - add: function(start, threadID, postID) { - var boardID; + add: function(threadID, postID) { + var boardID, start; if (!Conf['Cooldown']) { return; } + start = Date.now(); boardID = g.BOARD.ID; - QR.cooldown.set('local', start, { + QR.cooldown.set(boardID, start, { threadID: threadID, postID: postID }); @@ -8429,23 +9003,35 @@ } cooldown = QR.cooldown.categorize(post); cooldown.delay = delay; - QR.cooldown.set('local', Date.now(), cooldown); + QR.cooldown.set(g.BOARD.ID, Date.now(), cooldown); return QR.cooldown.start(); }, "delete": function(post) { - var cooldown, id, ref; - if (!(Conf['Cooldown'] && g.BOARD.ID === post.board.ID)) { + var base1, cooldown, cooldowns, id, name1; + if (!Conf['Cooldown']) { return; } - $.forceSync(QR.cooldown.keys.local); - ref = QR.cooldown.local; - for (id in ref) { - cooldown = ref[id]; + $.forceSync('cooldowns'); + cooldowns = ((base1 = QR.cooldown.data)[name1 = post.board.ID] || (base1[name1] = {})); + for (id in cooldowns) { + cooldown = cooldowns[id]; if ((cooldown.delay == null) && cooldown.threadID === post.thread.ID && cooldown.postID === post.ID) { - delete QR.cooldown.local[id]; + delete cooldowns[id]; } } - return QR.cooldown.save('local'); + return QR.cooldown.save([post.board.ID]); + }, + secondsDeletion: function(post) { + var cooldown, cooldowns, seconds, start; + cooldowns = QR.cooldown.data[post.board.ID] || {}; + for (start in cooldowns) { + cooldown = cooldowns[start]; + if ((cooldown.delay == null) && cooldown.threadID === post.thread.ID && cooldown.postID === post.ID) { + seconds = QR.cooldown.delays.deletion - Math.floor((Date.now() - start) / $.SECOND); + return Math.max(seconds, 0); + } + } + return 0; }, categorize: function(post) { if (post.thread === 'new') { @@ -8460,41 +9046,48 @@ } }, set: function(scope, id, value) { - $.forceSync(QR.cooldown.keys[scope]); - QR.cooldown[scope][id] = value; - return $.set(QR.cooldown.keys[scope], QR.cooldown[scope]); + var base1, cooldowns; + $.forceSync('cooldowns'); + cooldowns = ((base1 = QR.cooldown.data)[scope] || (base1[scope] = {})); + cooldowns[id] = value; + return $.set('cooldowns', QR.cooldown.data); }, - save: function(scope) { - if (Object.keys(QR.cooldown[scope]).length) { - return $.set(QR.cooldown.keys[scope], QR.cooldown[scope]); - } else { - return $["delete"](QR.cooldown.keys[scope]); + save: function(scopes) { + var data, k, len1, scope; + data = QR.cooldown.data; + for (k = 0, len1 = scopes.length; k < len1; k++) { + scope = scopes[k]; + if (scope in data && !Object.keys(data[scope]).length) { + delete data[scope]; + } } + return $.set('cooldowns', data); }, count: function() { - var cooldown, elapsed, key, maxDelay, now, ref, ref1, ref2, save, scope, seconds, start, suffix, threadID, type, update; + var base1, cooldown, cooldowns, elapsed, k, len1, maxDelay, nCooldowns, now, ref, ref1, save, scope, seconds, start, suffix, threadID, type, update; + $.forceSync('cooldowns'); + save = []; + nCooldowns = 0; now = Date.now(); ref = QR.cooldown.categorize(QR.posts[0]), type = ref.type, threadID = ref.threadID; seconds = 0; - ref1 = QR.cooldown.keys; - for (scope in ref1) { - key = ref1[scope]; - $.forceSync(key); - save = false; - ref2 = QR.cooldown[scope]; - for (start in ref2) { - cooldown = ref2[start]; + ref1 = [g.BOARD.ID, 'global']; + for (k = 0, len1 = ref1.length; k < len1; k++) { + scope = ref1[k]; + cooldowns = ((base1 = QR.cooldown.data)[scope] || (base1[scope] = {})); + for (start in cooldowns) { + cooldown = cooldowns[start]; start = +start; elapsed = Math.floor((now - start) / $.SECOND); if (elapsed < 0) { - delete QR.cooldown[scope][start]; - save = true; + delete cooldowns[start]; + save.push(scope); continue; } if (cooldown.delay != null) { if (cooldown.delay <= elapsed) { - delete QR.cooldown[scope][start]; - save = true; + delete cooldowns[start]; + save.push(scope); } else if (cooldown.type === type && cooldown.threadID === threadID) { seconds = Math.max(seconds, cooldown.delay - elapsed); } @@ -8505,8 +9098,8 @@ maxDelay = Math.max(maxDelay, parseInt(Conf['customCooldown'], 10)); } if (maxDelay <= elapsed) { - delete QR.cooldown[scope][start]; - save = true; + delete cooldowns[start]; + save.push(scope); continue; } if ((type === 'thread') === (cooldown.threadID === cooldown.postID) && cooldown.boardID !== g.BOARD.ID) { @@ -8517,11 +9110,12 @@ seconds = Math.max(seconds, parseInt(Conf['customCooldown'], 10) - elapsed); } } - if (save) { - QR.cooldown.save(scope); - } + nCooldowns += Object.keys(cooldowns).length; } - if (Object.keys(QR.cooldown.local).length + Object.keys(QR.cooldown.global).length) { + if (save.length) { + QR.cooldown.save(save); + } + if (nCooldowns) { clearTimeout(QR.cooldown.timeout); QR.cooldown.timeout = setTimeout(QR.cooldown.count, $.SECOND); } else { @@ -8765,7 +9359,7 @@ if (!(node = QR.nodes[name])) { continue; } - node.value = this[name] || node.dataset["default"] || null; + node.value = this[name] || node.dataset["default"] || ''; } (this.thread !== 'new' ? $.addClass : $.rmClass)(QR.nodes.el, 'reply-to-thread'); this.showFileData(); @@ -8783,7 +9377,8 @@ switch (name) { case 'thread': (this.thread !== 'new' ? $.addClass : $.rmClass)(QR.nodes.el, 'reply-to-thread'); - return QR.status(); + QR.status(); + return this.updateFlashURL(); case 'com': this.nodes.span.textContent = this.com; QR.captcha.onPostChange(); @@ -8796,11 +9391,9 @@ if (!this.file) { return; } - this.file.newName = this.filename.replace(/[\/\\]/g, '-'); - if (!/\.(jpe?g|png|gif|pdf|swf|webm)$/i.test(this.filename)) { - this.file.newName += '.jpg'; - } - return this.updateFilename(); + this.saveFilename(); + this.updateFilename(); + return this.updateFlashURL(); case 'name': return QR.persona.set(this); } @@ -8892,9 +9485,16 @@ }; _Class.prototype.setFile = function(file1) { - var ref; + var ext, ref; this.file = file1; - this.filename = this.file.name; + if (Conf['Randomize Filename'] && g.BOARD.ID !== 'f') { + this.filename = "" + (Date.now() - Math.floor(Math.random() * 365 * $.DAY)); + if (ext = this.file.name.match(QR.validExtension)) { + this.filename += ext[0]; + } + } else { + this.filename = this.file.name; + } this.filesize = $.bytesToString(this.file.size); this.checkSize(); if (QR.spoiler) { @@ -8902,11 +9502,13 @@ } QR.captcha.onPostChange(); URL.revokeObjectURL(this.URL); + this.saveFilename(); if (this === QR.selected) { this.showFileData(); } else { this.updateFilename(); } + this.updateFlashURL(); this.nodes.el.style.backgroundImage = null; if (ref = this.file.type, indexOf.call(QR.mimeTypes, ref) < 0) { return this.fileError('Unsupported file type.'); @@ -8930,6 +9532,9 @@ var el, event, isVideo, onerror, onload; isVideo = /^video\//.test(this.file.type); el = $.el(isVideo ? 'video' : 'img'); + if (isVideo && !el.canPlayType(this.file.type)) { + return; + } event = isVideo ? 'loadeddata' : 'load'; onload = (function(_this) { return function() { @@ -9035,12 +9640,20 @@ this.nodes.label.hidden = true; } this.showFileData(); + this.updateFlashURL(); URL.revokeObjectURL(this.URL); return this.dismissErrors(function(error) { return $.hasClass(error, 'file-error'); }); }; + _Class.prototype.saveFilename = function() { + this.file.newName = (this.filename || '').replace(/[\/\\]/g, '-'); + if (!QR.validExtension.test(this.filename)) { + return this.file.newName += '.jpg'; + } + }; + _Class.prototype.updateFilename = function() { var long; long = this.filename + " (" + this.filesize + ")"; @@ -9062,6 +9675,36 @@ } }; + _Class.prototype.updateFlashURL = function() { + var oldURL, ref, url; + if (g.BOARD.ID !== 'f') { + return; + } + if (this.thread === 'new' || !this.file) { + url = ''; + } else { + url = this.file.newName; + if ((ref = $.engine) === 'blink' || ref === 'webkit') { + url = url.replace(/"/g, '%22'); + } + url = url.replace(/[\t\n\f\r \xa0\u200B\u2029\u3000]+/g, ' ').replace(/(^ | $)/g, '').replace(/\.[0-9A-Za-z]+$/, ''); + url = "https://i.4cdn.org/f/" + (encodeURIComponent(E(url))) + ".swf\n"; + } + oldURL = this.flashURL || ''; + if (url !== oldURL) { + this.com || (this.com = ''); + if (this.com.slice(0, oldURL.length) === oldURL) { + this.com = this.com.slice(oldURL.length); + } + this.com = (url + this.com) || null; + if (this === QR.selected) { + QR.nodes.com.value = this.com; + QR.characterCount(); + } + return this.flashURL = url; + } + }; + _Class.prototype.pasteText = function(file) { var reader; this.pasting = true; @@ -9172,10 +9815,7 @@ }); }, node: function() { - if (this.file) { - return; - } - return $.addClass(this.nodes.root, "noFile"); + return this.nodes.root.classList.toggle('noFile', !this.file); }, catalogNode: function() { var file, filename; @@ -9355,29 +9995,43 @@ Gallery.images.push(thumb); return $.add(Gallery.nodes.thumbs, thumb); }, + load: function(thumb, errorCB) { + var elType, ext, file; + ext = thumb.href.match(/\w*$/); + elType = { + 'webm': 'video', + 'pdf': 'iframe' + }[ext] || 'img'; + file = $.el(elType, { + title: thumb.title + }); + $.extend(file.dataset, thumb.dataset); + $.on(file, 'error', errorCB); + file.src = thumb.href; + return file; + }, open: function(thumb) { - var el, elType, file, name, newID, nodes, oldID, post, ref, slideshow; + var el, file, newID, nodes, oldID, post, ref; nodes = Gallery.nodes; - name = nodes.name; oldID = +nodes.current.dataset.id; newID = +thumb.dataset.id; - slideshow = Gallery.slideshow && (newID > oldID || (oldID === Gallery.images.length - 1 && newID === 0)); - if (el = $('.gal-highlight', nodes.thumbs)) { + if (el = Gallery.images[oldID]) { $.rmClass(el, 'gal-highlight'); } $.addClass(thumb, 'gal-highlight'); - elType = /\.webm$/.test(thumb.href) ? 'video' : /\.pdf$/.test(thumb.href) ? 'iframe' : 'img'; - $[elType === 'iframe' ? 'addClass' : 'rmClass'](doc, 'gal-pdf'); - file = $.el(elType, { - title: name.download = name.textContent = thumb.title - }); - $.extend(file.dataset, thumb.dataset); - $.on(file, 'error', Gallery.error); - file.src = name.href = thumb.href; + nodes.thumbs.scrollTop = thumb.offsetTop + thumb.offsetHeight / 2 - nodes.thumbs.clientHeight / 2; + if (((ref = Gallery.cache) != null ? ref.dataset.id : void 0) === '' + newID) { + file = Gallery.cache; + $.off(file, 'error', Gallery.cacheError); + $.on(file, 'error', Gallery.error); + } else { + file = Gallery.load(thumb, Gallery.error); + } $.off(nodes.current, 'error', Gallery.error); ImageCommon.pause(nodes.current); $.replace(nodes.current, file); - if (elType === 'video') { + nodes.current = file; + if (file.nodeName === 'VIDEO') { file.loop = true; Volume.setup(file); if (Conf['Autoplay']) { @@ -9387,19 +10041,22 @@ ImageCommon.addControls(file); } } + doc.classList.toggle('gal-pdf', file.nodeName === 'IFRAME'); + Gallery.cb.setHeight(); nodes.count.textContent = +thumb.dataset.id + 1; - nodes.current = file; + nodes.name.download = nodes.name.textContent = thumb.title; + nodes.name.href = thumb.href; nodes.frame.scrollTop = 0; nodes.next.focus(); - if (slideshow) { + if (Gallery.slideshow && (newID > oldID || (oldID === Gallery.images.length - 1 && newID === 0))) { Gallery.setupTimer(); } else { Gallery.cb.stop(); } - if (Conf['Scroll to Post'] && (post = (ref = (post = g.posts[file.dataset.post])) != null ? ref.nodes.root : void 0)) { - Header.scrollTo(post); + if (Conf['Scroll to Post'] && (post = g.posts[file.dataset.post])) { + Header.scrollTo(post.nodes.root); } - return nodes.thumbs.scrollTop = thumb.offsetTop + thumb.offsetHeight / 2 - nodes.thumbs.clientHeight / 2; + return Gallery.cache = Gallery.load(Gallery.images[(newID + 1) % Gallery.images.length], Gallery.cacheError); }, error: function() { var ref; @@ -9421,6 +10078,9 @@ }; })(this)); }, + cacheError: function() { + return delete Gallery.cache; + }, cleanupTimer: function() { var current; clearTimeout(Gallery.timeoutID); @@ -9582,6 +10242,11 @@ setFitness: function() { return (this.checked ? $.addClass : $.rmClass)(doc, "gal-" + (this.name.toLowerCase().replace(/\s+/g, '-'))); }, + setHeight: function() { + var current, dim, frame, height, ref, ref1, ref2, width; + ref = Gallery.nodes, current = ref.current, frame = ref.frame; + return current.style.minHeight = Conf['Stretch to Fit'] && (dim = (ref1 = g.posts[current.dataset.post]) != null ? ref1.file.dimensions : void 0) ? ((ref2 = dim.split('x'), width = ref2[0], height = ref2[1], ref2), Math.min(doc.clientHeight - 25, height / width * frame.clientWidth) + 'px') : null; + }, setDelay: function() { return Gallery.delay = +this.value; } @@ -9606,11 +10271,14 @@ var input, label; label = UI.checkbox(name, name); input = label.firstElementChild; - if (name === 'Fit Width' || name === 'Fit Height' || name === 'Hide Thumbnails') { + if (name === 'Hide Thumbnails' || name === 'Fit Width' || name === 'Fit Height') { $.on(input, 'change', Gallery.cb.setFitness); } $.event('change', null, input); $.on(input, 'change', $.cb.checked); + if (name === 'Hide Thumbnails' || name === 'Fit Width' || name === 'Fit Height' || name === 'Stretch to Fit') { + $.on(input, 'change', Gallery.cb.setHeight); + } return { el: label }; @@ -9619,7 +10287,7 @@ var delayInput, delayLabel, item, subEntries; subEntries = (function() { var k, len1, ref, results; - ref = ['Hide Thumbnails', 'Fit Width', 'Fit Height', 'Scroll to Post']; + ref = ['Hide Thumbnails', 'Fit Width', 'Fit Height', 'Stretch to Fit', 'Scroll to Post']; results = []; for (k = 0, len1 = ref.length; k < len1; k++) { item = ref[k]; @@ -9756,7 +10424,7 @@ $.off(video, 'mouseover', handler); t = new Date().getTime(); return $.asap((function() { - return (typeof chrome !== "undefined" && chrome !== null) || (video.readyState >= 3 && video.currentTime <= Math.max(0.1, video.duration - 0.5)) || new Date().getTime() >= t + 1000; + return $.engine !== 'gecko' || (video.readyState >= 3 && video.currentTime <= Math.max(0.1, video.duration - 0.5)) || new Date().getTime() >= t + 1000; }), function() { return video.controls = true; }); @@ -9936,9 +10604,7 @@ } $.rmClass(post.nodes.root, 'expanded-image'); $.rmClass(file.thumb, 'expanding'); - if (file.videoControls) { - $.rm(file.videoControls); - } + $.rm(file.videoControls); file.thumb.parentNode.href = file.url; file.thumb.parentNode.target = '_blank'; ref = ['isExpanding', 'isExpanded', 'videoControls', 'wasPlaying', 'scrollIntoView']; @@ -10053,7 +10719,7 @@ } if (file.scrollIntoView) { delete file.scrollIntoView; - imageBottom = Header.getBottomOf(file.fullImage) - 25; + imageBottom = Math.min(doc.clientHeight - file.fullImage.getBoundingClientRect().bottom - 25, Header.getBottomOf(file.fullImage)); if (imageBottom < 0) { window.scrollBy(0, Math.min(-imageBottom, Header.getTopOf(file.fullImage))); } @@ -10262,7 +10928,7 @@ return results; })(), width = ref1[0], height = ref1[1]; ref2 = this.getBoundingClientRect(), left = ref2.left, right = ref2.right; - padding = 16; + padding = 25; maxWidth = Math.max(left, doc.clientWidth - right); maxHeight = doc.clientHeight - padding; scale = Math.min(1, maxWidth / width, maxHeight / height); @@ -10399,7 +11065,7 @@ clone.file.thumb.preload = 'auto'; } thumb.preload = 'auto'; - if (typeof chrome === "undefined" || chrome === null) { + if ($.engine === 'gecko') { $.on(thumb, 'loadeddata', function() { return this.removeAttribute('poster'); }); @@ -10794,6 +11460,9 @@ }, wheel: function(e) { var el, volume; + if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) { + return; + } if (!(el = $('video:not([data-md5])', this))) { return; } @@ -11214,7 +11883,7 @@ } }, { key: 'TwitchTV', - regExp: /^\w+:\/\/(?:www\.)?twitch\.tv\/([^#\&\?]*)/, + regExp: /^\w+:\/\/(?:www\.)?twitch\.tv\/(\w[^#\&\?]*)/, httpOnly: true, style: "border: none; width: 640px; height: 360px;", el: function(a) { @@ -11250,11 +11919,14 @@ regExp: /^\w+:\/\/(?:www\.)?vocaroo\.com\/i\/(\w+)/, style: '', el: function(a) { - return $.el('audio', { + var el, type; + el = $.el('audio', { controls: true, - preload: 'auto', - src: "http://vocaroo.com/media_command.php?media=" + a.dataset.uid + "&command=download_ogg" + preload: 'auto' }); + type = el.canPlayType('audio/ogg') ? 'ogg' : 'mp3'; + el.src = "http://vocaroo.com/media_command.php?media=" + a.dataset.uid + "&command=download_" + type; + return el; } }, { key: 'Vimeo', @@ -11394,11 +12066,14 @@ regExp: /^\w+:\/\/(?:www\.)?clyp\.it\/(\w+)/, style: '', el: function(a) { - return $.el('audio', { + var el, type; + el = $.el('audio', { controls: true, - preload: 'auto', - src: "http://clyp.it/" + a.dataset.uid + ".ogg" + preload: 'auto' }); + type = el.canPlayType('audio/ogg') ? 'ogg' : 'mp3'; + el.src = "http://clyp.it/" + a.dataset.uid + "." + type; + return el; } }, { key: 'Loopvid-dummy', @@ -11511,7 +12186,7 @@ } return links; }, - regString: /((https?|mailto|git|magnet|ftp|irc):([a-z\d%\/?])|([-a-z\d]+[.])+(aero|asia|biz|cat|com|coop|dance|info|int|jobs|mobi|moe|museum|name|net|org|post|pro|tel|travel|xxx|edu|gov|mil|[a-z]{2})([:\/]|(?![^\s'"]))|[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}|[-\w\d.@]+@[a-z\d.-]+\.[a-z\d])/i, + regString: /((https?|mailto|git|magnet|ftp|irc):([a-z\d%\/?])|([-a-z\d]+[.])+(aero|asia|biz|cat|com|coop|dance|info|int|jobs|mobi|moe|museum|name|net|org|post|pro|tel|travel|xxx|xyz|edu|gov|mil|[a-z]{2})([:\/]|(?![^\s'"]))|[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}|[-\w\d.@]+@[a-z\d.-]+\.[a-z\d])/i, makeRange: function(startNode, endNode, startOffset, endOffset) { var range; range = document.createRange(); @@ -11631,6 +12306,7 @@ }; DeleteLink = { + auto: [{}, {}], init: function() { var div, fileEl, fileEntry, postEl, postEntry, ref; if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Menu'] && Conf['Delete Link'])) { @@ -11648,11 +12324,15 @@ className: 'delete-file', href: 'javascript:;' }); + this.nodes = { + menu: div.firstChild, + links: [postEl, fileEl] + }; postEntry = { el: postEl, open: function() { - postEl.textContent = 'Post'; - $.on(postEl, 'click', DeleteLink["delete"]); + postEl.textContent = DeleteLink.linkText(false); + $.on(postEl, 'click', DeleteLink.toggle); return true; } }; @@ -11664,8 +12344,8 @@ if (!file || file.isDead) { return false; } - fileEl.textContent = 'File'; - $.on(fileEl, 'click', DeleteLink["delete"]); + fileEl.textContent = DeleteLink.linkText(true); + $.on(fileEl, 'click', DeleteLink.toggle); return true; } }; @@ -11673,35 +12353,61 @@ el: div, order: 40, open: function(post) { - var node; if (post.isDead) { return false; } DeleteLink.post = post; - node = div.firstChild; - node.textContent = 'Delete'; - DeleteLink.cooldown.start(post, node); + DeleteLink.nodes.menu.textContent = DeleteLink.menuText(); + DeleteLink.cooldown.start(post); return true; }, subEntries: [postEntry, fileEntry] }); }, - "delete": function() { - var fileOnly, form, link, post; - post = DeleteLink.post; - if (DeleteLink.cooldown.counting === post) { - return; + menuText: function() { + var seconds; + if (seconds = DeleteLink.cooldown.seconds[DeleteLink.post.fullID]) { + return "Delete (" + seconds + ")"; + } else { + return 'Delete'; } - $.off(this, 'click', DeleteLink["delete"]); + }, + linkText: function(fileOnly) { + var text; + text = fileOnly ? 'File' : 'Post'; + if (DeleteLink.auto[+fileOnly][DeleteLink.post.fullID]) { + text = "Deleting " + (text.toLowerCase()) + "..."; + } + return text; + }, + toggle: function() { + var auto, fileOnly, post; + post = DeleteLink.post; fileOnly = $.hasClass(this, 'delete-file'); - this.textContent = "Deleting " + (fileOnly ? 'file' : 'post') + "..."; + auto = DeleteLink.auto[+fileOnly]; + if (auto[post.fullID]) { + delete auto[post.fullID]; + } else { + auto[post.fullID] = true; + } + this.textContent = DeleteLink.linkText(fileOnly); + if (!DeleteLink.cooldown.seconds[post.fullID]) { + return DeleteLink["delete"](post, fileOnly); + } + }, + "delete": function(post, fileOnly) { + var form, link; + link = DeleteLink.nodes.links[+fileOnly]; + delete DeleteLink.auto[+fileOnly][post.fullID]; + if (post.fullID === DeleteLink.post.fullID) { + $.off(link, 'click', DeleteLink.toggle); + } form = { mode: 'usrdel', onlyimgdel: fileOnly, pwd: QR.persona.getPassword() }; form[post.ID] = 'delete'; - link = this; return $.ajax($.id('delform').action.replace("/" + g.BOARD + "/", "/" + post.board + "/"), { responseType: 'document', withCredentials: true, @@ -11709,61 +12415,80 @@ return DeleteLink.load(link, post, fileOnly, this.response); }, onerror: function() { - return DeleteLink.error(link); + return DeleteLink.error(link, post); } }, { form: $.formData(form) }); }, load: function(link, post, fileOnly, resDoc) { - var msg, s; + var el, msg; + link.textContent = DeleteLink.linkText(fileOnly); if (resDoc.title === '4chan - Banned') { - s = 'Banned!'; + el = $.el('span', { + innerHTML: "You can't delete posts because you are banned." + }); + return new Notice('warning', el, 20); } else if (msg = resDoc.getElementById('errmsg')) { - s = msg.textContent; - $.on(link, 'click', DeleteLink["delete"]); + new Notice('warning', msg.textContent, 20); + if (post.fullID === DeleteLink.post.fullID) { + $.on(link, 'click', DeleteLink.toggle); + } + if (/\bwait\b/i.test(msg.textContent)) { + DeleteLink.cooldown.start(post, 5); + DeleteLink.auto[+fileOnly][post.fullID] = true; + return DeleteLink.nodes.links[+fileOnly].textContent = DeleteLink.linkText(fileOnly); + } } else { - if (resDoc.title === 'Updating index...') { + if (!fileOnly) { QR.cooldown["delete"](post); + } + if (resDoc.title === 'Updating index...') { (post.origin || post).kill(fileOnly); } - s = 'Deleted'; + if (post.fullID === DeleteLink.post.fullID) { + return link.textContent = 'Deleted'; + } } - return link.textContent = s; }, - error: function(link) { - link.textContent = 'Connection error, please retry.'; - return $.on(link, 'click', DeleteLink["delete"]); + error: function(link, post) { + new Notice('warning', 'Connection error, please retry.', 20); + if (post.fullID === DeleteLink.post.fullID) { + return $.on(link, 'click', DeleteLink.toggle); + } }, cooldown: { - start: function(post, node) { - var length, ref, seconds; - if (!((ref = QR.db) != null ? ref.get({ - boardID: post.board.ID, - threadID: post.thread.ID, - postID: post.ID - }) : void 0)) { - delete DeleteLink.cooldown.counting; + seconds: {}, + start: function(post, seconds) { + if (DeleteLink.cooldown.seconds[post.fullID] != null) { return; } - DeleteLink.cooldown.counting = post; - length = 60; - seconds = Math.ceil((length * $.SECOND - (Date.now() - post.info.date)) / $.SECOND); - return DeleteLink.cooldown.count(post, seconds, length, node); + if (seconds == null) { + seconds = QR.cooldown.secondsDeletion(post); + } + if (seconds > 0) { + DeleteLink.cooldown.seconds[post.fullID] = seconds; + return DeleteLink.cooldown.count(post); + } }, - count: function(post, seconds, length, node) { - if (DeleteLink.cooldown.counting !== post) { - return; + count: function(post) { + var fileOnly, k, len1, ref; + if (post.fullID === DeleteLink.post.fullID) { + DeleteLink.nodes.menu.textContent = DeleteLink.menuText(); } - if (!((0 <= seconds && seconds <= length))) { - if (DeleteLink.cooldown.counting === post) { - node.textContent = 'Delete'; - delete DeleteLink.cooldown.counting; + if (DeleteLink.cooldown.seconds[post.fullID] > 0) { + DeleteLink.cooldown.seconds[post.fullID]--; + setTimeout(DeleteLink.cooldown.count, 1000, post); + } else { + delete DeleteLink.cooldown.seconds[post.fullID]; + ref = [false, true]; + for (k = 0, len1 = ref.length; k < len1; k++) { + fileOnly = ref[k]; + if (DeleteLink.auto[+fileOnly][post.fullID]) { + DeleteLink["delete"](post, fileOnly); + } } - return; } - setTimeout(DeleteLink.cooldown.count, 1000, post, seconds - 1, length, node); - return node.textContent = "Delete (" + seconds + ")"; } } }; @@ -11856,7 +12581,7 @@ if (!(post.isDead || (post.thread.isDead && !post.thread.isArchived))) { a.textContent = 'Report this post'; ReportLink.url = "//sys.4chan.org/" + post.board + "/imgboard.php?mode=report&no=" + post; - ReportLink.height = 200; + ReportLink.height = 180; } else if (Conf['Archive Report']) { a.textContent = 'Report to archive'; ReportLink.url = Redirect.to('report', { @@ -12229,10 +12954,12 @@ ThreadUpdater.cb.interval.call($.el('input', { value: Conf['Interval'] })); - $.on(window, 'online offline', ThreadUpdater.cb.online); $.on(d, 'QRPostSuccessful', ThreadUpdater.cb.checkpost); $.on(d, 'visibilitychange', ThreadUpdater.cb.visibility); - return ThreadUpdater.setInterval(); + ThreadUpdater.setInterval(); + if (this.board.ID === 'f') { + return ThreadUpdater.update(); + } }, /* @@ -12241,20 +12968,6 @@ */ beep: 'data:audio/wav;base64,UklGRjQDAABXQVZFZm10IBAAAAABAAEAgD4AAIA+AAABAAgAc21wbDwAAABBAAADAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkYXRhzAIAAGMms8em0tleMV4zIpLVo8nhfSlcPR102Ki+5JspVEkdVtKzs+K1NEhUIT7DwKrcy0g6WygsrM2k1NpiLl0zIY/WpMrjgCdbPhxw2Kq+5Z4qUkkdU9K1s+K5NkVTITzBwqnczko3WikrqM+l1NxlLF0zIIvXpsnjgydZPhxs2ay95aIrUEkdUdC3suK8N0NUIjq+xKrcz002WioppdGm091pK1w0IIjYp8jkhydXPxxq2K295aUrTkoeTs65suK+OUFUIzi7xqrb0VA0WSoootKm0t5tKlo1H4TYqMfkiydWQBxm16+85actTEseS8y7seHAPD9TIza5yKra01QyWSson9On0d5wKVk2H4DYqcfkjidUQB1j1rG75KsvSkseScu8seDCPz1TJDW2yara1FYxWSwnm9Sn0N9zKVg2H33ZqsXkkihSQR1g1bK65K0wSEsfR8i+seDEQTxUJTOzy6rY1VowWC0mmNWoz993KVc3H3rYq8TklSlRQh1d1LS647AyR0wgRMbAsN/GRDpTJTKwzKrX1l4vVy4lldWpzt97KVY4IXbUr8LZljVPRCxhw7W3z6ZISkw1VK+4sMWvXEhSPk6buay9sm5JVkZNiLWqtrJ+TldNTnquqbCwilZXU1BwpKirrpNgWFhTaZmnpquZbFlbVmWOpaOonHZcXlljhaGhpZ1+YWBdYn2cn6GdhmdhYGN3lp2enIttY2Jjco+bnJuOdGZlZXCImJqakHpoZ2Zug5WYmZJ/bGlobX6RlpeSg3BqaW16jZSVkoZ0bGtteImSk5KIeG5tbnaFkJKRinxxbm91gY2QkIt/c3BwdH6Kj4+LgnZxcXR8iI2OjIR5c3J0e4WLjYuFe3VzdHmCioyLhn52dHR5gIiKioeAeHV1eH+GiYqHgXp2dnh9hIiJh4J8eHd4fIKHiIeDfXl4eHyBhoeHhH96eHmA', cb: { - online: function() { - if (ThreadUpdater.thread.isDead) { - return; - } - if (navigator.onLine) { - ThreadUpdater.set('status', ''); - } else { - ThreadUpdater.set('status', 'Offline', 'warning'); - } - if (Conf['Auto Update'] && !Conf['Ignore Offline Status']) { - ThreadUpdater.outdateCount = 0; - return ThreadUpdater.setInterval(); - } - }, checkpost: function(e) { if (e.detail.threadID !== ThreadUpdater.thread.ID) { return; @@ -12372,13 +13085,6 @@ ThreadUpdater.set('timer', 'Update'); return; } - if (!navigator.onLine) { - ThreadUpdater.set('status', 'Offline', 'warning'); - if (!Conf['Ignore Offline Status']) { - ThreadUpdater.set('timer', ''); - return; - } - } interval = ThreadUpdater.interval; if (Conf['Optional Increase']) { limit = d.hidden ? 10 : 5; @@ -12443,7 +13149,7 @@ return new Notice('info', "The thread is " + change + ".", 30); }, parse: function(req) { - var ID, OP, board, deletedFiles, deletedPosts, files, firstPost, index, ipCountEl, k, lastPost, len1, len2, len3, len4, newPosts, node, post, postObject, postObjects, posts, q, ref, ref1, ref2, ref3, ref4, ref5, scroll, thread, u, unreadCount, w; + var ID, OP, board, deletedFiles, deletedPosts, files, firstPost, index, ipCountEl, k, lastPost, len1, len2, len3, len4, newPosts, node, post, postObject, postObjects, posts, q, ref, ref1, ref2, ref3, ref4, ref5, scroll, thread, u, unreadCount, v; postObjects = req.response.posts; OP = postObjects[0]; thread = ThreadUpdater.thread; @@ -12472,6 +13178,12 @@ if (postObject.fsize) { files.push(ID); } + if (board.ID === 'f' && postObject.fsize && (post = thread.posts[ID]) && !post.file) { + node = Build.postFromObject(postObject, board.ID); + $.after(post.nodes.info, $('.file', node)); + post.parseFile(); + Post.callbacks.execute(post, ['Filter', 'File Info Formatting', 'Fappe Tyme', 'Sauce']); + } if (ID <= lastPost) { continue; } @@ -12525,8 +13237,8 @@ } scroll = Conf['Auto Scroll'] && ThreadUpdater.scrollBG() && ThreadUpdater.root.getBoundingClientRect().bottom - doc.clientHeight < 25; firstPost = null; - for (w = 0, len4 = posts.length; w < len4; w++) { - post = posts[w]; + for (v = 0, len4 = posts.length; v < len4; v++) { + post = posts[v]; if (!QuoteThreading.insert(post)) { firstPost || (firstPost = post.nodes.root); $.add(ThreadUpdater.root, post.nodes.root); @@ -13476,19 +14188,21 @@ if (!Header.areNotificationsEnabled) { return; } - notif = new Notification(post.info.nameBlock + " replied to you", { - body: post.info.commentDisplay, - icon: Favicon.logo - }); - notif.onclick = function() { - Header.scrollToIfNeeded(post.nodes.root, true); - return window.focus(); - }; - return notif.onshow = function() { - return setTimeout(function() { - return notif.close(); - }, 7 * $.SECOND); - }; + try { + notif = new Notification(post.info.nameBlock + " replied to you", { + body: post.info.commentDisplay, + icon: Favicon.logo + }); + notif.onclick = function() { + Header.scrollToIfNeeded(post.nodes.root, true); + return window.focus(); + }; + return notif.onshow = function() { + return setTimeout(function() { + return notif.close(); + }, 7 * $.SECOND); + }; + } catch (_error) {} }, onUpdate: function(e) { if (!e.detail[404]) { @@ -13607,9 +14321,7 @@ if (Conf['Unread Favicon']) { isDead = Unread.thread.isDead; Favicon.el.href = countQuotingYou ? Favicon[isDead ? 'unreadDeadY' : 'unreadY'] : count ? Favicon[isDead ? 'unreadDead' : 'unread'] : Favicon[isDead ? 'dead' : 'default']; - if (typeof chrome === "undefined" || chrome === null) { - return $.add(d.head, Favicon.el); - } + return $.add(d.head, Favicon.el); } } }; @@ -13664,7 +14376,7 @@ } return Redirect.data = o; }, - archives: [{"uid":0,"name":"Moe","domain":"archive.moe","http":false,"https":true,"software":"foolfuuka","boards":["a","an","biz","c","co","diy","fit","gd","gif","h","i","int","jp","k","m","mlp","out","po","qa","r9k","s4s","sci","tg","tv","u","v","vg","vp","vr","wsg"],"files":["a","biz","c","co","diy","fit","gd","h","i","jp","k","m","mlp","po","qa","r9k","s4s","sci","tg","u","v","vg","vp","vr","wsg"]},{"uid":3,"name":"4plebs Archive","domain":"archive.4plebs.org","http":true,"https":true,"software":"foolfuuka","boards":["adv","f","hr","o","pol","s4s","tg","trv","tv","x"],"files":["adv","f","hr","o","pol","s4s","tg","trv","tv","x"]},{"uid":4,"name":"Nyafuu Archive","domain":"archive.nyafuu.org","http":true,"https":true,"software":"foolfuuka","boards":["c","e","w","wg"],"files":["c","e","w","wg"]},{"uid":5,"name":"Love is Over","domain":"archive.loveisover.me","http":true,"https":true,"software":"foolfuuka","boards":["c","d","e","i","lgbt","t","u"],"files":["c","d","e","i","lgbt","t","u"]},{"uid":8,"name":"Rebecca Black Tech","domain":"rbt.asia","http":false,"https":true,"software":"fuuka","boards":["cgl","g","mu","qa","w"],"files":["cgl","g","mu","qa","w"]},{"uid":10,"name":"warosu","domain":"warosu.org","http":false,"https":true,"software":"fuuka","boards":["3","biz","cgl","ck","diy","fa","g","ic","jp","lit","sci","tg","vr"],"files":["3","biz","cgl","ck","diy","fa","g","ic","jp","lit","sci","tg","vr"]},{"uid":15,"name":"fgts","domain":"fgts.jp","http":true,"https":true,"software":"foolfuuka","boards":["asp","b","cm","h","hc","hm","n","p","qa","r","s","soc","toy","y"],"files":["asp","b","cm","h","hc","hm","n","p","qa","r","s","soc","toy","y"]},{"uid":22,"name":"not4plebs","domain":"totally.not4plebs.org","http":true,"https":true,"software":"foolfuuka","boards":["sp"],"files":["sp"]},{"uid":23,"name":"DesuStorage","domain":"archive.desustorage.org","http":false,"https":true,"software":"foolfuuka","boards":["mlp","qa"],"files":["mlp","qa"]}], + archives: [{"uid":0,"name":"Moe","domain":"archive.moe","http":false,"https":true,"software":"foolfuuka","boards":["a","an","biz","c","co","diy","fit","gd","gif","h","i","int","jp","k","m","mlp","out","po","qa","r9k","s4s","sci","tg","tv","u","v","vg","vp","vr","wsg"],"files":["a","an","biz","c","co","diy","fit","gd","gif","h","i","int","jp","k","m","mlp","out","po","qa","r9k","s4s","sci","tg","u","v","vg","vp","vr","wsg"]},{"uid":3,"name":"4plebs Archive","domain":"archive.4plebs.org","http":true,"https":true,"software":"foolfuuka","boards":["adv","f","hr","o","pol","s4s","tg","trv","tv","x"],"files":["adv","f","hr","o","pol","s4s","tg","trv","tv","x"]},{"uid":4,"name":"Nyafuu Archive","domain":"archive.nyafuu.org","http":true,"https":true,"software":"foolfuuka","boards":["c","e","w","wg"],"files":["c","e","w","wg"]},{"uid":5,"name":"Love is Over","domain":"archive.loveisover.me","http":true,"https":true,"software":"foolfuuka","boards":["c","d","e","i","lgbt","t","u"],"files":["c","d","e","i","lgbt","t","u"]},{"uid":8,"name":"Rebecca Black Tech","domain":"rbt.asia","http":false,"https":true,"software":"fuuka","boards":["cgl","g","mu","qa","w"],"files":["cgl","g","mu","qa","w"]},{"uid":10,"name":"warosu","domain":"warosu.org","http":false,"https":true,"software":"fuuka","boards":["3","biz","cgl","ck","diy","fa","g","ic","jp","lit","sci","tg","vr"],"files":["3","biz","cgl","ck","diy","fa","g","ic","jp","lit","sci","tg","vr"]},{"uid":15,"name":"fgts","domain":"fgts.jp","http":true,"https":true,"software":"foolfuuka","boards":["asp","b","cm","h","hc","hm","n","p","qa","r","s","soc","toy","y"],"files":["asp","b","cm","h","hc","hm","n","p","qa","r","s","soc","toy","y"]},{"uid":22,"name":"not4plebs","domain":"totally.not4plebs.org","http":true,"https":true,"software":"foolfuuka","boards":["sp"],"files":["sp"]},{"uid":23,"name":"DesuStorage","domain":"archive.desustorage.org","http":false,"https":true,"software":"foolfuuka","boards":["mlp","qa"],"files":["mlp","qa"]},{"uid":24,"name":"fireden.net","domain":"boards.fireden.net","http":false,"https":true,"software":"foolfuuka","boards":["cm","ic","vg","y"],"files":["cm","ic","vg","y"]}], to: function(dest, data) { var archive; archive = (dest === 'search' || dest === 'board' ? Redirect.data.thread : Redirect.data[dest])[data.boardID]; @@ -13735,9 +14447,14 @@ securityCheck: function(URL) { return /^https:\/\//.test(URL) || location.protocol === 'http:' || Conf['Except Archives from Encryption']; }, - navigate: function(URL, alternative) { - if (URL && (Redirect.securityCheck(URL) || confirm("Redirect to " + URL + "?\n\nYour connection will not be encrypted."))) { - return location.replace(URL); + navigate: function(dest, data, alternative) { + var url; + if (!Redirect.data) { + Redirect.init(); + } + url = Redirect.to(dest, data); + if (url && (Redirect.securityCheck(url) || confirm("Redirect to " + url + "?\n\nYour connection will not be encrypted."))) { + return location.replace(url); } else if (alternative) { return location.replace(alternative); } @@ -13869,17 +14586,19 @@ for (k = 0, len1 = ref.length; k < len1; k++) { iframe = ref[k]; iframe.src = iframe.src.replace(/\?autoplay=1&?/, '?').replace('&autoplay=1', ''); + $.addClass(iframe, 'autoplay-removed'); } ref1 = $$('object[data*="youtube"][data*="autoplay=1"]', root); for (q = 0, len2 = ref1.length; q < len2; q++) { object = ref1[q]; object.data = object.data.replace(/\?autoplay=1&?/, '?').replace('&autoplay=1', ''); + $.addClass(object, 'autoplay-removed'); } } }; Banner = { - banners: ["0.jpg","1.jpg","2.jpg","4.jpg","6.jpg","7.jpg","8.jpg","9.jpg","10.jpg","11.jpg","12.jpg","13.jpg","14.jpg","16.jpg","17.jpg","18.jpg","19.jpg","20.jpg","21.jpg","22.jpg","24.jpg","25.jpg","26.jpg","28.jpg","29.jpg","33.jpg","38.jpg","39.jpg","43.jpg","44.jpg","45.jpg","46.jpg","47.jpg","52.jpg","54.jpg","57.jpg","59.jpg","60.jpg","61.jpg","64.jpg","66.jpg","67.jpg","69.jpg","71.jpg","72.jpg","76.jpg","77.jpg","81.jpg","82.jpg","83.jpg","84.jpg","88.jpg","90.jpg","91.jpg","96.jpg","98.jpg","99.jpg","100.jpg","104.jpg","106.jpg","116.jpg","119.jpg","137.jpg","140.jpg","148.jpg","149.jpg","150.jpg","154.jpg","156.jpg","157.jpg","158.jpg","159.jpg","161.jpg","162.jpg","164.jpg","165.jpg","166.jpg","167.jpg","168.jpg","169.jpg","170.jpg","171.jpg","172.jpg","173.jpg","174.jpg","175.jpg","176.jpg","178.jpg","179.jpg","180.jpg","181.jpg","182.jpg","183.jpg","186.jpg","189.jpg","190.jpg","192.jpg","193.jpg","194.jpg","197.jpg","198.jpg","200.jpg","201.jpg","202.jpg","203.jpg","205.jpg","206.jpg","207.jpg","208.jpg","210.jpg","213.jpg","214.jpg","215.jpg","216.jpg","218.jpg","219.jpg","220.jpg","221.jpg","222.jpg","223.jpg","224.jpg","227.jpg","0.png","1.png","2.png","3.png","5.png","6.png","9.png","10.png","11.png","12.png","14.png","16.png","19.png","20.png","21.png","22.png","23.png","24.png","26.png","27.png","28.png","29.png","30.png","31.png","32.png","33.png","34.png","37.png","39.png","40.png","41.png","42.png","43.png","44.png","45.png","48.png","49.png","50.png","51.png","52.png","53.png","57.png","58.png","59.png","64.png","66.png","67.png","68.png","69.png","70.png","71.png","72.png","76.png","78.png","81.png","82.png","85.png","86.png","87.png","89.png","95.png","98.png","100.png","101.png","102.png","105.png","106.png","107.png","109.png","110.png","111.png","112.png","113.png","114.png","115.png","116.png","118.png","119.png","120.png","121.png","122.png","123.png","126.png","128.png","130.png","134.png","136.png","138.png","139.png","140.png","142.png","145.png","146.png","149.png","150.png","151.png","152.png","153.png","154.png","155.png","156.png","157.png","158.png","159.png","160.png","163.png","164.png","165.png","166.png","167.png","168.png","169.png","170.png","171.png","172.png","173.png","174.png","178.png","179.png","180.png","181.png","182.png","184.png","186.png","188.png","190.png","192.png","193.png","194.png","195.png","196.png","197.png","198.png","200.png","202.png","203.png","205.png","206.png","207.png","209.png","212.png","213.png","214.png","216.png","217.png","218.png","219.png","220.png","221.png","222.png","223.png","224.png","225.png","226.png","229.png","231.png","232.png","233.png","234.png","235.png","237.png","238.png","239.png","240.png","241.png","242.png","244.png","245.png","246.png","247.png","248.png","249.png","250.png","253.png","254.png","255.png","257.png","258.png","259.png","260.png","262.png","268.png","0.gif","1.gif","2.gif","3.gif","4.gif","5.gif","6.gif","7.gif","8.gif","9.gif","10.gif","12.gif","13.gif","14.gif","15.gif","16.gif","18.gif","19.gif","20.gif","21.gif","22.gif","23.gif","24.gif","28.gif","29.gif","30.gif","33.gif","34.gif","35.gif","36.gif","37.gif","39.gif","40.gif","42.gif","44.gif","45.gif","46.gif","48.gif","50.gif","52.gif","54.gif","55.gif","57.gif","58.gif","59.gif","60.gif","61.gif","62.gif","63.gif","64.gif","66.gif","67.gif","68.gif","69.gif","70.gif","72.gif","73.gif","75.gif","76.gif","77.gif","78.gif","80.gif","81.gif","82.gif","83.gif","86.gif","87.gif","88.gif","92.gif","93.gif","94.gif","95.gif","96.gif","97.gif","98.gif","99.gif","100.gif","101.gif","102.gif","103.gif","104.gif","105.gif","106.gif","108.gif","109.gif","110.gif","111.gif","112.gif","113.gif","115.gif","116.gif","117.gif","118.gif","119.gif","120.gif","122.gif","123.gif","124.gif","127.gif","129.gif","130.gif","131.gif","134.gif","135.gif","136.gif","138.gif","139.gif","141.gif","144.gif","146.gif","148.gif","149.gif","153.gif","154.gif","155.gif","157.gif","158.gif","159.gif","160.gif","161.gif","162.gif","164.gif","166.gif","167.gif","168.gif","169.gif","170.gif","171.gif","172.gif","173.gif","174.gif","175.gif","176.gif","177.gif","178.gif","181.gif","182.gif","183.gif","185.gif","186.gif","187.gif","188.gif","189.gif","190.gif","191.gif","192.gif","193.gif","195.gif","196.gif","197.gif","200.gif","201.gif","202.gif","203.gif","204.gif","205.gif","206.gif","207.gif","208.gif","209.gif","210.gif","211.gif","212.gif","213.gif","214.gif","215.gif","216.gif","217.gif","219.gif","220.gif","221.gif","222.gif","224.gif","225.gif","226.gif","227.gif","228.gif","230.gif","232.gif","233.gif","234.gif","235.gif","238.gif","240.gif","241.gif","243.gif","244.gif","245.gif","246.gif","247.gif","249.gif","250.gif","251.gif","253.gif"], + banners: ["0.jpg","1.jpg","2.jpg","4.jpg","6.jpg","7.jpg","8.jpg","9.jpg","10.jpg","11.jpg","12.jpg","13.jpg","14.jpg","16.jpg","17.jpg","18.jpg","19.jpg","20.jpg","21.jpg","22.jpg","24.jpg","25.jpg","26.jpg","28.jpg","29.jpg","33.jpg","38.jpg","39.jpg","43.jpg","44.jpg","45.jpg","46.jpg","47.jpg","52.jpg","54.jpg","57.jpg","59.jpg","60.jpg","61.jpg","64.jpg","66.jpg","67.jpg","69.jpg","71.jpg","72.jpg","76.jpg","77.jpg","81.jpg","82.jpg","83.jpg","84.jpg","88.jpg","90.jpg","91.jpg","96.jpg","98.jpg","99.jpg","100.jpg","104.jpg","106.jpg","116.jpg","119.jpg","137.jpg","140.jpg","148.jpg","149.jpg","150.jpg","154.jpg","156.jpg","157.jpg","158.jpg","159.jpg","161.jpg","162.jpg","164.jpg","165.jpg","166.jpg","167.jpg","168.jpg","169.jpg","170.jpg","171.jpg","172.jpg","173.jpg","174.jpg","175.jpg","176.jpg","178.jpg","179.jpg","180.jpg","181.jpg","182.jpg","183.jpg","186.jpg","189.jpg","190.jpg","192.jpg","193.jpg","194.jpg","197.jpg","198.jpg","200.jpg","201.jpg","202.jpg","203.jpg","205.jpg","206.jpg","207.jpg","208.jpg","210.jpg","213.jpg","214.jpg","215.jpg","216.jpg","218.jpg","219.jpg","220.jpg","221.jpg","222.jpg","223.jpg","224.jpg","227.jpg","0.png","1.png","2.png","3.png","5.png","6.png","9.png","10.png","11.png","12.png","14.png","16.png","19.png","20.png","21.png","22.png","23.png","24.png","26.png","27.png","28.png","29.png","30.png","31.png","32.png","33.png","34.png","37.png","39.png","40.png","41.png","42.png","43.png","44.png","45.png","48.png","49.png","50.png","51.png","52.png","53.png","57.png","58.png","59.png","64.png","66.png","67.png","68.png","69.png","70.png","71.png","72.png","76.png","78.png","81.png","82.png","85.png","86.png","87.png","89.png","95.png","98.png","100.png","101.png","102.png","105.png","106.png","107.png","109.png","110.png","111.png","112.png","113.png","114.png","115.png","116.png","118.png","119.png","120.png","121.png","122.png","123.png","126.png","128.png","130.png","134.png","136.png","138.png","139.png","140.png","142.png","145.png","146.png","149.png","150.png","151.png","152.png","153.png","154.png","155.png","156.png","157.png","158.png","159.png","160.png","163.png","164.png","165.png","166.png","167.png","168.png","169.png","170.png","171.png","172.png","173.png","174.png","178.png","179.png","180.png","181.png","182.png","184.png","186.png","188.png","190.png","192.png","193.png","194.png","195.png","196.png","197.png","198.png","200.png","202.png","203.png","205.png","206.png","207.png","209.png","212.png","213.png","214.png","216.png","217.png","218.png","219.png","220.png","221.png","222.png","223.png","224.png","225.png","226.png","229.png","231.png","232.png","233.png","234.png","235.png","237.png","238.png","239.png","240.png","241.png","242.png","244.png","245.png","246.png","247.png","248.png","249.png","250.png","253.png","254.png","255.png","256.png","257.png","258.png","259.png","260.png","262.png","268.png","0.gif","1.gif","2.gif","3.gif","4.gif","5.gif","6.gif","7.gif","8.gif","9.gif","10.gif","12.gif","13.gif","14.gif","15.gif","16.gif","18.gif","19.gif","20.gif","21.gif","22.gif","23.gif","24.gif","28.gif","29.gif","30.gif","33.gif","34.gif","35.gif","36.gif","37.gif","39.gif","40.gif","42.gif","44.gif","45.gif","46.gif","48.gif","50.gif","52.gif","54.gif","55.gif","57.gif","58.gif","59.gif","60.gif","61.gif","63.gif","64.gif","66.gif","67.gif","68.gif","69.gif","70.gif","72.gif","73.gif","75.gif","76.gif","77.gif","78.gif","80.gif","81.gif","82.gif","83.gif","86.gif","87.gif","88.gif","92.gif","93.gif","94.gif","95.gif","96.gif","97.gif","98.gif","99.gif","100.gif","101.gif","102.gif","103.gif","104.gif","105.gif","106.gif","108.gif","109.gif","110.gif","111.gif","112.gif","113.gif","115.gif","116.gif","117.gif","118.gif","119.gif","120.gif","122.gif","123.gif","124.gif","127.gif","129.gif","130.gif","131.gif","134.gif","135.gif","136.gif","138.gif","139.gif","141.gif","144.gif","146.gif","148.gif","149.gif","153.gif","154.gif","155.gif","157.gif","158.gif","159.gif","160.gif","161.gif","162.gif","164.gif","166.gif","167.gif","168.gif","169.gif","170.gif","171.gif","172.gif","173.gif","174.gif","175.gif","176.gif","177.gif","178.gif","181.gif","182.gif","183.gif","185.gif","186.gif","187.gif","188.gif","189.gif","190.gif","191.gif","192.gif","193.gif","195.gif","196.gif","197.gif","200.gif","201.gif","202.gif","203.gif","204.gif","205.gif","206.gif","207.gif","208.gif","209.gif","210.gif","211.gif","212.gif","213.gif","214.gif","215.gif","216.gif","217.gif","219.gif","220.gif","221.gif","222.gif","224.gif","225.gif","226.gif","227.gif","228.gif","230.gif","232.gif","233.gif","234.gif","235.gif","238.gif","240.gif","241.gif","243.gif","244.gif","245.gif","246.gif","247.gif","249.gif","250.gif","251.gif","253.gif"], init: function() { if (Conf['Custom Board Titles']) { this.db = new DataBoard('customTitles', null, true); @@ -14757,7 +15476,7 @@ if (!Conf['Keybinds']) { return; } - for (hotkey in Conf.hotkeys) { + for (hotkey in Config.hotkeys) { $.sync(hotkey, Keybinds.sync); } init = function() { @@ -15091,6 +15810,8 @@ return 'Enter'; case 27: return 'Esc'; + case 32: + return 'Space'; case 37: return 'Left'; case 38: @@ -15099,9 +15820,15 @@ return 'Right'; case 40: return 'Down'; + case 188: + return 'Comma'; + case 190: + return 'Period'; default: if ((48 <= kc && kc <= 57) || (65 <= kc && kc <= 90)) { return String.fromCharCode(kc).toLowerCase(); + } else if ((96 <= kc && kc <= 105)) { + return String.fromCharCode(kc - 48).toLowerCase(); } else { return null; } @@ -15461,12 +16188,18 @@ }; Report = { - css: ':root:not(.js-enabled) #g-recaptcha {\n height: auto;\n}', + css: ":root:not(.js-enabled) #captchaContainerAlt {\n" + +" height: auto;\n" + +"}\n" + +"noscript > iframe, #recaptcha_challenge_field {\n" + +" width: 500px;\n" + +"}", init: function() { var match; if (!(/\bmode=report\b/.test(location.search) && (match = location.search.match(/\bno=(\d+)/)))) { return; } + Captcha.replace.init(); this.postID = +match[1]; return $.ready(this.ready); }, @@ -15475,7 +16208,7 @@ if (Conf['Archive Report']) { Report.archive(); } - if ($.hasClass(doc, 'js-enabled')) { + if (Conf['Use Recaptcha v2 in Reports'] && $.hasClass(doc, 'js-enabled')) { return new MutationObserver(function() { return Report.fit('.gc-bubbleDefault'); }).observe(d.body, { @@ -15526,8 +16259,7 @@ $.add(d.body, [$.tn(' ['), link, $.tn(']')]); if (types = $.id('reportTypes')) { return $.on(types, 'change', function(e) { - var ref; - return $('form').action = (ref = e.target.value) === 'illegal' || ref === 'spam' ? '#redirect' : ''; + return $('form').action = e.target.value === 'illegal' ? '#redirect' : ''; }); } } @@ -15675,7 +16407,7 @@ className: 'dialog' }); $.extend(dialog, { - innerHTML: "
" + innerHTML: "
" }); Settings.overlay = overlay = $.el('div', { id: 'overlay' @@ -15765,6 +16497,9 @@ div = $.el('div', { innerHTML: ": " + E(description) + "" }); + if ($.engine !== 'gecko' && key === 'Remember QR Size') { + div.hidden = true; + } input = $('input', div); $.on(input, 'change', function() { this.parentNode.parentNode.dataset.checked = this.checked; @@ -16031,7 +16766,7 @@ return; } $.extend(div, { - innerHTML: "
Filter is disabled.

Use regular expressions, one per line.
Lines starting with a # will be ignored.
For example, /weeaboo/i will filter posts containing the string \`weeaboo\`, case-insensitive.
MD5 filtering uses exact string matching, not regular expressions.

Note: If you're using the native catalog rather than 4chan X's catalog, 4chan X's filters do not apply there.
The native catalog has its own separate filter list.

" + innerHTML: "
Filter is disabled.

Use regular expressions, one per line.
Lines starting with a # will be ignored.
For example, /weeaboo/i will filter posts containing the string \`weeaboo\`, case-insensitive.
MD5 filtering uses exact string matching, not regular expressions.

Note: If you're using the native catalog rather than 4chan X's catalog, 4chan X's filters do not apply there.
The native catalog has its own separate filter list.

" }); return $('.warning', div).hidden = Conf['Filter']; }, @@ -16048,9 +16783,9 @@ return $.on(ta, 'change', $.cb.value); }, advanced: function(section) { - var aa, applyCSS, archBoards, boardID, boardOptions, boardSelect, boards, customCSS, files, i, input, inputs, interval, item, items, k, len1, len2, len3, len4, len5, len6, len7, name, o, q, ref, ref1, ref2, ref3, ref4, ref5, ref6, row, rows, software, ta, table, u, w, warning, withCredentials, y, z; + var applyCSS, archBoards, boardID, boardOptions, boardSelect, boards, customCSS, files, i, input, inputs, interval, item, items, k, len1, len2, len3, len4, len5, len6, len7, name, o, q, ref, ref1, ref2, ref3, ref4, ref5, ref6, row, rows, software, ta, table, u, v, w, warning, withCredentials, y, z; $.extend(section, { - innerHTML: "
Archiver
404 Redirect is disabled.
Thread redirectionPost fetchingFile redirection
Custom Board Navigation
New lines will be converted into spaces.

In the following examples for /g/, g can be changed to a different board ID (a, b, etc...), the current board (current), or the Twitter link (@).
Board link: g
Archive link: g-archive
Internal archive link: g-expired
Title link: g-title
Board link (Replace with title when on that board): g-replace
Full text link: g-full
Custom text link: g-text:"Install Gentoo"
Index-only link: g-index
Catalog-only link: g-catalog
External link: external-text:"Google","http://www.google.com"
Combinations are possible: g-index-text:"Technology Index"
Full board list toggle: toggle-all

[ toggle-all ] [current-title] [g-title / a-title / jp-title] [x / wsg / h] [t-text:"Piracy"]
will give you
[ + ] [Technology] [Technology / Anime & Manga / Otaku Culture] [x / wsg / h] [Piracy]
if you are on /g/.
Time Formatting is disabled.
:
Supported format specifiers:
Day: %a, %A, %d, %e
Month: %m, %b, %B
Year: %y, %Y
Hour: %k, %H, %l, %I, %p, %P
Minute: %M
Second: %S
Literal %: %%
Quote Backlinks formatting is disabled.
:
File Info Formatting is disabled.
:
Link: %l (truncated), %L (untruncated), %T (4chan filename)
Filename: %n (truncated), %N (untruncated), %t (4chan filename)
Spoiler indicator: %p
Size: %B (Bytes), %K (KB), %M (MB), %s (4chan default)
Resolution: %r (Displays 'PDF' for PDF files)
Tag: %g
Literal %: %%
Quick Reply Personas

One item per line.
Items will be added in the relevant input's auto-completion list.
Password items will always be used, since there is no password input.
Lines starting with a # will be ignored.

Unread Favicon is disabled.
Thread Updater is disabled.
Interval: seconds
Custom Cooldown Time
Seconds:
" + innerHTML: "
Archiver
404 Redirect is disabled.
Thread redirectionPost fetchingFile redirection
Captcha Language
Choose from list of language codes. Leave blank to autoselect.
Custom Board Navigation
New lines will be converted into spaces.

In the following examples for /g/, g can be changed to a different board ID (a, b, etc...), the current board (current), or the Twitter link (@).
Board link: g
Archive link: g-archive
Internal archive link: g-expired
Title link: g-title
Board link (Replace with title when on that board): g-replace
Full text link: g-full
Custom text link: g-text:"Install Gentoo"
Index-only link: g-index
Catalog-only link: g-catalog
External link: external-text:"Google","http://www.google.com"
Combinations are possible: g-index-text:"Technology Index"
Full board list toggle: toggle-all

[ toggle-all ] [current-title] [g-title / a-title / jp-title] [x / wsg / h] [t-text:"Piracy"]
will give you
[ + ] [Technology] [Technology / Anime & Manga / Otaku Culture] [x / wsg / h] [Piracy]
if you are on /g/.
Time Formatting is disabled.
:
Supported format specifiers:
Day: %a, %A, %d, %e
Month: %m, %b, %B
Year: %y, %Y
Hour: %k, %H, %l, %I, %p, %P
Minute: %M
Second: %S
Literal %: %%
Quote Backlinks formatting is disabled.
:
File Info Formatting is disabled.
:
Link: %l (truncated), %L (untruncated), %T (4chan filename)
Filename: %n (truncated), %N (untruncated), %t (4chan filename)
Spoiler indicator: %p
Size: %B (Bytes), %K (KB), %M (MB), %s (4chan default)
Resolution: %r (Displays 'PDF' for PDF files)
Tag: %g
Literal %: %%
Quick Reply Personas

One item per line.
Items will be added in the relevant input's auto-completion list.
Password items will always be used, since there is no password input.
Lines starting with a # will be ignored.

Unread Favicon is disabled.
Thread Updater is disabled.
Interval: seconds
Custom Cooldown Time
Seconds:
" }); ref = $$('.warning', section); for (k = 0, len1 = ref.length; k < len1; k++) { @@ -16059,7 +16794,7 @@ } items = {}; inputs = {}; - ref1 = ['boardnav', 'time', 'backlink', 'fileInfo', 'favicon', 'usercss', 'customCooldown']; + ref1 = ['captchaLanguage', 'boardnav', 'time', 'backlink', 'fileInfo', 'favicon', 'usercss', 'customCooldown']; for (q = 0, len2 = ref1.length; q < len2; q++) { name = ref1[q]; input = $("[name='" + name + "']", section); @@ -16072,7 +16807,9 @@ $.on(input, 'change', Settings[name]); } else { $.on(input, 'input', $.cb.value); - $.on(input, 'input', Settings[name]); + if (name in Settings) { + $.on(input, 'input', Settings[name]); + } } } ta = $('.personafield', section); @@ -16086,10 +16823,9 @@ val = items[key]; input = inputs[key]; input.value = val; - if (key === 'usercss' || key === 'customCooldown') { - continue; + if (key in Settings && key !== 'usercss') { + Settings[key].call(input); } - Settings[key].call(input); } }); interval = $('input[name="Interval"]', section); @@ -16106,8 +16842,8 @@ ref2 = Redirect.archives; for (u = 0, len3 = ref2.length; u < len3; u++) { ref3 = ref2[u], name = ref3.name, boards = ref3.boards, files = ref3.files, software = ref3.software, withCredentials = ref3.withCredentials; - for (w = 0, len4 = boards.length; w < len4; w++) { - boardID = boards[w]; + for (v = 0, len4 = boards.length; v < len4; v++) { + boardID = boards[v]; o = archBoards[boardID] || (archBoards[boardID] = { thread: [[], []], post: [[], []], @@ -16126,8 +16862,8 @@ for (boardID in archBoards) { o = archBoards[boardID]; ref4 = ['thread', 'post', 'file']; - for (y = 0, len5 = ref4.length; y < len5; y++) { - item = ref4[y]; + for (w = 0, len5 = ref4.length; w < len5; w++) { + item = ref4[w]; i = o[item][0].length ? 1 : 0; o[item][i].push('disabled'); o[item] = o[item][0].concat(o[item][1]); @@ -16136,8 +16872,8 @@ rows = []; boardOptions = []; ref5 = Object.keys(archBoards).sort(); - for (z = 0, len6 = ref5.length; z < len6; z++) { - boardID = ref5[z]; + for (y = 0, len6 = ref5.length; y < len6; y++) { + boardID = ref5[y]; row = $.el('tr', { className: "board-" + boardID }); @@ -16149,8 +16885,8 @@ })); o = archBoards[boardID]; ref6 = ['thread', 'post', 'file']; - for (aa = 0, len7 = ref6.length; aa < len7; aa++) { - item = ref6[aa]; + for (z = 0, len7 = ref6.length; z < len7; z++) { + item = ref6[z]; $.add(row, Settings.addArchiveCell(boardID, o, item)); } rows.push(row); @@ -16324,23 +17060,35 @@ Main = { init: function() { - var db, flatten, k, len1, pathname, ref, ref1, ref2; + var db, flatten, items, k, key, len1, pathname, ref, ref1, ref2; + if (d.body && !$('title', d.head)) { + return; + } + if (window['4chan X antidup']) { + return; + } + window['4chan X antidup'] = true; if (location.hostname === 'www.google.com') { - if (location.pathname === '/recaptcha/api/fallback') { + if (location.pathname === '/recaptcha/api/noscript') { $.ready(function() { return Captcha.noscript.initFrame(); }); - } else { - $.get('Captcha Fixes', true, function(arg) { - var enabled; - enabled = arg['Captcha Fixes']; - if (enabled) { - return $.ready(function() { - return Captcha.fixes.init(); - }); - } + return; + } + if (location.pathname === '/recaptcha/api/fallback') { + $.ready(function() { + return Captcha.v2.initFrame(); }); } + $.get('Captcha Fixes', true, function(arg) { + var enabled; + enabled = arg['Captcha Fixes']; + if (enabled) { + return $.ready(function() { + return Captcha.fixes.init(); + }); + } + }); return; } g.threads = new SimpleDict(); @@ -16394,14 +17142,32 @@ }; } Conf['selectedArchives'] = {}; - $.get(Conf, function(items) { - $.extend(Conf, items); - if (Conf['Fixed Thread Watcher'] == null) { - Conf['Fixed Thread Watcher'] = Conf['Toggleable Thread Watcher']; - } + Conf['cooldowns'] = {}; + Conf['Except Archives from Encryption'] = false; + items = {}; + for (key in Conf) { + items[key] = void 0; + } + items['previousversion'] = void 0; + $.get(items, function(items) { return $.asap((function() { return doc = d.documentElement; - }), Main.initFeatures); + }), function() { + var ref3, val; + if (items.previousversion == null) { + Main.ready(function() { + $.set('previousversion', g.VERSION); + return Settings.open(); + }); + } else if (items.previousversion !== g.VERSION) { + Main.upgrade(items); + } + for (key in Conf) { + val = Conf[key]; + Conf[key] = (ref3 = items[key]) != null ? ref3 : val; + } + return Main.initFeatures(); + }); }); return $.asap((function() { return doc = d.documentElement; @@ -16409,12 +17175,43 @@ return $.onExists(doc, 'body', false, Main.initStyle); }); }, + upgrade: function(items) { + var compareString, items2, previousversion, ref, ref1; + previousversion = items.previousversion; + items2 = { + previousversion: g.VERSION + }; + compareString = previousversion.replace(/\d+/g, function(x) { + return ('0000' + x).slice(-5); + }); + if (compareString < '00001.00011.00008.00000') { + if (items['Fixed Thread Watcher'] == null) { + items2['Fixed Thread Watcher'] = (ref = items['Toggleable Thread Watcher']) != null ? ref : true; + } + if (items['Exempt Archives from Encryption'] == null) { + items2['Exempt Archives from Encryption'] = (ref1 = items['Except Archives from Encryption']) != null ? ref1 : false; + } + } + $.extend(items, items2); + return $.set(items2, function() { + var el, ref2; + if ((ref2 = items['Show Updated Notifications']) != null ? ref2 : true) { + el = $.el('span', { + innerHTML: "4chan X has been updated to version " + E(g.VERSION) + "." + }); + return new Notice('info', el, 15); + } + }); + }, initFeatures: function() { - var err, feature, k, len1, name, pathname, ref, ref1, ref2; - if ((ref = location.hostname) === 'boards.4chan.org' || ref === 'sys.4chan.org') { + var err, feature, k, len1, match, name, pathname, ref, ref1, ref2; + if ((ref = location.hostname) === 'boards.4chan.org' || ref === 'sys.4chan.org' || ref === 'www.4chan.org') { $.globalEval('document.documentElement.classList.add("js-enabled");'); } switch (location.hostname) { + case 'www.4chan.org': + Captcha.replace.init(); + return; case 'a.4cdn.org': return; case 'sys.4chan.org': @@ -16422,20 +17219,29 @@ if (g.VIEW === 'post') { PostSuccessful.init(); } + if (Conf['404 Redirect'] && /\/imgboard\.php$/.test(location.pathname) && (match = location.search.match(/\bres=(\d+)/))) { + $.ready(function() { + var ref1; + if (((ref1 = $.id('errmsg')) != null ? ref1.textContent : void 0) === 'Error: Specified thread does not exist.') { + return Redirect.navigate('thread', { + boardID: g.BOARD.ID, + postID: +match[1] + }); + } + }); + } return; case 'i.4cdn.org': $.asap((function() { return d.readyState !== 'loading'; }), function() { - var URL, pathname, ref1, video; + var pathname, ref1, video; if (Conf['404 Redirect'] && ((ref1 = d.title) === '4chan - Temporarily Offline' || ref1 === '4chan - 404 Not Found')) { - Redirect.init(); pathname = location.pathname.split('/'); - URL = Redirect.to('file', { + return Redirect.navigate('file', { boardID: g.BOARD.ID, filename: pathname[pathname.length - 1] }); - return Redirect.navigate(URL); } else if (video = $('video')) { if (Conf['Volume in New Tab']) { Volume.setup(video); @@ -16474,6 +17280,9 @@ }, initStyle: function() { var keyboard, ref; + if (location.hostname === 'www.4chan.org') { + $.addStyle(Main.cssWWW); + } if (!Main.isThisPageLegit() || $.hasClass(doc, 'fourchan-x')) { return; } @@ -16482,7 +17291,9 @@ } $.addClass(doc, 'fourchan-x', 'seaweedchan'); $.addClass(doc, g.VIEW === 'thread' ? 'thread-view' : g.VIEW); - $.addClass(doc, typeof chrome !== "undefined" && chrome !== null ? 'blink' : 'gecko'); + if ($.engine) { + $.addClass(doc, $.engine); + } $.addStyle(Main.css, 'fourchanx-css'); keyboard = false; $.on(d, 'mousedown', function() { @@ -16529,21 +17340,20 @@ }); }, initReady: function() { - var GMver, err, i, k, len1, passLink, ref, ref1, styleSelector, v; - if ((ref = d.title) === '4chan - Temporarily Offline' || ref === '4chan - 404 Not Found') { - if (g.VIEW === 'thread') { - ThreadWatcher.set404(g.BOARD.ID, g.THREADID, function() { - var href; - if (Conf['404 Redirect']) { - href = Redirect.to('thread', { - boardID: g.BOARD.ID, - threadID: g.THREADID, - postID: +location.hash.match(/\d+/) - }); - return Redirect.navigate(href, "/" + g.BOARD + "/"); - } - }); - } + var err, passLink, ref, ref1, styleSelector; + if (g.VIEW === 'thread' && (((ref = d.title) === '4chan - Temporarily Offline' || ref === '4chan - 404 Not Found') || ($('.board') && !$('.opContainer')))) { + ThreadWatcher.set404(g.BOARD.ID, g.THREADID, function() { + if (Conf['404 Redirect']) { + return Redirect.navigate('thread', { + boardID: g.BOARD.ID, + threadID: g.THREADID, + postID: +location.hash.match(/\d+/) + }, "/" + g.BOARD + "/"); + } + }); + return; + } + if ((ref1 = d.title) === '4chan - Temporarily Offline' || ref1 === '4chan - 404 Not Found') { return; } if (styleSelector = $.id('styleSelector')) { @@ -16561,33 +17371,7 @@ } else { $.event('4chanXInitFinished'); } - $.get('previousversion', null, function(arg) { - var el, previousversion; - previousversion = arg.previousversion; - if (previousversion === g.VERSION) { - return; - } - if (previousversion) { - el = $.el('span', { - innerHTML: "4chan X has been updated to version " + E(g.VERSION) + "." - }); - new Notice('info', el, 15); - } else { - Settings.open(); - } - return $.set('previousversion', g.VERSION); - }); if (Conf['Show Support Message']) { - GMver = GM_info.version.split('.'); - ref1 = "1.14".split('.'); - for (i = k = 0, len1 = ref1.length; k < len1; i = ++k) { - v = ref1[i]; - if (v === GMver[i]) { - continue; - } - (v < GMver[i]) || new Notice('warning', "Your version of Greasemonkey is outdated (v" + GM_info.version + " instead of v1.14 minimum) and 4chan X may not operate correctly.", 30); - break; - } try { return localStorage.getItem('4chan-settings'); } catch (_error) { @@ -16687,11 +17471,11 @@ error = errors[0]; } if (error) { - new Notice('error', Main.parseError(error), 15); + new Notice('error', Main.parseError(error, Main.reportLink([error])), 15); return; } div = $.el('div', { - innerHTML: E(errors.length) + " errors occurred. [show]" + innerHTML: E(errors.length) + " errors occurred." + Main.reportLink(errors).innerHTML + " [show]" }); $.on(div.lastElementChild, 'click', function() { var ref; @@ -16706,16 +17490,34 @@ } return new Notice('error', [div, logs], 30); }, - parseError: function(data) { - var error, message; + parseError: function(data, reportLink) { + var context, error, lines, message, ref, ref1; c.error(data.message, data.error.stack); message = $.el('div', { - textContent: data.message + innerHTML: E(data.message) + (reportLink ? reportLink.innerHTML : "") }); error = $.el('div', { textContent: (data.error.name || 'Error') + ": " + (data.error.message || 'see console for details') }); - return [message, error]; + lines = ((ref = data.error.stack) != null ? (ref1 = ref.match(/\d+(?=:\d+\)?$)/mg)) != null ? ref1.join().replace(/^/, ' at ') : void 0 : void 0) || ''; + context = $.el('div', { + textContent: "(4chan X ccd0 v" + g.VERSION + " userscript on " + $.engine + lines + ")" + }); + return [message, error, context]; + }, + reportLink: function(errors) { + var data, details, ref, title, url; + data = errors[0]; + title = data.message; + if (errors.length > 1) { + title += " (+" + (errors.length - 1) + " other errors)"; + } + details = "[Please describe the steps needed to reproduce this error.]\n\nScript: 4chan X ccd0 v" + g.VERSION + " userscript\nUser agent: " + navigator.userAgent + "\nURL: " + location.href + "\n\n" + data.error + "\n" + (((ref = data.error.stack) != null ? ref.replace(data.error.toString(), '').trim() : void 0) || ''); + details = details.replace(/file:\/{3}.+\//g, ''); + url = "https://gitreports.com/issue/ccd0/4chan-x?issue_title=" + (encodeURIComponent(title)) + "&details=" + (encodeURIComponent(details)); + return { + innerHTML: " [report]" + }; }, isThisPageLegit: function() { var ref; @@ -16732,12 +17534,12 @@ }); }, css: "/*!\n" + -" * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome\n" + +" * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome\n" + " * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n" + " */\n" + "@font-face {\n" + " font-family: FontAwesome;\n" + -" src: url('data:application/font-woff;base64,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') format('woff');\n" + +" src: url('data:application/font-woff;base64,d09GRgABAAAAAT2EAA4AAAACG9wAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABRAAAABwAAAAcbpyMMkdERUYAAAFgAAAAHgAAAB4AJwJ+T1MvMgAAAYAAAAA9AAAAYIg2edpjbWFwAAABwAAAAXMAAALqz+tiEWdhc3AAAAM0AAAACAAAAAj//wADZ2x5ZgAAAzwAASJSAAHs5KiiyYFoZWFkAAElkAAAADIAAAA2C9LnvmhoZWEAASXEAAAAIQAAACQO+QpqaG10eAABJegAAALGAAAJxAhGFF9sb2NhAAEosAAABNIAAATy+XZ8/G1heHAAAS2EAAAAHwAAACAC4QIcbmFtZQABLaQAAAGfAAADiDM8hdFwb3N0AAEvRAAADjgAABe3hAjedndlYmYAAT18AAAABgAAAAaeYVW3AAAAAQAAAADRbYhRAAAAAMtRtQAAAAAA0d1O4AABAAAADAAAABYAAAACAAEAAQJ3AAEABAAAAAIAAAAAeNpjYGZzZpzAwMrAwtLDYszAwNAGoZmKGRgYuxjwgILKIqAaBoWvDGwM/4EMNgZGkDAjkhIFBkYAvBkIDAAAAHjazZK9S9txEMbvFxNbI81dW18SK/GXgKtK/4AQcA8ZujgYMziHbG4hf0HwL5CMdQlSOpQO4iROklEEY6AFX9rqPdcmfVHz9ZcGhBa6OEgP7jkeeLgPHEdEQzToafICJe9j4LzfPuztBbNEWYrQHPlUp01q0FvapQM/6s/7K6l0Opkuzl5rTJOa0ZwWtKQVremGNvSN7mtLL7SHGJKYQwY5FFBCBTVsoIFt7KOFC/QsZknLWM4KVrKK1TrkXMDt817f8egPHqloSrOa16KWtarrWtct3dGmtlVBEPhYQBZ5FFFGFeuoYws7aKINNTKxlGUtb0UrW7XPcx/cqlt2S+6VW3Qv26PHJ8fvWt2jq6P3hzMyLS8kIXGZlAkZlzF5Ls/kqYRlSELiCbHjHt/wNV/xL/7JP/g7d7nD3/grG4OVL/kLf+ZPfM5nfPpkbXDnhyxvmO6gXiiQ0N+BwQv8D/VoOP44MjUSTfwzEb7X3lsnArOqAAAAAAH//wACeNq8fQl8VNXV+Lv3vmX2mTdvtkwmk5nMmgSSMGsIWYawk4BsAgJiRFEEF1QQxIVRKQriBopUq0atVLp9drH/VsVvuunXRWpbajf//ce2tv2qtn6tP1sh8/I/976ZySQkov3+3x8y7919Pffec8495zwOc1s5jthEeHASx2WDcpDIQXkIFdTcVjy4VQic2ipypzj6D3FV/6ZR//kjnPikkOfqwOOQkBxMuBxiKNgQTWWSQRlF06lulAwm/Eh8srl4B8p5o1HvcJ4+Ua54R3M47hby7nhYmBuC6CIXTUXhj3B4Z3PIXavT1bI6oQ4O6mgGj+yw4IYWnOrGyYRbFsZ6U5ksyiQTLpGbvenSNZdumg2vqZetKo71Rv0kZ7LF24XA6cHE4mans3nxxfCK4Zp3ijOqA8jL9UkD4vh2DrM25KENEheErtu4AP0h6GpDDMEjHMU2eyYc4F12JwyDi8+rH6h3qx8gCV1DpP5UJqwe+8rr96inj1911XEkID8Sjl91I1oVwZAASVpiNZ/qj6KVN46muOq4evqe17+iHovQ2eFG8hIncJyX6+IWcVxEFiVesuBmGAEUi0aiMdnhgrHOyJ24hcAciE6H2+X28zNwoptkM9lulJW1yUnLdHpgoPKBiPreo8ncFW0ItV2RSz6qvhcJKGahYFaQIJp0p3Jm5dA3XxU7GrItDoQcLdmGDvHVb2bOz6/vPZXrXb++Vyj0rg8QLuw/sae5bdq0tuY9J/zhImdWFD6O7XpZZxAU89PbjjwlTPNG7PaId5rw1JHm+wZOF2hunpahzTHtW57zcRwPQ9rCp6GFCT92dxOYUDqm5KGUvXivIdTf2aoOdd9y1ZJweMlVt3QPqW8W78vb8Rpd+IKL7571+j+bF+TC4dyC5n++/r/fLD6tlf0FmLshrkGDUQWKo/MWEeAJAJpVKJhmI0om4VYEGBOv+sBK5HQoTrVH7YEJdeKV6v017ej9N5RO5Q30fju53uVVH1VNktlZZ3r7bVOdU7Sg99CGWmdEvwC93NioTl+gp0sEV+rWU+jVo4gRppZEhHI7Jm8GfzVKqGuOH1fXoMQCtAtdj15m7WqcvFnYgRq70c3qrd3qz9W1L79MDOVmJj6klbSNANkw9vVcDKCqBCGpboGOf4KuLL/A2cRA1JYJCPmD1w8fvv6g5Axk5m7s0vcu/8TeTyzv1XdtnJsJOCW18Ib6rTfeQN237bzzzp3pjdsvvmBWvDndDH/xWRdcvH0j+aMW/wbHGemakmi9Vqi5levhzuEu4K7idnP3cI9x/8ZxQjoVbUYNYh1yuGYgAOuz+JGcijKoLy0DND7+Y6Y/W33jFxPKR71sZ5vkwXNRb5GjHgLPYW40RqjKqearU52tTFiGH7CFJMJCylWi0EMTOYtezApW6ZMfDT896iTVSdSHzlLgc6dY3QJbxDwFeLF6PuluPWaEatC4ETtLPOH6UyqX6u9PYfYcdZP8ZDGYo9tofwrRJ/5hlWf4h5PFcGyxsv3nTFjkkFNrVRfSWiWP86P/Yf/4+jDXHlcL8fb2OMrR56gb56t9xfzkcR89ZbUbBZiTPtAvKs7iqJNMGHrWBFWFAQhNOBf/z2fho4+qADHDLIxA2Glu8rhq9784VmOGAs6u6zmLeDv/Zc4FPjgzJLGhFaFoqgfBKaGHRz0Sb/cVp9zhW+K7Qz3s81EHiuJ7qZ/8bQmL8t2BNlO/z6f+Et8HXij3ypG/CHb+IBfiuLDDisSGmB7RsqOprH5s+S6HpEeCnZWs/kr9lVYSioKrVBuKlkr/FYR+aKyvUoqGz2j7RQjOxtnaDDdrDzotIW1uZsC2DI+Eqw7BQYRKmBc3GebFc4p5SDED2jIEKMiocww+1peeDB/DQ2fkpM4/VCFpz27umwRJq+6TlXNzbWdA7Udrf7FAa8W5j9dq1t6P3NLSuS/S5dbIpSlmhEU+AK1Jp+zZjMvtEiULtJ5hAHDwxVoQ4I9ul53u2doOTfHsXSfU36v/of7+xK7HDzZfVh+wNm3YsnT/8VeP71+6ZUOTNVC/ueng48V8/6Z++MP5T9GUu04g36e+hnqvCFiamy4LLHzt+k2QHHJtuv61hYHLmpotgSvUF/HCItugMdug4Z9QwRFH9wUuUgEXDUgisuan7ZvIj87m5+yWgsXOHij/8dwDZYf9GpU5UQ6efysyN6ZudM0wfVkIDUJ/O8U8AvWMzgejMa4EfyraIDpcCQpBsD4lmBEHzEgI1qgowX/aaliuMYkCUjRGUUfA7yGoBdHBgAWcLYcmYRVnAP9nPYQF7c4Cag2UAUWrLUiCID/A3eGThw+fxIdtpm8ojtB8g772XpfJsn9Kq80s1f3G4kS+aY13GawW480xSWedb6+1/C+zzWZ8zlITn2XQe+9zmc1jE9+tt5pNt4RZYq8VEmMXreEwuuI3Jhf2ZSKJ1SavIXK3/nK39Y6ETzZ/3ebcojdekzGYTUbn2prEtFrsNLO0LS3Tl5pMBnP4HsOW6sSGHUmdRUvc5sNOdnaUcFkNRmZws7hLNTykepaFs/gVoH8dfkq3diMUhNENipLAIK2CsITKazrL6FsYQ3aG2C1sTuGBJnHnh/MWKyE5YrUUB1ChTTKo3zZI5Cq7ZWB97zDgUwMMdNJzrYvpCbPYOhelLXYSqAIjyyTuop98dbgfYF6O8Au36zHWPwDBw/3Lr9++nHyd1f6ZSCoV+YxdW/81MGCXCoRT2PpnXYOOl/CvtB65sgBoIXYyxCisUeoaQKm0HztlN2wqgJ+q+RHAuQBXxT24B/2fbp2ZmHXF/mK/yWTWdeuwAf8osDrwHlsavzZgHFADFLGliC4aQjxCv1KjeOZCPZbwzOK/6xDWLzTU6vAqr/eH36Z9Uzd9jfIBtL2VTrECFDCcWwC1znEIpFuSg9EYnDlaL4Ky8IIv3h4/xc5Uko8P+PagnQaT+rIJXaQOAOLD8Xt8A/HTeRovwtkd981W76gzoemmU3YeznY0yBgfpLI2HbB3TxnFbLV9pwQ2nK0FBSzI5keBDGfDsJvC1g47O4FNQtsRhjRwGDx4Sv3FqYMHT6H4KXTNCfUxdb362IkT6EL0BLqQDKkVuKGwUFQh1cFSDnxBddITJ9g8JgBfWgzbowzQzqE0aUGUTJGIU9ToHEcIqJsYBFNqRyIiUDsNsDEgCrkNdHNhyejOEaJjiFz8Kg9ymJ8zO5AH2U3vmez4/ZZizmxHDghW34VwB7Kbi7kWL3pcF3ag5RBihZCjkMQKSdByR1iHHvdiH4/YyaQWeJPNBvSmYkaUNWAegeeCTDfvUHyKWds3zeA8/XZ3mY4QKRJo5SJcF2Aopb2w/FbGTLvbleihqw+5JIrHoGiWsp40gHDKwYSgcZVQlL2OAjgwJA39+PaOT3XcgV6Nt6vPy/Vqzp6xq7l6WW5CQJohSnxxTUdTWi76hwKjeN8d7fCH5cY6NacoqFDXGEMFRjflqmDFw4UZDuCotKsCKk45CdtFCVi6kS3KV8ELP2BQv2n0GNWCVadzFdjCgb8fVmDm4MEzoAYPmEzqN/V6lLMpDgY3FnXQjhNVkHb8DNCZoK3aHqdthhpbgmKCaPK2rq9qoQH1QLNRzvqTD23q/Q51kG1yA3aLyYR69Hq1YEMffEhTMYMJigKY2coPtqAYCRI4vILuYGQUGrKKthu7FRcZQZ2IoJPFzpPwQp0XoBweiHpPwUZV8xdD2kty3rThLzU4RwwEvavasAkXnlD9jDP52+4uHK9paKgp/qKraoysXC3lkFA8nB26tMIMjM0ky54fDBSHrLLNFggE63HgQxc9fmqhXS3odUoE5yOKXVELP/iwVY8qbUpW9qJYtAdFQw0WDDhbMkHP+wQ92CWRryCZyQQPZz+gdhyF1CZZrt9///fKyNeOkwskm8W4T490V6jf//woqnYIKVtuBQgXODXnjcZj/v37SijepgsMWL9fV2PYcx9NidqR78SuqzbeAouoGp8Jc/PYKsBcsCEMCMvofg2UBxyziQpyUl7YKdaVCp7ThexckLUdzuo/opy6Sf3LQfWvW25RUnS6YOUp++Z99cK9f5prbAJwNCs1tH8QCt0rBb5sVmaih5ByEDm23ArZ0JCA1ffUr1x5yS2KVkQ0pezrnX/rNfLFboUoNDuE7N+nBZglZEKLoGtKlIKiblJ+AYfGYaTps/jH06Xps/iVcVwr5QwulEYITPbgIX6YeQgjMyZ2Q6JTzEM5wWN4vWigUtzfJ3AV//7h0UnC3MO0Pn5RNROYrXFe47HX0zWepru9s5pHRGlBOH8pJeiC5UxRVpIrE90BpENbkS4QbydcYfPhw5vVoSLbrzFEF76OdOo/v15op3CZK9ERMpdlcFnZ8GC7y2jYIMWqW3CoQePN0nVOcWZAmZOMIQq151iHcn2b+4RCTe3PH+q6ad2dCwrqu7LNG613drz9jS3P3RxNZHafv9zsjQrc/OhpC+04/7fo/HRf3/aiUFNr2TYlNeWgPurFfwi4LXU7O2YoTammaPmehdGRfbSFVgyIv3MsjloHP1gQ6RSGrQY7HfX0OK+gZmUYAxoBQ69KBKaY73R8w7Vv9Sg2Ou+6htl1z6g/V7+s/vyZutkN180bjVu9z/UNR+feIZRC/Sg1tBfvP3r/tODyLYFR5DMwr9N0wYb7kfipT6mn7t9wgalzXmAUKQ1sWR6cdv/RB5HnlV27XlH/pPUrQDh+CHA4tm/BsViBXThoXATOakX9inqK7cMiWgRLlR88TVc4WgQhFM1cpK1BCi8BPs/KmjpxaZw2kZSZTVIthF0puCesA+XPnWuweqOehgYP/UW9VsPcCSpW7Udu8wmRWmeds6ZldksNvGsjQi0DXdjvvgFzNo+1ZwG35eO0CY7UUii7pwF6mxFv4+OAwgNAtNtwjBLklRQfuUfo3M8eMJtqo7F2x8Llyxc62mNRr9l8AH1W/akZwDQm1Ust4Rv2778h3AJOFvnTjz4KWfWEWpwhRL0xR5018+TXn8xY6xwxgP4ZX1NT6u61EBN282a+xrsW2VAC2dZ6a8DrDkOStZyJEfkU5uk9pBF2VoVzw4lbDyd+K5xzdK06Q2kFfkH4IUaryEH6BnRfRqVwoN3SITkkB53JNNKSyCgP/0geSC9KdtAf4ehzhCvm+XyeRqt59i7CfwF+NIhwNNswQrtRKR+NxXmVhVM+MwRilpAG0x/H7gbLZ8OZ/YhxzaW+zKD88WRITir/jV8P/AsE1tfXPwJ/3d0319f3sL9Henrg72b2t76n5/j69TRZT4+QP3WLsPtf+tF50c70B4S32B5dV8WjKGFEQEFUKDHkQgXYHPs289dFVGcslY4U09F0fwoNpvNR/IMIb6SRfWouHVEdkQj+YSSfRoOp/nS0mImVcdMHpC2lutJnq03QQoH6gz2RxoWSH6EVKM+Cwy1+9FqExuXTQx+hfSkW6KuHTFAZ/n40rTWbjLwHOM890OYV3MXcNoBYoEkslO6C5ZxNwdqNZrsxW8ZR+hzvgCjRLbEulfJJopsd84CGx1yCyNw9KBMdJeWq/OKlcZf6jnLtzOGNi+7xeVwigjMRm5yie4qOCJj4iLOJRxLPh3mllUc6jC0uUSebFUcw5kNRM/5g4RKX+pfwvPOHH641Gg2eneThuowOTZFw9PQ7vMmCB8w1vBMcxUFwbDojhG+YPn/4utyqLYtndfItFl2taHTUGqJbooa4ztgghrc26FsEc0jwbo/qQnqdw6szRYKxGhcSiX7rwuHrdsyx2mrn1nvJr10hq7+CtqiFilO7z31QKN0Vo4Rb4wIwNpiewYUGFnBe8wfczmAsFlRq2kLqPHVeuFXzO91CXm9ubzj1j4Z2sy6AnlZXB6lf0INfX97L86K2F5mA5u/kuEZtM2F8n2AZFLNyiWWtYWih8vFcAst6xqKg6ALsPsPwG6R3LXxeI0QV85CGuwyZlavPATwGD8YHfEd88dw5VyOO7jnt8cGiRnvm1AGzMkixmUEgoQfPuRoHKLPiiG8gPsJdXZIN0GjmINcIPaBiGIBHl5CBUQSqwq4q8aFtZMFfjh37yzEyRFGmU3n6HEoqG9OYS29UksVLR/nJZOAYTYoXHN48zNIReN4xbd68aXeczqOKHMMob1nD5ZbALJEEIE7ZKNTOZxU0A1ECzQ4zR8UTEOVDis4GQPh5CRD/RLeQTsHhFhEBq/GTJOVS0kgxJOKffTb4o+lKdNXw97G7ty0ZNb2DPH1pHXkleLDRurLOYVX2W0XUo+b61T/H+NuQW+fUm4XuZUjt9m70zYj2E4Q7/rNDFyFLyI/Vbh4Xh687RzIalFg93oRPWiQ1sFj95AUN/7tjqslaJ0YV3s7bLKg55BPgDDaYdLbHv0Vwh/pOjaveDtRaTG936CwlOpqdXU7Y4S/kuIgrGZBTsRagvSTonEP0I8JwR+gapmGszw628Lv5TpS2QdpWREk0SOYnToeFSAA88AqxkcHNC3vRzsbaOb0XLOhY4EMY6cSmWct2bUh2XLytN7FEh4q/x9YDYckoCsjFh9MtSYHfgH5/m3uta+4nblzXHpy6ojv90Ctztz/29Lopz0zZrF5pDaBzrumd0hmUeUP6ZEq3Y+H5+DXJ27NtxdzLZvjMie8nazd7W4a3ruc9VpM/4mt1JgTyWrPOrBd4tBwryNux4qa+1KrpHQFP6KUHLn7skjk+0aXRpjxdn9M5zllCWbwolm7BsSwlTSGE3i1I0EMRw5NypEWpgW7eITrPsvhg2GdGuzYjT9diRQl+8aaOto13+QSL/56IziTqce31MnbZLQjJTxOzsdlYt823f3by6zefi2P2UK+EU9gYqjEbBXIp1guCHscShohVaQ12mO8vvrFCv2HZuVY7XzslSxzYrsHqzRKB9tZyN8HMJVxW7SaMrmNoU492C0YZI4ji/5QOoEuoGwOsuhh4ihKgYzjWQmgf6D7sdthhfsvADeWFKfzCDgE7fEZOYUrMURhnRK4FQ3ZZfDVod9zs6ICfPbhkSbXngx9nTC/DnIXvCaOI6Dc6Lbom3sFjIVZXU0dsZiSaFKkOyxclFgf0iBcEQ/zpsEAa+tXfz4RZJPJ5l3sUEWGeGB8M7nQo/qC3yZKPeJ/wwl+E58quYY4fqYW5RUgwGxHaOrSkzsJPWaFfPAfp9AQjxPNLs+uLX33cdtX8oLPZFjdYrAg77Emkrw14LU3o3I3o/o3bca3b5+BNHot5x6XYa0e7tTEmjBdwIfcAxymlcQzzbte4QUxH6aCwQaxHaQddApOMYzdOAf7LBMzGjiSiYkP0sgSWTgsMdDrocDnozQlMURRwaELvEWH1BVNRyLtUG9u56ELE7Qi6qwfWYpCFLv/NSy5v0iNYcBOOq6QnSKAjxhsfbHzPpo2t4Dd1ZnO818vnsp0ms1UgwxwRrObxoTwNFXbDmGPEo0DVkC+ai8wixrywNHsklX3pifkTD7lt27/d/nki1emkhfOXZgRTrdG0YxMb81MjsSkZ4mx3ksyUmDNcH8I4VB92ThjIaTzXMfwMdrP237lfl7io9wMmKSKWpFpOM8kSgTFWo95TzCdypTiWkodnYVTQ5JKzOP8/tVsTVyT5UruZTyhL6jAf/h9ot/wx/WPbXT3a1WP9L4/0/5c2n939Mdv8IXy68TfH8ln8E8HNh8Wfre+IU8wMrZ3kIUL8KeYRAPE9xU0WM5l7qFIaunYi5/DfK05+wtCJs7F7+DPGVONB0zuOlCaBi/6bkEG5mBa9OqTXo4DeYlYE8H/AeiiyppxmTz433j2ahgxRMQqa3UcfZ+9ZdScn7GOJ76/xcqh0zH+3jwO0g4wraIEmCsc+bhfxCR8tQRMVAZeq/xhd1HiMTJ64ns0fo6DKfSoT1nUIMQ6TxMXMplq7esWxHcXcjmPHduDCjmPokL3WZI5RBlGTLCjo0NFyzLEdT6GDiiBXaClJowUsnJ9roSNJaZNMAkiqNIKBrGJnQ8VR9ziWNs5vHdy6dZDfeiqPcoMYsIkPWD9EOhKHqiUgeRtNuLVYUHMFlhQFYPDYgPGQJXCasbH5QkleEXD2t4QtnAgUXg0X4bhgNiY5k06UAgwdAXoONAuQ3dA+GQHygSgLGDBBtGXtW2vz+DqXQSr+VoIn9ksZNDhcUAeEtyJH1YGj4Uw6+lYEUm3Jk0EXTWVw0VTfVweGC2gQD6UjR9HgU9Hon2MlWonX5D7cY7kcFkT5GVHG9CaagAY6HFTvt/XM77Gqh4JoCnoaTSEluQruirnDp4LRaJCIc684iaaoJ8fIlChUYryB3VONuZzm7qf3TOT+cTdSA3xOu33C/3XmvaHGq+eEAtA7lPcKlA6JRRsYSu+Exmci9J6cMiwJEAAJQOCI24U5B6pz+SQe6DwfQJajb3Mf5tST6mr15FLx6vOu9OkTqaTOd+V5V4tLUT4cRM3BrNtmc2eDzSgYTvf1PXtShX6dvO9W/ZN3/vJ8f0OD//xf3vmkfre2XsV/Qj9FgLHpXDc3H1qlzSYXhbl0ZZEyFrSp/IuVCjZUX6bA0gR030XYlEsw4Uz+jezcdmTbAOYCsvqEHJDR+qXHdgwzKCe5noyVENM0i93tGmZgSADE9DlrfAAFigPqEL9unTq0zrcESHU0AMW0D+BCpZzij17UStlxrEayyVCMKGpCIOt7bzZDKTb8ijpUhKKwbx0KrPNBKUsq48/uyJu5NePlbKclNHSaHk/VPaN0mNulaHeXXSgUkETFxVY9lbbvlujtCpMMgi4L+XIXuRGz4l3UbhC3lntn93ltivMdNc9W/6B6/NodU4lbx9sMBtf0ppDkDM1YfNX+ZzcPwpbhVWAnxyG1WO6nYq4VvA18uZevKQazx6bTo9fVPOwXTYXb9qnPuI3YbGm4dGBP+7QVA0uWz+yIudgGA0lS5b7vhrluZVKD8kTTSrt45sTSnUzR7uLHSjiOdrcyowYzEcfOqcEsio4/Dv/E0+tRl3k8V8IbSfh2eF3pwevVb42dSgOuTKUKU2kgOnQS8nrQF1kGj/oBZKWFlPRqRmCJwnzOKp0zjM1EWUdl4QHGVgo6HWL5lKWbM+NHla/omXxSkF5huREs9xFOSQGOCqgQc9IHIEaAtDKngjh2SUCjqZM+IBrRaMThhz5eemVsbaw/u2B/2Mv0gjKMBwXNjo2Ts3LKmSz5qeL1KsUOPV8lKa8XrlVM3lM5r0nBL+kNxTVlnBsw7jVGnVa+RMtvHl/+JNWwRJmsWKntzDrxS4r3jJo7JmkCJDZ5ix2sLbtGdol5aEvNBG1JVWpertWsE+hTUWhtgm7C2mB0R4tnfb1G2C3cTTUm9Ehk3WJrdNOpV93BoFtoc+MLi36zwysUvA4zuMLcGHlCa+mEH3OoCuNVgbiS1D/TABjOV/uE3CjVU00BRcuwW67njFrEMRTTmHLKeXeJojZ27krX3KUeSqy3ojSVDh1+iQ4dDAwdPhg6OnLQYRMdUyN+iTlg5OBh8uKXDPpK+WU4OaN8tzz2upRWNVGNOqFKVUM3ee3gODo6QPioQV/dmDFrYmxbxjeiUnt1vWNrHFcRne+R07AvSoIIcFLLcYq2KbDZQFUzQuuxjMIYhT3hpappwVPLQ+wt/kGTg4p6R+CpjedDIw/xR4U/AMbE6bFLkxwv7Ud0I+UPFd/BiqIcpTPhBSj/AziOKvxPi+8U32FOLQgeNI1W5hoo85JSmWcIodNCl0NRWl4FSmGFQwH4EK2BeeC/loAmHAP79O6Qo5o9oaCsqe845aCmw5MMypoiT1qGE2KM5E6BdpmN+wjrP9I8TCgsN150J1eKOTMPaj5TjqlKlqjUrnJrzmxDlR7QhLWWaN7mCWQCy/U0s3vTVCuiogKtVKrGyphlVorf1iOJPV3JRA/jbcKIj2nDTcqzzyrKGqXWSx3eWnCeGYJuG9c29OiHJS+FoBOTjo2byXjR1gIaDmgla6ubtpLKLFa1T+Dta2He1U2/hedaux1tplXgevvweJnKBp8dalYv+y1UbfcBIXNYoekWjmtDtaxXBzcXMObxOmOpFgTEgcjGrCQUAmeyZEHlFHD+Zrv58Djxz4q8OHfV0VV/z1vdeySTTZ8ONqTa+uJtPZexyOZgoKGjvgblx7V+sCJYjr+4+vCyn3nsF4um2R5PKhhtcfm2zwrTaKVLsTuntS7sGg8Mo32itFdHuU/yKOgxPncFCMm4Lo+R9uPsloGyMOuAJqkM7qoO4jMaPwiBHI0Fh1pgLzu5e7AUYv/m+PaOwkEr0/up6IG0oFiF52JBUpIiQNTvR+6Kikg30vgyEF9JC/kqZXSjbCUt5IMy+C9cQRfSFYHHL2fL6fLHA+MD0LVR7z2Rtx5n3sffitxD48cFYG6y3JUANGXy7KWAsTKZISbBzmlKP5K2MfbAgkhpVxIl6sQKK9eRmUwGccFBg9ewbx88Dhro2zDO/8qHSSWi702cqeKv+XDR5DPlpvVV2Hc9Kh0akwpQHlLX0OX9K0W5BN6HEN3kL1F2fagg5U8hj4KiLCXLQvOe+ojt/ASn5+xMTzgVQ+y+TmAylQBU0DBNP6akrSMEVhUt+wav+t7BlcM1+O+3PwVktBDY9Yr6O/U/1N9RgSfYEtpR3Sv4tsf3Fq3nrTr4gxfw39YeHL7/CdSjvqT+lklX+lEHqqMueg7mRtLQhj4YqZLeEJtdja+W1hhrTB0LMcRqZqqYQ5FotI+KIBS3RyL4Tnof0heNqr/GhdRMnM+n+9RfhS8P90PcASaosD8aXRjdDAn6NHwkLRRK9Wm8LXb0ogqPSpsoRhEKhUhxeyyVjEH5KFLMpWbOTOGC+muoP5pKR/GdEZzLRGgz+qACFOlLQ+0oCrVDhuJ2uqFzaRjjPiFHNehRuWMVrEc7+EvdpIhLH5RENZ5+xYpiHYGi8J2hbCZCq0t/SFtoWzXcIj3yLNSZL+t+lwez1K0K7lUaW6iU9jINTxgp6kDR/lQ+1Y+idPz6IrgAcdvoeFIeT18kov4Kxrq/n85FFPoeG9VlL1B4L9FyVJbaIsAh5ijpnrfgGIa+2oNJuUyvqZSCGtrw8Cev3tAdEgTZajNJJivZnX4Cf28IqCzMEaDKVEp2Ic5Unzl3++DG7GwxpLc6ZL0XTsq6oy/vRYcoJgKpuDHnaavWErdrFDsvLz8mo9aKyngX3V40ptvfDepX71U0QVqo/l7UD4v+GuKmbvWr1G0woP57S9Kz6B0vS18RyKXpIfkCJodLM0B6L8uQipbk98wjdwl/F67V2jdZOyZrN5N5m6Ahk7Qb5yZsCD40YbMrti4ETT+xtB4rwFpZIRUAohQV1ZsdYLqbVLeEKo8wDxqMt5PARKEsfakuDHURjYYaxyem5Z5mIq58oVRSWUEUcVfAHCvQxjTTh7HCwRcb1XkTRE1tZyqcgT1w9rmFSnsjGaoJBuSC8P2WWm/Oe2mL+j6DdPX9lkvBX9uCDODUopBBWwSGUpT6PvoDBF8J0Z9UX2Fq1MlPQviVEP/QQ+UYlGSa2a9UYqrPA0qjTGUSnPbyjj9e/54oqRgNABxV0UJwq7Zll7d8/GW7uWB2OOBhx3aDwfK6xWCQHZZvWGBIxh0Mp//6okVxmF80OxR0Cb7CJOp0oql4yGC1lu+2oF05zsy5gFpeSLEkOR10ys4S3pdkN8wOVzjFkOdkQtMZq9YH0ygsZvmEnc5JzRRKwkUG1ULYV/CF1fZv3+xthpnDv2iPN3tv+lYcPQN4FEwvTKeGTX39/NtuO39LVz7ftYW60Nct9q+2o5OFgjqlvaa2lmx8vL59STv81T8+SNGwMkxp2oa3PXfboqeeWgQvu8YnY3cYTnZ7QRvOi4w/C6grFcsIJymXWeQ0HiCiugP0xjxGpVI1pU96u46p0E43T41BCIDkfF59/Xe7YHl5nLXrHfuQ9DUvjjpa1Ld+/drQ/futB9221ubuOn+TQ8Y6QroXdvuwftWDL16R/epXvvxAzBBzNMQ8sZ6AjURT0YuO3e70wJrzrFdu3ITECzYMqd+64vJWYWGuP+fy1vEW0SyFFmU6FH62IZm+9ieP7QjbrUQfixhislu/bs82zS6LQPmgVqoJIYy/YXGwTTfmZgxOAXZwd8zP07uk0XuyEW7aOQMD50ybxaM1B/atyWq+XqL5BiuS67yyeM/5y+fPX5scyCPUuGLbLZ/fUA5Zf2sppIRL0HHnqXx5kBnJicZg19f44aLkAmBnc6ExypkEL0dnIcBR6YQMvN1i/sibXZrQVdebRz6B7kMn0X3FZ32Om77ii/t2rXSQyx0H1Fjxb2rsgMNxAP0SW9AvD+Dc29s3Xf8Nqi78jes3bX/7lb//HU+P+75yk8Pnc6zcpf5kdugP6lvI9WZoduhN5FL//CbTqR2UqDy2nqvhurhZ3LkA+dkWxJpqH9/OCG1nibsKKajYBW1xMME0SimPXwFaCLl4xn7m4aQOZ6OxLCDauHnxqg3Ql8/gfaO9QLejy9R1m6cZ7KZdtin3/Ndqh+OT6CVkPm9txmAXvGF/kNgij96KPDpUcMTmHla3/2bhSXTZ9dd+pueCf5v+vbt6CltoP1UVXznazb9K+IWi6fh5trlQbN/MX+yr769/C9nkC20mxa5gg9p255sJ9P7UPXMbcks//+Ie+19e+Mq1W3NfvoDN3cg7cHYrDJ6CFKIiZ92TCHJJFQlPRC87+Kq7WtiVzMbXjebSrmQmXCgiz2g4xTXMkCMhwsmdczsfh41JsdAH2oN+YJKMRsmiZg1mM3nmVL6np66hoY6K7taHwxwaGQEoPyAcoDp/sH1bkVLmdsf0iHG+mxEV+afKQGwb0iPN7RZgyQsDU3L9jw8Kcl4y8cQqqv+pFtOCeUBvwVb98WEjRgZwi/hbiKi8hWBj3mLDnxzsLwgDqUL/48X5imVARMSMhtXit2TLgB4bh49LNrPpQj1KI4LcOpvNmDcLjw325+hJNqLdUZwpB12WgD6Hu5bj3CUp7si4N6r2V5g3pf24Kl12XFxknMZIidwLVtkRcOVRQB1CAyinFtTB8W48xNx5+iQcDdHc6uCoGg2kqYQjVlpgNBLl+1OnmPZ6fn1vrnc90l4QotUbyLFsuRwKDEP5qKC9IRQHUIBJvFLDA8NfYElohkJV8KLTzNiJAM8Ber0woD37S3QMrGdhCKiYLHc11eeTWvgqMYXyHXYXAqKmRYxlsn4+GdTUCJC9EhmEowCWsKVawoGKrmW7xUpq/FDnIpc/meybMsRUW08Jol4t0PvswOb2Nan+RG+qo3ZGKQnVgC6r+tEkI1zb4s4mT6ClrnFW16rzd87WyhgXWM7F1697dmp2fmMdYzEMW3y0FFhfCBHJ4m5o6Yqd/1UWT3UQ1W+SHeUE/s6elu4retfsXLIyGWSZx4RoyTX8S1XZXThFTQEhgRUlCrCHRWPpaCZKz0AhS00jdCOqRCdx76oXvze37yX11LSZci1PBGTAJiy1ORs9fuMjz979Lur/2nvoU6RF/bT6y8/p/m2WRYdddsTbeCuxYF3a3d4yP34eEg/f+s7nN35uLM2fZFq8TgfDisonGew/fpLoJpWT7azc/O+qj6vz1ce/q2lttHYua2lqWdbZqnmp8SFVs8JWMkw06sOF/PfUF599FvV+T2MxpvqjLp53UUKI8ocvGU1ana3EH17DOcWjfIDyciNStVWR8h3VIcYaPoMb/MpTZe7uU0pawW8qSrFWSZf5w0PiUfJWmT98xu2deIjxh8/gBuNfQBm0rDQUqmiM6adYoRpulIczOkI1rDSbVy2kE3WhMVqvms5/kN36ly/i0tpNnEatMqMexAekPr2rEziqQ6czSjwGWsKKckqngnLWqLeAczb9oITzVrXg6HCoBRpWLNAwqm9XzgFrnDeIsuhAg2gQUCwZ5V0uNS97qLCZsWBEhz2ymne7EQtCeVNBbxzNog5U8Y/ygqY/3UHtu2jSFnzpTTUGJYHeEVeM9TE0j0oaax3i3UzqglntID9krx8GPaffNnvIEWbAD2hMm60Wf+mHGqPbVmMx8RLiv+SNppilD+2PFFTOEyG7Og22NirG7jU21k8TSBbcZnu9MypFuTG6bo4z74/qGK8jv2fd6dy6PXvWIXjiwXV7yGCR+UmBPgN7Knfi0iooR+GaNGpfO5fLqu5UKolqSSApNbZ8aVW9+kzzw72nCw3perQEXHyuIa0eGy6sP9Gl/puAShUH4De/PqRuS87z+utD6AC8UcfgBfPVbSIv81WNobwcDhdEJlvDMSAaf5U7enGLC7DIxl3TVl2z8r9K0fVadQvLc5VLV238UE7iSEGrq3x3PP6meOy98IQFjt76jrvlLd3qlmyw6Mq6TWbAcJ10zoKypoEVlJNy2YfzMALwE7h/cgCMmocqT1H5nWGguE7nYcc7BTRvkaPaWKfpahzlWbRxOXZ6ZQAP1ZBQN6Cb9BWNAULqpjgP4JX0Rfl0QLHEMmdsilz7zNk1M+d0rVt1g3DLb8+pW9uavnhBncvsdW6Zve0+r+f+L279zoGN04A2bjq2Y5jJNZHCjmPk0Rp9fFHU3HvDqjpF2nZhov2aLlSD+7ZbdHzPMrSGrJ+34+FjK+z6qQiP5jo25i40THVTSpd6cjIboltFNh1lfPaQM1m2spHkh2j+F172v9k6e1fPtXc8+R//UXybBjGRBCgcL//T/e3t6Ef6wYOf+1PxC1pdGokxag+H4lVUu6yF6y5RelVYe6YsbRVMBzlbNCDaXAHqJkEAE6lafV4zuga0JBXysLfHLX9jMkfDh6n9Tz5fsu03/AbVhoNuDn8nV7xRzPelT3Hpvr60CE/8ZZ99fS89y+PtOiaWNPytPKpH3W/QzDzMf+G6/fn8aZZBoE825/PFQ4xOnVeSf6LTzMht2gU6wczSZguOSe4SA02TxEvZwyXrkNmyKqWfJ7mtg1uVxqYlW0tv8u0Nsj7W0EwGXvctbor7ihc+c/zJV15EicEnX7kNXTRAWhoCG2SzQVyy4rzp5JnBrVuXNDUqW0tvlZM3BOBwgMzxpsU+/Nhtrzw5iBIvvvLk8WfURwZIMxxy8gaDuGjZml6NjcCNWKW88C7MkAzzsps7zp2ukuvS+gc9kyuuKhs/zg8x8vPxTfxUGfhBTCaISQZRLTnYHGg9LHuUigNR8SBWFlVvdsNeAeVrJUCr5P9OZpJnUEQOw5HQt7lPe6p5i/5ho7OhXZLcOxSj4dpI3GiS3M8Z7cjd0HidZDYa7pUM3Ta36YjBUknq2kmTNjRXJ9WZaFJTp9VthKQ4/4DJnuR3YV2/xeFwWPp1eBeftJseeMAsJ3m+u70UkWwU+Z18UjY/8HHTl8wYjTAkHACYT5cc6r3fMCjIE2psm2UwmCT/DmmNYrq81WM1fNLgPE/SfaJWb7Asdk2JepBsrCQ16k06/3XSGrvl8pYxSW39rrYGN5aLQwds1tqaq2t4Mm+9E2Pn+nmEB2+t1QYRdW4agcOB8yFqXiOeS+PcdVby7r+Sqyw3spvhwhHGN7KJDBtmpoBgslOACXfzjEVA70FgYUqAL/hFCmlUaTkmhgJ0xYYBKmHtUhNBL6jP//vKNTc+FE4Qo4IBaccCEZEQttU5DTfe/QKag25Gc3Dn3TcanHW2sIBEqqsIyRymRPihG9esVP/rex3+x1F820173bccJneqf357n211XA+UJ5FEkZcIFdtwRuKe+T/Zcefb+/YV9+388XxPPOKMiggieVGUiMWGJH18tW0Pv2bFunf3Luqb91oF72Z6c53cFaOWZhC9HU1l6P18hRKCIxx6SklM6Fc3ggOHsshgRTrYymA/sRnTQRrdT+mipJQT1TmBBFQ0WjNHwx9dnFAHB3IDXk+k0ZXlozVTwo0xWyBgjtS1utuEn952fUHwh+xphzXQnJ+mjwJ2+vm7wucPPH/DNpc6RPdPZA9v7JjmcUebY8kVe+e2PbPpiGavBueTizp+MGPDeu91n2h2zxYSgXQobC/mRcmqk/GCz3j9tgULA4k5NV0yWhc+b2EwvGiW07Vx0Z2PT22O96VxPt3nua0vXXP9nqbIzP3bz7/oCFexv8RkSbuozeiqHS3G5joDjozGMJEsgjZgAlXxw266j0fTVI+VHojlXY5JjVLzWpXTB4CG7mCSszKileFqDlgdaXvIL2xYlb/tp0Kbu7UuYg4EbLHG8JSaKJ91NUY8XhhPNJBYnD+y6Zm2UGjvimSsIW70KG0zNobVv7AxC7i25V+8bOuBL6BOEtVP4zX9SpULrUNyV82cRGDhApvfe+6yBVjWWSWxmLeHQ+lAQpjtbv7Edd71G2b8oGNR4tIjF51/3ew5MyPBDctXOhOLbvNooxafMuXRfcKijS7nrEXh4ELN9jDJMXoc8KQzLP2S3HhLvsLQqe+eaaq3Is9VspE8nd5QthBGpdNRbLAQODKBHsqWcMxx9pPFfPOsgXWbdm6c77F32z3zN+7ctG5gVvPzeA6e/UL+zeJ99klsK5PPL71xQYstuWiWz+XyzVqUtLUsuHHp088XX8WtLzxNDSzbJzK9PCqjGoB9JE5xuYjDZcHVeIazFFCS0ezAflK5Lask027HcB4jwWpWmYQmtShV8lK+B6JWuGXRwJNBpThEhRCZjXFUoFdmgQE+4PSaNaF0xcw863uLud71mJeMOJGiWSBxoGTbIACIbnGorP+r4bnUBhXQjNmkHIJdj53Y2o0AlaBokJLpkIuAmx3CzvEo6Dt//OP7aO62BfOmoxnz8YI/Htx5xwL8R0L+KFk7p2xDJ6vRzl34a6+lZs9OJefMGf4MuvuhR7dv7C0eQHui9tC0R/C11Zgm43szWylGKk+PNFRCZrgEbQCxUBNgMcKon0xSLhF2lNqTYQcaAuwO/jDQmOryJJZNqFboVy/3Rh+5qGJyMXXRI3gQMbEOZo9M/SIQoXUmuRa9GfXe8F3MaTSeyn23QnvRfTQ2kd3fOs2ub7WQf8X64kR3fqPiuJg1oJiryB4zs2hU6PSZ4jbt6g8feEbRxBTxgFooC+GyhGUBXGaIkSyjAo0sH7sBpPnoVeSobSk3hdNJYFBf6VMqClhOSVMhFGzCFPHUglz8RCCIrj22gyqwM5hFrCfqUAlmS2GA5T80MSiiZDFXBbm4oEGuTgPrCq1P5d7N3AJ615AGys8VSQcdEpxMTod2eiF26VOeB+1+hG3J1I5IiamUrqKI0fcXjnDH+W+PcAvvOp5fftcrVzelo3Vds/q22y3DMCXb+2Z11UXTTVe/ctfy9jgKQMsomzMQb8d3PfHjgcVPvz/w4yfqnj6Rn3fvtnOETGPDomRm4do5mmWZOWsXZpKLGhozwjnb7p2Xj7dr/Mt2TV+roq9g4VycH9beVC7J3QX7hxiLUvn1mEsSwREred1Vb/pyhMR0KkltXEFwSbqghbLRYt08PaJiUcC0ow1SC4yLW6QK5m46Pg3UnkorrG4/osgy/EgPopf1bCGNGlfarzOZ9TqTKaHX6+x6fVrQGQgxGHyiQS/BbxdvhVPD1mmTbXIHDvA2G3np2I4hm+wypKavvXBm4zmRqb7Nsej5L51vS19TNyVyTmPuwrXT43pnW+9MtzLD4XDaRBPguc0Gg7l7/ixqwMLlGiov/K/rTUYd/NImSfQKUqskCJJAhEbJYBREvXG7SeRdvGAzYrMRE4POQzD5EqMhdU75rxdOFT2Zc2479/pz116tj3s8Xq8xMFV/9VoIuHVJxiOGAWttbgzEeaK3WATB0O52R1vNiOejtxKXm1SI3LJthALjL7H1/uH2+ZghzUyWDp92h65FUYtlJTbbZBb6Pue8qAtxXRc50eeYkb4mKmBJpStHOGq8DBXsGTsq1EcnMdLXPn9+ezseiJeXYxyw0YKiqDl/5TwVRgDWpnEX0/OUqR9TnI9d9TK1eyCeqFaxk4ltOMrK3xRLsWcdWDPko6VlGTU+miYVqKVlWv4AY4AG77YYTQadwcDrlcWOzj/NaL50Vvu+mQO7p9W4PC7PhTXT35j+7KW3/GxH/sDwwzd+f/pv2yFswUZXTXhBfuXih761q/OPHUq/Y+lCA+Z5PbbZ8UtT7qz1+6Z63WtdETvSt7k9rsy0Bf/511vig43uVVPqXPXhqT9HjjufUp8/nZ1SV3fVAs9qd/zxxqt+duJrM2d0LW4zbFzhXuM2yLLBJcYfGSvzQHX6HIwGBbqbYWkc3Sv4koEiZj8WsAs/plsMNRNMdbT9RDOPRZ2YamIIeYfRuXH9utpkrn6JfsOivPrXc9pCxG+0S8n2RM2qWotkDxmjASups0yfNd0gOVH/d/bhBkut3t6e6HRY6pr4mulzlbkiQfHaVTWJ9qRkN/pJqO0cJOcXbdAvqc8la9et3+g0OogI6abX8E11Fkdnot2ur7U04H3f6UdOyQBlW+qINRA1huxS+byq2InlzqaAxg+M6oGs/82oqsiOYwJXPmNo3OBohHZGa3ZKRM1moYyybqR8qMGS/DCHPnPeeegzpkktl3Cno+jwueeqm4U1H27DZJSXNofe6lIdLdjhqPWJki581U0/dQqAzDCLz0DjcG6/wMzynclSw2ReOi34XAZ7R7tNUkwuctE9WWwWpcZpjQYHIR5vrdtgbEu3zBYEs2THnWj6p8U2e2NN2Db9kBPQ+WqUB60yCrpmXx1xGGb2SqIZZ++5iLhMimRuDDdbDS6fIE5tmRbgXc5D023hmkZ7m/hp9eVObJfMgjC7JU2mj+e/TYGzfIWgfZyGcSywBfEaRUrvq7VXF3K52R23i3eXbGhRPmNGXDHrAtT/8GvqTz6v/tcboeY3nrnsaH3Q19y09dDsxb2Lp1yP1r6kO773wMAVA5HLzuc3bZhj8d2qFv/yv664j9+Pb7pQMLq/tJ2Pkil3L1/d98BXDNHw3uOXOKdf22NgbbtgJE/+HXAkxudmnMAgCVGbMrJ2p0b+/ZGVnSgSU9UTI9zIq184JLyn/nP+/OPqL4p6/A8U/9Vzr5R4jE+weV1G1ygHx+G/frzBqclRLlqAt4uc+us/1db8q+eUt/ZP6q/LQpU4f1q9apHgsf/0Xz91LiF2j7AI3Xf6x5rIz9i7gsgYq85ROpjJsbZuKEbDBSB11Av7/+GThwdGDfQDZsvs1ZBCWVaf2rMptMerLAZ+g5qzqdgd1/aKmpINL26cXZ2kk80mZRfITJ+AbibZNLVBFnSKQ3R/0JRUzYqYV8xm5QN4DiAuj6Dc9b2jaqkQPDRkVk5zihkPFAfNCjU1ltdkSoRbS98f6qrSoHVpTEK6PTOuIOUAAlS77EIlBnPh0TgTs+GuKdTirVix191eE8Yu9fk3a4JO2SsMovDV19yOzdhh993jjSDTl9XfqTf9vCbksHsJEtH/ee7515CmZat+1+dwBmveRHNcOFxze51dNt9+zdXq60/UOhyhmp+j21Ddl80oUnMPEBvm155/Tg2W9DS50t1UPddIsQdu3P2Ue/x3WYJl08VoQkuvvK21t7W1F7Wy12PVCr+nE/ynHuE9luG/WTw8/yVtpG3flddliSW7Tv6uDV3Yq2Wjf++iUWtT6B30W7Msm4s3l8jMXE0Cr0/39qaLTyTY3nodo8VbuBSDBkpZwY+LWGBvsSA4/iyInpeZbMVSeIACDZE5QebFPOVF9KfUC9TtHb181CHap7VG6576fIs0VaklBnkXq3MIfQW9kurPq9ep+9H1JM/4pql+tDaorN8SC85Mzmj0dyRqm9y3dF634urM+l5qnzPfnxoOk+fUnzSqf2tifJvcCCfSuygjwO9MQOBSDF9poDQBCnJyqgUOXOy0MeKAGfenQ0z3E3tWs4hJ+TB2upmQe20zzg1cuqB4neBQ329b88nnPrmmjS9AR3KwwNRcqj+xbHVX7M8v6tqXtOte/HOsa/WyZwLnzrDZFlyK2tAU7EhevqGnZ8PlyeLb6slUP111/ammdYc++7c7jyDBpzjo8nMoPvX0kTv/9tlD6+iaH/nnyE5RJ+xj9I0bwNrKnlQkXmIyyxIzT06fPYwFSZ/ZjPasZ+aH6NPt0p40N+QXBvb7Dab4C2lTfV3jc22GRpNU77j9dl9To6Htuca6elP6hbjJ4N8/LlVj3e231zWOTYPz47JhF81mbBzN1uQbW3SjwVR/551+o2FMmso3vug6T3ObxvMjmVAeVT+RSrcDlMMG+141P7LMYxNLDMmSJmz5BO8WKP7Ga7cmwQo3Uji6OFEs+MP+8+Z5ej3m+Px5/jnzAoH5L3536fESFxL1ASQ+eNkxPsg4kZ84/ukZJTZkwOD2OGstHjwzZI43tPZEb3rSha6rZkY6pqeXN8/qunOKM7d0ac30Yj6Xq2ZC9qcvO9I9XeNAzpmhsdL0iuyz+sjCrHNZdy60d9fsziNc1fhkYee4FqjCpKzhMpgxEqm9LXrqYSf7+hlsHxSjcYv0wpCRwN1oHI3CUPgepN1kaHh8MqjhBFSeze0XGdozEAiEZnbG6zAR8Py4xYMUu8upm3cejFixkFjcn0J9GneSv3DVipdeRJs0SqYvrQ7N+PSLu+9+BqEuEuSPXfbgkU3oOteTN0V7Whvi5tBM7LHUOj1uAwqk+/I470k0BQkR8dKcC7DuYNTdNat5eXq6Y1Ey1V9hT3oC5y7L5aKl0S3CYM2Y8/ABof8Sl3N695HLLj3SOXvX3lCue5kzu5DAIMqKvq/afn4JtvjySFBzBy2ogd2zSrJ2eygz87faF+TYf3a8MWa3WHXytQglqiCjfX+PMRlcboZRlcm6o2OmOnUGNGCAhjyd9uLE037pKHCs0T4P2FkNk5MB7sqPAKEVcOaqxyfFdVL+NtX1YhfpjIdC/1t4DYhwUmbEYFqm+KQLVhz14YrlBtibRHZnwu4qqUpnyeArk6Cq0sSkFFIuV2TTrhcmmvSW6aNzni9RyaW5zsykc51ZeP3t4+aarZ8Zc3AOIHF+CXB1/CRgG9KglnSxoS3O1kDVL304qJYAeyydUc8wI6bTmM2U1Pck0VGPELXQT0PG6ThSeWLVcFxR1lLb+4fX2u1r0WZwguM4ep9qVU6k9XhcU/aj6SGpehhygeP4h+tBsrZxKfrxJKpPCI2q6F2yJroSWZSt1toTBFa21hjVwLDE90tNRZvXIvP4pm3MsNaXGuMdbSikVifVdSy1K6bpOSKtKT2oopnKPm4QHqvzeEbPK5Uhy/hWXcJaa5+kL8WztauVDVdFwFJTxnS4EWvWGDsiVBdzgp7b2aic2a6LR2d5AhjgRj5Ml8yIfoE943QHLEhKaKYG4YyPUhZFDxKjMYeUioqxMrFLKd8orGZIDJSSlInGkixKArrI6aInBI0SYbezYCvNDv8l+qOpu1GaXuWFXEx2Ho5dVybmYilEd9SCaA0NtMgMLZBhgC5qkE50SZTupMRXlLEqqRiLpBXizrrcUXqxDvRajB7rlKeSdUkZhqHQdrmysKVIbniLJYYLAg81lsh4LNmMZgg64YeKWGwo4dI4McxmHiXhoaisFkeJXFc2kxZjgPJRBjDLS0dJdDbQi8xuEmX8Lir3SOnjbsRCkYsJGoRc0K5sKpp1ZVnlsOvRdnYjQL5Sacig3XTGEtkGwNczNCvUxl6ZFJuQTIgG0DGi7yjJMBHyWKZkO1GyEDdlwjHrkFFIYOGpC1riZxgftasIf+O1QMhsbBWxICDRZok2yNhNiIdgkxGJegs2GESErRgRIog6CRERDldiJFabQdQTSUBWB9Gl4C0hs48nXiJIEkaiwBOjwkt6tyiEa4KiKJkIJnpkkkjIKph5vUERLERv0gvEZNUZkGzTIb2g0xGfQamVakUBGQ1mbBGx2QA1CoKOSAED75EFnkeEt5CWNlEUbLhBJ1hECTokYd5q0dnEg+dJAo+JQS+iZgUTM7IhIknQOkxkszkILbebeN6kw26ECCI1BGFexF4rxUqwDnIRg8WBRZtO7xIFEWOzyUGEWp3BJAtWnxRWsGCUsOAVIKFDZ6m3CwRjXo9FhBxYcAnEDOOEkV7ERpMiIXpt3iCZFXohb+IxbTwMI5KaRaskYMFDagQCPRMM2KiTdIj+s0oGA7LIvFOUeATDrZcEQdCbJFGoJxImvAvLhNjNBhsx6YmMrS75+In7iELsIpL0NoINvFGU6FRh5LQKJr1RFDAsJoFY9RbejGHusIJ5Iim1mLfZ0BlKPup3kYwMJiTpRFGnYBcCsHAhmxlACsPQ6z1EMFJLroLBgBGCccVIEHnE20Rer8OCnhf1ChEtgiSbdTZe5xQxT8dIcFlrBJ3ebNYLyGIloptOrNXEWwUPjKWBKijYoQI9jJAb4K4GWXUWZLLCmEl6CQINPIJ55R28UMPrCeKxpIMBheG2eqEJemSRBJueJ6JoEokFRnLJ3RJCNuiCEflkHubMAtOIAjEemaYSEtchbNSLQkgUfXrYzGge7Giq4QUnT6A2yWlzYbHWYdCFRcksGjAMOg99beAVHTLbjUS0i7yg82BSZw0iPcCNZOd1HqLHAMUAAYAr2MwmaIFCrDpCMK9rshmCsg1bCaI2QAEaiV40mpEs1NoJTwB8iWAxxMElGyWdXq8jdkWPBB2v2PRQk5HYsMmg00mSiGFUBR0y8tgMPYCVhrBBFIZvDX8S6gFkwURbq4NpppBGoAJYVlgUAIprRFi5RqwnvA06QwwJc71cY3XxUq2OaRg4R5zizYxuclJtwjKWry9ptVIZUD+AORM74Gwc+5aDQxKcbu1zDhpqhT9bXEn1PDdHo/hY7EH8urv1rbs0hZqO3VNsNvXX3xTuv0FvlUt3Db+H5JHLqSYoPrbhQXQgNmvvZzTGUtBvbDAeG9pC1s5zcNXftNR0IWrhdJ0B1EswHUTl31m+hTrez3MU9VfzPDcMLiqRhz+SNUVm5h7+hnNl1hc1IfGHyTyU/n5vJC8cEDgm6+mSKqbiqNIu+9ZSQrhBrlcVZiFuhFNUhX5ESeCa+F821qlK0cuMw3GKF/0BvVPXGBu1JclmjsoutrLvfVSNQdBZttsUcgaZHf/xV5SYWuDn+NK3SehVNv24+MAIlP0Bt74XDWhsPDTQu17g8kVODWgslUHatUEYAqq8ke9drxnVXl8tuzmP2jahrALn6Jd19OwEKjOfMlSxRip/BEizO2WFoJg2HjQjixWI+gi66F7odPmDO/eqj6iP3EsHqPQxnXvRRRCgeE2mOL2jYmnQRZCJfYmq4I0yK1rkdxPn88fG5aJGtGgumoLVzVLQugVFk03kmJ1wmZvGTedmcsu5tYxTTgkUm8ZNyFLD1BN/BbrEoSt/DZqZX2AyP0wIF/LiUgq89IlL9y7beqPYt3PGrF6BH/vZaEPvkr137F3Sayh9NnpYs21HVpYkTElw67K9lz6xVOidNWNnn3ijJkCI88INSxejC5ua3ZG6O4uWST4xLSSYfJ5aX/rSdPGxxUtvELbfWRdxNzehzSxSwydtI/eKW4V3uSA3i7usZHEESGE/z8g2IMVGjaNkUNl4SjksWxaxIe4Mp2mza/tMrKRHX1LAonwWN3MJz/he9cWb/CRgVKT2uLXGa6onQd+J2sa475CvONN3wheP1R3y+V6tbRyfiuw+99DyndcvP7F89eqVu3aueHXFOD/KxaH0AKk3eWus8XZJMYK7Ke77Ua33oA//CRy+2oO+GCSqrR+bqPjGu8sPLj/3R8t33rBy9Wooeay3ZCcyz+xjcxpccNTICTVLSD8opV1zSn4k5d947HQBtsu7t2E05eSjCM2YO7D5cOMtT6P8Y2/AHrrn1xmf9SSa8szd3Yc39/X4fwz0xlJYc61MRz1IraYzqMtq0vEliZVmegwEUSwth2Sn8I/2OZtP5zfPaUf/yJXNU0W9OfVt9V38H+q7jvzq83bvPo/UoHtKgl1Xz1aXoy/UR9A96tUR1pWR90fyEmE86MXcOm4zt5Pbyx0YtZkvIMZjZHscQ84tpaXOcPYkE25lco4N7Bss7LqXYdtU0LY06ZTBmGGmrBk5kUyQbmZ2B8qiPmqxBAphVtCRBLliyCkxY/jgztJaicY8Q5ej0z4i+PNmm2wpLr5SxwNOvGH5nvvuWLnGKG1Ytufg8tl6865dZv3s5Qf3LNsgCY3N5+67b8/yDRKk1F2Jv2yRbea8XyC+0+taEkvXXbwwpr1aliZaYgsvXqe9kGUgaDnHSywC4Ek/H8BDsGMO6gHns/BeMpAv/vNL2Ii1Q9KrXuMIh2w5QPlu6+XRtLZFd6VXLF5xQ//d6RX1Zv2CBXpz/Yr03f0zLo+dsyJ196K2aYjvRbfppJwtFHbsb9qTnBGmj+KM5J6mMHvgwQ5j2KFr9RIboEXoPwM4l1OXXj2gwzxv471qIYeO7Ce8dhejnRv1XAMX4ZL0ywxj7mJKJ2RZ48MpZ5ISCupRUKGHSOkTl6lMxSMOlm+FikP0iwqIflKB6ubP7syrP0PNRfb8DupUmXY/5uLkF5qTr6jlo0Dp2w2QGcpQvx7/mfoz/Dn1Z+qnUSfVy6FffUBcfGD4n3xe87G7LH5kj3CjcCOzpOwoW6bQrF+UhNxLmg+IMZtSVX7nuPTCjY9uv/3i4X9c/fpjj16Lzzd02cyG4hPnXLL5YD/R9SzLregpPu9tqIvWoIcM3TaTQb2k55plq7vwnIsf3P7oxUR37ace+83VxScMJluXAV+w6PDmy/qH/9GzIresB8/xROsCteolENdtQA91rV52DRS2YYyMHNVznqN9I4PJxbHvr4zqxsvJMstrvB7neL01N8XS6Ad1OJLPOwzqHw1tVu1WLg/DTWC41XyVdm2+8m1PNvweX5x93CdvmWZANQZHWTn+NKdZW8Bc1Q2PMsxiBfbVT/VPvoGz27KrvrrmB8ZePWt3dOxuS7MZ/LGtY4+1lTeZu8oC9h8mcrIzviBRWwbaHVuMy1KMpqwFZi/fHI6rnZsk/EzLzOzuUPsT3q2+bTuVnyCw2v0qy4bu1Yz0DlaMEZPfjQ9Bf6+yVEyH1UrXvfAPzg8rvh927cu5G2E7YKsgq60OKdaNs+kGMcQ+BAXnkeIMMqardmcS62YXxJSZm0yfacw7mE6mKLYpSrFsUj7rINx0xdLNvdOnTa9rvsyrmxZWbDNtm9GiC5KdWD0stvb2ttbVtITO9VzQseDi2cvmoN3Cn7VxsFu0gVK/tAVhXdO8OzYLb1fHVI/WiiXreldPrfPldO2GWY12hNNHVl9rWohzj4XtyRWp5inumtqOGcnpy+cllrdkazrVb2pjZrEr5LqLLmp8Im6SI/271cvVmyoR48aVVOkQpbmNbC8dIyQY0RRMMpphVe0jDFQhhR1slcsBEixZnC3fyGlKIRRvTmc1SSB3yV4ala4SmbLvB0waEH3b527b+wnEJ7b3XmUwWgTTCksivXrXNbNn9fb+bM6mjsjb6GGp0d0Wmb9kwZIbrll6YLpVR+nGS6x+qxCa2tw9Y0Gub9HU1qUNOD/67bpcaOqFa5/N71ZM4eiSGzrttUBTPtC+dkbH6gWzZnU7WnyeES6Wvmpjdlqopc3udMdtJp3FfHmbPxqZghsWRnXTI2Gnq9bb2TV7xYK6Kr7oRfTWSYm2asZkWZ8SWcntFLUBcTndSlVvtR63aENmRQBablfWXRksmt6luEZHLqZ9902GQRpvG7AtoiPm2s7UnoaVy7b52/0Id+Y6FTNCFnFqqGv1eZtWtTe3yWHZKVmB5lYami+24BWv9O8EWn9qbIFoJTqL6LR6owv7tlxx8DPbd3R2uWxyjbDSbhn9DLkQxHg14iUCNL4lp9fXWK4zx8Q31T/duHhGsNVnD4Z97R0LPnXOhkMrZ8xyhhAmKw3EjKNmyWNCRtHqleJGRb3921f0t8zsmB4ItrT29e9Y8gha9EJN+NSt5bmxc5yhIscx3i7/PdxjmtWF6r7L4/zof9g/vr7x39ik3/mu+sR7lXtsjMpNHvfRU1a7KbnL5BEEKm5WsQuI7q441VEnsUwUetYEVYWhxdVf6KT7cO3IwyWbDgrTOWymVjKA8EVhJjfdWrEFGnHTnaIHoUne/FEU2aL+GjfZT52yZ+wv2e2CSN+nfrBhg98PP3Tjd77T2Qk/8ptSSPHRkoM8z/L+LEPzQtYMzWt/6T4W6d+gDrN8nd8pri+FYH/JwXgP2vc/Kf5v4zzcoqpbdmpPmZJ4FdUW2WHhoyFNKII9AQHTCD9AZLoJNarETEwkRxWm1R+i/KNm/bf1giYij/p1iiVoihFKlFJKNkdipqBF0QHhjni9Yn5J6akdjHp5oGQ0mXoMyCLkNxe/yLx8YZizui16ghCVl6A/hIje4rZSu6C6jKu1tgEK8RY0JfxRHGZhxZYB3YgoaU/VdJihH0J1aLVLiNJXJDWUkn6DLl3SH3UT0U1tHtDbHZHexP34qi0zFP1Ux+au61/ctOO3d1/2td1rm5cs8uuwCYty8v8y9x7wcRR3//DO7O7t9bJ7/aTrRfVk6XR36jpLcpGrJPcmC1dZNlhumGZz2KbYdAOmY0EgQMCBUAIk5sklgYTQIRAggSASwgOEluQhgKVbvTOzd6dTsU2e9/3/P+/H1u1sn5md8ptf+X5fu//G+w9ubpyllQcssaqmxba1BuZlMYvA2Un0tO5VM7w/CdUe/OrI9uf21vXsuaS19w632s1NkVmMjctvfOfu/T/6Ykmjb9cyV1XL9kXtlWL39M0rwAWfvCZZgUbLNidP7s+WjpfItTKFI4PvKQvnGxODmy5dZFGUmTY1PP636ef/tK/38T3LS+fP1ZgYJSszVL1y7w33XtrXgAtnjlY2LrKusRqeyI/TPW+p96FQDQj9ZeHt57bX9px/ccuG29ysUltmsAhNS4+8eddF9322pMG7a4mrcuq2BTMrxTXrbskF87J5WG0BagEZC6lMzCv20MQLTI4m+0DSOqAe5PFm/PqxwsYieflLHrioHmhJ8AmBSNQXRSKRKWKKjBdo6cZdncXzZ5ZVdS4oNapgidKvsSkUs1rqox2+REO009e3VPxm0U0bL+o2mzRFD3VV1AYa5s0NNpzb11JUV1fkKitzlVeBs5PJBPoPkmMcO5vmtAvBtrJwm08HgYsr1DnNLmhomL9oS3Xj4uX9LycSB5asOp8utJVVqSOFSyOl08qcaldj79TKzurS8rLiYLg93DA/IibwswfgOGGbodyovuahcWgKWnf0IGmQwgAZeF5lSJQiVlDEAhKOkeTVQYjvOJ/EqRaqkiZmSEimcbUJUrVhPgDSgJwQRExYlPRFI9EIfD+xYnliykzx06MH/lYbWDZrPzC4Xaaw+foXZjbP/X0/uOvQ/llzKqdNrzwc7LBHvc19iZJOW4WxtHFZrG7zirhWFzLW6ltpvTvau3VBbPq2PfTmN9/c9MYbm+CH/mmtHcl5yxect2NBT8OMzkPhLr4kUeyvZH55fdctsZbE0uYrls/cMaM+0eRx1G6ou2RPV8hTvz68cWNX9fCN9uruJtsUf4UlrJ4CodZfs6p++ub6QnrLlj/9acs7GT0rxoJQUwVUGVktE3pUzhLDAU1+JA6jJoZaGGpRwCCNcjhEyOSpnjDr4Sj95Pbr55ZosO61ZO7eI3vnlkgbWNJ3ZCiJxyYmeeTToP07opXhMHBxsgekDnYEjOLgR1dcc8G8eRdcI23EEkjhG0TySydGeYmCGUwDBq0BKU02IofgJqBsMJQgJjAqaEIgpEz0cpIWQEqozuJJoKU1RSekeyU+cSnQAAOdDBNsgxTGNkgB4k8iSEEB0r0JKgkxEoEmx96bgVDA2o/RFzGJ/OcIWc7mJEwweXmWAAstACZInqV34VCfbOaDmfeOjeMppKiIh/iQBjDn5ET5A/WHdFJgz0wnYY9Ez52TCZjk0IBGcDM9Q0mBeSmf7wTLsClGwrhzjK9Vflw9ja3j4Lhq+2NeTUxSh+Q96HWn/XZjHpS5l6YyeTzNt6PHvzcbH0lRdox6MjrYmS2MxQnrIfEPCMQwRBnFaZlSSAIb/KFwdgLnKMmYUFYL+i6tnXF2BIDI2TNqfwRm1pauaRcvW6mcWtoYsyARJtZYOlW5QvyRt+msBXPZ1NTVdN3wRyQKwF4Z/PfakorKyoqS8/8cAovnXxMRhxJcRaGf5/2FFVzic2vJdc3zervJN38YjflbSIxhaQZHwyy5NGOvS2L1CEojlMHD6yuAx+Qj4ZxglfhTsBpsXAi71m384TrmavGJzsXNi0wq8Qm0NALt0FgyY2PzA6/SVw976PdBVfuaNe2zzjhj+L30c5DftHtaxBlJvwWuBl9NmXKNe0qN669jcfyridyAR1J/KIhhBiJYM4knlsyIOc4UgoEEGbOMOu9l8cPbHhSfP5MD8oNKnZ5rf2N379OHOjsPPd275rHpB/OsF/s2A+G620DBy3SB+Jz44cvnXXtAaZMfUkDl6l50+avorhkth/KsGxet33reyyiPRSMm2d/ZtzG2lWcMOC4OhHXKcGAxmznWxJCwa9aSaUJhGUYoYDP6NS1DQlvYEMbYzWLO/j2wmXD73hAsHaH2aou00MToGTldQDtUdt6uKSoQewsUCrPKSTuDSr1BaZAZoVYLVk52Kbhpkkv3AqoUa/I2B6KBLYEAwNbDUoDepYVGGbpIrwyiG1RmhYJoEzXoUSoHeqgcPdwE0WvQuyZeinI1yaV7R6hSVJbQKFaI5HeNGWKx9Wf2aAx3TuAVYmGAo+WJTwzmK/aPuyLrNQj0nGQbM2TZ5UGSMC0DlbT5Zr3MURXm1jd0640dtxwy6svgGnIm/QLZwMx1l18p+E5c4hOuxKhZYAuY89VVgJyZDTMUzEfBXnu51mEX97FzG+YeKuqY27BdK13xAtnskq5LiUN/Lix8D8h+ih9y1VfiY9lxQeK5MuP5j0LCLJKaMPQ9F5NQ7/0xfZAZBf3CAsRY1C8CRj1H7BVvf+3qfUsc1vBN55fWTmt8Eax97TXQmYcFxuqsE8DAvgK3gY/BbUzy8s8O9r8wq6pnRWfzlqBMfvlngP/st6MAYSbDJPhgPwahBzL4YBImgxGNbevyS5ErQ3UQf4VToDWAU+M0IBGZXia+LP779r6eM3zegrLovNk3A+Xtt6fvwPgMx0+D4sDWfS/0hquYZO8jG7puqqlZaBRcSm3vIy8+8vHBz04D6TD07enRHM4/5zUKjAyPUPSlaAzzSLZqyUgTF1jJgJMJGkCjBB3AATe7eFX6Q00hozQYmGfFPkbOa3j2d4xVD2YKdvYBcIWcEejnjdah822QLdDTReuBSmela7W8zSBXipVr4Cjec5JEWY3FHvSYIuMJmCc9RozbvrEkHaXA5MmgFXJUTZEU1tgjUkRrPenenGoo7ZPgx6IeiBECi2ryQyJTqezVk+xVz0ll78VHU3OqUzWjskkKrfjnU8syclE2MAAj9BhiVZImFi8tZVlzGfa4A+N2yWQmYSDEKDxrYLMZMAW9HHkcnbzp1ZuC1cF56+Z5mmiPoFGpK5fWtZ1TypkYlYFXMSaudPdlu8kubyC757TVLa1UqzQCKKdGwKL/ugJoBu/xgDRVUlaC3aOfSR/vvemmXizCVM2bVwXbVEGNoAyHZzUo/TKDQeZXNszKT4fDSkHDwieA4bKO6/56CMLX10C4BgulTM72JKesSIKKo2WbR7I3eSYolDy5ePHGseQrxMJBI8kW2ybEJGaBTBONL0yhMlCgVHwTUqMGqZoiBqVMOjwXJLG5AwwAdw6TNn0mun5RmnzzAcmUgc1PGh2aD3pyciXhltNTRdRKsqYkIeySfRUHamaiP4wSG3ckJhE2G7EXYA6DA6+eSRAZ+XLZP+xzHyVLBwgHBbuwpRrnq2rt7IFpWy89dOnWaW3KYmVS86EmibZtyY3l9Q1Mhc1WrmkOGzu6O4zhZk25zVbBNNSXb1x27RP/9cS1y2iinQ5Xoae551TPvGB+efn8C2aun68qU9187bU3o8389bduq5yzo6ogFnA4AtWFFmu4qqy6uqwqbLUUVuNjsYKqHXMqt9269oFtU6due4CM/xLGrZ3E6hBV/qj9TOKrJC4l+jz8y+BoULwEm6Y5MSBo1GrxlwoFSBBKyh5MukjQLE8MEDThHgmtEvSgUqD/SnQdZnZMYCRKAXqyoJRE/Z6DnsxiEaJvZCMo3hlyDslKlrX3YSJC9hS2d5bitYPkwYOY9LIHk16uVsKsRf6Ks7FF/jZA189Y3XekeN+9sEfLgx5iCxsgTJsDqFir1W8QO/2+d+NOzRug7MfXNB3pm9Pkem1iHkPEuVvCwsj5Kkcy6BMnzSN+DaqFO5V5mT1FHge0uCToerVay4ukjkGPIH5+kkxS+TzsHLWU6hm1erE5fxY6jnopUZxIAAg4CtQdRw0A994salqIDEdj9oOhauyn6mRyzi+SOZwJSq4tqkBdb5u5bnr/QP+MWtsBMP2Are+Iu6ajxj2ndw7ZTqsHgFHK23rrAioxlXF1+SMx8+8599Chc9v2HtmxQlfd9oJxXWNHf39H4zrjC02u3l5XU+JI37LCEty5SwqXYWyO0b223V7lVFd1iaBbsePIXvrtjNNLLr5dqou5o5JeHC1/DEbG7cfEKBkqU2IaIz0CfUt3TIpXIHoz6evhcGWTdIZIElW50I4ZtRJM9d3vBu0ypaHBh0MDPK7jQH7c5cFpX4NBKbMH370bH6qdgWqHlhwzEk1rTOKuox98cPSA8e1rCHyH04+kOF48i2g4D/Nox++EmIfsmreNB8jBy01rmlDVZDhFJdszXs0GJP8xdhSGHa2dIjl3sQxWeyTrNSYOEPRIZmCYSkpuYpA6sDKBDjJJDE53YCWN0kNI3pK8wwaHUysPsNQBVKejsXSRcZF03z96jk58z4C57xUgJ9nwEhnZ3ku+NCks8EiNHjXY0nG8rrJkf0ci0fHdVxx1pG+I6jvCJT44mjiwEqNqYiXMUXrKQL+YTKfQ+xkFalNuXF9wELOAjWKul1MtkjTA5SJxpSZFmoxZwnkZm2ZzV/ry+V1n1BKCgdoZ+VAOONKHIsfRMHH8AHZHZFPpJOoWw1/jTkCrUEeBEgxtD3FYHBif/o5wc0A0etPuA8cl27gU4yOg2UDC2l1AmBNM4x0ROIMHc6+CzAxvAGOgbIJRdpyldLzllD2OfUEy3gnJop6CA+AcpVr8rRqsJS4gFAY3zsLbaHk4mE3lH+W1zIGCnqKhJH6KjHgqtImXFapBrfoEz1BYHDhB0T1Zw5p2YNQCOkKNpnHEeQ4nf6K97SHqF9Qr1PvUl0iC0gEXKAeNE/mxo+P22XH7gUn4sE91PvD/s/tPd/348mLkcUPWI3UC7hPmr86JaaO44NRoeiQvTZ/k+Mj/xevhSY6PzTPGacVlIyBcVD7L/GCupP+aWPC8Y+l/TXLwX/8HLxT/dcqcnbgOg5sOSgJcnss01kCeos88Qf2J+vr/fi/537TSnO9KXnu1gSyvgS861iOrEURME3H0I57cCub/SOv+vq1vBK+E0TiI01IrJKfy8pPMPC/bNkECjZKYbyfx/1kbPU2LGr6OSbrxgO0eSpJ2RaekjPb05JzPpHT5aPcB5A5xMIiEjkSOLx3bpxuotWMt1AQqNivOCeTz5VgqfFmqClPua1ZlYLDGGLGDxIIdk+zXuWmYqN3EF0DyDq381xxkKXLgBSStE3cACaM/m8ScmKmsTZv0G7vwGyFhH5CsOBkVHlrhQu7XamX6GNmn3ROeg5MwjM0/Wes29nsdsCfQ04hPfzCLwSHh44eoStQX26VI09MW/XtJhWT1NEkR05K0mCTSD5MaSg2MSotudBAMTF6aL04pRGZxTAj+PLZUyDSA80kieCkdjRh8nC+ErY7RUDSOrbfReMSCjkbroeQPDSIWlrGYuSQQPxAHBhPin6bh6u8ZSCQGUj1udzKVSrrdPSm8T4ShaSCQwAwXrB3AhBv9Q+swrcINBgbdKbfcmrTK0XYQDLgVeCWYcNf5aCznJTI+OjLUCol1Aou5Jk80TuozFPfEPUhMwrjes6MMmhiSyaMfJNxg0E2n3AkckzJCRWeLiVQq9cFRgA25Kffw4BhuVsywMkrLOs43VIJRIViLE1CIiK+jSI3y48IsQ2u+FTol2a4w1UbWhoUHBBF7StA/G+e/OS5f34czdrJ8iSkpbynpXVKuEuNzJpHGJqTcjb0B1o3NGERy9lz6X0wESXHFeEU7nnOXUwBmsoNwh7JKaVeKYaUSvI4SVUqluBscBIcmPXyMpMgR9CNdslvcrZz8sMTfhvL1+2y+qFH/n1HuXmayg3ABfrn03IPoDeSh4HWUr8kOw7lSXsneQXAwk+OwcvLDOF9zqSuZCLNgTH2N5aHgJzvIRE5X6jGHP5+QVfx+cPakhykpX8dQvnbk19c4Lgt+soMoXyct7iSH4bGJHxddgTM2yWE8FqH2BXeQ74hzpQDjaZ1RQ8pcPabd0J9PXllkfENtAy7IPfN7N4KTfW3yzLlAw0ToBdIz/4MPCM482TfBzyxHz9wxms/vWfl0+UmqM2OHluTGCgmbNR/NSLLlG525FXl1E4jmjSFY1fgdERFkCWLbTw+63RIZu9udJlBSMhzw5qaJTDFM/KfnYje9QGejBo8h2oaO4KjLXp4PiI5E9eOxbaylwQfysO9wXrEImJEZI2xVNRoBjREwkHMEbBkaEDQMef1QCitCByR4qwG6X68f0OsBJSGVSki7dM+oglsYXkCU1T1olsr5zDOSrGNBM3tOzglMWmv5KgMJC+OHmRrQ0FJljWLxbSAKhEFJozyMc0C/NMaZkZEyQPQmFslj/2Rvh6QK6sF4qgTwKgGOokaQVEeRMqLfFK6CATBlTrVISdqH6jmrJXwpUgWSvp+e63a7h8kFDP7Nn39UKD8UlWHEbQKScTLHJn19jvz28OEJ9LfMQB457tOT4WFk5nQPYRkaLU8TrAdZQuUc3Vk+rdDkF9BUf4eY7OjHJn4ymyX6jtQUDXb008mTnIAJfLi/A6awawCZ+o70IeFXunyS49Sk+dbCvGUOkvXIPJ1Ph3TqC2hqQsb6O0AS5/skJ5hUOjE+x4Dk+CTHKYJnmxhJEH2hgjIQ9Djc/+oz8RiSY1pVLqoyG4FhlNSvozEZk18heTZC7exo9ZzZfbBRMq5fTjZMmlAS9M0ebug+0N19gPkqY3qXgN/2HViJ2SVXHvh132x8ofjfkrQuGdLTV+EHzp5N/wPf2p3+gXRSCtsQt0t3HhjrM6KSfE2zrVQ2Hrkl4/+Z1xjH8OQCI41hJzJAqtg1jy0d639lMkTcAhodL6R1ak6t1xlY1te0ZtvNt67B5LgiJeA1JOrw8Hd3RcHAD8W/cl67wmDUKXyytvj6gV2LYi41jmsml+EfjCQrnnlJDs+WIv2uklqKZwIt8IZBNWHzy0tbJPQtb0jyIXXSmBaNFoyclvF5w0woaxmT9OZYrU6UvzBpa1zYaMM/8OZc8qlDZxffMuPBGTeVnn0osebwJV33dV1yeE1isDF46XW/PLJyXvLeQ5f1eZouc0S23L35uruuP7Dp7s0Rx2Wgt2NhW9vCsT8XnHOfSaUy3XfO0v2zy7Xa8tn7gfyVC+b2N/gUMqG4ad3U81/9/GjX0p0b5i/0ubvmbdi5pHNgbL+y4K+QGfdwrznl6CuxMqGleDoxan7G5LQTiJoGITmXyEEvwo/HMzdJfJm7WMyXGcJRZKBaAvtDNUyAg0Es4ImOzxhauLKjDE/5+SIWc4tZ9nV0KFW0wi7+kY8yiaKVNhDkhy6nqSzGI840oMquYWvD4julh1uHUrl8o5VdKrbcrIOrfKUu8Qar3lfmApvNjw2MFuUBUB+d9oOmOvGG6LTRwqwcqAy7qTH+vEaqgPJT1YTNiJhQgwSSxYnGpHgTcILx4IeUPgzdWqh3QjTy8/lk6GcFnhefD8itdluF3HbpfZfa5FOqrKJS8qWZLfnSzN7wwOfi8OcPbEBbwHz+wEfjCd1fOvf6689FD0CP6Vi7tsNu1VeAV/qku0nXF/FtG0Yfg4brcf128rKZCdyhZO/HHhe4u/wHZZNbq6ZkSlVhs1vluKxi/D8rW8RWoc8WS44eg4oKFf/bsqlIfEMptvJn/RBxE/v+RUoG7Wmy3oRJuxj8z0oiGQXB4/9R5jNyHtpIs0zr99OQMOP8u/x6yucN+WQSTIanik7w2hSvTWp5KSokm4SJTGEyG/GNN1KH3z2cekN8A5S9QSffAKkJ9+DkRlKcjIfXG+JS8Y1kEpSB+wBmS9fl9CJ4LPYhmQzPldgffjO1m9pPNK8/oB4lVnxUJjQcoHLE89KhvDS6Bn03lEalCJz8mtMeP1mazU8bcuko3hcIC9p4m4C+R4/+J/WDevQ/s8dQ+mEkMNI9+nTuPNmAyXezW5HK7I9u0WP78Q3foWl1dvQ7gjGKkUZBP7niq7zf9FcTDomT7GQ2QNpk/osD5Do9jtEdTuI//CIa/1IZvFFJV2emSqjFWFrL+gZxBsJJQvATwDizYcY6mI0gxI6mTA5hI07cXrNRdWhwT95/sKt53X3dxz76+nj8jLXxeEFZ7TlDZ/oKib2r0IfaFpvyKbk/3rh0ekFien/dBvHr1Tper3e7fEuuvLu9/1f9wch5x80Kl8sF/g57V7gr4xem79+mC9gcWjO9zVdnGNIS+9s/DXXYqL0rzYZ4ltnp03qcBUvrFHIhAD/yGU2ljcGmuNCvZvW8EcdHZcvOohZcQlVR06ntuB/KOFNMIL8oHYqioVKBqsNECmUxoXKhk6isJvP/q2qhE4+/8NKjD77xFv3J328wCmyNpkoI28t8ZWaLXdjw+GbBWFJ5zrH7D5Z7rh968H9VV9Ca0q9/qgc8/Kz87Ke3ijVP7iwflCnoApmVE2QqhqH/XBdVyI4bIPf0CvkzJeCL/11FYt0SkkuI/sAvsX6O0x+YjeNjdGH7ZAoFJVPOa4eJIZTGo1bx5FoUsTwvOhG34fKRq7kFzD/I+2szXKZj1WtmowLN6JiMDYMNYFjtSbMJN02mbVPCaeLljEXdpNEwYJeUgFdOWoCDk2uiGM+Jr9HNBsaiYVVSIt07eeFGfeNfpEwYdwiYshA+uEAY25OA+hm1dAbogsfueuMuMqE3IFGWoPxI4nZhcUjcIQgyjbc0WiCTG2W0DZbekHjzzrHXgFuP3w9+Mx0j0GRkb+wIPk3cjiMB5tbduGdPjdoA5HZwzT0z5muGxl0nnij45TEiq458N3JMdik7SCmpIlSGclT3tMHC0iEFEAjObYDwK2F2pRgmV0ISuMA6AXMXAOJtLc6j9aCpQQ2+Fm9YzJotBovYLDajjZldLF7v5svBvz8wFhaYPgD/Ludh64lqZQNoGW503QfWtoCoeIeo9gTUn32mDngwL5M7zmFapmKxtp2LE4zi9EiS3U98jKlRUH+PF4PiAQkfhD03nTQUsUqzI50y+5S8kaU0egev45gfDFE+yPrMMOEoK1LCJCdoi7N4pFg2h2g0qSEMAgrgkSyAOTOfJ+NLIS10R8mu46j1YT0ecXophwvSSfR3jElmTRXDA2MsF/SCf6P2olB8Qww76NI/or+ePOsG3ZNn4fhGoUBX/3v4GE9l+EAYCbMYM1HOHtWj8ON8xrHvkcRHUwiIAkyKzMqOcyY89iGxmI1mDgDsN5X9D58km5uqy+Bg26XJBWXVaDVaXZbZxNbFp84pCRnIrpXcwjxJNjPJb0/1Mpv4wYXB0qKmaXbbsmq8cEeH6OrRtKizuwy2QEnD/MzBLB8N1uVpKTsVpKZSq6hN1C4kiWS+ckb1aDZaJKdY4uQSzBMY2VyQQggjkKFRAXv/xzGxC+ByiEIWwAWJN2JzJhKByXsEyHs0izWUuZeCJ0YopUatUigAhT/fgMTrNJgXMcxCCShIfMRk+hIYHF2O6woKxC94nwl0LEzf+KX4ZQZ0CPDomPhwBlcIzDPBq/Iek/6n9Ghw4wilsuZeCBQjFGkLgGwieUHLg+T6gXMwmBCYb/Lx4hcOIEEQAeFLE3rVYtjNAz4DSyR+8ZUJZWnx2eQG8SemTRJFFZX3yHvGvExav3ajjjJMdJsNkm/nGOs3HtG0+UeJs3sGQpvMpyDOe7ADa8qKJBor+QENrtCMslBxHO3pTPvm1Vetapxa6pup4dWauzWsfABM6bhrXxewZm+wwpmx7voGh9my0GZwBYTyBdf5HHUVJYlC23K9fI/SqQHKpt4bs+ttiPu0E/N25SOESJTA2cnMhPstPX6GS0p64KA9kcjSbqNEUuLEkQDbcvAgIJkxjqVTQWYDMS5JAcKQOgP9uHLcJ+NeItDSmjpEBzOx7vmPdxaAEN4NgQIQwNbZAHAP4pP4h5GlyYU0AY7DoxbFiuxmyov1XQGTD6Mg+DC0kicaEWhf1EOAISKxZugx+WgBmDzEoZjJfqGQxKRDYnUiUfqib49a5TStUOpuFcXks08dBMbLoQkdoeW2KwDY8+SL8NO0SDPV85bPq64vjoS15k32wIJNZ11WOXvpnDj98b33Dpco1Caj9cS9wAf0933IBBVqhbrkw/vEr8W34b0vOwr4RF9rc7jJE6wMqRwrA4VTd6+t6a6vK23wdEjtjcX+Y/Q+VKbp36dM7MnLRH/PMn2WFhl6bJk6tpx12bS162YxpynSOy87ysHEErVsaq1rC3WQOXUYrbcOsBIOHxXAfutmrHohLSBI5i6sLU2CjjQlPiz7WqeyDSeDdWkq2KxHaRqlaZQm+INM1Du7YJgqK/aiLYO2ko7vXTJ+9ubimX3YXZIzeTktlFCxczHZmEwoEytQAbwhb9SAsUOwcItDdbOB3ISOCZPTmLDGEGOQSKRDaFGwbH5xe3lb4Cw3MKu8F/aGGxf6in1bOhee7Qw4w4GO1UcUAYUGQAhdAfrI6o5AGB0/e1HHFnTVwsbExxWAZYHVV1Zurq3sKO1aAX7aiU9dELopxCJRQxmtDbSVtxfPX7aiq7SjstZcXuazQgZCABhq3K2ZnNRGnePelpHFmCThyouQ/kdxphwTO3E6D1K4NxJtO+XOpPEs4CazgNvMJMV33iHwjBkdA6DeEd/BKgMCPokSI9Rx8dvj2OeWTiTfE5+yHpAcKg9YwYz3pCFCwrUk6EEbROrA8eMHIP7FHrVIltlBfFxb8WyOHpjLjgJInvMcqvS8TE4oQIjLx4IwGwNAAocHuvU4LIPZJN54/EA81nPGlqdIfieUZ89ZIhrpu5RK5nWyFc9LX3f8wIZ74Pz1G7dKBYhCp3hj8sBxoSeSKYh9TFE1baIS3WnHj8Bb9ARcwrNzvtESN5NX8m1A/VIwGLUsIdTMYbQzCTGxu/vvqda1B3fujerVBWp9dO/Og2tbJScXmIDJoaubZz1JP5ymFt+//4Kudjsnk3H29q4L9t+/WBoIMzISlcPN8OHx0OIxeALjPB4m7o+LEsoId7kUqlE0mZxA3W/U2ZPOc/zEZCAnCJtjsrsFM/RJG3QESWwp4CbgIkSmy0vPGyJmKRZHDxFmPul3DhkvhohP+SCS9eaM+pQHMnCXOODeYxrrTBuP4oD6TLfGsWg5p2gPOhkgMDpQ8ianf6iWqxlaTKi0I9TWa6XJbs9ad33/jEYjYyjSaywGNSvUTN1UY+s+0K0FYa0KpGgG3cVK37xHTOkVHOiBvGqD5eEdw2Rqot199zu3VtTP8sh9nLrKqnTPnjqNLynDpfK4VDzsAZwCtwnriFsm2SLL89htjVhipWUcKyEboeVFLoXzH4/5scFpgAinwHrjI53bjVArJjmFWpXQsIvE/xY/o2VaRcKgHlTqwfk9HcfBQsBqjYwkpYLkd+INj3b0iBfrlYOMAn80I7AtAoqEYARJLTRu7/z5VUKO++gjaY0BaI8QC6HGgrYe9Ed7CO637LW7xUce0RQ4au5/UXzkRfEv+PdmZnj9T+obSuBQmqUTNW7P8Az6KfwHZnS2t/9irO8LHnCoQDxWjVZVWQx/GYlAyTfv0FduEATxJRARhA14FVcnCOA3QjW8ZJwm80p8FkTQddUCvqNOuhi+dVLceen96NWhDFC/RZEBxc9/P3wJvU56HHosiIgvkYzQ08e/H+cKZ03K5kvoOnzH6d4P4rFshItEDaAY937myrzSCKOFBOMrAEg1MD6z4K2J+PaT1AGpfkW2IsZ/g/IJ5ZI+wnh18uekEsZ/MLh7kjpIkHgRA2lhcdSyMFSPT2Aj0YDgCQEPzQaYPv3wFRVwnfnZZzQPmUEfAzZWpS/QiTVsMpn+r/Sv6AceSn/6YTR6hfjpOrAWuh8Hb55Yc9ddpP2qRxKy/8lg63kUUPBwLHqu4Il7gMB+IP57+N309BmguBD8EHzUNjSzjnkqODQTDW8viF8DFVh33Z13ggWg+BeZutJzEpfJory+Ko1DFUCGaik0AZ/XCSx5S+W8RacpkrVsG5pAPAviS6ekUWmDUc5olKt2i9vEanHb7lUKLSM3ohGzxyyX69a1fn2DJFzXTT/yxpHpddLODV+3rtPJ5WbQo+WZj8jYNDwgDpjlULHq6nvvvXqVAkonjYJ+3Yo9RngpkdZ/4N01HXtATt/l/QE5kD7XuGfFOr1g5KX+T+QG3wT+MezDiRpNZqETldiAGfco4Zk7IxlkqNBGzWAEIzlBuM6ewjnHbxdTY21Y0rqeSCujCMBBt0xvdlN6KvN3MjuIBO0LzJl4J3CGSJT+ROX/4GkMIfBTCcr3DND0Ab4fLszdWpbee1prDtGhIJE9SWdxxiasENnT+U8na4pIPaWw1+fkadqdTU36k/NzAaN4ZxPyYTjNfn4+JvsBo3kAb0+WzOe05igHFcWW1py/Cyb3JLYhwh0BiOwRhGHgx+wW5LiZ4aUTEzkhoeQmDH6kEZ/8WGs0aG55VwV4TVJjBBeyG37yifjBLVqFkte8CFa+xpETShVw5XtDSlH83o/BTA0wovM8UL17i8Zg1NwCXJ/8ZAMLlEpylHtNvPtFDa9U0C+N95Ectds5xjGDkKGckBaRtcQE9ohHsFuVy+N26/UG3QRGgfSN/CweJAReCKSTAUGuQN8yNhKVvcA+T2Q59C0V7OhsgQdpSQ0cQ3XLhbISMNF+WcxGtFBoSD8jPgM2wT40IGNOlvQRNG738TH68uFdgc2BvTX9AzV7AgH6crSzB+/sDTAN4jNpjEGL76rGV+O7qvH98OrhnQF000A/um5zgD4UQDehnT2BzWPqRVrrjw9TnsR/VXKSpZOTeqxKKoWxHqr0GC7Vikk0Cqfx5cJKyWGi5aElhLtRJ65kPtcqHMzp6MUqQsUqXUnvy6ddpcDIEGrsavZCqgD7VpeCURB37AHuG6Udpk/wRSkcaGWSy9UDCj1IpIp4gx0k+Cb0yR30PQGsJeWNupQKJgMBF0iazWLSTfS9J9AaTo2GSNTahKy+JuM+iGkWDR4iIcbc2OUrVeR3iCn0UDFlN6BXiimtakCjULCUoB2+c5ZbRM8FSVcwAJOqlNYojJUF/HmyAAiNygITuuExuCEzu5f/PiMOYJloQ/5X/BxuyMgC6Brp4lsE+pL87zk67svQyG7KfFMLhx3RCaQCqT8FbQAZkifdRL+462+qrukBr2sN4nsGjdYAfAZxCLrFwfQgnVxZUHBTQUfBSjgwBjDswZuqe2rAzzT4Fq0G35JOQDdAfVMchD0r0R03FRSs7DlZv7dhn9qMryUnc2WZlOJAUiBM6qntJrD56U+lioDma3iHWhMa1+x7AFpEhIoL8XWk5tB1AmuAJfk5Gc1HAMdHK7KDTiHwallJRRGPhSDGIJP2JkCxfQ560EcZcIaKdv9q/xk1HuW9Sh0nM9NlfeH7rihSq+0wOKa6HkXXo5GgB5tIBkLNq3vOW9/w+PtqWmEFa3ZXVwyUGFiYGlNZo+M/RF+Wp5zEhgIMwIAmb5DxNhxDz4WDN3CgjUjR7jy3wglOhyCVTIL56b+MUGhF/h5xTJSuhqvHTcmjHE4Y5ao8g9EhdRpUDeNHivG1xJzLW8SU0CKIKQtvKILJopsyvp0amsAn5FcRvcrnEhMOB0i5fL60e4wj6Ljxa1yepOEiM0icPk+GonSyyMBb0CzRIoCEZdfJ8wR+4PP5XCDlcIgJl/jH758n4pss2XxjFnDaPCXw833Su/6Ub/8c17jvzKtKA67b9Gc0GYnJHfTL+Xki8if9b5SnHjQiWcwyHdByPi8VyonUwXguGaMIQzgSuomJlMXAH5IQjjIqs0hJrGgmuFJMMzYw0q/6aLWKZTSC1YE+gPCpeFfzalxBLZBuxZla0wrOGNywUqWQ0aW0WcMwOqPN4dLufa4KvKFXKGkr6xCtNA1e0CEJwQp5lbhnygsX8n5XgUnPsBqN+m9H1SZMXyNjWZaBgH1P0GzTCLVTeO12Lf86oCzo/Zqj2CQLaIamYbJfrdZutwfa1Gpdv0q36yDNoBsBZDkusx6nh1F9NI960o7V5EvILtj4h0O2MA+ZxPqcDRU2ZDU59DCq8jYtL2jOWI1LuvqbXzx1BC0RNio0GiVb0lO+qBdUkuCxV8AdvPYu9CGvFq/FVx5BTexCQbNfy7//wJ/3yG3KC1UAKtgCf/ect3jtfo0gXvy4BPYMqMAIRb+O1g9rJG73nIiJPRebMdiTZYoEXYz1rXQoLMfGuZyuCfOCZ4qRYdnEcEL06789ymsv1Qgt53e02ViDbiOn1yngtn2BQOf5zkBHdSxUPq+ipThsMzxzu6C5VMvXbm5t4GUGdadcp9XQlnjTkpLV5xhKArPDFdGanvi0gB2svvk9+0O4Nh5SlJVHrOhdlyohVMG1dvni+QVV3mKLSc/7HGXFtfWzig+96nwMw2c/LPN6SvQy3nhYB2glzfsKLYvb7GUhh0/gjZaKYNPUpZlvhnmUm7IyuBZw5gyLcogK5RyG4zkBJpiVw7Ph36XAbMHWmX289j7LGz+6F/i1Srnp13qF+DLG9+g/cKdZXER0arfX/v5anDWa9L9PKgwPoNVgyQYtf81jxkfEW/Q8rwZbX1RoLtQIi7t4LTqxTdBcjK9FycYFPMYzQgM3RzjcKY8vQ3CQgSbJNTdJ5KjCyNNo+SqQNBpXI9lmZhptcEYZXPEgahQkLhG4pe0fxF/I5Ur+V4LyLSGgLOZ+ITf9wqBUyMXfvkXa3J+BV9qiooBZvHajRljEa3s1AmzR6/W8uCS4xLrUAO4W9FpD+mlB06vlFwmajVpe/KlGkGxerLTuqCFrddzwMYdMfs5yjXG06+RS0qjGCPv6cCRXH9iafk58EHxHFJacoLk3a5bO2qqh4zl643MXiAlwp7j3f84e77yGDtyA8r5Ly+fxMskpNZJ2bGi0PQu1DMEnmI2W6pgQ91g8kZAPH0CLIOmAtEakSYuhfbTEsk3ncjs6HtLZ7+IRxmzNHJ1TOHDYPg87j84GAOz0ie+6wZ2X+6aDo/Pu6kRHtnrEtwiu+Zt3c9ajVu6Hr92LtioDHHgVl+chz1V4c+YyVqnUH7Szy8HGMzjrXiu3Bpy5irUf1CuV7Iqt+JJrvY+iMWMRKEXLZwYznz2YTCbTaCktvol20KFjyaQbtdL0TVYr7EW/WiXsJbK2pFkGS3UatVW8CfRapV+1Rifel7kAr29rRijma1SPEWomwRkyY0IYLcOZfFFvyOQzeFE3iiMpyBAJ+gzYKdFSFY9GTLEI+nHSdHWY8RLg0aomGd5BUwPaaZIxV/M37Nqp4SLzdl7YdUtHyS38TOE519YquV6m1MzZ+kbCc0tX0S3zz+ttfM1ZNqNhadV8ubwu2FY5NVzpFGbY/A1V7aVTObbe21JWH/TzdPKncwqOXD5jy/QKMzMyBIapEfBEBBwGwNV2NwDD38CvhzlX/Rnp2/01fptaBsUfA5pV6+3eMPjWE/FYlDIAxJfQ9CDXWlxhCQuD4ElkYiSxXd/CSnGCeVMyQ5m14CatNn1fTRF052Ah3Gg5+LZWK/Zqze6imqHBLMqDxHOSe24R6jczcZ1aPAYMtj82LttoFk4DXz5+nz2O3llk1rblZ6XmucngJ8anGb/WjLOcfmY0txinKu3Orc2AdrIklj/tqEx7ZBj93U+1UF2oRBFMmeTj0GQEJOyl7PJJmnTIqorFBGCxZoCpHbDnC2Z3AEj4MOELowJmbgj5uAjeChGBufcnM9WYIpBJf6UUf4m9I8QU1sSliP8KdnVpSz8JtqkVmExOzX98DoyLV8t0Kq3C9O3r4uDsin9VzBY/mP7RXR8xvX+s0DNG4FUPObPAT3rByBK4jRMD/MWfLIcGXqGgAb3jb8vSX8h5FYRwN31RX9811/T1wSPpPsn2k1/ualzuwGi52ZOWG4wrGX3Kevge5b59TOmEk9ZCrth/mazU4vBo8ZgLJ1SBEslfu1H7tWew0vC6rJZqx7hxgVN84rEaA/o/3IeDkxeZcedrFvBSP0kacpLsiBIBRYrsjFBkB/32TFbqPEj8f54mKU132fLrRss/vpSBU3z6cRqU0+wzYwoguievDTgwrsxjamO0nty5omyfrCrA9tNXAGnz7MuZNt+KvYADxMhPLPcnb/MBo5YmLBhxSQ6N+zBfYybSCXcADFqAZATscIF5WtiWpfXVTe1tVdPTd5yk0F/Yazp2TWsKW/mQTh8ILlyvh6bOsr5Lrjnz/LudYum9AHJyvqkrdf77zX2zts+JLZ6szPGm3Wd2Verl3DaO0exaYim4ev2mw0/Diu3bwcOcldWrNXzd4qfS26kJZY8TD+jRsp96nBtXPOFU1fE9yv5qfvl+fYqKYDKFH/rRZKUfHl9MNjJpfWSxIhMZPezK7FeXHDbG6/1YjCxo5syEY03GYTxmQOiMidmYwBBiCFYoofiajJgsDXJYvUQF7Y5AwGEPDgTtIrHxArc9yAzEdXTYYNCFFHWJi/1zDC23LZl7vs8e9NusvZVtHt6uUHCqAqNgD7dXeHQKIAg8rZUzwDRvO7HaoGdCRy5oA/0ubi5zz2msaawN9E+bA10OeykAATu8yBaAcHtiiYdvCJSEyhqMgslVVdTgtAbnlHllVqN2O5Xjk0+QuDJHBnsx9/HGr+ADZhNZDUMLdoIhEMaYFBlK9M6ZKsH1UU9jbjnyxxlPVhGb4mDbPPHvjFxL87wRKHSeivawXTAWqDiFws572ip7rTZ/0O47f+6S21oMc/wXJ+oUIZ3BEKbpbE2k/ybVAamPhxqXztuuNVplgaK5QauzoajKZRKMDWWhkkAD71mS2A5hwAYvsgcAKLU7XHDOtP5ALaq4OW6MPJ/VZSiIHamUakS1sY66kLqCuoN6hPoV4XvB3vBYSxbBcGoBJDCif1EW/WWMeJGM+t7AZnyE0CVYfMRaBpMxy56DBkTi+FoIfCYjuro6Vo25nnBgRhWoJnR9HjdBJM0AXrpJO0PiPRfyEQBMUwQTwBJfLSQuSYo7DL5hyOTDl8nHBAXejYUGvd5Q+GRLS/rZjlnzwE9aQwGPQtYCgNZoBs2cutjnaW11+4vV3BCk1Y5odaHJWLjBYbrYa5UB8aJEApoEZUvpZeJn4ueXlU1VGo3KqaUHYfBgKUqnNctnR6Lz5G7Op5oFPKbCyojDZHJEKgtNj7e2EgjrVpkKPR18k6/g+eT2Kv2g/gFvJPLxdHEZuHf6XvHaovICfRB4xX9aoc4FrFsPV5tKiv3g8zuLSkw/VRRqzXxR0FF/Ub0jGCyomzM1Ygdqk4quuS0Sua06Tf9kQVk9q9Ox9WVLjj28sLQBpxtKF9L1oOjXv7astGyM/+6cfXWFwWBhHdk4GsB28W8uPbQCvfinAO8oB/KxOlzUO9B4+TcSI5ttHyuotdQe6iB1K/UQWadjZEL0rVkk9FRXBSIYQ9cQ8UzyWbIfL4paR5R8vEDURxpMI4hM+LBxzPzjRbtVhBmYk7lJE8Ew4ahVuEkLAREaPR0DJkeEbNuT2hlue4FJWij9QshiNltCoGv58uG6zeJzm9YB97JlTgdPg2VydXhKDBxTGGJVpcuWlU+JGRSgawUa1sKPOkKtbaGCwtC0mWihAtMDixfDV+zapXVPpu1P1i3T2FG6/gn4EUkP2zecu05bESjomwF+WhCY1hosKAi2TgsUgPkrolVhjXwFoHmHE/h/32oG5ea2cLjtSHd3+rfgC/GSEhPtBlvEcyutgcbuZ9vtNbF30pumxOOOBZqI0j9tycb5gUgkMP8Y2kQdDgX9q9enTXt9enrJpzvrO2Qmk6yjvv8LnOaMRg6lGa24TfwH0M06tHGh+N30hzrR3cGOhzrwQ7pETbwpYI2AQ+K1HmguBXuyPkSXsP+mBBzxD2TSCjouVIWyC2asFTZllTIgBvBBuEj5jSP4pcmoTANwp1qlsHxZZKefV6nSX4EOlVJp/rLEKh7jIbCF/mGm1/PirLAXcxWgT6jTlYN1etPwcpC+2WjQlcOz3PRV5aO8C3hsEghPHkY2xfoebEEw0TIL9sKKA3IEmAHZi4UAEsMtE4wve02uJ3k5J9/zjEIh1z/lEug4Z/i5UxDXo+W20f0kz8kV4jC4Wf6nMUpqGrznVakNbwPxh1qtxk93qn3pEBQ9PrTABu8C+Hv9ZRNxaigJz5zgS1BjzZvAb5RIRaW2jLk9wGhrxiCsTpFyeT0evc6ohRR0Qp1O3zfjz8N7/zxjs16rg5l9el9mf8UsA0gYeT6YTgZ5uRIkjqS23DO1fZ3cZpOva596z5axu5SEXyVLsYeIfRSzO7tQ12ZMwBTiomjdj/7HTQo1WnR/If5INLNlohmtqS3XgcUAgCXpTrBY5MUfs2HQJVrE+8ES8In4Y5GnG8VXxL+CZvHDLeKfCNd8YEsPKMBMcOKHzNviX8VXgVb8p/gP8ZegkN4r/lL8J5hCcO8pdi/xu9PlcuPDnrtsFBg4kyeEySk9Bg3gAgKL/gCngBwICBxND6Qb6cfA0PU+cC49MPw2TGnSzV3wgVB60fPwjLnpo+BxcNUF4jbYcu4N5156I7gRrEi3+lB+BtNHYN/SqUemgtefOPwE+FK8aR/oBS+ln1gEZ36SnmGHT+XZYkwZbDkKjSTYuRXTk6Pxx5eRC6ic5Dgaxin5BsbHS1NdlxqT7+57VvzYeKXPzpTb/OKHjycvfPzxC5PgtaLCHxcWkZ8f7+wcOtS5c2cnc3bnzrPgZc1te9+8AOhSbc3pc+w+H3j024ce+vYheN09BcXFBfegmz4fvXxnXn/REcyM8X4okVwUaTbyg1ArSS0Y3HLBwxdc8DB8mGzYMXxBw/fhY5n/+f0SolkB844LHjaiAJG4Z4wLFPU78SwY6xajYrS7FyrB0HjUgcPiy4Pw0fTcAVA5WazvfPYi9jkkp+NIxVZqI9axyEI4ZieGOksY9yPUZVD3EZAk5meR9IkdkpEUJpC4AiSb0WheaAZIjHACmSAjGAYBdJjBZzD/RNzPYp8KukK+KxoqLAj62+Nbtb9Z0zybZq5bueK8D40zyyrF98TPS8MJ3rky3vDhu83RlYvlOk2Zf/Erz24Mz+hKGG1uGf8+jA+aZPrH7YvYslLPsHjLt4d1Jg3LQYXPZFfQhd4av3PPcXA+KL61QQ/gPc1z3IauLgOvrjds3l5WcO60FUm5/CZ4nsOnkFdUckqvvcCn4AoL5HLfMG9f39punFJBG+RGb9TX84xecf31Mm8N/eS9otVZXWDYG3T0qwuLHdWKqufOf3Cmvdzp1KnCfGBJeI6xiWCqSt9KTkbROrTWJWzaQUJ9HIuT0HAS9i7g+sFSLRbqkaQrVMeCITRQ6QDhTMQVG8PcBKyMk+raSaPjDF4D8BMEro4ufykoDS2cJV96oI+G8fLpV//U2Boqu/X+smCrSRP2On/zusdfVaNidXeKvXepWbuu4vbvHvU6dZcqDKX9b4v/ONAdLI0wcrNfBuQyXrPpUUA/bnW5mCmgaIyV7JbSsNm4ibfEGlvOUq9srVxqdHWBOpNdxhqNMs5mFKwcEthZzpamuZCN6euTqW+p6XSE1wpT++Bvo+a4p9mh9uqMU5xtVzzvZ6uNXlWHsWCFxhg0ARWoGje+A6ptZC+Dq9WL7Wx4KA/TSMKJovZE0Po8Jo/B6EQ1SD/cYXl4We+x/nme+2Zub5tiZAHH/A+YKz6icbdOmffK574mAGtWnnNOHXS/ZV+yauuScpYTlw6nTziro04A8+3nEmNtSOaThWHU4IliRwkOtXIkaOF3NYEJNsb+prJ6f7VNCcAIdVwOWFt0fdu+0iW3rp12Kbgrv/5mP2EGlqJiC7jqV2C6smxx72LbPWJ37c6+qRBMYSrG2BiRbJCgWVR2jIBjnnypDL/Wa8S7lBqtUrxdI1cYM9h7aDGkF5NKJUjqBYEhtoAhyVdjaISiWTaFn5nxB8lBEMcz8VYwnXuOSa8B3fjpYK2GEYQh4hjNDAb1AD1cTOqzPFFDHMWw5JlZRPksnrxFAqLgKJyDcZmCg2PfsUZLSpDx7x2SpTLPlOy9Y5HoMUNNCmdhXK7gflQVd2jl+UVAFZTzc9+G6jNIIggzyyQsBPu8NIxmpFgsC5OVlMRJCrJcrhKxnsVoZreFFl6UrFyxeGpjZ2fkphuu29b/4MxNvd7yNRtm7O6urp7vm3pI/KDQ2RyLBVrp2bMeBjSaoafu2fOM2+3xoh32nx8evsbp9Hqn+hOtke5tF/yGOa9x9uzmGK+S3bBlczGtpxl1zk+e4HpzaGVAWJgDBsKMlNnCH6UX4z9ZcngXdpmCfHpXNyyH/50+E0bTu4e/2ANvoM8a/gjeTvgqCYYre4D4MBYgCW8uWltQVFWMzE9MZstKs5jUuCVYSBKc2IiXkWTRHiK2Nxy0iL3WsYeoC7sH4KBrjvSMTMeoMoP33BaL2wyOu81mt2V4qKShfnFDAzM/UT67YXHDoYbSkgYwK5yAP96cHF6b3DKDU2u4mavfWD2T06g5cASfbygpbWAKLfg50v9XGkrErtKGhlLw45IGIb0hnPgr3vur9JsIw1vADfFnd+16Nr5fw8nUB0pKDqhlnCZ9Q/au0vp6NI8CMc2ekAE0TusoL+CAEfhBJZgBviTYJD5Mj1RlkQU5VCgQxOMOJ8PjdxPdAIJIMG6ig9VYKQFCWP2ATmL5ksx0wVhGTYEHeTTqx9GyGx2WWYy+MGrG6GxQhvmE8IqLI4FFliqzjASCkimWxmM/jacEIPGFoFkiKM0IaPrEQRlarAnBYi4SWsmQaMaX4O+gAzJJsiU3O6EphiYYNF6hm0lMPH4YsYvG8BQUaUJyPM6PyWyp4mRoSYlLxEgzVagaTfkyEsBlbAbVeCno06JlCHqlGT+gKgacEGcGEJATmsAAoUEyJFUEfj6uAiJwR0kG0dOcNGfEz8QZxNosouMK4pNEu4VKHZdmxwiBheEy15rxS2jyWFRDuFIzD87Us5OFN6oUDCuwKxmd0iqnxVsZhqVpjpMxBgZACCC9KM4gMRaJswqgnOWzepZ4VCGXDqgUJl6jAVqvzcwwRlVIVy+Ty8y2QIFSxSOZwmAz6zfzQFFso4G3wFEIgcLAKWWMijMAYLQajACYFfIQ0LBKrVnpMFfEYYnDzSpULK1QG9sVZXZbDE0KeluJIej1OMwaCGUyFaehC+bHzKYSMw2chRreMl8OgUxucjNQxrCMP8wWMcb7FHra5ZSXaMMhRiMDtFEZPufiMotKDdErZSbaAqEBmnV+0DovfSetkikgraRpFQ1+ABUGGatgZZDWlvAK1WNKNa3lINQy8hpWQ+sUCpaGQAkZRq6VA70Wxo1myFktAXtQHlxdYNgQ5C1Kr7NssTDHWDbDHykovDshJPylVlbpBQAN30rtYoPTaoq6I16FhodqlgFemvYaL/JZ1021lJbSvFF57pS2chWDBj7eyckD5qDxLK2agdUdoanRPn/tNBbJCGvjy3RI1FApHY6Yl3fwCi00B3m9UVDWLC+qb2yPTlGF3B4PrQVanV3vYNYDAchQUYCOVmlkYheQG1hWroRAr6Tl+HND8RbeqrM59IVKL1fKTjnLaGy+a2cRZMrPC4caXLwaNHU5/WbTVK+cdgJQVQ3oFpug45gE6ywyKWj5Xp2CZrjaFgBqXboyF6RVClAomJ2gxM/otGoL0NpZuUWnAtAA1AqDQitDOaFlLkZgkPTJMDoLAGq9oFMwCsiyjIzmgLbBrlY1uRQ0Z2ue0lYou6+W3yC3mlzNBQUCYKeuV7sZy6UKXbiI1tVXhq1tcr0csgquWq+bGZTLwrZWSyEQdrpNm5bZ+YBbRZcY7BAqWKAz/krO0QytlHEA6uMM4AdVBjkAMgAYB81+BmVyqAMajYzRsDIaVRtgTjyntlnMZoNRwzPCLIee4xWFZtSM0UcqcNsAaNCgZq02qCxLVPopAb9CzSh5r7fdY2Rpja5EZlWbVbo2rUEhs8llbi0tK6ueGjL8V/Usr8KqNxdi5vANsTbj1dX9v1l+fqkJFDpKjrat3r1tU/2rSypnFEHoDaBKlwvqQjagXRifvmfqDNZT6bOhYtlUqlkz1K6I06HSZePMsRympdxIhg5TVVQTtRh76gSCtA8b0jFXFx0MMR48Q1sk6mE0kqBhws0GOTzCAS8XY/HcjnYYIRjCd5GxpAlUORlLbIxXfskaCPWx6/de5tM9+emBRpNb/J14BCztqLru0PnBAMNvPOeCQyk3CNPvvv7bJcVbrx/+B5rQ4fynvp0zf/+OaefNaNB9SB8GCmPr7D3TbAJU0P6509saoqVO5Xnj1mB+fKfMNHfJVXNVR+B1lU2rOO0FHyxbdmt3m1YD2D+8ec/Uf974ZYPry49m/40+E4Br7xZ+9IZ9WqzBJHo/fgSobYna9oJoicyCmhcSDTkWPjcZrmGm/ppwRDgau+kKgHmaI1WYETeWYT2GOMbUBQiPPY5FpbO2iSYoEVihPz8mfItLanqM4sZg7g7OzNwQqls6t7LXWVDC664pbSvyl9kravsf7GlLbm0NzlrccHi52d0xNdJZWVJVWBX5n/vbL9naAjZ/cHRf79z2q8Whp7fqOzI7gMU74J2qBbEyq8rKcXq93TDX6vFaE+XxZWFX89b2xhUNAa3frDUWhSLu8nJ3Q/nK/YHpu645+kGHfuvTgL26fW7vPmlHHMI7RJdVNrKH+YDEhzRTbSSKKWtjiBOc7ypCiRzMsxzG4jIldtMgTrMAE8PlYEjpmB3QHwfYAlO6xuKSAZ/F6fnS7KStGsZlEv+INbxgOe/9SDe3iZHJzI4qj/gPjUIudpvb1fE5XfQ5qxPmO5imucy8X1m8XuPQo+gFPXZdoW5fowndW1IYcHzRLu4Rf2swm8rMRqVCdNg4hXkOuy++uq9v+FMDqAX7x+roMv7lgQnej6fBCsW2XiIvg8GMFTS3NxC0nyBmDhb9phhiQx2mCAk6JNZRYiOltaMXBXOcgizFDhIeRcmyE6J9JsFMfIPGkJxUx4Woj86wnpF4aiTHZ+NoWKqmKFL41/JvFEF7qiU8EG5J2YOKb8r/WhgpqtEDqn0jSG5sB5Re7Nn/s/37fwYGi2pKwaID4nodbw+KX4VbWsJAH7TzOnDrAfGB0pqiQitIbt4sJq10D75hv5RXBuc1QLxbM4Ku7yRbqc5yOGdUTUdNomVlC/lD6f4OmOzoFwdJbuiEKPHN9Qz3k5y8Kk7BW/oakWDlgYGO/n7w0mg+sjovD/Zpb8JqgSw7HEQildniz1fusKBbbyisKFrcaPU31PutjYuLw4UGPbN03ADzKXjHPKvHZUfSSlFRgRfYXT2zzFdNMkaE0NriHXYEtaN2rDclxGdoQKhqAgE0rODYsVCAxC2zxNU2EMRukVjGjAeI3y0bJ8T2BAuHJc6tFjObWnHrm5++eesKaQO2MnrxXY1OK777mNKtfEx8V6vTiO/qGVbx2GMKltEDPzoJ/I8pvIrHgB+dBP7MSagafQzaRHVsj/iyXqmUdX+r0XzbLVMq9aCqh9UZ1N9+q9Gjs6BKOqtWS2fFl9FZvebbb9WZdd8v2YsoHrVQKoDHNTysycgIGKnyBwi7K+G2jPmJmEzYwwExdzkB80Ws5qfi84/1/m5kwwOf77sGTZjBbvHiwdswVeuOZwF/c5mB9yxecfjE9WefVezScp+g0sR+mrqnQfzxW/s+f2DD+b9+4V/nvQwKbrsZWF7cI4PFxa55r+y4/sThCO/SFkkYYbJUxk5cmvEKJIpOzwTf+AnxIok8RAq4Ib8HozMnyBkZ5pP6oQSjRw0TtAxi2QQ/HMWyIFgY7pEBWQ+bolqwhxVFeBI4i9lImgEaF1G38IZhRZbCsBlkyBPqgSGE+4eLIO1kgHaABwfny3qC9sHWVwWBj/G/YY2JljVTkpH17fVa3RPGAqsg0Ibn6yTIjGNCsFo4Rs85JlQHhWODdnF6OvlzoPw5XF4dfGD3a0K1IAjPsvpitx2DrDlCIY32FZOejxr/un0AFywo3Sg9RvwjpC7++c+xvmNkZJi7nmmnLiF+eDJpHWeJuCCSBiBa6LGyIJodaTTuW4yETAIrffARtMgiCDRIasGzJP510lXxJoYgMpDlFm4raE1jJKgqWEMHsC4PrUuQPAItAbSG4fZYjlmL56kNLkMCywxXVqFFibwkOEJZE0ajs6N2qpVWWgUd4BiG9+2YcWTbKqtN6dvSe2WDjGZ0JYBXm1lWLzdW6/SFsdKiAg2U8QolC7WczNag4Q2m6M+6okYHku+RTC8zaOW8t6Qp0FDBIKkcyoxK4A5VyehvEx+5o+tcxUWmRpSJ/ctZXdBpY1ijWm1aPK1CDlirb1qpziZjBZopntpqtSqLrhoAsiv1ZlYmIHmToVWmqs0FhQ1LKwtYIPfX9bYXtWjUXgU0Cyo7BGrW4PLUVS8Lqpq8FS4FZOylK5p6z1XqaBqg/5DVKSTe3R9xenY9pSSjXgW1iNpEXYh6ZG5NjGdkkkQLUEsWOxNVayAM/GgthztjPOYPoHUvGhlxzCqPdvGC0ImdwbCxG3VdsriETpAB34yh9aW0qAyQY+RQCC9upSU6/AE2qc4zmfm2zp1yhUZbyBmcWufj5X/ZurmzouK1vq2r0SpxQBw5/L74J61iAIDD74MACM665pdiWvxI/J83912evB8smzW1nJFpdTLZ5X8Il5dDVqtU165s27nQJshLLShjxqXN1hKGtVsbwKIlkZCiKmaXF/ibmh5cUjBF7So4/5/D3uk6rd3jneZ23KpxsKxK49Kyqu4NPX7vU6tXrXQUPt7Qc/10reXzw9Lmqrar9/c2te5+YssOwCTvv2RW4lqtGjUDWN/YvEOjVaEWVbcJru4+vwa9HeWhuUeD3m4tZjXze9I7HHa+ytH1WNu0KC9z1VTI7LPz5YvtlIISMPc64YpFa20n1nlCDhMc+4GeQ4OlwczwzJkPPPvMA4d+7fX9Wrw1/eLj9wI/E338xfSjwH+vt7t7ybfXXPMt2yg6hsUz1r4FrD8H0/6QLhE/fmstODoM/ub8g/jzDG4yxZ6HZLXNWPdCY3FVRnEEPQONx1qIzQcAda8YTrM4zbpALBpm0cqf0aJlDhqisG5Ei7uyDCfZ89xLu3vXds9v0Bu2iUdfFex24Rgo3eCf2b10zeIFnu3PXbq92Ra1c+YZbau7FifKZdMvXLO4MeIxs4xa7phRU60NRtrPbPCzMiMv59AaSVsRW7r6ojYYapy3aOGceoPBUiWzzu7YvfMq8JOOnY1uWuu0KZUfit8Be9AG3jyu5eWasll7F1QYffPmlO0fADSkDYU1s3ZMLzAIxfXNzZU6/XntMuO0Wf3brmyztXcsX7pgekynY1fYOUtztM4FLfMu7Gp08qj/0Nddxlnqw0FYiUQXE5Jf/s5SxEPbSOKWiJQFJF94YPIY8F/AlGU3Yv6+o7NWHE5/2bmD+cNQSfZvRyc9r3MHcLQs2i3+C2h2L2oB00eoETAT/VzR2rpw9+48WdOGpKXKTNzNpJSg5pMETTHJDClolrBSIgW9/1QBVPCqSbhBHzhVINUYuTiT17HMpvnEpvxJ84r5P3EGR2lNMSvowCkzO5jJImjGLKMSu6k4csrcTpDhJZ3paDbB6SKaqKDdaJDCuQxGHJt6isCvFPZZUmfCsdTB4d98jzgrDvV912h8O38S9P1MOHvJqTD4M1HrwH1KKP6M7/gqJJebqBiOsCQiGZbI4hY8u1IRLJhayGhES4BccULUiS0NgsfkwVFUAj2yoU589ee3id/c+tqPDOcdBtxTe9/cBR11I5RGX2T4UiyyBugeKNcujrV097YFwL3iJj34bZHhQ7DqxUf/fCtQ3PY4KGnaH3v/4qfE7/a9Z9+e5HzgPY+VVuntkebulmlncOL7yaRPrJ2EIycWCtLo83HYbC2pNbFy1CLFPGG7gsBP8PpTKx/4786y4CIVc4WvNKRxO/fVb3JscVTPUdVW6Rp0bT23/+XdE2O+5763ZXLxX0JP7bv3x373tJpbZe2xtlY/Gv9T/FEQBA5w4RgLGshxSuA1sBEy0lIs57jTDKL56Wx4ExJdCpHsx5qyCUOMypxkkk+Lx38xoOXfomVKhcbySXbLa9FBsFtnt4i7M5vjgCFHYeoX4vGneS1c2wJkSn3SIp+xKpc6gVeWj+9kjXjv3FXZhGjTAON/YQ/a0ZhqXwbJ2ZQJ35EKkxuMclax7xlnLUoMkeIAWQD3SLEdPaeNup5wPXnSqaKwM/GmcoyrHyIeDh2S9S0qLYTDQKIIxr7rqLV4iASTcV2Jo8nNgiNoPTLOiwRUoAWlgI5U0T4Bw90CJxNhPUG45aw7kqhLc3Vz59ZxgiaRvOMsZlnJRfpl55WXn7dMf1GJLBrtbGsbWkR/886Xtf2OAnHQvqy8Z1Xh7bcXruoJL7UDN6OtqGr3g+eGFTvBQCJR4bHaoMFqgDarpyKR4My0LlLmL4voaDM37O/3O6dcP0X8Q7BkitWKvS3Bq2AQvIo9LxmNx2bqSGT6B8bo6CJ+v7iz4lWiZEVCC8vRZJbsoBnQo8lQxj0UrTJHkxnAOFQRQjwGAjTLftm0YNWDNdzC+oq5urj4fFy+sKFiji5+c6GpsTNedtum2+zmhq542e1R6UQMxGLyRfji6F0mc8OihrLbN91tHR4GsU3i8/DbzsYzPPX3muz1i2Pl9/TdbbXgxA+iio5GdG8U1P4/tL0HYBTH9T++M7t7e73t9arrpy7d6e7UdSpIINQQXTTRe+8Yw9HcwQbTbGMj2xj3hnHBxo5c47g7OMX5uZDETuIW9wLoht/M7kkITL52/t//T3C707bM7JT35r33eXHpCHKX2EGLuXJ0PL9nbg8pksi7NSFpr8gfpomjF0ql6PRcUDH/wv2abMFP2wU6IkCXcQpfBjJu4UOZHtvfgTM4FJJINZsIVIPBSiT0SbfH+2JsWl3dtILfFCpz5KVhOhkuTWT39YZLqwKFj4Zoh9rBW4wGo4XHIRoofDXn65qcOQmO+gymDf4hQ7LWZkmDUtRCHBPMzC4vDQfarVnLbJCX6TDHwcrxiYcPmNupflmioNPP4t7cRI2gplJLKYrHK1gQCkiTtCD8CWrEfQ3CPfEDSd6gL04c3ptF00lM7bO8ySysgfjbQo6Px0qoLAYv1ZCA1wTxchOnsvxxHA8Sfxo4btpYDxa/8G9WymqkdqYFfVqQw6t5/vXhG5U6Ca1Rdqy5C/0rk8ZlyeeCkS9dDxRz5YlmhlFK9Lg31yDJF4DZsGnJXPqSKW89+FlF321gAWj5aseOr9BRtBsdJSEwGnSBqo+vuOJj9Dw6jJ4nIZi6fW8fPwWsAFI+VOnoUp2l6HKahR4nkAMZUOp5NZCiJ5CUTvan9jw1r3tEQmnh7RqX0s/OP5FeK2HzspjOB55/Gx2cBQ/fPT8Hlpz34BbhZU49fsXHoOqCdxjwq0TaX09QF4CODfrJGPEnjBLGaGDMOsAHEsFQjDEz1eirj9A1f/wdmPTuu+gTEPuUvj+Q/vb61bcC42vE3WfKcCi965ofD9nuC568dv8/XGwHqkHrlo1sdN7nWd+vuy34cFJSQaqIWPQbfZku7IsBj6AzNvA7h8nG9gejdC/dm8p2nJY7slMAr0mp/v8VjuxTOKNCggM/4YCEQikRWeMslcYPPvcTYT6Jd7hUv9/llEy0CSf0Am8SOkqCZ02RRMZ3VYBYsxoNHJ/RncS5ZLKNJwL9PrIk/9Yz96E/okPoj/cxelhtKjExHaYzPYySSa/ILZXUlJdDuUzTq5HJYXl5rWIsesRkYrpxNtMNj6MXhqwagv+Dykc5DmoLpAjzhm94b5rpHzYkiNrVCvynBg8HhwwLvnnJHGmBFHQDgHpw/ReeTbHXizotgCdCCj5IQSLTwGyW3lxNJ0iwmADF0RNU1bnZSVUYnX1oUnkkt6Fm+7M5gZ1dawrjsdJyR9LXJt8F69NVCgV8fgh4EYSv1mgWf4HfrOqT618fq1aHppdfpvuJfMPFZ1PMTgnB6CgimKeBkgIJEdmqaeK6hWz60yWCRTYnERMwa0x7OB9BJhbLEHVfTJQFhbkYM9OE/U5kJms8rOk/qDUhQ5m2ntZ6YrMXj4wXDp8+M1o+f0Jipbd6XjJnhK3AkFs1viQwwhpbAm69cuvwluLGIcXJrgnJ4ib0Wc/Wj8v945u3AF2W21hg2v3q0JqWd160FvkLzQXKIgjV/tJJFaUTK7J1tpLJ9P6KbZd2hjwVMwtmz+4s8dhL4dBxNdd0DV3eVJH0+ofUd6TaJnSuWz6yu2LoiKsKOvXZtdnhfObZ3Z03xuuS/XhO4vxF7Fy9VJsgKTERRdGgoDRP9v4i/gwoc4TNUMKmBAGyCYZ4M/HiLaCYYjqPlnAZww4zPjDRiD9WgrlU/6DZC89aJqZJq61G/67WaiV6SdHaNcUSPTpR0hyLNYPfxJpLcOhM4wz/5kdrXiaJgbjtfV4y5OgmX0mkMeCWAMuLLwEL5/KDWReZJ8BSraa6WqOVSIqLJe/gm+E+3hUg9yzpLG70d0mAPT9QEmuORYpZI3qZ6wo0FvvKNXbnjlde2ZFl1ZQ9dcENceh83CuN4LGJzPNCO3kz7USaKdDfTCZ2IJQQGicYSpjJPup/aCrRuj70c30q+l6VKvZ5TKVitWzOGzmsFqGC6oL8ZD7oFM9/qszNcS+9MX4vyHcTmVCR8WkdU3njYldebmWWjf3q7nu+kljdIHoe3sQ+fFN8T4kkJ0ey111QIFyZOTflVLrbmG9DWXn47rk5rB59J2nNqsxxRVRW87r7719ntaiKwUcX55dceEwRxOVEBmxsQF1GqKCoCuMEbCyjQFMFuJCRdKDz1Denda3oWeEI2vct7xyx3G7g7eDKveTUVbnituVgxIV81TF7dfuSxe3oY4PdblizrnPZ0g6AF3kHH/9w3QaD3cFfYnNc0rFsGbj/Qm6LzJ23cyl2kvDeAg6S+NKiSf2Ag3rhpTnW059jTohZTLByVGXfw0fOgKE4kH7wob7nwbVg6JkjD/dteR6n0KWriNpO+sCDP505AuTodG5FRS5ccO833913Rfmt6IcjZ049BJRV5eibnIqKnMF8FMH3oALElbjoAvUidDvbm06irElbYC84OWlLcvD37QEnYe+WSSgrndzCOM9XJJTin01KMf/APVqGn6MTrNsDAk4OWbY8VuDTAbyC0cZojCdYFPhfQIfTBoeHvpb+HAy9BNzw+uuvd0Jj+jMwFD1BEm6EBpzThI6BpkuYf/Rlw2M4bym6FpdpgseA67XX0N/6Om/vPCQmDgQHjS+ZgIVaRPwHUcJ2ALHxGBTSZoC6OV2C2HJAIe4TIz/bIDC1xHLtjpwY+j4TgBseutTAmxNj15+I1l1658OXNtc/eSJRdSltPk+5syHVpQFGHRiRmkDO6WKgfIZuK58iSW/NfoOHc3HU3/cEDoKfzm9fOZV9Vsa9jufTzdRx6hXqDeo96u/UP6lPqC8oolEVd9GYpTGrIVfA+oiGq4tzAxOOBkWDkZJENcTTA2GdBZ0gJrOu4GkML4cCp2/up/yhJIPKQYQ4ITKBCDZx5oSaNicKuFABzCHuVTC57II1wGjGq5O0RtSlIoq0eEGjyQ3xGwkUZ8LMARGCOlQNo3hokkw+ilNjRg2ogcxLw6+cPrs21zOhckjR2gP+vEp7qGD6MLmEkUnyODerpyUAAE6qo31bs0IeSMOKBB6J/n1V1plLHBIjcrm1Fp0a/EOqMPJ2ljFLNDbudpnOqtM8BsAdpsLrChOF8oZctrM6L5FjMMotyggdzveBKlbHqSVyTsZwGpu+UL1hgjbcUONskiqzskxK04/rHXnZVq/ap8iVcjC7ve+oujRPR+f+GDoWl9mdZitce0lVEp0qWjgM3Er7yqKlDGdsr3WgId0Seb6SP+GWZ9NrAST/ptCFjaunDi2dl6hyJWq0gQP3H98zFTKsjA1wTqXLGjB5bDXZLbhPyLXuZpOqrMoIbbFJG24wMLYlJq3GTM9Tm1RyhoVAlaULmHQaEx3W2h7vKfZ7aYNFq+fzhtmytLRa5XcnHdZwGCo0f2SNUo0EMxaQZkCuy2MrsI+UyfIdAK9AU6YY/SFzvq6Mb9HIYmPueCmXlsllfJxT9I2y5brjBaVsvoL2Kx8uQm9pAKdRSDmQC1UcXGHQAWV6/UilpBgA4c4i763HY+zflBnTipOIvwI2mNmlIXq9RMAgWFcK6tbiKBNU/TjcSQSd9zgQaCOiFkgkRUQvTYDqEXWyBV00Q2atj5Xgfid02USGb2OuZXnXsuZNSVaq0HBA6p0/LZI9NpdT5vEGc6zQ4iy2qWU6M62RqGVaNa+w+xRSOSs3gy65Od/lSW3224e1j1uSWH4IwhZnfWPZ3lXrsmxttU0GX2GWwxlb/xb6DL2F/vGHVKiic3hnIa9u9lW5/HnSTWV59+Ua/aPrRyZCEV5t8hZjzscgz3LQNOOxc8qthWqNXJlnMUg5A1QxckZCQ41ao5MwSlBoys93jBwFwuXlYQBumrmkxKCrbU0CUDUMk3reguw1bxxC//zNguW/BY6e8XeuXzo86ZRLA4awxTF+xE1BZ5tdZRkydNWGe6nBWFsuvEp2UWvwfKCBahDqt99NBDG3b+YkBkxO1NC0GRMKXonBTXOFsAAkCkTcIDz+TaLRaIhs8yfMhAArpBNuIulxAdog4UyCpTDRYtXQoRpYTZR98IVMQc8+V+39o7VLho1eM36IqaBWuU8RCATmBFz7bn1GuV8ZmNMccO7v2XfrPldDnr2xa83oluXKUffSs9eMbl6mHvNUg2KfUMa1vwf/cyYLjS0z4awWW0G9Emc0zxEybt3vrH9ijGJ52+g14M2e/a5kgbGxa+3ooUu0Yx6oVe5XBOYEA6Qg1JMnNs8lT8T/XPXHxmrwi62d1mwoPLNn9NrJTY68BqHInMwDXcn7RyuWM+bWFYrRj9dn3jeTVZ9vGz5rragzJWJkDKHGUROoKdRsah51JXU72WcKFgru6EKikmkoozuZCJLpUGIQFUzxP8HImCiF4rFA5FWC7qmoS0oLklMfKZUQpHSJCGsOgYCOBWY6hKddM2B1+BOSRwgIMOJ+jXAtYSXw4AI6QcweKgnpBM2bhI6N5OFMow7uAGaDIS+Xa2Dq60dYGDctaTFuUusaoHSWNOSCELA2s0UvZ4AkoCgvnAHldQqZlWEgbXXQ1pKk8lKWUb1Jc8qgy2UzqxlAewxFfl4Hn6m5+sxP8LF0M/PurEdn/HlW/glUAKvQ6Vvi4c27yj2j2r+ukcqljMPDDLu/acp1ozXugBzs6TutThdwKpYoamvm5cICiBnwCsYAXqE5qczgZGNwdtsUDWQgM87ymN11pQx4oUJKdALlLMcxOokOSmit1gd9DC0HQGmEkTI2MsIhKYGgGJzUqMwaJW3W2PAwZNRKuOvvOekb/sVIP0nH3XCnO/0v96JauuIJsP60TtVTN9KqbCvgZHjq0MNAsdPP6TCDnzrzux8k36oAZOIyICELauqlRfONaLJgX9yPtUBs+JqosbgnrKYup/ZRd1KPU70DO1ADDmDZ8yHKCf1A/DcZL7Sx0v1C/P91eV4EEvPoQBbZZ02RA3uyvHHvvL6eusmlYdgT7nbsd4TTWQKw0X88AOp/l9/dEy5Np5jU5LpzHpRv964akqbm7Z1cJ6HCpWH8Gt3hM6mBy4D6YkGk/t8WADsAVRruQRTx2E10+yVURqZUQ7XjOWAxtVHwEvgg9RvqTepDTImdBRrgBoWg5iI7kQOOEMV21/2Xcfq//J6/pn9cCNzzv73f/5/vxwqKNGdEDZrec24G/udD6tcWPHeA1CDfQ7/6KkD990+SUEHbKWH/TYKPaBDE7De/FDzyC5BHFw+eUQ8ApcD/4rI+9f+npwn7psmzWqaX7Ra4P0p2oQIgGKzH5O/X+zuE3sto/aH3HKUdjo/Ako8cHaWoR1T8ew+91/eyoPKXQilB5a8U+HG+46OPcOmPRY2//r0UERvYKUiyRhCZnMjzYLqR8CRA9AsDMssnG2H0xMoDz3w+L84gDmICg0oTG9lAJGMqS9zHAFoZHFfVsr4SH1svqUT3jGpt2dIoHMBVq4D+CW9NXW7DlzV16ebHl9z5FhhaNS5YeUkrOa4HM1pHNW5pIQcmXDm/bfmBYeR4U/pEx6rFB5o7Vi++ufB59Mnygiqnomv8rjEnHlh1om1+ZfNNy/Fx2IHlc1Z3NB9YvKqj+ebFxCbsLAWJr2+jiK/ImzKG7eLL43eHvcum5EO/rdfmh/lTlo3ee8/e0fRXO18M9L0qaKjFAi/uTH17883fnsMP6beFcuPGBDo2lA9U5AOKqKkZXBBhYxdTLCmYSqeS8Ml0Y7qRPe13p5OOOkc66fYXBGGvKc8Ee4MFk8AkuP6TpQghmKZ8lTqU0mpBSlfpo6lwnRpQUulZSl0nmpjj50tFnyWiLRaxn8ZZbEB4DxZkzqH+OHkvluxCY3pVDGReMCAc8FsKCy8+QMFhUBLsRgvQAvadQZE8MXwMNaEm9lTQg5LWpBUlWQjZTNATzPWBI/jXa46bQa8vFxzx53T3gvJDS+6///709v7QmjuA/NCSp59+Ol2Fuv3V2pNq9UmI/8hZW+0HPcGk9klwHT72yuW92mQQLXlSmxTlPEhKsRDXW4bbPUgVULXEY4HRQxMU0yCNqbso9Hgx40OJPZLzGEwBTyRW4vPEPIRP93kCxKsYzhE3k30erhQBcLava4kE7Ncfrlmle38GOvbHNGDfuOr1mTC9aPmZOAi//lv0e2Btm/AM6kOfwc6xV6ysuW/ZiuKRy1KN6ZuZ+9ej38/tej79eDKBXgfSP70F+Cs+uFLnWrw2cufRZ4a1XvcnR/2GCY92Zh1eO/ySUeW2zDfs38t04dGfh2vSJPj0uWAl5IWdJ7KvQDYZaF8MU6mGzInFZTzx2DkkHwJDREfMPjz0cKMMls6dQNvBhpU9184PNY9qfej21VOPPb0eyhuGgpvAnk2pQ7dc9nr1VYphxUsViGmcB2rQs+dL5tDOvi+WL70lp2RJWXuODj33RNdk9PC7S+dktQyRG7Y+fN/myw/9xhsGi9aV1gF5az+fxfVj2oeIHf2AhwJh/9XcrxMXIlQ5GIRGlDBQPiDMIYV4XAkqPQS0lpIUXPvKtde+kt6+a47dPqe11u3e32LsNGStappDv/XIho2PPLJxwyN70ffH0XDlc1vXPmn9B9jWPlllIlgEiqeOAwXjJtdfe+aZt3ZJctz7WlqTbqlHWjmM/nDDI/j6I0c2Po1+QM9uOrJ/xURw/81FEOx7CkjR99R5fKMU16eeas34tiBbp5TICQom1XH80vFzm2BV/UxHIJL5ThxNah/o31sW24Qwhn9Z1rN0aQ/SrugsnWwtKahcY7VEqzpNhk66T/wS9xmunzLnRjkYv/fEib27fw//KuOHV6M/iR/oxx0vb98+Y+Z2Ortn6bL2jqXo5cPLy4sMBnyPyjUWDwsXih/zhiET11wzu+/Enr0n3t6NngGB1eAdnI56Zmzf/vKO7QRZ/OwYyXcSmlLhfpmPeeThAkISzQUEgTBmnkx2zC3TGkATrdt4IgSIFRTA3BnNkxYAEjoQ4ommJEskYZya5YI4JUEHEkSZjo1jit5EN2ggmojHvoLTyLywLe/o9TVTi9w084wOclJf+zWS1HFlMa9v2i39xwnunr+VpUOFf0HP8381dIQtxb4iSxHc945eYVKF/VWeRoX3n6Bs/Y730KR93s4hlTod2OOOKxUhsBhdZ3LSZQF7abN/IqeE5WjbxKE7544yGsFMW6VOX3PpmPSn6Aanj2Y49hBYDObdrzWZ6CM16JqnlGCG28FAgynPGkcvoj2BNp/BazLJ9fRQsOD5L0aiqw1jxt84qV6lArRdo6kS+0hSKvZ5sqdbf87/Ce/BrUUISG4gZbAxq6ffqLXfaQhuP9I9zEStApycvHXy5K2b6Z/GQ4ssTckskKWFJKRXdy/pWdJH4UO3Wr9lkmOu+bZpNDXtNvNcx6QtYAMpNBmcBDOlPC9NW8UohTC5niKuNVPiEdNyKVz69skbN05Gk7aItr5SMt1GqQrMw7cO4tP+hxcWMZU9Ge9XZr7flhecq3smhcuatOWir54SEfBSpAKnTouvO2NQvRmPkAZTWyaRSiTJ6yfF47lKiGCzpCooS2gmsFlsgL6nhCimB7Iwf3JSqB/lJwPV1Y/rRzaAiKu0BKnZwFH0F0wUG8UjezJoQxEg91tRr9UvByhiC/Jg18fC8UVyTBEI+BQftL0IduHjx2BXV0lQtz1o9fmswe26IM69fuCQ4nmELwiihcLhPAySXKpB0M/JACSJs3zGNDyewKmeQalZQiqPU/3CXuJAaUZwxQcGq8vNdj2Ltt2YYzexWVsX/+1eXs07un1foN/dsLfIZ+Vc6zYB89sWtdW3ILwBHXnotR6zO9utcG574CDIn23knbmvXwg135jFL/fKcg1OqX22wv552Lg9RxW1+qSe9Sof0BWahw0v5AIud4400FClzJ5wgSAIiL5q8TfhCSVMfLBxNIf56xAOJfiEh6HQ2xZgRmzeDhc6AQot6BNwBodBPvN2+kk3mupCX7pAIWxygYMuoHPhsafDv2tkFLOCUuMVlnisr6SGUqOoadR0ainmRrdjfvRm6l7Mj54gnrVIL/USW1YyY+MobkbSthxtMPc7CoiRnUFvIbE4TpiJclAslCjBsz1t5gw+IT2KCfZzGe6MMhGO4BwZ4DmD4AWJuEA2JS6MiRHRVr2YJrlkCeSJBNM8EMPkqonnioUY5GPxDD6AANUsEHUkgRLkE7QWU5AquUytVgOVzARyFEqVVCtVAblCIlMrZLIznxsMUA11OqgeZ7NBqcxslkmB7bjVqpBDoxHKFZPNZqhUGY0qZTeOqyUyg0EmUYNN6EOjUc5pIWaVtJx8Ms8rpDiE41LFNJxm4HFEJZUpwZUvaTQazBGo1RqDZrparTVpgVIJtCbNH9R6mx5IJEoolymknBoysw6v7Pu3Su8Y3f08cOliZSsPH/oaKuRqtTz9/ddyVckJ2KyVsqxUK0k/DT4Dck4h41RgQWqDTLYhJWt881WZ/JU3ZXhgfvb9FwrFF98r2b7vVKrv+lTuT3/QyrgfPpXIkAkuRFt/4BT6H8B6vaId5X0nVfDfgXd4RRaSfGM0fgNOy1SqtA5+iuCXco1a8SVACrXahQyfK7Raxefgc6VWi6T/VOn1qmUr4XpaI+NYqT69e+UdUK+it5jlXnSq13T4nG9B0qdVmGYgaKMUleVP4KmG7M5XAdP/HGMEIGoxWhKHPPgLOLD6DXQL6ka3vLEaHPiF+DHQA6a90R9/g6bGjLpH1BG5Z1TfPYMiIGdQhMnBp5QYw6dBe7k8ZaN81GQ8dlZSKeoKPCf9fK/OzOk8xF2yoABOxLdAkJSRDVwJZxT3yzko+OgjVvaA2KwYyf4rsYOogBEBFABXGx8wZaEGQGLGk1xC0EcMxoIhA0eTsiFyGwkb9JFBWcIed4QH0JJT4W7HVrBGrkS/VYLpxAguTUHkiVaUX+/SqiGQ1BZdVvP+vTeM16gsgJUzssmj1TJYkmjwW1QqhdsIzEq9jNjoKxPIXjI6Ogxs0qjw+wiwGUqw/vI90MS2RO2lLrjasqKlSM0wW4X9tX7M5bCjAV3hVIIy5Wk9QxFLu9MUHGFzccUmzF0BEAx7LBXoNKcEjNwWnp0v00A4eskVGzpvioQ1xkIJpFnXJUMOIbvlsvA4el1OFxegwwwjAGuZcIuk58btmCyuXzhmcanC4gBgcD8Tv9GIX/dteCMBL8atH4uSjXUcFuD7aIkG+AhdTvsEws6HW5uOxn6xlec2HjqY4mjI0IClUwcPNaJ3uqZj7hDHJfC6ZddBFjAMZhand/2KFqNT89PzwccGm1Zqob0yZId75s9HzQab0chmyaAn/aHMLTEabQbw2Pyf1X/kr6s/MUvwEeBOIgGGbuAjcVpsBE6oOe6khUCI8/Qv1h/kA+vw2aycxV+ZgSxHz28Bvobe5+vRJ82zGSWNOxUjUcxrQR80PP3cr2iCT+fNu5XjpYyE4WTMrfPmAR2wzZ9/kOMZGt9HeRC3x1fo4wH9oUH1LxX0kn9tC2BOUvS9jSkMgt4IfDoyYomG1S/XOQs0TbqyJae+vbmmqBNdNxGwq9eUuEur3b+ugndqzKnOEWvs/Pz0H4AFKPWezvFuzcXqlENFfuWMo/PEEmbAiCpShl+sApPqo3rJpkdHzxJMi/6K9wa9qLeXXJJaQi4h6Jj979q/H0PeN0E1C0jqMZ+RjfmcmbPxl+vgIwDiOiBYLAsa2XE+FiWOEGGGfIYporBIfnTl/1i7VApRcPt86c4PdkqN01PtJu9xwZ8bkxr0B36pxqkUnsHeRrfbrSMXLhxptdeA1lTKhmyCD8YB/dtB36qMahE02H7V+mDs9ww54JwhESdgjtqQiPJm0goQMKEI8fxZAEiKQUj55c6JqRspo1Qc3kIYgi2HteCom9+0SRs3GFndjBk61qh/2m4YO1YfD0K+pISHvOHXzEwFUlP6JHEXeaewV3ynJt1kOQj2HzRKdLqY8RL03CXGmFaz2zCpbxIP/TFD2e4yQ0yvu0ifjv7acXrhnhDb32oC4mU08ssroOBpGAlHegFpFrUM/Qhksl+1fNGp/msBPkJc/15SfyDvAnLZRb5/ghpOsJx+Vc2qiSUrIJr4xN5VMKXxmDha8E0EiNo9MaXE5C0mEHixLMkM/fLH75baFFEFLX3sMSmNAzbp39S4smr13y5MR6tUGngVNKlqMudf1SL4DkF8p2+/xXcI4juBfB7/oRMXpqcl+I40ubUcB/qexQHM64TOzmPfxe1FtIUxWSSBovMeOeZ2TDZCMyWCA17V8SAgakiDt/nYd2dOrf3dbYUdnY7auTOWd4+1A7tt3Np17Xev2nHbW0ePPFPOWesravXu8kgs+fvbquGLL5mvQN/cassv0sWWXftXwIFFb/4F7UNfvtR99xdDQfhY7/cneg9uBIwylDV7xNiu6ROe/FNGjs+J85qEkmMuSo85UivBKuCBLsAmQjIQ6N9oxjybjg1gykRnyDgOI7yIyDr/GU5AR9Cjzz5LR3HoW3SkFWjx4vXV1aAtfQfz+rPoUaBK30FHvX2vG/OMfa97vXQUB3ACWIwWgdkf+jdt6nsP7Dr64WWPPfbYpA/BbLQIfbkJQP9RsAvdkJv+INuc/kClgl5zNvRmm6EXk/AfmAcwWaUUuwb3yy6xTwq7dT5PLhQkGwOAIsQGQI8zgcA0Ew2FfkxwFxvN7N4R5MOM5pfPK/rOki6+8vM7GQ19pglA9p7PF01UHlo5pXU4CD1yGFhuB6dfu2v9lbO1Ncr61kRrayxvRG3tsBFLa9feedcl105Tu4PyupaSjuay3PbaumGdi2vW3QP7Cn677tAnQP7POxY9GQ/lLr+t/Mbjt6LPb5dY0Ffrdkw3DFPX1sdjDTkNnZ0NOdeuXrtjqtafp0zWRcuGiGnbz7eJEPFAiaVPQvC/eZ4hgz+LMxO0NJAIliRCEi2VhY/eEKfPigt+ZFkznog5kwG+8nNzBNiLtt77XOc9nc+d+fo5h+O5LlgH1osJr2TcwtIznuvqes4hoS6iJazuIhfhS8kF96Kt6WeEBBD8q3ix9Ll7xduJNrkcxf5I0CnAOeUmvT+hk1AENyGrmmz5h4gVMDfoWa+AKX96H72f8WE7C73//p/AlFdg6rH+F3nsA7DplBv15aOef2wWfdZu/gfozgeM+xTaKOIJqvDc9jVux+m418f1iUgxHpGMoEwimNYDYoBPNjYTxKwkLmgDEeKRZAoBtWCvL5rhFzCY84mail1Ssx6KOA+89M8vskAaTpZ62GFDI3Naq7XakENjV6nl2fk5atWcUJuBByGj4dYeT4hmTO0Ox+y8Tp53ew2FnvEjmkzGymEWJiunOFutUnPycH57cUNukYMH9Ado0dlj6Ohn2+Ded8E6PFqk0Vmr9+853BQJad06bXTLshkup7XYY5NIlusabfaixVnuxx8tWOr1BJp0uuXqoU5n6U3Hkvlug0enja1fvX7J7JFVOp2KdnrrIh3Ns+ZsbkJpNOMfu38CnSINJPQ3JeZ1w1QHNYlaQK2lrqRuIP41gn7iKQH/x4wdh49BbcIs4YjaNbGu5GLxRCieMMdpjhiYSYjqjhl3w0QwRLS2SdckufgYwTfAt8GTZqZYKO6ntPgo6l7iCxLkEuGqUMzEUIOMdBjRaOc8NXh63lvolnnlzrza3e/patN/G2myl02bVubiO32stHweuuWt0lrde7tr89Z9olb/y11/rKyrqGRiSVFX2bF697/U6k88dccqxhXlLcgrGldxrA7l1JaS4kFf2TzQzWinldlNI/2+Tt5VZirzBclDSmvfBt1AdflH6AV0GL3w0eWXfwQqQReo/OiRiwySWXWSN+/zFkfK7sobo4Q6R2WJ5yi48aintNQxY8lC9C/vfW9K6oByTN5dZRE4oSNnTE7HxNbb6vVfy+Vf6+tva50oJE1qua1B/5Vc/pW+4bYWGKyDijE5d5fmlHruezN9L5p11FNS6Zi9cMkMR2mpJ+jBGXfnjFFA/Gi8jpI3u3zw28KDF9PO5wbZ62oxBTiEmkstJ9qNAQORFEcjdOZsSsQkvn61eyNB+ycHAn1CWBDBjoNwI6E4HxVWEB+hddiYiBMfMUVjPpJG3AiQiThq9IkWIqBfGBO/0OUpbJw0f9osf3Nrqz94uK0sUjlmVUVeMHtpuKEl92R3m724uLVLHmi6EsIraXDahad8mU82l76GqfQDWos5Ob27NJhELxcNLY40FsMZg8ViH9XVJMGe0aO6ooFLnc5lYyJzNLSuIWahA7Py633a4/VJNeu25Ek1i9otDhmaak+ALQVmcxFaE5GtNXb+Fa7sNFjchStpAN8NxCuCFvgXfyIe8MfiIy/AnpVQDXgeOi74VdcK+5gLqNXEcsbnJf4UaLI6kQAZGYLndAE1hjVqPV5BNTlGGIlYRpZvjgAf0aoPRYmqfcAoIG7FdNGYV0DoJ3D8OCdqJK7BdIaM5re4FsKRd9xy376Kyor161cDlT9Xu2t9OJTfNGZMUz7aM2TdotrH6muGTnnmmu7OaeCxDxjmAwZOappd3RVxSiFnkRiD3ZK/S+7VlKlHj61Kf9VWVt7RXlFumjFnJj2xqnPn5eD1V5Ty3OyNj5ilwZA722x05Y8sQ29Zy+Y331HJZI9e6GAsd4+4+lhh3zP54+HUyV7PhPRN4x9+IRSu7B5XAaYwUPJMS9yXvf4ZBl2/hVGvGDu2vGLcz/1Qy4CPxpMH7QO66M/sPbKBfMnNFkPOTWsANxP+6TyldAP4FneFvImgFPHoOH3V+b5my85SzG/xN3IKOEYicBkHiRRMsFUSMSWJSQqxXBdwawQ8TKK9K4IekY1mAZSZKFdggoRuXtZeGa2O/ZgP7EYWDxO1MdjYEK5q0i7tAf8+gL69JVlvNLOs3xgtm3ok1dKSOvIcPpXIVcFseXLSgT+vugWoGEPPUl99O9qOLCYPtBs2fPubRzdXdg335XQsLcAD+7sDajaAn8yoMpfj09Rlcwxhg5q/ZMfqPx+YeACvg3rc//6N60YQpDOKsgkCeUIsyiVuorVOxjEwZigsgo/p4wjup1lEksq4kBEUbXFvEx3JkD11AcKGiCvERoppgVpqUgGd+tilVx/btq24szLidRuUIKGnmdaxIb/MqDMqtACTWxXDDCMTUsiwyX/Hlo9IaqTqpDT7/k5fw6pRtQa3osLAyCEsWqNiGal+WDZgGNoM/8J7DOVaU7XyapBbWZcwxsvbGqd3lLMj69UlSsCyYNnvFuQu0xiyjG4ImBuHGAIFOYxFMlVv4lnIAJAfpjW2eCAcckITgBDSiqeraUN2PSMD8QLA99Ne1ZjmfE7AL/dgenmYgG17joAfLO6GF08GOMiQ/iAMzhCX8BO0E4J6RzRYzCIgnlagWk2wIZKdW1eXm01bo2F7fr49HP28WEyB95WESEqoBP3gDt2NPrrd7PPYiqrtnbL0UPTB86D1xYdA2Qm4+MqVid/ubSAFbgeOu28FjnsZeWckGg5F0RRHXr7dkZ8Hvrww4R7mRnTqQFszTcsZHdz4l1eB+27guH3rJ+malX8Y++jCwPZvgOub7du/pcBZhOkDgh/tyvgWFvjXAC3CN8Uw/0BQvQTMCclHHslZirWrdQoVqvhG71bJeDPdfeYEWhmgoVeS0uAV4XtL+DTl1ErZY+hdM8N5DGAS4+ubfps6O8zTvTKB9j+bFp6pxFxp1nlPBf1PzTwT8ICVgcHPTX+N/qh3qmW8CYUDNO2TpHzo1fdPzwId9BTkPff0P6FjRuHpLzyrzg4Z6F7jaTWb2/filXBj39/Pm3dKhDmB0B/4y4l8bdSUUd3PWDuS7e/MTCTAGAsflz3fga0IKyCh1r2BPjpwH3plIQekV8o1Wm7YO6vnPH3ViBFXPT1n2tHGK4n7aZS0BcMh1+b5gL/+AHC8kT7dr7x3UlBCox3oZYIbtnOr3Cq9SgblU+bgy9/Cd2mqu8oVChNdQuKJe9PMxeve2I8GtPm6+/XXzumw2AlvoYZagRbXFoDzrMk2oz6RuBbI8Fn3gp0XCA9ZCmcOLoQe/5l8sBo/6zn8rG2YnsxooAmzJJ5BiKhOAEo00gazi85weINLhHC7EURk0O/mCY8wgY8jWudGnoj3PGQu4ktCBfDiJYT7SnblPZyf91CexebNK9d6AFAF0pOCKgAC2mQkbLUUHivIvSfHbHVnxzUegrHFStUyTWWB32IpOFaQc3eO1erNLdX48IU2+JQVX+jTj4harfiWufflWq2+/HKc6dVWFvotKY7LtrpdjFxuXA0uN8oZRm5E23eY5BLgdNvyOC7H4nKxcrl5TRmdTxfYI96QRSJnHEJens1lhxK58WrUa1TQtMIIklfjgDmYyXQAVm6+qm/EaqOcg06XLU/gdSxnUwzCbZyXwbUQzE/OKWj7BkJE+V60X45nExwOFLBEGJuE9lsXWP3X+mwLbL7rp22oS44bt3YxiIAPrX62fpgzCSRWRexMyur3W5nnzlSTM/hKWVi+duWOw2tWZQf8Ah9B+hQ1yEcJ0SCup5qIbxBPLPAzTWFPjDf6YuRMX5h34b4ZLkfcUoJu1AMFd1oZzLmevp6TJyVUOuvkuUQ6dS4MkydP9vWQ3dJBAHdBgOOQSqX68I85LwdRg2OZYqKMO+OLnmhUaCVZpA0JBiCeyfE6GiCdMwun49mJxZwQG2d6tz31FPrhKYj2T9yAg9s2TARzIIGiI0G0H0IwZyKkSJGntilNR8eQrDFHTUrxMhyy4MTzxmqAilGUX7SBjWOWyRQVt5XxUsP1uzRJCAaxPzPlY6lLx42q+hrCr6tGjbv00oc2wK+rR+LAuJHVX8MND4FLB5NK6Yc2lK/RqrVryjc8hItw2jVllz50adkaLTfuUvrkYLqJG+AddfhbV1Mt1DhqBuYeKKpAdJgj+NgT/YGZCQagRkBmOMfIRQnee8QNeGEjOVgiREx46Rwci4t9V5g/Qxn1FUG0LmLOlIiQbQY4xFBkXXA4T26wqhQ5eu+mUVb6iYLvGng+OZ5guqK/EchYAer1sVuTfIxvOCNXquQTZDK5Td4lf09hUXTJ5TK7bIIsS68WAFm61Q/oHXr8f98EUlSOi9nkMvrGiEGed3iBtUjOhkdt8irA/QXfNuAbJm997Nr+ZwAXwaQdn+T5BpCXuRDf2f6lcJQJKU8J9+7JPEqvH9L/fPxGGbwE0rYMZSBfHgRY2gMv2AYCcWIGzJuDITMbSEi4BE+Mgs0JludMkUSID8CpwA3cC9HN7M/3gZiFe2Z9VXPZ3i9j6K/or7Ev915e/dWsPS7QePWKlT+sXHE1aIRvvfUWeohJXYTBPTP01TP0+JOgXvlGy/qDB9e3vKFET58cT595dWsY/XFIKDQE5IQpwVddxh90v03BMMGbCdlhuI06Qh0ns0O/p+qM6/YL4uAX8gP9ik0+8L+8E5mLSlhGAJyoZvAK6GJ0FxTRDTgKBaJXSNE15LkgTF40Of2cIwhh0A7P/jdXgVQaoc1ocxrpoh3bHwEqUA2UR7d3RHXnygTtKGUPnjznN/ScN1G07GKpu4L2TZvswfR/cQm4SiWfA8FMuUpX0jK8tTwQKG8d3lKCxp4rMQrfEt/4QlwEg6DBU5bBJxuYl3iCtESEfv0JglghYgYDkHPsQAj2Bm1BG8IT8inOAv9FoHfFKJ7J77Jwfe8SCCaQRYCI+0NMbxrnp4WlAlL0XHM6CXv7UiizKOBFgjKDxMlzTs779yrxOzuInxQDRzSGmBDAC1RQXwPMgAglOXKWPNYcQIv39tyOKo6hvY+CeesLb+/ZC64LzsPpSz4FO4NMd/O8IFqCixSuF0ocAy+SIjsDzfPxpZ+C6wK4Dgz6XNIn+OgzUuWCp6TBCAgX8WvpYjFlExecKcTNEResZvGI14uWdwk6RiT/GR8OvOAQwgXMmfnfqEvETfTcjUc24v/ghw1d4zduHN+14a/J9jN3jazIndA0ITreMRo22CWMzcctZmvMDcGm6LCq5pfWnhk1v27lnLYxDJB6OMCMbZ+zsnbuyDNrrTkhWktPrmc+qZ9sDOXQjpGrV48ctWrVqMwZ/QRvGjusYWJ6itlr0uArgUNCW20TCJo/LVFozW7Lntno70eX+rIKo0tBI4BSgB5YFinM8i87Cuyz9wRK7FBOw8eGzpo1NN2ssZeQmXAGXgsPZOS1BEsC9yof7kY+HZ8g9vfGBNABD0fEsDyd2gndO3emz4wBje9igrkNPfnuu2jZQqYNtYEj5JeWItp+5p/vvsvc06dAbfh8GfCI/XcE+ol9CPMfJioXz1ht1EwyS0HS1AIBJXLAAqhoSKIBjGDTGMRxvBARURcgi18oSAuAoRnvEwTvQnC84ydfUM/iKIsnbImIASuo1OBiNAtYZSh+1qdiAMtU7gMVmmKrxb6XLl6DvtD5eCUr1ef4VE835o8yW+ky7u5owKa+p1DN6nxFYNWrbVJHuoutKC9Fl0nt2aC1PCyjg/Am2qlBL9VbgLlA7XKB5ksjMkegaK/k3Y3oPVWWVDY5R2NUquXNjzTyCpk8+FFCExoHvdZIy6MNsNWp98py0fH4Hw1qoxwYW40RY64OhOrsnAmOmGXQjYNjfPbcSRq5T59+9uWQQd6ikUJMjBSGwcx76yS8zvx+mWDbL8pzUufZPtgpH6ZZiR8d/PUECk8nQE/GzvsR+lXYIPToDNx5cA6eGEMhItFPC5YaLIUwwXTuhwm8YElQkjpNKdhXMT23pONUqmMJoMhFZzFlR1PCddSAXF749SXpXhHgmEme6fW4g8xfzgi6qkwyhS/NoVTcHwWsBTee10Zgmiwzao2GhBczKhkrmgRR+BPAyQRMLgKSI6aT/WshncfUCw5nsMrOpTOG8K5LOy+dA1s2bt44nNbvk7d9/o/P2+T7qLMK5RX/2j/63o0zyqFur3wrWANSYM1W+V6kUDyCNqJStPERhUK3T/4UZKANMk/J96muN2Tl5WUZ1kfw3169St46blyrXKXfC7TSudPzqqvz9uqV8q27dm2VK3GiRnbzwYM3y0jBJ1977UlSkGjBCXYzwh7mYKlUDTWcGklNp+ZTl+DBeYGfOuq/PBO8ShFpT/DRN5A2GH9PO0gHezB9C1LDiX4EeFU4IfFEDx8cu2giPbxlTgv+j/qv7zfFY/FRSHq1peS0IEFn8TE2T7ya/AevCif06uDYRRPTKXBOig/Pilm9Aly2yGugO4Q0mjpNkXIScsTdV4LbHEgI1t8QYQ8EenwEuo9ABwhGUGRTsgIIPnmECYQoW4hupgy+EGYAaaGJEv0a6Zgg/VJvGou8edYgyyQgG7KeMVpomU/vl7HBLdtmP7hkVsyiADTDtN9Q0PHB0qu7umbo4UigQO+anPS/2HwnHOPdWDR/Kb1u1BrU4LHx6LDG5nEZS08u+bA0AM2huVP2NdZIaEBXPDJ/0yedYQhAtzT9g9xjYn/jDNr47EP9c/hugWcooCoFGwUXlHACk0/2VAMuph/BXnDOA0VXPvgjS7hgiKArCJ7teBetJ44WgFgwro8X0P0lYRdvkQdzjROnTy9nqkMNl1VfBe5W8HG3wTC8ITo2nldmCVfmaItcnDu/xptdOBKM1SV0BVaXvX7ZNJnElpY5y3OtmvZhpnHRkK8+6ipPKvS+HDPjza8N5BWPph+tuvSWntoR+2e1+4F36/qQd+Sz1pyDO9597q/dQ93hq8pHv/fIY82amm1uXSSd6Nm3ZfkDTx051LU2kPsIfFZXe8+T6Fv879FbihJa91X1GwD35xN7N8Yktdu9hmi/nZiIS0b8SlkwRVIt+rsHvjiRXCbMLI3HBccEBEdJfBTQUd7HClYqBFTCKKonc6aoiaiai8KDuBsEMOtIRxNRkzl64QjiHr9KXUIzSlp5enO5Iom+gyABNLfpbKuGXv4gYAOH5xyG+4d0XHIAgF1FwcrQmEaTuXnx5pvhNcV5xQWNcQ3oTdWafnjA9w6ruTHVUvKT0JWl+Ai9gR0yeZY8sQaE4qr2iah5fONqJ4JwU3oD3Ky1r5o8a6jZb3RleRTXecGaGfMarF6jyQOs0pvi6aPdpmb6uTPCzVhhXGgH2oaj9JSN8lPFVDu1gNpM7aFup45Rf6A+or4FTkD8MoiSlXggGosXMD4v2x8vETZrhRzal+B8Ic7HR80BMnh8iQHKy1xC5Fm4yUSXbpwgqBFm9JA3VELYb0H3jsjGzFHOR2QAmNkVei7ZX4maDZyPgMwISSIth+m1IHkGzuXwZ+TO2X9x5x574WvEB73EuesN5Abk9c8VJPjJgq8aH1Gz9cUTBJmNYO7i+wdDUaKdEpVwwh71haK2g6pCg84ErqkGhDqTcQ5oUBaRlKSLtzgM1tMTxuaVZjWFGG8sbwQEJYwWFAJD0OwsKVTLAPA7XVzQ2XxAauLtMl14rNfCOU1ZMl3uKNcCB+eEMpaXSqVGPhdKaVPiRW4xbbO6HDKXfUoix5d9tUqGmdpSTLxGabX5NZnD5A7brUa73GHKjzWV2l5kVEwBMITMjmghpi3ww6RB57Dtas6s05XSvLyE0ZhvLs2N0WanO5AIuE2X7Dyz+9HrN+ZF8pYtw4eN1z+6+8xOIW1NfqRg3ryCSP4akga2ntdRJ2SZXJU0w8ow4d+Mw5HssDsnfD86/bvfvfwykNxeKvHPVJpsWbZQLqBZBhjkTJ6CKaZ1UinHZw8FElgo5TmZ1BAaypToCl20FhZyhco8w4a5ZqfJpI5LpySackLmECyZpd48xGPUBcrUiVyXV1UhrSppHL9Ub2n3Zu7PSYS705YgjMxRz5miwDR8HjrNm4vCsTbnKwQmedGKu/bOnr33rhWLRFTkRYtvuGrKlKtuWLxoF6MePGREf/HCmJHjWZfszNVRY6lp1DxqKXUpdRV1o+AdkSDJCg64DUKAJYbqun5n7WxGxkv6WaJfCtzv9SckdCpB1pvpirEBH7s6NVBC1nNuTQ8InuH5RJRosIo/EBW0pMjjYj+T6oEyv7NSp6ty+CVfJXlDzamRM9qnTGnOr3TV1oJkdsJptBudFm92WV6lvyAg5R2mInNOXlM0CUyB7OKamoLcYDjcPHtWcw7zY+1B9AK6GxkQknhswb775+2dN28vgNc1dY1v2vHWE6uXL1/9BLi8Y25LdenUWhnwtCZ+kiZaWxPcT4lW+GPUY3vP7laVzFzWPAk9EoyOB63/CucZ5Hq11mjPCyTCvmytSqI0Gex54WRVdmugNlJUH2w1zNw1M/041ITH7dp0TVEQvkAeOk8Kxpw8ie6RlXaVNpehR67RthWWoEe2Qf8ZZWlbWynzHT6StUA/8O0gpprVmFd0YJo5iDnGdmoC9Qb1N+oUYIEM+EENmEZRfDQEEiGfkcjXA+aYuSQXGKORgHgC4omNhoiTdTzvGX0hH5n7eF3UnAAGNeMN+nAah4lxcwJfZvTpyI3Ib8DQSocXEHM0Zo4mMGmeiJC9EheM9yfqfMYQ+U/8xRvJGiXEuAE+VMjAP48Rf27y4wQ7IXwt7mlGchTw1RPkpQ0SzoVncp/QNcirRAQRmpBWgpd7IdFMdm0GvSZBWBM7MEGkKxDRqI3C1B13gYRR0p8nEeQFmTwXoHX9zYHnapzqDaoZAZsiIbRObPX4fFjb3Hj7jh2gavrT4VEjs4Enp3NELvqUHMGr4/P6THWTyyZvtV5ubVzRvWje6Fa4X6FzWEKWbNmGjpFnKcB0dL65EL3/7rv7d+9m3xH71mJrwvoXfqkBOuVyYDYns0fLrKXWv3sfO2o9Zj41JHyfpTh9TW7uS6a728RuuCbqejhhRi+4S982N3waj6DbwdhEyQljhfsBqZSBujL3XZXpfIvJqq+1eIfU3lhUjj6zGm26WoAZS7O+MXlDMeYd/vznfbt3oy/q4I+zNmzweosj3pLw5tV+X3Gx70tL8tJLPdZAbsAaC29a5S9v3z1x3VbbZdbhm7bVcDkat1InsfudE6cunL6MHrMgfVl7e3Ei3rbo3UrPkLCzCnzjrAwuKERfv4P/KiuBBp0F4Ikn0u8YXAYVB8GEri6gGT++rxRoyvB16bc/TrS3J+DhqqqCgsLC6UA9xqxUAlhVVV4O1uXhPxP+mzo1L+8RcDkpme4yZf7Ky9FlFRXjVbOmM9KxFssZc1gm8zrj+R7jdKBxgbssOO5xxWQ+jUnOTQMa4EyvwE8txU+Fd6OvgSa9Yky5VSvngv5QTplVKwOSgHqmr9yqUgJWEXCRRAMjgXXom1dfrazcdlUFBLRc5+SD4T/gr0kdP07Gp2JgfCowZ+TD43IktYjaRh2kHsDUyO8ynqwyezm4S/s4QrUTVIbB6QIoCEdLCCYI0TcTpFgsHxeSB1lY4zMuQQnFNSAkQImQ3msWMxLgV9/JIF7Bx0qE8pwAR5Ig5tviC5p+RiN8Eg04fZGAI0DrMEOpgwq9yWYBU6J+p5+knr6rtbqHh7VAKmkxQD1Q6rUmesw0EMsmKWra3jB05pByR6WeUQ3hwXNStlXBzctjdcNZaSgfdKpwlDoLNrRWHzQIN+lUMj+/iW0IuQleD8hN3lc1K4SidTw8NYzNwTMJVPBhP7fsvGV9VaA4yxGIetbkuMB8BWO82x8R4jsqYjyaI5Hzi6RyGk79G2Alck94wbCKRotBKdMCo1wmP7BXK2Phsq3MEqlKDpaUZi5Rrfj5JUCLiaL7gFqBuiEr4wHvM+HHmcGH5y3FZB9kYC3WUBFqKF6JJ2D6dQV1NXWTuA7jBTVGlMN9cWEVFtbdzLLLZZC8ibOZoLDsJuIg4Ytp6GjG1FFUuGKFBRhPvroowX3khRVcsEQNZdAeE+eYbCFDkrk+JAhVQtGfYWZKqoy8x6x3OsrAY4skkeipz+sa/FnB8jp9fWdrQVFtfchd5Ox064d2jyiKYqake5O+QFedFxyWVZilzAFXalRZhXL5lr22Um3h3r1wUX64KRmTbt3rzxoZrUJ5BXUFBXX0Q0WRyd2LaxLzZlZoy5pyDWb2J3g+N7F2SMAnO+kaM+2TilqryqS2eZZkBUON5bUWtVnrtuqXZgeygW/x5cZl0tn/Z5TfpVjFRV60Xk1nuUpRNoi40YPgTx+sKyspLUxfYt2nKK0FL5AnF6LPltYkty5LVSbCs908X6iGD5/34WhKfZbivpFQwjgnyEd6M2kgsmcbYiMlwlgmqwwwESgRgpYWJ76tqhnifqJ/gwgvXmaiFi8xVX3RUoKSe9/ZAwCl1VaMzprNRKVA/tNDcrt0FA48yUc6x1WFPn1GWtpRKl3/TAzchnPgfejAyyUt8/bumfdg1ugKrXbYbElSbpedukcK5d24wK1Z3pyJ19/zzdX7AevgDUQX3sDrN00C83EB0bbxXD1MmI5oIzs3Ay8flYGMW0ctGKhdwhOkE3qi6f+LFWPEqgxL/0gvzHl026QbuoqY3v6K7oHfH65aXAXqR/1iRR/KVA58Bn8at7Jm2oIoSqGkWPFNTwHtVHSAuav711Z8AIOYTQ3IoRJEs4f4PRSmUJ2IxvRLceDBQ8Mj4dh+n4TiAPH1+45IiHstbuIhBlIXh1EaHE6fBL1FnBw9L+foxXp1t+j4QRAIglijpi0MkuE2TSOIqfU9UBC1pIVL/0OY/vdKGYSyPTjc1zJy7cqR9BPCY+4MlJQE7tQPwhrOEzQRia4AgQWiRNgV2kkoJ2/VYG2mfrEX/E86IsyGYcvXlr2OvgDaV70jZ3eWaldptwy95uHHdzRcI5Oslsj7fkmHBLyxMNKWi8fNm68CrcyePTR/oVbbmFv8+K59LxblNHIyGZ37S1omg+XkauLjVagDYckF+3mWKIN4xZktsz2rF9Aga0QvnmYTXjFJWdyptZTHK9SVzJEE8kLAOxRUvgWRdRZFvzZ/cs26aVXzp3b3jIYlzZdcM1zCc1MKHWzJwcm3Prz1b9vGXhGECiBjV7FSFq5hrVmO8nF1RegQeq9fWf2jhxU2abYUQPmsM9sEH4CCbz8wDtwFTy1YV7Xg8NQl67b9Vrf4vmlRCGKeSN243zxwM5Df1JTkSyVKBatI32ixhGxAFqpa1Yap/4n9TXSdDCqKlUqVbGQXuSUoBY431qFxA/5xBBmXjyKyWZOW2O8YNIDI24knETbEE4+aGaE68ZMhAyFglDQcn/zXOXL57+U2+dz0HYHYq2epZCoAJ8wV0+Z8OKnvRZjsTfdKqOPox0kfzsGJv5cLZVNJQL0aE8oKaXP+Ovl0Uijbm/HXgwQ5YXbGtwdHcQOOPQWHDybKRzRhia5wopqRtDfOzUdHt01du+HRiXBDRd+ToctHAgZ9/6dLnllezjWUVmuy1dba5llzJNSkxppx6asvmXBsY2oUrI+f+aFlganpD+i7Sbe9toqNhLyBukkVfs158spcvBKvp66hDogI0hEB45JsnsKoEIZRISKmi2EeswohEdiVEzC2Lh4hbAxRA/MM/BPZGVHViYmdE/r9PMJRp6j8jqDDlduYneX0dxTkd/hdRnPI4st1OYIdXUKWzytE8n1CkfyCDr/TZAqTIj+/QsjFlyzpSBJPCuK/ZMeSM9TQ0thw3uF18MEu+B8jKSJycdgtdpPJbrU5nFYrr1WbcNyRScQhkOwVMh02MfOCcjar3dTbsQT0omT/bwmtbR05PObMs2S5y4O7W/5jRBzrgiyJJfS3x0i8RmB2Hf+k1E8UngYAdSoFemESB0+nGKovBXGfS/cO+FLpFdY/LV4BKUz2C16i8GwW5T3Ebwj+7oyepqB3Hvr45rfFeebtp2h2zYJDaeptPN/Ay9IfLFjTP/ukqZvRx/PgbTSFJ7bz3s3d/25kqSAjjAyzkDCyiIEcWSqE9+WokHZt+nI8QD5B3b1wGAmAt9ZqdUbwiFov1uEkajXqhFL9hcQyIX3GPxNHMROobkJBEjxhRtTllYSIR+YBQBHRdgOvWVBUUyZOU0QUbIkAtkokkD4XNHPBkEBAskq53FXiD4AhJ/ZUzG1riZS5ihVZFePWdHY/MOsPNz88otQ+SuMEW9DZ67+/YuzO384de93sseUVOeW27itHLA/WdI4d11yqoB9c3Da6CChNLmaTzWFuLm6kkxKfM9uukk/4etezgfiUjo3tlzlGzB0XXnyku+fLKTWx/V4/2H8LALvmvrJvYrB62ozLlu+Kvzy1I6cyy23Or5jbqNUtOsTQ5hyFPZ+dXmwExrrz1oCxgjyd6ASGSvq3rXwmTEKHRKwQg4BIixc8kyBoYEkbmY3inJ8YgBQWBjgXvQh+/P5Pff6wjIHF/rgOGPhJIblnSLRjPdROneEMR+xgZMXURnNZaEh7auTMx+bRzKQHFj45yaCozFk2fvn+Q3OWrCiQ+kzZ/kRpS878/XPO8y/w0f11clXAAVUK6C/UaPxNcbnTsLyD03aPc0o1jmwbW954XeGeWauHFi95YgZY8NjSRXbLwo6hD6yce9f81cYp5RPKGkL2q+HH5xsi0Bn5q4jtGb3AW6+fKLJ6iGoR58FRvRZPXsQAQYt7iQczq0wqo18qnmhBWxVtWH311avB5jlPX/U2WdPSVP/qRpMQtJy7oP/Uhb5Dr6HvukZcBe68gC4YZPNHCSj2lAWIT4eZtwHMgLo9ZnkHnjNr4NnMkfOeCFDm1v20w87zXkaY94n6BT4RC0kLpoqINAp/5xqixC3RkrERimLyHng4k5kRwPKJTYDgP47QC1l4CskiPs0SIbJ8kn6DUwivJri0jeLRH8qECBhaNAJPo5fCPsvx2qFbjx/fuvyh25/Ul4GlIAtlTZ9rZNnjWyurHtDITRqjT//ApONACirRKbQDnWpvrEUH9Z4XzX13HUOnAHds2cwrBZVHkAKPjP5AVFj0GIBiwsxjINWYdcZ9HP10fOeXo2t2g9TW2XteANLjFtRnLlErnICZsnnrcSDcF99p6v0101Cu7dB7gAPLAJd4PFgSTBGxuQMtyRts+8wJPSeXYN1RF8h6+X6gKFoiyGnheb6HfRdiT+lKiFSSmHGZ+X7ZLSPKVZ1DWZ+5b57Zxw5lgy4m6Ar+02FIpwwOhwGmDOA+UjhN4UPKOlv2MLCDMcD+sGyuGSgGyWahEqTMTqcZpVwFBXBR2OEIO9IT0nekYsOHx1LiEU5Yshi81LaqsnJVGyqfJawLV+C+9xNeFwqI/T8lDnnh22HeWcSYinoIQpOg3u8RrUk9JoYoggPCEIjKjbgPhMT5owIIhKaf4PrguYR9POJP1/kjET98xg+k5r4cEqavGYf+cv/D6MSDZvqPJKFvxTgQun/rNw/MAcsj/i26Le+hN+/8Ac2f/jTJ3YrjoPiu78Ge6cf9Efj3xmi0MTpmzKiIzx+59q4H0TsP94dnP/g12OqLjB59J3rz/S1A/m7EL8RA8ftb0A/vRoi9g+IsxXyf+bZ23P9XCljftFlPZE6CPXMBrhrBOTIT+DsJLTi0JhZ7ZF2REK1twcG1roRYifjFDQoXk4gI2EYiVDgeJ0acHAxJfBlXbZi4M2UWHmGb4pwxr6jCzZvM1aygw00T5W0oouxD+tiylXcEy9A1LjrgVeb40OsH9W5N5drhRbyhffZWr9qcpQqW1TkN0VusFadu/vtN+/F3KkW/Wx5QKnMbxo7rdGo5i1bDOBqqspLjAzRzpUzqgSPinXd7SqStpUrng87c+LLRkx3rqpzZt3e2bXlOAiUF2fXV7YGmzoNV7UH15Hv69i9esucvzGXoCSN4vr60b0mHNMcKOY7eNg2Nl7Ngynu+vu/9h6+xqS1tWR3TknF0c3bNzkP33A1gblGLvjimYF3eEgfPMJDn/Q6byVJwxRD3cpdSCeVvQE4dG3ZghNeTVM7RKb0fjE/MXG9rdlWv04A35nbMTD+lk2g3Lto5c+i0YQtQo6Z68qTkXtT3zKKcMqA65x+QrH82Ki7gt1MgOngx82VWP7LQBf5jTjxANp1gKOjJIuDuwhckfjdMjCeLgLBXAx6Tr7TuTfXdm2879uQ1u+9SvcpWRctq5LZ4aAr84xvqu/rTX2OqIyQ9FipOgIXufInGAcekb05fO5q16iT5Lle+RG+W5IHLAQ+njWUtOrbA1fsTBbW3PPqvl5/77IGeZOPalUVD6/1XX5jQ8tibL1dJlXpYU8NoVNLK37791v9t7ssDoyiy/7uqu6fnvo9kkkzmyMyEHJNjMjMJkGQSEiAkQAA55AyX3BJuFIQhnIooh6KCYFYWD0QUd10vlOB6IAIrLrriosb9uqzsquu66kIyU/yqqmeSSWDd4/v945dMd1dXV3dXVVe9evXqvc97u1yqVvMOexWnVsv6v8W+20HIVmJc4ZtwvWQw/URNxDhwuSfJAyTt6dRDsRokBvuEJ8hg4oRtp74oW5vRtzSAJ+rvbf5iI4hs/GIzKiTnxH+ltrmVBtjtSEvTfNvc2kkBt3k8Hd/4BaiLbsd36dWsOHlnWpvZZtE2g0uyzaig2jVMb61VXsSQFhJA0jgucelGZ+5AlxINvRbHQe/F0WSmpZxKSU/HuzRkrgpsrElPr2kJVJlCmHWfnJJuCprTU6Zi5j5kgkOrA+hKoBoHMyuPB6rXbGnqfK9py5YmrrBpC/zVYvIUskMdgaqSkqpAh9l8icRd6jou3xOoqgqgW0ymX+ZUwX3dd29J9nUI8dBMNPwcacBB/mXX2fvtQh/vugxC6BgajI6BEFgL5x5aHg0vP3RoOdu2/BB4HXqjD2DunwF94WPd8YdIc7B0YSUOZUYzM5h5TDOmfquYFmYznv/dxzzEPIJp4ePMIeZp5jnmFeY15gTzBnNWxCFmqaUmG1/9dEjIJtI1lhrCsiJCgaGERBnitM0RJJsIDWGgGLd4jwvmAvgKoLHE10FI55UIwGFx48cSlE7BFWKBBYQMDhDk/XiSYzGzjhDQAH9AMOuM5D6LLqSzgAIg6EJeidvFW0wy6PbqeMEPLIYCiBsO6/HKYIA1uAxAqATUg50CWIJSxmo8w6YaT7COlFQtataV6NAindXi5E4YU9mzxtQ049vAeY5zWqx6cLc2qAX36MnV31jswiuG1KgXbESH7kWHwGx9TnQCgO9BXgKPvaLSwifQ6tdgDvpSmwefAVxYZzNH0UeVYIW2Co0GQ6XRZh6MQVs53Fd2htG7+04ceIID0qdsD4E+n33GnTkuYVdoY7s+QL/DXzU7tmoLuJQzGri/2cACs/QjXorqQTDadgD/ceWFLdm/gexT64bycJ0pk0MPy2RGfHhGKrU49Uaj0ZEiVYLhXKZRJgMz+EwjTgPGAQ5kacA8uTTFYcJ/jhSJEu0BDrNKjY5xmdEzYBrar2XTOZmcRw9CFrwNJrwuhaDt5Elt500Svmb4HCBHZ8JoezoIoic5DU5/VMKDldWg6rFPXj0qZQMAAq3qKFAp0Dv7QN+vPpWiK0Pegcr2z3PRm+gE8Gu2oS8+yQNbOiGuChOuMbAScKgIvQR+/Axdit6J/gjS/ud/BoI5cg5/6+zYwyNZUV5C8fkJLh1Du0FXp8AfPElZ7oX18BJoemF99Pv1L3DvPRv2oXRfuCqfHbf+OLilo3rDa69tyPoleJLgjCOjb4BId9bjfncHI6cewYk8hmNYwsBg/oXH7C8+wZNNoGfc4glPtEyCTEgimNnH0K+Rc4XxDGh6bySYMWkQWhV7c+GkimYYRAeWQB2Ynq1GF1F4xSz2NyeObN67AAw5bWqs4ufehjLQiZvHvgemnrmravyi2Am0avB40AL7dvYHM6Bx+cRZK1EF+r3aWFx1k+UMqL/1wQ3PxGmElOH+QfVzCUU3iF546ApJLjAEMbsd9NuJ5IZNxLNkwosZGtF5nEC9N1mCFmHm3vVrTp74w333/eHEychqfm87gJf37LkMIPrburP7Vj/1Zvvu3e1vPrV6zm3Pjj91+PB3od/e9+Cnz7YuXn1u2bmDh09xKzulZRPuu29CGXdl7dy5nY+VVbGxYdu2DYuyuXmu+fOd7Fbugb3V0VH+4lvm8SI/fRCP0RO67CEm/udy6OvOu0FQk1BRKI2xAf6izTjJaKM79IXNOJOE8Q5dvHGY3/LVY51Zj321Zo78Z4tuGZYPcl69P7pLvfnwQfiJyWYzxVwkITSQfexrsgdPkz0aRcNzaXg33j/22FdfPbb0zWKnd9HPBrzw513R+6tLHb9niEYjc61CItq2iH7UTNSTmoP6UstnipgAU8aUM1VMLVOH6fMITKFvZiYxU/Gsfh6zkFnCrMCUei2zkbmT2cbsYO7H1Pog8wHuEUQE5Kb7gMNErMssvbeQRUjeiMug5A0QDK+f2Mh1vyn0T65aiD6LSbjB5k5wWhSoxgaDZrKE53UJ1IY8gNlniUfE4zdb/CGfhAivJUz0SkzKP9xxEt4PD3ScHOFO/FVq5mgy8Wajx9ma4XM0c1bi7bb4MVq1GBiXANMSYFxMf/Fw54vuJY/2jv922JKuB7tjW9a9+OK6lhdeQBe8/Wv6e5unWtnMAVMyQqWuUOPwUJ9sk7NOg7nyLJlNbTUrM0IBh4Tp2I6OgJFV7P7oNPQxn/3OO+jDJUvuS/rd6yxwqJ0+J9lUDp/T6XMUTPY5fWSbVOD0ceeyev2hw8OX9IxZMjyrxzPxz/VCi5hbcEdWHxkPDKYif2WO3JyX6SsQgMJoSpGYLX2BhlWwEii35Cd8ACzB/W8bxWPI6TWXvZHxXNz9LGE4pjzSvn9/O4v2tz/ySDtor8y/8lF+ZWU+eCYvDL8L54Fn8ivBFnJtP0nYvGg/V9pxLK+yMo+vIfuf/Qzv4/xoNqZfF/CRYBvxCWAioXt9noqa495SCTfBJMMZxTUHAuIiR0LdXLwhyO8G3H3vf7x/9J7bF8+etXjlg6P2/Pq9R2Z8NJq3p0vVpv4z0Q9rN36+GaSdXfnB/h0bNx0cf8vGdVNss3TGTN3vHuk7r7xYqjGl9nt28nHElbEvnX5z575zoYkrN25YOTH0wkP7Xq4v5zIMJnVKYNz8pR9uOgO0Y7c+/sTWsatmTom4bUb9MOMj77nz3CaNIW1AXedr7gxNnKclfsuJvn8uM5bWeq7oMzIDUFWxfoCCgBCskATePBc/GqgXBIr9jz9CgtRVgBCbkK3YODId54hjXyK9oL5/aSB2SdTzFtW937Wndn4FBD6FfZAkiTJWj9kNj54WxSfaVI2CEwB31Ophez6FBGLJyt9sG2JS3OztQkaKXFtI8PSsan8Nx4ZwUKXPNLsFTzf2PCm3qDM/SmxtmoSqO/VQZgHm4hD4b8vMM54Swy782l2Y2TQAhsBXM7Fd/3WpDTuBm1xAv99pwE++xhjI85z/edmFa9cwfw0oH0+8ZSqpLRi+ZJCxDq/BIYMOt4OljL1bXDKn3jcIjoCj+DxciM6Dy2BSbOCdp1EHamdjOObV6Ovw0Gn0DVwIxqN21AFuBhE11EbD+r76aFgL1SCid3ARB8vEZsGHolGWoz4xon+CD9EAiNyCGH2BLsoYjRyjK9BDhthZ4kIKX+OxqI55gGnFAzQRzwteChf907uQaLz6T3fu5EQ6liyb6/zEDaiJwHUSPwqsrjv1v3olMLn5ABlmBAP+yJHxo0bpg/pRo3D4n+5Iop+6PqojPylV+H2d0XY0Ii4GRY7ajLr3DclP+snXgTAgZjgItxfxgYZ/tv3E1dvI1ZEjDYaRYeAGfa3l8r4glxhvow/6ysut6C30ez2+OPInH8JZRXjMRP/jE/5WBjDLGcZhwDVp0AAQd9LojPtqFN0syvBgzBLtLOLLWioaLnf1PTbk9RNCKxJbamhQTEFUAAVdNQt+wcbCcFMTqYhIE2AglI8ZOFVIF6YOHCMnflKgAv9YJa9S6PQWVZbPIFcplAqV3ODLUln0OoWKV7IKmgo8uvO26O7bdsoyfCMC4z80w9ff19Vm2fNs8/vPt+XZs2p1778upH04svLmHC1oi4SJGVM4Aos5KDVAaJBCTi9jBYFzSK1So6DkuFSXMzXV6UrlOKVgxJEOThBYWfTAbXfddVv54jtvnWq9GA4rjdmlZTkV23PcFRXunO0VOWWl2SOGf+5Y23ovHTc7ZDJMyxowx9pMLFLUkFgfeOiCCRWFupIE4J4um20btDj8RCIaomvtpLnHhROYVbeQNSfMwYYcomt1KnbPBsHrZO3SmLKm5ZVZP/taqxw+fFDTre60a0xtlzi8oSFl1fPUZCsybNP0vAzILBn9qc3Dc56UmMM4cLEhbSa5+Isl67ffe+rK+SXPWtBbLqNet6sgb8OxY3wESI/1lL2D72cd39IgKL5oXfj2oHmNX7SkeRMS8rT8WzGpSyvOMEfybRZb+pzFBvxaq+dwZZr1Qqxzx8JMeyae0REB/LHeYve4DyI+wrdjHnc4GQkdRjW0+6CId2EmSjZqTrBxuCGGqE0MNTNkRZlVssZJl15efMTgI6vO/IA6fjizqnrpykHWPI7PtPZtKsvWALZwWsvx88dbphWyQJNd1tTXmslzedZBK5dWo4jHGhbNkHDt1QdAJFDfRP1RVc4sz8wsn1lZNDzoUuJH4QfK01IsWk6R6bIZjbasTCWnTrGkyfGT8POUruBwdjgiDr8i4roE2QL19eAJ0XMV7PIrk0a1pxwEYk/Em/Q68PdPA6K/FYPFDPCYR0BkJYICjwhkVcERx3OElgqWCNIZUMTLOTa2Q1+ij23ntWCR2cUPfE3iNJuckp2leuidhe5dKHUZ8hXr3pC48pz8UnTzLNResW5hY1ZW48J1Fe0IMhIZy8We0OvheKhPM4HU2Eyj1WoEf2x2gcM79n6iM0K+DxoJjxitaSZUuHfHxSu5deGsrHBd7hWCUfPjNYaLSDSYn/ETqRAj6PyJVt0lsOvCxtX5AKTeYTl9FlkzwhsXQRcutHeDuojB3X9fp1Rs/XzjIZBzJMqILY6sAbFtn6CXcFtKSiqqE3HaI0C/d9OlnRrDTvRnvbiqQ+5KXg8l9no9fTZSb8XQ6YN0IdgC4kA1fjFvjJZvs3roC1DLmgl7P/jzB3sn4MOydx8Ga1AnFVrOSmQNXeXx10ai2pIErXv43WVianLTGrCGPqYj0l2WLl0UjtDmctG+TW/CVWj6iSoMeBiqcYYpDlHZsRGqQSmJIElkmq3YcRRXqoioQF8rBi+gC0d3HKyUGHS1Jmle21dtedKMcp1BUhn7eXchuDcGo788Tmp5Q9KtNLghBQz65HFgGtx0VJtmnNvSMteYpj3aeTGpSLQ90LGmmhlC1p7jCu+JYhBwt39RPtJEggwhAm7SvxOF4hhi0574GmtuVL77/96i1AL7u8svjmOubVLrY5uTvg1uLPjr0Caz6dr+d25cQNyIdHtPg1yLunog0qs7m5K/Fuyy/5xH0D3+m7KRbxfyCl3wwKYeUvfEYBDqQhUO2ntWAv+vKwF/5DUlM2VWeaEcyOYspFcwEbKTixvnjolfGF+2H+zc/1/WEmkG7+wPLJQDaZ40Tb6keRNt84l8zZscvzC9dM2a62oRs5akjQhyiZ4pZSqYemYkXaExQ8mNSIfjnxAR0kLwqGlm8CDplWjZYsqQeOjAC3REJqcDxThMLMEIWyJBynV/351EMRDTi9zogPfM2aeeOnsGeKO7MOvStmTWnj2zltCRFV69c8WKO2H4JVKKl+gF9q970TdHtD1I0fUE6SzIN5iWLDEZ0G9jp9aD+evXo/vQj2UH/9D+eJlY5Zgh5zTDh2tQFMRpQ9nj7X84WIb5tmtX0WWBtLeBTCMzmZl/ozaH2WcJI0iyvD42JA6d7i49zJ6N0xLvUKCEMiqWCuA2mi241pgQWfXCdJEhlny0EduApEdLa6g0Z6LvXngfHRiw7L1djVLZXX/YvPz3N9P2k5yun/NXO2kkYrhHP8a/aOTTgyxQvxv4ZDOuSLYNVyCOQN/hCK4pua1N+SbyKxS1Znx8XDLrwKcrNv/5fo3YB8PJqYZMkS3BcajV6EnteJzunohaMmzvg0r3yp3oalTAXJAYg07gGFyHf42vbwzBdTiRmf0TdYjbzL9FmKhLELEqadujrF7IoyWtr6vNaXGTi/SqQjv6x/Ofvbxs63V9du/VOyypQPVy+8s7j7wT75VMhJjz4+Ism7lnz8xlL7FlYuOjpz37Ka67X6JomnP1MM31nVX3EnA++grQZDhXT6W98U/xZggWkuZX9jhoe7ws2tX0UPjxsh46RP0oynvymCl0KUsKPUfPULfG5D8dRz+4WybzYSJ097Ce4+mww2L84Q9+elz98G65FSeUbRvec3wddliMP/zBjcfZaz+iv9Fxtoz6XDQzJiPk6PKuPhgKdH9kQQRdEouRKGd3s4Dx8sDIBeA9gj48tPHzrQpCWegiaOtEMROn8FzwlFieieKFq92lYVenoJc+eRz9eadBs/PSpr1Af0QrfraDE8V73jEY3hEfNPEgvdDZozTw2t8YRohwdyXKQhHLxVwnkUsJQ/T5RG7LbPEHEouhjgRYVOLbCAsMBvSxLE2WL5e/hD6O0/h/kkfgeUkuz8eJO8PdRYILcIHRx+KFl0QqiMehIyCnq37EyJfEt0S/vm5cpd+GyIdEHrILqI0hMwLM8naxAYRdpDnBL4h//JiQVLuUQYw9THXCZ5CRKt5KYu/2eicmsBGO2E8ToPU4M8p0NWei7cWgq1185Obu1ooPIGnMhIHueHxgknDSspL8Yer8IaL76g9RlUICAOzXdQG7PeUqLnah2962/bGg5vbKJVsOnDwZc5A4PlLs6jjkKoajvryvtBT8Rta686kvY0/jC2NcxUz8XTyhbw1kJYzMCzgzdQzq9HjVEmIchV+qD3WL3UVdcI4KTSn4uLh662PrNxx+a9Z+oD3kGbn88KyaTRnyLIXNnFPsVss0ueMF++zG8ppx48OhyZVFaarfP3sSfZ+akWozQ41/eK6ZfWr+8Xtml2xErU0vHlo3NFzq3ZU7PXdkXTEv35c58Y9gvK1q9qidIyqqOyoqRxWPmb1sTsHTJ1Ds7byRhbmy9PGsZuS8BQm59O247jbh+UQFQRVhRPSQBMIBnh2LPsPMVCsR0AJRLCAcwSbj0Aohsz4BE0bw6AxUCYk9bX2ShzrtrQVlG6dtbxgM2EEp6ZIUwaCRSotreWdN6RSlXNO89vITM2Y8cRnhw8rh3+3HZB1YTq1ceQpdfujXh9CULfNXnoLF42S83JHrDVTk72yeN1Y6YYCZVZmMWwRTnVyQ1oUDhQIaHn8IPqx99+DlobP5W8hD0Fl0+dTKyZvA/c/99iH8ZOqDJY4PJmL6GKiM2ItrAc9YQo6AQ4e3LlOlpLC+CwuE+o6hG1H1ZcgmsZc2lpY2dqQknYi/B68yRJ2abBEKHPMgvcDZEyEopozZicAQMt37rnVHij2QSyxnGLtHS3D/QJyFTdImSYwDjoQWCXVAbkoIk3h/YgZDNFOJ97op6PXPCYI+DIMmlcGgQq0GVZvKgFrJCWiiJzF7QwlgamYR0ZBgsgcHziw3GIc/8NwDw42GDaM/K2mAkTgIP3rk+rvF58baShq+Kb7rtsDMZTOmDMjWleM/XVNDSUI3WvgHLZ+fGZNUPtISNUBElRCx+gIllbSLETRUKtMhe9JeeaIClgmSC2q202JS5qu7nM9flcm2yFRq2dWrMrUKB0mgV0zM9LzbPcpk6VHgPWDIHqMhPSPd6u4qb+yzf/6Q7pjn3cGAexTbXfjbb9dJ0nyOoDtJP1ZElWAAZZVEVf34J0w0PUeXRg1gJHh8v8Z0YEJOhUAwvPv87t3n+TGfPxIL41OCVBYGhMxTLDJkJld3hx/5HIcjXfNguhZqptourN/kEBwmh4y0da8j4Gep6osBj2ptbeibEKhDM9Fe/D8T1IXQN21tgAEDwO1gAGLmfyRhULgt0hZtY8kBtMVwsfBw1e37momPNS5CnzlCnzFPQz9Vpej6OsuvT3j/xOXmCN/f+csPtFpzZ7tZq/3gl52YL/uWOlzCT8a0/pWN0UjLi/wpTXa25hT/Ygsb2fhKRxv1rwTeIxBMPX1Cie/OFaURN34/THo/8y/z8gfRr2g41s4i0e1omFih3DBbojtW8DrJViz5hImPJ52YDm0kq9MEr9SvcwEX8alFwlQBjKxYOQx+g8PkimtZCExszSYJeuvv6JR0c+xSrSkvz1QLWz+RfAb3DzLk5RpPnzvH7u/cwS2MTjt3zqtnF+nzzkXfZQPn8vTRe/XeXvjmmt745g5db0zzDqYXkjl3SNRyS2EarnHSwxIYt0MuYGqYoUwUSIAepAE3puP9wSAwAkwG88EK8Bw4AT4CX4IYVOLPQ/B2PBQ8x8wTaTbxhuz1SEI0TEFOJGIaomAQNAO/U4iDzHjjy5UlHjyVEiqgDQAz5o3N4hM5N3UUTbDTyeQhvi8R56+WQHxYI2udmE0jQ1kFIOIdb0nIF78Pz+qMNtZCQI48AsU58nHeLAJ1FPJXsJUUMIiKTIFgItqmOMckkb8C2OgVikLqMgpB8Z0mgpyHM2gJAiPZk5KRSZDoyRBPg5xes6UYl54XPRdSP1YWXDFFxG6M3BHCnEVAYqH1ZCOy2ZCHifsvCJSwHiEgMYvxHh5v3oDEJboRcUuol2mcXiLgDHCWYFYIt/mAib6WgvZ51VKXxKtmBafEiQNiHJnPm9kgAffzqIFF/DpUL5fch3kAM0V8cuEsWTjqJV5C73GZit2kVEIwICLWES+M+FF8UIRmNYq5BJ9KPfrUAAQj03CZSgSPITUA4Kg0s7lMNdaZP2RzYXZBx2LVGDHog++APq40Z9BTks43D29sbm6f/vfVaQvvWD4Cfic1CGBCJFg4zhwbEXvDMrZozCsA8gapJFWdJsgU6Rk2lSXdZdUbFUJgnEIm0wyDTk86r/KpWSjvI9doLDWgYlG63STVDrH0ZVnICXxaUWFx9u0F5bfsuNOYU+KoUMJRIDCt/+gswAschIDta6nT43EhfWH/QSlqnSJHBjhtnopP9zjhcLVMqhwXkAvAqLe60i1qhzVNIZemqyzoB9lIG5eWbrQPc6WqBthUPFvq1wyxqXMUJrPWdvU120iZw5Celp1Ro0p1uTX+ECd7Wd3PkJXvs6ayF6Q6llXpsvNACmr/8rHHvnwsOHcOEOQZ6zJlHI++k7IcPA85iUTh3IQe1PYp0+hZVs7Xvs66NwDLY4eBaa+DZXXVGmupP5PnBDmUyASlVCs1cHPLOKVNmw4hB36RAoMFeUqpTtY3A4xgdTXePreN410tQf8YlYX79ZvTDk6VWGCmTJknNwDIGkZDI5yJjjQ0SqVV4ffeA4Br5VLUBsBqNDlqWSbUKk//4i3YxI9bmeOp1bHyMf5gy1atW5ClGszVPOc3JYXHpVXJVC6HbwHPj3YmhblqjTQ/zVWcazEMmTPnvjkfL8gf0L9Okr2g46Ii06IrXTQQwoKc1NQ+hZDdO8qsz1TIZeaMDJlcbVRnSJXp+Jtp6qC8NuDJrXDo3PJUPa9nOcADhSSblXDQkZnVXLomoLVkAKs2Rc2qoS+d0/v6BupUUo1KqmbXoH/cdJfcwKpTNGp1eoquZE1Zs8vugHLYh1cC4qYSPzFF6tHZK7P7BAbKYFGKBreidKUsXatXyeTpNpOUfSYj1T7DvSrDwC3P2dhXZVerwzO1GjlYspqt2VQ0w56aoecMGau2Zqr7bsyRaLQzqnRVqxdyuC5vnsd6PdsMekFqXN8fwvUHly47eHDZUuTBLTFtOe5VCnbwgJe5ceNwtRtvGslr4Ml+K1KlEr32vgzYYlFteytU9PpDKpMMACiA8Tm4Q0pVRbxUwhMfk0Bm1BkULAS6skqZ1KdSZWThOoltUGsHLVcoA/OCgUYI+1+sLF1UXrJlKieDmLIbLAqVYtQA5xmTaVeRy8yypvT+EVAQrPY4wNAG3HhSjHqO56SvTe53d3BeQKlYMVCrLsJ5b6T8wAAZ5F+lXHc/6k+7hwYCsOE69RfbOEyRJEIF78OHLJ/Af9+0ZerULbElU7c0NW2JjS+bt/nOX58BXlD20dbfPjA1n80ZNH/10JdmZkyZ1DTQoxy+Bx19Al28+GrLkpoaR0EuuWkqvXUqX9T/5np/tkXNyy32gtLBI2bOr9o33r90yi0jGvv7M7Us1NpK/EP63RQaEcdES/jFyqSonPXMLOJJhenpJYggKvaASDYU46Ea8+R4APdzdCIodIkKiGINtHP6hD2zwSTq04kA05ijT5x57JLeWIRcH3QEnf5sw4bPQAkYCUpIKLbgepTlxVqtXasFq+bWuzLo9D3DNUK0Wk6YQb9Po9e/vJ4ez6KLZ9kmjzUaSYCZ820bPkOne73tjRtgMseGaRF5V7s2XB9w9dUtJrKAxbq+rgBb38voGn0jisomrV8/SQztPHs2eg+kqIQUJjdhMyYTMd0tlGcj8yzMGPWqigBdmDT1VpsqNguRqxEBz7P06itU0V2g9u/1gcnVV9qqJ0+uFsLVkwP1HEP41FgbiIjC+qho196KIoH6VpKMpYlb65leeUrrylNc1tArC6ZUcF1WMcvOM5DaACXnolcWcXYY2FYf6JWFWFPPPAL7/0V+WDxt/f8pPxBzo/9n+YFd+bHgXsv8JzmR/nQu2H/r/ZivR53c3SKuM6B+OgwJl5XUm4gn7nrdwi2grjda3pEbU46mFiqOo5MGq1KZna1UpunB1zZvNsrC0fX4MngDX+N1OXx7jo43iNjRLJHjEf8AdhNBo9IZHXhv90ocroDfHtDhva6Ehi1BfIUNo7ZIBITDYfRtczP6NhwG4UgEteGjtrkZaMN8pB01RWLt7ZGdOyPt0B4BrTQoVmfCdiHhaSGXIlr0o1JRgvlClYx0pKfiY8DBm6gz5IAu4DK5ycyGaKviXFK/tnF7dHKk5ukmKe6xKNLJIOJkNsIzgGDlEnGJBG+d4hHh2ChOxUaIk9IYbsHXcHrik1e8i2NAwk9tBxHo4wjR3wIJxRjagiKQtCJyQxwXBxcMlymzS/7jj/uPGNuzVD3LpnMlSgiSS+ky+d2O7qISL74OvOF2FnDEH0VmdjJaVlIS/BOzzhKxENFmwqWOMZEOHMnjrRNfwEUQfUKQiMQtLIURFu8lG6RHFHfSS/ed8aqAdGkjJl7B9RZ/J6mA7nmgDs/lGKBL7h34RGJxkFYrcEy0iYCb8OHsUuoqGNyhKX6xeCSwoyYxtjQ72lQ6eCSO1DDJ9jQS6t+YIQ7YKkHQnZBsENpNnB32sAZaeSVD+ZISfQfsnbhhl4KT2ekvpjdlR5nEqwFzRY5T7GNxgwD27FK2FV9rwomy45lI+FNKYGOl4G9axdzEzKCWlV1gg8GusNlv5qmjEtwnTQT4we4OELztEjpXJK6mPNRaOUTN0wKi52viD1TnuN6cSXgk0yKVP/SQXGpR2SyscutWVgEsnXO+aBgw/7bAlj45YDA8NX3m/Ntvnz9zeuHs9PS1L0zLy5v2wtqZbN2Y6rLwyGpWz6My8JchU3rCD5WUuHl4N+SfKXZyYB3g2kEJOt23rl+zRguAY1GJIJ328jSp4G9WaiCUZDc2LW1qzJZw9wRreVY6wBeqZgGCdWywB7YQ31VPBM/AyviYCtIC1Jj/yMKF1AUZ6nXMR11n2jlAjbWpFaqew6WtgNdZRo2fu2EDnLZh7lwwYR/67pEVF/ZN2oe/cQVQw/SFL/59Pfrts+jCM0dAzhGQv+6HFxeCccmlBF74fJ9X//wq/vWJDekDzqHX0Xf4CRdWPALU+/ahhq0/PNb0KPrw5afQ7w/NfPIrVtIT44rtwath3pLvRduvw282ubqN1MwUk68bdypiUHW2EcklF1YZIpOrOymp5/BwgPtO4lprayKyiSSLR3NDuxNPBhWtrYkrkXhc3N+qlNBuoqcaYMqZ0cwCIochEjiC467rku12SXTx3LvrhMKDJJJwCXmVuJpClQaDxRYbx/eOkLRh2slcJRSUAc+rK7Mh5cI66OgGm7Ir1chER7C/mKatnmYCf6FLg5XVBQXVBdz2Sffs2rDrnkkDF8+Yzekb9NzsGYsHdjI3iuXCxPNBLMxG8CM7fuiGHuIV+KU0VDZoUBkNaAvI46NT65ZWOxzVS+sUd5/71cuCwyG8/KtzdytuGJssv8xnhuJWq4WCWZ9QZ+h2f6XVhzxQl7RATy+DCjbgwH3aYiNWdWrW5MBN2+vDSfjIB62tH4h1QrPc1HXOizaTdw3dvmRglBm4ZPtQg8ViIGdc4oyPoE60cO5ctBB1JiEv8WAH7hE7AJ+EwNQ/Y+1z323Y8N1zazMER7ZD6HmaLDfNp+PRf1bCXOAwWhzEPBp6Xbh8/7JY7VFGxn4jq1l0d8OlhrsX1fz7JamuKO8Y0PLXo2szM9ce/WtLT5kvyXu//y7vLG7tLtwP/p2sj2bHjC4LvjDr0qwXgv9+zs8+91xUve2dnJx3tvVsT4P+d+1JIjg8/11junMePDbvzv9dQ/Lv2OEXm1DSd9AwZcSbHN+LpIQqpCGf1OtQSwWb1GLodZVv7875NNbq7FvUWHJzXm5u3s0ljUV9nVaWi94odlr3XWG9mlof4104NHvMuHB9fpUtPd1WlV8fHjdmduhGcUQPJnFTkpyawaP4XPxd6Epu3LW5zisGcK4tZA2I0nic9ZAhGAcTE9N6k4PeYuqRm+7wjRSASxwUgFjsYotoosfiyZE9XOirpjsXCHo9VoinxfL5chpb7FXL8KGqmJfeVFVW3W+2M80+427VAklzYyxy03x0umHbdAUv2TqlxDeYi9QHIpMKB1T70CjbYXJsL3Chj7yVZNqb2icL/DKrz48k2n5HdpUUVvsit/uH8iBS7AwWCffO+NFfhhpSChqbl90EsutuaZ++DUxpMdV2r+M04W9cxBCwLVItLtHOIxUkABYBrRlcLYG4BYgr6dhVF0EyRRJYkSXzgrhFn06062P3T6y2V0+s3uMJB+qJmm0YPusMCg18tRhv/+WWJZkGy/Rtcx6QNqjvGBFr7L8gC0X8u+cOK9423WLI5CPVvlgz1BLTz9i315gz/vpArhMx/jwnuN+eBr6jNqHfJhLA7b7XB5Vz26brJHfPQersXDR/+OxQAWRqxszd7QTPTd/GlXfh69F1XA8eRYcw04gPYZ7Mr0QxS8ghqoN3oUjzcVUkgZewhP8UIYrc+DJtMgJP8XdJVAVg3QnIad4UxxUJkaVHll4V7fiFuO+IcuCnZo9E0MNzRUcPVFoq6njUOXf37rmL8oZM2D3Xlw+X4g68e/4Y9PTEe/cesGVV+6xGMLKoEoRJCH2ars/VaiuLjXrQZMv6MrY8xRyoz3dDdYzOSKHlsm/h/JF1YFRuEE9BT2/JIvVeVlLr86BTkW1FAd62rNYj331+ty59fePc3bq/7p4bmzFuq2m0Bb49aIg65PBVy/fIG4uvMTiwQSW1mtzm4rCsVR1idVek9YHsavXJcP3c+rlvVebeEmUMoxW1efDhQP0aRxH6yFcx0PfeewPzpCMCOYN127raHp0PZlHsO9ySQJcDvXLg7mJWyEfwimGgK8FNi7JcBD+WABeaHHFkJL+DakzEZwWkW5N2a+EJ8nJc+LW2/NYs2H95cyOKNDajP8Q+bWx+cgX4eU5s5Ixd0qrmRknbpNivveFoldXDanVyfyYbjrbhsHRwPoxMyC7lw/LiTFRbPRn35SKtCpSnZBCFcatHwpQWRf/+yEm0j3hcOXpvc6N9xZORzdOHz7I3Nl9tA9P3rWVVJR6r3eUzZnrsHmueOq9vabZG05bhnlxtt3qE/Spf2ptUgCXi3RHeropZSmkWLp7BxSYwoMxWXCB3r75ZAUj/FIFJWFdSEN8GHNRISVRG5yysR/SGS8hYGogDwhGjW0LLSAdmCwsr2d3WpbJyb0GYYweH0Rlnbkl9Keh05sBfOUqkM6ScsJStLvBUyKZbN7DhQk+5bMfan8vK4ZTYkNE1iC8u2z0ntchZaA7JVwkrJ6o33jyqxThrlLFl1Nj1ukmrhaW8aqbhNj5SU6hWx7aDP3gKawoUehX6CH3P/c8la13JgFy00drHDnbYlqaDT5VqX7XfjWZDl1pdUF3oiT0GD3kKr0b8YLWnuWLOfQqFTZsrQMaVMuku+dgls0agm8DEEbPmj5ZvmWRLQy5zPqaAC+unJNZ0Sd36KdLIdIq4dWNqVy46+XYFksYCMYB7rpeSPD8dDboHg+uJnyHu6YlsRH73QJ/qkiEiATxrdvETU0obS8VhYkgQDxhDgvPuN8unDykoWTQoLWNyS/pE7ezqWLFIDO+fM6jf7j/bgZ38eDwmIAZFTgUbSighTDOB5qZpF/r0L80uJ2NBeHxoeH2gCfYNDY/snXcR1prGCpsnX1i6AG0PjxBJ4ZwHXNA1d3dH3M5M3JLWvd3Ui+xUpoX0TktyEQM6Nq6ilAlELFUC2GsWnBINBRukDdDiVLNxhEpx+Cjx4KHWYCL676HEECI2axCvcZaiu3jFuXWQTq40gEy/eGn/gm2W0aat42Iz5u7+q2733Mb16TpMrNJMtctedoTUQwaFihsxfap+xuw2WaWqDfJqH45ulYU7q6RXbsmtfAtTpvrwSXV1dqCeS8+rVYw2bNMNzgmMkOYNfO8938AKH/qoyLGmPsDeZqk8cHTyRPT0mPm7Mb8El+b75u6eMCRvESHGqJOvC2XZDuytLAIjjVZf9WatNlefjj4l4SwbaNIbiyvBLHNKbHntQt9laCG0NxaBand+fcdfgrlgVN3ICeiUx1dbUkZGvqwt6HSgvgvvRXieY5hUykOabqyZU2zmDWaBxnoVBL/LiQ/UuY7XEzCIwKAGuihtELFfbjao0Id61WaVAf1OZdCr2VSVgVMPBTK5apNSD3yvSk0rjbJj+UCv3KySy4bh4z1G2UW5nFVxn8iM21R6tn2ZSh89T2/O06uWqfUGebRSpZDrlLABjTUYwFOx55Q6uVzNnlDqDLErKWmCSwalBl3CnlScV8uYHKavaGfgFd00BC3xsnhZV09IG1FZTDDDXgslTNIiCVk04fT9HTeterR6cMkZqUxqeNAofX2vXi3qOXsiFaOnja6T5KPz6Ns3ly17E2hBHtDS0Mc3WIlgq8Y59OhPQy6grTq1VgcWoEfJcwjcTUrmw7dM3JUlZ4PL3kTf9noequ/1IBxKLnc+pjXU2xQoDgULiBEfHqT4LhijTOIOqRJziMTdC+kujn8v2XVV02sNCU56aLZakS/RaxUcpzGm2dyGhmlNQ9y1Wq1Co5UGVBpWmxcYmX/fG6+zSpxUni/V/Yuku9583Xt9ZcZ+fv0CEiiYrdePVHFQxXJKtUYpzBjaMD1drVYAqBxmNHDazFTjie07j5NUavZfpeKKblDtwHSDb0j6Ufhau9DG26lOCSPjLIJXBkIy1huyyICA/2E7IXSxJtj6RNNgZAftJ9BnsBW2xprwOWhH9hPA0YQisJ0IOskFmoxEZ5JE8WTkts+bQITpITsi7yS6OPhNFkEGLCGvjA95QzLgFXo3XXgGaNDlcW1N6DKwZI9di/qyeeAt1Bf9DVhwLLCgy9lj2YYbFPJXxNhk3HGchNwYwbdUg7fwrX/DjzuOH4dvHAeu3qBREnn1RRnDZ+F8Gpj0uJfLWmYUbqGRnqj/iZVVPq4+FqROfKkvFJqKUP2seMgvqtGrAQVaAwSCq9gGTSUVMKGpa3Coqfo5kQgSlQ48PafwxDBA1WYc1Pk43BryeEMhryfEtYSGhULDot5FrYvwj1u3qHH44kWt0doDS5Ye+PmlA1zLgaVLDuCT6Gfob8fvOL969fk7jrNPIfQ+OoGWnX9owtj7z8IR6DvUQlwmgDUcWJtXIbt1D7qyd+OXjQUjFaPtjZc37kVX9twqq8gDC+4HD/+hHdwF08TXhyB5e3AyeeeiRYDmoY2++ADA26UDKBusAZrVH3R8sJpTLLx1wp7zy5ace3ByTCDR+DPg13Kcf63/gZcfRlceap5eusp8m3v6ooeA9OGXH8DxMxY14zYz4xrDPUzpooHoA1NQRrwzGbuVc4ANEI/ggiWu3I5noHHl8RDROvKxoh6SjcO0lCgW2QDbH21BPwI5WAnkaPeL69e/uB7kqThVdr53yck6oLDZlJljMgecRD9kjsHBTKAY/O5ib342TiLPKgw7eGP14OayCY+5PY5wYRZcBuSvHMNP+vHYK2Dv+kkT16+fOCn2eFp+Vh9Hap1pMH2KymarOYm+t+HAGPI8U12qo09WfprRptZbObXLavanplr1alsSTpjABJkKqo2aWLn3AYmghk5PAQ0RzSML0RIyYrqHR1R8ivfBkgJIeFeo9dglWrP9OhHyI5M2TJq0AfjlWf0y5Z7VLcvT0jL7ZcnN2QNG3eu/p8hslpnLzccXD8V7mdl8vGTbTQOyB72Gvn/tNaCEtydDmrKIPGlS7EdjCp8qTcnO0utT+RRjfr+8gLrknsL4A5Y0iI98rUQdyOsH9ED5Gnka+LInjqkoh3gRl1tPMKzF9USq6YzJQdx5eAiIXDumGl2sqCSjavyWP6ITzzyLTlzaMjEMTxS4wH3u2iI8/38VveryFdVmgfsdfGRCVezqs6jt0ubNl0D4WSiEJ3Z+5CBAikW1DnQKBB21RX4nWu2I6ww+iGnALNLmeEBMaTwBD0Mwn0s8AYdJDS1mxkKU0CFubQHeJGpwUfW6YEmgGM8YcJTAmvUW4ucuwJPPxAj8h+hCKvqhCgRGooNjTBOW5gE4yDuiRGsFd+Rnfmw2fJjhOQBB/wEmx3z7rZUpNVNA+INdhorFjg9UfxTAS+pB/azgNABbK2LfOWbBF4pi1zYCAE6wxlPFS8bwHmkxTO/r6hfdPqMc7M3xgi8CtbAYFECfb+Bfaz68P1QEhSwJAEWwohgNdMSQjr3qKVIDTFXyuG2d4fokvGw5k8IsxlztziSKR2afak4AFZzbKBD4a1z/uJR0VpBJl1wJ4A1Fxcb0KkQ+lYbw+SGCPYhPCqiHO8LpFtB5AXXVRnQRqfOLStwxRS2P5BG7x2jAPu9ItXqcxfixk2XLNm2dwqIDwsoNd0+Gd81m01M5Vb8hn6zXYoZAArSDh7z9NEgxqHAngYv2Z9bKFXyNegF0pHGqVKNxaPsGDVThdJpBlaef8SoV7oUPZZbKFVyZevTaD/Ek62X00Ydr134IssFAkP3hZzcYYOB6q4dkxzEK1koXrG6ZIIkdE25dtX5C/3cOQb1GJXc277MPwI+s0cyBbhunyshm6z/foGGV5LWDB5x9Gpi1SolBqWzeY8Pp+GrVglKZKlz/aYsSkiKoBv+Jvnxtcobgun/CR6G/C4DqiJoZJ0G/AWR1ze3BnyuYJQNmLsR68EiidZv1EFMMNwhCbxbBH8GEhb3j299+uTJmbUXf+9FXEXBr7BMwYjAw77l0Hj32tuSNvuyMs/deQt+D+8cpZqLSjqNHO45KGHj7pm+8ssd3giceeRrNj825974MVO64CtZeBIrQbnQcfRIbtVENF64HlcslR8lNOFPXruL2Bfl36IqCnfF6oBWE2AoipgiRPsRSnU8oWLwSGzH0IVgaag6Pg14bIGY/PhKw4LxzjMEM1YBjN6M/otr5ffUDH5ylUCxW5Xy9NLheSK33j5ZqFKm8ZXypZqve5G/s459c5y4vk+Hpk7mPtf+Tdww52nr/vLRc6YD8sTPSNDvuBJikcHD0ox+hy9cYkH9lPbgJ1ILcSehPalY3YjHM/01/KWb8AD/CJVgK5a8OyB1amibI/F7I9c2Cgl4lZaeMUJTnZtbdEpjw7hGPZ9SgQ2D8wqFoHnpz7TXm4uHplMZx1xi+g8qLXfizUURmSF3LkjZv6PJFgFkDfEEN4S/23NGQk9Nwh3g49SL68FczZvwK5Lx4X/Tomn791hyNTlxzFvNreiCcXbPmLLqKvkFXz6JP90RBNWgE1dE9Mw5fQggzhujS4RkiH2ZE30i+omOqlowuPK5UUtEVwOCg/AtwBX343QLOg+AQgUNDDgnjcOLvQJ15cqGAhJMIFRJLVoiaO8DT9349fOvt1uV37kgDb6yaN2sFJzitQu5Ns9a21K77/QO1hqjBWDhhwNiFOpg+CE1AP4xqcH2Jrowdltd3+ZPPHa1Zif5yuozrP2PLI0dfnASCJ4QyX2NWrWt/Mzo/zSRYy9iZ82+/A6hv2XKTTZpfk+9+6AxCG/tPHJYzbtgl9LEme35hv/5vXULf/fZhZ4r7nQ9unvvafauGBSSKl1m97Ux8bBFEHyHEpv+Gq5am69YDA8kLz4xBdZWuSErE1cqYHdCFhihdaABNMTtZkJSEqycDO0sTRsl6JXsmKuq3JNYTInGdFnE+a8Zj3p9xvixkZdjgJ2tlooIz/o+/vU+XqWKQ5YnOnpcupYmupXGPcXvuenNgaZZPzaboDRz028qmoG8La2q4L0EJPhQ+d16LcqExZ2hoVYM9p9zpMsn1xtH984eW+V06cL6Gj4RHly7fOG/flJsNsm8mPDW7ppBPITd2fFlY8z6YPjN/yMAipbU6rea1AwdODvP0CauUCktBkX3GM0l6W1wQjxgFzF24dotEbHpoKgO09eCOy5VQdwlQA8pIL6c+F6iHEh9L3Sf72IBRTVbC+YDf2AUgjAvrMuDvIhGKifkaW1zBigguLOkg/EKg8Y6ZmV840K5W2wcW5s8c69bCd7qCoOvy7wrHbR9bs2HKkHyJd+CkO+urljWUpeoc5UOXDhi0fHiF0yRcmDZ0+MLZY3itLztP+etb4Hg0IE3NpXomrp5dnmOEKUWDb99+5+S6bACzB0/ZMnjijjF5YBPQexsKc6sCJlMwnFs41G0w5gSqaACIl8LDau9cMriwdmAh2fIrBxZJpe5gaVFmZmFVRVWuJjRn04jGRUCmcVrgoCOP3GzNtPbp269P8aDBxYlt4NJNVD6Qdo2RXJYQnK0KZimRNrmDZqNAq4yl/nXNVE886CbIKphbwY0DfwVcw2o2B4pgLkEz+RyZZHAmM2c1S5et+VCAuonCde2mxnY21gSMVDE/WA7UrESjMWtUFese+mz5im9+eXCGU8pJ5Cq+bT7YCPa8Bh5U6IxOv04vMxXoeJPDmmfIBRK1VMZLWBYAydxi32q0Ic3tUav+J3uYwaBQe1Zs2b5+dkXpuDtW3j292OQcKzH1L+mvRx/njV9z9JYZj06tSo01Dayuu8mm7jd7QVV/iSTDoA2NGFBUMWHZpD4yjYwH3LKiZ8dkv6+dVzSqj1puyH/ILMhYSJSryR+E2kKJoARPZlYX5ygU7e6hRqPC3G9stqRw1L0Tbrp7Ul2fdBlcW2UPQLN7ZCit//L5I4uK6yYNd8b2jynIM6dOyy99FBoLpjDJslAXphtEY2lekv1jAkm42w61K+SO4zcG4niOfK9zUd/yJyyz44ZJ1GV03FE1JhyEuIiHa8nOhpLCXKQjwjLXgY+ImgFMQ0m3PkcTIVdN8b1ody1q2CWFO/TEzA6Gez+JBnvUj4Yi+/upRpcpmYYWm4n+2b/GvfwXFYrrisNENCaqURA/SHiGRKSy3UVnk30xRW5YazgGtCbS6GPvc0zbdWUWw8NuXFENPduElwmJbcLdDeflofZzXX524jbXFrPx/6wexhKL6mPHRHvqV18VLawT58eOyaL2/65qHrjx47rOUfv/rr6MeITIZkoJLqpMBAiK11LcMv3/qoJ4C2LkVjlqF7N+EYhl6Wz676oF9keMTAbsYoXgp9HHxvr+F5UBuuZXGXE6AqgNc+KQNFMHbVYPTNFZEnuP9SrVG5cwHmt0I3ha7bEi8dApxuO9KGPjyPOVuLaprXaoS2ZsTlj6u+myQZf8JAiZ6gpq41i+AzwB8tB5NA6dhwwpzs6z+nT9k6BNE1tEXgLv1XBh8TrIA0804Itnd5J0K57E73bj7/x7Oka5qU4KFcd0ix66PxZBJUpkq5uaxkEKCNtlkpyTy7elZ3dQ20oYFi0wmez06DEgmmOyFBOsoy07fRtNCXHdcr/DX31bOgE/pKhXHms4vfMi1Xm3sm0iGBZOTtK0tdE5U4eUkUipni3py4y4tornUV43n9AgDobwTIp3B3kdr3Pjf4CPwhfpZn0skpISezD2oFxt0OFTiE/hbDjb3pkCw51N0M61x9r5H4yOjojRLlxjFIoff+QVRgdPTgE9Ve3plF/iflR1yi9wP3bEuB8vdMqT5aQ6nKtAYrwRgETUncP5cdwgJrEwTLoVyTZkVAYdsgtSfADtAvdlj9POJ6R4sqg3qKQShA8SzNx2hI1S3HgMeGw3SgEJ9I5hrzFyQwdmalmAAzzmcRNrF5kC6ebE3sTClF7vRSRxFLUdvRJeQs0SQxVCiKy5EtVHKDoLAe/2PHyLZnx/68ynUUeJU2lkuRTerXZorGoNv/Pxb8HD4EvwMKxPgrAUf8CHfo4uPKV/ulTOArVCY+Ydare1sHCAd3zs3iPA+9RTTLdvsK58+yh6aS9bmcSRrCPg7pJJsMuClYAIMbKCWg8wdhWIyGwDnqCHuFHgQ9QPE3GEgudGNyrZZTQb7Tt3b8vYtBTfg6tyy2rLT4Pp586BEaTAA+vfQh1FVbwmhWN5IIdKKBSa+qTYFPue7572w+evL3dk61d3Nr87pLhpwojK+R6JdOtXQP8V2noEV4b0mQFqKaYznJbTYLZQGrCU+gZn3wwku1u+Pjxz5uGv6XeUcQz/D9wCJYycUREqrcM/kAroERKVbvwP6YY73M3AGzuKPmJXxI6CbG4/CcPh6AKJpTK0kdfaJMf4ekqHJIBxOVkPC4mn0oq4BajeIjqvCuJIPW+WPC1Hr6Ff/PGeaXnjBo/WLxia8oTv4dFTllryzKEq/6yZUtXtZeGVYFQn2/EVmopGAKEVT3IlDdNMD2TfJZWt24o+H3P1Zz8bvdUK7lRImR42uCyR61NteNbgwA1YwnQwXPknn8Q2ffIJKMcDAwMOwhWgD/pd7E70HtPDXwMeJpgwc1P8foHiS4e8IS9xKs3jmWGITm5EAAxikyTRAJMjgGdpRIPFH3I5yTp5BQQBqrMW0DkEizmejGSDvVtZn5k6b15qZr1ySsAeQLvtqeCIq3pw0cYNTQ1GuaoOtN0v4SEAxz1/kkhZZRpcHhR4iL62jLIo1QNJ5rk2x6jFqWVlqYtHOZqaDtgLTKF6t3rJHYMjUtSiVgJh3Bg1ABwn58H6iJJtTEvLUER/PUYGWFYpgdKZZsGI7lHLoGzM/wPITwbJAAB42mNgZGBgYGFkK2CySY3nt/nKwM3OAAIX7/o9gNH/3/57ycnJJgTkcjAwgUQBQ38MkAAAeNpjYGRgYGP4z8DAwMnw/+3//5ycDEARZMCUBQB5uQV5AAAAeNqNVM1qFEEQrt2d7p5FV4Maie4llxCV7EVR9CJzyFEPEXIJqAheo1711PgYvofg0RcSEZaQmMT26+mqmerOxDjwUT31013/E08fCN94l2j0PcHRMCaAHfV0DDryACVQtH8AuptolGn70bKlL220V7J4jjCR53MZ8BH8d6JjxYaSPni3LP/D9r7oDCHaVenuJupN+L97u78HvLA04qfSqdT77iKwLxX1VMfrct4no31XcjsOx/DlC7B3XmwDaPiehxGu58+M73K3r3NjsryHH8aHkNUp0b0WXsWRctlEnbrIt+RBvU8Tr/LQ16SLW1Px1fTyLeTktVW1MT57D3GHQ+3zufC0muIOy7z2tMJ0B3k44NxU9mxsVzO/Pc2d5L3nrzvum4ixp2bMeRNeVfiK851s7nw4cXS2Z5yKX9Wu0Tkx/Vw1ro+v8xF3LYAZavA8Ar4tgO5f3qh4Xmzev40te7roFzWbImt4/mb4XyTbcIQanEpOmL6KeQLewN5EOOTBsi+IaSbzCdtj0LWhenNeLsvsC2/ks3w/En5F4Rj4fdF8qdptTD6DTsKJkTkieqzqfzsC/BZWoPYZMG9jUD1s/Nk4+N3tdobgZwTnU+ZZ9EadHdEW024PQX/TUrcH0Z8h6J0K3dWBWelmNerUxT6W2Z8m/X3c8d4V9bdqP7gDulvOE/spu7mNa6pterpS9/x1qcf0/3djxKb4rGZtpt7YZn+e4Hwt6YU/wKny+Snka3Zo5+WogLeQ77Df9/gdG/lT9r0E9K5EGD98f11Qya+qQ3uGj5fqIv66ONflmetbUwj4v27VnanHw4H0leUd2e5KzDJsflrWwfmXYT2X17m7qy58KHuiPqRnU/4fypP0dl30gMjdBb3hCj+6Hviaybp+NKmWZL/193P8RzbV+gbfc5Pl86G+4D2+UQ/zX2j//vX9BTucryIAAHjancJ/U5IHAABgMjIqM3L0SkiKVIocmZEZccSIHCmZEcdQiVgREf4iMjNHRJwRIzJT51yROSJjRETmrDWyMkblqFkZKUdoZGZkRAzR6zqP220fYH/sngcEAgH/SyKIAWoEOadRp0mmWaJAUaTpS6bXgHPAveDPM0gzDDOmolnR9pnCmVMQFqQR4p2VM8s4KzKbObt+tnsObo42JjumOsYxN2sud25bbHascR4wL2+eAVoI1UCH52Pn6+MwcYov8LAoGA9mXQBbIAbggAaYis+Il8V3xwfgCDgf7l5YuNCGwCI4CB3iCcKfgEogJ4gTOhNGkACSgixBXkeOLcpepFoUTMxJ7ElKT6pJsidNoTJRYpQR5U8mJdcm25KH0FnoGrR/MW+xcXFkiWpJ/1Lc0tGUmhRbakoqI1Wa6sNQMAKMCeNNA9JoaYY0D5aCNeIgOPky2DLLMmc6Ll2T7l6OXq5YPpRBWwFfIcNH46V4M96/Uriyc6Urk51Zn9m3KmuVdlUwi5F1fzV7dZigXINaI15jJUYTWWv5azvIUDKRrCRPfimjQClkSvU69rouKpKqorZRfeuZ6yPZjV8RaQCtmubbwN5gy+HkBHLpuaJcVW5bri03TMfQaXQBvWsjeCN7YyhPkte3SbhJlw/Nb8oPbJZs7mbEMYQM/xbOluYtXiacWcUMsWq/7mEz2daCmAJCgbLgSSGyUFTYWQQqwhaxiuRFxqIgh8yRceycya3MrRZuIpfEVXAj2yjbTP/gwXkq3sg3tO2Y7YYd9B2aHSE+i6/nP9qJ2lkn4AmuCz7twu1q3hURpgtv7Ibslu7uEAEipchZHFVMLa4ptpeASzJLOCXO0phScWlHabiMX3aqLFCOKheVa8sdYoiYJ9aLw3uy9ij2OCQwSYskvLdqb29FRoV8H3pf6z5HZWZl+37sflMVtsp4IOWAuTrjW4qUIJVLXQcxB8UHrTJARpfJDqEO9RyKyGlyiVwrt8sDh2mHxYfDNbYj/CMjSoZSqwwezTxaeXRMRVTJVb7vLGqF2nqMcUx1zKPBa+SaruPAcdFxRy2u1nACc6KpjlWnqXOexJ8sOxmuVzcADRUN1gZ/I6Gx5fuxJtMP3ObtP3JPBU+nn247/Ugbo1VrA2d4Z+63EFtcZ0lnzWenWqtadT95ddRzsHNNepherneeZ533tbHa/BcoF/SGRIPSYPuZbWRfjL5ouOgy0UyeS8JLukvDZoZZdZlwWXrZZ0mxVF5BX1G1K9rdV+Oumq96OzQdgV9EnejOumuoa5Zfc26k/DZ5M/bmWFd+l+NW3i3r7bzbTbddd9rv9N6JdBO6u+7S77bcddqENvfvLDvJ3nMv8V7rvb4HuAecB+09sT31f/Q6oA71Q/DDmof9j+x/lvTG9mp6Q4+zHzc+/vxE9DTmqa6P2jf0jPbM7IQ5852yf3U8Rzxvfu7v5/a7B4AB+oB6wO0CXMQXzBcmj8Bj8UwOkgdVg/cHPw1lDGlfIl7SXiq9cK/C2/+q6tXocPZw62vI65LXn0ekbwhv7KMVb8Fvu304n/Gd4F3ru9DYjff495b3Yb/kQ94HXQAV4Ac8HzEfNUFS8NNf6lBUSDuOGmeM142PhvFhTXh0QjzRPOGamJys+G9/A0u+S0gAAHjaY2BkYGCqYJJkUGcAASYgZgRCBgYHMJ8BABU/AQIAeNqNUT1LA0EQfXeJmigEBQlidYVYWORLBQk2wRDBSlQULIRLcvkgyUXvomJraWlt5S8Qf4XGzkKw8YdY+XZu8yUnyLK7b3dm3ryZAbCAd0RgROMAzrgDbCDJV4BNJNDTOIIUbjWOYhVPGk9hBR8aTzP2W+MZPBrzGsewZDxrHMei0dd4DmvGl8YJbJsxjV+QNIsavyJjnmrcR8y80/gNs+Z9gD8jWDYfsIMuznEDD03U0aByC0XYuIJDtEvkokq7hRwyyGKTFVkooM1ljUX58nJ4O7xVdJWeJbK7tBZwLbYuOrwPuOu4JINN3yC7jzwZwv3zw+y5PzysX5zHosKnOuVtYYNa1M6M1RHOtE8Ghxy+sKqKasJl0bMrZ0MsYX1TMRWiQdYab28spqYzqh+POar87YjeFv9s/vaEr8w6Riwub/WqiMqgp56wTCoPm1pDOM/ZwTTXIL89EZeSTP/3TLNDgRpXKk7jhGd5rLqsdPqIVSg1ezIV1fctsWWZI4d1nmqeo3m06O1QQVd6oLhKQ8ZDXJClSYuaSPsHVteNOwB42n1XBZQcxxHdql6Gk05mZqZb6AWzLFlmZlzPzPbujnZ2ZjRwoDDYScx2HLATO8zMzMyJw8wMDjNV9cyeTi/vRe/UXd3Tv6H+76reDGb+7z9cpgIymBGAmTszt2VuzdyRuTtzDwjIQg7yUIAilKAMFahCDeZgXeb2zL2Zu2A9zMMG2AV2hd1gd9gD9oS9YG/YB/aF/WB/OAAOhIPgYDgEDoXD4HA4Ao6Eo+BoOAaOhePgeDgBFqAODWhCCyS0oQNd6MGJcBKcDKfAqXAanA4b4QzYBJvhTNgCZ8HZcA6cC+fB+XABXAgXwcVwCVwKl8HlcAVcCVfB1XANXAvXwfVwA9wIfbgJDDDBggEoGMIIxmDDVpiAA1NwwQMftmXmMo9kahBACBHEsAhLsAwrsB0eBY+Gx8Bj4XHweHgCPBGeBE+Gm+EWeAo8FZ4Gt8JtcDvcAXfCXXA33AP3wtPhPngGPBOeBc+G++EBeA48Fx6Eh+B58Hx4AbwQXgQvhpfAS+Fl8HJ4BbwSXgWvhtfAa+F18Hp4A7wR3gRvhrfAW+Ft8HZ4B7wT3gXvhvfAe+F98H74AHwQPgQfho/AR+Fj8HH4BHwSPgWfhs/AZ+Fz8Hn4AjwMX4QvwZfhK/BV+Bp8Hb4B34RvwbfhO/Bd+B58H34AP4QfwY/hJ/BT+Bn8HH4Bv4Rfwa/hN/AI/BZ+B7+HP8Af4U/wZ/gL/BX+Bn+Hf8A/4V/wb/gPZhAQUWAWc5jHAhaxhGWsYBVrOIfrcD3O4wbcBXfF3XB33CNzMO6Je+HeuA/ui/vh/ngAHogH4cF4CB6Kh+HheAQeiUfh0XgMHovH4fF4Ai5gHRvYxBZKbGMHu9jDE/EkPBlPwVPxNDwdN+IZuAk345m4Bc/Cs/EcPBfPw/PxArwQL8KL8RK8FC/Dy/EKvBKvwqvxGrwWr8Pr8Qa8Eft4ExpoZh5GCweocIgjHKONW3GCDk7RRQ993IYBhhhhjIu4hMu4gtvxUfhofAw+Fh+Hj8cn4BPxSfhkvBlvwafgU/FpeCvehrfjHXgn3oV34z14Lz4d78Nn4DPxWfhsvB8fwOfgc/FBfAifh8/HF+AL8UX4YnwJvhRfhi/HV+Ar8VX4anwNvhZfh6/HN+Ab8U34ZnwLvhXfhm/Hd+A78V34bnwPvhffh+/HD+AH8UP4YfwIfhQ/hh/HT+An8VP4afwMfhY/h5/HL+DD+EX8En4Zv4Jfxa/h1/Eb+E38Fn4bv4Pfxe/h9/EH+EP8Ef4Yf4I/xZ/hz/EX+Ev8Ff4af4OP4G/xd/h7/AP+Ef+Ef8a/4F/xb/h3/Af+E/+F/8b/CAoNAoUQWZETeVEQRVESZVERVVETc2KdWC/mxQaxi9hV7CZ2F3uIPcVeYm+xj9hX7Cf2FweIA8VB4mBxiDhUHCYOF0eII8VR4mhxjDhWHCeOFyeIBVEXDdEULSFFW3REV/TEieIkcbI4RZwqThOni43iDLFJbBZnii3iLHG2OEecK84T54sLxIXiInGxuERcKi4Tl4srxJXiKnG1uEZcK64T14sbxI2iL24ShjCFJQZCiWHmvkLs2gsLGxe4biwszOp6WjfSupnWrbSWad1O605ad9O6l9Ybk7qxJallUsstm3IjxwjD3DQObSsfKiOwxkXlLirH81VuTO0oG0ZGUOair6Z+tJKNQxVkh7YzLUbjvmMEI4XRuMC2HUboTfKBmnqLqrDd86Z92y3q2osj4Q2H+dAeuYYjLG+UiwIjHGfH3lQVaTbVN5woG9lTlQ08Y1AdeEuuQwZ3F2eNfOxzlbNd01uu+I6x0rfswHIUrekrIyoEahiocFzkregJHc+aZIeOMSrTYQb+2HNVWF70nHiq+rSfSmryAqXUjv38tsDyBqpgGroWkTHK0v8wa3repMjF1AgmOT+w3ShvGVMVGNmh50b03Rnk7chwbKsSqeWoP1b2aByVtb1kD6Jxmb6N3L6jhlE1MS3lRiqoJI2Ah9cSe2scRvZwJctnqdjugMYluNTWY+eGhqXYa/1Fe6C8gm9bURyovK9cy3bKU8Pv815VkDcGPCF5mPapBnaUC8dGoHLWWJGHmLBaGCm/bxrWZMkIBrWhQS6ctYozI8tOz/kGiYCE4fmFoRdwf1UPnzX0TGkjp7YqK6rSOouBl5y8NmvoI5R8Jw77LIzy1HZTs5KISNsFb6Lr2rZYkUsIx62S7Q69BBZagVJuOPaiWgpLVFEiYGKVTcOdmUYQeEt6H5XE1LsoJnbsp9+1IrSLWEe0ndDervrD2HGqqR1ODcdZr5Ytx5gaq9vKjuwhyU4ZQ7ojgSqqFRIasVFiw3K8UFXJK67tjvTwHPnTVUXLcJQ7MIJ8YLgDb1qwvOmUOM5PjZGrovLMX7G/6kfeH8k9WlIqqtHRfZ+ntOjCVoekQhUki1XSBm9hXbrxRRVENq04n7bHXmBvJ/kaTokU37fGPEm0ZEeky8TxLDKWvW5VE8X3afHAExO1kqXbHBbTLYe1aBxPzZD2yo5bl7Z4u9wu6UAyNpxhRUeXJKYUeF4KETXHdickzsSVBT8Ox3SsGt0eFVDY6PNnHUJsN0+L++OVysimFcxEB0l04GVyDumAnMv3vaIlniw0N7u8SbOsBySLpQcuzs6aT2bOxy7HkApJjC4NO3gggjAU4wFdClIDOc/NmspxKha7dUiOjVR5TDSm6tYmq62grdhPetgh84ki+zsUuWGnHj3Bup26Yn9nEE9DMdwzVX4poDs/zkVGOAnzFFHpMCUzsNXQMkJVZuUm9yQ3CrzYz7Ivc6SReJA3lUERQlhxRFT65BXD1/qx/WxoLKoy+6dvklAnpDgvID1h7KDnUMQI7ImKxjThaFyKKS4FNK2iPZiOypF4bYvCfGxNSkQj7Yeu79yqpd2+fuR5IzrNagyorOnIEYdqpUw+V5E+aTEx6ZImhr7Eial9RfeGQrgbZkMvIKlRkdwTbdHlmWU2nVRmWsvSvj0SzIj0P6CUZHrEcSWVM4+szqStMwrF+Ij0GimKrUXSdkDcGxQRKeaVHd5En2RhFikuEM8jNadd3J9lsGrSTJRa4FTanw4qhI3GXkjOV8UwtiNmrMii4hXzFiUqpSjDeBSVOVPqdMJHMGPboROMigT2Oe+UjCmtbriWyk/VYGJHlSFviVbZqmjrivLAOAlTw4Whmh94sclSctnjWn879ST626mL9LdTm89V3oGvrAEWZ4jyjqGFgQonlDbyjuFzpYUSVaeeyefSt7Ga6lvrrbwt9qJ06sRMeKbTui4dJhmbo+zvrJTTUECOWb82BOowtCYMcrusln2+hQm7RKCfjMuFU9pIbkhXyxVTNS6MKNb5xqBIYU7roshvCR45pw0dWkjNgyL5mLKX4WT5xVDSG6JhzrrVeJcGIAomSbLQ9zdrURQrMYTT5YSDDaky2290epU1maUSxnQj6fraPsk6NhOLhnWbVT/evp19ZytLUQLlCdmNczvMvn54jW3lDOZmiSbZzTynqD6piTQU2+GYPBpQsFOceJatAQWoNNuEs0fLhp160gC1tosD1Nq2DlDjaOrIrBWGzTxpk0JmOYmqqYgpMlF23IX0bvuhHa5JSPOrfbOkle03F5ol/fTj+fPUSfud2/Fy0Ok6Cfm6s+gouvQsw8TQik2+62eEDuv6SvSb9UY5Sfk6I9C1p2vNmS0RyA6lkHR5dEeoOBAj0xdxOBC2G4it/ooIYlNMgiVhRhY/k1Vp9c6u13HIZGH4Y8OkG9lvNnobVnsjCqdmHKlw9//t4mPVZt06Bs/v1NKxqd9striQ1RXKprGZHiRtZJeJ5tLy7OmxOoadWRiQWOhRTSGdXnqz4EVvLGqPAmOaH9KbdhIIY0Cho96pz5l2ZMbs+pQGioROUEkq3bXO8WihHVmqtqYd+2u/sq7Wr2knV3yJnrneUligaxp49iBHFyNepm3aJueWcLLiU1Lz4iDcFhNj9BwgqXj5IYVlR2W54AQe2b4IY6a23S7wjxt7UQkzHuHiJLekbNOjHw4u/dGATmNOn70/Ozz3tXZLtjTLuU6Sc/hTe27gRWs+cF+3ukhPcXqV6j1RT3ehlmQ23dH3uKvBRZML5qoruWhz0eGiy4X+2balvnGBfG3UqafHoF6TmwzqMajHoB6Degzq9bL91oJGmGw1uGhy0UpmO6POjTYXHS66XDCovsAFf60zqM6geosLyQUj6oyoM6Ke7m3TQlozrsG4BuMajGswrsG4BuMajGvwSk1eqcmIJiOajGim29ucTri5ntZ6BEOb6ZKbZVq305onb/EcLV61xau2eNWW/sDQVgo9kxeWvLDkaSWDJIMkgySDJIMkgyRvtc2INiPajGgzop1udYv+xqB2h/w91N8Y1OEPHQZ1GNThDx1epsPLdNo82GKLl+kwosuILiNYFy3WRYt10WJdtFgXLdZFi3XR6jKix4geI1gUrR4jeq3ssKFpJFGQpT8wgkUhSRRU1LlocNHkosWF5KLNRYeLLhe93KKisEkmS0LyXJIlIVkSkiUhWRKSJSFZErLOizR4kQYjWAySxSBZDJLFIFkMksUgWQySxSBZDJLFIFkMksUgOXzJJiOajGgygjUgm4xoMaLFiBYjmHrJ1EumXjL1kqmXTL1sMUIygnmXzLtk3iXzLpl3ybxL5l0y75J5l8y7ZN4l8y6Zd9lmRJsRTLpsM6LNCCJ92CAEFYwg0sliBJMumXTZYUSHEUy6ZNIlky6ZdMmkSyZdMumSSZdMumTSJZMumXTJpEsmXTLpkkmXPUZwJJAcCSRHAkmkDxsdpWXa6C6kNeHaTH2bqW+n8aDRlWnd5s4OF10uaL02a6nN/LeZ/zbz3663/gtVqESOAAFVt55gAAA=') format('woff');\n" + " font-weight: 400;\n" + " font-style: normal;\n" + "}\n" + @@ -16924,7 +17726,7 @@ ".fa-github:before {content: \"\\f09b\";}\n" + ".fa-unlock:before {content: \"\\f09c\";}\n" + ".fa-credit-card:before {content: \"\\f09d\";}\n" + -".fa-rss:before {content: \"\\f09e\";}\n" + +".fa-feed:before, .fa-rss:before {content: \"\\f09e\";}\n" + ".fa-hdd-o:before {content: \"\\f0a0\";}\n" + ".fa-bullhorn:before {content: \"\\f0a1\";}\n" + ".fa-bell:before {content: \"\\f0f3\";}\n" + @@ -17200,14 +18002,14 @@ ".fa-ge:before, .fa-empire:before {content: \"\\f1d1\";}\n" + ".fa-git-square:before {content: \"\\f1d2\";}\n" + ".fa-git:before {content: \"\\f1d3\";}\n" + -".fa-hacker-news:before {content: \"\\f1d4\";}\n" + +".fa-y-combinator-square:before, .fa-yc-square:before, .fa-hacker-news:before {content: \"\\f1d4\";}\n" + ".fa-tencent-weibo:before {content: \"\\f1d5\";}\n" + ".fa-qq:before {content: \"\\f1d6\";}\n" + ".fa-wechat:before, .fa-weixin:before {content: \"\\f1d7\";}\n" + ".fa-send:before, .fa-paper-plane:before {content: \"\\f1d8\";}\n" + ".fa-send-o:before, .fa-paper-plane-o:before {content: \"\\f1d9\";}\n" + ".fa-history:before {content: \"\\f1da\";}\n" + -".fa-genderless:before, .fa-circle-thin:before {content: \"\\f1db\";}\n" + +".fa-circle-thin:before {content: \"\\f1db\";}\n" + ".fa-header:before {content: \"\\f1dc\";}\n" + ".fa-paragraph:before {content: \"\\f1dd\";}\n" + ".fa-sliders:before {content: \"\\f1de\";}\n" + @@ -17274,7 +18076,7 @@ ".fa-venus:before {content: \"\\f221\";}\n" + ".fa-mars:before {content: \"\\f222\";}\n" + ".fa-mercury:before {content: \"\\f223\";}\n" + -".fa-transgender:before {content: \"\\f224\";}\n" + +".fa-intersex:before, .fa-transgender:before {content: \"\\f224\";}\n" + ".fa-transgender-alt:before {content: \"\\f225\";}\n" + ".fa-venus-double:before {content: \"\\f226\";}\n" + ".fa-mars-double:before {content: \"\\f227\";}\n" + @@ -17283,6 +18085,7 @@ ".fa-mars-stroke-v:before {content: \"\\f22a\";}\n" + ".fa-mars-stroke-h:before {content: \"\\f22b\";}\n" + ".fa-neuter:before {content: \"\\f22c\";}\n" + +".fa-genderless:before {content: \"\\f22d\";}\n" + ".fa-facebook-official:before {content: \"\\f230\";}\n" + ".fa-pinterest-p:before {content: \"\\f231\";}\n" + ".fa-whatsapp:before {content: \"\\f232\";}\n" + @@ -17294,6 +18097,71 @@ ".fa-train:before {content: \"\\f238\";}\n" + ".fa-subway:before {content: \"\\f239\";}\n" + ".fa-medium:before {content: \"\\f23a\";}\n" + +".fa-yc:before, .fa-y-combinator:before {content: \"\\f23b\";}\n" + +".fa-optin-monster:before {content: \"\\f23c\";}\n" + +".fa-opencart:before {content: \"\\f23d\";}\n" + +".fa-expeditedssl:before {content: \"\\f23e\";}\n" + +".fa-battery-4:before, .fa-battery-full:before {content: \"\\f240\";}\n" + +".fa-battery-3:before, .fa-battery-three-quarters:before {content: \"\\f241\";}\n" + +".fa-battery-2:before, .fa-battery-half:before {content: \"\\f242\";}\n" + +".fa-battery-1:before, .fa-battery-quarter:before {content: \"\\f243\";}\n" + +".fa-battery-0:before, .fa-battery-empty:before {content: \"\\f244\";}\n" + +".fa-mouse-pointer:before {content: \"\\f245\";}\n" + +".fa-i-cursor:before {content: \"\\f246\";}\n" + +".fa-object-group:before {content: \"\\f247\";}\n" + +".fa-object-ungroup:before {content: \"\\f248\";}\n" + +".fa-sticky-note:before {content: \"\\f249\";}\n" + +".fa-sticky-note-o:before {content: \"\\f24a\";}\n" + +".fa-cc-jcb:before {content: \"\\f24b\";}\n" + +".fa-cc-diners-club:before {content: \"\\f24c\";}\n" + +".fa-clone:before {content: \"\\f24d\";}\n" + +".fa-balance-scale:before {content: \"\\f24e\";}\n" + +".fa-hourglass-o:before {content: \"\\f250\";}\n" + +".fa-hourglass-1:before, .fa-hourglass-start:before {content: \"\\f251\";}\n" + +".fa-hourglass-2:before, .fa-hourglass-half:before {content: \"\\f252\";}\n" + +".fa-hourglass-3:before, .fa-hourglass-end:before {content: \"\\f253\";}\n" + +".fa-hourglass:before {content: \"\\f254\";}\n" + +".fa-hand-grab-o:before, .fa-hand-rock-o:before {content: \"\\f255\";}\n" + +".fa-hand-stop-o:before, .fa-hand-paper-o:before {content: \"\\f256\";}\n" + +".fa-hand-scissors-o:before {content: \"\\f257\";}\n" + +".fa-hand-lizard-o:before {content: \"\\f258\";}\n" + +".fa-hand-spock-o:before {content: \"\\f259\";}\n" + +".fa-hand-pointer-o:before {content: \"\\f25a\";}\n" + +".fa-hand-peace-o:before {content: \"\\f25b\";}\n" + +".fa-trademark:before {content: \"\\f25c\";}\n" + +".fa-registered:before {content: \"\\f25d\";}\n" + +".fa-creative-commons:before {content: \"\\f25e\";}\n" + +".fa-gg:before {content: \"\\f260\";}\n" + +".fa-gg-circle:before {content: \"\\f261\";}\n" + +".fa-tripadvisor:before {content: \"\\f262\";}\n" + +".fa-odnoklassniki:before {content: \"\\f263\";}\n" + +".fa-odnoklassniki-square:before {content: \"\\f264\";}\n" + +".fa-get-pocket:before {content: \"\\f265\";}\n" + +".fa-wikipedia-w:before {content: \"\\f266\";}\n" + +".fa-safari:before {content: \"\\f267\";}\n" + +".fa-chrome:before {content: \"\\f268\";}\n" + +".fa-firefox:before {content: \"\\f269\";}\n" + +".fa-opera:before {content: \"\\f26a\";}\n" + +".fa-internet-explorer:before {content: \"\\f26b\";}\n" + +".fa-tv:before, .fa-television:before {content: \"\\f26c\";}\n" + +".fa-contao:before {content: \"\\f26d\";}\n" + +".fa-500px:before {content: \"\\f26e\";}\n" + +".fa-amazon:before {content: \"\\f270\";}\n" + +".fa-calendar-plus-o:before {content: \"\\f271\";}\n" + +".fa-calendar-minus-o:before {content: \"\\f272\";}\n" + +".fa-calendar-times-o:before {content: \"\\f273\";}\n" + +".fa-calendar-check-o:before {content: \"\\f274\";}\n" + +".fa-industry:before {content: \"\\f275\";}\n" + +".fa-map-pin:before {content: \"\\f276\";}\n" + +".fa-map-signs:before {content: \"\\f277\";}\n" + +".fa-map-o:before {content: \"\\f278\";}\n" + +".fa-map:before {content: \"\\f279\";}\n" + +".fa-commenting:before {content: \"\\f27a\";}\n" + +".fa-commenting-o:before {content: \"\\f27b\";}\n" + +".fa-houzz:before {content: \"\\f27c\";}\n" + +".fa-vimeo:before {content: \"\\f27d\";}\n" + +".fa-black-tie:before {content: \"\\f27e\";}\n" + +".fa-fonticons:before {content: \"\\f280\";}\n" + ".fa-spin::before {\n" + " -webkit-animation:spin 2s infinite linear;\n" + " -moz-animation:spin 2s infinite linear;\n" + @@ -17418,9 +18286,16 @@ " /* party hats */\n" + " pointer-events: none;\n" + "}\n" + +"#g-recaptcha {\n" + +" min-height: 78px;\n" + +" height: auto;\n" + +"}\n" + ":root:not(.js-enabled) #postForm {\n" + " display: table;\n" + "}\n" + +"#captchaContainerAlt td:nth-child(2) {\n" + +" display: table-cell !important;\n" + +"}\n" + "/* Anti-autoplay */\n" + "audio.controls-added {\n" + " display: block;\n" + @@ -17432,6 +18307,11 @@ " height: auto;\n" + " text-align: center;\n" + "}\n" + +":root.anti-autoplay .autoplay-removed {\n" + +" display: block !important;\n" + +" min-width: 640px;\n" + +" min-height: 390px;\n" + +"}\n" + "/* fixed, z-index */\n" + "#overlay,\n" + "#fourchanx-settings,\n" + @@ -17472,9 +18352,15 @@ "#embedding {\n" + " z-index: 11;\n" + "}\n" + -"#thread-watcher {\n" + +":root.fixed-watcher #thread-watcher {\n" + " z-index: 10;\n" + "}\n" + +":root.fixed:not(.gallery-open) #header-bar:not(:hover) {\n" + +" z-index: 8;\n" + +"}\n" + +"#thread-watcher {\n" + +" z-index: 5;\n" + +"}\n" + "/* Header */\n" + ".fixed.top-header body {\n" + " padding-top: 2em;\n" + @@ -17549,7 +18435,7 @@ " height: 10px;\n" + " position: absolute;\n" + "}\n" + -":root:not(.autohide) #scroll-marker {\n" + +"#header-bar:not(.autohide) #scroll-marker {\n" + " pointer-events: none;\n" + "}\n" + "#header-bar #scroll-marker {\n" + @@ -17628,6 +18514,7 @@ " flex: auto;\n" + " display: -webkit-flex;\n" + " display: flex;\n" + +" width: 0px; /* XXX Fixes Edge not shrinking the board list below default size when needed */\n" + " }\n" + " :root.fixed:not(.centered-links) #full-board-list > .boardList > a,\n" + " :root.fixed:not(.centered-links) #full-board-list > .boardList > span:not(.space):not(.spacer) {\n" + @@ -17839,7 +18726,7 @@ ".section-filter textarea {\n" + " height: 500px;\n" + "}\n" + -".section-filter a {\n" + +".section-filter a, .section-advanced a {\n" + " text-decoration: underline;\n" + "}\n" + ".section-sauce textarea {\n" + @@ -17929,6 +18816,10 @@ " left: -1em;\n" + " width: 0;\n" + "}\n" + +"/* \`\`::-webkit-*'' selectors break selector lists on Firefox. */\n" + +"#index-search::-webkit-search-cancel-button {\n" + +" display: none;\n" + +"}\n" + "#index-search:not([data-searching]) + #index-search-clear {\n" + " display: none;\n" + "}\n" + @@ -18091,10 +18982,11 @@ "#thread-watcher {\n" + " padding-bottom: 3px;\n" + " padding-left: 3px;\n" + -" overflow: hidden;\n" + " white-space: nowrap;\n" + " min-width: 146px;\n" + -" max-height: 92%;\n" + +"}\n" + +"#watched-threads {\n" + +" overflow-x: hidden;\n" + " overflow-y: auto;\n" + "}\n" + "#thread-watcher .refresh {\n" + @@ -18103,7 +18995,12 @@ ":root.fixed-watcher #thread-watcher {\n" + " position: fixed;\n" + "}\n" + -":root:not(.fixed-watcher) #thread-watcher:not(:hover) {\n" + +":root.fixed-watcher #watched-threads {\n" + +" /* XXX https://code.google.com/p/chromium/issues/detail?id=168840, https://bugs.webkit.org/show_bug.cgi?id=94158 */\n" + +" max-height: 85vh;\n" + +" max-height: calc(100vh - 75px);\n" + +"}\n" + +":root:not(.fixed-watcher) #watched-threads:not(:hover) {\n" + " max-height: 210px;\n" + " overflow-y: hidden;\n" + "}\n" + @@ -18270,6 +19167,11 @@ ":root.fit-height .full-image {\n" + " max-height: 100vh;\n" + "}\n" + +":root.fit-height.fixed .full-image {\n" + +" /* XXX https://code.google.com/p/chromium/issues/detail?id=168840, https://bugs.webkit.org/show_bug.cgi?id=94158 */\n" + +" max-height: 93vh;\n" + +" max-height: calc(100vh - 35px);\n" + +"}\n" + ":root.fit-width .full-image {\n" + " max-width: 100%;\n" + "}\n" + @@ -18439,6 +19341,13 @@ " min-width: 300px;\n" + " border-radius: 3px 3px 0 0;\n" + "}\n" + +"#qr > form {\n" + +" /* XXX https://code.google.com/p/chromium/issues/detail?id=168840, https://bugs.webkit.org/show_bug.cgi?id=94158 */\n" + +" max-height: 85vh;\n" + +" max-height: calc(100vh - 75px);\n" + +" overflow-y: auto;\n" + +" overflow-x: hidden;\n" + +"}\n" + "#qrtab {\n" + " border-radius: 3px 3px 0 0;\n" + "}\n" + @@ -18510,7 +19419,7 @@ " position: relative;\n" + " top: 2px;\n" + "}\n" + -"/* Noscript Recaptcha */\n" + +"/* Recaptcha v1 */\n" + ".captcha-img {\n" + " margin: 0px;\n" + " text-align: center;\n" + @@ -18519,11 +19428,11 @@ " min-height: 59px;\n" + " min-width: 302px;\n" + "}\n" + -".captcha-input{\n" + +".captcha-input {\n" + " width: 100%;\n" + " margin: 1px 0 0;\n" + "}\n" + -"#qr-captcha-iframe {\n" + +"#qr.captcha-v1 #qr-captcha-iframe {\n" + " display: none;\n" + "}\n" + "/* Recaptcha v2 */\n" + @@ -18550,6 +19459,13 @@ " display: block;\n" + " width: 100%;\n" + "}\n" + +"#qr.captcha-v2 #qr-captcha-iframe {\n" + +" width: 302px;\n" + +" height: 423px;\n" + +" border: 0;\n" + +" display: block;\n" + +" margin: auto;\n" + +"}\n" + ".goog-bubble-content {\n" + " max-width: 100vw;\n" + " max-height: 100vh;\n" + @@ -18603,6 +19519,7 @@ ".has-file #qr-filename {\n" + " -webkit-flex: 1 1 auto;\n" + " flex: 1 1 auto;\n" + +" width: 0px; /* XXX Fixes filename not shrinking to allow space for buttons in Edge */\n" + " display: inline-block;\n" + " padding: 0;\n" + " padding-left: 3px;\n" + @@ -18749,6 +19666,8 @@ "}\n" + ".textarea {\n" + " position: relative;\n" + +" display: -webkit-flex;\n" + +" display: flex;\n" + "}\n" + ":root.webkit .textarea {\n" + " margin-bottom: -2px;\n" + @@ -18787,7 +19706,7 @@ " height: 15px;\n" + " text-align: center;\n" + "}\n" + -".menu-button + .container:not(:empty) {\n" + +".menu-button + .container :first-child {\n" + " margin-left: -5px;\n" + "}\n" + "#menu {\n" + @@ -19070,12 +19989,7 @@ "}\n" + ".gal-fit-height .gal-image img,\n" + ".gal-fit-height .gal-image video {\n" + -" /*\n" + -" Chrome doesn't support viewpoint units in calc()\n" + -" http://bugs.chromium.org/168840\n" + -" \"It looks like the original author of viewport units in WebKit is not coming back to fix this stuff.\"\n" + -" Well, fuck.\n" + -" */\n" + +" /* XXX https://code.google.com/p/chromium/issues/detail?id=168840, https://bugs.webkit.org/show_bug.cgi?id=94158 */\n" + " max-height: 95vh;\n" + " max-height: calc(100vh - 25px);\n" + "}\n" + @@ -19178,7 +20092,7 @@ " width: 4em;\n" + "}\n" + ":root.gallery-open.fixed #header-bar:not(.autohide),\n" + -":root.gallery-open.fixed #header-bar:not(.autohide) .fa::before {\n" + +":root.gallery-open.fixed #header-bar:not(.autohide) #shortcuts .fa::before {\n" + " visibility: hidden;\n" + "}\n" + "/* General */\n" + @@ -19708,7 +20622,10 @@ " font-family: sans-serif !important;\n" + " text-shadow: 1px 1px 1px rgba(0,74,153,0.6);\n" + "}", - features: [['Polyfill', Polyfill], ['Redirect', Redirect], ['Header', Header], ['Catalog Links', CatalogLinks], ['Settings', Settings], ['Index Generator', Index], ['Disable Autoplay', AntiAutoplay], ['Announcement Hiding', PSAHiding], ['Fourchan thingies', Fourchan], ['Color User IDs', IDColor], ['Highlight by User ID', IDHighlight], ['Custom CSS', CustomCSS], ['Linkify', Linkify], ['Reveal Spoilers', RemoveSpoilers], ['Resurrect Quotes', Quotify], ['Filter', Filter], ['Thread Hiding Buttons', ThreadHiding], ['Reply Hiding Buttons', PostHiding], ['Recursive', Recursive], ['Strike-through Quotes', QuoteStrikeThrough], ['Quick Reply', QR], ['Menu', Menu], ['Index Generator (Menu)', Index.menu], ['Report Link', ReportLink], ['Thread Hiding (Menu)', ThreadHiding.menu], ['Reply Hiding (Menu)', PostHiding.menu], ['Delete Link', DeleteLink], ['Filter (Menu)', Filter.menu], ['Download Link', DownloadLink], ['Archive Link', ArchiveLink], ['Quote Inlining', QuoteInline], ['Quote Previewing', QuotePreview], ['Quote Backlinks', QuoteBacklink], ['Mark Quotes of You', QuoteYou], ['Mark OP Quotes', QuoteOP], ['Mark Cross-thread Quotes', QuoteCT], ['Anonymize', Anonymize], ['Time Formatting', Time], ['Relative Post Dates', RelativeDates], ['File Info Formatting', FileInfo], ['Fappe Tyme', FappeTyme], ['Gallery', Gallery], ['Gallery (menu)', Gallery.menu], ['Sauce', Sauce], ['Image Expansion', ImageExpand], ['Image Expansion (Menu)', ImageExpand.menu], ['Reveal Spoiler Thumbnails', RevealSpoilers], ['Image Loading', ImageLoader], ['Image Hover', ImageHover], ['Volume Control', Volume], ['WEBM Metadata', Metadata], ['Comment Expansion', ExpandComment], ['Thread Expansion', ExpandThread], ['Thread Excerpt', ThreadExcerpt], ['Favicon', Favicon], ['Unread', Unread], ['Quote Threading', QuoteThreading], ['Thread Stats', ThreadStats], ['Thread Updater', ThreadUpdater], ['Thread Watcher', ThreadWatcher], ['Thread Watcher (Menu)', ThreadWatcher.menu], ['Mark New IPs', MarkNewIPs], ['Index Navigation', Nav], ['Keybinds', Keybinds], ['Banner', Banner], ['Flash Features', Flash]] + cssWWW: "#captcha-cnt {\n" + +" height: auto;\n" + +"}", + features: [['Polyfill', Polyfill], ['Captcha Replacement', Captcha.replace], ['Redirect', Redirect], ['Header', Header], ['Catalog Links', CatalogLinks], ['Settings', Settings], ['Index Generator', Index], ['Disable Autoplay', AntiAutoplay], ['Announcement Hiding', PSAHiding], ['Fourchan thingies', Fourchan], ['Color User IDs', IDColor], ['Highlight by User ID', IDHighlight], ['Custom CSS', CustomCSS], ['Linkify', Linkify], ['Reveal Spoilers', RemoveSpoilers], ['Resurrect Quotes', Quotify], ['Filter', Filter], ['Thread Hiding Buttons', ThreadHiding], ['Reply Hiding Buttons', PostHiding], ['Recursive', Recursive], ['Strike-through Quotes', QuoteStrikeThrough], ['Quick Reply', QR], ['Cooldown', QR.cooldown], ['Menu', Menu], ['Index Generator (Menu)', Index.menu], ['Report Link', ReportLink], ['Thread Hiding (Menu)', ThreadHiding.menu], ['Reply Hiding (Menu)', PostHiding.menu], ['Delete Link', DeleteLink], ['Filter (Menu)', Filter.menu], ['Download Link', DownloadLink], ['Archive Link', ArchiveLink], ['Quote Inlining', QuoteInline], ['Quote Previewing', QuotePreview], ['Quote Backlinks', QuoteBacklink], ['Mark Quotes of You', QuoteYou], ['Mark OP Quotes', QuoteOP], ['Mark Cross-thread Quotes', QuoteCT], ['Anonymize', Anonymize], ['Time Formatting', Time], ['Relative Post Dates', RelativeDates], ['File Info Formatting', FileInfo], ['Fappe Tyme', FappeTyme], ['Gallery', Gallery], ['Gallery (menu)', Gallery.menu], ['Sauce', Sauce], ['Image Expansion', ImageExpand], ['Image Expansion (Menu)', ImageExpand.menu], ['Reveal Spoiler Thumbnails', RevealSpoilers], ['Image Loading', ImageLoader], ['Image Hover', ImageHover], ['Volume Control', Volume], ['WEBM Metadata', Metadata], ['Comment Expansion', ExpandComment], ['Thread Expansion', ExpandThread], ['Thread Excerpt', ThreadExcerpt], ['Favicon', Favicon], ['Unread', Unread], ['Quote Threading', QuoteThreading], ['Thread Stats', ThreadStats], ['Thread Updater', ThreadUpdater], ['Thread Watcher', ThreadWatcher], ['Thread Watcher (Menu)', ThreadWatcher.menu], ['Mark New IPs', MarkNewIPs], ['Index Navigation', Nav], ['Keybinds', Keybinds], ['Banner', Banner], ['Flash Features', Flash]] }; Main.init(); diff --git a/builds/4chan-X.zip b/builds/4chan-X.zip index 3ff76e312..7cab7db0e 100644 Binary files a/builds/4chan-X.zip and b/builds/4chan-X.zip differ diff --git a/builds/updates-beta.xml b/builds/updates-beta.xml index c023a5666..5b59db41f 100644 --- a/builds/updates-beta.xml +++ b/builds/updates-beta.xml @@ -1,7 +1,7 @@ - + diff --git a/builds/updates.xml b/builds/updates.xml index 386dcb98a..34a7d1cb0 100644 --- a/builds/updates.xml +++ b/builds/updates.xml @@ -1,7 +1,7 @@ - + diff --git a/img/icon.gif b/img/icon.gif new file mode 100644 index 000000000..8365e93dc Binary files /dev/null and b/img/icon.gif differ diff --git a/index.html b/index.html index 7527918b3..bbca40e55 100644 --- a/index.html +++ b/index.html @@ -3,7 +3,7 @@ 4chan X - + Screenshot @@ -21,36 +21,61 @@ Previously developed by aeosynth, Mayhem, ihavenoface, Zixaphir, Seaweed, and Spittie, with contributions from many others.

If you're looking for a maintained fork of OneeChan (a style script used in addition to 4chan X), try https://github.com/Nebukazar/OneeChan.

-

Firefox version: Click to Install

-

Install Greasemonkey, then click the link above to install 4chan X. If you're using a fork of Firefox (e.g. Pale Moon), you may need to use Greasemonkey 1.15 instead of the most recent version.

-

WARNING: -If you're switching to this fork from someone else's fork of 4chan X, back up your old script before installing this one as the old one may be overwritten.

-

Known issues: -Greasemonkey 3.0 has a bug causing 4chan X to open multiple tabs when you open a new tab (for example, when starting a thread). If you're having this problem, updating to Greasemonkey 3.1 or later should fix it.

-

Chromium version: Click to Install

-

Download the file from the link above and add drag it to your chrome://extensions page. -This should also work for non-Windows/dev/canary Chrome and Chromium-based versions of Opera.

-

The above will not work in Chrome (stable or beta) users on Windows; you must install from the Chrome store.

-

Chromium version (Chrome store): Click to Install

-

The stable and beta releases of Chrome on Windows will disable extensions not installed from the Chrome store, so users will need to install 4chan X from the link above. -Only the latest stable version of 4chan X is available.

-

Other browsers

-

This fork of 4chan X is not guaranteed to work correctly in other browsers, but you are welcome to try your luck. Pull requests to fix the bugs you will likely find are always welcome. You may fare better with loadletter's fork, which has fewer features but less dependence on browser-specific APIs.

+

Note: 4chan X disables the native extension, so if you uninstall 4chan X, you'll need to re-enable it. To do this, click the [Settings] link in the top right corner and uncheck "Disable the native extension" in the panel that appears.

+

Install

+
+

Install Greasemonkey, then click here to install 4chan X.

-

Beta version

+
+

4chan X is available as a Chrome extension. The Chrome extension has the additional feature of being able to sync your settings and data with other devices via Chrome Sync.

+ +

You can also use the userscript version of 4chan X with Tampermonkey.

+
+

Install JS Blocker, then click here to install 4chan X.

+
+

Several WebKitGTK+ based browsers have support for userscripts and can run 4chan X. Due to the lack of the cross-site GM_* API, and lack of support for userscripts in iframes, not all features will work. You may experience crashes when repeatedly solving the default image-based captchas. You can avoid this problem by enabling Use Recaptcha v1 in your settings.

+ +
+

4chan X can be used in some browsers that do not support userscripts, such as Microsoft Edge, using a local proxy. Not all features will work.

+

Beta version

New features and non-urgent bugfixes are released on the beta channel for further testing before they are moved the stable version. Please report any issues you find, and be sure to mention which version you're using. You should back up your settings regularly to prevent them from being lost due to bugs.

+

To install the current beta version but get updates from the stable channel (recommended if you want a particular recent feature):

+

To install the beta version and get updates whenever there's a new beta version:

+ -

If you want to install the current beta version but get updates from the stable channel after that, install it from here for Firefox or here for Chromium.

Security note

4chan X currently shares your settings and post history between the HTTP and HTTPS versions of 4chan. If you are concerned about protecting your privacy against a man-in-the-middle attack, you should disable 4chan X on the HTTP version of 4chan and/or install HTTPS Everywhere.

-

Uninstalling

-

4chan X disables the native extension, so if you uninstall 4chan X, you'll need to re-enable it. To do this, click the [Settings] link in the top right corner and uncheck "Disable the native extension" in the panel that appears.

+

Troubleshooting

+

If you encounter a bug, try the steps here, then report it to the issue tracker. You can report bugs without a Github account via this form. If the bug seems to be caused by a script update, you can install a old version from the changelog.

diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 14a25f054..616f9f812 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -4,8 +4,8 @@ "node-version": "v0.10.38", "dependencies": { "crx": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/crx/-/crx-3.0.2.tgz", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/crx/-/crx-3.0.3.tgz", "dependencies": { "archiver": { "version": "0.8.1", @@ -24,8 +24,8 @@ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", "dependencies": { "lodash": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz" + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz" } } }, @@ -42,12 +42,12 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", "dependencies": { "lru-cache": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.2.tgz" + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.5.tgz" }, "sigmund": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz" } } } @@ -70,12 +70,12 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", "dependencies": { "lru-cache": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.2.tgz" + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.5.tgz" }, "sigmund": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz" } } }, @@ -90,8 +90,8 @@ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-0.1.0.tgz" }, "lodash": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz" + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz" }, "readable-stream": { "version": "1.0.33", @@ -142,8 +142,8 @@ } }, "commander": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.7.1.tgz", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", "dependencies": { "graceful-readlink": { "version": "1.0.1", @@ -152,12 +152,12 @@ } }, "es6-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.0.1.tgz" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz" }, "node-rsa": { - "version": "0.2.23", - "resolved": "https://registry.npmjs.org/node-rsa/-/node-rsa-0.2.23.tgz", + "version": "0.2.25", + "resolved": "https://registry.npmjs.org/node-rsa/-/node-rsa-0.2.25.tgz", "dependencies": { "asn1": { "version": "0.2.2", @@ -170,9 +170,13 @@ } }, "temp": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.1.tgz", + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", "dependencies": { + "os-tmpdir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.1.tgz" + }, "rimraf": { "version": "2.2.8", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz" @@ -186,8 +190,8 @@ } }, "font-awesome": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.3.0.tgz" + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.4.0.tgz" }, "grunt": { "version": "0.4.5", @@ -338,8 +342,8 @@ "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.0.0.tgz", "dependencies": { "abbrev": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.6.tgz" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.7.tgz" } } } @@ -357,10 +361,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.1.tgz", "dependencies": { - "colors": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz" - }, "lodash": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz" @@ -373,21 +373,7 @@ }, "grunt-legacy-util": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz", - "dependencies": { - "async": { - "version": "0.1.22", - "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz" - }, - "lodash": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz" - }, - "underscore.string": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz" - } - } + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz" }, "hooker": { "version": "0.2.3", @@ -464,20 +450,206 @@ } }, "grunt-concurrent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-concurrent/-/grunt-concurrent-1.0.0.tgz", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/grunt-concurrent/-/grunt-concurrent-2.0.1.tgz", "dependencies": { "async": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.0.tgz" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/async/-/async-1.4.1.tgz" }, - "pad-stdio": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pad-stdio/-/pad-stdio-1.0.0.tgz", + "indent-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.0.0.tgz", "dependencies": { - "lpad": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lpad/-/lpad-1.0.0.tgz" + "repeating": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", + "dependencies": { + "is-finite": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.1.tgz", + "dependencies": { + "number-is-nan": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.0.tgz" + } + } + } + } + } + } + }, + "pad-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pad-stream/-/pad-stream-1.0.0.tgz", + "dependencies": { + "meow": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.3.0.tgz", + "dependencies": { + "camelcase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-1.0.0.tgz", + "dependencies": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz" + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" + } + } + }, + "indent-string": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-1.2.2.tgz", + "dependencies": { + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz" + } + } + }, + "minimist": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz" + }, + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz" + } + } + }, + "pumpify": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.3.3.tgz", + "dependencies": { + "duplexify": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.4.2.tgz", + "dependencies": { + "end-of-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.0.0.tgz", + "dependencies": { + "once": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.2.tgz", + "dependencies": { + "wrappy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz" + } + } + } + } + }, + "readable-stream": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.2.tgz", + "dependencies": { + "core-util-is": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz" + }, + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + }, + "process-nextick-args": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.2.tgz" + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + }, + "util-deprecate": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.1.tgz" + } + } + } + } + }, + "pump": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.0.tgz", + "dependencies": { + "end-of-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.1.0.tgz" + }, + "once": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.2.tgz", + "dependencies": { + "wrappy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz" + } + } + } + } + } + } + }, + "repeating": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", + "dependencies": { + "is-finite": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.1.tgz", + "dependencies": { + "number-is-nan": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.0.tgz" + } + } + } + } + }, + "split2": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/split2/-/split2-0.2.1.tgz" + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "dependencies": { + "readable-stream": { + "version": "1.0.33", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz", + "dependencies": { + "core-util-is": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz" + }, + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + } + } + }, + "xtend": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.0.tgz" + } + } } } } @@ -487,258 +659,6 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-0.6.0.tgz", "dependencies": { - "grunt": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz", - "dependencies": { - "async": { - "version": "0.1.22", - "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz" - }, - "coffee-script": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz" - }, - "colors": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz" - }, - "dateformat": { - "version": "1.0.2-1.2.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz" - }, - "eventemitter2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz" - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" - }, - "findup-sync": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", - "dependencies": { - "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - }, - "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "dependencies": { - "lru-cache": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.2.tgz" - }, - "sigmund": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz" - } - } - } - } - }, - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz" - } - } - }, - "getobject": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz" - }, - "glob": { - "version": "3.1.21", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", - "dependencies": { - "graceful-fs": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz" - }, - "inherits": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.0.tgz" - } - } - }, - "grunt-contrib-jshint": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.6.5.tgz", - "dependencies": { - "jshint": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.1.11.tgz", - "dependencies": { - "cli": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/cli/-/cli-0.4.5.tgz" - }, - "console-browserify": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-0.1.6.tgz" - }, - "shelljs": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.1.4.tgz" - }, - "underscore": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz" - } - } - } - } - }, - "grunt-contrib-watch": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.5.3.tgz", - "dependencies": { - "gaze": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.4.3.tgz", - "dependencies": { - "globule": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", - "dependencies": { - "lodash": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz" - } - } - } - } - }, - "tiny-lr": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.0.4.tgz", - "dependencies": { - "debug": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz" - }, - "faye-websocket": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.4.4.tgz" - }, - "noptify": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/noptify/-/noptify-0.0.3.tgz", - "dependencies": { - "nopt": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.0.0.tgz", - "dependencies": { - "abbrev": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.6.tgz" - } - } - } - } - }, - "qs": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-0.5.6.tgz" - } - } - } - } - }, - "grunt-legacy-log": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.1.tgz", - "dependencies": { - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz" - }, - "underscore.string": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz" - } - } - }, - "grunt-legacy-util": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz" - }, - "hooker": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz" - }, - "iconv-lite": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz" - }, - "js-yaml": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz", - "dependencies": { - "argparse": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", - "dependencies": { - "underscore": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz" - }, - "underscore.string": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz" - } - } - }, - "esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz" - } - } - }, - "lodash": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz" - }, - "minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "dependencies": { - "lru-cache": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.2.tgz" - }, - "sigmund": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz" - } - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "dependencies": { - "abbrev": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz" - } - } - }, - "underscore.string": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz" - }, - "which": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz" - } - } - }, "grunt-contrib-jshint": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.10.0.tgz", @@ -768,8 +688,8 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", "dependencies": { "lru-cache": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.4.tgz" + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.5.tgz" }, "sigmund": { "version": "1.0.1", @@ -796,8 +716,8 @@ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" }, "htmlparser2": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.2.tgz", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", "dependencies": { "domelementtype": { "version": "1.3.0", @@ -860,8 +780,8 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-1.0.0.tgz", "dependencies": { "lru-cache": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.4.tgz" + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.5.tgz" }, "sigmund": { "version": "1.0.1", @@ -937,414 +857,6 @@ "version": "1.9.1", "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.9.1.tgz" }, - "grunt": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz", - "dependencies": { - "async": { - "version": "0.1.22", - "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz" - }, - "coffee-script": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz" - }, - "colors": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz" - }, - "dateformat": { - "version": "1.0.2-1.2.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz" - }, - "eventemitter2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz" - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" - }, - "findup-sync": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", - "dependencies": { - "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - }, - "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "dependencies": { - "lru-cache": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.2.tgz" - }, - "sigmund": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz" - } - } - } - } - }, - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz" - } - } - }, - "getobject": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz" - }, - "glob": { - "version": "3.1.21", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", - "dependencies": { - "graceful-fs": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz" - }, - "inherits": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.0.tgz" - } - } - }, - "grunt-contrib-jshint": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.6.5.tgz", - "dependencies": { - "jshint": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.1.11.tgz", - "dependencies": { - "cli": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/cli/-/cli-0.4.5.tgz" - }, - "console-browserify": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-0.1.6.tgz" - }, - "shelljs": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.1.4.tgz" - }, - "underscore": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz" - } - } - } - } - }, - "grunt-contrib-watch": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.5.3.tgz", - "dependencies": { - "gaze": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.4.3.tgz", - "dependencies": { - "globule": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", - "dependencies": { - "lodash": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz" - } - } - } - } - }, - "tiny-lr": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.0.4.tgz", - "dependencies": { - "debug": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz" - }, - "faye-websocket": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.4.4.tgz" - }, - "noptify": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/noptify/-/noptify-0.0.3.tgz", - "dependencies": { - "nopt": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.0.0.tgz", - "dependencies": { - "abbrev": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.6.tgz" - } - } - } - } - }, - "qs": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-0.5.6.tgz" - } - } - } - } - }, - "grunt-legacy-log": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.1.tgz", - "dependencies": { - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz" - }, - "underscore.string": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz" - } - } - }, - "grunt-legacy-util": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz" - }, - "hooker": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz" - }, - "iconv-lite": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz" - }, - "js-yaml": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz", - "dependencies": { - "argparse": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", - "dependencies": { - "underscore": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz" - }, - "underscore.string": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz" - } - } - }, - "esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz" - } - } - }, - "lodash": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz" - }, - "minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "dependencies": { - "lru-cache": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.2.tgz" - }, - "sigmund": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz" - } - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "dependencies": { - "abbrev": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz" - } - } - }, - "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz" - }, - "underscore.string": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz" - }, - "which": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz" - } - } - }, - "grunt-contrib-jshint": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.11.2.tgz", - "dependencies": { - "hooker": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz" - }, - "jshint": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.7.0.tgz", - "dependencies": { - "cli": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/cli/-/cli-0.6.6.tgz", - "dependencies": { - "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - }, - "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "dependencies": { - "lru-cache": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.2.tgz" - }, - "sigmund": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz" - } - } - } - } - } - } - }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "dependencies": { - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz" - } - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" - }, - "htmlparser2": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.2.tgz", - "dependencies": { - "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz" - }, - "domhandler": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz" - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "dependencies": { - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz" - }, - "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz" - } - } - } - } - }, - "entities": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz" - }, - "readable-stream": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz", - "dependencies": { - "core-util-is": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz" - }, - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" - } - } - } - } - }, - "lodash": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.6.0.tgz" - }, - "minimatch": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.7.tgz", - "dependencies": { - "brace-expansion": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.0.tgz", - "dependencies": { - "balanced-match": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - } - } - } - } - }, - "shelljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz" - }, - "strip-json-comments": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.2.tgz" - } - } - } - } - }, "lodash": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.3.0.tgz" @@ -1397,414 +909,6 @@ } } }, - "grunt": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz", - "dependencies": { - "async": { - "version": "0.1.22", - "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz" - }, - "coffee-script": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz" - }, - "colors": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz" - }, - "dateformat": { - "version": "1.0.2-1.2.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz" - }, - "eventemitter2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz" - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" - }, - "findup-sync": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", - "dependencies": { - "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - }, - "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "dependencies": { - "lru-cache": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.2.tgz" - }, - "sigmund": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz" - } - } - } - } - }, - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz" - } - } - }, - "getobject": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz" - }, - "glob": { - "version": "3.1.21", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", - "dependencies": { - "graceful-fs": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz" - }, - "inherits": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.0.tgz" - } - } - }, - "grunt-contrib-jshint": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.6.5.tgz", - "dependencies": { - "jshint": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.1.11.tgz", - "dependencies": { - "cli": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/cli/-/cli-0.4.5.tgz" - }, - "console-browserify": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-0.1.6.tgz" - }, - "shelljs": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.1.4.tgz" - }, - "underscore": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz" - } - } - } - } - }, - "grunt-contrib-watch": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.5.3.tgz", - "dependencies": { - "gaze": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.4.3.tgz", - "dependencies": { - "globule": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", - "dependencies": { - "lodash": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz" - } - } - } - } - }, - "tiny-lr": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.0.4.tgz", - "dependencies": { - "debug": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz" - }, - "faye-websocket": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.4.4.tgz" - }, - "noptify": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/noptify/-/noptify-0.0.3.tgz", - "dependencies": { - "nopt": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.0.0.tgz", - "dependencies": { - "abbrev": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.6.tgz" - } - } - } - } - }, - "qs": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-0.5.6.tgz" - } - } - } - } - }, - "grunt-legacy-log": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.1.tgz", - "dependencies": { - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz" - }, - "underscore.string": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz" - } - } - }, - "grunt-legacy-util": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz" - }, - "hooker": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz" - }, - "iconv-lite": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz" - }, - "js-yaml": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz", - "dependencies": { - "argparse": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", - "dependencies": { - "underscore": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz" - }, - "underscore.string": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz" - } - } - }, - "esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz" - } - } - }, - "lodash": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz" - }, - "minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "dependencies": { - "lru-cache": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.2.tgz" - }, - "sigmund": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz" - } - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "dependencies": { - "abbrev": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz" - } - } - }, - "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz" - }, - "underscore.string": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz" - }, - "which": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz" - } - } - }, - "grunt-contrib-jshint": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.11.2.tgz", - "dependencies": { - "hooker": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz" - }, - "jshint": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.7.0.tgz", - "dependencies": { - "cli": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/cli/-/cli-0.6.6.tgz", - "dependencies": { - "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - }, - "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "dependencies": { - "lru-cache": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.2.tgz" - }, - "sigmund": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz" - } - } - } - } - } - } - }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "dependencies": { - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz" - } - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" - }, - "htmlparser2": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.2.tgz", - "dependencies": { - "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz" - }, - "domhandler": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz" - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "dependencies": { - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz" - }, - "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz" - } - } - } - } - }, - "entities": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz" - }, - "readable-stream": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz", - "dependencies": { - "core-util-is": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz" - }, - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" - } - } - } - } - }, - "lodash": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.6.0.tgz" - }, - "minimatch": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.7.tgz", - "dependencies": { - "brace-expansion": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.0.tgz", - "dependencies": { - "balanced-match": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - } - } - } - } - }, - "shelljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz" - }, - "strip-json-comments": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.2.tgz" - } - } - } - } - }, "source-map": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.3.0.tgz", @@ -1862,414 +966,6 @@ "file-sync-cmp": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz" - }, - "grunt": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz", - "dependencies": { - "async": { - "version": "0.1.22", - "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz" - }, - "coffee-script": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz" - }, - "colors": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz" - }, - "dateformat": { - "version": "1.0.2-1.2.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz" - }, - "eventemitter2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz" - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" - }, - "findup-sync": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", - "dependencies": { - "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - }, - "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "dependencies": { - "lru-cache": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.2.tgz" - }, - "sigmund": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz" - } - } - } - } - }, - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz" - } - } - }, - "getobject": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz" - }, - "glob": { - "version": "3.1.21", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", - "dependencies": { - "graceful-fs": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz" - }, - "inherits": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.0.tgz" - } - } - }, - "grunt-contrib-jshint": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.6.5.tgz", - "dependencies": { - "jshint": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.1.11.tgz", - "dependencies": { - "cli": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/cli/-/cli-0.4.5.tgz" - }, - "console-browserify": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-0.1.6.tgz" - }, - "shelljs": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.1.4.tgz" - }, - "underscore": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz" - } - } - } - } - }, - "grunt-contrib-watch": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.5.3.tgz", - "dependencies": { - "gaze": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.4.3.tgz", - "dependencies": { - "globule": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", - "dependencies": { - "lodash": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz" - } - } - } - } - }, - "tiny-lr": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.0.4.tgz", - "dependencies": { - "debug": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz" - }, - "faye-websocket": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.4.4.tgz" - }, - "noptify": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/noptify/-/noptify-0.0.3.tgz", - "dependencies": { - "nopt": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.0.0.tgz", - "dependencies": { - "abbrev": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.6.tgz" - } - } - } - } - }, - "qs": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-0.5.6.tgz" - } - } - } - } - }, - "grunt-legacy-log": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.1.tgz", - "dependencies": { - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz" - }, - "underscore.string": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz" - } - } - }, - "grunt-legacy-util": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz" - }, - "hooker": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz" - }, - "iconv-lite": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz" - }, - "js-yaml": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz", - "dependencies": { - "argparse": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", - "dependencies": { - "underscore": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz" - }, - "underscore.string": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz" - } - } - }, - "esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz" - } - } - }, - "lodash": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz" - }, - "minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "dependencies": { - "lru-cache": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.2.tgz" - }, - "sigmund": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz" - } - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "dependencies": { - "abbrev": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz" - } - } - }, - "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz" - }, - "underscore.string": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz" - }, - "which": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz" - } - } - }, - "grunt-contrib-jshint": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.11.2.tgz", - "dependencies": { - "hooker": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz" - }, - "jshint": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.7.0.tgz", - "dependencies": { - "cli": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/cli/-/cli-0.6.6.tgz", - "dependencies": { - "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - }, - "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "dependencies": { - "lru-cache": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.2.tgz" - }, - "sigmund": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz" - } - } - } - } - } - } - }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "dependencies": { - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz" - } - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" - }, - "htmlparser2": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.2.tgz", - "dependencies": { - "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz" - }, - "domhandler": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz" - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "dependencies": { - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz" - }, - "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz" - } - } - } - } - }, - "entities": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz" - }, - "readable-stream": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz", - "dependencies": { - "core-util-is": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz" - }, - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" - } - } - } - } - }, - "lodash": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.6.0.tgz" - }, - "minimatch": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.7.tgz", - "dependencies": { - "brace-expansion": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.0.tgz", - "dependencies": { - "balanced-match": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - } - } - } - } - }, - "shelljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz" - }, - "strip-json-comments": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.2.tgz" - } - } - } - } } } }, @@ -2477,262 +1173,6 @@ } } }, - "grunt": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz", - "dependencies": { - "async": { - "version": "0.1.22", - "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz" - }, - "coffee-script": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz" - }, - "colors": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz" - }, - "dateformat": { - "version": "1.0.2-1.2.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz" - }, - "eventemitter2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz" - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" - }, - "findup-sync": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", - "dependencies": { - "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - }, - "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "dependencies": { - "lru-cache": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.2.tgz" - }, - "sigmund": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz" - } - } - } - } - }, - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz" - } - } - }, - "getobject": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz" - }, - "glob": { - "version": "3.1.21", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", - "dependencies": { - "graceful-fs": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz" - }, - "inherits": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.0.tgz" - } - } - }, - "grunt-contrib-jshint": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.6.5.tgz", - "dependencies": { - "jshint": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.1.11.tgz", - "dependencies": { - "cli": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/cli/-/cli-0.4.5.tgz" - }, - "console-browserify": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-0.1.6.tgz" - }, - "shelljs": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.1.4.tgz" - }, - "underscore": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz" - } - } - } - } - }, - "grunt-contrib-watch": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.5.3.tgz", - "dependencies": { - "gaze": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.4.3.tgz", - "dependencies": { - "globule": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", - "dependencies": { - "lodash": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz" - } - } - } - } - }, - "tiny-lr": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.0.4.tgz", - "dependencies": { - "debug": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz" - }, - "faye-websocket": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.4.4.tgz" - }, - "noptify": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/noptify/-/noptify-0.0.3.tgz", - "dependencies": { - "nopt": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.0.0.tgz", - "dependencies": { - "abbrev": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.6.tgz" - } - } - } - } - }, - "qs": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-0.5.6.tgz" - } - } - } - } - }, - "grunt-legacy-log": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.1.tgz", - "dependencies": { - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz" - }, - "underscore.string": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz" - } - } - }, - "grunt-legacy-util": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz" - }, - "hooker": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz" - }, - "iconv-lite": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz" - }, - "js-yaml": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz", - "dependencies": { - "argparse": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", - "dependencies": { - "underscore": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz" - }, - "underscore.string": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz" - } - } - }, - "esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz" - } - } - }, - "lodash": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz" - }, - "minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "dependencies": { - "lru-cache": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.2.tgz" - }, - "sigmund": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz" - } - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "dependencies": { - "abbrev": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz" - } - } - }, - "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz" - }, - "underscore.string": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz" - }, - "which": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz" - } - } - }, "grunt-contrib-jshint": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.8.0.tgz", @@ -2746,8 +1186,8 @@ "resolved": "https://registry.npmjs.org/cli/-/cli-0.4.5.tgz", "dependencies": { "glob": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.9.tgz", + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.13.tgz", "dependencies": { "inflight": { "version": "1.0.4", @@ -2854,8 +1294,8 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.4.0.tgz", "dependencies": { "lru-cache": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.4.tgz" + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.5.tgz" }, "sigmund": { "version": "1.0.1", @@ -2919,262 +1359,6 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/grunt-markdown/-/grunt-markdown-0.7.0.tgz", "dependencies": { - "grunt": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz", - "dependencies": { - "async": { - "version": "0.1.22", - "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz" - }, - "coffee-script": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz" - }, - "colors": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz" - }, - "dateformat": { - "version": "1.0.2-1.2.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz" - }, - "eventemitter2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz" - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" - }, - "findup-sync": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", - "dependencies": { - "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - }, - "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "dependencies": { - "lru-cache": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.2.tgz" - }, - "sigmund": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz" - } - } - } - } - }, - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz" - } - } - }, - "getobject": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz" - }, - "glob": { - "version": "3.1.21", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", - "dependencies": { - "graceful-fs": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz" - }, - "inherits": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.0.tgz" - } - } - }, - "grunt-contrib-jshint": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.6.5.tgz", - "dependencies": { - "jshint": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.1.11.tgz", - "dependencies": { - "cli": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/cli/-/cli-0.4.5.tgz" - }, - "console-browserify": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-0.1.6.tgz" - }, - "shelljs": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.1.4.tgz" - }, - "underscore": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz" - } - } - } - } - }, - "grunt-contrib-watch": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.5.3.tgz", - "dependencies": { - "gaze": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.4.3.tgz", - "dependencies": { - "globule": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", - "dependencies": { - "lodash": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz" - } - } - } - } - }, - "tiny-lr": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.0.4.tgz", - "dependencies": { - "debug": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz" - }, - "faye-websocket": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.4.4.tgz" - }, - "noptify": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/noptify/-/noptify-0.0.3.tgz", - "dependencies": { - "nopt": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.0.0.tgz", - "dependencies": { - "abbrev": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.6.tgz" - } - } - } - } - }, - "qs": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-0.5.6.tgz" - } - } - } - } - }, - "grunt-legacy-log": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.1.tgz", - "dependencies": { - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz" - }, - "underscore.string": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz" - } - } - }, - "grunt-legacy-util": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz" - }, - "hooker": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz" - }, - "iconv-lite": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz" - }, - "js-yaml": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz", - "dependencies": { - "argparse": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", - "dependencies": { - "underscore": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz" - }, - "underscore.string": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz" - } - } - }, - "esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz" - } - } - }, - "lodash": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz" - }, - "minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "dependencies": { - "lru-cache": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.2.tgz" - }, - "sigmund": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz" - } - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "dependencies": { - "abbrev": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz" - } - } - }, - "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz" - }, - "underscore.string": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz" - }, - "which": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz" - } - } - }, "grunt-contrib-jshint": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.3.0.tgz", @@ -3188,8 +1372,8 @@ "resolved": "https://registry.npmjs.org/cli/-/cli-0.4.5.tgz", "dependencies": { "glob": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.9.tgz", + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.13.tgz", "dependencies": { "inflight": { "version": "1.0.4", @@ -3244,7 +1428,7 @@ } }, "esprima": { - "version": "2.2.0", + "version": "2.5.0", "from": "esprima@https://github.com/ariya/esprima/tarball/master", "resolved": "https://github.com/ariya/esprima/tarball/master" }, @@ -3253,8 +1437,8 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.4.0.tgz", "dependencies": { "lru-cache": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.4.tgz" + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.5.tgz" }, "sigmund": { "version": "1.0.1", @@ -3287,8 +1471,8 @@ "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.3.4.tgz", "dependencies": { "fileset": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/fileset/-/fileset-0.1.5.tgz", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/fileset/-/fileset-0.1.8.tgz", "dependencies": { "glob": { "version": "3.2.11", @@ -3303,8 +1487,8 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", "dependencies": { "lru-cache": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.4.tgz" + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.5.tgz" }, "sigmund": { "version": "1.0.1", @@ -3321,8 +1505,8 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", "dependencies": { "lru-cache": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.4.tgz" + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.5.tgz" }, "sigmund": { "version": "1.0.1", @@ -3397,508 +1581,20 @@ } }, "grunt-webstore-upload": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/grunt-webstore-upload/-/grunt-webstore-upload-0.8.2.tgz", + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/grunt-webstore-upload/-/grunt-webstore-upload-0.8.5.tgz", "dependencies": { - "grunt": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz", - "dependencies": { - "async": { - "version": "0.1.22", - "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz" - }, - "coffee-script": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz" - }, - "colors": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz" - }, - "dateformat": { - "version": "1.0.2-1.2.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz" - }, - "eventemitter2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz" - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" - }, - "findup-sync": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", - "dependencies": { - "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - }, - "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "dependencies": { - "lru-cache": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.2.tgz" - }, - "sigmund": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz" - } - } - } - } - }, - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz" - } - } - }, - "getobject": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz" - }, - "glob": { - "version": "3.1.21", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", - "dependencies": { - "graceful-fs": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz" - }, - "inherits": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.0.tgz" - } - } - }, - "grunt-contrib-jshint": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.6.5.tgz", - "dependencies": { - "jshint": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.1.11.tgz", - "dependencies": { - "cli": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/cli/-/cli-0.4.5.tgz" - }, - "console-browserify": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-0.1.6.tgz" - }, - "shelljs": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.1.4.tgz" - }, - "underscore": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz" - } - } - } - } - }, - "grunt-contrib-watch": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.5.3.tgz", - "dependencies": { - "gaze": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.4.3.tgz", - "dependencies": { - "globule": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", - "dependencies": { - "lodash": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz" - } - } - } - } - }, - "tiny-lr": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.0.4.tgz", - "dependencies": { - "debug": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz" - }, - "faye-websocket": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.4.4.tgz" - }, - "noptify": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/noptify/-/noptify-0.0.3.tgz", - "dependencies": { - "nopt": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.0.0.tgz", - "dependencies": { - "abbrev": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.6.tgz" - } - } - } - } - }, - "qs": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-0.5.6.tgz" - } - } - } - } - }, - "grunt-legacy-log": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.1.tgz", - "dependencies": { - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz" - }, - "underscore.string": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz" - } - } - }, - "grunt-legacy-util": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz" - }, - "hooker": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz" - }, - "iconv-lite": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz" - }, - "js-yaml": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz", - "dependencies": { - "argparse": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", - "dependencies": { - "underscore": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz" - }, - "underscore.string": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz" - } - } - }, - "esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz" - } - } - }, - "lodash": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz" - }, - "minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "dependencies": { - "lru-cache": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.2.tgz" - }, - "sigmund": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz" - } - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "dependencies": { - "abbrev": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz" - } - } - }, - "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz" - }, - "underscore.string": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz" - }, - "which": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz" - } - } - }, - "grunt-contrib-clean": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-0.5.0.tgz", - "dependencies": { - "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz" - } - } - }, - "grunt-contrib-jshint": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.8.0.tgz", - "dependencies": { - "jshint": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.4.4.tgz", - "dependencies": { - "cli": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/cli/-/cli-0.4.5.tgz", - "dependencies": { - "glob": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.9.tgz", - "dependencies": { - "inflight": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz", - "dependencies": { - "wrappy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz" - } - } - }, - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - }, - "minimatch": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.8.tgz", - "dependencies": { - "brace-expansion": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.0.tgz", - "dependencies": { - "balanced-match": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - } - } - } - } - }, - "once": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.2.tgz", - "dependencies": { - "wrappy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz" - } - } - }, - "path-is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz" - } - } - } - } - }, - "console-browserify": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-0.1.6.tgz" - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" - }, - "htmlparser2": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", - "dependencies": { - "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz" - }, - "domhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz" - }, - "domutils": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz" - }, - "readable-stream": { - "version": "1.0.33", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz", - "dependencies": { - "core-util-is": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz" - }, - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" - } - } - } - } - }, - "minimatch": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.4.0.tgz", - "dependencies": { - "lru-cache": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.4.tgz" - }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz" - } - } - }, - "shelljs": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.1.4.tgz" - }, - "underscore": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz" - } - } - } - } - }, - "load-grunt-tasks": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/load-grunt-tasks/-/load-grunt-tasks-0.3.0.tgz", - "dependencies": { - "findup-sync": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", - "dependencies": { - "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - }, - "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "dependencies": { - "lru-cache": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.4.tgz" - }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz" - } - } - } - } - } - } - }, - "globule": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-0.2.0.tgz", - "dependencies": { - "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - }, - "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "dependencies": { - "lru-cache": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.4.tgz" - }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz" - } - } - } - } - }, - "minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "dependencies": { - "lru-cache": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.4.tgz" - }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz" - } - } - } - } - } - } - }, "lodash": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz" + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz" }, "open": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/open/-/open-0.0.5.tgz" }, "q": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/q/-/q-1.2.0.tgz" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz" } } }, @@ -3906,262 +1602,6 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/jszip/-/jszip-2.5.0.tgz", "dependencies": { - "grunt": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz", - "dependencies": { - "async": { - "version": "0.1.22", - "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz" - }, - "coffee-script": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz" - }, - "colors": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz" - }, - "dateformat": { - "version": "1.0.2-1.2.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz" - }, - "eventemitter2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz" - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" - }, - "findup-sync": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", - "dependencies": { - "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - }, - "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "dependencies": { - "lru-cache": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.2.tgz" - }, - "sigmund": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz" - } - } - } - } - }, - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz" - } - } - }, - "getobject": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz" - }, - "glob": { - "version": "3.1.21", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", - "dependencies": { - "graceful-fs": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz" - }, - "inherits": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.0.tgz" - } - } - }, - "grunt-contrib-jshint": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.6.5.tgz", - "dependencies": { - "jshint": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.1.11.tgz", - "dependencies": { - "cli": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/cli/-/cli-0.4.5.tgz" - }, - "console-browserify": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-0.1.6.tgz" - }, - "shelljs": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.1.4.tgz" - }, - "underscore": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz" - } - } - } - } - }, - "grunt-contrib-watch": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.5.3.tgz", - "dependencies": { - "gaze": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.4.3.tgz", - "dependencies": { - "globule": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", - "dependencies": { - "lodash": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz" - } - } - } - } - }, - "tiny-lr": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.0.4.tgz", - "dependencies": { - "debug": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz" - }, - "faye-websocket": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.4.4.tgz" - }, - "noptify": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/noptify/-/noptify-0.0.3.tgz", - "dependencies": { - "nopt": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.0.0.tgz", - "dependencies": { - "abbrev": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.6.tgz" - } - } - } - } - }, - "qs": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-0.5.6.tgz" - } - } - } - } - }, - "grunt-legacy-log": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.1.tgz", - "dependencies": { - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz" - }, - "underscore.string": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz" - } - } - }, - "grunt-legacy-util": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz" - }, - "hooker": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz" - }, - "iconv-lite": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz" - }, - "js-yaml": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz", - "dependencies": { - "argparse": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", - "dependencies": { - "underscore": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz" - }, - "underscore.string": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz" - } - } - }, - "esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz" - } - } - }, - "lodash": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz" - }, - "minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "dependencies": { - "lru-cache": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.2.tgz" - }, - "sigmund": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz" - } - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "dependencies": { - "abbrev": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz" - } - } - }, - "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz" - }, - "underscore.string": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz" - }, - "which": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz" - } - } - }, "grunt-contrib-jshint": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.10.0.tgz", @@ -4191,8 +1631,8 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", "dependencies": { "lru-cache": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.4.tgz" + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.5.tgz" }, "sigmund": { "version": "1.0.1", @@ -4219,8 +1659,8 @@ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" }, "htmlparser2": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.2.tgz", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", "dependencies": { "domelementtype": { "version": "1.3.0", @@ -4283,8 +1723,8 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-1.0.0.tgz", "dependencies": { "lru-cache": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.4.tgz" + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.5.tgz" }, "sigmund": { "version": "1.0.1", diff --git a/package.json b/package.json old mode 100755 new mode 100644 index 4281932db..9f8e7f2ec --- a/package.json +++ b/package.json @@ -3,27 +3,33 @@ "description": "Cross-browser userscript for maximum lurking on 4chan.", "meta": { "name": "4chan X", - "version": "1.10.13.1", - "date": "2015-05-27T18:54:32.769Z", - "repo": "https://github.com/ccd0/4chan-x/", - "page": "https://github.com/ccd0/4chan-x", - "downloads": "https://ccd0.github.io/4chan-x/builds/", + "fork": "ccd0", + "version": "1.11.9.2", + "date": "2015-08-17T01:13:28.335Z", + "page": "https://www.4chan-x.net/", + "downloads": "https://www.4chan-x.net/builds/", "oldVersions": "https://raw.githubusercontent.com/ccd0/4chan-x/", "faq": "https://github.com/ccd0/4chan-x/wiki/Frequently-Asked-Questions", + "license": "https://github.com/ccd0/4chan-x/blob/master/LICENSE", + "changelog": "https://github.com/ccd0/4chan-x/blob/master/CHANGELOG.md", + "issues": "https://gitreports.com/issue/ccd0/4chan-x", + "newIssue": "https://gitreports.com/issue/ccd0/4chan-x?issue_title=%title&details=%details", "appid": "lacclbnghgdicfifcamcmcnilckjamag", "chromeStoreID": "ohnjgmpcibpbafdlkimncjhflgedgpam", "recaptchaKey": "6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc", "youtubeAPIKey": "AIzaSyB5_zaen_-46Uhz1xGR-lz1YoUMHqCD6CE", - "buildsPath": "builds/", - "mainBranch": "master", + "awsBucket": "4chan-x", "matches": [ "*://boards.4chan.org/*", "*://sys.4chan.org/*", "*://a.4cdn.org/*", "*://i.4cdn.org/*", + "*://www.4chan.org/banned", + "*://www.4chan.org/feedback", "https://www.google.com/recaptcha/api2/anchor?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc*", "https://www.google.com/recaptcha/api2/frame?*&k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc*", - "*://www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc" + "*://www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc*", + "*://www.google.com/recaptcha/api/noscript?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc*" ], "suffix": { "stable": "", @@ -38,16 +44,16 @@ "dev": " dev" }, "min": { - "chrome": "32", + "chrome": "33", "firefox": "26", "greasemonkey": "1.14" } }, "devDependencies": { - "crx": "^3.0.2", - "font-awesome": "4.3.0", + "crx": "^3.0.3", + "font-awesome": "^4.4.0", "grunt": "^0.4.5", - "grunt-concurrent": "^1.0.0", + "grunt-concurrent": "^2.0.1", "grunt-contrib-clean": "^0.6.0", "grunt-contrib-coffee": "^0.13.0", "grunt-contrib-concat": "^0.5.1", @@ -56,7 +62,7 @@ "grunt-contrib-watch": "^0.6.1", "grunt-markdown": "^0.7.0", "grunt-shell": "^1.1.2", - "grunt-webstore-upload": "^0.8.2", + "grunt-webstore-upload": "^0.8.5", "jszip": "^2.5.0", "load-grunt-tasks": "^3.2.0", "npm-shrinkwrap": "^5.4.0" diff --git a/src/Archive/Redirect.coffee b/src/Archive/Redirect.coffee index e43889109..d34c3f73c 100755 --- a/src/Archive/Redirect.coffee +++ b/src/Archive/Redirect.coffee @@ -95,11 +95,13 @@ Redirect = location.protocol is 'http:' or Conf['Except Archives from Encryption'] - navigate: (URL, alternative) -> - if URL and ( - Redirect.securityCheck(URL) or - confirm "Redirect to #{URL}?\n\nYour connection will not be encrypted." + navigate: (dest, data, alternative) -> + Redirect.init() unless Redirect.data + url = Redirect.to dest, data + if url and ( + Redirect.securityCheck(url) or + confirm "Redirect to #{url}?\n\nYour connection will not be encrypted." ) - location.replace URL + location.replace url else if alternative location.replace alternative diff --git a/src/Archive/archives.json b/src/Archive/archives.json index f1a0e0bd5..6bf919de2 100644 --- a/src/Archive/archives.json +++ b/src/Archive/archives.json @@ -6,7 +6,7 @@ "https": true, "software": "foolfuuka", "boards": ["a", "an", "biz", "c", "co", "diy", "fit", "gd", "gif", "h", "i", "int", "jp", "k", "m", "mlp", "out", "po", "qa", "r9k", "s4s", "sci", "tg", "tv", "u", "v", "vg", "vp", "vr", "wsg"], - "files": ["a", "biz", "c", "co", "diy", "fit", "gd", "h", "i", "jp", "k", "m", "mlp", "po", "qa", "r9k", "s4s", "sci", "tg", "u", "v", "vg", "vp", "vr", "wsg"] + "files": ["a", "an", "biz", "c", "co", "diy", "fit", "gd", "gif", "h", "i", "int", "jp", "k", "m", "mlp", "out", "po", "qa", "r9k", "s4s", "sci", "tg", "u", "v", "vg", "vp", "vr", "wsg"] }, { "uid": 3, "name": "4plebs Archive", @@ -79,4 +79,13 @@ "software": "foolfuuka", "boards": ["mlp", "qa"], "files": ["mlp", "qa"] +}, { + "uid": 24, + "name": "fireden.net", + "domain": "boards.fireden.net", + "http": false, + "https": true, + "software": "foolfuuka", + "boards": ["cm", "ic", "vg", "y"], + "files": ["cm", "ic", "vg", "y"] }] diff --git a/src/Filtering/Filter.coffee b/src/Filtering/Filter.coffee index 48c18b01a..d1da7e139 100755 --- a/src/Filtering/Filter.coffee +++ b/src/Filtering/Filter.coffee @@ -17,12 +17,10 @@ Filter = # Don't mix up filter flags with the regular expression. filter = line.replace regexp[0], '' - # Do not add this filter to the list if it's not a global one - # and it's not specifically applicable to the current board. + # Comma-separated list of the boards this filter applies to. # Defaults to global. boards = filter.match(/boards:([^;]+)/)?[1].toLowerCase() or 'global' - if boards isnt 'global' and g.BOARD.ID not in boards.split ',' - continue + boards = if boards is 'global' then null else boards.split(',') if key in ['uniqueID', 'MD5'] # MD5 filter will use strings instead of regular expressions. @@ -66,7 +64,7 @@ Filter = top = filter.match(/top:(yes|no)/)?[1] or 'yes' top = top is 'yes' # Turn it into a boolean - @filters[key].push @createFilter regexp, op, stub, hl, top + @filters[key].push @createFilter regexp, boards, op, stub, hl, top # Only execute filter types that contain valid filters. unless @filters[key].length @@ -77,7 +75,7 @@ Filter = name: 'Filter' cb: @node - createFilter: (regexp, op, stub, hl, top) -> + createFilter: (regexp, boards, op, stub, hl, top) -> test = if typeof regexp is 'string' # MD5 checking @@ -91,7 +89,9 @@ Filter = class: hl top: top - (value, isReply) -> + (value, boardID, isReply) -> + if boards and boardID not in boards + return false if isReply and op is 'only' or !isReply and op is 'no' return false unless test value @@ -103,7 +103,7 @@ Filter = for key of Filter.filters when (value = Filter[key] @)? # Continue if there's nothing to filter (no tripcode for example). - for filter in Filter.filters[key] when result = filter value, @isReply + for filter in Filter.filters[key] when result = filter value, @board.ID, @isReply # Hide if result.hide and not @isFetchedQuote if @isReply @@ -123,7 +123,7 @@ Filter = isHidden: (post) -> for key of Filter.filters when (value = Filter[key] post)? - for filter in Filter.filters[key] when result = filter value, post.isReply + for filter in Filter.filters[key] when result = filter value, post.boardID, post.isReply return true if result.hide false diff --git a/src/General/Config.coffee b/src/General/Config.coffee index 3a34c7b0a..685aeefdb 100755 --- a/src/General/Config.coffee +++ b/src/General/Config.coffee @@ -39,7 +39,7 @@ Config = true 'Enable reporting posts to supported archives.' ] - 'Except Archives from Encryption': [ + 'Exempt Archives from Encryption': [ false 'Permit loading content from, and warningless redirects to, HTTP-only archives from HTTPS pages.' ] @@ -382,7 +382,7 @@ Config = 'Bookmark threads.' ] 'Fixed Thread Watcher': [ - null # XXX temporarily set in Main.coffee so old versions update to correct setting + true 'Makes the thread watcher scroll with the page.' 1 ] @@ -396,7 +396,7 @@ Config = 'Label each post from a new IP with the thread\'s current IP count.' ] - 'Posting': + 'Posting and Captchas': 'Quick Reply': [ true 'All-in-one form to reply, create threads, automate dumping and more.' @@ -421,23 +421,27 @@ Config = 'Open new threads or replies to a thread from the index in a new tab.' 1 ] - <% if (type === 'userscript') { %> 'Remember QR Size': [ false 'Remember the size of the Quick reply.' 1 ] - <% } %> 'Remember Spoiler': [ false 'Remember the spoiler state, instead of resetting after posting.' 1 ] + 'Randomize Filename': [ + false + 'Set the filename to a random timestamp within the past year. Disabled on /f/.' + 1 + ] 'Show New Thread Option in Threads': [ false 'Show the option to post a new / different thread from inside a thread.' 1 ] + # XXX This has been migrated to Name Sync and will be removed from 4chan X in a future version. 'Show Name and Subject': [ false 'Show the classic name, email, and subject fields in the QR, even when 4chan doesn\'t use them all.' @@ -480,7 +484,15 @@ Config = ] 'Captcha Fixes': [ true - 'Make captcha more keyboard-navigable.' + 'Make captcha easier to use, especially with the keyboard.' + ] + 'Use Recaptcha v1': [ + false + 'Use the old text version of Recaptcha.' + ] + 'Use Recaptcha v2 in Reports': [ + false + 'Use the image selection captcha in the report window.' ] 'Quote Links': @@ -587,6 +599,9 @@ Config = 'Fit Height': [ true ] + 'Stretch to Fit': [ + false + ] 'Scroll to Post': [ true ] @@ -653,6 +668,10 @@ Config = comment: """ # Filter Stallman copypasta on /g/: #/what you\'re refer+ing to as linux/i;boards:g + # Filter posts with 20 or more quote links: + #/(?:>>\\d(?:(?!>>\\d)[^])*){20}/ + # Filter posts like T H I S / H / I / S: + #/^>?\\s?\\w\\s?(\\w)\\s?(\\w)\\s?(\\w).*$[\\s>]+\\1[\\s>]+\\2[\\s>]+\\3/im """ flag: '' @@ -674,7 +693,9 @@ Config = #https://www.yandex.com/images/search?rpt=imageview&img_url=%IMG #//saucenao.com/search.php?url=%IMG #http://3d.iqdb.org/?url=%IMG + # tools: #http://regex.info/exif.cgi?imgurl=%URL + #//imgops.com/%URL;types:gif,jpg,png # uploaders: #//imgur.com/upload?url=%URL;types:gif,jpg,png,pdf;text:Upload to imgur # "View Same" in archives: @@ -738,6 +759,8 @@ Config = #options:"sage";boards:jp;always """ + captchaLanguage: '' + time: '%m/%d/%y(%a)%H:%M:%S' backlink: '>>%id' @@ -946,10 +969,6 @@ Config = true 'Automatically fetch new posts.' ] - 'Ignore Offline Status': [ - false - 'Update even if your browser reports you are offline.' - ] 'Optional Increase': [ false 'Increase the intervals between updates on threads without new posts.' diff --git a/src/General/CrossOrigin.coffee b/src/General/CrossOrigin.coffee index e70ad2744..14ea199a4 100644 --- a/src/General/CrossOrigin.coffee +++ b/src/General/CrossOrigin.coffee @@ -31,25 +31,41 @@ CrossOrigin = do -> cb new Uint8Array(response), contentType, contentDisposition <% } %> <% if (type === 'userscript') { %> - GM_xmlhttpRequest + # Use workaround for binary data in Greasemonkey versions < 3.2 and in JS Blocker (Safari) + workaround = $.engine is 'gecko' and GM_info? and /^[0-2]\.|^3\.[01](?!\d)/.test(GM_info.version) + workaround or= GM_info?.script?.includeJSB? + options = method: "GET" url: url headers: headers - overrideMimeType: "text/plain; charset=x-user-defined" onload: (xhr) -> - r = xhr.responseText - data = new Uint8Array r.length - i = 0 - while i < r.length - data[i] = r.charCodeAt i - i++ - contentType = xhr.responseHeaders.match(/Content-Type:\s*(.*)/i)?[1] - contentDisposition = xhr.responseHeaders.match(/Content-Disposition:\s*(.*)/i)?[1] + if workaround + r = xhr.responseText + data = new Uint8Array r.length + i = 0 + while i < r.length + data[i] = r.charCodeAt i + i++ + else + data = new Uint8Array xhr.response + if typeof xhr.responseHeaders is 'object' + # XXX https://github.com/infernoboy/JavaScript-Blocker/issues/35 + contentType = xhr.responseHeaders['Content-Type'] + contentDisposition = xhr.responseHeaders['Content-Disposition'] + else + contentType = xhr.responseHeaders.match(/Content-Type:\s*(.*)/i)?[1] + contentDisposition = xhr.responseHeaders.match(/Content-Disposition:\s*(.*)/i)?[1] cb data, contentType, contentDisposition onerror: -> cb null onabort: -> cb null + if workaround + # XXX https://github.com/infernoboy/JavaScript-Blocker/issues/35 + options.overrideMimeType = options.mimeType = 'text/plain; charset=x-user-defined' + else + options.responseType = 'arraybuffer' + GM_xmlhttpRequest options <% } %> file: (url, cb) -> @@ -62,6 +78,9 @@ CrossOrigin = do -> contentType?.match(/\bname\s*=\s*"((\\"|[^"])+)"/i)?[1] if match name = match.replace /\\"/g, '"' + if GM_info?.script?.includeJSB? + # Content type comes back as 'text/plain; charset=x-user-defined'; guess from filename instead. + mime = QR.typeFromExtension[name.match(/[^.]*$/)[0].toLowerCase()] or 'application/octet-stream' blob = new Blob([data], {type: mime}) blob.name = name cb blob diff --git a/src/General/Index.coffee b/src/General/Index.coffee index 74a4dfaab..82cdda77c 100644 --- a/src/General/Index.coffee +++ b/src/General/Index.coffee @@ -105,7 +105,7 @@ Index = d.implementation.createDocument(null, null, null).appendChild board $.rm el for el in $$ '.navLinks' - $.id('search-box')?.parentNode.remove() + $.rm $.id('ctrl-top') topNavPos = $.id('delform').previousElementSibling $.before topNavPos, $.el 'hr' $.before topNavPos, Index.navLinks @@ -227,13 +227,13 @@ Index = popstate: (e) -> if e?.state {search, mode} = e.state - page = Index.getCurrentPage() state = {} if Index.search isnt search state.search = Index.search = search if Conf['Index Mode'] isnt mode state.mode = mode Index.saveMode mode + page = Index.getCurrentPage() if Index.currentPage isnt page state.page = Index.currentPage = page if state.search? or state.mode? or state.page? @@ -412,7 +412,6 @@ Index = "#{hiddenCount} hidden threads" update: (state) -> - delete Index.pageNum Index.req?.abort() Index.notice?.close() @@ -631,8 +630,11 @@ Index = i = 0 i++ while Index.followedThreadID isnt Get.threadFromRoot(Index.sortedNodes[i]).ID page = i // Index.threadsNumPerPage + 1 - Index.pushState {page} if page isnt Index.getCurrentPage() + if page isnt Index.getCurrentPage() + Index.pushState {page} + Index.setPage() nodes = Index.buildSinglePage Index.getCurrentPage() + delete Index.pageNum $.rmAll Index.root $.rmAll Header.hover if Conf['Index Mode'] is 'catalog' diff --git a/src/General/Main.coffee b/src/General/Main.coffee index b0e6fcd5e..08184bf76 100755 --- a/src/General/Main.coffee +++ b/src/General/Main.coffee @@ -1,12 +1,21 @@ Main = init: -> + # XXX Work around Pale Moon / old Firefox + GM 1.15 bug where script runs in iframe with wrong window.location. + return if d.body and not $ 'title', d.head + + # XXX dwb userscripts extension reloads scripts run at document-start when replaceState/pushState is called. + return if window['<%= meta.name %> antidup'] + window['<%= meta.name %> antidup'] = true + if location.hostname is 'www.google.com' - if location.pathname is '/recaptcha/api/fallback' + if location.pathname is '/recaptcha/api/noscript' $.ready -> Captcha.noscript.initFrame() - else - $.get 'Captcha Fixes', true, ({'Captcha Fixes': enabled}) -> - if enabled - $.ready -> Captcha.fixes.init() + return + if location.pathname is '/recaptcha/api/fallback' + $.ready -> Captcha.v2.initFrame() + $.get 'Captcha Fixes', true, ({'Captcha Fixes': enabled}) -> + if enabled + $.ready -> Captcha.fixes.init() return g.threads = new SimpleDict() @@ -28,8 +37,7 @@ Main = if g.VIEW is 'thread' g.THREADID = +pathname[3] - # flatten Config into Conf - # and get saved or default values + # Flatten default values from Config into Conf flatten = (parent, obj) -> if obj instanceof Array Conf[parent] = obj[0] @@ -45,37 +53,83 @@ Main = for db in DataBoard.keys Conf[db] = boards: {} Conf['selectedArchives'] = {} + Conf['cooldowns'] = {} - $.get Conf, (items) -> - $.extend Conf, items - # XXX temporarily set here so old versions update to correct setting - Conf['Fixed Thread Watcher'] ?= Conf['Toggleable Thread Watcher'] - $.asap (-> doc = d.documentElement), Main.initFeatures + # XXX old key names + Conf['Except Archives from Encryption'] = false + + # Get saved values as items + items = {} + items[key] = undefined for key of Conf + items['previousversion'] = undefined + $.get items, (items) -> + $.asap (-> doc = d.documentElement), -> + + # Fresh install + if !items.previousversion? + Main.ready -> + $.set 'previousversion', g.VERSION + Settings.open() + + # Migrate old settings + else if items.previousversion isnt g.VERSION + Main.upgrade items + + # Combine default values with saved values + for key, val of Conf + Conf[key] = items[key] ? val + + Main.initFeatures() # set up CSS when is completely loaded $.asap (-> doc = d.documentElement), -> $.onExists doc, 'body', false, Main.initStyle + upgrade: (items) -> + {previousversion} = items + items2 = {previousversion: g.VERSION} + compareString = previousversion.replace(/\d+/g, (x) -> ('0000'+x)[-5..]) + + if compareString < '00001.00011.00008.00000' + unless items['Fixed Thread Watcher']? + items2['Fixed Thread Watcher'] = items['Toggleable Thread Watcher'] ? true + unless items['Exempt Archives from Encryption']? + items2['Exempt Archives from Encryption'] = items['Except Archives from Encryption'] ? false + + $.extend items, items2 + $.set items2, -> + if items['Show Updated Notifications'] ? true + el = $.el 'span', + <%= html(meta.name + ' has been updated to version ${g.VERSION}.') %> + new Notice 'info', el, 15 + initFeatures: -> - if location.hostname in ['boards.4chan.org', 'sys.4chan.org'] + if location.hostname in ['boards.4chan.org', 'sys.4chan.org', 'www.4chan.org'] $.globalEval 'document.documentElement.classList.add("js-enabled");' switch location.hostname + when 'www.4chan.org' + Captcha.replace.init() + return when 'a.4cdn.org' return when 'sys.4chan.org' Report.init() PostSuccessful.init() if g.VIEW is 'post' + if Conf['404 Redirect'] and /\/imgboard\.php$/.test(location.pathname) and (match = location.search.match /\bres=(\d+)/) + $.ready -> + if $.id('errmsg')?.textContent is 'Error: Specified thread does not exist.' + Redirect.navigate 'thread', + boardID: g.BOARD.ID + postID: +match[1] return when 'i.4cdn.org' $.asap (-> d.readyState isnt 'loading'), -> if Conf['404 Redirect'] and d.title in ['4chan - Temporarily Offline', '4chan - 404 Not Found'] - Redirect.init() pathname = location.pathname.split '/' - URL = Redirect.to 'file', + Redirect.navigate 'file', boardID: g.BOARD.ID filename: pathname[pathname.length - 1] - Redirect.navigate URL else if video = $ 'video' if Conf['Volume in New Tab'] Volume.setup video @@ -109,12 +163,15 @@ Main = $.ready Main.initReady initStyle: -> + $.addStyle Main.cssWWW if location.hostname is 'www.4chan.org' + return if !Main.isThisPageLegit() or $.hasClass doc, 'fourchan-x' + # disable the mobile layout $('link[href*=mobile]', d.head)?.disabled = true $.addClass doc, 'fourchan-x', 'seaweedchan' $.addClass doc, if g.VIEW is 'thread' then 'thread-view' else g.VIEW - $.addClass doc, if chrome? then 'blink' else 'gecko' + $.addClass doc, $.engine if $.engine $.addStyle Main.css, 'fourchanx-css' keyboard = false @@ -146,17 +203,19 @@ Main = attributeFilter: ['href'] initReady: -> - if d.title in ['4chan - Temporarily Offline', '4chan - 404 Not Found'] - if g.VIEW is 'thread' - ThreadWatcher.set404 g.BOARD.ID, g.THREADID, -> - if Conf['404 Redirect'] - href = Redirect.to 'thread', - boardID: g.BOARD.ID - threadID: g.THREADID - postID: +location.hash.match /\d+/ # post number or 0 - Redirect.navigate href, "/#{g.BOARD}/" + # XXX Sometimes threads don't 404 but are left over as stubs containing one garbage reply post. + if g.VIEW is 'thread' and (d.title in ['4chan - Temporarily Offline', '4chan - 404 Not Found'] or ($('.board') and not $('.opContainer'))) + ThreadWatcher.set404 g.BOARD.ID, g.THREADID, -> + if Conf['404 Redirect'] + Redirect.navigate 'thread', + boardID: g.BOARD.ID + threadID: g.THREADID + postID: +location.hash.match /\d+/ # post number or 0 + , "/#{g.BOARD}/" return + return if d.title in ['4chan - Temporarily Offline', '4chan - 404 Not Found'] + # 4chan Pass Link if styleSelector = $.id 'styleSelector' passLink = $.el 'a', @@ -174,25 +233,7 @@ Main = else $.event '4chanXInitFinished' - $.get 'previousversion', null, ({previousversion}) -> - return if previousversion is g.VERSION - if previousversion - el = $.el 'span', - <%= html(meta.name + ' has been updated to version ${g.VERSION}.') %> - new Notice 'info', el, 15 - else - Settings.open() - $.set 'previousversion', g.VERSION - if Conf['Show Support Message'] - <% if (type === 'userscript') { %> - GMver = GM_info.version.split '.' - for v, i in "<%= meta.min.greasemonkey %>".split '.' - continue if v is GMver[i] - (v < GMver[i]) or new Notice 'warning', "Your version of Greasemonkey is outdated (v#{GM_info.version} instead of v<%= meta.min.greasemonkey %> minimum) and <%= meta.name %> may not operate correctly.", 30 - break - <% } %> - try localStorage.getItem '4chan-settings' catch err @@ -263,11 +304,11 @@ Main = else if errors.length is 1 error = errors[0] if error - new Notice 'error', Main.parseError(error), 15 + new Notice 'error', Main.parseError(error, Main.reportLink([error])), 15 return div = $.el 'div', - <%= html('${errors.length} errors occurred. [show]') %> + <%= html('${errors.length} errors occurred.&{Main.reportLink(errors)} [show]') %> $.on div.lastElementChild, 'click', -> [@textContent, logs.hidden] = if @textContent is 'show' ['hide', false] @@ -281,13 +322,34 @@ Main = new Notice 'error', [div, logs], 30 - parseError: (data) -> + parseError: (data, reportLink) -> c.error data.message, data.error.stack message = $.el 'div', - textContent: data.message + <%= html('${data.message}?{reportLink}{&{reportLink}}') %> error = $.el 'div', textContent: "#{data.error.name or 'Error'}: #{data.error.message or 'see console for details'}" - [message, error] + lines = data.error.stack?.match(/\d+(?=:\d+\)?$)/mg)?.join().replace(/^/, ' at ') or '' + context = $.el 'div', + textContent: "(<%= meta.name %> <%= meta.fork %> v#{g.VERSION} <%= type %> on #{$.engine}#{lines})" + [message, error, context] + + reportLink: (errors) -> + data = errors[0] + title = data.message + title += " (+#{errors.length - 1} other errors)" if errors.length > 1 + details = """ + [Please describe the steps needed to reproduce this error.] + + Script: <%= meta.name %> <%= meta.fork %> v#{g.VERSION} <%= type %> + User agent: #{navigator.userAgent} + URL: #{location.href} + + #{data.error} + #{data.error.stack?.replace(data.error.toString(), '').trim() or ''} + """ + details = details.replace /file:\/{3}.+\//g, '' # Remove local file paths + url = "<%= meta.newIssue.replace('%title', '#{encodeURIComponent title}').replace('%details', '#{encodeURIComponent details}') %>" + <%= html(' [report]') %> isThisPageLegit: -> # 404 error page or similar. @@ -301,17 +363,13 @@ Main = $.ready -> cb() if Main.isThisPageLegit() - css: `<%= - grunt.template.process( - ['font-awesome', 'style', 'yotsuba', 'yotsuba-b', 'futaba', 'burichan', 'tomorrow', 'photon'].map(function(name) { - return grunt.file.read('src/General/css/'+name+'.css'); - }).join(''), - {data: {type: type}} - ).trim().replace(/\n+/g, '\n').split(/^/m).map(JSON.stringify).join(' +\n').replace(/`/g, '\\`') - %>` + css: `<%= importCSS('font-awesome', 'style', 'yotsuba', 'yotsuba-b', 'futaba', 'burichan', 'tomorrow', 'photon') %>` + + cssWWW: `<%= importCSS('www') %>` features: [ ['Polyfill', Polyfill] + ['Captcha Replacement', Captcha.replace] ['Redirect', Redirect] ['Header', Header] ['Catalog Links', CatalogLinks] @@ -332,6 +390,7 @@ Main = ['Recursive', Recursive] ['Strike-through Quotes', QuoteStrikeThrough] ['Quick Reply', QR] + ['Cooldown', QR.cooldown] ['Menu', Menu] ['Index Generator (Menu)', Index.menu] ['Report Link', ReportLink] diff --git a/src/General/Settings.coffee b/src/General/Settings.coffee index bd88fb1f2..2dc4966c1 100755 --- a/src/General/Settings.coffee +++ b/src/General/Settings.coffee @@ -103,6 +103,7 @@ Settings = description = arr[1] div = $.el 'div', <%= html(': ${description}') %> + div.hidden = true if $.engine isnt 'gecko' and key is 'Remember QR Size' # XXX not supported input = $ 'input', div $.on input, 'change', -> @parentNode.parentNode.dataset.checked = @checked @@ -155,11 +156,9 @@ Settings = a = $.el 'a', download: "<%= meta.name %> v#{g.VERSION}-#{data.date}.json" href: "data:application/json;base64,#{btoa unescape encodeURIComponent JSON.stringify data, null, 2}" - <% if (type === 'userscript') { %> p = $ '.imp-exp-result', Settings.dialog $.rmAll p $.add p, a - <% } %> a.click() import: -> $('input[type=file]', @parentNode).click() @@ -314,7 +313,7 @@ Settings = items = {} inputs = {} - for name in ['boardnav', 'time', 'backlink', 'fileInfo', 'favicon', 'usercss', 'customCooldown'] + for name in ['captchaLanguage', 'boardnav', 'time', 'backlink', 'fileInfo', 'favicon', 'usercss', 'customCooldown'] input = $ "[name='#{name}']", section items[name] = Conf[name] inputs[name] = input @@ -323,9 +322,9 @@ Settings = else if name is 'favicon' $.on input, 'change', $.cb.value $.on input, 'change', Settings[name] - else + else $.on input, 'input', $.cb.value - $.on input, 'input', Settings[name] + $.on input, 'input', Settings[name] if name of Settings # Quick Reply Personas ta = $ '.personafield', section @@ -338,8 +337,8 @@ Settings = for key, val of items input = inputs[key] input.value = val - continue if key in ['usercss', 'customCooldown'] - Settings[key].call input + if key of Settings and key isnt 'usercss' + Settings[key].call input return interval = $ 'input[name="Interval"]', section diff --git a/src/General/UI.coffee b/src/General/UI.coffee index b7fb0cee6..e38096b2d 100755 --- a/src/General/UI.coffee +++ b/src/General/UI.coffee @@ -102,7 +102,13 @@ UI = do -> insertEntry: (entry, parent, data) -> if typeof entry.open is 'function' - return unless entry.open data + try + return unless entry.open data + catch err + Main.handleErrors + message: "Error in building the #{@type} menu." + error: err + return $.add parent, entry.el return unless entry.subEntries @@ -331,11 +337,9 @@ UI = do -> $.on d, 'keydown', o.hoverend $.on root, 'mousemove', o.hover - <% if (type === 'userscript') { %> # Workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=674955 o.workaround = (e) -> o.hoverend(e) unless root.contains e.target $.on doc, 'mousemove', o.workaround - <% } %> hover = (e) -> @latestEvent = e @@ -365,10 +369,8 @@ UI = do -> $.off @root, @endEvents, @hoverend $.off d, 'keydown', @hoverend $.off @root, 'mousemove', @hover - <% if (type === 'userscript') { %> # Workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=674955 $.off doc, 'mousemove', @workaround - <% } %> @cb.call @ if @cb checkbox = (name, text, checked) -> diff --git a/src/General/css/report.css b/src/General/css/report.css new file mode 100644 index 000000000..46a39ba0a --- /dev/null +++ b/src/General/css/report.css @@ -0,0 +1,6 @@ +:root:not(.js-enabled) #captchaContainerAlt { + height: auto; +} +noscript > iframe, #recaptcha_challenge_field { + width: 500px; +} diff --git a/src/General/css/style.css b/src/General/css/style.css index 15de61fbf..c57a96bf0 100755 --- a/src/General/css/style.css +++ b/src/General/css/style.css @@ -105,9 +105,16 @@ hr + div.center:not(.ad-cnt):not(.topad):not(.middlead):not(.bottomad) { /* party hats */ pointer-events: none; } +#g-recaptcha { + min-height: 78px; + height: auto; +} :root:not(.js-enabled) #postForm { display: table; } +#captchaContainerAlt td:nth-child(2) { + display: table-cell !important; +} /* Anti-autoplay */ audio.controls-added { @@ -120,6 +127,11 @@ audio.controls-added { height: auto; text-align: center; } +:root.anti-autoplay .autoplay-removed { + display: block !important; + min-width: 640px; + min-height: 390px; +} /* fixed, z-index */ #overlay, @@ -161,9 +173,15 @@ audio.controls-added { #embedding { z-index: 11; } -#thread-watcher { +:root.fixed-watcher #thread-watcher { z-index: 10; } +:root.fixed:not(.gallery-open) #header-bar:not(:hover) { + z-index: 8; +} +#thread-watcher { + z-index: 5; +} /* Header */ .fixed.top-header body { @@ -239,7 +257,7 @@ audio.controls-added { height: 10px; position: absolute; } -:root:not(.autohide) #scroll-marker { +#header-bar:not(.autohide) #scroll-marker { pointer-events: none; } #header-bar #scroll-marker { @@ -318,6 +336,7 @@ audio.controls-added { flex: auto; display: -webkit-flex; display: flex; + width: 0px; /* XXX Fixes Edge not shrinking the board list below default size when needed */ } :root.fixed:not(.centered-links) #full-board-list > .boardList > a, :root.fixed:not(.centered-links) #full-board-list > .boardList > span:not(.space):not(.spacer) { @@ -530,7 +549,7 @@ div[data-checked="false"] > .suboption-list { .section-filter textarea { height: 500px; } -.section-filter a { +.section-filter a, .section-advanced a { text-decoration: underline; } .section-sauce textarea { @@ -621,10 +640,10 @@ div[data-checked="false"] > .suboption-list { left: -1em; width: 0; } -<% if (type === 'crx') { %> /* ``::-webkit-*'' selectors break selector lists on Firefox. */ -#index-search::-webkit-search-cancel-button, -<% } %> +#index-search::-webkit-search-cancel-button { + display: none; +} #index-search:not([data-searching]) + #index-search-clear { display: none; } @@ -792,10 +811,11 @@ span.hide-announcement { #thread-watcher { padding-bottom: 3px; padding-left: 3px; - overflow: hidden; white-space: nowrap; min-width: 146px; - max-height: 92%; +} +#watched-threads { + overflow-x: hidden; overflow-y: auto; } #thread-watcher .refresh { @@ -804,7 +824,12 @@ span.hide-announcement { :root.fixed-watcher #thread-watcher { position: fixed; } -:root:not(.fixed-watcher) #thread-watcher:not(:hover) { +:root.fixed-watcher #watched-threads { + /* XXX https://code.google.com/p/chromium/issues/detail?id=168840, https://bugs.webkit.org/show_bug.cgi?id=94158 */ + max-height: 85vh; + max-height: calc(100vh - 75px); +} +:root:not(.fixed-watcher) #watched-threads:not(:hover) { max-height: 210px; overflow-y: hidden; } @@ -976,6 +1001,11 @@ span.hide-announcement { :root.fit-height .full-image { max-height: 100vh; } +:root.fit-height.fixed .full-image { + /* XXX https://code.google.com/p/chromium/issues/detail?id=168840, https://bugs.webkit.org/show_bug.cgi?id=94158 */ + max-height: 93vh; + max-height: calc(100vh - 35px); +} :root.fit-width .full-image { max-width: 100%; } @@ -1150,6 +1180,13 @@ input[name="Default Volume"] { min-width: 300px; border-radius: 3px 3px 0 0; } +#qr > form { + /* XXX https://code.google.com/p/chromium/issues/detail?id=168840, https://bugs.webkit.org/show_bug.cgi?id=94158 */ + max-height: 85vh; + max-height: calc(100vh - 75px); + overflow-y: auto; + overflow-x: hidden; +} #qrtab { border-radius: 3px 3px 0 0; } @@ -1222,7 +1259,7 @@ input.field.tripped:not(:hover):not(:focus) { top: 2px; } -/* Noscript Recaptcha */ +/* Recaptcha v1 */ .captcha-img { margin: 0px; text-align: center; @@ -1231,11 +1268,11 @@ input.field.tripped:not(:hover):not(:focus) { min-height: 59px; min-width: 302px; } -.captcha-input{ +.captcha-input { width: 100%; margin: 1px 0 0; } -#qr-captcha-iframe { +#qr.captcha-v1 #qr-captcha-iframe { display: none; } @@ -1263,6 +1300,13 @@ input.field.tripped:not(:hover):not(:focus) { display: block; width: 100%; } +#qr.captcha-v2 #qr-captcha-iframe { + width: 302px; + height: 423px; + border: 0; + display: block; + margin: auto; +} .goog-bubble-content { max-width: 100vw; max-height: 100vh; @@ -1317,6 +1361,7 @@ input#qr-filename { .has-file #qr-filename { -webkit-flex: 1 1 auto; flex: 1 1 auto; + width: 0px; /* XXX Fixes filename not shrinking to allow space for buttons in Edge */ display: inline-block; padding: 0; padding-left: 3px; @@ -1466,6 +1511,8 @@ a:only-of-type > .remove { } .textarea { position: relative; + display: -webkit-flex; + display: flex; } :root.webkit .textarea { margin-bottom: -2px; @@ -1505,7 +1552,7 @@ a:only-of-type > .remove { height: 15px; text-align: center; } -.menu-button + .container:not(:empty) { +.menu-button + .container :first-child { margin-left: -5px; } #menu { @@ -1752,12 +1799,7 @@ grunt.file.expand('src/General/img/links/*.png').map(function(file) { } .gal-fit-height .gal-image img, .gal-fit-height .gal-image video { - /* - Chrome doesn't support viewpoint units in calc() - http://bugs.chromium.org/168840 - "It looks like the original author of viewport units in WebKit is not coming back to fix this stuff." - Well, fuck. - */ + /* XXX https://code.google.com/p/chromium/issues/detail?id=168840, https://bugs.webkit.org/show_bug.cgi?id=94158 */ max-height: 95vh; max-height: calc(100vh - 25px); } @@ -1860,6 +1902,6 @@ grunt.file.expand('src/General/img/links/*.png').map(function(file) { width: 4em; } :root.gallery-open.fixed #header-bar:not(.autohide), -:root.gallery-open.fixed #header-bar:not(.autohide) .fa::before { +:root.gallery-open.fixed #header-bar:not(.autohide) #shortcuts .fa::before { visibility: hidden; } diff --git a/src/General/css/www.css b/src/General/css/www.css new file mode 100644 index 000000000..01b12c399 --- /dev/null +++ b/src/General/css/www.css @@ -0,0 +1,3 @@ +#captcha-cnt { + height: auto; +} diff --git a/src/General/html/Settings/Advanced.html b/src/General/html/Settings/Advanced.html index 8d5d60063..e6b5f38ef 100755 --- a/src/General/html/Settings/Advanced.html +++ b/src/General/html/Settings/Advanced.html @@ -12,6 +12,12 @@ +
+ Captcha Language +
Choose from list of language codes. Leave blank to autoselect.
+
+
+
Custom Board Navigation
@@ -41,7 +47,7 @@
Time Formatting is disabled.
:
-
Supported format specifiers:
+
Supported format specifiers:
Day: %a, %A, %d, %e
Month: %m, %b, %B
Year: %y, %Y
diff --git a/src/General/html/Settings/Filter-guide.html b/src/General/html/Settings/Filter-guide.html index 5b5f981cc..9d453ced6 100755 --- a/src/General/html/Settings/Filter-guide.html +++ b/src/General/html/Settings/Filter-guide.html @@ -1,6 +1,6 @@
Filter is disabled.

- Use regular expressions, one per line.
+ Use regular expressions, one per line.
Lines starting with a # will be ignored.
For example, /weeaboo/i will filter posts containing the string `weeaboo`, case-insensitive.
MD5 filtering uses exact string matching, not regular expressions. diff --git a/src/General/html/Settings/Settings.html b/src/General/html/Settings/Settings.html index 71f37b68b..1f6d5f996 100755 --- a/src/General/html/Settings/Settings.html +++ b/src/General/html/Settings/Settings.html @@ -7,8 +7,8 @@ Reset Settings |  <%= meta.name %> |  - ${g.VERSION} |  - Issues |  + ${g.VERSION} |  + Issues |  diff --git a/src/General/lib/$.coffee b/src/General/lib/$.coffee index c4cb67e39..c456b8bd5 100755 --- a/src/General/lib/$.coffee +++ b/src/General/lib/$.coffee @@ -117,6 +117,11 @@ $.asap = (test, cb) -> $.onExists = (root, selector, subtree, cb) -> if el = $ selector, root return cb el + # XXX Edge doesn't notify MutationObservers of nodes added as document loads. + if $.engine is 'edge' and d.readyState is 'loading' + $.asap (-> d.readyState isnt 'loading' or $ selector, root), -> + $.onExists root, selector, subtree, cb + return observer = new MutationObserver -> if el = $ selector, root observer.disconnect() @@ -156,7 +161,7 @@ $.hasClass = (el, className) -> className in el.classList $.rm = (el) -> - el.remove() + el?.remove() $.rmAll = (root) -> # https://gist.github.com/MayhemYDG/8646194 @@ -242,9 +247,12 @@ unless typeof cloneInto is 'function' or /^[01]\./.test(GM_info.version) or GM_i $.open = <% if (type === 'userscript') { %> - GM_openInTab + if GM_openInTab? + GM_openInTab + else + (url) -> window.open url, '_blank' <% } else { %> - (URL) -> window.open URL, '_blank' + (url) -> window.open url, '_blank' <% } %> $.debounce = (wait, fn) -> @@ -320,6 +328,12 @@ $.minmax = (value, min, max) -> $.hasAudio = (video) -> video.mozHasAudio or !!video.webkitAudioDecodedByteCount +$.engine = do -> + return 'edge' if /Edge\//.test navigator.userAgent + return 'blink' if /Chrome\//.test navigator.userAgent + return 'webkit' if /WebKit\//.test navigator.userAgent + return 'gecko' if /Gecko\/|Goanna/.test navigator.userAgent # Goanna = Pale Moon 26+ + $.item = (key, val) -> item = {} item[key] = val @@ -434,42 +448,76 @@ do -> <% } else { %> # http://wiki.greasespot.net/Main_Page -$.oldValue = {} +# https://tampermonkey.net/documentation.php +if GM_deleteValue? + $.getValue = GM_getValue + $.listValues = -> GM_listValues() # error when called if missing +else + $.getValue = (key) -> localStorage[key] + $.listValues = -> + key for key of localStorage when key[...g.NAMESPACE.length] is g.NAMESPACE -$.sync = (key, cb) -> - key = g.NAMESPACE + key - $.syncing[key] = cb - $.oldValue[key] = GM_getValue key - -do -> - onChange = (key) -> - return unless cb = $.syncing[key] - newValue = GM_getValue key - return if newValue is $.oldValue[key] - if newValue? - $.oldValue[key] = newValue - cb JSON.parse(newValue), key - else +if GM_addValueChangeListener? + $.setValue = GM_setValue + $.deleteValue = GM_deleteValue +else if GM_deleteValue? + $.oldValue = {} + $.setValue = (key, val) -> + GM_setValue key, val + if key of $.syncing + $.oldValue[key] = val + localStorage[key] = val # for `storage` events + $.deleteValue = (key) -> + GM_deleteValue key + if key of $.syncing delete $.oldValue[key] - cb undefined, key - $.on window, 'storage', ({key}) -> onChange key + delete localStorage[key] # for `storage` events +else + $.oldValue = {} + $.setValue = (key, val) -> + $.oldValue[key] = val if key of $.syncing + localStorage[key] = val + $.deleteValue = (key) -> + delete $.oldValue[key] if key of $.syncing + delete localStorage[key] - $.forceSync = (key) -> - # Storage events don't work across origins - # e.g. http://boards.4chan.org and https://boards.4chan.org - # so force a check for changes to avoid lost data. - onChange g.NAMESPACE + key +if GM_addValueChangeListener? + $.sync = (key, cb) -> + $.syncing[key] = GM_addValueChangeListener g.NAMESPACE + key, (key2, oldValue, newValue, remote) -> + if remote + newValue = JSON.parse newValue unless newValue is undefined + cb newValue, key + $.forceSync = -> +else + $.sync = (key, cb) -> + key = g.NAMESPACE + key + $.syncing[key] = cb + $.oldValue[key] = $.getValue key + + do -> + onChange = (key) -> + return unless cb = $.syncing[key] + newValue = $.getValue key + return if newValue is $.oldValue[key] + if newValue? + $.oldValue[key] = newValue + cb JSON.parse(newValue), key[g.NAMESPACE.length..] + else + delete $.oldValue[key] + cb undefined, key[g.NAMESPACE.length..] + $.on window, 'storage', ({key}) -> onChange key + + $.forceSync = (key) -> + # Storage events don't work across origins + # e.g. http://boards.4chan.org and https://boards.4chan.org + # so force a check for changes to avoid lost data. + onChange g.NAMESPACE + key $.delete = (keys) -> unless keys instanceof Array keys = [keys] for key in keys - key = g.NAMESPACE + key - GM_deleteValue key - if key of $.syncing - delete $.oldValue[key] - # for `storage` events - localStorage.removeItem key + $.deleteValue g.NAMESPACE + key return $.get = (key, val, cb) -> @@ -480,38 +528,27 @@ $.get = (key, val, cb) -> cb = val $.queueTask -> for key of items - if val = GM_getValue g.NAMESPACE + key + if val = $.getValue g.NAMESPACE + key items[key] = JSON.parse val cb items -$.set = do -> - set = (key, val) -> - key = g.NAMESPACE + key - val = JSON.stringify val - GM_setValue key, val - if key of $.syncing - $.oldValue[key] = val - # for `storage` events - localStorage.setItem key, val - - (keys, val, cb) -> - if typeof keys is 'string' - set keys, val - else - set key, value for key, value of keys - cb = val - cb?() +$.set = (keys, val, cb) -> + if typeof keys is 'string' + $.setValue(g.NAMESPACE + keys, JSON.stringify val) + else + for key, value of keys + $.setValue(g.NAMESPACE + key, JSON.stringify value) + cb = val + cb?() $.clear = (cb) -> # XXX https://github.com/greasemonkey/greasemonkey/issues/2033 + # Also support case where GM_listValues is not defined. $.delete Object.keys(Conf) - $.delete ['previousversion', 'AutoWatch', 'cooldown.global', 'QR Size', 'captchas', 'QR.persona', 'hiddenPSA'] + $.delete ['previousversion', 'AutoWatch', 'QR Size', 'captchas', 'QR.persona', 'hiddenPSA'] $.delete ("#{id}.position" for id in ['embedding', 'updater', 'thread-stats', 'thread-watcher', 'qr']) - boards = (a.textContent for a in $$ '#boardNavDesktop > .boardList > a') - boards.push 'qa' - $.delete ("cooldown.#{board}" for board in boards) try - $.delete GM_listValues().map (key) -> key.replace g.NAMESPACE, '' + $.delete $.listValues().map (key) -> key.replace g.NAMESPACE, '' cb?() <% } %> diff --git a/src/General/lib/callbacks.class b/src/General/lib/callbacks.class index c8cdeec34..c72ab987b 100644 --- a/src/General/lib/callbacks.class +++ b/src/General/lib/callbacks.class @@ -6,10 +6,10 @@ class Callbacks @keys.push name unless @[name] @[name] = cb - execute: (node) -> - for name in @keys + execute: (node, keys=@keys) -> + for name in keys try - @[name].call node + @[name]?.call node catch err errors = [] unless errors errors.push diff --git a/src/General/lib/clone.class b/src/General/lib/clone.class index 918a4a505..023fd4b97 100755 --- a/src/General/lib/clone.class +++ b/src/General/lib/clone.class @@ -19,7 +19,16 @@ class Clone extends Post quote: $ '.postNum > a:nth-of-type(2)', info comment: $ '.postMessage', post quotelinks: [] - backlinks: info.getElementsByClassName 'backlink' + + # XXX Edge invalidates HTMLCollections when an ancestor node is inserted into another node. + # https://connect.microsoft.com/IE/feedback/details/1198967/ie11-appendchild-provoke-an-error-on-an-htmlcollection + if $.engine is 'edge' + Object.defineProperty @nodes, 'backlinks', + configurable: true + enumerable: true + get: -> info.getElementsByClassName 'backlink' + else + @nodes.backlinks = info.getElementsByClassName 'backlink' # Remove inlined posts inside of this post. for inline in $$ '.inline', post diff --git a/src/General/lib/connection.class b/src/General/lib/connection.class index 52e614136..fc2c001be 100644 --- a/src/General/lib/connection.class +++ b/src/General/lib/connection.class @@ -1,12 +1,18 @@ class Connection - constructor: (@target, @origin, @cb) -> + constructor: (@target, @origin, @cb={}) -> $.on window, 'message', @onMessage + targetWindow: -> + if @target instanceof window.HTMLIFrameElement + @target.contentWindow + else + @target + send: (data) => - @target.postMessage "#{g.NAMESPACE}#{JSON.stringify data}", @origin + @targetWindow().postMessage "#{g.NAMESPACE}#{JSON.stringify data}", @origin onMessage: (e) => - return unless e.source is @target and + return unless e.source is @targetWindow() and e.origin is @origin and typeof e.data is 'string' and e.data[...g.NAMESPACE.length] is g.NAMESPACE diff --git a/src/General/lib/fetcher.class b/src/General/lib/fetcher.class index 5a143799d..798084253 100644 --- a/src/General/lib/fetcher.class +++ b/src/General/lib/fetcher.class @@ -81,7 +81,7 @@ class Fetcher return false unless url = Redirect.to 'post', {@boardID, @postID} if /^https:\/\//.test(url) or location.protocol is 'http:' $.cache url, - do (self = @) -> -> self.parseArchivedPost @response + do (self = @) -> -> self.parseArchivedPost @response, url , responseType: 'json' withCredentials: url.archive.withCredentials @@ -93,11 +93,11 @@ class Fetcher # Image/thumbnail URLs loaded over HTTP can be modified in transit. # Require them to be from a known HTTP host so that no referrer is sent to them from an HTTPS page. delete media[key] unless media[key]? and media[key].match(/^(http:\/\/[^\/]+\/)?/)[0] in url.archive.imagehosts - @parseArchivedPost response + @parseArchivedPost response, url return true return false - parseArchivedPost: (data) -> + parseArchivedPost: (data, url) -> # In case of multiple callbacks for the same request, # don't parse the same original post more than once. if post = g.posts["#{@boardID}.#{@postID}"] @@ -147,6 +147,9 @@ class Fetcher commentHTML: comment delete o.info.uniqueID if o.info.capcode if data.media?.media_filename + # Fix URLs missing origin + for key, val of data.media when /_link$/.test(key) and val?[0] is '/' + data.media[key] = url.split('/', 3).join('/') + val o.file = name: data.media.media_filename url: data.media.media_link or data.media.remote_media_link or diff --git a/src/General/lib/polyfill.coffee b/src/General/lib/polyfill.coffee index 6f7799f06..2f78e2d59 100755 --- a/src/General/lib/polyfill.coffee +++ b/src/General/lib/polyfill.coffee @@ -1,19 +1,6 @@ Polyfill = init: -> - @notificationPermission() @toBlob() - @visibility() - notificationPermission: -> - return if !window.Notification or 'permission' of Notification or !window.webkitNotifications - Object.defineProperty Notification, 'permission', - get: -> - switch webkitNotifications.checkPermission() - when 0 - 'granted' - when 1 - 'default' - when 2 - 'denied' toBlob: -> HTMLCanvasElement::toBlob or= (cb) -> data = atob @toDataURL()[22..] @@ -23,12 +10,3 @@ Polyfill = for i in [0...l] by 1 ui8a[i] = data.charCodeAt i cb new Blob [ui8a], type: 'image/png' - visibility: -> - # page visibility API - return if 'visibilityState' of d - Object.defineProperties HTMLDocument.prototype, - visibilityState: - get: -> @webkitVisibilityState - hidden: - get: -> @webkitHidden - $.on d, 'webkitvisibilitychange', -> $.event 'visibilitychange' diff --git a/src/General/lib/post.class b/src/General/lib/post.class index 7fec2efc3..039999b55 100755 --- a/src/General/lib/post.class +++ b/src/General/lib/post.class @@ -40,7 +40,16 @@ class Post comment: $ '.postMessage', post links: [] quotelinks: [] - backlinks: info.getElementsByClassName 'backlink' + + # XXX Edge invalidates HTMLCollections when an ancestor node is inserted into another node. + # https://connect.microsoft.com/IE/feedback/details/1198967/ie11-appendchild-provoke-an-error-on-an-htmlcollection + if $.engine is 'edge' + Object.defineProperty @nodes, 'backlinks', + configurable: true + enumerable: true + get: -> info.getElementsByClassName 'backlink' + else + @nodes.backlinks = info.getElementsByClassName 'backlink' unless @isReply = $.hasClass post, 'reply' @thread.OP = @ @@ -226,7 +235,7 @@ class Post # XXX Workaround for 4chan's racing condition # giving us false-positive dead posts. resurrect: -> - delete @isDead + @isDead = false $.rmClass @nodes.root, 'deleted-post' strong = $ 'strong.warning', @nodes.info # no false-positive files @@ -245,7 +254,6 @@ class Post return collect: -> - @kill() g.posts.rm @fullID @thread.posts.rm @ @board.posts.rm @ diff --git a/src/General/meta/metadata.js b/src/General/meta/metadata.js index 86d508a62..b75a582d4 100755 --- a/src/General/meta/metadata.js +++ b/src/General/meta/metadata.js @@ -5,20 +5,28 @@ // @minFFVer <%= meta.min.firefox %> // @namespace <%= name %> // @description <%= description %> -// @license MIT; <%= meta.repo %>blob/<%= meta.mainBranch %>/LICENSE +// @license MIT; <%= meta.license %> <%= meta.matches.map(function(match) { - return '// @match ' + match; + if (/^\*/.test(match)) { + return ( + '// @include ' + match.replace(/^\*/, 'http') + '\n' + + '// @include ' + match.replace(/^\*/, 'https') + ); + } else { + return '// @include ' + match; + } }).join('\n') %> // @grant GM_getValue // @grant GM_setValue // @grant GM_deleteValue // @grant GM_listValues +// @grant GM_addValueChangeListener // @grant GM_openInTab // @grant GM_xmlhttpRequest // @run-at document-start -<% if (channel !== 'dev') { %><% if (channel !== 'noupdate') { %>// @updateURL <%= meta.downloads %><%= name %><%= meta.suffix[channel] %>.meta.js -<% } %>// @downloadURL <%= meta.downloads %><%= name %><%= meta.suffix[channel] %>.user.js +<% if (channel !== 'dev') { %>// @updateURL <%= (channel !== 'noupdate') ? (meta.downloads + name + meta.suffix[channel] + '.meta.js') : 'https://noupdate.invalid/' %> +// @downloadURL <%= (channel !== 'noupdate') ? (meta.downloads + name + meta.suffix[channel] + '.user.js') : 'https://noupdate.invalid/' %> <% } %>// @icon data:image/png;base64,<%= grunt.file.read('src/General/img/icon48.png', {encoding: 'base64'}) %> // ==/UserScript== diff --git a/src/Images/FappeTyme.coffee b/src/Images/FappeTyme.coffee index 9df2ef32f..7bc05d7ff 100755 --- a/src/Images/FappeTyme.coffee +++ b/src/Images/FappeTyme.coffee @@ -32,8 +32,7 @@ FappeTyme = cb: @catalogNode node: -> - return if @file - $.addClass @nodes.root, "noFile" + @nodes.root.classList.toggle 'noFile', !@file catalogNode: -> {file} = @thread.OP diff --git a/src/Images/Gallery.coffee b/src/Images/Gallery.coffee index 8260743b1..cf5f3312d 100644 --- a/src/Images/Gallery.coffee +++ b/src/Images/Gallery.coffee @@ -128,53 +128,66 @@ Gallery = Gallery.images.push thumb $.add Gallery.nodes.thumbs, thumb + load: (thumb, errorCB) -> + ext = thumb.href.match /\w*$/ + elType = {'webm': 'video', 'pdf': 'iframe'}[ext] or 'img' + file = $.el elType, + title: thumb.title + $.extend file.dataset, thumb.dataset + $.on file, 'error', errorCB + file.src = thumb.href + file + open: (thumb) -> {nodes} = Gallery - {name} = nodes oldID = +nodes.current.dataset.id newID = +thumb.dataset.id - slideshow = Gallery.slideshow and (newID > oldID or (oldID is Gallery.images.length-1 and newID is 0)) - $.rmClass el, 'gal-highlight' if el = $ '.gal-highlight', nodes.thumbs + # Highlight, center selected thumbnail + $.rmClass el, 'gal-highlight' if el = Gallery.images[oldID] $.addClass thumb, 'gal-highlight' + nodes.thumbs.scrollTop = thumb.offsetTop + thumb.offsetHeight/2 - nodes.thumbs.clientHeight/2 - elType = if /\.webm$/.test(thumb.href) - 'video' - else if /\.pdf$/.test(thumb.href) - 'iframe' + # Load image or use preloaded image + if Gallery.cache?.dataset.id is ''+newID + file = Gallery.cache + $.off file, 'error', Gallery.cacheError + $.on file, 'error', Gallery.error else - 'img' - - $[if elType is 'iframe' then 'addClass' else 'rmClass'] doc, 'gal-pdf' - file = $.el elType, - title: name.download = name.textContent = thumb.title - $.extend file.dataset, thumb.dataset - $.on file, 'error', Gallery.error - file.src = name.href = thumb.href + file = Gallery.load thumb, Gallery.error + # Replace old image with new one $.off nodes.current, 'error', Gallery.error ImageCommon.pause nodes.current $.replace nodes.current, file - if elType is 'video' + nodes.current = file + + if file.nodeName is 'VIDEO' file.loop = true Volume.setup file file.play() if Conf['Autoplay'] ImageCommon.addControls file if Conf['Show Controls'] + + doc.classList.toggle 'gal-pdf', file.nodeName is 'IFRAME' + Gallery.cb.setHeight() nodes.count.textContent = +thumb.dataset.id + 1 - nodes.current = file + nodes.name.download = nodes.name.textContent = thumb.title + nodes.name.href = thumb.href nodes.frame.scrollTop = 0 nodes.next.focus() - if slideshow + + # Continue slideshow if moving forward, stop otherwise + if Gallery.slideshow and (newID > oldID or (oldID is Gallery.images.length-1 and newID is 0)) Gallery.setupTimer() else Gallery.cb.stop() # Scroll to post - if Conf['Scroll to Post'] and post = (post = g.posts[file.dataset.post])?.nodes.root - Header.scrollTo post + if Conf['Scroll to Post'] and (post = g.posts[file.dataset.post]) + Header.scrollTo post.nodes.root - # Center selected thumbnail - nodes.thumbs.scrollTop = thumb.offsetTop + thumb.offsetHeight/2 - nodes.thumbs.clientHeight/2 + # Preload next image + Gallery.cache = Gallery.load Gallery.images[(newID + 1) % Gallery.images.length], Gallery.cacheError error: -> if @error?.code is MediaError.MEDIA_ERR_DECODE @@ -185,6 +198,9 @@ Gallery = Gallery.images[@dataset.id].href = url @src = url if Gallery.nodes.current is @ + cacheError: -> + delete Gallery.cache + cleanupTimer: -> clearTimeout Gallery.timeoutID {current} = Gallery.nodes @@ -301,6 +317,14 @@ Gallery = setFitness: -> (if @checked then $.addClass else $.rmClass) doc, "gal-#{@name.toLowerCase().replace /\s+/g, '-'}" + setHeight: -> + {current, frame} = Gallery.nodes + current.style.minHeight = if Conf['Stretch to Fit'] and (dim = g.posts[current.dataset.post]?.file.dimensions) + [width, height] = dim.split 'x' + Math.min(doc.clientHeight - 25, height / width * frame.clientWidth) + 'px' + else + null + setDelay: -> Gallery.delay = +@value menu: @@ -319,14 +343,14 @@ Gallery = createSubEntry: (name) -> label = UI.checkbox name, name input = label.firstElementChild - if name in ['Fit Width', 'Fit Height', 'Hide Thumbnails'] - $.on input, 'change', Gallery.cb.setFitness + $.on input, 'change', Gallery.cb.setFitness if name in ['Hide Thumbnails', 'Fit Width', 'Fit Height'] $.event 'change', null, input $.on input, 'change', $.cb.checked + $.on input, 'change', Gallery.cb.setHeight if name in ['Hide Thumbnails', 'Fit Width', 'Fit Height', 'Stretch to Fit'] el: label createSubEntries: -> - subEntries = (Gallery.menu.createSubEntry item for item in ['Hide Thumbnails', 'Fit Width', 'Fit Height', 'Scroll to Post']) + subEntries = (Gallery.menu.createSubEntry item for item in ['Hide Thumbnails', 'Fit Width', 'Fit Height', 'Stretch to Fit', 'Scroll to Post']) delayLabel = $.el 'label', <%= html('Slide Delay: ') %> delayInput = delayLabel.firstElementChild diff --git a/src/Images/ImageCommon.coffee b/src/Images/ImageCommon.coffee index 582428198..a5adc925a 100644 --- a/src/Images/ImageCommon.coffee +++ b/src/Images/ImageCommon.coffee @@ -83,7 +83,7 @@ ImageCommon = $.off video, 'mouseover', handler # Hacky workaround for Firefox forever-loading bug for very short videos t = new Date().getTime() - $.asap (-> chrome? or (video.readyState >= 3 and video.currentTime <= Math.max 0.1, (video.duration - 0.5)) or new Date().getTime() >= t + 1000), -> + $.asap (-> $.engine isnt 'gecko' or (video.readyState >= 3 and video.currentTime <= Math.max 0.1, (video.duration - 0.5)) or new Date().getTime() >= t + 1000), -> video.controls = true $.on video, 'mouseover', handler diff --git a/src/Images/ImageExpand.coffee b/src/Images/ImageExpand.coffee index a2698ab01..844524606 100755 --- a/src/Images/ImageExpand.coffee +++ b/src/Images/ImageExpand.coffee @@ -121,7 +121,7 @@ ImageExpand = $.rmClass post.nodes.root, 'expanded-image' $.rmClass file.thumb, 'expanding' - $.rm file.videoControls if file.videoControls + $.rm file.videoControls file.thumb.parentNode.href = file.url file.thumb.parentNode.target = '_blank' for x in ['isExpanding', 'isExpanded', 'videoControls', 'wasPlaying', 'scrollIntoView'] @@ -221,7 +221,7 @@ ImageExpand = # Scroll to display full image. if file.scrollIntoView delete file.scrollIntoView - imageBottom = Header.getBottomOf(file.fullImage) - 25 + imageBottom = Math.min(doc.clientHeight - file.fullImage.getBoundingClientRect().bottom - 25, Header.getBottomOf file.fullImage) if imageBottom < 0 window.scrollBy 0, Math.min(-imageBottom, Header.getTopOf file.fullImage) diff --git a/src/Images/ImageHover.coffee b/src/Images/ImageHover.coffee index ac551b369..d9258648b 100755 --- a/src/Images/ImageHover.coffee +++ b/src/Images/ImageHover.coffee @@ -46,7 +46,7 @@ ImageHover = el.play() if Conf['Autoplay'] [width, height] = (+x for x in file.dimensions.split 'x') {left, right} = @getBoundingClientRect() - padding = 16 + padding = 25 maxWidth = Math.max left, doc.clientWidth - right maxHeight = doc.clientHeight - padding scale = Math.min 1, maxWidth / width, maxHeight / height diff --git a/src/Images/ImageLoader.coffee b/src/Images/ImageLoader.coffee index eff4718fd..a6b9b0ee5 100755 --- a/src/Images/ImageLoader.coffee +++ b/src/Images/ImageLoader.coffee @@ -63,7 +63,7 @@ ImageLoader = clone.file.thumb.preload = 'auto' for clone in post.clones thumb.preload = 'auto' # XXX Cloned video elements with poster in Firefox cause momentary display of image loading icon. - if !chrome? + if $.engine is 'gecko' $.on thumb, 'loadeddata', -> @removeAttribute 'poster' return diff --git a/src/Images/Volume.coffee b/src/Images/Volume.coffee index 5583b6299..b4248a77f 100644 --- a/src/Images/Volume.coffee +++ b/src/Images/Volume.coffee @@ -70,6 +70,7 @@ Volume = $.on @nodes.thumb, 'wheel', Volume.wheel.bind(Header.hover) wheel: (e) -> + return if e.shiftKey or e.altKey or e.ctrlKey or e.metaKey return unless el = $ 'video:not([data-md5])', @ return if el.muted or not $.hasAudio el volume = el.volume + 0.1 diff --git a/src/Linkification/Embedding.coffee b/src/Linkification/Embedding.coffee index 39fdc13fd..88b8d973e 100644 --- a/src/Linkification/Embedding.coffee +++ b/src/Linkification/Embedding.coffee @@ -253,7 +253,7 @@ Embedding = src: "//strawpoll.me/embed_1/#{a.dataset.uid}" , key: 'TwitchTV' - regExp: /^\w+:\/\/(?:www\.)?twitch\.tv\/([^#\&\?]*)/ + regExp: /^\w+:\/\/(?:www\.)?twitch\.tv\/(\w[^#\&\?]*)/ httpOnly: true style: "border: none; width: 640px; height: 360px;" el: (a) -> @@ -277,10 +277,12 @@ Embedding = regExp: /^\w+:\/\/(?:www\.)?vocaroo\.com\/i\/(\w+)/ style: '' el: (a) -> - $.el 'audio', + el = $.el 'audio', controls: true preload: 'auto' - src: "http://vocaroo.com/media_command.php?media=#{a.dataset.uid}&command=download_ogg" + type = if el.canPlayType 'audio/ogg' then 'ogg' else 'mp3' + el.src = "http://vocaroo.com/media_command.php?media=#{a.dataset.uid}&command=download_#{type}" + el , key: 'Vimeo' regExp: /^\w+:\/\/(?:www\.)?vimeo\.com\/(\d+)/ @@ -360,10 +362,12 @@ Embedding = regExp: /^\w+:\/\/(?:www\.)?clyp\.it\/(\w+)/ style: '' el: (a) -> - $.el 'audio', + el = $.el 'audio', controls: true preload: 'auto' - src: "http://clyp.it/#{a.dataset.uid}.ogg" + type = if el.canPlayType 'audio/ogg' then 'ogg' else 'mp3' + el.src = "http://clyp.it/#{a.dataset.uid}.#{type}" + el , # dummy entries: not implemented but included to prevent them being wrongly embedded as a subsequent type key: 'Loopvid-dummy' diff --git a/src/Linkification/Linkify.coffee b/src/Linkification/Linkify.coffee index faa9a99f5..0bfbfb2ce 100755 --- a/src/Linkification/Linkify.coffee +++ b/src/Linkification/Linkify.coffee @@ -79,7 +79,7 @@ Linkify = ) | # This should account for virtually all links posted without http: ([-a-z\d]+[.])+( - aero|asia|biz|cat|com|coop|dance|info|int|jobs|mobi|moe|museum|name|net|org|post|pro|tel|travel|xxx|edu|gov|mil|[a-z]{2} + aero|asia|biz|cat|com|coop|dance|info|int|jobs|mobi|moe|museum|name|net|org|post|pro|tel|travel|xxx|xyz|edu|gov|mil|[a-z]{2} )([:/]|(?![^\s'"])) | # IPv4 Addresses [\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3} diff --git a/src/Menu/DeleteLink.coffee b/src/Menu/DeleteLink.coffee index 8a15c6e2b..c2507152e 100755 --- a/src/Menu/DeleteLink.coffee +++ b/src/Menu/DeleteLink.coffee @@ -1,4 +1,6 @@ DeleteLink = + auto: [{}, {}] + init: -> return unless g.VIEW in ['index', 'thread'] and Conf['Menu'] and Conf['Delete Link'] @@ -11,19 +13,22 @@ DeleteLink = fileEl = $.el 'a', className: 'delete-file' href: 'javascript:;' + @nodes = + menu: div.firstChild + links: [postEl, fileEl] postEntry = el: postEl open: -> - postEl.textContent = 'Post' - $.on postEl, 'click', DeleteLink.delete + postEl.textContent = DeleteLink.linkText false + $.on postEl, 'click', DeleteLink.toggle true fileEntry = el: fileEl open: ({file}) -> return false if !file or file.isDead - fileEl.textContent = 'File' - $.on fileEl, 'click', DeleteLink.delete + fileEl.textContent = DeleteLink.linkText true + $.on fileEl, 'click', DeleteLink.toggle true Menu.menu.addEntry @@ -32,19 +37,41 @@ DeleteLink = open: (post) -> return false if post.isDead DeleteLink.post = post - node = div.firstChild - node.textContent = 'Delete' - DeleteLink.cooldown.start post, node + DeleteLink.nodes.menu.textContent = DeleteLink.menuText() + DeleteLink.cooldown.start post true subEntries: [postEntry, fileEntry] - delete: -> - {post} = DeleteLink - return if DeleteLink.cooldown.counting is post + menuText: -> + if seconds = DeleteLink.cooldown.seconds[DeleteLink.post.fullID] + "Delete (#{seconds})" + else + 'Delete' - $.off @, 'click', DeleteLink.delete + linkText: (fileOnly) -> + text = if fileOnly then 'File' else 'Post' + if DeleteLink.auto[+fileOnly][DeleteLink.post.fullID] + text = "Deleting #{text.toLowerCase()}..." + text + + toggle: -> + {post} = DeleteLink fileOnly = $.hasClass @, 'delete-file' - @textContent = "Deleting #{if fileOnly then 'file' else 'post'}..." + auto = DeleteLink.auto[+fileOnly] + + if auto[post.fullID] + delete auto[post.fullID] + else + auto[post.fullID] = true + @textContent = DeleteLink.linkText fileOnly + + unless DeleteLink.cooldown.seconds[post.fullID] + DeleteLink.delete post, fileOnly + + delete: (post, fileOnly) -> + link = DeleteLink.nodes.links[+fileOnly] + delete DeleteLink.auto[+fileOnly][post.fullID] + $.off link, 'click', DeleteLink.toggle if post.fullID is DeleteLink.post.fullID form = mode: 'usrdel' @@ -52,47 +79,56 @@ DeleteLink = pwd: QR.persona.getPassword() form[post.ID] = 'delete' - link = @ $.ajax $.id('delform').action.replace("/#{g.BOARD}/", "/#{post.board}/"), responseType: 'document' withCredentials: true onload: -> DeleteLink.load link, post, fileOnly, @response - onerror: -> DeleteLink.error link + onerror: -> DeleteLink.error link, post , form: $.formData form + load: (link, post, fileOnly, resDoc) -> + link.textContent = DeleteLink.linkText fileOnly if resDoc.title is '4chan - Banned' # Ban/warn check - s = 'Banned!' + el = $.el 'span', <%= html('You can't delete posts because you are banned.') %> + new Notice 'warning', el, 20 else if msg = resDoc.getElementById 'errmsg' # error! - s = msg.textContent - $.on link, 'click', DeleteLink.delete + new Notice 'warning', msg.textContent, 20 + $.on link, 'click', DeleteLink.toggle if post.fullID is DeleteLink.post.fullID + if /\bwait\b/i.test msg.textContent + DeleteLink.cooldown.start post, 5 + DeleteLink.auto[+fileOnly][post.fullID] = true + DeleteLink.nodes.links[+fileOnly].textContent = DeleteLink.linkText fileOnly else + QR.cooldown.delete post unless fileOnly if resDoc.title is 'Updating index...' # We're 100% sure. - QR.cooldown.delete post (post.origin or post).kill fileOnly - s = 'Deleted' - link.textContent = s - error: (link) -> - link.textContent = 'Connection error, please retry.' - $.on link, 'click', DeleteLink.delete + link.textContent = 'Deleted' if post.fullID is DeleteLink.post.fullID + + error: (link, post) -> + new Notice 'warning', 'Connection error, please retry.', 20 + $.on link, 'click', DeleteLink.toggle if post.fullID is DeleteLink.post.fullID cooldown: - start: (post, node) -> - unless QR.db?.get {boardID: post.board.ID, threadID: post.thread.ID, postID: post.ID} - # Only start counting on our posts. - delete DeleteLink.cooldown.counting - return - DeleteLink.cooldown.counting = post - length = 60 - seconds = Math.ceil (length * $.SECOND - (Date.now() - post.info.date)) / $.SECOND - DeleteLink.cooldown.count post, seconds, length, node - count: (post, seconds, length, node) -> - return if DeleteLink.cooldown.counting isnt post - unless 0 <= seconds <= length - if DeleteLink.cooldown.counting is post - node.textContent = 'Delete' - delete DeleteLink.cooldown.counting - return - setTimeout DeleteLink.cooldown.count, 1000, post, seconds - 1, length, node - node.textContent = "Delete (#{seconds})" + seconds: {} + + start: (post, seconds) -> + # Already counting. + return if DeleteLink.cooldown.seconds[post.fullID]? + + seconds ?= QR.cooldown.secondsDeletion post + if seconds > 0 + DeleteLink.cooldown.seconds[post.fullID] = seconds + DeleteLink.cooldown.count post + + count: (post) -> + DeleteLink.nodes.menu.textContent = DeleteLink.menuText() if post.fullID is DeleteLink.post.fullID + if DeleteLink.cooldown.seconds[post.fullID] > 0 + DeleteLink.cooldown.seconds[post.fullID]-- + setTimeout DeleteLink.cooldown.count, 1000, post + else + delete DeleteLink.cooldown.seconds[post.fullID] + for fileOnly in [false, true] when DeleteLink.auto[+fileOnly][post.fullID] + DeleteLink.delete post, fileOnly + return diff --git a/src/Menu/ReportLink.coffee b/src/Menu/ReportLink.coffee index d9a2a0930..53ba0bfa7 100755 --- a/src/Menu/ReportLink.coffee +++ b/src/Menu/ReportLink.coffee @@ -14,7 +14,7 @@ ReportLink = unless post.isDead or (post.thread.isDead and not post.thread.isArchived) a.textContent = 'Report this post' ReportLink.url = "//sys.4chan.org/#{post.board}/imgboard.php?mode=report&no=#{post}" - ReportLink.height = 200 + ReportLink.height = 180 else if Conf['Archive Report'] a.textContent = 'Report to archive' ReportLink.url = Redirect.to 'report', {boardID: post.board.ID, postID: post.ID} diff --git a/src/Miscellaneous/AntiAutoplay.coffee b/src/Miscellaneous/AntiAutoplay.coffee index 7d11f2b85..a646c81fa 100644 --- a/src/Miscellaneous/AntiAutoplay.coffee +++ b/src/Miscellaneous/AntiAutoplay.coffee @@ -26,6 +26,8 @@ AntiAutoplay = process: (root) -> for iframe in $$ 'iframe[src*="youtube"][src*="autoplay=1"]', root iframe.src = iframe.src.replace(/\?autoplay=1&?/, '?').replace('&autoplay=1', '') + $.addClass iframe, 'autoplay-removed' for object in $$ 'object[data*="youtube"][data*="autoplay=1"]', root object.data = object.data.replace(/\?autoplay=1&?/, '?').replace('&autoplay=1', '') + $.addClass object, 'autoplay-removed' return \ No newline at end of file diff --git a/src/Miscellaneous/Keybinds.coffee b/src/Miscellaneous/Keybinds.coffee index 161e5d6b7..82122f4a2 100755 --- a/src/Miscellaneous/Keybinds.coffee +++ b/src/Miscellaneous/Keybinds.coffee @@ -2,7 +2,7 @@ Keybinds = init: -> return if !Conf['Keybinds'] - for hotkey of Conf.hotkeys + for hotkey of Config.hotkeys $.sync hotkey, Keybinds.sync init = -> @@ -204,6 +204,8 @@ Keybinds = 'Enter' when 27 'Esc' + when 32 + 'Space' when 37 'Left' when 38 @@ -212,9 +214,15 @@ Keybinds = 'Right' when 40 'Down' + when 188 + 'Comma' + when 190 + 'Period' else if 48 <= kc <= 57 or 65 <= kc <= 90 # 0-9, A-Z String.fromCharCode(kc).toLowerCase() + else if 96 <= kc <= 105 # numpad 0-9 + String.fromCharCode(kc - 48).toLowerCase() else null if key diff --git a/src/Miscellaneous/Report.coffee b/src/Miscellaneous/Report.coffee index 2ebd665d1..bc91cbe8a 100755 --- a/src/Miscellaneous/Report.coffee +++ b/src/Miscellaneous/Report.coffee @@ -1,19 +1,16 @@ Report = - css: ''' - :root:not(.js-enabled) #g-recaptcha { - height: auto; - } - ''' + css: `<%= importCSS('report') %>` init: -> return unless /\bmode=report\b/.test(location.search) and match = location.search.match /\bno=(\d+)/ + Captcha.replace.init() @postID = +match[1] $.ready @ready ready: -> $.addStyle Report.css Report.archive() if Conf['Archive Report'] - if $.hasClass doc, 'js-enabled' + if Conf['Use Recaptcha v2 in Reports'] and $.hasClass doc, 'js-enabled' new MutationObserver(-> Report.fit '.gc-bubbleDefault').observe d.body, childList: true attributes: true @@ -47,4 +44,4 @@ Report = if types = $.id('reportTypes') $.on types, 'change', (e) -> - $('form').action = if e.target.value in ['illegal', 'spam'] then '#redirect' else '' + $('form').action = if e.target.value is 'illegal' then '#redirect' else '' diff --git a/src/Miscellaneous/banners.json b/src/Miscellaneous/banners.json index 448aa32f9..c2a91948b 100644 --- a/src/Miscellaneous/banners.json +++ b/src/Miscellaneous/banners.json @@ -1 +1 @@ -["0.jpg", "1.jpg", "2.jpg", "4.jpg", "6.jpg", "7.jpg", "8.jpg", "9.jpg", "10.jpg", "11.jpg", "12.jpg", "13.jpg", "14.jpg", "16.jpg", "17.jpg", "18.jpg", "19.jpg", "20.jpg", "21.jpg", "22.jpg", "24.jpg", "25.jpg", "26.jpg", "28.jpg", "29.jpg", "33.jpg", "38.jpg", "39.jpg", "43.jpg", "44.jpg", "45.jpg", "46.jpg", "47.jpg", "52.jpg", "54.jpg", "57.jpg", "59.jpg", "60.jpg", "61.jpg", "64.jpg", "66.jpg", "67.jpg", "69.jpg", "71.jpg", "72.jpg", "76.jpg", "77.jpg", "81.jpg", "82.jpg", "83.jpg", "84.jpg", "88.jpg", "90.jpg", "91.jpg", "96.jpg", "98.jpg", "99.jpg", "100.jpg", "104.jpg", "106.jpg", "116.jpg", "119.jpg", "137.jpg", "140.jpg", "148.jpg", "149.jpg", "150.jpg", "154.jpg", "156.jpg", "157.jpg", "158.jpg", "159.jpg", "161.jpg", "162.jpg", "164.jpg", "165.jpg", "166.jpg", "167.jpg", "168.jpg", "169.jpg", "170.jpg", "171.jpg", "172.jpg", "173.jpg", "174.jpg", "175.jpg", "176.jpg", "178.jpg", "179.jpg", "180.jpg", "181.jpg", "182.jpg", "183.jpg", "186.jpg", "189.jpg", "190.jpg", "192.jpg", "193.jpg", "194.jpg", "197.jpg", "198.jpg", "200.jpg", "201.jpg", "202.jpg", "203.jpg", "205.jpg", "206.jpg", "207.jpg", "208.jpg", "210.jpg", "213.jpg", "214.jpg", "215.jpg", "216.jpg", "218.jpg", "219.jpg", "220.jpg", "221.jpg", "222.jpg", "223.jpg", "224.jpg", "227.jpg", "0.png", "1.png", "2.png", "3.png", "5.png", "6.png", "9.png", "10.png", "11.png", "12.png", "14.png", "16.png", "19.png", "20.png", "21.png", "22.png", "23.png", "24.png", "26.png", "27.png", "28.png", "29.png", "30.png", "31.png", "32.png", "33.png", "34.png", "37.png", "39.png", "40.png", "41.png", "42.png", "43.png", "44.png", "45.png", "48.png", "49.png", "50.png", "51.png", "52.png", "53.png", "57.png", "58.png", "59.png", "64.png", "66.png", "67.png", "68.png", "69.png", "70.png", "71.png", "72.png", "76.png", "78.png", "81.png", "82.png", "85.png", "86.png", "87.png", "89.png", "95.png", "98.png", "100.png", "101.png", "102.png", "105.png", "106.png", "107.png", "109.png", "110.png", "111.png", "112.png", "113.png", "114.png", "115.png", "116.png", "118.png", "119.png", "120.png", "121.png", "122.png", "123.png", "126.png", "128.png", "130.png", "134.png", "136.png", "138.png", "139.png", "140.png", "142.png", "145.png", "146.png", "149.png", "150.png", "151.png", "152.png", "153.png", "154.png", "155.png", "156.png", "157.png", "158.png", "159.png", "160.png", "163.png", "164.png", "165.png", "166.png", "167.png", "168.png", "169.png", "170.png", "171.png", "172.png", "173.png", "174.png", "178.png", "179.png", "180.png", "181.png", "182.png", "184.png", "186.png", "188.png", "190.png", "192.png", "193.png", "194.png", "195.png", "196.png", "197.png", "198.png", "200.png", "202.png", "203.png", "205.png", "206.png", "207.png", "209.png", "212.png", "213.png", "214.png", "216.png", "217.png", "218.png", "219.png", "220.png", "221.png", "222.png", "223.png", "224.png", "225.png", "226.png", "229.png", "231.png", "232.png", "233.png", "234.png", "235.png", "237.png", "238.png", "239.png", "240.png", "241.png", "242.png", "244.png", "245.png", "246.png", "247.png", "248.png", "249.png", "250.png", "253.png", "254.png", "255.png", "257.png", "258.png", "259.png", "260.png", "262.png", "268.png", "0.gif", "1.gif", "2.gif", "3.gif", "4.gif", "5.gif", "6.gif", "7.gif", "8.gif", "9.gif", "10.gif", "12.gif", "13.gif", "14.gif", "15.gif", "16.gif", "18.gif", "19.gif", "20.gif", "21.gif", "22.gif", "23.gif", "24.gif", "28.gif", "29.gif", "30.gif", "33.gif", "34.gif", "35.gif", "36.gif", "37.gif", "39.gif", "40.gif", "42.gif", "44.gif", "45.gif", "46.gif", "48.gif", "50.gif", "52.gif", "54.gif", "55.gif", "57.gif", "58.gif", "59.gif", "60.gif", "61.gif", "62.gif", "63.gif", "64.gif", "66.gif", "67.gif", "68.gif", "69.gif", "70.gif", "72.gif", "73.gif", "75.gif", "76.gif", "77.gif", "78.gif", "80.gif", "81.gif", "82.gif", "83.gif", "86.gif", "87.gif", "88.gif", "92.gif", "93.gif", "94.gif", "95.gif", "96.gif", "97.gif", "98.gif", "99.gif", "100.gif", "101.gif", "102.gif", "103.gif", "104.gif", "105.gif", "106.gif", "108.gif", "109.gif", "110.gif", "111.gif", "112.gif", "113.gif", "115.gif", "116.gif", "117.gif", "118.gif", "119.gif", "120.gif", "122.gif", "123.gif", "124.gif", "127.gif", "129.gif", "130.gif", "131.gif", "134.gif", "135.gif", "136.gif", "138.gif", "139.gif", "141.gif", "144.gif", "146.gif", "148.gif", "149.gif", "153.gif", "154.gif", "155.gif", "157.gif", "158.gif", "159.gif", "160.gif", "161.gif", "162.gif", "164.gif", "166.gif", "167.gif", "168.gif", "169.gif", "170.gif", "171.gif", "172.gif", "173.gif", "174.gif", "175.gif", "176.gif", "177.gif", "178.gif", "181.gif", "182.gif", "183.gif", "185.gif", "186.gif", "187.gif", "188.gif", "189.gif", "190.gif", "191.gif", "192.gif", "193.gif", "195.gif", "196.gif", "197.gif", "200.gif", "201.gif", "202.gif", "203.gif", "204.gif", "205.gif", "206.gif", "207.gif", "208.gif", "209.gif", "210.gif", "211.gif", "212.gif", "213.gif", "214.gif", "215.gif", "216.gif", "217.gif", "219.gif", "220.gif", "221.gif", "222.gif", "224.gif", "225.gif", "226.gif", "227.gif", "228.gif", "230.gif", "232.gif", "233.gif", "234.gif", "235.gif", "238.gif", "240.gif", "241.gif", "243.gif", "244.gif", "245.gif", "246.gif", "247.gif", "249.gif", "250.gif", "251.gif", "253.gif"] \ No newline at end of file +["0.jpg", "1.jpg", "2.jpg", "4.jpg", "6.jpg", "7.jpg", "8.jpg", "9.jpg", "10.jpg", "11.jpg", "12.jpg", "13.jpg", "14.jpg", "16.jpg", "17.jpg", "18.jpg", "19.jpg", "20.jpg", "21.jpg", "22.jpg", "24.jpg", "25.jpg", "26.jpg", "28.jpg", "29.jpg", "33.jpg", "38.jpg", "39.jpg", "43.jpg", "44.jpg", "45.jpg", "46.jpg", "47.jpg", "52.jpg", "54.jpg", "57.jpg", "59.jpg", "60.jpg", "61.jpg", "64.jpg", "66.jpg", "67.jpg", "69.jpg", "71.jpg", "72.jpg", "76.jpg", "77.jpg", "81.jpg", "82.jpg", "83.jpg", "84.jpg", "88.jpg", "90.jpg", "91.jpg", "96.jpg", "98.jpg", "99.jpg", "100.jpg", "104.jpg", "106.jpg", "116.jpg", "119.jpg", "137.jpg", "140.jpg", "148.jpg", "149.jpg", "150.jpg", "154.jpg", "156.jpg", "157.jpg", "158.jpg", "159.jpg", "161.jpg", "162.jpg", "164.jpg", "165.jpg", "166.jpg", "167.jpg", "168.jpg", "169.jpg", "170.jpg", "171.jpg", "172.jpg", "173.jpg", "174.jpg", "175.jpg", "176.jpg", "178.jpg", "179.jpg", "180.jpg", "181.jpg", "182.jpg", "183.jpg", "186.jpg", "189.jpg", "190.jpg", "192.jpg", "193.jpg", "194.jpg", "197.jpg", "198.jpg", "200.jpg", "201.jpg", "202.jpg", "203.jpg", "205.jpg", "206.jpg", "207.jpg", "208.jpg", "210.jpg", "213.jpg", "214.jpg", "215.jpg", "216.jpg", "218.jpg", "219.jpg", "220.jpg", "221.jpg", "222.jpg", "223.jpg", "224.jpg", "227.jpg", "0.png", "1.png", "2.png", "3.png", "5.png", "6.png", "9.png", "10.png", "11.png", "12.png", "14.png", "16.png", "19.png", "20.png", "21.png", "22.png", "23.png", "24.png", "26.png", "27.png", "28.png", "29.png", "30.png", "31.png", "32.png", "33.png", "34.png", "37.png", "39.png", "40.png", "41.png", "42.png", "43.png", "44.png", "45.png", "48.png", "49.png", "50.png", "51.png", "52.png", "53.png", "57.png", "58.png", "59.png", "64.png", "66.png", "67.png", "68.png", "69.png", "70.png", "71.png", "72.png", "76.png", "78.png", "81.png", "82.png", "85.png", "86.png", "87.png", "89.png", "95.png", "98.png", "100.png", "101.png", "102.png", "105.png", "106.png", "107.png", "109.png", "110.png", "111.png", "112.png", "113.png", "114.png", "115.png", "116.png", "118.png", "119.png", "120.png", "121.png", "122.png", "123.png", "126.png", "128.png", "130.png", "134.png", "136.png", "138.png", "139.png", "140.png", "142.png", "145.png", "146.png", "149.png", "150.png", "151.png", "152.png", "153.png", "154.png", "155.png", "156.png", "157.png", "158.png", "159.png", "160.png", "163.png", "164.png", "165.png", "166.png", "167.png", "168.png", "169.png", "170.png", "171.png", "172.png", "173.png", "174.png", "178.png", "179.png", "180.png", "181.png", "182.png", "184.png", "186.png", "188.png", "190.png", "192.png", "193.png", "194.png", "195.png", "196.png", "197.png", "198.png", "200.png", "202.png", "203.png", "205.png", "206.png", "207.png", "209.png", "212.png", "213.png", "214.png", "216.png", "217.png", "218.png", "219.png", "220.png", "221.png", "222.png", "223.png", "224.png", "225.png", "226.png", "229.png", "231.png", "232.png", "233.png", "234.png", "235.png", "237.png", "238.png", "239.png", "240.png", "241.png", "242.png", "244.png", "245.png", "246.png", "247.png", "248.png", "249.png", "250.png", "253.png", "254.png", "255.png", "256.png", "257.png", "258.png", "259.png", "260.png", "262.png", "268.png", "0.gif", "1.gif", "2.gif", "3.gif", "4.gif", "5.gif", "6.gif", "7.gif", "8.gif", "9.gif", "10.gif", "12.gif", "13.gif", "14.gif", "15.gif", "16.gif", "18.gif", "19.gif", "20.gif", "21.gif", "22.gif", "23.gif", "24.gif", "28.gif", "29.gif", "30.gif", "33.gif", "34.gif", "35.gif", "36.gif", "37.gif", "39.gif", "40.gif", "42.gif", "44.gif", "45.gif", "46.gif", "48.gif", "50.gif", "52.gif", "54.gif", "55.gif", "57.gif", "58.gif", "59.gif", "60.gif", "61.gif", "63.gif", "64.gif", "66.gif", "67.gif", "68.gif", "69.gif", "70.gif", "72.gif", "73.gif", "75.gif", "76.gif", "77.gif", "78.gif", "80.gif", "81.gif", "82.gif", "83.gif", "86.gif", "87.gif", "88.gif", "92.gif", "93.gif", "94.gif", "95.gif", "96.gif", "97.gif", "98.gif", "99.gif", "100.gif", "101.gif", "102.gif", "103.gif", "104.gif", "105.gif", "106.gif", "108.gif", "109.gif", "110.gif", "111.gif", "112.gif", "113.gif", "115.gif", "116.gif", "117.gif", "118.gif", "119.gif", "120.gif", "122.gif", "123.gif", "124.gif", "127.gif", "129.gif", "130.gif", "131.gif", "134.gif", "135.gif", "136.gif", "138.gif", "139.gif", "141.gif", "144.gif", "146.gif", "148.gif", "149.gif", "153.gif", "154.gif", "155.gif", "157.gif", "158.gif", "159.gif", "160.gif", "161.gif", "162.gif", "164.gif", "166.gif", "167.gif", "168.gif", "169.gif", "170.gif", "171.gif", "172.gif", "173.gif", "174.gif", "175.gif", "176.gif", "177.gif", "178.gif", "181.gif", "182.gif", "183.gif", "185.gif", "186.gif", "187.gif", "188.gif", "189.gif", "190.gif", "191.gif", "192.gif", "193.gif", "195.gif", "196.gif", "197.gif", "200.gif", "201.gif", "202.gif", "203.gif", "204.gif", "205.gif", "206.gif", "207.gif", "208.gif", "209.gif", "210.gif", "211.gif", "212.gif", "213.gif", "214.gif", "215.gif", "216.gif", "217.gif", "219.gif", "220.gif", "221.gif", "222.gif", "224.gif", "225.gif", "226.gif", "227.gif", "228.gif", "230.gif", "232.gif", "233.gif", "234.gif", "235.gif", "238.gif", "240.gif", "241.gif", "243.gif", "244.gif", "245.gif", "246.gif", "247.gif", "249.gif", "250.gif", "251.gif", "253.gif"] \ No newline at end of file diff --git a/src/Monitoring/ThreadUpdater.coffee b/src/Monitoring/ThreadUpdater.coffee index 5466dd227..dfe2abc42 100755 --- a/src/Monitoring/ThreadUpdater.coffee +++ b/src/Monitoring/ThreadUpdater.coffee @@ -76,12 +76,14 @@ ThreadUpdater = ThreadUpdater.cb.interval.call $.el 'input', value: Conf['Interval'] - $.on window, 'online offline', ThreadUpdater.cb.online $.on d, 'QRPostSuccessful', ThreadUpdater.cb.checkpost $.on d, 'visibilitychange', ThreadUpdater.cb.visibility ThreadUpdater.setInterval() + # Update immediately on /f/ to add files to replies. + ThreadUpdater.update() if @board.ID is 'f' + ### http://freesound.org/people/pierrecartoons1979/sounds/90112/ cc-by-nc-3.0 @@ -89,18 +91,6 @@ ThreadUpdater = beep: 'data:audio/wav;base64,<%= grunt.file.read("src/General/audio/beep.wav", {encoding: "base64"}) %>' cb: - online: -> - return if ThreadUpdater.thread.isDead - - if navigator.onLine - ThreadUpdater.set 'status', '' - else - ThreadUpdater.set 'status', 'Offline', 'warning' - - if Conf['Auto Update'] and not Conf['Ignore Offline Status'] - ThreadUpdater.outdateCount = 0 - ThreadUpdater.setInterval() - checkpost: (e) -> return if e.detail.threadID isnt ThreadUpdater.thread.ID ThreadUpdater.postID = e.detail.postID @@ -189,12 +179,6 @@ ThreadUpdater = ThreadUpdater.set 'timer', 'Update' return - unless navigator.onLine - ThreadUpdater.set 'status', 'Offline', 'warning' - unless Conf['Ignore Offline Status'] - ThreadUpdater.set 'timer', '' - return - {interval} = ThreadUpdater if Conf['Optional Increase'] # Lower the max refresh rate limit on visible tabs. @@ -289,6 +273,13 @@ ThreadUpdater = index.push ID files.push ID if postObject.fsize + # Add files to replies on /f/. + if board.ID is 'f' and postObject.fsize and (post = thread.posts[ID]) and not post.file + node = Build.postFromObject postObject, board.ID + $.after post.nodes.info, $('.file', node) + post.parseFile() + Post.callbacks.execute post, ['Filter', 'File Info Formatting', 'Fappe Tyme', 'Sauce'] + # Insert new posts, not older ones. continue if ID <= lastPost diff --git a/src/Monitoring/Unread.coffee b/src/Monitoring/Unread.coffee index 80a296297..3d8d820c8 100755 --- a/src/Monitoring/Unread.coffee +++ b/src/Monitoring/Unread.coffee @@ -127,16 +127,18 @@ Unread = openNotification: (post) -> return unless Header.areNotificationsEnabled - notif = new Notification "#{post.info.nameBlock} replied to you", - body: post.info.commentDisplay - icon: Favicon.logo - notif.onclick = -> - Header.scrollToIfNeeded post.nodes.root, true - window.focus() - notif.onshow = -> - setTimeout -> - notif.close() - , 7 * $.SECOND + # XXX https://bugzilla.mozilla.org/show_bug.cgi?id=1130502 (SeaMonkey) + try + notif = new Notification "#{post.info.nameBlock} replied to you", + body: post.info.commentDisplay + icon: Favicon.logo + notif.onclick = -> + Header.scrollToIfNeeded post.nodes.root, true + window.focus() + notif.onshow = -> + setTimeout -> + notif.close() + , 7 * $.SECOND onUpdate: (e) -> if !e.detail[404] @@ -241,6 +243,5 @@ Unread = Favicon[if isDead then 'unreadDead' else 'unread'] else Favicon[if isDead then 'dead' else 'default'] - unless chrome? - # `favicon.href = href` doesn't work on Firefox. - $.add d.head, Favicon.el + # `favicon.href = href` doesn't work on Firefox. + $.add d.head, Favicon.el diff --git a/src/Posting/Captcha.fixes.coffee b/src/Posting/Captcha.fixes.coffee index a2deda7d6..50fcf7143 100644 --- a/src/Posting/Captcha.fixes.coffee +++ b/src/Posting/Captcha.fixes.coffee @@ -1,6 +1,8 @@ Captcha.fixes = + imageKeys: '789456123uiojklm'.split('').concat(['Comma', 'Period']) + css: ''' - .rc-imageselect-target > .rc-imageselect-tile > img:focus { + .rc-imageselect-target > div:focus { outline: 2px solid #4a90e2; } .rc-button-default:focus { @@ -8,10 +10,29 @@ Captcha.fixes = } ''' + cssNoscript: ''' + .fbc-payload-imageselect { + position: relative; + } + .fbc-payload-imageselect > label { + position: absolute; + display: block; + height: 93.3px; + width: 93.3px; + } + label[data-row="0"] {top: 0px;} + label[data-row="1"] {top: 93.3px;} + label[data-row="2"] {top: 186.6px;} + label[data-col="0"] {left: 0px;} + label[data-col="1"] {left: 93.3px;} + label[data-col="2"] {left: 186.6px;} + ''' + init: -> switch location.pathname.split('/')[3] - when 'anchor' then @initMain() - when 'frame' then @initPopup() + when 'anchor' then @initMain() + when 'frame' then @initPopup() + when 'fallback' then @initNoscript() initMain: -> $.onExists d.body, '#recaptcha-anchor', true, (checkbox) -> @@ -28,35 +49,66 @@ Captcha.fixes = new MutationObserver(=> @fixImages()).observe d.body, {childList: true, subtree: true} $.on d, 'keydown', @keybinds.bind(@) + initNoscript: -> + @noscript = true + @images = $$ '.fbc-payload-imageselect > input' + return unless @images.length + + $.addStyle @cssNoscript + @addLabels() + $.on d, 'keydown', @keybinds.bind(@) + $.on $('.fbc-imageselect-challenge > form'), 'submit', @checkForm.bind(@) + fixImages: -> - return unless (@images = $$ '.rc-imageselect-target > .rc-imageselect-tile > img').length - focus = @images[0].tabIndex isnt 0 + @images = $$ '.rc-imageselect-target > div' for img in @images img.tabIndex = 0 - if focus - $.queueTask => @focusImage() + @addTooltips @images if @images.length - focusImage: -> - # XXX Image is not focusable at first in Firefox; to be refactored when I figure out why. - img = @images[0] - $.asap -> - return true unless doc.contains img - img.focus() - d.activeElement is img - , -> + addLabels: -> + imageSelect = $ '.fbc-payload-imageselect' + labels = for checkbox, i in @images + checkbox.id = "checkbox-#{i}" + label = $.el 'label', + htmlFor: checkbox.id + label.dataset.row = i // 3 + label.dataset.col = i % 3 + label + $.add imageSelect, labels + @addTooltips labels + + addTooltips: (nodes) -> + for node, i in nodes + node.title = "#{@imageKeys[i]} or #{@imageKeys[i+9][0].toUpperCase()}#{@imageKeys[i+9][1..]}" + return + + checkForm: (e) -> + n = 0 + n++ for checkbox in @images when checkbox.checked + e.preventDefault() if n is 0 keybinds: (e) -> - return unless @images and doc.contains(@images[0]) and d.activeElement - reload = $.id 'recaptcha-reload-button' - verify = $.id 'recaptcha-verify-button' + return unless @images and doc.contains(@images[0]) + + reload = $ '#recaptcha-reload-button, .fbc-button-reload' + verify = $ '#recaptcha-verify-button, .fbc-button-verify > input' x = @images.indexOf d.activeElement if x < 0 - return unless $('.rc-controls').contains d.activeElement x = if d.activeElement is verify then 11 else 9 - return unless dx = {38: 9, 40: 3, 37: 11, 39: 1, 73: 9, 75: 3, 74: 11, 76: 1}[e.keyCode] # Up, Down, Left, Right, I, K, J, L - x = (x + dx) % 12 - if x is 10 - x = if dx is 11 then 9 else 11 - (@images[x] or {9: reload, 11: verify}[x]).focus() + key = Keybinds.keyCode e + + if !@noscript and key is 'Space' and x < 9 + @images[x].click() + else if (i = @imageKeys.indexOf key) >= 0 + @images[i % 9].click() + verify.focus() + else if dx = {'Up': 9, 'Down': 3, 'Left': 11, 'Right': 1}[key] + x = (x + dx) % 12 + if x is 10 + x = if dx is 11 then 9 else 11 + (@images[x] or {9: reload, 11: verify}[x]).focus() + else + return + e.preventDefault() e.stopPropagation() diff --git a/src/Posting/Captcha.noscript.coffee b/src/Posting/Captcha.noscript.coffee index 1458c1f76..359181acc 100644 --- a/src/Posting/Captcha.noscript.coffee +++ b/src/Posting/Captcha.noscript.coffee @@ -1,10 +1,9 @@ Captcha.noscript = - lifetime: 2 * $.MINUTE - iframeURL: '//www.google.com/recaptcha/api/fallback?k=<%= meta.recaptchaKey %>' + lifetime: 30 * $.MINUTE init: -> return if d.cookie.indexOf('pass_enabled=1') >= 0 - return unless @isEnabled = !!$.id 'g-recaptcha' + return unless @isEnabled = !!$ '#g-recaptcha, #captchaContainerAlt' container = $.el 'div', className: 'captcha-img' @@ -27,7 +26,7 @@ Captcha.noscript = token: @save.bind @ error: @error.bind @ - $.addClass QR.nodes.el, 'has-captcha' + $.addClass QR.nodes.el, 'has-captcha', 'captcha-v1', 'noscript-captcha' $.after QR.nodes.com.parentNode, [container, input] @captchas = [] @@ -42,12 +41,15 @@ Captcha.noscript = initFrame: -> conn = new Connection window.parent, "#{location.protocol}//boards.4chan.org", response: (response) -> - $.id('response').value = response - $('.fbc-challenge > form').submit() - conn.send - token: $('.fbc-verification-token > textarea')?.value - error: $('.fbc-error')?.textContent - return unless img = $ '.fbc-payload > img' + $.id('recaptcha_response_field').value = response + # The form has a field named 'submit' + HTMLFormElement.prototype.submit.call $('form') + if location.hash is '#response' + conn.send + token: $('textarea')?.value + error: $('.recaptcha_input_area')?.textContent.replace(/:$/, '') + return unless img = $ 'img' + $('form').action = '#response' cb = -> canvas = $.el 'canvas' canvas.width = img.width @@ -61,6 +63,12 @@ Captcha.noscript = timers: {} + iframeURL: -> + url = '//www.google.com/recaptcha/api/noscript?k=<%= meta.recaptchaKey %>' + if lang = Conf['captchaLanguage'].trim() + url += "&hl=#{encodeURIComponent lang}" + url + cb: focus: -> QR.captcha.setup false, true @@ -88,11 +96,11 @@ Captcha.noscript = if !@nodes.iframe @nodes.iframe = $.el 'iframe', id: 'qr-captcha-iframe' - src: @iframeURL - $.add d.body, @nodes.iframe - @conn.target = @nodes.iframe.contentWindow + src: @iframeURL() + $.add QR.nodes.el, @nodes.iframe + @conn.target = @nodes.iframe else if !@occupied or force - @nodes.iframe.src = @iframeURL + @nodes.iframe.src = @iframeURL() @occupied = true @nodes.input.focus() if focus @@ -109,9 +117,9 @@ Captcha.noscript = destroy: -> return unless @isEnabled - $.rm @nodes.img if @nodes.img + $.rm @nodes.img delete @nodes.img - $.rm @nodes.iframe if @nodes.iframe + $.rm @nodes.iframe delete @nodes.iframe delete @occupied @beforeSetup() @@ -125,7 +133,7 @@ Captcha.noscript = if captcha = @captchas.shift() @count() $.set 'captchas', @captchas - captcha.response + captcha else if /\S/.test @nodes.input.value (cb) => @submitCB = cb @@ -141,15 +149,17 @@ Captcha.noscript = save: (token) -> delete @occupied @nodes.input.value = '' + captcha = + challenge: token + response: 'manual_challenge' + timeout: @timeout if @submitCB - @submitCB token + @submitCB captcha delete @submitCB if @needed() then @reload() else @destroy() else $.forceSync 'captchas' - @captchas.push - response: token - timeout: @timeout + @captchas.push captcha @count() $.set 'captchas', @captchas @reload() @@ -212,7 +222,7 @@ Captcha.noscript = @destroy() reload: -> - @nodes.iframe.src = @iframeURL + @nodes.iframe.src = @iframeURL() @occupied = true @nodes.img?.hidden = true diff --git a/src/Posting/Captcha.replace.coffee b/src/Posting/Captcha.replace.coffee new file mode 100644 index 000000000..24d9d867c --- /dev/null +++ b/src/Posting/Captcha.replace.coffee @@ -0,0 +1,54 @@ +Captcha.replace = + init: -> + return unless d.cookie.indexOf('pass_enabled=1') < 0 + return if location.hostname is 'boards.4chan.org' and Conf['Hide Original Post Form'] + + jsEnabled = $.hasClass doc, 'js-enabled' + + if location.hostname is 'sys.4chan.org' and Conf['Use Recaptcha v2 in Reports'] and jsEnabled + $.ready Captcha.replace.v2 + return + + if Conf['Use Recaptcha v1'] and jsEnabled and location.hostname isnt 'www.4chan.org' + $.ready Captcha.replace.v1 + return + + if Conf['captchaLanguage'].trim() + if location.hostname is 'boards.4chan.org' + $.onExists doc, '#captchaFormPart', true, (node) -> $.onExists node, 'iframe', true, Captcha.replace.iframe + else + $.onExists doc, 'iframe', true, Captcha.replace.iframe + + v1: -> + return unless $.id 'g-recaptcha' + Captcha.v1.replace() + if link = $.id 'form-link' + $.on link, 'click', -> Captcha.v1.create() + else if location.hostname is 'boards.4chan.org' + form = $.id 'postForm' + form.addEventListener 'focus', (-> Captcha.v1.create()), true + else + Captcha.v1.create() + + v2: -> + return unless old = $.id 'captchaContainerAlt' + container = $.el 'div', + className: 'g-recaptcha' + $.extend container.dataset, + sitekey: '<%= meta.recaptchaKey %>' + tabindex: 3 + $.replace old, container + url = 'https://www.google.com/recaptcha/api.js' + if lang = Conf['captchaLanguage'].trim() + url += "?hl=#{encodeURIComponent lang}" + script = $.el 'script', + src: url + $.add d.head, script + + iframe: (el) -> + return unless lang = Conf['captchaLanguage'].trim() + src = if /[?&]hl=/.test el.src + el.src.replace(/([?&]hl=)[^&]*/, '$1' + encodeURIComponent lang) + else + el.src + "&hl=#{encodeURIComponent lang}" + el.src = src unless el.src is src diff --git a/src/Posting/Captcha.v1.coffee b/src/Posting/Captcha.v1.coffee new file mode 100644 index 000000000..904b0f5d0 --- /dev/null +++ b/src/Posting/Captcha.v1.coffee @@ -0,0 +1,219 @@ +Captcha.v1 = + blank: "data:image/svg+xml," + + init: -> + return if d.cookie.indexOf('pass_enabled=1') >= 0 + return unless @isEnabled = !!$ '#g-recaptcha, #captchaContainerAlt' + + imgContainer = $.el 'div', + className: 'captcha-img' + title: 'Reload reCAPTCHA' + $.extend imgContainer, <%= html('') %> + input = $.el 'input', + className: 'captcha-input field' + title: 'Verification' + autocomplete: 'off' + spellcheck: false + @nodes = + img: imgContainer.firstChild + input: input + + $.on input, 'blur', QR.focusout + $.on input, 'focus', QR.focusin + $.on input, 'keydown', QR.captcha.keydown.bind QR.captcha + $.on @nodes.img.parentNode, 'click', QR.captcha.reload.bind QR.captcha + + $.addClass QR.nodes.el, 'has-captcha', 'captcha-v1' + $.after QR.nodes.com.parentNode, [imgContainer, input] + + @captchas = [] + $.get 'captchas', [], ({captchas}) -> + QR.captcha.sync captchas + QR.captcha.clear() + $.sync 'captchas', @sync + + @replace() + @beforeSetup() + @setup() if Conf['Auto-load captcha'] + new MutationObserver(@afterSetup).observe $.id('captchaContainerAlt'), childList: true + @afterSetup() # reCAPTCHA might have loaded before the QR. + + replace: -> + return if @script + unless @script = $ 'script[src="//www.google.com/recaptcha/api/js/recaptcha_ajax.js"]', d.head + @script = $.el 'script', + src: '//www.google.com/recaptcha/api/js/recaptcha_ajax.js' + $.add d.head, @script + if old = $.id 'g-recaptcha' + container = $.el 'div', + id: 'captchaContainerAlt' + $.replace old, container + + create: -> + $.globalEval ''' + (function() { + var container = document.getElementById("captchaContainerAlt"); + if (container.firstChild) return; + var options = { + theme: "clean", + tabindex: {"boards.4chan.org": 5, "sys.4chan.org": 3}[location.hostname] + }; + if (window.Recaptcha) { + window.Recaptcha.create("<%= meta.recaptchaKey %>", container, options); + } else { + var script = document.head.querySelector('script[src="//www.google.com/recaptcha/api/js/recaptcha_ajax.js"]'); + script.addEventListener('load', function() { + window.Recaptcha.create("<%= meta.recaptchaKey %>", container, options); + }, false); + } + })(); + ''' + + cb: + focus: -> QR.captcha.setup false, true + + beforeSetup: -> + {img, input} = @nodes + img.parentNode.hidden = true + img.src = @blank + input.value = '' + input.placeholder = 'Focus to load reCAPTCHA' + @count() + $.on input, 'focus click', @cb.focus + + needed: -> + captchaCount = @captchas.length + captchaCount++ if QR.req + postsCount = QR.posts.length + postsCount = 0 if postsCount is 1 and !Conf['Auto-load captcha'] and !QR.posts[0].com and !QR.posts[0].file + captchaCount < postsCount + + onNewPost: -> + + onPostChange: -> + + setup: (focus, force) -> + return unless @isEnabled and (force or @needed()) + @create() + @nodes.input.focus() if focus + + afterSetup: -> + return unless challenge = $.id 'recaptcha_challenge_field_holder' + return if challenge is QR.captcha.nodes.challenge + + setLifetime = (e) -> QR.captcha.lifetime = e.detail + $.on window, 'captcha:timeout', setLifetime + $.globalEval 'window.dispatchEvent(new CustomEvent("captcha:timeout", {detail: RecaptchaState.timeout}))' + $.off window, 'captcha:timeout', setLifetime + + {img, input} = QR.captcha.nodes + img.parentNode.hidden = false + input.placeholder = 'Verification' + QR.captcha.count() + $.off input, 'focus click', QR.captcha.cb.focus + + QR.captcha.nodes.challenge = challenge + new MutationObserver(QR.captcha.load.bind QR.captcha).observe challenge, + childList: true + subtree: true + attributes: true + QR.captcha.load() + + if QR.nodes.el.getBoundingClientRect().bottom > doc.clientHeight + QR.nodes.el.style.top = null + QR.nodes.el.style.bottom = '0px' + + destroy: -> + return unless @script + $.globalEval 'window.Recaptcha.destroy();' + @beforeSetup() if @nodes + + sync: (captchas=[]) -> + QR.captcha.captchas = captchas + QR.captcha.count() + + getOne: -> + @clear() + if captcha = @captchas.shift() + @count() + $.set 'captchas', @captchas + captcha + else + challenge = @nodes.img.alt + timeout = @timeout + if /\S/.test(response = @nodes.input.value) + @destroy() + {challenge, response, timeout} + else + null + + save: -> + return unless /\S/.test(response = @nodes.input.value) + @nodes.input.value = '' + @captchas.push + challenge: @nodes.img.alt + response: response + timeout: @timeout + @count() + @destroy() + @setup false, true + $.set 'captchas', @captchas + + clear: -> + return unless @captchas.length + $.forceSync 'captchas' + now = Date.now() + for captcha, i in @captchas + break if captcha.timeout > now + return unless i + @captchas = @captchas[i..] + @count() + $.set 'captchas', @captchas + + load: -> + if $('#captchaContainerAlt[class~="recaptcha_is_showing_audio"]') + @nodes.img.src = @blank + return + return unless @nodes.challenge.firstChild + return unless challenge_image = $.id 'recaptcha_challenge_image' + # -1 minute to give upload some time. + @timeout = Date.now() + @lifetime * $.SECOND - $.MINUTE + challenge = @nodes.challenge.firstChild.value + @nodes.img.alt = challenge + @nodes.img.src = challenge_image.src + @nodes.input.value = '' + @clear() + + count: -> + count = if @captchas then @captchas.length else 0 + placeholder = @nodes.input.placeholder.replace /\ \(.*\)$/, '' + placeholder += switch count + when 0 + if placeholder is 'Verification' then ' (Shift + Enter to cache)' else '' + when 1 + ' (1 cached captcha)' + else + " (#{count} cached captchas)" + @nodes.input.placeholder = placeholder + @nodes.input.alt = count # For XTRM RICE. + + reload: (focus) -> + # Recaptcha.should_focus = false: Hack to prevent the input from being focused + $.globalEval ''' + if (window.Recaptcha.type === "image") { + window.Recaptcha.reload(); + } else { + window.Recaptcha.switch_type("image"); + } + window.Recaptcha.should_focus = false; + ''' + @nodes.input.focus() if focus + + keydown: (e) -> + if e.keyCode is 8 and not @nodes.input.value + @reload() + else if e.keyCode is 13 and e.shiftKey + @save() + else + return + e.preventDefault() diff --git a/src/Posting/Captcha.v2.coffee b/src/Posting/Captcha.v2.coffee index 07f7893b7..86cbfbfcf 100644 --- a/src/Posting/Captcha.v2.coffee +++ b/src/Posting/Captcha.v2.coffee @@ -3,7 +3,12 @@ Captcha.v2 = init: -> return if d.cookie.indexOf('pass_enabled=1') >= 0 - return unless @isEnabled = !!$.id 'g-recaptcha' + return unless @isEnabled = !!$ '#g-recaptcha, #captchaContainerAlt' + + if @noscript = Conf['Force Noscript Captcha'] or not $.hasClass doc, 'js-enabled' + @conn = new Connection null, "#{location.protocol}//www.google.com", + token: (token) => @save true, token + $.addClass QR.nodes.el, 'noscript-captcha' @captchas = [] $.get 'captchas', [], ({captchas}) -> @@ -17,18 +22,34 @@ Captcha.v2 = counter = $ '.captcha-counter > a', root @nodes = {root, counter} @count() - $.addClass QR.nodes.el, 'has-captcha' + $.addClass QR.nodes.el, 'has-captcha', 'captcha-v2' $.after QR.nodes.com.parentNode, root $.on counter, 'click', @toggle.bind @ + $.on counter, 'keydown', (e) => + return unless Keybinds.keyCode(e) is 'Space' + @toggle() + e.preventDefault() + e.stopPropagation() $.on window, 'captcha:success', => # XXX Greasemonkey 1.x workaround to gain access to GM_* functions. $.queueTask => @save false + initFrame: -> + if token = $('.fbc-verification-token > textarea')?.value + conn = new Connection window.parent, "#{location.protocol}//boards.4chan.org" + conn.send {token} + shouldFocus: false timeouts: {} postsCount: 0 + noscriptURL: -> + url = '//www.google.com/recaptcha/api/fallback?k=<%= meta.recaptchaKey %>' + if lang = Conf['captchaLanguage'].trim() + url += "&hl=#{encodeURIComponent lang}" + url + needed: -> captchaCount = @captchas.length captchaCount++ if QR.req @@ -60,6 +81,7 @@ Captcha.v2 = if @nodes.container if @shouldFocus and iframe = $ 'iframe', @nodes.container iframe.focus() + QR.focus() # Event handler not fired in Firefox delete @shouldFocus return @@ -69,6 +91,19 @@ Captcha.v2 = childList: true subtree: true + if @noscript + @setupNoscript() + else + @setupJS() + + setupNoscript: -> + iframe = $.el 'iframe', + id: 'qr-captcha-iframe' + src: @noscriptURL() + $.add @nodes.container, iframe + @conn.target = iframe + + setupJS: -> $.globalEval ''' (function() { function render() { @@ -101,7 +136,7 @@ Captcha.v2 = return setupIFrame: (iframe) -> - @setupTime = Date.now() + Captcha.replace.iframe iframe $.addClass QR.nodes.el, 'captcha-open' if QR.nodes.el.getBoundingClientRect().bottom > doc.clientHeight QR.nodes.el.style.top = null @@ -134,19 +169,19 @@ Captcha.v2 = if captcha = @captchas.shift() $.set 'captchas', @captchas @count() - captcha.response + captcha else null - save: (pasted) -> + save: (pasted, token) -> $.forceSync 'captchas' @captchas.push - response: $('textarea', @nodes.container).value - timeout: (if pasted then @setupTime else Date.now()) + @lifetime + response: token or $('textarea', @nodes.container).value + timeout: Date.now() + @lifetime $.set 'captchas', @captchas @count() - focus = d.activeElement?.nodeName is 'IFRAME' and d.activeElement.src?[...38] is 'https://www.google.com/recaptcha/api2/' + focus = d.activeElement?.nodeName is 'IFRAME' and /https?:\/\/www\.google\.com\/recaptcha\//.test(d.activeElement.src) if @needed() if focus if QR.cooldown.auto or Conf['Post on Captcha Completion'] @@ -182,9 +217,12 @@ Captcha.v2 = @timeouts.clear = setTimeout @clear.bind(@), @captchas[0].timeout - Date.now() reload: -> - $.globalEval ''' - (function() { - var container = document.querySelector("#qr .captcha-container"); - window.grecaptcha.reset(container.dataset.widgetID); - })(); - ''' + if @noscript + $('iframe', @nodes.container).src = @noscriptURL() + else + $.globalEval ''' + (function() { + var container = document.querySelector("#qr .captcha-container"); + window.grecaptcha.reset(container.dataset.widgetID); + })(); + ''' diff --git a/src/Posting/QR.coffee b/src/Posting/QR.coffee index 960d9fab1..2dbaf5d4f 100644 --- a/src/Posting/QR.coffee +++ b/src/Posting/QR.coffee @@ -1,6 +1,17 @@ QR = mimeTypes: ['image/jpeg', 'image/png', 'image/gif', 'application/pdf', 'application/vnd.adobe.flash.movie', 'application/x-shockwave-flash', 'video/webm'] + validExtension: /\.(jpe?g|png|gif|pdf|swf|webm)$/i + + typeFromExtension: + 'jpg': 'image/jpeg' + 'jpeg': 'image/jpeg' + 'png': 'image/png' + 'gif': 'image/gif' + 'pdf': 'application/pdf' + 'swf': 'application/vnd.adobe.flash.movie' + 'webm': 'video/webm' + init: -> return unless Conf['Quick Reply'] @@ -9,8 +20,12 @@ QR = return if g.VIEW is 'archive' - noscript = Conf['Force Noscript Captcha'] or not $.hasClass doc, 'js-enabled' - @captcha = Captcha[if noscript then 'noscript' else 'v2'] + version = if Conf['Use Recaptcha v1'] + noscript = Conf['Force Noscript Captcha'] or not $.hasClass doc, 'js-enabled' + if noscript then 'noscript' else 'v1' + else + 'v2' + @captcha = Captcha[version] $.on d, '4chanXInitFinished', @initReady @@ -134,14 +149,16 @@ QR = QR.hasFocus = d.activeElement and QR.nodes.el.contains(d.activeElement) QR.nodes.el.classList.toggle 'focus', QR.hasFocus # XXX Stop unwanted scrolling due to captcha. - if QR.inCaptcha() - QR.scrollY = window.scrollY - $.on d, 'scroll', QR.scrollLock - else - $.off d, 'scroll', QR.scrollLock + if QR.captcha.isEnabled and QR.captcha is Captcha.v2 and !QR.captcha.noscript + if QR.inCaptcha() + QR.scrollY = window.scrollY + $.on d, 'scroll', QR.scrollLock + else + $.off d, 'scroll', QR.scrollLock inBubble: -> - $$('.goog-bubble-content > iframe').some((el) -> el.getBoundingClientRect().bottom > 0) + bubbles = $$ '.goog-bubble-content > iframe' + d.activeElement in bubbles or bubbles.some((el) -> el.getBoundingClientRect().bottom > 0) inCaptcha: -> (d.activeElement?.nodeName is 'IFRAME' and QR.nodes.el.contains(d.activeElement)) or (QR.hasFocus and QR.inBubble()) @@ -191,19 +208,21 @@ QR = unless Header.areNotificationsEnabled alert el.textContent if d.hidden and not QR.cooldown.auto else if d.hidden or not (focusOverride or d.hasFocus()) - notif = new Notification el.textContent, - body: el.textContent - icon: Favicon.logo - notif.onclick = -> window.focus() - if chrome? - # Firefox automatically closes notifications - # so we can't control the onclose properly. - notif.onclose = -> notice.close() - notif.onshow = -> - setTimeout -> - notif.onclose = null - notif.close() - , 7 * $.SECOND + # XXX https://bugzilla.mozilla.org/show_bug.cgi?id=1130502 (SeaMonkey) + try + notif = new Notification el.textContent, + body: el.textContent + icon: Favicon.logo + notif.onclick = -> window.focus() + if $.engine isnt 'gecko' + # Firefox automatically closes notifications + # so we can't control the onclose properly. + notif.onclose = -> notice.close() + notif.onshow = -> + setTimeout -> + notif.onclose = null + notif.close() + , 7 * $.SECOND notifications: [] @@ -346,7 +365,7 @@ QR = for i in [0...bstr.length] arr[i] = bstr.charCodeAt(i) blob = new Blob [arr], {type: m[1]} - blob.name = "image.#{m[2]}" + blob.name = "file.#{m[2]}" QR.handleFiles [blob] else if /^https?:\/\//.test src QR.handleUrl src @@ -523,7 +542,7 @@ QR = # We don't receive blur events from captcha iframe. $.on d, 'click', QR.focus - unless chrome? + if $.engine is 'gecko' nodes.pasteArea.hidden = false new MutationObserver(QR.pasteFF).observe nodes.pasteArea, {childList: true} @@ -536,20 +555,19 @@ QR = event = if node.nodeName is 'SELECT' then 'change' else 'input' $.on nodes[name], event, save - <% if (type === 'userscript') { %> - if Conf['Remember QR Size'] + # XXX Blink and WebKit treat width and height of