[SCM] streamtuner2/master: Imported Upstream version 2.1.9

takaki at users.alioth.debian.org takaki at users.alioth.debian.org
Wed Nov 25 07:06:49 UTC 2015


The following commit has been merged in the master branch:
commit abe197890e4fb5cf3d1ce9afc6d304cb13cccf39
Author: TANIGUCHI Takaki <takaki at asis.media-as.org>
Date:   Wed Nov 25 13:59:26 2015 +0900

    Imported Upstream version 2.1.9

diff --git a/.zip.py b/.zip.py
new file mode 100644
index 0000000..999eb8e
--- /dev/null
+++ b/.zip.py
@@ -0,0 +1,5 @@
+# pack: .zip.py=__main__.py
+#
+# All-local paths within pyz package.
+import st2
+st2.main()
diff --git a/CREDITS b/CREDITS
new file mode 100644
index 0000000..7c43d78
--- /dev/null
+++ b/CREDITS
@@ -0,0 +1,47 @@
+
+· Mario Salzer, http://include-once.org/
+  → Streamtuner2 maintainer
+
+· Christian Ehm, http://ehm-edv.de/
+  → MyOggRadio service, API and plugin
+
+· gorgonz123, http://paste.ubuntuusers.de/399600/
+  → SurfMusic channel plugin
+
+· Matthias Haase, http://www.bennewitz.com/
+  and Leigh Scott, B.Jones
+  → Fedora package, many bug reports, fixes, etc.
+
+· Abhisek Sanyal
+  → Major fix/patch for Live365
+
+· Heinrich Schwietering, http://ubuntuusers.de/
+  → external + user-friendly documentation
+
+· https://fiverr.com/graphicshome
+  → The new application logo/banner
+
+· Jean-Yves Lefort (and contributors),
+  → For the original STREAMTUNER 0.99.xx!
+
+Of course also many thanks to all users
+reporting and helping to investigate bugs!
+
+ · samanthax
+ · aquarius 
+ · kino
+ · omelette
+ · Daniel, http://www.librepc.com/
+ · Troy
+ · darose
+ · b.nikola
+ · stefantalpalaru
+ · micha, musicgoal
+ · jay.l.h
+
+And probably many others...
+
+Lastly, a big thanks to all distro package
+maintainers. It's not the just tools which
+make BSD/Linux vibrant, but the relentless
+effort from you guys & gals!
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..24a7e82
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,91 @@
+# Requires 
+# · http://fossil.include-once.org/versionnum/
+# · http://fossil.include-once.org/xpm/
+
+SHELL   := /bin/bash #(for brace expansion)
+NAME    := streamtuner2
+VERSION := $(shell version get:plugin st2.py || echo 2.1dev)
+DEST    := /usr/share/streamtuner2
+INST    := install -m 644
+PACK    := xpm
+DEPS    := -n $(NAME) -d python -d python-pyquery -d python-gtk2 -d python-requests -d python-keybinder
+DEPS_A  := -n $(NAME) -d pygtk -d python2 -d python2-cssselect -d python2-keybinder2 -d python2-lxml -d python2-pillow -d python2-pyquery -d python2-xdg -d python2-requests --provides streamtuner-python
+OPTS    := -s src -u packfile,man,fixperms -f --prefix=$(DEST) --deb-compression=xz --rpm-compression=xz --exe-autoextract
+
+# targets
+.PHONY:	bin
+all:	gtk3 #(most used)
+pack:	all ver docs xpm src
+gtk3:	gtk3.xml.gz
+zip:	pyz
+print-%:
+	@echo $*=$($*)
+
+
+# Convert between internal GtkBuilder-gzipped file and uncompressed xml
+gtk3.xml.gz: gtk3.xml
+	gzip -c9 < gtk3.xml > gtk3.xml.gz
+glade:
+	gzip -dc > gtk3.xml < gtk3.xml.gz
+	glade gtk3.xml 2>/dev/null
+	gzip -c9 < gtk3.xml > gtk3.xml.gz
+
+# Prepare packaging
+docs:
+ver:	# copy `version:` info
+	version get:plugin st2.py write:control PKG-INFO
+clean:
+	rm *.pyc */*.pyc
+	rm -r __pycache__ */__pycache__
+
+#-- bundles
+xpm: deb pyz tar rpm exe
+deb:
+	$(PACK) -t $@ $(OPTS) $(DEPS) -p "$(NAME)-VERSION.deb" st2.py
+rpm:
+	$(PACK) -t $@ $(OPTS) $(DEPS) -p "$(NAME)-VERSION.rpm" st2.py
+tar:
+	$(PACK) -t $@ $(OPTS) $(DEPS) -p "$(NAME)-VERSION.bin.txz" st2.py
+exe:
+	$(PACK) -t $@ $(OPTS) $(DEPS) -p "$(NAME)-VERSION.exe" st2.py
+arch:
+	$(PACK) -t $@ $(OPTS) $(DEPS_A) -p "$(NAME)-VERSION.arch.txz" st2.py
+pyz:
+        #@BUG: relative package references leave a /tmp/doc/ folder
+	$(PACK) -u packfile -s src -t zip --zip-shebang "/usr/bin/env python"	\
+		-f -p "$(NAME)-$(VERSION).pyz" --prefix=./  .zip.py st2.py
+src:
+	cd .. && pax -wvJf streamtuner2/streamtuner2-$(VERSION).src.txz \
+		streamtuner2/*.{py,png,desktop} streamtuner2/channels/*.{py,png} \
+		streamtuner2/{bundle/,contrib/,help/,gtk,NEWS,READ,PACK,PKG,CRED,Make,bin,.zip}*
+
+# test .deb contents
+check:
+	dpkg-deb -c streamtuner2*deb
+	dpkg-deb -I streamtuner2*deb
+	rpm -qpil *rpm
+
+# manual installation
+install:
+	mkdir	-p				$(DEST)/channels
+	mkdir	-p				/usr/share/doc/streamtuner2/help/img
+	install -m 755		bin		/usr/bin/streamtuner2
+	$(INST)		*py		-t $(DEST)
+	$(INST)		gtk3*		-t $(DEST)
+	$(INST)		channels/*py	-t $(DEST)/channels
+	$(INST)		help/*page	-t /usr/share/doc/streamtuner2/help
+	$(INST)		help/img/*	-t /usr/share/doc/streamtuner2/help/img
+	$(INST)		CREDITS		-t $(DEST)
+	$(INST)		README		-t /usr/share/doc/streamtuner2
+	$(INST)		*.desktop	-t /usr/share/applications/
+	$(INST)		icon.png	/usr/share/pixmaps/streamtuner2.png
+	$(INST)		help/str*2.1	-t /usr/share/man/man1/
+
+# start locally
+st2: run
+run:
+	#MALLOC_CHECK_=2 PYTHONVERBOSE=2
+	python -B  ./st2.py -D  -e dev_faulthandler
+
+yelp:
+	yelp help/index.page 2>/dev/null &
diff --git a/README b/NEWS
similarity index 63%
copy from README
copy to NEWS
index 21edff8..24774e4 100644
--- a/README
+++ b/NEWS
@@ -1,55 +1,127 @@
 
-streamtuner2
-============
-
-ST2 is a internet radio browser. It queries online directories like
-shoutcast and xiph.org for music stations.
-
-It mimics the original streamtuner 1 to some extend. It's however
-written in Python now instead of C.
-
-
-installation howto
-------------------
-
-You can just execute the main binary "st2.py". All the other files
-need to be copied into /usr/share/streamtuner2/ however. If it
-doesn't work, make sure you have Python and gtk/pygtk installed:
-
-  sudo apt-get install python python-gtk2 python-glade2 python-xdg
-
-The gtk*.xml file represents the GUI.  So with glade installed, you
-can inspect and adapt the interface.
-
-
-alternatives
-------------
-
-* http://sourceforge.net/projects/radiotray/
-* https://sites.google.com/site/glrpgreatlittleradioplayer/
-* http://tunapie.sourceforge.net/
-* VLC also has a few directory discovery services built-in
-* Rythmbox comes with last.fm, libre.fm, radio lookups
-
-
-Streamtuner2 CLI can also be used as proxy server for streamtuner1.
-There is a wrapper available. But there was nobody yet to be found who
-wanted it set up globally.
-It's available as st1proxy.tgz and cli-mode-only.tgz from
-http://milki.include-once.org/streamtuner2/ext/
-Contact me for setup help. Requires a webserver with unrestrained
-vhost support.
-
-
-license
--------
-
-Public Domain.
-(no rules: unrestricted copying, modification, distribution, etc.)
-
-
-history
--------
+2.1.9 (2015-05-25)
+ * Overhaul favicon/banner module, support instant icon display updates,
+   simpler cache filenames, rescaling, implicit sanitizing, less coupling.
+ * Add radio.net channel.
+ * Add di.fm/sky.fm/jazzradio as contrib plugin.
+ * Add basic Magnatune channel.
+ * Add ListenLive contrib plugin.
+ * Add reddit channel plugin, and optional support for converting
+   Soundcloud links to streamable addresses.
+ * Add WindowsMediaGuide plugin and fix ASX extraction.
+ * More Python3 fixes.
+ * More forced UTF-8 decoding to speed downloading up.
+ * Crash fixes for server search.
+ * Fix for stream url conversion for MyOggRadio plugin.
+ * Add bitrate filter plugin to apply on all channels.
+ * Remove iTunes plugin.
+ * Fix Dirble channel fetching, add weighted bitrate+format selection.
+ * Add channel homepage title+link in toolbar (like in streamtuner1).
+ * More internal simplifications and rewrites, externalized pluginconf.
+ * Compact main settings list, introduce SpinButtons for integers.
+ * Update documentation, add project links, slim down images.
+ * Introduce 0install package using PYZ bundle.
+
+2.1.8 (2015-05-05)
+ * New channel plugins for Radionomy.com, Filtermusic.net, Delicast.com.
+ * Added Dirble channel again, using new API.
+ * Removed iCast plugin. Removed 8tracks plugin.
+ * Brought back Xiph XML extraction, and added direct website extraction,
+   in addition to JSON cache mode.
+ * Add TV list for UbuntuUsers channel.
+ * Introduction of User Plugin Manager and channel module updating,
+   automatic plugin activation, contrib plugins: PublicRadioFan, GLRP.
+ * Change Youtube plugin to use only v3 API henceforth.
+ * Minor fixes to action/playlist extraction, add specific JAMJ extractor.
+ * Update manual on new channel/feature plugins.
+ * Separated config and pluginconf modules.
+ * Fixes to contrib/ plugins: compound, file, punkcast.
+ * Scroll back to last category on initialization, simplified window
+   and state storage.
+ * Some Gtk3 fixes, catch invalid favicons while updating columns,
+   another fix for search function.
+ * Better inline documentation for player configuration, more thorough
+   program binary detection. Simplified channel parsing utility code,
+   added @use_rx decorator. And a few more internal cleanups.
+ * Add new configuration dialog group for Playlist processing.
+ * Experimental new package for Arch Linux / pacman.
+
+2.1.7 (2015-04-26)
+- Experimental support for drag and drop, which allows playback,
+  importing, or exporting stations from/to files.
+- Configuration dialog became more clearly arranged by separating
+  channels and feature plugins.
+- More manual examples on recording configuration added.
+- Several enhancements to playlist conversion, support for .desktop
+  links, better heuristics, and working url+title extraction.
+- All MOD files use generic audio/mod+zip MIME type.
+- Use new and distinct /tmp/streamtuner2/ directory for cache+export.
+- Implemented hashing for cached m3u/pls files.
+- Support "feeds" stream in Jamendo, more complete Ogg Vorbis support
+  and JAMJSON extraction instead of using old v2 API.
+- Initial startup and application state restoration became more robust,
+  active category is tracked more dynamically.
+- Some internal simplifications and code cleanup (logging simplified,
+  more uikit wrappers for Gtk3, removed outdated PIL workaround,
+  cleanup up remnant module descriptions).
+- Statusbar is just a plain text label, automatically emptied.
+- Disable partial stream refreshing, and threading per --nt flag
+  or config option, because Gtk3 support is still flaky. Let gtk_idle
+  callbacks run in order through an internal precedence spool.
+- Browser invocations corrected.
+- Crash in cache search fixed.
+- PYZ building now supported by xpm and Packfile for custom adaptions.
+
+2.1.6 (2015-04-13)
+ * The action module has been completely restructured. It now supports
+   playlist rewriting, better heuristics, XSPF, JSPF, ASX, SMIL formats.
+ * Along with that a category playlist export function was bundled, and
+   the Save-As dialog reworked.
+ * A new SomaFM channel was bundled, and user agent switcher plugin added.
+ * Fixes for the bookmarks channel, cache search, plugin lookup code were
+   applied.
+ * Startup is faster again, but plugins now initialize on selection first.
+   Which makes the category association exacter after restarts. 
+ * More code cleanup and restructuring, GUI updates, command line flag
+   handling. Still a beta release.
+
+2.1.5 (2015-04-05)
+- This is a beta release, with lots of cleanups and various bugfixes.
+- Adds a self-contained PYZ package, which Python can run directly.
+- Now fully utilizes the plugin meta data scheme for default settings,
+  discovery, and to reduce internal complexity.
+- A new channel plugin for "Radio-Browser.info" has been bundled.
+- Another plugin for interfacing with "RadioTray" was introduced, to
+  share bookmarks via DBUS once RadioTray implements it.
+- Notebook tabs are now on the left per default, and can be rearranged
+  directly in the GUI.
+- The configuration dialog now indicates the availability of selected
+  audio players. Default audio players are now automatically configured
+  during the first startup.
+- Gtk properties are now utilized more over internal UI state vars.
+- The the GtkBuilder UI file is now compressed, the Gtk2 fallback removed.
+- The former channel icon PNGs are now embedded.
+- Theme configuration was removed.
+- Category retrieval became more resilient.
+- HTTP timeouts have been added.
+- The bookmarks tab, settings window, search dialog, stream inspector/editor
+  have been externalized into plugins; yet remain core features.
+- The packaging layout has been slightly restructured - to support
+  relocatable installations (for PyZIP package).
+- Minor fixes to youtube, internet_radio, punkcast, timer and other plugins.
+- Help pages have been updated further, as well as CREDITS, README and
+  general PACKAGING infos, and most plugin short descriptions.
+- The project wiki now contains a more details on plugin APIs.
+
+2.1.4 (2015-03-25)
+- Fixed Internet-Radio extraction.
+- Added basic TuneIn channel.
+- Removed Dirble and MusicGoal channels.
+- Fix desktop and packaging infos according to Debian guidelines.
+- Switch to fpm/xml for package building.
+- Remove bundled requests library.
+- Update icon and fix path to application logo.
+- Minor documentation updates.
 
 2.1.3 (2014-08-15)
 - New plugin for Dirble.com introduced.
@@ -59,7 +131,6 @@ history
 - Category map storage is now handled by backend instead of channels.
 - Shorter Youtube homepage URLs are used, HTTP headers compacted.
 
-
 2.1.2 (2014-07-31)
 - Listing from the renewed Radionomy Shoutcast has been fixed.
 - Live365 was disabled.
@@ -89,7 +160,7 @@ history
 - A history plugin was added. And extension hooks{} support started.
 - Some more Python3 fixes applied. Documentation was adapted.
 
-2.1.0 (2014-01-05)
+2.1.0 (2014-04-28)
 - support for running on Python3 or Python2,
   as well as Gtk3 (PyGI) and Gtk2 (PyGtk with Python2) bindings
 - fixed Shoutcast, DMOZ, Live365
@@ -103,7 +174,7 @@ history
 - uninitialized channels are no longer attached as tabs
 - absent liststore references have finally been fixed
 
-2.0.9
+2.0.9 (2014-01-05)
 - sys.path patch (less py module conflicts) from Stefan Talpalaru
 - fixed main_quit signal slot, so window size saving works
 - added [new] button in streamedit window
@@ -116,7 +187,16 @@ history
 - live365 parsing restored by patch from Abhisek Sanyal
 - fix Pixbuf typecasing in mygtk liststore appending
 
-2.0.8
+2.0.8.7 (unreleased)
+- Development
+
+2.0.8.5 (unreleased)
+- Development
+
+2.0.8.2 (unreleased)
+- Bugfixes
+
+2.0.8 (2010-09-03)
 - configuration files use prettified json
 - fixed double quotation for %pls players and /local/file handling
 - (unused) channel .shutdown function introduced (late saving)
@@ -125,7 +205,7 @@ history
 - fixed pyQuery parsing for latest shoutcast change
   (strangely the regular expressions were still working)
 
-2.0.7
+2.0.7 (2010-08-12)
 - json cache files are now stored .gz compressed
 - xiph channel .format() call fixed into .mime_fmt()
 - simplified __init__ and attributes of main window object
@@ -137,7 +217,7 @@ history
 - shoutcast finally became a real channel plugin
 - processing.py pseudo module removed
 
-2.0.6
+2.0.6 (2010-07-31)
 - mirrored Station>Extensions menu into stream context menu
 - creation of .nobackup files in cache/ and icons/ directories
 - global_key plugin allows radio switching via keyboard shortcut
@@ -153,7 +233,7 @@ history
 - cleaner .src.tgz package, contrib/ files have been externalized
 - minor fix for quicksearch function
 
-2.0.5
+2.0.5 (2010-07-26)
 - display logic now can extract homepage URLs from station titles
 - automated google search for missing station homepages
 - kept .m3u files are reused for playing (faster)
@@ -171,7 +251,7 @@ history
 - the Shoutcast channel was plugin-ed out, but remains in the UI file
 - multiple additions to and restructuring of the help files, manpage
 
-2.0.4
+2.0.4 (2010-07-22)
 - PyQuery parsing for InternetRadio.org.uk channel, and adapted PQ
   usage for shoutcast
 - utility function http.fix_url extended, common string parsing
@@ -183,7 +263,7 @@ history
   extra support for Windows port, native modules will be used on Linux)
 - more Gtk.Widget mini help popups in the dialog windows
 
-2.0.3
+2.0.3 (2010-07-18)
 - new channel plugin: MyOggRadio (an open source directory)
 - also Internet-Radio.org.uk channel, but only regex parsing for now
 - the quick search box is now in the toolbar, while an all-scanning
@@ -196,7 +276,7 @@ history
 - fixed disabling search, config, streamedit windows (gtk close event)
 - and a few help files were added
 
-2.0.2
+2.0.2 (2010-07-13)
 - more checks for initializing channel plugins
 - gtkrc theming support extended: apply and combobox in config dialog
 - PyQuery as new alternative parsing mechanism, as option for shoutcast
@@ -206,7 +286,7 @@ history
 - distribution includes gtkrc theme "MountainDew"
 - removed most debug print statements, introduced a config option for it
 
-2.0.1
+2.0.1 (2010-07-08)
 - new channel plugin: jamendo (just a simple browser for now)
 - new channel plugin: basicch (all new, because old scraper nonfunc)
 - new channel plugin: punkcast (just a very basic listing)
@@ -221,7 +301,7 @@ history
 - add "format" to stream edit dialog
 - new helper methods: mygtk.bg(), config.get()
 
-2.0.0
+2.0.0 (2010-07-05)
 - search function implemented, highlights results in current category list
 - right click context menu added
 - station data inspection/editor added
@@ -240,12 +320,11 @@ history
 - made a new logo for 2.0.0 release
 - fixed shoutcast category loading
 
-
-1.9.9-2
+1.9.9-2 (2010-07-01)
 - bookmark handling fixed
 - pson/json decoding still flaky
 
-1.9.9
+1.9.9 (2010-07-01)
 - fixed record action
 - shoutcast parser redone twice
 - rebuilding of TreeView list more robust noew, always in gobject.idle()
@@ -253,7 +332,7 @@ history
 - live365 is buggy, but usable
 - bookmarks still broken
 
-1.9.8
+1.9.8 (2010-06-25)
 - save-as dialog implemented (export to .m3u, .pls or .xspf)
 - download progress bar added
 - last selected category and stream entry is remembered in all channel
@@ -265,7 +344,7 @@ history
 - the Google stations plugin has been ported from streamtuner1
 - packaging of .deb and .rpm archives
 
-1.9.7
+1.9.7 (2010-06-20)
 - configuration window added
 - threading support enabled (uses python 2.6 processing if avail)
 - more generic window/state saving
@@ -279,19 +358,19 @@ history
 - better doc for mygtk.columns()
 - (temp.) faster initial startup by not .load()ing default category
 
-1.9.6
+1.9.6 (2010-06-15)
 - added xiph.org example implementation, incomplete
 - bookmark module basics done
 - rowmap defined manually again, instead of in mygtk.
 
-1.9.5
+1.9.5 (2010-06-15)
 - basic menu added, toolbar style switching
 - glade XML file is searched in binary dir
 - static classes move to bottom
 - forgotten/deleted streams feature added 
 - display() filter
 
-1.9.4
+1.9.4 (2010-06-14)
 - category change
 - app_state
 - mygtk.column_view() and .column_data() have been merged into
@@ -299,7 +378,7 @@ history
   datamap, instead of individual sublists, pixbuf support added
 - shoutcast.rowtypes cellmap titles colsizes cellrendr colattrs gone
 
-1.9.3
+1.9.3 (2010-06-10)
 - thread for http GET (doesn't work)
 - app_restore added
 - action.record, browse, homepage stream / channel, .reload streams
@@ -310,7 +389,7 @@ history
 - http. wrapper class
 - action. with actual os.system() call
 
-1.9.2
+1.9.2 (2010-06-10)
 - action.play(), .m3u
 - pseudojson instead of pickle in Config class
 - more doc on top
@@ -319,13 +398,13 @@ history
 - mime defaults for action. module in conf
 . .pls and .m3u methods in action.
 
-1.9.1
+1.9.1 (2010-06-10)
 - first real shoutcast server scans
 - ??
 - ..
 - cache stream lists + category names
 
-1.9.0
+1.9.0 (2010-06-10)
 - first GUI implementation with standard glade
 - at least shoutcast category names were read
 
diff --git a/PACKAGING b/PACKAGING
new file mode 100644
index 0000000..9aff59a
--- /dev/null
+++ b/PACKAGING
@@ -0,0 +1,167 @@
+# pack: PACKAGING=
+
+This is a short summary for distribution package maintainers.
+For regular end-user documentation please see the README and
+help/ pages.
+
+
+Structural changes from 2.1.5 onwards (2015-04-xx)
+--------------------------------------------------
+
+ → There's a new `bin` script. It's a lightweight invocation
+   wrapper, intended to be installed as /usr/bin/streamtuner2
+   now.
+   Which hopefully avoids lengthy patches in the future.
+
+ → The previous `st2.py` still exists, but is now supposed to
+   reside in `/usr/share/streamtuner2/st2.py` along with all
+   other modules.
+
+ → Theoretically it's now possible to change the target path
+   even (just edit `bin`).
+
+I'd still advise to use /usr/share/streamtuner2/ as main target
+directory though. It's not yet practical to extract into Python
+site-package directories.
+
+The channel PNG files have been soaked into the .py includes.
+Though one could still package any static *.png alongside.
+(Both will remain supported, for simplicity.)
+
+
+Renames
+-------
+
+ · bookmarks, configdialog, streamedit were extracted into
+   channels/ - which is why the main module got lighter.
+
+ · uikit.py is the new mygtk
+
+ · contrib/ contains more add-on modules, which could just
+   be packaged into channels/ - selectively.
+
+   (Alternatively users can download and activate those
+   themselves later.)
+ 
+
+Aux files
+---------
+
+ → Help files still need to go to share/docs/streamtuner2/help/
+   unless you patch the source.
+
+ → *.desktop as usual
+
+ → and `icon.png` is the /share/pixmaps/ icon
+
+
+Removed
+-------
+
+Most plugin PNGs may have been removed already. (Embedded
+binary data may violate some distro guidelines(?), but hey,
+fewer files are fewer files!)
+
+And the streamtuner2.png logo is now source-embedded instead;
+the `logo.py` module provides a `logo.png` base64-string.
+
+The old `gtk2.xml` file is gone. It probably became obsolete
+a long while back. The gtk3.xml is instead runtime-patched
+to work with PyGTK/gtk2.
+
+
+Dependencies
+------------
+
+If possible, make ST2 dependend on Python2 -or- Python3.
+It's not yet practical, and probably against distro standards,
+and only APT could so anyway. But if feasible...
+
+Also, hard dependencies are meanwhile:
+
+  - gtk (>= 2.16)
+  - pygtk                           [or python-gi for python3]
+  - python-requests (>= 2.0.0)
+  - python-pyquery    [though most plugins would work without]
+  - and its implied python-lxml
+
+Optional dependencies (just affects a single plugin, which
+semi-gracefully disables itself):
+
+  - python-keybinder   [for global_key]
+  - python-dbus        [for radiotray]
+
+Very optional dependencies (everything should work without):
+
+  - python-xdg
+
+Strongly suggest:
+
+  - streamripper       [or ficy/fpls etc.]
+  - any audio player of course
+
+Suggest:
+
+  - youtube-dl   [technically not required, as VLC works without]
+
+
+Lazy installation
+-----------------
+
+The new .PYZ archive bundles everything into a ZIP file. Which,
+given the right shebang, could just be "installed" as literal
+/usr/bin/streamtuner2 even.
+
+I'm sure nobody is going to do so. But you know, it's at least
+a theoretical option now..
+
+And this PYZ-packaging scheme is the main reason for the
+restructuring, and embedded PNGs for example. (Albeit that
+wasn't strictly necessary.)
+
+
+FPM/XPM packaging
+-----------------
+
+You may have noticed (and scoffed at ;) the newer packaging
+method. It's now using http://fossil.include-once.org/xpm/
+with the `-s src` filter. (That's what the meta comment blocks
+in the source modules were always meant for.)
+
+Simplifies DEB and RPM packaging, as well as PYZ generation.
+(They're all workable, but decidedly rather crude packages.
+So yes, proper distro packages are very much still needed.)
+
+
+Fossil Repo
+-----------
+
+The source code is hosted in a Fossil repo.
+A few special pages of interest:
+
+ · DETAILED CHANGELOG 
+   http://fossil.include-once.org/streamtuner2/changelog
+
+ · Raw tarball/zip, by version or tip/trunk
+   http://fossil.include-once.org/streamtuner2/tar/2.1.5/st.tgz
+   http://fossil.include-once.org/streamtuner2/zip/trunk/st.zip
+
+ · Literal file download
+   http://fossil.include-once.org/streamtuner2/cat/config.py
+
+ · Doc browsing/download
+   http://fossil.include-once.org/streamtuner2/doc/trunk/help/html/index.html
+
+ · Trunk filerefs
+   http://fossil.include-once.org/streamtuner2/uri-list
+
+ · DIRECT GIT EXPORT
+   http://fossil.include-once.org/streamtuner2/git-fast-export
+   (Git may or may not choke on its own export format though..)
+
+
+Fin
+---
+
+Thanks guys!
+
diff --git a/PKG-INFO b/PKG-INFO
index 39396b4..d17e129 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.0
 Name: streamtuner2
-Version: 2.1.0
+Version: 2.1.9
 Summary: Streamtuner2 is an internet radio browser
 Home-page: http://fossil.include-once.org/streamtuner2/
 Author: Mario Salzer
@@ -8,3 +8,5 @@ Author-email: xmilky+st2 at gmail....
 License: Public Domain
 Description: Streamtuner2 lists radio directory services like Shoutcast, Xiph, Live365, MyOggRadio, Jamendo. It allows listening via any audio player, and recording of streams via streamripper.
 Platform: ALL
+Keywords: internet-radio, python, streaming, audio
+
diff --git a/README b/README
index 21edff8..0347309 100644
--- a/README
+++ b/README
@@ -1,332 +1,185 @@
+# type: doc
+# pack: README=/usr/share/doc/streamtuner2/
 
-streamtuner2
+
+Streamtuner2
 ============
 
-ST2 is a internet radio browser. It queries online directories like
-shoutcast and xiph.org for music stations.
+ST2 is a browser for internet radio/streaming stations. It queries
+directories like Shoutcast, TuneIn, MyOggRadio, Xiph.org. SurfMusic,
+Jamendo etc. for music/video streams/collections.
 
-It mimics the original streamtuner 1 to some extend. It's however
-written in Python now instead of C.
+It mimics the original streamtuner 1 to some extend.
+It's however written in Python now instead of C.
 
 
-installation howto
+Installation howto
 ------------------
 
-You can just execute the main binary "st2.py". All the other files
-need to be copied into /usr/share/streamtuner2/ however. If it
-doesn't work, make sure you have Python and gtk/pygtk installed:
-
-  sudo apt-get install python python-gtk2 python-glade2 python-xdg
+If possible, prefer the package directly from your BSD/Linux distribution.
 
-The gtk*.xml file represents the GUI.  So with glade installed, you
-can inspect and adapt the interface.
+Due to a longer maintenance and release break, some still have older 2.0.x
+versions however - whose channel plugins barely work anymore. If so, you
+should install a newer version / manually.
 
 
-alternatives
+Dependencies
 ------------
 
-* http://sourceforge.net/projects/radiotray/
-* https://sites.google.com/site/glrpgreatlittleradioplayer/
-* http://tunapie.sourceforge.net/
-* VLC also has a few directory discovery services built-in
-* Rythmbox comes with last.fm, libre.fm, radio lookups
+Running streamtuner2 requires Python and Gtk packages. Which nowadays are
+installed per default. There's a few more Python packages required though:
+
+ · python | python3
+ · pygtk | python-gi
+ · python-requests
+ · python-pyquery
+ · python-lxml
+ · python-imaging | pillow
+ · python-keybinder (optional)
+ · python-xdg (optional)
+
+Use your distro package manager with e.g.:
+
+  sudo apt-get install python python-gtk2 python-xdg python-requests ...
+
+Or utilize Pythons local package installer even:
+
+  sudo pip install requests
+  sudo pip install pyquery
+
+
+DEB / RPM
+---------
+
+There are rudimentary packages built as .DEB and .RPM version. Install
+those if feasible. The dependencies may not match with your package
+manager, and are somewhat incomplete. (See "Dependencies" section.)
+
+
+PYZ
+---
+
+Other users may wish to try the new Python archive (.PYZ) instead. Which
+requires little installation and can be run asis:
+
+    python streamtuner-2.1.5.pyz
+
+You could even make this Python ZIP executable, and copy it in your PATH.
+
+
+Manual installation
+-------------------
+
+If you've checked out the source code repository, or did download the
+*.src.txz archive, then you can just run it right there:
+
+   ./st2.py
+
+The easy way:
+
+  · Run `sudo make install`
+    which installs into the default location (/usr/share/streamtuner2).
+
+To install it manually:
+
+  · Create a /usr/share/streamtuner2/
+  · Copy all *.py files there.
+  · Also copy the "gtk3.xml" file into /usr/share/streamtuner2/
+  · Copy the channels/ subdir into /usr/share/streamtuner2/channels/
+  · Install "bin" as /usr/bin/streamtuner2.
+  · If you want to use another target, just edit the "bin" wrapper.
+  · Optionally copy the help/ folder to /usr/share/docs/streamtuner2/
+  · And the logo.png into the system pixmaps/,
+    as well as the *.desktop file into /usr/share/applications/
+
+That's pretty much what the binary packages extract to.
+
+
+Startup errors
+--------------
+
+If streamtuner2 hangs at startup, you can manually enable the
+debugging mode for more information.
 
+Open a terminal window to start it. And use the `-D` flag to
+enable extra output:
 
-Streamtuner2 CLI can also be used as proxy server for streamtuner1.
-There is a wrapper available. But there was nobody yet to be found who
-wanted it set up globally.
-It's available as st1proxy.tgz and cli-mode-only.tgz from
-http://milki.include-once.org/streamtuner2/ext/
-Contact me for setup help. Requires a webserver with unrestrained
-vhost support.
+   streamtuner2 -D
 
+Take note of any red error messages.
 
-license
+If it's just one channel plugin that hangs at startup, you
+can alternatively disable it once:
+
+   streamtuner2 -d xiph
+
+Start the settings dialog (via F12) and press [save] there
+if you wish to permanently disable it.
+
+You can also manually edit the configuration file, located
+in ~/.config/streamtuner2/settings.json
+
+
+Hacking
 -------
 
-Public Domain.
-(no rules: unrestricted copying, modification, distribution, etc.)
+If you want to edit a channel plugin, just have a look into the
+channels/*.py files. It's often rather easy to adapt things.
+
+Moreover you can also edit the user interface. You need glade
+installed, and open the "gtk3.xml" file. There it's easy to
+rename or rearrange things.
+
+Note that newer releases expect a compressed version of that
+ui description. Use `make glade` simply, or `make gtk3` to
+update the compressed version from the plain gtk.xml afterwards.
+
+
+Sources
+-------
+
+You'll find the current source files under 
+http://fossil.include-once.org/streamtuner2/
+
+That's a fossil DVCS repository. Which is miles easier to use than
+git. You can download the single binary from http://fossil-scm.org/
+or from your distro, then check out the repo:
+
+  fossil clone http://fossil.include-once.org/streamtuner2/ st2.fossil
+  fossil open st2.fossil
 
+Or browse the contents
 
-history
+  fossil ui
+
+Alternatively there are git and svn exports.
+
+  fossil export --svn
+
+Or via
+
+  http://fossil.include-once.org/streamtuner2/git-fast-export
+
+You can send in patches, a fossil bundle, or set up your cloned
+repo publically per `fossil cgi`. Else just create an account on
+fossil.include-once.org, and send a mail, so I can elevate that
+account to developer/commit/push permissions quickly. (Fossil
+repos don't break. So dealing out sync access is a no-brainer.)
+
+
+Alternatives
+------------
+
+See http://fossil.include-once.org/streamtuner2/wiki/alternatives
+for a list of recommended alternatives. Future ST2 versions will
+try to interface and share more with them.
+
+
+License
 -------
 
-2.1.3 (2014-08-15)
-- New plugin for Dirble.com introduced.
-- Channel tabs can now be rearranged from notebook top to left side.
-- Live365 was fixed again.
-- Xiph cache service was fixed, and duplicates are now filtered out.
-- Category map storage is now handled by backend instead of channels.
-- Shorter Youtube homepage URLs are used, HTTP headers compacted.
-
-
-2.1.2 (2014-07-31)
-- Listing from the renewed Radionomy Shoutcast has been fixed.
-- Live365 was disabled.
-- New iTunes Radio stations channel (via RoliSoft Radio Playlist API).
-- New channel module "iCast.io" as seen in VLC.
-- SurfMusic.de is now available in a localized English display.
-- Shorter Youtube URLs are now used, Wadsworth constant available.
-- MyOggRadio.org API interaction fixed.
-- Fixed cache search to copy results before overwriting category.
-- Slim new search dialog offers scanning all channels or just current.
-- More online music service links have been added.
-- Better post-extraction cleanup.
-
-2.1.1 (2014-05-28)
-- Added SurfMusik and Youtube plugin channels. Google/DMOZ removed.
-- Jamendo viewing now utilizes the v3.0 JSON API for genres/tracks
-  and uses cover images instead of favicons.
-- A new logo was introduced.
-- The reworked configuration dialog now provides editable lists for
-  player and recording apps configuration, a more descriptive options
-  pane, a better overview for enabled and available plugins (with fresh
-  meta comment blocks), and dropdowns instead of text-fields are used.
-- Internet-Radio parsing was fixed, a workaround for absent titles
-  added. Shoutcast also alternates between DOM and Regex fetching.
-- For Xiph browsing a custom caching API was introduced.
-- Status bar / download progress display was fixed.
-- A history plugin was added. And extension hooks{} support started.
-- Some more Python3 fixes applied. Documentation was adapted.
-
-2.1.0 (2014-01-05)
-- support for running on Python3 or Python2,
-  as well as Gtk3 (PyGI) and Gtk2 (PyGtk with Python2) bindings
-- fixed Shoutcast, DMOZ, Live365
-- while Jamendo now lists radios only
-- removal of basic.ch and tv channels
-- include requests+urllib3 in favour of urllib+urllib2
-- some manual pages have been updated
-- drop PSON and only use plain json module henceforth
-- new bundle/ directory, but pyquery/lxml dropped
-- colorized debugging output
-- uninitialized channels are no longer attached as tabs
-- absent liststore references have finally been fixed
-
-2.0.9
-- sys.path patch (less py module conflicts) from Stefan Talpalaru
-- fixed main_quit signal slot, so window size saving works
-- added [new] button in streamedit window
-- prepared remaining print syntax for python3 (still needs 2to3 though)
-- fix for https://bugzilla.redhat.com/show_bug.cgi?id=655596 array error
-- transitioned glade file to gtk.Builder, just a few things broke
-- made configuration window resizable
-- locked station list columns, no longer resortable (associatation mismatch)
-- applied Vincents fixed for Windows action.run and Shoutcast PQ parsing
-- live365 parsing restored by patch from Abhisek Sanyal
-- fix Pixbuf typecasing in mygtk liststore appending
-
-2.0.8
-- configuration files use prettified json
-- fixed double quotation for %pls players and /local/file handling
-- (unused) channel .shutdown function introduced (late saving)
-- external plugin: basic file browser, no ID3 editing yet
-- allow interpolating of %genre and other fields, streamripper wrapper
-- fixed pyQuery parsing for latest shoutcast change
-  (strangely the regular expressions were still working)
-
-2.0.7
-- json cache files are now stored .gz compressed
-- xiph channel .format() call fixed into .mime_fmt()
-- simplified __init__ and attributes of main window object
-- .play() is now a per-channel function
-- global_key now accepts multiple keys, updates gtk view
-- new musicgoal plugin with radios and podcasts
-- silenced channel initialization errors
-- double clicking tabs is functioning now (-> channel service homepage)
-- shoutcast finally became a real channel plugin
-- processing.py pseudo module removed
-
-2.0.6
-- mirrored Station>Extensions menu into stream context menu
-- creation of .nobackup files in cache/ and icons/ directories
-- global_key plugin allows radio switching via keyboard shortcut
-- compound channel plugin is new, mixes different source channels
-- new external plugin: podspider
-- more documentation restructuring
-- feature plugins` options are now listed in configuration dialog
-- current_channel_gtk()
-- added basic package dependencies for .deb archives,
-  packaged-in lxml/ removed (lacked etree.so anyway)
-- TV plugin for shoutcast video listings
-- simpler overriding of stream column titles is now possible
-- cleaner .src.tgz package, contrib/ files have been externalized
-- minor fix for quicksearch function
-
-2.0.5
-- display logic now can extract homepage URLs from station titles
-- automated google search for missing station homepages
-- kept .m3u files are reused for playing (faster)
-- registration code for (stations) extension submenu
-- timer plugin for programming broadcast play/recordings, uses kronos
-- heuristic update of bookmarks when reloading station lists
-- general thread() wrapper function implemented, for worker pool
-- simple mygtk wrapper for adding menu entries
-- MyOggRadio plugin is now complete, can upload individual favourites
-- links plugin, which lists other radio directories in bookmarks tab
-- CLI mode implemented
-- two PHP wrapper scripts to generate YP.Shoutcast for Streamtuner1
-- GUI startup progress window added
-- one GtkWarning message fixed
-- the Shoutcast channel was plugin-ed out, but remains in the UI file
-- multiple additions to and restructuring of the help files, manpage
-
-2.0.4
-- PyQuery parsing for InternetRadio.org.uk channel, and adapted PQ
-  usage for shoutcast
-- utility function http.fix_url extended, common string parsing
-  functions strip_tags, mime_fmt are now in channels.GenericChannel
-- http module reworked, visual feedback now for GET and AJAX methods,
-  and CookieJar was enabled
-- channel/tab order can now be configured (instead of tab dragging)
-- fixed PyQuery wrapper module, packaged lxml modules in (evades
-  extra support for Windows port, native modules will be used on Linux)
-- more Gtk.Widget mini help popups in the dialog windows
-
-2.0.3
-- new channel plugin: MyOggRadio (an open source directory)
-- also Internet-Radio.org.uk channel, but only regex parsing for now
-- the quick search box is now in the toolbar, while an all-scanning
-  search feature has been implemented in the former dialog
-- Shoutcast.com broke regex parsing, the homepage links are gone
-- Category updates are now performed in a thread too
-- interna: GenericChannel.display() is now .prepare()
-- live365 category parsing fixed
-- Live365 and Xiph are no longer built-in tabs, can be fully disabled
-- fixed disabling search, config, streamedit windows (gtk close event)
-- and a few help files were added
-
-2.0.2
-- more checks for initializing channel plugins
-- gtkrc theming support extended: apply and combobox in config dialog
-- PyQuery as new alternative parsing mechanism, as option for shoutcast
-- category tree gets loaded on first display of empty channels
-- windows port tested, new external project: python+gtk installer bundle
-- removal of .pyc bytecode files from generic .deb and .rpm packages
-- distribution includes gtkrc theme "MountainDew"
-- removed most debug print statements, introduced a config option for it
-
-2.0.1
-- new channel plugin: jamendo (just a simple browser for now)
-- new channel plugin: basicch (all new, because old scraper nonfunc)
-- new channel plugin: punkcast (just a very basic listing)
-- fixed shoutcast channel parsing
-- new elaborate http.ajax method using braindamaged urllib2
-- extremely cool plugin configuration scheme implented w/ GUI controls
-- plugins (except code or glade built-in) now deactivatable individually
-- preliminary support for application themes
-- support for per-channel .play() method
-- reenabled audioformat= in play calls
-- channeltab doubleclick doesn't work despite hours of fruitless trying
-- add "format" to stream edit dialog
-- new helper methods: mygtk.bg(), config.get()
-
-2.0.0
-- search function implemented, highlights results in current category list
-- right click context menu added
-- station data inspection/editor added
-- auto_save_appstate implemented
-- station delete implemented
-- clean up of internal application interfaces: new self.channel() instead
-  of self.c[self.cc] kludges all around (all traces rm), and new self.row(),
-  and some auxiliary windows now have handling code in separate classes
-- now real favicons for directory providers are displayed
-- removed directory service homepage button (still in menu), donated icon
-  to stations instead; double-click on channel tab still resultless
-- load_favicon hook (for currently playing station) added
-- added channel switching to menu, and submenu view merged into edit
-- fixed initialisation of open channel tab (previously only default
-  shoutcast was populated by .first_show method)
-- made a new logo for 2.0.0 release
-- fixed shoutcast category loading
-
-
-1.9.9-2
-- bookmark handling fixed
-- pson/json decoding still flaky
-
-1.9.9
-- fixed record action
-- shoutcast parser redone twice
-- rebuilding of TreeView list more robust noew, always in gobject.idle()
-- favicon downloading methods implemented, display enabled per default
-- live365 is buggy, but usable
-- bookmarks still broken
-
-1.9.8
-- save-as dialog implemented (export to .m3u, .pls or .xspf)
-- download progress bar added
-- last selected category and stream entry is remembered in all channel
-  tabs now (though the implementation is spread between a separate but
-  unused state.json and mygtk.app_state() which stores notext indexes)
-- menu edit/copy implemented: saves current stream URL into clipboard
-- fixed XDG_CONFIG_HOME use
-- code parts have been extracted into separate modules
-- the Google stations plugin has been ported from streamtuner1
-- packaging of .deb and .rpm archives
-
-1.9.7
-- configuration window added
-- threading support enabled (uses python 2.6 processing if avail)
-- more generic window/state saving
-- update_categories() added in menu
-- "generic" class for channels has been separated from shoutcast
-- new channel module "live365" (without login support)
-- bookmarks module has comments now
-- new defaults for audio/ogg and other media types
-- pseudo-json is now a fallback if python 2.6 module isn't there
-- preparations for saner url extraction in action. class
-- better doc for mygtk.columns()
-- (temp.) faster initial startup by not .load()ing default category
-
-1.9.6
-- added xiph.org example implementation, incomplete
-- bookmark module basics done
-- rowmap defined manually again, instead of in mygtk.
-
-1.9.5
-- basic menu added, toolbar style switching
-- glade XML file is searched in binary dir
-- static classes move to bottom
-- forgotten/deleted streams feature added 
-- display() filter
-
-1.9.4
-- category change
-- app_state
-- mygtk.column_view() and .column_data() have been merged into
-  more general mygtk.columns() - more elaborate, only depends on
-  datamap, instead of individual sublists, pixbuf support added
-- shoutcast.rowtypes cellmap titles colsizes cellrendr colattrs gone
-
-1.9.3
-- thread for http GET (doesn't work)
-- app_restore added
-- action.record, browse, homepage stream / channel, .reload streams
-- .status() shortuct
-- dict2list removed (now in .columns_view)
-- treeviewcolumns sizes
-- simplified form of datamap, less dicts, more lists, reshuffled
-- http. wrapper class
-- action. with actual os.system() call
-
-1.9.2
-- action.play(), .m3u
-- pseudojson instead of pickle in Config class
-- more doc on top
-- icons in column_view() for category trees
-- fix for [format] regex in shoutcast
-- mime defaults for action. module in conf
-. .pls and .m3u methods in action.
-
-1.9.1
-- first real shoutcast server scans
-- ??
-- ..
-- cache stream lists + category names
-
-1.9.0
-- first GUI implementation with standard glade
-- at least shoutcast category names were read
-
- 
+Public Domain. (Unrestricted copying, modification, etc.)
+
+If you wish you could thus redistribute it under a BSD/MIT
+or even GNU-style license.
+
diff --git a/_pack b/_pack
deleted file mode 100755
index f02e9f9..0000000
--- a/_pack
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-#-- meta data
-VERSION=$(version --get:plugin st2.py --write:rpmspec _package.epm --write:python st2.py)
-
-
-echo "------------------ source .txz ------------------"
-cd ..
-pax -wvJf streamtuner2-$VERSION.src.txz \
-	streamtuner2/*.py streamtuner2/*.xml streamtuner2/channels/*.{py,png} \
-	streamtuner2/*.png streamtuner2/*.svg streamtuner2/*.desktop \
-	streamtuner2/README streamtuner2/help/* streamtuner2/contrib/* \
-	streamtuner2/bundle/* streamtuner2/bundle/*/* streamtuner2/bundle/*/*/* streamtuner2/bundle/*/*/*/* \
-	streamtuner2/PKG-INFO streamtuner2/version streamtuner2/_pack streamtuner2/*.epm
-# streamtuner2/scripts
-cd -
-mv ../streamtuner2-*.txz linux-3.0-all/
-
-
-echo "-------------------- .deb -----------------------"
-fakeroot epm -vvv -n -a all -f deb DEP=deb streamtuner2 _package.epm
-dpkg-sig -s builder -k include-once linux-3.0-all/streamtuner2-$VERSION.deb
-
-
-####echo "------------------ slackware --------------------"
-####epm -vvv -n -a all -f slackware streamtuner2 _package.epm
-
-
-echo "-------------- .tar.gz installer  ---------------"
-epm -vvv -n -a all -f portable -s streamtuner2.png streamtuner2 _package.epm
-mv linux-3.0-all/streamtuner2-$VERSION.tar.gz linux-3.0-all/streamtuner2-$VERSION.bin.tgz
-
-
-echo "-------------------- .rpm -----------------------"
-epm -vvv -n -a all -f rpm streamtuner2 _package.epm
-mkdir linux-3.0-all/BUILD
-/usr/bin/rpmbuild -bb --buildroot $(pwd)/linux-3.0-all/buildroot --target all linux-3.0-all/streamtuner2.spec
-mv linux-3.0-all/RPMS/all/*.rpm linux-3.0-all/streamtuner2-$VERSION.rpm
-rm -r linux-3.0-all/BUILD
-rm -r linux-3.0-all/RPMS
-rm -r linux-3.0-all/rpms
-#rm -r linux-3.0-all/buildroot
-rmdir linux-3.0-all/streamtuner2-$VERSION
-rm linux-3.0-all/streamtuner2.spec
-
-
-echo "-------------------- win32 -----------------------"
-for pkg in "win32"
-do
-  epm-win32sfx -v streamtuner2 _package.epm
-done
-mv win32/*exe linux-3.0-all/
-rmdir win32
-
diff --git a/_package.epm b/_package.epm
deleted file mode 100644
index 4e740f2..0000000
--- a/_package.epm
+++ /dev/null
@@ -1,239 +0,0 @@
-%product streamtuner2 - internet radio browser
-%version 2.1.3
-%vendor Mario Salzer
-%license
-%copyright Placed into the Public Domain, 2009-2014
-%readme README
-
-%description Browser for Internet Radio Stations
-%description   .
-%description   streamtuner2 is a browser for radio station directories.
-%description   It can fetch lists from SHOUTcast, Xiph.org, Live365,
-%description   Jamendo, DMOZ, basic.ch, Punkcast. And it lists stream
-%description   entries by category or genre. It reuses existing audio
-%description   players, and recording is delegated to streamripper.
-%description   .
-%description   It mimics the original streamtuner 0.99.99, but is easier
-%description   to extend because it's written entirely in Python. It's
-%description   already in a stable and useable form.
-%description   .
-%description   There is no license to accept. Streamtuner2 is open source
-%description   and released into the Public Domain.
-
-
-%system all
-#-- base
-f 644 root root /usr/share/doc/streamtuner2/README		./README
-d 755 root root /usr/share/doc/streamtuner2/contrib		-
-f 644 root root /usr/share/doc/streamtuner2/contrib/streamripper_addgenre		./contrib/streamripper_addgenre
-f 755 root root /usr/bin/streamtuner2				./st2.py
-f 644 root root /usr/share/applications/streamtuner2.desktop	./streamtuner2.desktop
-d 755 root root /usr/share/streamtuner2				-
-f 644 root root /usr/share/streamtuner2/streamtuner2.png	./streamtuner2.png
-f 644 root root /usr/share/pixmaps/streamtuner2.png		./logo.png
-f 644 root root /usr/share/streamtuner2/gtk2.xml		./gtk2.xml
-f 644 root root /usr/share/streamtuner2/gtk3.xml		./gtk3.xml
-#f 644 root root /usr/share/streamtuner2/pson.py		./pson.py
-#f 644 root root /usr/share/streamtuner2/processing.py		./processing.py
-f 644 root root /usr/share/streamtuner2/compat2and3.py		./compat2and3.py
-f 644 root root /usr/share/streamtuner2/action.py		./action.py
-f 644 root root /usr/share/streamtuner2/config.py		./config.py
-f 644 root root /usr/share/streamtuner2/ahttp.py		./ahttp.py
-f 644 root root /usr/share/streamtuner2/cli.py			./cli.py
-f 644 root root /usr/share/streamtuner2/mygtk.py		./mygtk.py
-f 644 root root /usr/share/streamtuner2/favicon.py		./favicon.py
-f 644 root root /usr/share/streamtuner2/pq.py			./pq.py
-#-- channels
-d 755 root root /usr/share/streamtuner2/channels		-
-f 644 root root /usr/share/streamtuner2/channels/__init__.py	./channels/__init__.py
-f 644 root root /usr/share/streamtuner2/channels/_generic.py	./channels/_generic.py
-f 644 root root /usr/share/streamtuner2/channels/dirble.py 	./channels/dirble.py
-f 644 root root /usr/share/streamtuner2/channels/dirble.png 	./channels/dirble.png
-f 644 root root /usr/share/streamtuner2/channels/icast.py 	./channels/icast.py
-f 644 root root /usr/share/streamtuner2/channels/icast.png 	./channels/icast.png
-f 644 root root /usr/share/streamtuner2/channels/internet_radio.py ./channels/internet_radio.py
-f 644 root root /usr/share/streamtuner2/channels/internet_radio.png ./channels/internet_radio.png
-f 644 root root /usr/share/streamtuner2/channels/itunes.py 	./channels/itunes.py
-f 644 root root /usr/share/streamtuner2/channels/itunes.png 	./channels/itunes.png
-f 644 root root /usr/share/streamtuner2/channels/jamendo.py 	./channels/jamendo.py
-f 644 root root /usr/share/streamtuner2/channels/jamendo.png 	./channels/jamendo.png
-f 644 root root /usr/share/streamtuner2/channels/live365.py	./channels/live365.py
-f 644 root root /usr/share/streamtuner2/channels/live365.png 	./channels/live365.png
-f 644 root root /usr/share/streamtuner2/channels/modarchive.py 	./channels/modarchive.py
-f 644 root root /usr/share/streamtuner2/channels/modarchive.png	./channels/modarchive.png
-f 644 root root /usr/share/streamtuner2/channels/musicgoal.py 	./channels/musicgoal.py
-f 644 root root /usr/share/streamtuner2/channels/musicgoal.png	./channels/musicgoal.png
-f 644 root root /usr/share/streamtuner2/channels/myoggradio.py 	./channels/myoggradio.py
-f 644 root root /usr/share/streamtuner2/channels/myoggradio.png	./channels/myoggradio.png
-f 644 root root /usr/share/streamtuner2/channels/punkcast.py	./channels/punkcast.py
-f 644 root root /usr/share/streamtuner2/channels/punkcast.png	./channels/punkcast.png
-f 644 root root /usr/share/streamtuner2/channels/shoutcast.py 	./channels/shoutcast.py
-f 644 root root /usr/share/streamtuner2/channels/shoutcast.png 	./channels/shoutcast.png
-f 644 root root /usr/share/streamtuner2/channels/surfmusik.py	./channels/surfmusik.py
-f 644 root root /usr/share/streamtuner2/channels/surfmusik.png	./channels/surfmusik.png
-f 644 root root /usr/share/streamtuner2/channels/xiph.py	./channels/xiph.py
-f 644 root root /usr/share/streamtuner2/channels/xiph.png 	./channels/xiph.png
-f 644 root root /usr/share/streamtuner2/channels/youtube.py	./channels/youtube.py
-f 644 root root /usr/share/streamtuner2/channels/youtube.png	./channels/youtube.png
-f 644 root root /usr/share/streamtuner2/channels/global_key.py 	./channels/global_key.py
-f 644 root root /usr/share/streamtuner2/channels/links.py 	./channels/links.py
-f 644 root root /usr/share/streamtuner2/channels/timer.py 	./channels/timer.py
-#-- scripts
-#d 755 root root /usr/share/streamtuner2/scripts		-
-#f 644 root root /usr/share/streamtuner2/scripts/radiotop40_de.py  ./scripts/radiotop40_de.py
-#-- help files
-f 644 root root /usr/share/man/man1/streamtuner2.1		 	 ./help/streamtuner2.1
-d 755 root root /usr/share/doc/streamtuner2/help 			-
-f 644 root root /usr/share/doc/streamtuner2/help/action_homepage.page 	 ./help/action_homepage.page
-f 644 root root /usr/share/doc/streamtuner2/help/action_playing.page 	 ./help/action_playing.page
-f 644 root root /usr/share/doc/streamtuner2/help/action_recording.page 	 ./help/action_recording.page
-f 644 root root /usr/share/doc/streamtuner2/help/action_saving.page 	 ./help/action_saving.page
-f 644 root root /usr/share/doc/streamtuner2/help/channel_bookmarks.page 	 ./help/channel_bookmarks.page
-f 644 root root /usr/share/doc/streamtuner2/help/channel_internetradioorguk.page 	 ./help/channel_internetradioorguk.page
-f 644 root root /usr/share/doc/streamtuner2/help/channel_jamendo.page 	 ./help/channel_jamendo.page
-f 644 root root /usr/share/doc/streamtuner2/help/channel_myoggradio.page 	 ./help/channel_myoggradio.page
-f 644 root root /usr/share/doc/streamtuner2/help/channel_shoutcast.page 	 ./help/channel_shoutcast.page
-f 644 root root /usr/share/doc/streamtuner2/help/channel_xiph.page 	 ./help/channel_xiph.page
-f 644 root root /usr/share/doc/streamtuner2/help/channel_youtube.page 	 ./help/channel_youtube.page
-f 644 root root /usr/share/doc/streamtuner2/help/channel_surfmusik.page 	 ./help/channel_surfmusik.page
-f 644 root root /usr/share/doc/streamtuner2/help/channels.page 	 ./help/channels.page
-f 644 root root /usr/share/doc/streamtuner2/help/cli.page 	 ./help/cli.page
-f 644 root root /usr/share/doc/streamtuner2/help/config_apps.page 	 ./help/config_apps.page
-f 644 root root /usr/share/doc/streamtuner2/help/configuration.page 	 ./help/configuration.page
-f 644 root root /usr/share/doc/streamtuner2/help/extending.page 	 ./help/extending.page
-f 644 root root /usr/share/doc/streamtuner2/help/global_key.page 	 ./help/global_key.page
-f 644 root root /usr/share/doc/streamtuner2/help/glossary.page 	 ./help/glossary.page
-f 644 root root /usr/share/doc/streamtuner2/help/glossary_json.page 	 ./help/glossary_json.page
-f 644 root root /usr/share/doc/streamtuner2/help/glossary_m3u.page 	 ./help/glossary_m3u.page
-f 644 root root /usr/share/doc/streamtuner2/help/glossary_pls.page 	 ./help/glossary_pls.page
-f 644 root root /usr/share/doc/streamtuner2/help/guiseq 	 ./help/guiseq
-f 644 root root /usr/share/doc/streamtuner2/help/index.page 	 ./help/index.page
-f 644 root root /usr/share/doc/streamtuner2/help/introduction.page 	 ./help/introduction.page
-f 644 root root /usr/share/doc/streamtuner2/help/reloading.page 	 ./help/reloading.page
-f 644 root root /usr/share/doc/streamtuner2/help/search.page 	 ./help/search.page
-f 644 root root /usr/share/doc/streamtuner2/help/streams.page 	 ./help/streams.page
-f 644 root root /usr/share/doc/streamtuner2/help/technical.page 	 ./help/technical.page
-f 644 root root /usr/share/doc/streamtuner2/help/timer.page 	 ./help/timer.page
-d 755 root root /usr/share/doc/streamtuner2/help/img 			-
-f 644 root root /usr/share/doc/streamtuner2/help/img/categories.png 	 ./help/img/categories.png
-f 644 root root /usr/share/doc/streamtuner2/help/img/channels.png 	 ./help/img/channels.png
-f 644 root root /usr/share/doc/streamtuner2/help/img/logo.png 	 ./help/img/logo.png
-f 644 root root /usr/share/doc/streamtuner2/help/img/mainwindow2.svg 	 ./help/img/mainwindow2.svg
-f 644 root root /usr/share/doc/streamtuner2/help/img/streams.png 	 ./help/img/streams.png
-#-- bundled libs
-f 644 root root /usr/share/streamtuner2/bundle/kronos.py	./bundle/kronos.py
-#-- requests
-f 644 root root /usr/share/streamtuner2/bundle/requests/models.py 	 ./bundle/requests/models.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/api.py 	 ./bundle/requests/api.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/cookies.py 	 ./bundle/requests/cookies.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/urllib3/fields.py 	 ./bundle/requests/packages/urllib3/fields.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/urllib3/contrib/ntlmpool.py 	 ./bundle/requests/packages/urllib3/contrib/ntlmpool.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/urllib3/contrib/pyopenssl.py 	 ./bundle/requests/packages/urllib3/contrib/pyopenssl.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/urllib3/contrib/__init__.py 	 ./bundle/requests/packages/urllib3/contrib/__init__.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/urllib3/packages/ordered_dict.py 	 ./bundle/requests/packages/urllib3/packages/ordered_dict.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/urllib3/packages/six.py 	 ./bundle/requests/packages/urllib3/packages/six.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/urllib3/packages/ssl_match_hostname/__init__.py 	 ./bundle/requests/packages/urllib3/packages/ssl_match_hostname/__init__.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.py 	 ./bundle/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/urllib3/packages/__init__.py 	 ./bundle/requests/packages/urllib3/packages/__init__.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/urllib3/connection.py 	 ./bundle/requests/packages/urllib3/connection.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/urllib3/response.py 	 ./bundle/requests/packages/urllib3/response.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/urllib3/exceptions.py 	 ./bundle/requests/packages/urllib3/exceptions.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/urllib3/filepost.py 	 ./bundle/requests/packages/urllib3/filepost.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/urllib3/connectionpool.py 	 ./bundle/requests/packages/urllib3/connectionpool.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/urllib3/_collections.py 	 ./bundle/requests/packages/urllib3/_collections.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/urllib3/poolmanager.py 	 ./bundle/requests/packages/urllib3/poolmanager.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/urllib3/__init__.py 	 ./bundle/requests/packages/urllib3/__init__.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/urllib3/request.py 	 ./bundle/requests/packages/urllib3/request.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/urllib3/util/timeout.py 	 ./bundle/requests/packages/urllib3/util/timeout.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/urllib3/util/url.py 	 ./bundle/requests/packages/urllib3/util/url.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/urllib3/util/ssl_.py 	 ./bundle/requests/packages/urllib3/util/ssl_.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/urllib3/util/connection.py 	 ./bundle/requests/packages/urllib3/util/connection.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/urllib3/util/response.py 	 ./bundle/requests/packages/urllib3/util/response.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/urllib3/util/__init__.py 	 ./bundle/requests/packages/urllib3/util/__init__.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/urllib3/util/request.py 	 ./bundle/requests/packages/urllib3/util/request.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/langbulgarianmodel.py 	 ./bundle/requests/packages/chardet/langbulgarianmodel.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/langhungarianmodel.py 	 ./bundle/requests/packages/chardet/langhungarianmodel.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/mbcharsetprober.py 	 ./bundle/requests/packages/chardet/mbcharsetprober.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/jisfreq.py 	 ./bundle/requests/packages/chardet/jisfreq.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/langhebrewmodel.py 	 ./bundle/requests/packages/chardet/langhebrewmodel.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/sjisprober.py 	 ./bundle/requests/packages/chardet/sjisprober.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/constants.py 	 ./bundle/requests/packages/chardet/constants.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/jpcntx.py 	 ./bundle/requests/packages/chardet/jpcntx.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/sbcharsetprober.py 	 ./bundle/requests/packages/chardet/sbcharsetprober.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/sbcsgroupprober.py 	 ./bundle/requests/packages/chardet/sbcsgroupprober.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/utf8prober.py 	 ./bundle/requests/packages/chardet/utf8prober.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/euckrprober.py 	 ./bundle/requests/packages/chardet/euckrprober.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/mbcssm.py 	 ./bundle/requests/packages/chardet/mbcssm.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/cp949prober.py 	 ./bundle/requests/packages/chardet/cp949prober.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/escprober.py 	 ./bundle/requests/packages/chardet/escprober.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/chardetect.py 	 ./bundle/requests/packages/chardet/chardetect.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/gb2312prober.py 	 ./bundle/requests/packages/chardet/gb2312prober.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/codingstatemachine.py 	 ./bundle/requests/packages/chardet/codingstatemachine.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/big5prober.py 	 ./bundle/requests/packages/chardet/big5prober.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/eucjpprober.py 	 ./bundle/requests/packages/chardet/eucjpprober.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/hebrewprober.py 	 ./bundle/requests/packages/chardet/hebrewprober.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/charsetprober.py 	 ./bundle/requests/packages/chardet/charsetprober.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/latin1prober.py 	 ./bundle/requests/packages/chardet/latin1prober.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/charsetgroupprober.py 	 ./bundle/requests/packages/chardet/charsetgroupprober.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/universaldetector.py 	 ./bundle/requests/packages/chardet/universaldetector.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/mbcsgroupprober.py 	 ./bundle/requests/packages/chardet/mbcsgroupprober.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/escsm.py 	 ./bundle/requests/packages/chardet/escsm.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/euctwprober.py 	 ./bundle/requests/packages/chardet/euctwprober.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/euckrfreq.py 	 ./bundle/requests/packages/chardet/euckrfreq.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/big5freq.py 	 ./bundle/requests/packages/chardet/big5freq.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/compat.py 	 ./bundle/requests/packages/chardet/compat.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/langcyrillicmodel.py 	 ./bundle/requests/packages/chardet/langcyrillicmodel.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/langthaimodel.py 	 ./bundle/requests/packages/chardet/langthaimodel.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/euctwfreq.py 	 ./bundle/requests/packages/chardet/euctwfreq.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/__init__.py 	 ./bundle/requests/packages/chardet/__init__.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/langgreekmodel.py 	 ./bundle/requests/packages/chardet/langgreekmodel.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/gb2312freq.py 	 ./bundle/requests/packages/chardet/gb2312freq.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/chardet/chardistribution.py 	 ./bundle/requests/packages/chardet/chardistribution.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/README.rst 	 ./bundle/requests/packages/README.rst
-f 644 root root /usr/share/streamtuner2/bundle/requests/packages/__init__.py 	 ./bundle/requests/packages/__init__.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/adapters.py 	 ./bundle/requests/adapters.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/utils.py 	 ./bundle/requests/utils.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/structures.py 	 ./bundle/requests/structures.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/cacert.pem 	 ./bundle/requests/cacert.pem
-f 644 root root /usr/share/streamtuner2/bundle/requests/exceptions.py 	 ./bundle/requests/exceptions.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/auth.py 	 ./bundle/requests/auth.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/certs.py 	 ./bundle/requests/certs.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/sessions.py 	 ./bundle/requests/sessions.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/status_codes.py 	 ./bundle/requests/status_codes.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/hooks.py 	 ./bundle/requests/hooks.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/compat.py 	 ./bundle/requests/compat.py
-f 644 root root /usr/share/streamtuner2/bundle/requests/__init__.py 	 ./bundle/requests/__init__.py
-
-
-#-- windows
-%system win32
-%description  Windows version gets no love, nor support.
-%description  It requires manual installation of Python 2.6 and Gtk+ and Pygtk.org libraries first.
-f 644 root root /usr/bin/streamtuner2.lnk			./streamtuner2.lnk
-f 644 root root /usr/share/applications/streamtuner2.lnk	./streamtuner2.lnk
-%shortcut $desktop$\streamtuner2.lnk|/usr/share/applications/streamtuner2.lnk
-%homepage http://streamtuner2.sourceforge.net/
-
-
-
-
-#-- distribution specific dependency rules
-%system all
-%requires python
-
-%format deb
-%requires python-lxml
-%requires python-imaging
-%requires python-pyquery
-%requires python-keybinder
-%requires python-gtk2
-# %requires python-glade2
-# %requires python-httplib2
-# %requires python-json
-# %requires python-xdg
-# %requires python-xdgapp
-
-%format rpm
-%requires pygtk
-# %requires pyxdg
-# RPM package names are weirder, and there's no comprehensive list of them (Suse and Fedora depart anyway)
diff --git a/action.py b/action.py
index fa2701b..2af8767 100644
--- a/action.py
+++ b/action.py
@@ -1,286 +1,732 @@
-#
 # encoding: UTF-8
 # api: streamtuner2
 # type: functions
+# category: io
 # title: play/record actions
 # description: Starts audio applications, guesses MIME types for URLs
-# version: 0.7
-#
-#
-#  Multimedia interface for starting audio players, recording app,
-#  or web browser (listed as "url/http" association in players).
+# version: 1.1
+# priority: core
 #
+# Multimedia interface for starting audio players, recording app,
+# or web browser (listed as "url/http" association in players).
+# It maps audio MIME types, and extracts/converts playlist types
+# (PLS, M3U, XSPF, SMIL, JSPF, ASX, raw urls).
 #
-#  Each channel plugin has a .listtype which describes the linked
-#  audio playlist format. It's audio/x-scpls mostly, seldomly m3u,
-#  but sometimes url/direct if the entry[url] directly leads to the
-#  streaming server.
-#
-#  As fallback there is a regex which just looks for URLs in the
-#  given resource (works for m3u/pls/xspf/asx/...). There is no
-#  actual url "filename" extension guessing.
+# Each channel plugin has a .listtype which defines the linked
+# audio playlist format. It's "pls", seldomly "m3u", or "xspf".
+# Some channels list raw "srv" addresses, while Youtube "href"
+# entries point to Flash videos.
 #
+# As fallback the playlist URL is retrieved and its MIME type
+# checked, then its content regexped to guess the list format.
+# Lastly a playlist format suitable for audio players recreated.
+# Which is somewhat of a security feature; playlists get cleaned
+# up this way. The conversion is not strictly necessary, because
+# baseline PLS/M3U is understood by most players.
 #
+# And finally this module is also used by exporting and playlist
+# importing features (e.g. by the drag'n'drop module).
 #
+# Still needs some rewrites to transition off the [url] lists,
+# and work with full [rows] primarily. (And perhaps it should be
+# renamed to "playlist" module now).
 
 
 import re
 import os
-import ahttp as http
-from config import conf, __print__, dbg
 import platform
+import copy
+import json
+from datetime import datetime
+from xml.sax.saxutils import escape as xmlentities, unescape as xmlunescape
+
+import ahttp
+from config import *
 
 
+# Coupling to main window
+#
 main = None
 
 
-#-- media actions                           ---------------------------------------------
+# Streamlink/listformat mapping
+listfmt_t = {
+    "audio/x-scpls":        "pls",
+    "audio/x-mpegurl":      "m3u",
+    "audio/mpegurl":        "m3u",
+    "application/vnd.apple.mpegurl": "m3u",
+    "video/x-ms-asf":       "asx",
+    "application/xspf+xml": "xspf",
+    "*/*":                  "href",  # "href" for unknown responses
+    "url/direct":           "srv",
+    "url/youtube":          "href",
+    "url/http":             "href",
+    "audio/x-pn-realaudio": "ram",
+    "application/json":     "json",
+    "application/smil":     "smil",
+    "application/vnd.ms-wpl": "smil",
+    "audio/x-ms-wax":       "asx",
+    "video/x-ms-asf":       "asx",
+    "x-urn/st2-script":     "script",  # unused
+    "application/x-shockwave-flash": "href",  # fallback
+}
+
+# Audio type MIME map
+mediafmt_t = {
+    "audio/mpeg":   "mp3",
+    "audio/ogg":    "ogg",
+    "audio/aac":    "aac",
+    "audio/aacp":   "aac",
+    "audio/midi":   "midi",
+    "audio/mod":    "mod",
+    "audio/it+zip": "mod",
+    "audio/s3+zip": "mod",
+    "audio/xm+zip": "mod",
+}
+
+# Player command placeholders for playlist formats
+placeholder_map = dict(
+    pls = "(%url | %pls | %u | %l | %r) \\b",
+    m3u = "(%m3u | %f | %g | %m) \\b",
+    xspf= "(%xspf | %xpsf | %x) \\b",
+    jspf= "(%jspf | %j) \\b",
+    asx = "(%asx) \\b",
+    smil= "(%smil) \\b",
+    srv = "(%srv | %d | %s) \\b",
+)
+
+# Playlist format content probing (assert type)
+playlist_content_map = [
+   ("pls",  r""" (?i)\[playlist\].*NumberOfEntries """),
+   ("xspf", r""" <\?xml .* <playlist .* ((?i)http://xspf\.org)/ns/0/ """),
+   ("m3u",  r""" ^ \s* \#(EXT)?M3U """),
+   ("asx" , r""" (?i) <asx\b """),
+   ("smil", r""" <smil[^>]*> .* <seq> """),
+   ("html", r""" (?i)<(audio|video)\b[^>]+\bsrc\s*=\s*["']?https?:// """),
+   ("wpl",  r""" <\?wpl \s+ version="1\.0" \s* \?> """),
+   ("b4s",  r""" <WinampXML> """),   # http://gonze.com/playlists/playlist-format-survey.html
+   ("jspf", r""" ^ \s* \{ \s* "playlist": \s* \{ """),
+   ("asf",  r""" ^ \[Reference\] .*? ^Ref\d+= """),
+   ("url",  r""" ^ \[InternetShortcut\] .*? ^URL= """),
+("desktop", r""" ^ \[Desktop Entry\] .*? ^Link= """),
+   ("json", r""" "url": \s* "\w+:\\?/\\?/ """),
+   ("jamj", r""" "audio": \s* "\w+:\\?/\\?/ """),
+   ("gvp",  r""" ^gvp_version:1\.\d+$ """),
+   ("href", r""" .* """),
+]
+
+# Preferred probing order of known formats
+playlist_fmt_prio = [
+   "pls", "xspf", "asx", "smil", "jamj", "json", "m3u", "asf", "raw"
+]
+
+# custom stream domain (with faux audioformat) handlers
+handler = {
+    # "audio/soundcloud": callback(),
+}
+
+
+
+# Exec wrapper
+def run(cmd):
+    log.EXEC(cmd)
+    try:    os.system("start \"%s\"" % cmd if conf.windows else cmd + " &")
+    except: log.ERR("Command not found:", cmd)
+
+# Open help browser, streamtuner2 pages
+def help(*args):
+    run("yelp /usr/share/doc/streamtuner2/help/")
+
+# Invokes player/recorder for stream url and format
+def run_fmt_url(row={}, audioformat="audio/mpeg", source="pls", assoc={}):
+    if audioformat in handler:
+        handler[audioformat](row, audioformat, source, assoc)
+    else:
+        cmd = mime_app(audioformat, assoc)
+        cmd = interpol(cmd, source, row)
+        run(cmd)
+
+# Start web browser
+def browser(url):
+    run_fmt_url({"url": url, "homepage": url}, "url/http", "srv", conf.play)
+
+# Calls player for stream url and format
+def play(row={}, audioformat="audio/mpeg", source="pls"):
+    run_fmt_url(row, audioformat, source, conf.play)
+
+# Call streamripper / youtube-dl / wget
+def record(row={}, audioformat="audio/mpeg", source="href"):
+    run_fmt_url(row, audioformat, source, conf.record)
+
+
+# OS shell command escaping
 #
-# implements "play" and "record" methods,
-# but also "browser" for web URLs
-#        
-class action:
-
-        # streamlink formats
-        lt = {"asx":"video/x-ms-asf", "pls":"audio/x-scpls", "m3u":"audio/x-mpegurl", "xspf":"application/xspf+xml", "href":"url/http", "ram":"audio/x-pn-realaudio", "smil":"application/smil"}
-        # media formats
-        mf = {"mp3":"audio/mpeg", "ogg":"audio/ogg", "aac":"audio/aac"}
-        
-        
-        # web
-        @staticmethod
-        def browser(url):
-            bin = conf.play.get("url/http", "sensible-browser")
-            __print__( dbg.CONF, bin )
-            action.run(bin + " " + action.quote(url))
+def quote(ins):
+    if type(ins) is list:
+        return " ".join(["%r" % str(s) for s in ins])
+    else:
+        return "%r" % str(ins)
 
 
-            
-        # os shell cmd escaping
-        @staticmethod
-        def quote(s):
-            if conf.windows:
-                return str(s)   # should actually be "\\\"%s\\\"" % s
-            else:
-                return "%r" % str(s)
+# Convert e.g. "text/x-scpls" MIME types to just "pls" monikers
+#
+def listfmt(t = "pls"):
+    return listfmt_t.get(t, t) # e.g. "pls" or still "text/x-unknown"
 
 
-        # calls player for stream url and format
-        @staticmethod
-        def play(url, audioformat="audio/mpeg", listformat="text/x-href"):
-            if (url):
-                url = action.url(url, listformat)
-            if audioformat == "audio/mp3":
-                audioformat = "audio/mpeg"
-            cmd = action.mime_match(audioformat, conf.play)
-            try:
-                __print__( dbg.PROC, "play", url, cmd )
-                action.run( action.interpol(cmd, url) )
-            except:
-                pass
+# Convert MIME type into list of ["audio/xyz", "audio/*", "*/*"]
+# for comparison against configured record/play association.
+def mime_app(fmt, cmd_list):
+    major = fmt[:fmt.find("/")]
+    for match in [ fmt, major + "/*", "*/*", "video/*", "audio/*" ]:
+        if cmd_list.get(match):
+            return cmd_list[match]
+    log.ERR("No audio player for stream type found")
 
-        
-        # exec wrapper
-        @staticmethod
-        def run(cmd):
-            if conf.windows:
-                os.system("start \"%s\"")
-            else:
-                os.system(cmd + " &")
-
-
-        # streamripper
-        @staticmethod
-        def record(url, audioformat="audio/mpeg", listformat="text/x-href", append="", row={}):
-            __print__( dbg.PROC, "record", url )
-            cmd = action.mime_match(audioformat, conf.record)
-            try: action.run( action.interpol(cmd, url, row) + append )
-            except: pass
-
-
-        # Convert MIME type into list of ["audio/xyz", "audio/*", "*/*"] for comparison against record/play association
-        @staticmethod
-        def mime_match(fmt, cmd_list):
-            for match in [ fmt, fmt[:fmt.find("/")] + "/*", "*/*" ]:
-                if cmd_list.get(match, None):
-                    return cmd_list[match]
-
-
-        # save as .m3u
-        @staticmethod
-        def save(row, fn, listformat="audio/x-scpls"):
-            # modify stream url
-            row["url"] = action.url(row["url"], listformat)
-            stream_urls = action.extract_urls(row["url"], listformat)
-            # output format
-            if (re.search("\.m3u", fn)):
-                txt = "#M3U\n"
-                for url in stream_urls:
-                    txt += http.fix_url(url) + "\n"
-            # output format
-            elif (re.search("\.pls", fn)):
-                txt = "[playlist]\n" + "numberofentries=1\n"
-                for i,u in enumerate(stream_urls):
-                    i = str(i + 1)
-                    txt += "File"+i + "=" + u + "\n"
-                    txt += "Title"+i + "=" + row["title"] + "\n"
-                    txt += "Length"+i + "=-1\n"
-                txt += "Version=2\n"
-            # output format
-            elif (re.search("\.xspf", fn)):
-                txt = '<?xml version="1.0" encoding="UTF-8"?>' + "\n"
-                txt += '<?http header="Content-Type: application/xspf+xml" ?>' + "\n"
-                txt += '<playlist version="1" xmlns="http://xspf.org/ns/0/">' + "\n"
-                for attr,tag in [("title","title"), ("homepage","info"), ("playing","annotation"), ("description","annotation")]:
-                    if row.get(attr):
-                        txt += "  <"+tag+">" + xmlentities(row[attr]) + "</"+tag+">\n"
-                txt += "  <trackList>\n"
-                for u in stream_urls:
-                    txt += '	<track><location>' + xmlentities(u) + '</location></track>' + "\n"
-                txt += "  </trackList>\n</playlist>\n"
-            # output format
-            elif (re.search("\.json", fn)):
-                row["stream_urls"] = stream_urls
-                txt = str(row)   # pseudo-json (python format)
-            # output format
-            elif (re.search("\.asx", fn)):
-                txt = "<ASX version=\"3.0\">\n"			\
-                    + " <Title>" + xmlentities(row["title"]) + "</Title>\n"	\
-                    + " <Entry>\n"				\
-                    + "  <Title>" + xmlentities(row["title"]) + "</Title>\n"	\
-                    + "  <MoreInfo href=\"" + row["homepage"] + "\"/>\n"	\
-                    + "  <Ref href=\"" + stream_urls[0] + "\"/>\n"		\
-                    + " </Entry>\n</ASX>\n"
-            # output format
-            elif (re.search("\.smil", fn)):
-                txt = "<smil>\n<head>\n  <meta name=\"title\" content=\"" + xmlentities(row["title"]) + "\"/>\n</head>\n"	\
-                    + "<body>\n  <seq>\n    <audio src=\"" + stream_urls[0] + "\"/>\n  </seq>\n</body>\n</smil>\n"
-            # unknown
-            else:
-                txt = ""
-            # write
-            if txt:
-                f = open(fn, "wb")
-                f.write(txt)
-                f.close()
-            pass
-
-
-        # replaces instances of %u, %l, %pls with urls / %g, %f, %s, %m, %m3u or local filenames
-        @staticmethod
-        def interpol(cmd, url, row={}):
-            # inject other meta fields
-            if row:
-                for field in row:
-                    cmd = cmd.replace("%"+field, "%r" % row.get(field))
-            # add default if cmd has no %url placeholder
-            if cmd.find("%") < 0:
-                cmd = cmd + " %m3u"
-            # standard placeholders
-            if (re.search("%(url|pls|[ulr])", cmd)):
-                cmd = re.sub("%(url|pls|[ulr])", action.quote(url), cmd)
-            if (re.search("%(m3u|[fgm])", cmd)):
-                cmd = re.sub("%(m3u|[fgm])", action.quote(action.m3u(url)), cmd)
-            if (re.search("%(srv|[ds])", cmd)):
-                cmd = re.sub("%(srv|[ds])", action.quote(action.srv(url)), cmd)
-            return cmd
-
-
-        # eventually transforms internal URN/IRI to URL
-        @staticmethod
-        def url(url, listformat):
-            if (listformat == "audio/x-scpls"):
-                url = url
-            elif (listformat == "text/x-urn-streamtuner2-script"):
-                url = main.special.stream_url(url)
+
+
+# Replaces instances of %m3u, %pls, %srv in a command string
+# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+#  · Also understands short aliases %l, %f, %d.
+#  · And can embed %title or %genre placeholders.
+#  · Replace .pls URL with local .m3u file depending on map.
+#
+def interpol(cmd, source="pls", row={}):
+
+    # Inject other meta fields (%title, %genre, %playing, %format, etc.)
+    row = copy.copy(row)
+    for field in set(re.findall("%(\w+)", cmd)).intersection(row.keys()):
+        cmd = cmd.replace("%"+field, "%r" % row.get(field))
+
+    # Add default %pls if cmd has no %url placeholder
+    if cmd.find("%") < 0:
+        cmd = cmd + " %pls"
+        # "pls" as default requires no conversion for most channels, and seems broadly supported by players
+
+    # Playlist type placeholders (%pls, %m3u, %xspf, etc.)
+    for dest, rx in placeholder_map.items():
+        if re.search(rx, cmd, re.X):
+            # no conversion
+            if conf.playlist_asis:
+                url = row["url"]
+            # e.g. from .m3u to .pls
             else:
-                url = url
-            return url
+                url = convert_playlist(row["url"], listfmt(source), listfmt(dest), local_file=True, row=row)
+            # insert quoted URL/filepath
+            return re.sub(rx, quote(url), cmd, 2, re.X)
 
+    return "/bin/false"
+
+
+# Substitute streaming address with desired playlist format
+# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+# Converts input rows/urls, probes for playlist format, fetches them
+# and possibly converts remote .pls to local .m3u/.xpsf filename or
+# just returns direct "srv" urls.
+#
+#  · Takes a single input `url` (and original row{} as template).
+#  · But returns a list of [urls] after playlist extraction.
+#  · If repackaging as .m3u/.pls/.xspf, returns the local [fn].
+#
+def convert_playlist(url, source, dest, local_file=True, row={}):
+    urls = []
+    log.PROC("convert_playlist(", url, source, dest, ")")
+
+    # Leave alone if format matches, or if already "srv" URL, or if not http (local path, mms:/rtsp:)
+    if source == dest or source in ("srv", "href") or not re.match("(https?|spdy)://", url):
+        return [url]
+
+    # Reuse tempoary files?
+    if local_file and conf.reuse_m3u and os.path.exists(tmp_fn(row, dest)):
+        log.STAT("reuse temporary filename")
+        return [tmp_fn(row, dest)]
+    
+    # Retrieve from URL
+    (mime, cnt) = http_probe_get(url)
+    
+    # Leave streaming server as is
+    if mime == "srv":
+        cnt = ""
+        return [url]
+
+    # Deduce likely content format
+    cnv = extract_playlist(cnt)
+    ext = cnv.probe_ext(url)
+    probe = cnv.probe_fmt()
+
+    # Check ambiguity (except pseudo extension)
+    if len(set([source, mime, probe])) > 1:
+        log.WARN("Possible playlist format mismatch:", "listformat={}, http_mime={}, rx_probe={}, ext={}".format(source, mime, probe, ext))
+#        log.DATA(cnt)
+
+    # Extract URLs from content
+    for fmt in playlist_fmt_prio:
+        if not urls and fmt in (source, mime, probe, ext, "raw"):
+            urls = cnv.urls(fmt)
+            urls = filter(None, urls)
+            log.DATA("conversion from:", source, " with extractor:", fmt, "got URLs=", urls)
             
-        # download a .pls resource and extract urls
-        @staticmethod
-        def pls(url):
-            text = http.get(url)
-            __print__( dbg.DATA, "pls_text=", text )
-            return re.findall("\s*File\d*\s*=\s*(\w+://[^\s]+)", text, re.I)
-            # currently misses out on the titles            
-            
-        # get a single direct ICY stream url (extract either from PLS or M3U)
-        @staticmethod
-        def srv(url):
-            return action.extract_urls(url)[0]
-
-
-        # retrieve real stream urls from .pls or .m3u links
-        @staticmethod
-        def extract_urls(pls, listformat="__not_used_yet__"):
-            # extract stream address from .pls URL
-            if (re.search("\.pls", pls)):       #audio/x-scpls
-                return action.pls(pls)
-            elif (re.search("\.asx", pls)):	#video/x-ms-asf
-                return re.findall("<Ref\s+href=\"(http://.+?)\"", http.get(pls))
-            elif (re.search("\.m3u|\.ram|\.smil", pls)):	#audio/x-mpegurl
-                return re.findall("(http://[^\s]+)", http.get(pls), re.I)
-            else:  # just assume it was a direct mpeg/ogg streamserver link
-                return [ (pls if pls.startswith("/") else http.fix_url(pls)) ]
-            pass
-
-
-        # generate filename for temporary .m3u, if possible with unique id
-        @staticmethod
-        def tmp_fn(pls):
-            # use shoutcast unique stream id if available
-            stream_id = re.search("http://.+?/.*?(\d+)", pls, re.M)
-            stream_id = stream_id and stream_id.group(1) or "XXXXXX"
-            try:
-                channelname = main.current_channel
-            except:
-                channelname = "unknown"
-            return (str(conf.tmp) + os.sep + "streamtuner2."+channelname+"."+stream_id+".m3u", len(stream_id) > 3 and stream_id != "XXXXXX")
-        
-        # check if there are any urls in a given file
-        @staticmethod
-        def has_urls(tmp_fn):
-            if os.path.exists(tmp_fn):
-                return open(tmp_fn, "r").read().find("http://") > 0
-            
-        
-        # create a local .m3u file from it
-        @staticmethod
-        def m3u(pls):
-        
-            # temp filename
-            (tmp_fn, unique) = action.tmp_fn(pls)
-            # does it already exist?
-            if tmp_fn and unique and conf.reuse_m3u and action.has_urls(tmp_fn):
-                return tmp_fn
-
-            # download PLS
-            __print__( dbg.DATA, "pls=",pls )
-            url_list = action.extract_urls(pls)
-            __print__( dbg.DATA, "urls=", url_list )
-
-            # output URL list to temporary .m3u file
-            if (len(url_list)):
-                #tmp_fn = 
-                f = open(tmp_fn, "w")
-                f.write("#M3U\n")
-                f.write("\n".join(url_list) + "\n")
-                f.close()
-                # return path/name of temporary file
-                return tmp_fn
-            else:
-                __print__( dbg.ERR, "error, there were no URLs in ", pls )
-                raise "Empty PLS"
+    # Return original, or asis for srv targets
+    if not urls:
+        return [url]
+    elif dest in ("srv", "href"):
+        return urls
 
-        # open help browser                
-        @staticmethod
-        def help(*args):
-        
-            action.run("yelp /usr/share/doc/streamtuner2/help/")
-            #or action.browser("/usr/share/doc/streamtuner2/")
+    # Otherwise convert to local file
+    if local_file:
+        fn = tmp_fn(row, dest)
+        with open(fn, "w") as f:
+            log.DATA("exporting with format:", dest, " into filename:", fn)
+            f.write( save_playlist(source="srv", multiply=True).export(urls, row, dest) )
+        return [fn]
+    else:
+        return urls
+
+
+
+# Tries to fetch a resource, aborts on ICY responses.
+#
+def http_probe_get(url):
+
+    # HTTP request, abort if streaming server hit (no HTTP/ header, but ICY/ response)
+    try:
+        r = ahttp.session.get(url, stream=True, timeout=5.0)
+        if not len(r.headers):
+            return ("srv", r)
+    except:
+        return ("srv", None)
+
+    # Extract payload
+    mime = r.headers.get("content-type", "href")
+    mime = mime.split(";")[0].strip()
+
+    # Map MIME to abbr type (pls, m3u, xspf)
+    if listfmt_t.get(mime):
+        mime = listfmt_t.get(mime)
+    # Raw content (mp3, flv)
+    elif mediafmt_t.get(mime):
+        log.ERR("Got media MIME type for expected playlist", mime, " on url=", url)
+        mime = mediafmt_t.get(mime)
+        return (mime, url)
+
+    # Rejoin into string
+    content = "\n".join(str.decode(errors='replace') for str in r.iter_lines())
+    return (mime, content)
+
+
+
+# Extract URLs and meta infos (titles) from playlist formats
+# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+# It's mostly regex-based at the moment, because that's more
+# resilient against mailformed XSPF or JSON. But specialized
+# import helpers can be added as needed.
+#
+class extract_playlist(object):
+
+    # Content of playlist file
+    src = ""
+    fn = ""
+    def __init__(self, text=None, fn=None):
+        # Literal playlist source content
+        if text:
+            self.src = text
+        # Only read filename if it matches allowed extension
+        if fn and self.probe_ext(fn):
+            self.fn = fn
+            self.src = open(fn, "rt").read()
 
-#class action
 
+    # Test URL/path "extension" for ".pls" / ".m3u" etc.
+    def probe_ext(self, url):
+        e = re.findall("\.(pls|m3u|xspf|jspf|asx|wpl|wsf|smil|html|url|json|desktop)\d?$", url)
+        if e: return e[0]
+        else: pass
+
+
+    # Probe MIME type and content per regex
+    def probe_fmt(self):
+        for probe,rx in playlist_content_map:
+            if re.search(rx, self.src, re.X|re.M|re.S):
+                return listfmt(probe)
+        return None
+
+
+    # Return just URL list from extracted playlist
+    def urls(self, fmt):
+        return [row["url"] for row in self.rows(fmt)]
+
+        
+    # Extract only URLs from given source type
+    def rows(self, fmt=None):
+        if not fmt:
+            fmt = self.probe_fmt()
+        log.DATA("input extractor/regex:", fmt, len(self.src))
+
+        # specific extractor implementations
+        if hasattr(self, fmt):
+            try:
+                return getattr(self, fmt)()
+            except Exception as e:
+                log.WARN("Native '{}' parser failed on input (improper encoding, etc)".format(fmt), e)
+
+        # regex scheme
+        if not fmt in self.extr_urls:
+            log.ERR("Unknown playlist format type '{}' - falling back to 'raw' mode".format(fmt))
+            fmt = "raw"
+        rules = self.extr_urls[fmt]
+        rows = []
+        fields = [name for name in ("url", "title", "homepage", "genre", "playing") if rules.get(name)]
+
+        # Block-wise processing
+        if rules.get("split"):
+            for part_src in re.split(rules["split"], self.src, 0, re.X):
+                row = {}
+                for name in fields:
+                    val = self.field(name, rules, part_src)
+                    if val and val[0]:
+                        row[name] = val[0]
+                if row.get("url"):
+                    rows.append(row)
+            log.DATA("split-rx", rows)
+        
+        # Just associate each found url+title in pairs
+        else:
+            for name in fields:
+                for i,val in enumerate(self.field(name, rules, self.src)):
+                    if len(rows) <= i:
+                        rows.append({"url":None})
+                    rows[i][name] = val;
+            log.DATA("pair-rx", rows)
+
+        return self.uniq(rows)
+
+
+    # Single field
+    def field(self, name, rules, src_part):
+        if name in rules:
+            vals = re.findall(rules[name], src_part, re.X)
+            #log.PLS_EXTR_FIELD(name, vals, src_part, rules[name])
+            return [self.decode(val, rules.get("unesc")) for val in vals]
+        return [None]
+
+
+    # String decoding
+    def decode(self, val, unesc):
+        if unesc in ("xml", "*"):
+            val = xmlunescape(val)
+        if unesc in ("json", "*"):
+            val = val.replace("\\/", "/")
+        return val
+
+
+    # Filter out duplicate urls
+    def uniq(self, rows):
+        seen = []
+        filtered = []
+        for row in rows:
+            if not row or not row.get("url") or row.get("url") in seen:
+                continue;
+            seen.append(row.get("url"))
+            filtered.append(row)
+        return rows
+
+
+    # These regexps only look out for URLs, not local file paths.
+    extr_urls = {
+        "pls": dict(
+            url   = r"(?m) ^File\d* \s*=\s* (\w+://[^\s]+) ",
+            title = r"(?m) ^Title\d* \s*=\s*(.+)",
+            # Notably this extraction method assumes the entries are grouped in associative order
+        ),
+        "m3u": dict(
+            split = r"(?m) (?=^\#)",
+            url   = r"(?m) ^( \w+:// [^#\n]+ )",
+            title = r"(?m) ^ \#EXTINF [-:\d,]* (.+)",
+        ),
+        "xspf": dict(
+            split = r"(?x) <track[^>]*>",
+            url   = r"(?x) <location> (\w+://[^<>\s]+) </location> ",
+            title = r"(?x) <title> ([^<>]+) ",
+            homepage = r"(?x) <info> ([^<>]+) ",
+            playing  = r"(?x) <annotation> ([^<>]+) ",
+            unesc = "xml",
+        ),
+        "asx": dict(
+            split = r" (?ix) <entry[^>]*> ",
+            url   = r" (?ix) <ref \b[^>]+\b href \s*=\s* [\'\"] (\w+://[^\s\"\']+) [\'\"] ",
+            title = r" (?ix) <title> ([^<>]+) ",
+            unesc = "xml",
+        ),
+        "smil": dict(
+            url   = r" (?x) <(?:audio|video|media)\b [^>]+ \b src \s*=\s* [^\"\']? \s* (\w+://[^\"\'\s\>]+) ",
+            unesc = "xml",
+        ),
+        "jspf": dict(
+            split = r"(?s) \"track\":\s*\{ >",
+            url   = r"(?s) \"location\" \s*:\s* \"(\w+://[^\"\s]+)\" ",
+            unesc = "json",
+        ),
+        "jamj": dict(
+            url   = r" (?x) \"audio\" \s*:\s* \"(\w+:\\?/\\?/[^\"\s]+)\" ",
+           #title = r" (?x) \"name\" \s*:\s* \"([^\"]+)\" ",
+            unesc = "json",
+        ),
+        "json": dict(
+            url   = r" (?x) \"(?:url|audio|stream)\" \s*:\s* \"(\w+:\\?/\\?/[^\"\s]+)\" ",
+            title = r" (?x) \"(?:title|name|station)\" \s*:\s* \"([^\"]+)\" ",
+            playing = r" (?x) \"(?:playing|current|description)\" \s*:\s* \"([^\"]+)\" ",
+            homepage= r" (?x) \"(?:homepage|website|info)\" \s*:\s* \"([^\"]+)\" ",
+            genre = r" (?x) \"(?:genre|keywords|category)\" \s*:\s* \"([^\"]+)\" ",
+            unesc = "json",
+        ),
+        "asf": dict(
+            url   = r" (?m) ^ \s*Ref\d+ = (\w+://[^\s]+) ",
+            unesc = "xml",
+        ),
+        "url": dict(
+            url   = r"(?m) ^URL=(\w+://.+)",
+        ),
+        "desktop": dict(
+            url   = r"(?m) ^URL=(\w+://.+)",
+            title = r"(?m) ^Name=(.+)",
+            genre = r"(?m) ^Categories=(.+)",
+          playing = r"(?m) ^Comment=(.+)",
+        ),
+        "raw": dict(
+            url   = r" (?i) ( [\w+]+:// [^\s\"\'\>\#]+ ) ",
+            title = r"(?i)Title[\W]+(.+)",
+            unesc = "*",
+        ),
+    }
+    
+    
+    # More exact PLS extraction (for the unlikely case entries were misordered)
+    def pls(self):
+        fieldmap = dict(file="url", title="title")
+        rows = {}
+        for field,num,value in re.findall("^\s* ([a-z_-]+) (\d+) \s*=\s* (.*) $", self.src, re.M|re.I|re.X):
+            if not num in rows:
+                rows[num] = {}
+            field = fieldmap.get(field.lower())
+            if field and len(value):
+                rows[num][field] = value.strip()
+        return [rows[str(i)] for i in sorted(map(int, rows.keys()))]
+
+
+    # Jamendo JAMJAMJSON playlists
+    def jamj(self):
+        rows = []
+        print self.src
+        for result in json.loads(self.src)["results"]:
+            for track in result.get("tracks") or [result]:
+                rows.append(dict(
+                    title = track["name"],
+                    url = track["audio"],
+                    playing = track.get("artist_name"),
+                    img = track.get("image"),
+                ))
+        return rows
+
+
+    # Add placeholder fields to extracted row
+    def mkrow(self, row, title=None):
+        url = row.get("url", "")
+        comb = {
+            "title": row.get("title") or title or re.sub("\.\w+$", "", os.path.basename(self.fn)),
+            "playing": "",
+            "url": None,
+            "homepage": "",
+            "listformat": self.probe_ext(url) or "href", # or srv?
+            "format": self.mime_guess(url),
+            "genre": "copy",
+        }
+        comb.update(row)
+        return comb
+
+
+    # Probe url "extensions" for common media types
+    # (only care about the common audio formats, don't need an exact match or pre-probing in practice)
+    def mime_guess(self, url):
+        audio = re.findall("(ogg|opus|spx|aacp|aac|mpeg|mp3|m4a|mp2|flac|midi|mod|kar|aiff|wma|ram|wav)", url)
+        if audio:
+            return "audio/{}".format(*audio)
+        video = re.findall("(mp4|flv|avi|mp2|theora|3gp|nsv|fli|ogv|webm|mng|mxu|wmv|mpv|mkv)", url)
+        if audio:
+            return "video/{}".format(*audio)
+        return "x-audio-video/unknown"
+
+
+
+# Save rows[] in one of the export formats
+# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+#  → The export() version uses urls[] and a template row{} as input,
+# converts it into a list of complete rows{} beforehand. It's mostly
+# utilized to expand a source playlist, merge in alternative streaming
+# server addresses.
+#
+#  → With store() a full set of rows[] is required to begin with, as
+# it performs a complete serialization.  Can save directly to a file.
+# Which is often used directly by export functions, when no internal
+# .pls/.m3u urls should be expanded or converted.
+#
+# Note that this can chain to convert_playlist() itself. So there's
+# some danger for neverending loops in here. Never happened, but some
+# careful source= and dest= parameter use is advised. Use source="asis"
+# or "srv" to leave addresses alone, or "href" for input probing.
+#
+class save_playlist(object):
+
+    # if converting
+    source = "pls"
+ 
+    # expand multiple server URLs into duplicate entries in target playlist
+    multiply = True
+ 
+    # constructor
+    def __init__(self, source="asis", multiply=False):
+        self.source = source
+        self.multiply = multiply
+    
+
+    # Used by playlist_convert(), to transform a list of extracted URLs
+    # into a local .pls/.m3u collection again. Therefore injects the
+    # `title` back into each of the URL rows / or uses row{} template.
+    def export(self, urls=[], row={}, dest="pls", title=None):
+        row["title"] = row.get("title", title or "unnamed stream")
+        rows = []
+        for url in urls:
+            if url:
+                row.update(url=url)
+                rows.append(copy.copy(row))
+        return self.store(rows, dest)
+
+
+    # Export a playlist from rows{}
+    def store(self, rows=None, dest="pls"):
+    
+        # can be just a single entry
+        rows = copy.deepcopy(rows)
+        if type(rows) is dict:
+            rows = [row]
+
+        # Expand contained stream urls
+        if not self.source in ("srv", "raw", "asis"):
+            new_rows = []
+            for i,row in enumerate(rows):
+                # Preferrably convert to direct server addresses
+                for url in convert_playlist(row["url"], self.source, "srv", local_file=False):
+                    row = dict(row.items())
+                    row["url"] = url
+                    new_rows.append(row)
+                    # Or just allow one stream per station in a playlist entry
+                    if not self.multiply:
+                        break
+            rows = new_rows
+
+        log.DATA("conversion to:", dest, "  with rows=", rows)
+
+        # call conversion schemes
+        converter = getattr(self, dest) or self.pls
+        return converter(rows)
+
+
+    # save directly
+    def file(self, rows, dest, fn):
+        with open(fn, "w") as f:
+            f.write(self.store(rows, dest))
+    
+    
+
+    # M3U
+    def m3u(self, rows):
+        txt = "#EXTM3U\n"
+        for r in rows:
+            txt += "#EXTINF:-1,%s\n" % r["title"]
+            txt += "%s\n" % ahttp.fix_url(r["url"])
+        return txt
+
+    # PLS
+    def pls(self, rows):
+        txt = "[playlist]\n" + "NumberOfEntries=%s\n" % len(rows)
+        for i,r in enumerate(rows):
+            txt += "File%s=%s\nTitle%s=%s\nLength%s=%s\n" % (i+1, r["url"], i+1, r["title"], i+1, -1)
+        txt += "Version=2\n"
+        return txt
+
+    # JSON (native lists of streamtuner2)
+    def json(self, rows):
+        return json.dumps(rows, indent=4)
+
+
+    # XSPF
+    def xspf(self, rows):
+        return """<?xml version="1.0" encoding="UTF-8"?>\n"""				\
+            + """<?http header="Content-Type: application/xspf+xml; x-ns='http://xspf.org/ns/0/'; x-gen=streamtuner2" ?>\n"""	\
+            + """<playlist version="1" xmlns="http://xspf.org/ns/0/">\n"""		\
+            + """\t<date>%s</date>\n\t<trackList>\n""" % datetime.now().isoformat()	\
+            + "".join("""\t\t<track>\n%s\t\t</track>\n""" % self.xspf_row(row, self.xspf_map) for row in rows)	\
+            + """\t</trackList>\n</playlist>\n"""
+    # individual tracks
+    def xspf_row(self, row, map):
+        return "".join("""\t\t\t<%s>%s</%s>\n""" % (tag, xmlentities(row[attr]), tag) for attr,tag in map.items() if row.get(attr))
+    # dict to xml tags
+    xspf_map = dict(title="title", url="location", homepage="info", playing="annotation", description="info")
+
+
+    # JSPF
+    def jspf(self, rows):
+        tracks = []
+        for row in rows:
+            tracks.append( { tag: row[attr] for attr,tag in self.xspf_map.items() if row.get(attr) } )
+        return json.dumps({ "playlist": { "track": tracks } }, indent=4)
+
+
+    # ASX
+    def asx(self, rows):
+        txt = """<asx version="3.0">\n"""
+        for row in rows:
+            txt += """\t<entry>\n\t\t<title>%s</title>\n\t\t<ref href="%s"/>\n\t</entry>\n""" % (xmlentities(row["title"]), xmlentities(row["url"]))
+        txt += """</asx>\n"""
+        return txt
+
+
+    # SMIL
+    def smil(self, rows):
+        txt = """<smil>\n<head>\n\t<meta name="title" content="%s"/>\n</head>\n<body>\n\t<seq>\n""" % (rows[0]["title"])
+        for row in rows:
+            if row.get("url"):
+                txt += """\t\t<{} src="{}"/>\n""".format(row.get("format", "audio").split("/")[0], row["url"])
+        txt += """\t</seq>\n</body>\n</smil>\n"""
+        return txt
+
+    # .DESKTOP links
+    def desktop(self, rows):
+        return "[Desktop Entry]\nVersion=1.0\nIcon=media-playback-start\nType=Link\nName={title}\nComment={playing}\nURL={url}\n".format(**rows[0])
+
+    # .URL shortcuts
+    def url(self, rows):
+        return "[InternetShortcut]\nURL={url}\n".format(**rows[0])
+
+
+
+# Generate filename for temporary .pls/m3u, with unique id
+def tmp_fn(row, ext="pls"):
+    # use original url for generating a hash sum
+    stream_url_hash = abs(hash(str(row)))
+    try:
+        channelname = main.current_channel
+    except:
+        channelname = "unknown"
+    # return temp filename
+    fn = "%s/%s.%s.%s" % (str(conf.tmp), channelname, stream_url_hash, ext)
+    tmp_files.append(fn)
+    return fn
+
+# Collect generated filenames
+tmp_files = []
+
+# Callback from main / after gtk_main_quit
+def cleanup_tmp_files():
+    if not int(conf.reuse_m3u):
+        [os.remove(fn) for fn in set(tmp_files)]
 
diff --git a/ahttp.py b/ahttp.py
index bd9d662..1e97545 100644
--- a/ahttp.py
+++ b/ahttp.py
@@ -4,20 +4,20 @@
 # type: functions
 # title: http download / methods
 # description: http utility
-# version: 1.4
-#
-#  Provides a http GET method with gtk.statusbar() callback.
-#  And a function to add trailings slashes on http URLs.
+# version: 1.5
 #
+# Utility code for HTTP requests, used by all channel plugins.
 #
+# Provides a http "GET" method, but also does POST and AJAX-
+# simulating requests too. Hooks into mains gtk.statusbar().
+# And can normalize URLs to always carry a trailing slash
+# after the domain name.
 
 
-from config import conf, __print__, dbg
+from config import *
 import requests
 
 
-
-
 #-- hooks to progress meter and status bar in main window
 feedback = None
 
@@ -25,25 +25,24 @@ feedback = None
 #
 # Can either take a float parameter (e.g. 0.99 for % indicator)
 # or text message. Alternatively two parameters to update both.
-def progress_feedback(*args):
+def progress_feedback(*args, **kwargs):
 
   # use reset values if none given
   if not args:
      args = ["", 1.0]
+  timeout = kwargs.get("timeout", 50)
 
   # send to main win
   if feedback:
-    try: [feedback(d) for d in args]
+    try: [feedback(d, timeout=timeout) for d in args]
     except: pass
 
 
-
-
 # prepare default query object
 session = requests.Session()
 # default HTTP headers for requests
 session.headers.update({
-    "User-Agent": "streamtuner2/2.1 (X11; U; Linux AMD64; en; rv:1.5.0.1) like WinAmp/2.1",
+    "User-Agent": "streamtuner2/2.1 (X11; Linux amd64; rv:33.0) like WinAmp/2.1",
     "Accept": "*/*",
     "Accept-Language": "en-US,en,de,es,fr,it,*;q=0.1",
     "Accept-Encoding": "gzip, deflate",
@@ -51,16 +50,19 @@ session.headers.update({
 })
 
 
-
 #-- Retrieve data via HTTP
 #
 #  Well, it says "get", but it actually does POST and AJAXish GET requests too.
 #
-def get(url, params={}, referer="", post=0, ajax=0, binary=0, feedback=None, content=True):
-    __print__( dbg.HTTP, "GET", url, params )
+def get(
+       url, params={}, referer="", post=0, ajax=0,
+       binary=0, content=True, encoding=None, verify=False,
+       statusmsg=None, timeout=9.25, quieter=0
+    ):
 
     # statusbar info
-    progress_feedback(url)
+    if not quieter:
+        progress_feedback(url, timeout=timeout/1.5)
     
     # combine headers
     headers = {}
@@ -68,30 +70,41 @@ def get(url, params={}, referer="", post=0, ajax=0, binary=0, feedback=None, con
         headers["X-Requested-With"] = "XMLHttpRequest"
     if referer:
         headers["Referer"] = (referer if referer else url)
+
+#ifdef BLD_DEBUG
+#srcout    raise Exception("Simulated HTTP error")
+#endif
     
     # read
     if post:
-        r = session.post(url, params=params, headers=headers)
+        log.HTTP("POST", url, params)
+        r = session.post(url, params=params, headers=headers, timeout=timeout)
     else:    
-        r = session.get(url, params=params, headers=headers)
+        log.HTTP("GET"+(" AJAX" if ajax else ""), url, params )
+        r = session.get(url, params=params, headers=headers, verify=verify, timeout=timeout)
 
-    __print__( dbg.HTTP, r.request.headers );
-    __print__( dbg.HTTP, r.headers );
+    if not quieter:
+        log.HTTP(">>>", r.request.headers );
+        log.HTTP("<<<", r.headers );
             
-    # finish, clean statusbar
-    #progress_feedback(0.9)
-    progress_feedback("")
-
     # result
-    __print__( dbg.INFO, "Content-Length", len(r.content) )
+    log.INFO("Content-Length", len(r.content) )
+    statusmsg and progress_feedback(statusmsg)
     if not content:
         return r
     elif binary:
-        return r.content
+        r = r.content
     else:
-        return r.text
-
-
+        # Manually decode charset
+        if encoding:
+            r.encoding = encoding
+            r = r.content.decode(encoding, errors='replace')
+        # See requests isse #2359, automatic charset detection can be awfully slow
+        else:
+            r = r.text
+    # clean statusbar
+    statusmsg and progress_feedback()
+    return r
 
 
 #-- Append missing trailing slash to URLs
@@ -109,6 +122,3 @@ def fix_url(url):
             url = url + "/"
     return url
 
-
-
-
diff --git a/bin b/bin
new file mode 100755
index 0000000..0cece2d
--- /dev/null
+++ b/bin
@@ -0,0 +1,13 @@
+#!/usr/bin/env python
+# api: cli
+# type: wrapper
+# title: streamtuner2
+# pack: bin=/usr/bin/streamtuner2
+#
+# Invocation script for /usr/share/streamtuner2/st2.py
+
+import sys
+sys.path.insert(0, "/usr/share/streamtuner2")
+
+import st2
+st2.main()
diff --git a/bundle/requests/packages/urllib3/contrib/__init__.py b/bundle/__init__.py
similarity index 100%
rename from bundle/requests/packages/urllib3/contrib/__init__.py
rename to bundle/__init__.py
diff --git a/bundle/__init__.pyc b/bundle/__init__.pyc
new file mode 100644
index 0000000..0f0ece1
Binary files /dev/null and b/bundle/__init__.pyc differ
diff --git a/bundle/__pycache__/__init__.cpython-34.pyc b/bundle/__pycache__/__init__.cpython-34.pyc
new file mode 100644
index 0000000..277da1f
Binary files /dev/null and b/bundle/__pycache__/__init__.cpython-34.pyc differ
diff --git a/bundle/__pycache__/kronos.cpython-34.pyc b/bundle/__pycache__/kronos.cpython-34.pyc
new file mode 100644
index 0000000..5873527
Binary files /dev/null and b/bundle/__pycache__/kronos.cpython-34.pyc differ
diff --git a/bundle/kronos.py b/bundle/kronos.py
index b80c3c1..d5126f4 100644
--- a/bundle/kronos.py
+++ b/bundle/kronos.py
@@ -43,7 +43,8 @@ http://www.opensource.org/licenses/mit-license.php
 
 """
 
-__version__="2.0"
+from __future__ import print_function
+__version__="2.1"
 
 __all__ = [
     "DayTaskRescheduler",
@@ -275,10 +276,10 @@ class Scheduler:
             try:
                 self.sched.run()
             except Exception as x:
-                print >>sys.stderr, "ERROR DURING SCHEDULER EXECUTION",x
-                print >>sys.stderr, "".join(
-                    traceback.format_exception(*sys.exc_info()))
-                print >>sys.stderr, "-" * 20
+                print("ERROR DURING SCHEDULER EXECUTION",x, file=sys.stderr)
+                print("".join(
+                    traceback.format_exception(*sys.exc_info())), file=sys.stderr)
+                print("-" * 20, file=sys.stderr)
             # queue is empty; sleep a short while before checking again
             if self.running:
                 time.sleep(5)
@@ -313,9 +314,9 @@ class Task:
 
     def handle_exception(self, exc):
         """Handle any exception that occured during task execution."""
-        print >>sys.stderr, "ERROR DURING TASK EXECUTION", exc
-        print >>sys.stderr, "".join(traceback.format_exception(*sys.exc_info()))
-        print >>sys.stderr, "-" * 20
+        print("ERROR DURING TASK EXECUTION", exc, file=sys.stderr)
+        print("".join(traceback.format_exception(*sys.exc_info())), file=sys.stderr)
+        print("-" * 20, file=sys.stderr)
 
 
 class SingleTask(Task):
@@ -561,18 +562,18 @@ if hasattr(os, "fork"):
 
 if __name__=="__main__":
     def testaction(arg):
-        print ">>>TASK",arg,"sleeping 3 seconds"
+        print(">>>TASK",arg,"sleeping 3 seconds")
         time.sleep(3)
-        print "<<<END_TASK",arg
+        print("<<<END_TASK",arg)
 
     s=ThreadedScheduler()
     s.add_interval_task( testaction, "test action 1", 0, 4, method.threaded, ["task 1"], None )
     s.start()
     
-    print "Scheduler started, waiting 15 sec...."
+    print("Scheduler started, waiting 15 sec....")
     time.sleep(15)
     
-    print "STOP SCHEDULER"
+    print("STOP SCHEDULER")
     s.stop()
     
-    print "EXITING"
+    print("EXITING")
diff --git a/bundle/kronos.pyc b/bundle/kronos.pyc
index 71534a7..9db4f5c 100644
Binary files a/bundle/kronos.pyc and b/bundle/kronos.pyc differ
diff --git a/bundle/requests/__init__.py b/bundle/requests/__init__.py
deleted file mode 100644
index bba1900..0000000
--- a/bundle/requests/__init__.py
+++ /dev/null
@@ -1,77 +0,0 @@
-# -*- coding: utf-8 -*-
-
-#   __
-#  /__)  _  _     _   _ _/   _
-# / (   (- (/ (/ (- _)  /  _)
-#          /
-
-"""
-requests HTTP library
-~~~~~~~~~~~~~~~~~~~~~
-
-Requests is an HTTP library, written in Python, for human beings. Basic GET
-usage:
-
-   >>> import requests
-   >>> r = requests.get('http://python.org')
-   >>> r.status_code
-   200
-   >>> 'Python is a programming language' in r.content
-   True
-
-... or POST:
-
-   >>> payload = dict(key1='value1', key2='value2')
-   >>> r = requests.post("http://httpbin.org/post", data=payload)
-   >>> print(r.text)
-   {
-     ...
-     "form": {
-       "key2": "value2",
-       "key1": "value1"
-     },
-     ...
-   }
-
-The other HTTP methods are supported - see `requests.api`. Full documentation
-is at <http://python-requests.org>.
-
-:copyright: (c) 2014 by Kenneth Reitz.
-:license: Apache 2.0, see LICENSE for more details.
-
-"""
-
-__title__ = 'requests'
-__version__ = '2.3.0'
-__build__ = 0x020300
-__author__ = 'Kenneth Reitz'
-__license__ = 'Apache 2.0'
-__copyright__ = 'Copyright 2014 Kenneth Reitz'
-
-# Attempt to enable urllib3's SNI support, if possible
-try:
-    from .packages.urllib3.contrib import pyopenssl
-    pyopenssl.inject_into_urllib3()
-except ImportError:
-    pass
-
-from . import utils
-from .models import Request, Response, PreparedRequest
-from .api import request, get, head, post, patch, put, delete, options
-from .sessions import session, Session
-from .status_codes import codes
-from .exceptions import (
-    RequestException, Timeout, URLRequired,
-    TooManyRedirects, HTTPError, ConnectionError
-)
-
-# Set default logging handler to avoid "No handler found" warnings.
-import logging
-try:  # Python 2.7+
-    from logging import NullHandler
-except ImportError:
-    class NullHandler(logging.Handler):
-        def emit(self, record):
-            pass
-
-logging.getLogger(__name__).addHandler(NullHandler())
diff --git a/bundle/requests/__init__.pyc b/bundle/requests/__init__.pyc
deleted file mode 100644
index cb183de..0000000
Binary files a/bundle/requests/__init__.pyc and /dev/null differ
diff --git a/bundle/requests/adapters.py b/bundle/requests/adapters.py
deleted file mode 100644
index 28bea07..0000000
--- a/bundle/requests/adapters.py
+++ /dev/null
@@ -1,393 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
-requests.adapters
-~~~~~~~~~~~~~~~~~
-
-This module contains the transport adapters that Requests uses to define
-and maintain connections.
-"""
-
-import socket
-
-from .models import Response
-from .packages.urllib3.poolmanager import PoolManager, proxy_from_url
-from .packages.urllib3.response import HTTPResponse
-from .packages.urllib3.util import Timeout as TimeoutSauce
-from .compat import urlparse, basestring, urldefrag, unquote
-from .utils import (DEFAULT_CA_BUNDLE_PATH, get_encoding_from_headers,
-                    except_on_missing_scheme, get_auth_from_url)
-from .structures import CaseInsensitiveDict
-from .packages.urllib3.exceptions import MaxRetryError
-from .packages.urllib3.exceptions import TimeoutError
-from .packages.urllib3.exceptions import SSLError as _SSLError
-from .packages.urllib3.exceptions import HTTPError as _HTTPError
-from .packages.urllib3.exceptions import ProxyError as _ProxyError
-from .cookies import extract_cookies_to_jar
-from .exceptions import ConnectionError, Timeout, SSLError, ProxyError
-from .auth import _basic_auth_str
-
-DEFAULT_POOLBLOCK = False
-DEFAULT_POOLSIZE = 10
-DEFAULT_RETRIES = 0
-
-
-class BaseAdapter(object):
-    """The Base Transport Adapter"""
-
-    def __init__(self):
-        super(BaseAdapter, self).__init__()
-
-    def send(self):
-        raise NotImplementedError
-
-    def close(self):
-        raise NotImplementedError
-
-
-class HTTPAdapter(BaseAdapter):
-    """The built-in HTTP Adapter for urllib3.
-
-    Provides a general-case interface for Requests sessions to contact HTTP and
-    HTTPS urls by implementing the Transport Adapter interface. This class will
-    usually be created by the :class:`Session <Session>` class under the
-    covers.
-
-    :param pool_connections: The number of urllib3 connection pools to cache.
-    :param pool_maxsize: The maximum number of connections to save in the pool.
-    :param int max_retries: The maximum number of retries each connection
-        should attempt. Note, this applies only to failed connections and
-        timeouts, never to requests where the server returns a response.
-    :param pool_block: Whether the connection pool should block for connections.
-
-    Usage::
-
-      >>> import requests
-      >>> s = requests.Session()
-      >>> a = requests.adapters.HTTPAdapter(max_retries=3)
-      >>> s.mount('http://', a)
-    """
-    __attrs__ = ['max_retries', 'config', '_pool_connections', '_pool_maxsize',
-                 '_pool_block']
-
-    def __init__(self, pool_connections=DEFAULT_POOLSIZE,
-                 pool_maxsize=DEFAULT_POOLSIZE, max_retries=DEFAULT_RETRIES,
-                 pool_block=DEFAULT_POOLBLOCK):
-        self.max_retries = max_retries
-        self.config = {}
-        self.proxy_manager = {}
-
-        super(HTTPAdapter, self).__init__()
-
-        self._pool_connections = pool_connections
-        self._pool_maxsize = pool_maxsize
-        self._pool_block = pool_block
-
-        self.init_poolmanager(pool_connections, pool_maxsize, block=pool_block)
-
-    def __getstate__(self):
-        return dict((attr, getattr(self, attr, None)) for attr in
-                    self.__attrs__)
-
-    def __setstate__(self, state):
-        # Can't handle by adding 'proxy_manager' to self.__attrs__ because
-        # because self.poolmanager uses a lambda function, which isn't pickleable.
-        self.proxy_manager = {}
-        self.config = {}
-
-        for attr, value in state.items():
-            setattr(self, attr, value)
-
-        self.init_poolmanager(self._pool_connections, self._pool_maxsize,
-                              block=self._pool_block)
-
-    def init_poolmanager(self, connections, maxsize, block=DEFAULT_POOLBLOCK):
-        """Initializes a urllib3 PoolManager. This method should not be called
-        from user code, and is only exposed for use when subclassing the
-        :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`.
-
-        :param connections: The number of urllib3 connection pools to cache.
-        :param maxsize: The maximum number of connections to save in the pool.
-        :param block: Block when no free connections are available.
-        """
-        # save these values for pickling
-        self._pool_connections = connections
-        self._pool_maxsize = maxsize
-        self._pool_block = block
-
-        self.poolmanager = PoolManager(num_pools=connections, maxsize=maxsize,
-                                       block=block)
-
-    def cert_verify(self, conn, url, verify, cert):
-        """Verify a SSL certificate. This method should not be called from user
-        code, and is only exposed for use when subclassing the
-        :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`.
-
-        :param conn: The urllib3 connection object associated with the cert.
-        :param url: The requested URL.
-        :param verify: Whether we should actually verify the certificate.
-        :param cert: The SSL certificate to verify.
-        """
-        if url.lower().startswith('https') and verify:
-
-            cert_loc = None
-
-            # Allow self-specified cert location.
-            if verify is not True:
-                cert_loc = verify
-
-            if not cert_loc:
-                cert_loc = DEFAULT_CA_BUNDLE_PATH
-
-            if not cert_loc:
-                raise Exception("Could not find a suitable SSL CA certificate bundle.")
-
-            conn.cert_reqs = 'CERT_REQUIRED'
-            conn.ca_certs = cert_loc
-        else:
-            conn.cert_reqs = 'CERT_NONE'
-            conn.ca_certs = None
-
-        if cert:
-            if not isinstance(cert, basestring):
-                conn.cert_file = cert[0]
-                conn.key_file = cert[1]
-            else:
-                conn.cert_file = cert
-
-    def build_response(self, req, resp):
-        """Builds a :class:`Response <requests.Response>` object from a urllib3
-        response. This should not be called from user code, and is only exposed
-        for use when subclassing the
-        :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`
-
-        :param req: The :class:`PreparedRequest <PreparedRequest>` used to generate the response.
-        :param resp: The urllib3 response object.
-        """
-        response = Response()
-
-        # Fallback to None if there's no status_code, for whatever reason.
-        response.status_code = getattr(resp, 'status', None)
-
-        # Make headers case-insensitive.
-        response.headers = CaseInsensitiveDict(getattr(resp, 'headers', {}))
-
-        # Set encoding.
-        response.encoding = get_encoding_from_headers(response.headers)
-        response.raw = resp
-        response.reason = response.raw.reason
-
-        if isinstance(req.url, bytes):
-            response.url = req.url.decode('utf-8')
-        else:
-            response.url = req.url
-
-        # Add new cookies from the server.
-        extract_cookies_to_jar(response.cookies, req, resp)
-
-        # Give the Response some context.
-        response.request = req
-        response.connection = self
-
-        return response
-
-    def get_connection(self, url, proxies=None):
-        """Returns a urllib3 connection for the given URL. This should not be
-        called from user code, and is only exposed for use when subclassing the
-        :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`.
-
-        :param url: The URL to connect to.
-        :param proxies: (optional) A Requests-style dictionary of proxies used on this request.
-        """
-        proxies = proxies or {}
-        proxy = proxies.get(urlparse(url.lower()).scheme)
-
-        if proxy:
-            except_on_missing_scheme(proxy)
-            proxy_headers = self.proxy_headers(proxy)
-
-            if not proxy in self.proxy_manager:
-                self.proxy_manager[proxy] = proxy_from_url(
-                                                proxy,
-                                                proxy_headers=proxy_headers,
-                                                num_pools=self._pool_connections,
-                                                maxsize=self._pool_maxsize,
-                                                block=self._pool_block)
-
-            conn = self.proxy_manager[proxy].connection_from_url(url)
-        else:
-            # Only scheme should be lower case
-            parsed = urlparse(url)
-            url = parsed.geturl()
-            conn = self.poolmanager.connection_from_url(url)
-
-        return conn
-
-    def close(self):
-        """Disposes of any internal state.
-
-        Currently, this just closes the PoolManager, which closes pooled
-        connections.
-        """
-        self.poolmanager.clear()
-
-    def request_url(self, request, proxies):
-        """Obtain the url to use when making the final request.
-
-        If the message is being sent through a HTTP proxy, the full URL has to
-        be used. Otherwise, we should only use the path portion of the URL.
-
-        This should not be called from user code, and is only exposed for use
-        when subclassing the
-        :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`.
-
-        :param request: The :class:`PreparedRequest <PreparedRequest>` being sent.
-        :param proxies: A dictionary of schemes to proxy URLs.
-        """
-        proxies = proxies or {}
-        scheme = urlparse(request.url).scheme
-        proxy = proxies.get(scheme)
-
-        if proxy and scheme != 'https':
-            url, _ = urldefrag(request.url)
-        else:
-            url = request.path_url
-
-        return url
-
-    def add_headers(self, request, **kwargs):
-        """Add any headers needed by the connection. As of v2.0 this does
-        nothing by default, but is left for overriding by users that subclass
-        the :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`.
-
-        This should not be called from user code, and is only exposed for use
-        when subclassing the
-        :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`.
-
-        :param request: The :class:`PreparedRequest <PreparedRequest>` to add headers to.
-        :param kwargs: The keyword arguments from the call to send().
-        """
-        pass
-
-    def proxy_headers(self, proxy):
-        """Returns a dictionary of the headers to add to any request sent
-        through a proxy. This works with urllib3 magic to ensure that they are
-        correctly sent to the proxy, rather than in a tunnelled request if
-        CONNECT is being used.
-
-        This should not be called from user code, and is only exposed for use
-        when subclassing the
-        :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`.
-
-        :param proxies: The url of the proxy being used for this request.
-        :param kwargs: Optional additional keyword arguments.
-        """
-        headers = {}
-        username, password = get_auth_from_url(proxy)
-
-        if username and password:
-            headers['Proxy-Authorization'] = _basic_auth_str(username,
-                                                             password)
-
-        return headers
-
-    def send(self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None):
-        """Sends PreparedRequest object. Returns Response object.
-
-        :param request: The :class:`PreparedRequest <PreparedRequest>` being sent.
-        :param stream: (optional) Whether to stream the request content.
-        :param timeout: (optional) The timeout on the request.
-        :param verify: (optional) Whether to verify SSL certificates.
-        :param cert: (optional) Any user-provided SSL certificate to be trusted.
-        :param proxies: (optional) The proxies dictionary to apply to the request.
-        """
-
-        conn = self.get_connection(request.url, proxies)
-
-        self.cert_verify(conn, request.url, verify, cert)
-        url = self.request_url(request, proxies)
-        self.add_headers(request)
-
-        chunked = not (request.body is None or 'Content-Length' in request.headers)
-
-        timeout = TimeoutSauce(connect=timeout, read=timeout)
-
-        try:
-            if not chunked:
-                resp = conn.urlopen(
-                    method=request.method,
-                    url=url,
-                    body=request.body,
-                    headers=request.headers,
-                    redirect=False,
-                    assert_same_host=False,
-                    preload_content=False,
-                    decode_content=False,
-                    retries=self.max_retries,
-                    timeout=timeout
-                )
-
-            # Send the request.
-            else:
-                if hasattr(conn, 'proxy_pool'):
-                    conn = conn.proxy_pool
-
-                low_conn = conn._get_conn(timeout=timeout)
-
-                try:
-                    low_conn.putrequest(request.method,
-                                        url,
-                                        skip_accept_encoding=True)
-
-                    for header, value in request.headers.items():
-                        low_conn.putheader(header, value)
-
-                    low_conn.endheaders()
-
-                    for i in request.body:
-                        low_conn.send(hex(len(i))[2:].encode('utf-8'))
-                        low_conn.send(b'\r\n')
-                        low_conn.send(i)
-                        low_conn.send(b'\r\n')
-                    low_conn.send(b'0\r\n\r\n')
-
-                    r = low_conn.getresponse()
-                    resp = HTTPResponse.from_httplib(
-                        r,
-                        pool=conn,
-                        connection=low_conn,
-                        preload_content=False,
-                        decode_content=False
-                    )
-                except:
-                    # If we hit any problems here, clean up the connection.
-                    # Then, reraise so that we can handle the actual exception.
-                    low_conn.close()
-                    raise
-                else:
-                    # All is well, return the connection to the pool.
-                    conn._put_conn(low_conn)
-
-        except socket.error as sockerr:
-            raise ConnectionError(sockerr, request=request)
-
-        except MaxRetryError as e:
-            raise ConnectionError(e, request=request)
-
-        except _ProxyError as e:
-            raise ProxyError(e)
-
-        except (_SSLError, _HTTPError) as e:
-            if isinstance(e, _SSLError):
-                raise SSLError(e, request=request)
-            elif isinstance(e, TimeoutError):
-                raise Timeout(e, request=request)
-            else:
-                raise
-
-        r = self.build_response(request, resp)
-
-        if not stream:
-            r.content
-
-        return r
diff --git a/bundle/requests/adapters.pyc b/bundle/requests/adapters.pyc
deleted file mode 100644
index 53a386e..0000000
Binary files a/bundle/requests/adapters.pyc and /dev/null differ
diff --git a/bundle/requests/api.py b/bundle/requests/api.py
deleted file mode 100644
index 01d853d..0000000
--- a/bundle/requests/api.py
+++ /dev/null
@@ -1,120 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
-requests.api
-~~~~~~~~~~~~
-
-This module implements the Requests API.
-
-:copyright: (c) 2012 by Kenneth Reitz.
-:license: Apache2, see LICENSE for more details.
-
-"""
-
-from . import sessions
-
-
-def request(method, url, **kwargs):
-    """Constructs and sends a :class:`Request <Request>`.
-    Returns :class:`Response <Response>` object.
-
-    :param method: method for the new :class:`Request` object.
-    :param url: URL for the new :class:`Request` object.
-    :param params: (optional) Dictionary or bytes to be sent in the query string for the :class:`Request`.
-    :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`.
-    :param headers: (optional) Dictionary of HTTP Headers to send with the :class:`Request`.
-    :param cookies: (optional) Dict or CookieJar object to send with the :class:`Request`.
-    :param files: (optional) Dictionary of 'name': file-like-objects (or {'name': ('filename', fileobj)}) for multipart encoding upload.
-    :param auth: (optional) Auth tuple to enable Basic/Digest/Custom HTTP Auth.
-    :param timeout: (optional) Float describing the timeout of the request in seconds.
-    :param allow_redirects: (optional) Boolean. Set to True if POST/PUT/DELETE redirect following is allowed.
-    :param proxies: (optional) Dictionary mapping protocol to the URL of the proxy.
-    :param verify: (optional) if ``True``, the SSL cert will be verified. A CA_BUNDLE path can also be provided.
-    :param stream: (optional) if ``False``, the response content will be immediately downloaded.
-    :param cert: (optional) if String, path to ssl client cert file (.pem). If Tuple, ('cert', 'key') pair.
-
-    Usage::
-
-      >>> import requests
-      >>> req = requests.request('GET', 'http://httpbin.org/get')
-      <Response [200]>
-    """
-
-    session = sessions.Session()
-    return session.request(method=method, url=url, **kwargs)
-
-
-def get(url, **kwargs):
-    """Sends a GET request. Returns :class:`Response` object.
-
-    :param url: URL for the new :class:`Request` object.
-    :param \*\*kwargs: Optional arguments that ``request`` takes.
-    """
-
-    kwargs.setdefault('allow_redirects', True)
-    return request('get', url, **kwargs)
-
-
-def options(url, **kwargs):
-    """Sends a OPTIONS request. Returns :class:`Response` object.
-
-    :param url: URL for the new :class:`Request` object.
-    :param \*\*kwargs: Optional arguments that ``request`` takes.
-    """
-
-    kwargs.setdefault('allow_redirects', True)
-    return request('options', url, **kwargs)
-
-
-def head(url, **kwargs):
-    """Sends a HEAD request. Returns :class:`Response` object.
-
-    :param url: URL for the new :class:`Request` object.
-    :param \*\*kwargs: Optional arguments that ``request`` takes.
-    """
-
-    kwargs.setdefault('allow_redirects', False)
-    return request('head', url, **kwargs)
-
-
-def post(url, data=None, **kwargs):
-    """Sends a POST request. Returns :class:`Response` object.
-
-    :param url: URL for the new :class:`Request` object.
-    :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`.
-    :param \*\*kwargs: Optional arguments that ``request`` takes.
-    """
-
-    return request('post', url, data=data, **kwargs)
-
-
-def put(url, data=None, **kwargs):
-    """Sends a PUT request. Returns :class:`Response` object.
-
-    :param url: URL for the new :class:`Request` object.
-    :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`.
-    :param \*\*kwargs: Optional arguments that ``request`` takes.
-    """
-
-    return request('put', url, data=data, **kwargs)
-
-
-def patch(url, data=None, **kwargs):
-    """Sends a PATCH request. Returns :class:`Response` object.
-
-    :param url: URL for the new :class:`Request` object.
-    :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`.
-    :param \*\*kwargs: Optional arguments that ``request`` takes.
-    """
-
-    return request('patch', url,  data=data, **kwargs)
-
-
-def delete(url, **kwargs):
-    """Sends a DELETE request. Returns :class:`Response` object.
-
-    :param url: URL for the new :class:`Request` object.
-    :param \*\*kwargs: Optional arguments that ``request`` takes.
-    """
-
-    return request('delete', url, **kwargs)
diff --git a/bundle/requests/api.pyc b/bundle/requests/api.pyc
deleted file mode 100644
index 6dd5b71..0000000
Binary files a/bundle/requests/api.pyc and /dev/null differ
diff --git a/bundle/requests/auth.py b/bundle/requests/auth.py
deleted file mode 100644
index 9f831b7..0000000
--- a/bundle/requests/auth.py
+++ /dev/null
@@ -1,193 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
-requests.auth
-~~~~~~~~~~~~~
-
-This module contains the authentication handlers for Requests.
-"""
-
-import os
-import re
-import time
-import hashlib
-
-from base64 import b64encode
-
-from .compat import urlparse, str
-from .cookies import extract_cookies_to_jar
-from .utils import parse_dict_header
-
-CONTENT_TYPE_FORM_URLENCODED = 'application/x-www-form-urlencoded'
-CONTENT_TYPE_MULTI_PART = 'multipart/form-data'
-
-
-def _basic_auth_str(username, password):
-    """Returns a Basic Auth string."""
-
-    return 'Basic ' + b64encode(('%s:%s' % (username, password)).encode('latin1')).strip().decode('latin1')
-
-
-class AuthBase(object):
-    """Base class that all auth implementations derive from"""
-
-    def __call__(self, r):
-        raise NotImplementedError('Auth hooks must be callable.')
-
-
-class HTTPBasicAuth(AuthBase):
-    """Attaches HTTP Basic Authentication to the given Request object."""
-    def __init__(self, username, password):
-        self.username = username
-        self.password = password
-
-    def __call__(self, r):
-        r.headers['Authorization'] = _basic_auth_str(self.username, self.password)
-        return r
-
-
-class HTTPProxyAuth(HTTPBasicAuth):
-    """Attaches HTTP Proxy Authentication to a given Request object."""
-    def __call__(self, r):
-        r.headers['Proxy-Authorization'] = _basic_auth_str(self.username, self.password)
-        return r
-
-
-class HTTPDigestAuth(AuthBase):
-    """Attaches HTTP Digest Authentication to the given Request object."""
-    def __init__(self, username, password):
-        self.username = username
-        self.password = password
-        self.last_nonce = ''
-        self.nonce_count = 0
-        self.chal = {}
-        self.pos = None
-
-    def build_digest_header(self, method, url):
-
-        realm = self.chal['realm']
-        nonce = self.chal['nonce']
-        qop = self.chal.get('qop')
-        algorithm = self.chal.get('algorithm')
-        opaque = self.chal.get('opaque')
-
-        if algorithm is None:
-            _algorithm = 'MD5'
-        else:
-            _algorithm = algorithm.upper()
-        # lambdas assume digest modules are imported at the top level
-        if _algorithm == 'MD5' or _algorithm == 'MD5-SESS':
-            def md5_utf8(x):
-                if isinstance(x, str):
-                    x = x.encode('utf-8')
-                return hashlib.md5(x).hexdigest()
-            hash_utf8 = md5_utf8
-        elif _algorithm == 'SHA':
-            def sha_utf8(x):
-                if isinstance(x, str):
-                    x = x.encode('utf-8')
-                return hashlib.sha1(x).hexdigest()
-            hash_utf8 = sha_utf8
-
-        KD = lambda s, d: hash_utf8("%s:%s" % (s, d))
-
-        if hash_utf8 is None:
-            return None
-
-        # XXX not implemented yet
-        entdig = None
-        p_parsed = urlparse(url)
-        path = p_parsed.path
-        if p_parsed.query:
-            path += '?' + p_parsed.query
-
-        A1 = '%s:%s:%s' % (self.username, realm, self.password)
-        A2 = '%s:%s' % (method, path)
-
-        HA1 = hash_utf8(A1)
-        HA2 = hash_utf8(A2)
-
-        if nonce == self.last_nonce:
-            self.nonce_count += 1
-        else:
-            self.nonce_count = 1
-        ncvalue = '%08x' % self.nonce_count
-        s = str(self.nonce_count).encode('utf-8')
-        s += nonce.encode('utf-8')
-        s += time.ctime().encode('utf-8')
-        s += os.urandom(8)
-
-        cnonce = (hashlib.sha1(s).hexdigest()[:16])
-        noncebit = "%s:%s:%s:%s:%s" % (nonce, ncvalue, cnonce, qop, HA2)
-        if _algorithm == 'MD5-SESS':
-            HA1 = hash_utf8('%s:%s:%s' % (HA1, nonce, cnonce))
-
-        if qop is None:
-            respdig = KD(HA1, "%s:%s" % (nonce, HA2))
-        elif qop == 'auth' or 'auth' in qop.split(','):
-            respdig = KD(HA1, noncebit)
-        else:
-            # XXX handle auth-int.
-            return None
-
-        self.last_nonce = nonce
-
-        # XXX should the partial digests be encoded too?
-        base = 'username="%s", realm="%s", nonce="%s", uri="%s", ' \
-               'response="%s"' % (self.username, realm, nonce, path, respdig)
-        if opaque:
-            base += ', opaque="%s"' % opaque
-        if algorithm:
-            base += ', algorithm="%s"' % algorithm
-        if entdig:
-            base += ', digest="%s"' % entdig
-        if qop:
-            base += ', qop="auth", nc=%s, cnonce="%s"' % (ncvalue, cnonce)
-
-        return 'Digest %s' % (base)
-
-    def handle_401(self, r, **kwargs):
-        """Takes the given response and tries digest-auth, if needed."""
-
-        if self.pos is not None:
-            # Rewind the file position indicator of the body to where
-            # it was to resend the request.
-            r.request.body.seek(self.pos)
-        num_401_calls = getattr(self, 'num_401_calls', 1)
-        s_auth = r.headers.get('www-authenticate', '')
-
-        if 'digest' in s_auth.lower() and num_401_calls < 2:
-
-            setattr(self, 'num_401_calls', num_401_calls + 1)
-            pat = re.compile(r'digest ', flags=re.IGNORECASE)
-            self.chal = parse_dict_header(pat.sub('', s_auth, count=1))
-
-            # Consume content and release the original connection
-            # to allow our new request to reuse the same one.
-            r.content
-            r.raw.release_conn()
-            prep = r.request.copy()
-            extract_cookies_to_jar(prep._cookies, r.request, r.raw)
-            prep.prepare_cookies(prep._cookies)
-
-            prep.headers['Authorization'] = self.build_digest_header(
-                prep.method, prep.url)
-            _r = r.connection.send(prep, **kwargs)
-            _r.history.append(r)
-            _r.request = prep
-
-            return _r
-
-        setattr(self, 'num_401_calls', 1)
-        return r
-
-    def __call__(self, r):
-        # If we have a saved nonce, skip the 401
-        if self.last_nonce:
-            r.headers['Authorization'] = self.build_digest_header(r.method, r.url)
-        try:
-            self.pos = r.body.tell()
-        except AttributeError:
-            pass
-        r.register_hook('response', self.handle_401)
-        return r
diff --git a/bundle/requests/auth.pyc b/bundle/requests/auth.pyc
deleted file mode 100644
index 61f2fc2..0000000
Binary files a/bundle/requests/auth.pyc and /dev/null differ
diff --git a/bundle/requests/cacert.pem b/bundle/requests/cacert.pem
deleted file mode 100644
index 729fe15..0000000
--- a/bundle/requests/cacert.pem
+++ /dev/null
@@ -1,5026 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# Issuer: CN=GTE CyberTrust Global Root O=GTE Corporation OU=GTE CyberTrust Solutions, Inc.
-# Subject: CN=GTE CyberTrust Global Root O=GTE Corporation OU=GTE CyberTrust Solutions, Inc.
-# Label: "GTE CyberTrust Global Root"
-# Serial: 421
-# MD5 Fingerprint: ca:3d:d3:68:f1:03:5c:d0:32:fa:b8:2b:59:e8:5a:db
-# SHA1 Fingerprint: 97:81:79:50:d8:1c:96:70:cc:34:d8:09:cf:79:44:31:36:7e:f4:74
-# SHA256 Fingerprint: a5:31:25:18:8d:21:10:aa:96:4b:02:c7:b7:c6:da:32:03:17:08:94:e5:fb:71:ff:fb:66:67:d5:e6:81:0a:36
------BEGIN CERTIFICATE-----
-MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD
-VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv
-bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv
-b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV
-UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
-cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
-b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH
-iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS
-r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4
-04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r
-GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9
-3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P
-lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
------END CERTIFICATE-----
-
-# Issuer: CN=Thawte Server CA O=Thawte Consulting cc OU=Certification Services Division
-# Subject: CN=Thawte Server CA O=Thawte Consulting cc OU=Certification Services Division
-# Label: "Thawte Server CA"
-# Serial: 1
-# MD5 Fingerprint: c5:70:c4:a2:ed:53:78:0c:c8:10:53:81:64:cb:d0:1d
-# SHA1 Fingerprint: 23:e5:94:94:51:95:f2:41:48:03:b4:d5:64:d2:a3:a3:f5:d8:8b:8c
-# SHA256 Fingerprint: b4:41:0b:73:e2:e6:ea:ca:47:fb:c4:2f:8f:a4:01:8a:f4:38:1d:c5:4c:fa:a8:44:50:46:1e:ed:09:45:4d:e9
------BEGIN CERTIFICATE-----
-MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
-VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
-biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm
-MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx
-MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
-DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3
-dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl
-cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3
-DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD
-gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91
-yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX
-L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj
-EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG
-7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e
-QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ
-qdq5snUb9kLy78fyGPmJvKP/iiMucEc=
------END CERTIFICATE-----
-
-# Issuer: CN=Thawte Premium Server CA O=Thawte Consulting cc OU=Certification Services Division
-# Subject: CN=Thawte Premium Server CA O=Thawte Consulting cc OU=Certification Services Division
-# Label: "Thawte Premium Server CA"
-# Serial: 1
-# MD5 Fingerprint: 06:9f:69:79:16:66:90:02:1b:8c:8c:a2:c3:07:6f:3a
-# SHA1 Fingerprint: 62:7f:8d:78:27:65:63:99:d2:7d:7f:90:44:c9:fe:b3:f3:3e:fa:9a
-# SHA256 Fingerprint: ab:70:36:36:5c:71:54:aa:29:c2:c2:9f:5d:41:91:16:3b:16:2a:22:25:01:13:57:d5:6d:07:ff:a7:bc:1f:72
------BEGIN CERTIFICATE-----
-MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
-VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
-biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy
-dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t
-MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB
-MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG
-A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp
-b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl
-cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv
-bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE
-VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ
-ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR
-uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
-9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI
-hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM
-pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg==
------END CERTIFICATE-----
-
-# Issuer: O=Equifax OU=Equifax Secure Certificate Authority
-# Subject: O=Equifax OU=Equifax Secure Certificate Authority
-# Label: "Equifax Secure CA"
-# Serial: 903804111
-# MD5 Fingerprint: 67:cb:9d:c0:13:24:8a:82:9b:b2:17:1e:d1:1b:ec:d4
-# SHA1 Fingerprint: d2:32:09:ad:23:d3:14:23:21:74:e4:0d:7f:9d:62:13:97:86:63:3a
-# SHA256 Fingerprint: 08:29:7a:40:47:db:a2:36:80:c7:31:db:6e:31:76:53:ca:78:48:e1:be:bd:3a:0b:01:79:a7:07:f9:2c:f1:78
------BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
-UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
-dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
-MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
-dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
-BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
-cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
-AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
-MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
-aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
-ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
-IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
-MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
-A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
-7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
-1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
------END CERTIFICATE-----
-
-# Issuer: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority
-# Subject: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority
-# Label: "Verisign Class 3 Public Primary Certification Authority"
-# Serial: 149843929435818692848040365716851702463
-# MD5 Fingerprint: 10:fc:63:5d:f6:26:3e:0d:f3:25:be:5f:79:cd:67:67
-# SHA1 Fingerprint: 74:2c:31:92:e6:07:e4:24:eb:45:49:54:2b:e1:bb:c5:3e:61:74:e2
-# SHA256 Fingerprint: e7:68:56:34:ef:ac:f6:9a:ce:93:9a:6b:25:5b:7b:4f:ab:ef:42:93:5b:50:a2:65:ac:b5:cb:60:27:e4:4e:70
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
-A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
-cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
-MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
-BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
-YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
-ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
-BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
-I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
-CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
-lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
-AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
------END CERTIFICATE-----
-
-# Issuer: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority - G2/(c) 1998 VeriSign, Inc. - For authorized use only/VeriSign Trust Network
-# Subject: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority - G2/(c) 1998 VeriSign, Inc. - For authorized use only/VeriSign Trust Network
-# Label: "Verisign Class 3 Public Primary Certification Authority - G2"
-# Serial: 167285380242319648451154478808036881606
-# MD5 Fingerprint: a2:33:9b:4c:74:78:73:d4:6c:e7:c1:f3:8d:cb:5c:e9
-# SHA1 Fingerprint: 85:37:1c:a6:e5:50:14:3d:ce:28:03:47:1b:de:3a:09:e8:f8:77:0f
-# SHA256 Fingerprint: 83:ce:3c:12:29:68:8a:59:3d:48:5f:81:97:3c:0f:91:95:43:1e:da:37:cc:5e:36:43:0e:79:c7:a8:88:63:8b
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
-c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
-MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
-emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
-DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
-FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg
-UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
-YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
-MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
-AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4
-pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0
-13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID
-AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk
-U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i
-F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY
-oJ2daZH9
------END CERTIFICATE-----
-
-# Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA
-# Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA
-# Label: "GlobalSign Root CA"
-# Serial: 4835703278459707669005204
-# MD5 Fingerprint: 3e:45:52:15:09:51:92:e1:b7:5d:37:9f:b1:87:29:8a
-# SHA1 Fingerprint: b1:bc:96:8b:d4:f4:9d:62:2a:a8:9a:81:f2:15:01:52:a4:1d:82:9c
-# SHA256 Fingerprint: eb:d4:10:40:e4:bb:3e:c7:42:c9:e3:81:d3:1e:f2:a4:1a:48:b6:68:5c:96:e7:ce:f3:c1:df:6c:d4:33:1c:99
------BEGIN CERTIFICATE-----
-MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
-A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
-b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
-MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
-YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
-aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
-jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
-xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
-1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
-snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
-U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
-9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
-BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B
-AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz
-yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE
-38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP
-AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad
-DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
-HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
------END CERTIFICATE-----
-
-# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2
-# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2
-# Label: "GlobalSign Root CA - R2"
-# Serial: 4835703278459682885658125
-# MD5 Fingerprint: 94:14:77:7e:3e:5e:fd:8f:30:bd:41:b0:cf:e7:d0:30
-# SHA1 Fingerprint: 75:e0:ab:b6:13:85:12:27:1c:04:f8:5f:dd:de:38:e4:b7:24:2e:fe
-# SHA256 Fingerprint: ca:42:dd:41:74:5f:d0:b8:1e:b9:02:36:2c:f9:d8:bf:71:9d:a1:bd:1b:1e:fc:94:6f:5b:4c:99:f4:2c:1b:9e
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G
-A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp
-Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1
-MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG
-A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL
-v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8
-eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq
-tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd
-C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa
-zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB
-mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH
-V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n
-bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG
-3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs
-J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO
-291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS
-ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd
-AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
-TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
------END CERTIFICATE-----
-
-# Issuer: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 1 Policy Validation Authority
-# Subject: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 1 Policy Validation Authority
-# Label: "ValiCert Class 1 VA"
-# Serial: 1
-# MD5 Fingerprint: 65:58:ab:15:ad:57:6c:1e:a8:a7:b5:69:ac:bf:ff:eb
-# SHA1 Fingerprint: e5:df:74:3c:b6:01:c4:9b:98:43:dc:ab:8c:e8:6a:81:10:9f:e4:8e
-# SHA256 Fingerprint: f4:c1:49:55:1a:30:13:a3:5b:c7:bf:fe:17:a7:f3:44:9b:c1:ab:5b:5a:0a:e7:4b:06:c2:3b:90:00:4c:01:04
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy
-NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y
-LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+
-TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y
-TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0
-LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW
-I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw
-nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI
------END CERTIFICATE-----
-
-# Issuer: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 2 Policy Validation Authority
-# Subject: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 2 Policy Validation Authority
-# Label: "ValiCert Class 2 VA"
-# Serial: 1
-# MD5 Fingerprint: a9:23:75:9b:ba:49:36:6e:31:c2:db:f2:e7:66:ba:87
-# SHA1 Fingerprint: 31:7a:2a:d0:7f:2b:33:5e:f5:a1:c3:4e:4b:57:e8:b7:d8:f1:fc:a6
-# SHA256 Fingerprint: 58:d0:17:27:9c:d4:dc:63:ab:dd:b1:96:a6:c9:90:6c:30:c4:e0:87:83:ea:e8:c1:60:99:54:d6:93:55:59:6b
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy
-NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY
-dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9
-WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS
-v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v
-UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu
-IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC
-W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd
------END CERTIFICATE-----
-
-# Issuer: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 3 Policy Validation Authority
-# Subject: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 3 Policy Validation Authority
-# Label: "RSA Root Certificate 1"
-# Serial: 1
-# MD5 Fingerprint: a2:6f:53:b7:ee:40:db:4a:68:e7:fa:18:d9:10:4b:72
-# SHA1 Fingerprint: 69:bd:8c:f4:9c:d3:00:fb:59:2e:17:93:ca:55:6a:f3:ec:aa:35:fb
-# SHA256 Fingerprint: bc:23:f9:8a:31:3c:b9:2d:e3:bb:fc:3a:5a:9f:44:61:ac:39:49:4c:4a:e1:5a:9e:9d:f1:31:e9:9b:73:01:9a
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy
-NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD
-cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs
-2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY
-JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE
-Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ
-n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A
-PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu
------END CERTIFICATE-----
-
-# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only
-# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only
-# Label: "Verisign Class 3 Public Primary Certification Authority - G3"
-# Serial: 206684696279472310254277870180966723415
-# MD5 Fingerprint: cd:68:b6:a7:c7:c4:ce:75:e0:1d:4f:57:44:61:92:09
-# SHA1 Fingerprint: 13:2d:0d:45:53:4b:69:97:cd:b2:d5:c3:39:e2:55:76:60:9b:5c:c6
-# SHA256 Fingerprint: eb:04:cf:5e:b1:f3:9a:fa:76:2f:2b:b1:20:f2:96:cb:a5:20:c1:b9:7d:b1:58:95:65:b8:1c:b9:a1:7b:72:44
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b
-N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t
-KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu
-kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm
-CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ
-Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu
-imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te
-2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe
-DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
-/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p
-F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt
-TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
------END CERTIFICATE-----
-
-# Issuer: CN=VeriSign Class 4 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only
-# Subject: CN=VeriSign Class 4 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only
-# Label: "Verisign Class 4 Public Primary Certification Authority - G3"
-# Serial: 314531972711909413743075096039378935511
-# MD5 Fingerprint: db:c8:f2:27:2e:b1:ea:6a:29:23:5d:fe:56:3e:33:df
-# SHA1 Fingerprint: c8:ec:8c:87:92:69:cb:4b:ab:39:e9:8d:7e:57:67:f3:14:95:73:9d
-# SHA256 Fingerprint: e3:89:36:0d:0f:db:ae:b3:d2:50:58:4b:47:30:31:4e:22:2f:39:c1:56:a0:20:14:4e:8d:96:05:61:79:15:06
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1
-GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ
-+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd
-U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm
-NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY
-ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/
-ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1
-CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq
-g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
-fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c
-2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/
-bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
------END CERTIFICATE-----
-
-# Issuer: CN=Entrust.net Secure Server Certification Authority O=Entrust.net OU=www.entrust.net/CPS incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited
-# Subject: CN=Entrust.net Secure Server Certification Authority O=Entrust.net OU=www.entrust.net/CPS incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited
-# Label: "Entrust.net Secure Server CA"
-# Serial: 927650371
-# MD5 Fingerprint: df:f2:80:73:cc:f1:e6:61:73:fc:f5:42:e9:c5:7c:ee
-# SHA1 Fingerprint: 99:a6:9b:e6:1a:fe:88:6b:4d:2b:82:00:7c:b8:54:fc:31:7e:15:39
-# SHA256 Fingerprint: 62:f2:40:27:8c:56:4c:4d:d8:bf:7d:9d:4f:6f:36:6e:a8:94:d2:2f:5f:34:d9:89:a9:83:ac:ec:2f:ff:ed:50
------BEGIN CERTIFICATE-----
-MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
-VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
-ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
-KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
-ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1
-MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE
-ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j
-b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
-bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg
-U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA
-A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/
-I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3
-wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC
-AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb
-oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5
-BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
-dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk
-MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
-b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
-dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0
-MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi
-E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa
-MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI
-hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN
-95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd
-2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
------END CERTIFICATE-----
-
-# Issuer: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited
-# Subject: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited
-# Label: "Entrust.net Premium 2048 Secure Server CA"
-# Serial: 946069240
-# MD5 Fingerprint: ee:29:31:bc:32:7e:9a:e6:e8:b5:f7:51:b4:34:71:90
-# SHA1 Fingerprint: 50:30:06:09:1d:97:d4:f5:ae:39:f7:cb:e7:92:7d:7d:65:2d:34:31
-# SHA256 Fingerprint: 6d:c4:71:72:e0:1c:bc:b0:bf:62:58:0d:89:5f:e2:b8:ac:9a:d4:f8:73:80:1e:0c:10:b9:c8:37:d2:1e:b1:77
------BEGIN CERTIFICATE-----
-MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
-RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
-bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
-IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3
-MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
-LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
-YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
-A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
-K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe
-sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX
-MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT
-XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/
-HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
-4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV
-HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub
-j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo
-U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf
-zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b
-u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+
-bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er
-fF6adulZkMV8gzURZVE=
------END CERTIFICATE-----
-
-# Issuer: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust
-# Subject: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust
-# Label: "Baltimore CyberTrust Root"
-# Serial: 33554617
-# MD5 Fingerprint: ac:b6:94:a5:9c:17:e0:d7:91:52:9b:b1:97:06:a6:e4
-# SHA1 Fingerprint: d4:de:20:d0:5e:66:fc:53:fe:1a:50:88:2c:78:db:28:52:ca:e4:74
-# SHA256 Fingerprint: 16:af:57:a9:f6:76:b0:ab:12:60:95:aa:5e:ba:de:f2:2a:b3:11:19:d6:44:ac:95:cd:4b:93:db:f3:f2:6a:eb
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ
-RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD
-VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX
-DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y
-ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy
-VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr
-mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr
-IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK
-mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu
-XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy
-dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye
-jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1
-BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3
-DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92
-9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx
-jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0
-Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz
-ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS
-R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
------END CERTIFICATE-----
-
-# Issuer: CN=Equifax Secure Global eBusiness CA-1 O=Equifax Secure Inc.
-# Subject: CN=Equifax Secure Global eBusiness CA-1 O=Equifax Secure Inc.
-# Label: "Equifax Secure Global eBusiness CA"
-# Serial: 1
-# MD5 Fingerprint: 8f:5d:77:06:27:c4:98:3c:5b:93:78:e7:d7:7d:9b:cc
-# SHA1 Fingerprint: 7e:78:4a:10:1c:82:65:cc:2d:e1:f1:6d:47:b4:40:ca:d9:0a:19:45
-# SHA256 Fingerprint: 5f:0b:62:ea:b5:e3:53:ea:65:21:65:16:58:fb:b6:53:59:f4:43:28:0a:4a:fb:d1:04:d7:7d:10:f9:f0:4c:07
------BEGIN CERTIFICATE-----
-MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT
-ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw
-MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj
-dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l
-c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC
-UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc
-58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/
-o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH
-MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr
-aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA
-A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA
-Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv
-8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
------END CERTIFICATE-----
-
-# Issuer: CN=Equifax Secure eBusiness CA-1 O=Equifax Secure Inc.
-# Subject: CN=Equifax Secure eBusiness CA-1 O=Equifax Secure Inc.
-# Label: "Equifax Secure eBusiness CA 1"
-# Serial: 4
-# MD5 Fingerprint: 64:9c:ef:2e:44:fc:c6:8f:52:07:d0:51:73:8f:cb:3d
-# SHA1 Fingerprint: da:40:18:8b:91:89:a3:ed:ee:ae:da:97:fe:2f:9d:f5:b7:d1:8a:41
-# SHA256 Fingerprint: cf:56:ff:46:a4:a1:86:10:9d:d9:65:84:b5:ee:b5:8a:51:0c:42:75:b0:e5:f9:4f:40:bb:ae:86:5e:19:f6:73
------BEGIN CERTIFICATE-----
-MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT
-ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw
-MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j
-LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ
-KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo
-RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu
-WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw
-Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD
-AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK
-eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM
-zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+
-WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN
-/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ==
------END CERTIFICATE-----
-
-# Issuer: CN=AddTrust Class 1 CA Root O=AddTrust AB OU=AddTrust TTP Network
-# Subject: CN=AddTrust Class 1 CA Root O=AddTrust AB OU=AddTrust TTP Network
-# Label: "AddTrust Low-Value Services Root"
-# Serial: 1
-# MD5 Fingerprint: 1e:42:95:02:33:92:6b:b9:5f:c0:7f:da:d6:b2:4b:fc
-# SHA1 Fingerprint: cc:ab:0e:a0:4c:23:01:d6:69:7b:dd:37:9f:cd:12:eb:24:e3:94:9d
-# SHA256 Fingerprint: 8c:72:09:27:9a:c0:4e:27:5e:16:d0:7f:d3:b7:75:e8:01:54:b5:96:80:46:e3:1f:52:dd:25:76:63:24:e9:a7
------BEGIN CERTIFICATE-----
-MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
-b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw
-MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD
-VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA
-A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul
-CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n
-tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl
-dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch
-PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC
-+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O
-BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E
-BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl
-MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk
-ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB
-IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X
-7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz
-43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
-eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl
-pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA
-WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
------END CERTIFICATE-----
-
-# Issuer: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network
-# Subject: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network
-# Label: "AddTrust External Root"
-# Serial: 1
-# MD5 Fingerprint: 1d:35:54:04:85:78:b0:3f:42:42:4d:bf:20:73:0a:3f
-# SHA1 Fingerprint: 02:fa:f3:e2:91:43:54:68:60:78:57:69:4d:f5:e4:5b:68:85:18:68
-# SHA256 Fingerprint: 68:7f:a4:51:38:22:78:ff:f0:c8:b1:1f:8d:43:d5:76:67:1c:6e:b2:bc:ea:b4:13:fb:83:d9:65:d0:6d:2f:f2
------BEGIN CERTIFICATE-----
-MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
-IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
-MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
-FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
-bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
-H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
-uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
-mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
-a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
-E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
-WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
-VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
-Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
-cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
-IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
-AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
-YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
-6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
-Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
-c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
-mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
------END CERTIFICATE-----
-
-# Issuer: CN=AddTrust Public CA Root O=AddTrust AB OU=AddTrust TTP Network
-# Subject: CN=AddTrust Public CA Root O=AddTrust AB OU=AddTrust TTP Network
-# Label: "AddTrust Public Services Root"
-# Serial: 1
-# MD5 Fingerprint: c1:62:3e:23:c5:82:73:9c:03:59:4b:2b:e9:77:49:7f
-# SHA1 Fingerprint: 2a:b6:28:48:5e:78:fb:f3:ad:9e:79:10:dd:6b:df:99:72:2c:96:e5
-# SHA256 Fingerprint: 07:91:ca:07:49:b2:07:82:aa:d3:c7:d7:bd:0c:df:c9:48:58:35:84:3e:b2:d7:99:60:09:ce:43:ab:6c:69:27
------BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
-b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx
-MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB
-ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV
-BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV
-6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX
-GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP
-dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH
-1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF
-62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW
-BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw
-AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL
-MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU
-cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv
-b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6
-IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/
-iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
-GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh
-4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm
-XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
------END CERTIFICATE-----
-
-# Issuer: CN=AddTrust Qualified CA Root O=AddTrust AB OU=AddTrust TTP Network
-# Subject: CN=AddTrust Qualified CA Root O=AddTrust AB OU=AddTrust TTP Network
-# Label: "AddTrust Qualified Certificates Root"
-# Serial: 1
-# MD5 Fingerprint: 27:ec:39:47:cd:da:5a:af:e2:9a:01:65:21:a9:4c:bb
-# SHA1 Fingerprint: 4d:23:78:ec:91:95:39:b5:00:7f:75:8f:03:3b:21:1e:c5:4d:8b:cf
-# SHA256 Fingerprint: 80:95:21:08:05:db:4b:bc:35:5e:44:28:d8:fd:6e:c2:cd:e3:ab:5f:b9:7a:99:42:98:8e:b8:f4:dc:d0:60:16
------BEGIN CERTIFICATE-----
-MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
-b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1
-MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK
-EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh
-BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq
-xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G
-87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i
-2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U
-WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1
-0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G
-A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T
-AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr
-pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL
-ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm
-aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv
-hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm
-hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
-dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3
-P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y
-iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no
-xqE=
------END CERTIFICATE-----
-
-# Issuer: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc.
-# Subject: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc.
-# Label: "Entrust Root Certification Authority"
-# Serial: 1164660820
-# MD5 Fingerprint: d6:a5:c3:ed:5d:dd:3e:00:c1:3d:87:92:1f:1d:3f:e4
-# SHA1 Fingerprint: b3:1e:b1:b7:40:e3:6c:84:02:da:dc:37:d4:4d:f5:d4:67:49:52:f9
-# SHA256 Fingerprint: 73:c1:76:43:4f:1b:c6:d5:ad:f4:5b:0e:76:e7:27:28:7c:8d:e5:76:16:c1:e6:e6:14:1a:2b:2c:bc:7d:8e:4c
------BEGIN CERTIFICATE-----
-MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC
-VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0
-Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW
-KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl
-cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw
-NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw
-NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy
-ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV
-BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ
-KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo
-Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4
-4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9
-KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI
-rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi
-94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB
-sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi
-gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo
-kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE
-vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
-A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t
-O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua
-AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP
-9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/
-eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m
-0vdXcDazv/wor3ElhVsT/h5/WrQ8
------END CERTIFICATE-----
-
-# Issuer: O=RSA Security Inc OU=RSA Security 2048 V3
-# Subject: O=RSA Security Inc OU=RSA Security 2048 V3
-# Label: "RSA Security 2048 v3"
-# Serial: 13297492616345471454730593562152402946
-# MD5 Fingerprint: 77:0d:19:b1:21:fd:00:42:9c:3e:0c:a5:dd:0b:02:8e
-# SHA1 Fingerprint: 25:01:90:19:cf:fb:d9:99:1c:b7:68:25:74:8d:94:5f:30:93:95:42
-# SHA256 Fingerprint: af:8b:67:62:a1:e5:28:22:81:61:a9:5d:5c:55:9e:e2:66:27:8f:75:d7:9e:83:01:89:a5:03:50:6a:bd:6b:4c
------BEGIN CERTIFICATE-----
-MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6
-MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp
-dHkgMjA0OCBWMzAeFw0wMTAyMjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAX
-BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAy
-MDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt49VcdKA3Xtp
-eafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7Jylg
-/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGl
-wSMiuLgbWhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnh
-AMFRD0xS+ARaqn1y07iHKrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2
-PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpu
-AWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB
-BjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4EFgQUB8NR
-MKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYc
-HnmYv/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/
-Zb5gEydxiKRz44Rj0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+
-f00/FGj1EVDVwfSQpQgdMWD/YIwjVAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVO
-rSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395nzIlQnQFgCi/vcEkllgVsRch
-6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kApKnXwiJPZ9d3
-7CAFYd4=
------END CERTIFICATE-----
-
-# Issuer: CN=GeoTrust Global CA O=GeoTrust Inc.
-# Subject: CN=GeoTrust Global CA O=GeoTrust Inc.
-# Label: "GeoTrust Global CA"
-# Serial: 144470
-# MD5 Fingerprint: f7:75:ab:29:fb:51:4e:b7:77:5e:ff:05:3c:99:8e:f5
-# SHA1 Fingerprint: de:28:f4:a4:ff:e5:b9:2f:a3:c5:03:d1:a3:49:a7:f9:96:2a:82:12
-# SHA256 Fingerprint: ff:85:6a:2d:25:1d:cd:88:d3:66:56:f4:50:12:67:98:cf:ab:aa:de:40:79:9c:72:2d:e4:d2:b5:db:36:a7:3a
------BEGIN CERTIFICATE-----
-MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
-MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
-YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
-EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
-R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
-9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
-fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
-iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
-1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
-bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
-MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
-ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
-uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
-Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
-tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
-PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
-hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
-5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
------END CERTIFICATE-----
-
-# Issuer: CN=GeoTrust Global CA 2 O=GeoTrust Inc.
-# Subject: CN=GeoTrust Global CA 2 O=GeoTrust Inc.
-# Label: "GeoTrust Global CA 2"
-# Serial: 1
-# MD5 Fingerprint: 0e:40:a7:6c:de:03:5d:8f:d1:0f:e4:d1:8d:f9:6c:a9
-# SHA1 Fingerprint: a9:e9:78:08:14:37:58:88:f2:05:19:b0:6d:2b:0d:2b:60:16:90:7d
-# SHA256 Fingerprint: ca:2d:82:a0:86:77:07:2f:8a:b6:76:4f:f0:35:67:6c:fe:3e:5e:32:5e:01:21:72:df:3f:92:09:6d:b7:9b:85
------BEGIN CERTIFICATE-----
-MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW
-MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs
-IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG
-EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg
-R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A
-PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8
-Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL
-TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL
-5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7
-S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe
-2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
-FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap
-EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td
-EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv
-/NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN
-A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0
-abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF
-I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz
-4iIprn2DQKi6bA==
------END CERTIFICATE-----
-
-# Issuer: CN=GeoTrust Universal CA O=GeoTrust Inc.
-# Subject: CN=GeoTrust Universal CA O=GeoTrust Inc.
-# Label: "GeoTrust Universal CA"
-# Serial: 1
-# MD5 Fingerprint: 92:65:58:8b:a2:1a:31:72:73:68:5c:b4:a5:7a:07:48
-# SHA1 Fingerprint: e6:21:f3:35:43:79:05:9a:4b:68:30:9d:8a:2f:74:22:15:87:ec:79
-# SHA256 Fingerprint: a0:45:9b:9f:63:b2:25:59:f5:fa:5d:4c:6d:b3:f9:f7:2f:f1:93:42:03:35:78:f0:73:bf:1d:1b:46:cb:b9:12
------BEGIN CERTIFICATE-----
-MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW
-MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy
-c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE
-BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0
-IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV
-VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8
-cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT
-QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh
-F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v
-c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w
-mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd
-VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX
-teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ
-f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe
-Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+
-nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB
-/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY
-MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG
-9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
-aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX
-IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn
-ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z
-uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN
-Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja
-QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW
-koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9
-ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt
-DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm
-bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw=
------END CERTIFICATE-----
-
-# Issuer: CN=GeoTrust Universal CA 2 O=GeoTrust Inc.
-# Subject: CN=GeoTrust Universal CA 2 O=GeoTrust Inc.
-# Label: "GeoTrust Universal CA 2"
-# Serial: 1
-# MD5 Fingerprint: 34:fc:b8:d0:36:db:9e:14:b3:c2:f2:db:8f:e4:94:c7
-# SHA1 Fingerprint: 37:9a:19:7b:41:85:45:35:0c:a6:03:69:f3:3c:2e:af:47:4f:20:79
-# SHA256 Fingerprint: a0:23:4f:3b:c8:52:7c:a5:62:8e:ec:81:ad:5d:69:89:5d:a5:68:0d:c9:1d:1c:b8:47:7f:33:f8:78:b9:5b:0b
------BEGIN CERTIFICATE-----
-MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW
-MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy
-c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD
-VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1
-c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
-AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81
-WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG
-FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq
-XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL
-se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb
-KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd
-IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73
-y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt
-hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc
-QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4
-Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV
-HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV
-HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ
-KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
-dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ
-L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr
-Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo
-ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY
-T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz
-GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m
-1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV
-OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH
-6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX
-QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
------END CERTIFICATE-----
-
-# Issuer: CN=America Online Root Certification Authority 1 O=America Online Inc.
-# Subject: CN=America Online Root Certification Authority 1 O=America Online Inc.
-# Label: "America Online Root Certification Authority 1"
-# Serial: 1
-# MD5 Fingerprint: 14:f1:08:ad:9d:fa:64:e2:89:e7:1c:cf:a8:ad:7d:5e
-# SHA1 Fingerprint: 39:21:c1:15:c1:5d:0e:ca:5c:cb:5b:c4:f0:7d:21:d8:05:0b:56:6a
-# SHA256 Fingerprint: 77:40:73:12:c6:3a:15:3d:5b:c0:0b:4e:51:75:9c:df:da:c2:37:dc:2a:33:b6:79:46:e9:8e:9b:fa:68:0a:e3
------BEGIN CERTIFICATE-----
-MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
-bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2
-MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
-ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk
-hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym
-1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW
-OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb
-2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko
-O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU
-AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
-BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF
-Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb
-LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir
-oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C
-MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
-sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
------END CERTIFICATE-----
-
-# Issuer: CN=America Online Root Certification Authority 2 O=America Online Inc.
-# Subject: CN=America Online Root Certification Authority 2 O=America Online Inc.
-# Label: "America Online Root Certification Authority 2"
-# Serial: 1
-# MD5 Fingerprint: d6:ed:3c:ca:e2:66:0f:af:10:43:0d:77:9b:04:09:bf
-# SHA1 Fingerprint: 85:b5:ff:67:9b:0c:79:96:1f:c8:6e:44:22:00:46:13:db:17:92:84
-# SHA256 Fingerprint: 7d:3b:46:5a:60:14:e5:26:c0:af:fc:ee:21:27:d2:31:17:27:ad:81:1c:26:84:2d:00:6a:f3:73:06:cc:80:bd
------BEGIN CERTIFICATE-----
-MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
-bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2
-MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
-ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP
-ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC
-206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci
-KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2
-JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9
-BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e
-Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B
-PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67
-Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq
-Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ
-o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3
-+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj
-YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj
-FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
-AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn
-xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2
-LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc
-obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8
-CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe
-IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA
-DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F
-AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX
-Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb
-AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl
-Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw
-RY8mkaKO/qk=
------END CERTIFICATE-----
-
-# Issuer: CN=Visa eCommerce Root O=VISA OU=Visa International Service Association
-# Subject: CN=Visa eCommerce Root O=VISA OU=Visa International Service Association
-# Label: "Visa eCommerce Root"
-# Serial: 25952180776285836048024890241505565794
-# MD5 Fingerprint: fc:11:b8:d8:08:93:30:00:6d:23:f9:7e:eb:52:1e:02
-# SHA1 Fingerprint: 70:17:9b:86:8c:00:a4:fa:60:91:52:22:3f:9f:3e:32:bd:e0:05:62
-# SHA256 Fingerprint: 69:fa:c9:bd:55:fb:0a:c7:8d:53:bb:ee:5c:f1:d5:97:98:9f:d0:aa:ab:20:a2:51:51:bd:f1:73:3e:e7:d1:22
------BEGIN CERTIFICATE-----
-MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr
-MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl
-cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
-bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw
-CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h
-dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l
-cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h
-2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E
-lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV
-ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq
-299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t
-vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL
-dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD
-AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF
-AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR
-zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3
-LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd
-7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw
-++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
-398znM/jra6O1I7mT1GvFpLgXPYHDw==
------END CERTIFICATE-----
-
-# Issuer: CN=Certum CA O=Unizeto Sp. z o.o.
-# Subject: CN=Certum CA O=Unizeto Sp. z o.o.
-# Label: "Certum Root CA"
-# Serial: 65568
-# MD5 Fingerprint: 2c:8f:9f:66:1d:18:90:b1:47:26:9d:8e:86:82:8c:a9
-# SHA1 Fingerprint: 62:52:dc:40:f7:11:43:a2:2f:de:9e:f7:34:8e:06:42:51:b1:81:18
-# SHA256 Fingerprint: d8:e0:fe:bc:1d:b2:e3:8d:00:94:0f:37:d2:7d:41:34:4d:99:3e:73:4b:99:d5:65:6d:97:78:d4:d8:14:36:24
------BEGIN CERTIFICATE-----
-MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM
-MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
-QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM
-MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
-QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E
-jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo
-ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI
-ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu
-Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg
-AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7
-HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA
-uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa
-TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg
-xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q
-CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x
-O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs
-6GAqm4VKQPNriiTsBhYscw==
------END CERTIFICATE-----
-
-# Issuer: CN=AAA Certificate Services O=Comodo CA Limited
-# Subject: CN=AAA Certificate Services O=Comodo CA Limited
-# Label: "Comodo AAA Services root"
-# Serial: 1
-# MD5 Fingerprint: 49:79:04:b0:eb:87:19:ac:47:b0:bc:11:51:9b:74:d0
-# SHA1 Fingerprint: d1:eb:23:a4:6d:17:d6:8f:d9:25:64:c2:f1:f1:60:17:64:d8:e3:49
-# SHA256 Fingerprint: d7:a7:a0:fb:5d:7e:27:31:d7:71:e9:48:4e:bc:de:f7:1d:5f:0c:3e:0a:29:48:78:2b:c8:3e:e0:ea:69:9e:f4
------BEGIN CERTIFICATE-----
-MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb
-MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
-GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj
-YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL
-MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
-BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM
-GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua
-BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe
-3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4
-YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR
-rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm
-ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU
-oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
-MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v
-QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t
-b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF
-AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q
-GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
-Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2
-G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi
-l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3
-smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
------END CERTIFICATE-----
-
-# Issuer: CN=Secure Certificate Services O=Comodo CA Limited
-# Subject: CN=Secure Certificate Services O=Comodo CA Limited
-# Label: "Comodo Secure Services root"
-# Serial: 1
-# MD5 Fingerprint: d3:d9:bd:ae:9f:ac:67:24:b3:c8:1b:52:e1:b9:a9:bd
-# SHA1 Fingerprint: 4a:65:d5:f4:1d:ef:39:b8:b8:90:4a:4a:d3:64:81:33:cf:c7:a1:d1
-# SHA256 Fingerprint: bd:81:ce:3b:4f:65:91:d1:1a:67:b5:fc:7a:47:fd:ef:25:52:1b:f9:aa:4e:18:b9:e3:df:2e:34:a7:80:3b:e8
------BEGIN CERTIFICATE-----
-MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb
-MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
-GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp
-ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow
-fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
-A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV
-BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB
-BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM
-cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S
-HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996
-CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk
-3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz
-6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV
-HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
-EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv
-Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw
-Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww
-DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0
-5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
-Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI
-gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ
-aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl
-izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk=
------END CERTIFICATE-----
-
-# Issuer: CN=Trusted Certificate Services O=Comodo CA Limited
-# Subject: CN=Trusted Certificate Services O=Comodo CA Limited
-# Label: "Comodo Trusted Services root"
-# Serial: 1
-# MD5 Fingerprint: 91:1b:3f:6e:cd:9e:ab:ee:07:fe:1f:71:d2:b3:61:27
-# SHA1 Fingerprint: e1:9f:e3:0e:8b:84:60:9e:80:9b:17:0d:72:a8:c5:ba:6e:14:09:bd
-# SHA256 Fingerprint: 3f:06:e5:56:81:d4:96:f5:be:16:9e:b5:38:9f:9f:2b:8f:f6:1e:17:08:df:68:81:72:48:49:cd:5d:27:cb:69
------BEGIN CERTIFICATE-----
-MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb
-MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
-GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0
-aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla
-MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
-BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD
-VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW
-fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt
-TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL
-fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW
-1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7
-kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G
-A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD
-VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v
-ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo
-dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu
-Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/
-HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
-pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS
-jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+
-xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn
-dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi
------END CERTIFICATE-----
-
-# Issuer: CN=QuoVadis Root Certification Authority O=QuoVadis Limited OU=Root Certification Authority
-# Subject: CN=QuoVadis Root Certification Authority O=QuoVadis Limited OU=Root Certification Authority
-# Label: "QuoVadis Root CA"
-# Serial: 985026699
-# MD5 Fingerprint: 27:de:36:fe:72:b7:00:03:00:9d:f4:f0:1e:6c:04:24
-# SHA1 Fingerprint: de:3f:40:bd:50:93:d3:9b:6c:60:f6:da:bc:07:62:01:00:89:76:c9
-# SHA256 Fingerprint: a4:5e:de:3b:bb:f0:9c:8a:e1:5c:72:ef:c0:72:68:d6:93:a2:1c:99:6f:d5:1e:67:ca:07:94:60:fd:6d:88:73
------BEGIN CERTIFICATE-----
-MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC
-TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz
-MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw
-IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR
-dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp
-li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D
-rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ
-WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug
-F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU
-xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC
-Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv
-dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw
-ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl
-IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh
-c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy
-ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
-Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI
-KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T
-KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq
-y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p
-dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD
-VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL
-MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk
-fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8
-7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R
-cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y
-mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW
-xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK
-SnQ2+Q==
------END CERTIFICATE-----
-
-# Issuer: CN=QuoVadis Root CA 2 O=QuoVadis Limited
-# Subject: CN=QuoVadis Root CA 2 O=QuoVadis Limited
-# Label: "QuoVadis Root CA 2"
-# Serial: 1289
-# MD5 Fingerprint: 5e:39:7b:dd:f8:ba:ec:82:e9:ac:62:ba:0c:54:00:2b
-# SHA1 Fingerprint: ca:3a:fb:cf:12:40:36:4b:44:b2:16:20:88:80:48:39:19:93:7c:f7
-# SHA256 Fingerprint: 85:a0:dd:7d:d7:20:ad:b7:ff:05:f8:3d:54:2b:20:9d:c7:ff:45:28:f7:d6:77:b1:83:89:fe:a5:e5:c4:9e:86
------BEGIN CERTIFICATE-----
-MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
-GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
-b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV
-BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W
-YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa
-GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg
-Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J
-WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB
-rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp
-+ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1
-ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i
-Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz
-PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og
-/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH
-oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI
-yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud
-EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2
-A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL
-MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
-ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f
-BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn
-g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl
-fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K
-WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha
-B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc
-hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR
-TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD
-mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z
-ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y
-4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza
-8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
------END CERTIFICATE-----
-
-# Issuer: CN=QuoVadis Root CA 3 O=QuoVadis Limited
-# Subject: CN=QuoVadis Root CA 3 O=QuoVadis Limited
-# Label: "QuoVadis Root CA 3"
-# Serial: 1478
-# MD5 Fingerprint: 31:85:3c:62:94:97:63:b9:aa:fd:89:4e:af:6f:e0:cf
-# SHA1 Fingerprint: 1f:49:14:f7:d8:74:95:1d:dd:ae:02:c0:be:fd:3a:2d:82:75:51:85
-# SHA256 Fingerprint: 18:f1:fc:7f:20:5d:f8:ad:dd:eb:7f:e0:07:dd:57:e3:af:37:5a:9c:4d:8d:73:54:6b:f4:f1:fe:d1:e1:8d:35
------BEGIN CERTIFICATE-----
-MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
-GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
-b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV
-BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W
-YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM
-V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB
-4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr
-H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd
-8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv
-vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT
-mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe
-btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc
-T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt
-WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ
-c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A
-4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD
-VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG
-CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0
-aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
-aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu
-dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw
-czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G
-A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC
-TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg
-Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0
-7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem
-d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd
-+LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B
-4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN
-t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x
-DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57
-k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s
-zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j
-Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT
-mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK
-4SVhM7JZG+Ju1zdXtg2pEto=
------END CERTIFICATE-----
-
-# Issuer: O=SECOM Trust.net OU=Security Communication RootCA1
-# Subject: O=SECOM Trust.net OU=Security Communication RootCA1
-# Label: "Security Communication Root CA"
-# Serial: 0
-# MD5 Fingerprint: f1:bc:63:6a:54:e0:b5:27:f5:cd:e7:1a:e3:4d:6e:4a
-# SHA1 Fingerprint: 36:b1:2b:49:f9:81:9e:d7:4c:9e:bc:38:0f:c6:56:8f:5d:ac:b2:f7
-# SHA256 Fingerprint: e7:5e:72:ed:9f:56:0e:ec:6e:b4:80:00:73:a4:3f:c3:ad:19:19:5a:39:22:82:01:78:95:97:4a:99:02:6b:6c
------BEGIN CERTIFICATE-----
-MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY
-MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t
-dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5
-WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD
-VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8
-9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ
-DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9
-Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N
-QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ
-xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G
-A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T
-AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG
-kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr
-Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5
-Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU
-JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot
-RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw==
------END CERTIFICATE-----
-
-# Issuer: CN=Sonera Class2 CA O=Sonera
-# Subject: CN=Sonera Class2 CA O=Sonera
-# Label: "Sonera Class 2 Root CA"
-# Serial: 29
-# MD5 Fingerprint: a3:ec:75:0f:2e:88:df:fa:48:01:4e:0b:5c:48:6f:fb
-# SHA1 Fingerprint: 37:f7:6d:e6:07:7c:90:c5:b1:3e:93:1a:b7:41:10:b4:f2:e4:9a:27
-# SHA256 Fingerprint: 79:08:b4:03:14:c1:38:10:0b:51:8d:07:35:80:7f:fb:fc:f8:51:8a:00:95:33:71:05:ba:38:6b:15:3d:d9:27
------BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
-MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx
-MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV
-BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o
-Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt
-5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s
-3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej
-vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu
-8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw
-DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG
-MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil
-zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/
-3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD
-FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6
-Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2
-ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M
------END CERTIFICATE-----
-
-# Issuer: CN=Staat der Nederlanden Root CA O=Staat der Nederlanden
-# Subject: CN=Staat der Nederlanden Root CA O=Staat der Nederlanden
-# Label: "Staat der Nederlanden Root CA"
-# Serial: 10000010
-# MD5 Fingerprint: 60:84:7c:5a:ce:db:0c:d4:cb:a7:e9:fe:02:c6:a9:c0
-# SHA1 Fingerprint: 10:1d:fa:3f:d5:0b:cb:bb:9b:b5:60:0c:19:55:a4:1a:f4:73:3a:04
-# SHA256 Fingerprint: d4:1d:82:9e:8c:16:59:82:2a:f9:3f:ce:62:bf:fc:de:26:4f:c8:4e:8b:95:0c:5f:f2:75:d0:52:35:46:95:a3
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJO
-TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFh
-dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEy
-MTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4wHAYDVQQKExVTdGFhdCBkZXIgTmVk
-ZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENB
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFtvszn
-ExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw71
-9tV2U02PjLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MO
-hXeiD+EwR+4A5zN9RGcaC1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+U
-tFE5A3+y3qcym7RHjm+0Sq7lr7HcsBthvJly3uSJt3omXdozSVtSnA71iq3DuD3o
-BmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn622r+I/q85Ej0ZytqERAh
-SQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRVHSAAMDww
-OgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMv
-cm9vdC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA
-7Jbg0zTBLL9s+DANBgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k
-/rvuFbQvBgwp8qiSpGEN/KtcCFtREytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzm
-eafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbwMVcoEoJz6TMvplW0C5GUR5z6
-u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3ynGQI0DvDKcWy
-7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
-iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
------END CERTIFICATE-----
-
-# Issuer: O=TDC Internet OU=TDC Internet Root CA
-# Subject: O=TDC Internet OU=TDC Internet Root CA
-# Label: "TDC Internet Root CA"
-# Serial: 986490188
-# MD5 Fingerprint: 91:f4:03:55:20:a1:f8:63:2c:62:de:ac:fb:61:1c:8e
-# SHA1 Fingerprint: 21:fc:bd:8e:7f:6c:af:05:1b:d1:b3:43:ec:a8:e7:61:47:f2:0f:8a
-# SHA256 Fingerprint: 48:98:c6:88:8c:0c:ff:b0:d3:e3:1a:ca:8a:37:d4:e3:51:5f:f7:46:d0:26:35:d8:66:46:cf:a0:a3:18:5a:e7
------BEGIN CERTIFICATE-----
-MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJE
-SzEVMBMGA1UEChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQg
-Um9vdCBDQTAeFw0wMTA0MDUxNjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNV
-BAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJuZXQxHTAbBgNVBAsTFFREQyBJbnRl
-cm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxLhA
-vJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20jxsNu
-Zp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a
-0vnRrEvLznWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc1
-4izbSysseLlJ28TQx5yc5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGN
-eGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcD
-R0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZIAYb4QgEBBAQDAgAHMGUG
-A1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMMVERDIElu
-dGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxME
-Q1JMMTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3
-WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAw
-HQYDVR0OBBYEFGxkAcf9hW2syNqeUAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJ
-KoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4IBAQBO
-Q8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540mgwV5dOy0uaOX
-wTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
-2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm89
-9qNLPg7kbWzbO0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0
-jUNAE4z9mQNUecYu6oah9jrUCbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38
-aQNiuJkFBT1reBK9sG9l
------END CERTIFICATE-----
-
-# Issuer: CN=UTN - DATACorp SGC O=The USERTRUST Network OU=http://www.usertrust.com
-# Subject: CN=UTN - DATACorp SGC O=The USERTRUST Network OU=http://www.usertrust.com
-# Label: "UTN DATACorp SGC Root CA"
-# Serial: 91374294542884689855167577680241077609
-# MD5 Fingerprint: b3:a5:3e:77:21:6d:ac:4a:c0:c9:fb:d5:41:3d:ca:06
-# SHA1 Fingerprint: 58:11:9f:0e:12:82:87:ea:50:fd:d9:87:45:6f:4f:78:dc:fa:d6:d4
-# SHA256 Fingerprint: 85:fb:2f:91:dd:12:27:5a:01:45:b6:36:53:4f:84:02:4a:d6:8b:69:b8:ee:88:68:4f:f7:11:37:58:05:b3:48
------BEGIN CERTIFICATE-----
-MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB
-kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw
-IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG
-EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD
-VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu
-dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN
-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6
-E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ
-D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK
-4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq
-lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW
-bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB
-o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT
-MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js
-LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr
-BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB
-AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
-Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj
-j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH
-KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv
-2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3
-mfnGV/TJVTl4uix5yaaIK/QI
------END CERTIFICATE-----
-
-# Issuer: CN=UTN-USERFirst-Hardware O=The USERTRUST Network OU=http://www.usertrust.com
-# Subject: CN=UTN-USERFirst-Hardware O=The USERTRUST Network OU=http://www.usertrust.com
-# Label: "UTN USERFirst Hardware Root CA"
-# Serial: 91374294542884704022267039221184531197
-# MD5 Fingerprint: 4c:56:41:e5:0d:bb:2b:e8:ca:a3:ed:18:08:ad:43:39
-# SHA1 Fingerprint: 04:83:ed:33:99:ac:36:08:05:87:22:ed:bc:5e:46:00:e3:be:f9:d7
-# SHA256 Fingerprint: 6e:a5:47:41:d0:04:66:7e:ed:1b:48:16:63:4a:a3:a7:9e:6e:4b:96:95:0f:82:79:da:fc:8d:9b:d8:81:21:37
------BEGIN CERTIFICATE-----
-MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB
-lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt
-SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG
-A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe
-MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v
-d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh
-cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn
-0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ
-M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a
-MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd
-oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI
-DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy
-oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD
-VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0
-dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy
-bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF
-BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
-//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli
-CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE
-CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t
-3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS
-KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA==
------END CERTIFICATE-----
-
-# Issuer: CN=Chambers of Commerce Root O=AC Camerfirma SA CIF A82743287 OU=http://www.chambersign.org
-# Subject: CN=Chambers of Commerce Root O=AC Camerfirma SA CIF A82743287 OU=http://www.chambersign.org
-# Label: "Camerfirma Chambers of Commerce Root"
-# Serial: 0
-# MD5 Fingerprint: b0:01:ee:14:d9:af:29:18:94:76:8e:f1:69:33:2a:84
-# SHA1 Fingerprint: 6e:3a:55:a4:19:0c:19:5c:93:84:3c:c0:db:72:2e:31:30:61:f0:b1
-# SHA256 Fingerprint: 0c:25:8a:12:a5:67:4a:ef:25:f2:8b:a7:dc:fa:ec:ee:a3:48:e5:41:e6:f5:cc:4e:e6:3b:71:b3:61:60:6a:c3
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEn
-MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
-ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMg
-b2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAxNjEzNDNaFw0zNzA5MzAxNjEzNDRa
-MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBB
-ODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIw
-IAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0B
-AQEFAAOCAQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtb
-unXF/KGIJPov7coISjlUxFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0d
-BmpAPrMMhe5cG3nCYsS4No41XQEMIwRHNaqbYE6gZj3LJgqcQKH0XZi/caulAGgq
-7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jWDA+wWFjbw2Y3npuRVDM3
-0pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFVd9oKDMyX
-roDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIG
-A1UdEwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5j
-aGFtYmVyc2lnbi5vcmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p
-26EpW1eLTXYGduHRooowDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIA
-BzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hhbWJlcnNpZ24ub3JnMCcGA1Ud
-EgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYDVR0gBFEwTzBN
-BgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
-aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEB
-AAxBl8IahsAifJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZd
-p0AJPaxJRUXcLo0waLIJuvvDL8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi
-1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wNUPf6s+xCX6ndbcj0dc97wXImsQEc
-XCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/nADydb47kMgkdTXg0
-eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1erfu
-tGWaIZDgqtCYvDi1czyL+Nw=
------END CERTIFICATE-----
-
-# Issuer: CN=Global Chambersign Root O=AC Camerfirma SA CIF A82743287 OU=http://www.chambersign.org
-# Subject: CN=Global Chambersign Root O=AC Camerfirma SA CIF A82743287 OU=http://www.chambersign.org
-# Label: "Camerfirma Global Chambersign Root"
-# Serial: 0
-# MD5 Fingerprint: c5:e6:7b:bf:06:d0:4f:43:ed:c4:7a:65:8a:fb:6b:19
-# SHA1 Fingerprint: 33:9b:6b:14:50:24:9b:55:7a:01:87:72:84:d9:e0:2f:c3:d2:d8:e9
-# SHA256 Fingerprint: ef:3c:b4:17:fc:8e:bf:6f:97:87:6c:9e:4e:ce:39:de:1e:a5:fe:64:91:41:d1:02:8b:7d:11:c0:b2:29:8c:ed
------BEGIN CERTIFICATE-----
-MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEn
-MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
-ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENo
-YW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYxNDE4WhcNMzcwOTMwMTYxNDE4WjB9
-MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgy
-NzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4G
-A1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUA
-A4IBDQAwggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0
-Mi+ITaFgCPS3CU6gSS9J1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/s
-QJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8Oby4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpV
-eAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl6DJWk0aJqCWKZQbua795
-B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c8lCrEqWh
-z0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0T
-AQH/BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1i
-ZXJzaWduLm9yZy9jaGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4w
-TcbOX60Qq+UDpfqpFDAOBgNVHQ8BAf8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAH
-MCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBjaGFtYmVyc2lnbi5vcmcwKgYD
-VR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9yZzBbBgNVHSAE
-VDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
-bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0B
-AQUFAAOCAQEAPDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUM
-bKGKfKX0j//U2K0X1S0E0T9YgOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXi
-ryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJPJ7oKXqJ1/6v/2j1pReQvayZzKWG
-VwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4IBHNfTIzSJRUTN3c
-ecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREest2d/
-AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
------END CERTIFICATE-----
-
-# Issuer: CN=NetLock Kozjegyzoi (Class A) Tanusitvanykiado O=NetLock Halozatbiztonsagi Kft. OU=Tanusitvanykiadok
-# Subject: CN=NetLock Kozjegyzoi (Class A) Tanusitvanykiado O=NetLock Halozatbiztonsagi Kft. OU=Tanusitvanykiadok
-# Label: "NetLock Notary (Class A) Root"
-# Serial: 259
-# MD5 Fingerprint: 86:38:6d:5e:49:63:6c:85:5c:db:6d:dc:94:b7:d0:f7
-# SHA1 Fingerprint: ac:ed:5f:65:53:fd:25:ce:01:5f:1f:7a:48:3b:6a:74:9f:61:78:c6
-# SHA256 Fingerprint: 7f:12:cd:5f:7e:5e:29:0e:c7:d8:51:79:d5:b7:2c:20:a5:be:75:08:ff:db:5b:f8:1a:b9:68:4a:7f:c9:f6:67
------BEGIN CERTIFICATE-----
-MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhV
-MRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMe
-TmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0
-dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFzcyBB
-KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oXDTE5MDIxOTIzMTQ0
-N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhC
-dWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQu
-MRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBL
-b3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSMD7tM9DceqQWC2ObhbHDqeLVu0ThEDaiD
-zl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZz+qMkjvN9wfcZnSX9EUi
-3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC/tmwqcm8
-WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LY
-Oph7tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2Esi
-NCubMvJIH5+hCoR64sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCC
-ApswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4
-QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZRUxFTSEgRXplbiB0
-YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRhdGFz
-aSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
-IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtm
-ZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMg
-ZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVs
-amFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJhc2EgbWVndGFsYWxoYXRv
-IGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBzOi8vd3d3
-Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6
-ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1
-YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3Qg
-dG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRs
-b2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNAbmV0bG9jay5uZXQuMA0G
-CSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5ayZrU3/b39/zcT0mwBQO
-xmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjPytoUMaFP
-0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQ
-QeJBCWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxk
-f1qbFFgBJ34TUMdrKuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK
-8CtmdWOMovsEPoMOmzbwGOQmIMOM8CgHrTwXZoi1/baI
------END CERTIFICATE-----
-
-# Issuer: CN=NetLock Uzleti (Class B) Tanusitvanykiado O=NetLock Halozatbiztonsagi Kft. OU=Tanusitvanykiadok
-# Subject: CN=NetLock Uzleti (Class B) Tanusitvanykiado O=NetLock Halozatbiztonsagi Kft. OU=Tanusitvanykiadok
-# Label: "NetLock Business (Class B) Root"
-# Serial: 105
-# MD5 Fingerprint: 39:16:aa:b9:6a:41:e1:14:69:df:9e:6c:3b:72:dc:b6
-# SHA1 Fingerprint: 87:9f:4b:ee:05:df:98:58:3b:e3:60:d6:33:e7:0d:3f:fe:98:71:af
-# SHA256 Fingerprint: 39:df:7b:68:2b:7b:93:8f:84:71:54:81:cc:de:8d:60:d8:f2:2e:c5:98:87:7d:0a:aa:c1:2b:59:18:2b:03:12
------BEGIN CERTIFICATE-----
-MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUx
-ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
-b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQD
-EylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikgVGFudXNpdHZhbnlraWFkbzAeFw05
-OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYDVQQGEwJIVTERMA8G
-A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh
-Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5l
-dExvY2sgVXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqG
-SIb3DQEBAQUAA4GNADCBiQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xK
-gZjupNTKihe5In+DCnVMm8Bp2GQ5o+2So/1bXHQawEfKOml2mrriRBf8TKPV/riX
-iK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr1nGTLbO/CVRY7QbrqHvc
-Q7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8E
-BAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1G
-SUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFu
-b3MgU3pvbGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBh
-bGFwamFuIGtlc3p1bHQuIEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExv
-Y2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGln
-aXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0
-IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
-c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGph
-biBhIGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJo
-ZXRvIGF6IGVsbGVub3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBP
-UlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmlj
-YXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBo
-dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNA
-bmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06
-sPgzTEdM43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXa
-n3BukxowOR0w2y7jfLKRstE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKS
-NitjrFgBazMpUIaD8QFI
------END CERTIFICATE-----
-
-# Issuer: CN=NetLock Expressz (Class C) Tanusitvanykiado O=NetLock Halozatbiztonsagi Kft. OU=Tanusitvanykiadok
-# Subject: CN=NetLock Expressz (Class C) Tanusitvanykiado O=NetLock Halozatbiztonsagi Kft. OU=Tanusitvanykiadok
-# Label: "NetLock Express (Class C) Root"
-# Serial: 104
-# MD5 Fingerprint: 4f:eb:f1:f0:70:c2:80:63:5d:58:9f:da:12:3c:a9:c4
-# SHA1 Fingerprint: e3:92:51:2f:0a:cf:f5:05:df:f6:de:06:7f:75:37:e1:65:ea:57:4b
-# SHA256 Fingerprint: 0b:5e:ed:4e:84:64:03:cf:55:e0:65:84:84:40:ed:2a:82:75:8b:f5:b9:aa:1f:25:3d:46:13:cf:a0:80:ff:3f
------BEGIN CERTIFICATE-----
-MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUx
-ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
-b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQD
-EytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBDKSBUYW51c2l0dmFueWtpYWRvMB4X
-DTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJBgNVBAYTAkhVMREw
-DwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9u
-c2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMr
-TmV0TG9jayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNA
-OoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3ZW3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC
-2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63euyucYT2BDMIJTLrdKwW
-RMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQwDgYDVR0P
-AQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEW
-ggJNRklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0
-YWxhbm9zIFN6b2xnYWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFz
-b2sgYWxhcGphbiBrZXN6dWx0LiBBIGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBO
-ZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1iaXp0b3NpdGFzYSB2ZWRpLiBB
-IGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0ZWxlIGF6IGVs
-b2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
-ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25s
-YXBqYW4gYSBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kg
-a2VyaGV0byBheiBlbGxlbm9yemVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4g
-SU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5kIHRoZSB1c2Ugb2YgdGhpcyBjZXJ0
-aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQUyBhdmFpbGFibGUg
-YXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwgYXQg
-Y3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmY
-ta3UzbM2xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2g
-pO0u9f38vf5NNwgMvOOWgyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4
-Fp1hBWeAyNDYpQcCNJgEjTME1A==
------END CERTIFICATE-----
-
-# Issuer: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com
-# Subject: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com
-# Label: "XRamp Global CA Root"
-# Serial: 107108908803651509692980124233745014957
-# MD5 Fingerprint: a1:0b:44:b3:ca:10:d8:00:6e:9d:0f:d8:0f:92:0a:d1
-# SHA1 Fingerprint: b8:01:86:d1:eb:9c:86:a5:41:04:cf:30:54:f3:4c:52:b7:e5:58:c6
-# SHA256 Fingerprint: ce:cd:dc:90:50:99:d8:da:df:c5:b1:d2:09:b7:37:cb:e2:c1:8c:fb:2c:10:c0:ff:0b:cf:0d:32:86:fc:1a:a2
------BEGIN CERTIFICATE-----
-MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB
-gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk
-MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY
-UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx
-NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3
-dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy
-dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6
-38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP
-KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q
-DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4
-qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa
-JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi
-PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P
-BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs
-jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0
-eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD
-ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR
-vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
-qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa
-IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy
-i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ
-O+7ETPTsJ3xCwnR8gooJybQDJbw=
------END CERTIFICATE-----
-
-# Issuer: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority
-# Subject: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority
-# Label: "Go Daddy Class 2 CA"
-# Serial: 0
-# MD5 Fingerprint: 91:de:06:25:ab:da:fd:32:17:0c:bb:25:17:2a:84:67
-# SHA1 Fingerprint: 27:96:ba:e6:3f:18:01:e2:77:26:1b:a0:d7:77:70:02:8f:20:ee:e4
-# SHA256 Fingerprint: c3:84:6b:f2:4b:9e:93:ca:64:27:4c:0e:c6:7c:1e:cc:5e:02:4f:fc:ac:d2:d7:40:19:35:0e:81:fe:54:6a:e4
------BEGIN CERTIFICATE-----
-MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh
-MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE
-YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3
-MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo
-ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg
-MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN
-ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA
-PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w
-wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi
-EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY
-avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+
-YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE
-sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h
-/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5
-IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
-ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy
-OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P
-TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
-HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER
-dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf
-ReYNnyicsbkqWletNw+vHX/bvZ8=
------END CERTIFICATE-----
-
-# Issuer: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority
-# Subject: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority
-# Label: "Starfield Class 2 CA"
-# Serial: 0
-# MD5 Fingerprint: 32:4a:4b:bb:c8:63:69:9b:be:74:9a:c6:dd:1d:46:24
-# SHA1 Fingerprint: ad:7e:1c:28:b0:64:ef:8f:60:03:40:20:14:c3:d0:e3:37:0e:b5:8a
-# SHA256 Fingerprint: 14:65:fa:20:53:97:b8:76:fa:a6:f0:a9:95:8e:55:90:e4:0f:cc:7f:aa:4f:b7:c2:c8:67:75:21:fb:5f:b6:58
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl
-MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp
-U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw
-NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE
-ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp
-ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3
-DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf
-8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN
-+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0
-X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa
-K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA
-1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G
-A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR
-zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0
-YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD
-bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w
-DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3
-L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D
-eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
-xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp
-VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY
-WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=
------END CERTIFICATE-----
-
-# Issuer: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing
-# Subject: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing
-# Label: "StartCom Certification Authority"
-# Serial: 1
-# MD5 Fingerprint: 22:4d:8f:8a:fc:f7:35:c2:bb:57:34:90:7b:8b:22:16
-# SHA1 Fingerprint: 3e:2b:f7:f2:03:1b:96:f3:8c:e6:c4:d8:a8:5d:3e:2d:58:47:6a:0f
-# SHA256 Fingerprint: c7:66:a9:be:f2:d4:07:1c:86:3a:31:aa:49:20:e8:13:b2:d1:98:60:8c:b7:b7:cf:e2:11:43:b8:36:df:09:ea
------BEGIN CERTIFICATE-----
-MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW
-MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg
-Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM2WhcNMzYwOTE3MTk0NjM2WjB9
-MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi
-U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh
-cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA
-A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk
-pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf
-OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C
-Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT
-Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi
-HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM
-Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w
-+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+
-Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3
-Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B
-26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID
-AQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
-FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9j
-ZXJ0LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3Js
-LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFM
-BgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0
-Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRwOi8vY2VydC5zdGFy
-dGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYgU3Rh
-cnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlh
-YmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2Yg
-dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFp
-bGFibGUgYXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJ
-YIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNT
-TCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEAFmyZ
-9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8
-jhvh3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUW
-FjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJz
-ewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1
-ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3fsNrarnDy0RLrHiQi+fHLB5L
-EUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZEoalHmdkrQYu
-L6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
-yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuC
-O3NJo2pXh5Tl1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6V
-um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh
-NOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14=
------END CERTIFICATE-----
-
-# Issuer: O=Government Root Certification Authority
-# Subject: O=Government Root Certification Authority
-# Label: "Taiwan GRCA"
-# Serial: 42023070807708724159991140556527066870
-# MD5 Fingerprint: 37:85:44:53:32:45:1f:20:f0:f3:95:e1:25:c4:43:4e
-# SHA1 Fingerprint: f4:8b:11:bf:de:ab:be:94:54:20:71:e6:41:de:6b:be:88:2b:40:b9
-# SHA256 Fingerprint: 76:00:29:5e:ef:e8:5b:9e:1f:d6:24:db:76:06:2a:aa:ae:59:81:8a:54:d2:77:4c:d4:c0:b2:c0:11:31:e1:b3
------BEGIN CERTIFICATE-----
-MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/
-MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1ow
-PzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZp
-Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
-AJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qNw8XR
-IePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1q
-gQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKy
-yhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAts
-F/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2
-jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvx
-ls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FC
-VGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHK
-YS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoH
-EgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThN
-Xo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1Ud
-DgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkGBGcqBwAE
-MTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqK
-UWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
-TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyf
-qzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaK
-ZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFE
-JPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7
-hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1
-EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6Mm
-nD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WX
-udpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44Vbnz
-ssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDe
-LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl
-pYYsfPQS
------END CERTIFICATE-----
-
-# Issuer: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068
-# Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068
-# Label: "Firmaprofesional Root CA"
-# Serial: 1
-# MD5 Fingerprint: 11:92:79:40:3c:b1:83:40:e5:ab:66:4a:67:92:80:df
-# SHA1 Fingerprint: a9:62:8f:4b:98:a9:1b:48:35:ba:d2:c1:46:32:86:bb:66:64:6a:8c
-# SHA256 Fingerprint: c1:cf:0b:52:09:64:35:e3:f1:b7:1d:aa:ec:45:5a:23:11:c8:40:4f:55:83:a9:e2:13:c6:9d:85:7d:94:33:05
------BEGIN CERTIFICATE-----
-MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMx
-IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1
-dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
-MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w
-HhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTELMAkGA1UEBhMCRVMx
-IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1
-dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
-MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5u
-Cp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5Vj1H5WuretXDE7aTt/6MNbg9kUDGvASdY
-rv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJHlShbz++AbOCQl4oBPB3z
-hxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf3H5idPay
-BQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcL
-iam8NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcb
-AgMBAAGjgZ8wgZwwKgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lv
-bmFsLmNvbTASBgNVHRMBAf8ECDAGAQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0
-MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E
-FgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQADggEBAEdz/o0n
-VPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
-u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36m
-hoEyIwOdyPdfwUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzfl
-ZKG+TQyTmAyX9odtsz/ny4Cm7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBp
-QWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YGVM+h4k0460tQtcsm9MracEpqoeJ5
-quGnM/b9Sh/22WA=
------END CERTIFICATE-----
-
-# Issuer: CN=Swisscom Root CA 1 O=Swisscom OU=Digital Certificate Services
-# Subject: CN=Swisscom Root CA 1 O=Swisscom OU=Digital Certificate Services
-# Label: "Swisscom Root CA 1"
-# Serial: 122348795730808398873664200247279986742
-# MD5 Fingerprint: f8:38:7c:77:88:df:2c:16:68:2e:c2:e2:52:4b:b8:f9
-# SHA1 Fingerprint: 5f:3a:fc:0a:8b:64:f6:86:67:34:74:df:7e:a9:a2:fe:f9:fa:7a:51
-# SHA256 Fingerprint: 21:db:20:12:36:60:bb:2e:d4:18:20:5d:a1:1e:e7:a8:5a:65:e2:bc:6e:55:b5:af:7e:78:99:c8:a2:66:d9:2e
------BEGIN CERTIFICATE-----
-MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBk
-MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0
-YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3Qg
-Q0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4MTgyMjA2MjBaMGQxCzAJBgNVBAYT
-AmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZp
-Y2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIICIjAN
-BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9
-m2BtRsiMMW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdih
-FvkcxC7mlSpnzNApbjyFNDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/
-TilftKaNXXsLmREDA/7n29uj/x2lzZAeAR81sH8A25Bvxn570e56eqeqDFdvpG3F
-EzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkCb6dJtDZd0KTeByy2dbco
-kdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn7uHbHaBu
-HYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNF
-vJbNcA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo
-19AOeCMgkckkKmUpWyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjC
-L3UcPX7ape8eYIVpQtPM+GP+HkM5haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJW
-bjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNYMUJDLXT5xp6mig/p/r+D5kNX
-JLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw
-FDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
-BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzc
-K6FptWfUjNP9MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzf
-ky9NfEBWMXrrpA9gzXrzvsMnjgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7Ik
-Vh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQMbFamIp1TpBcahQq4FJHgmDmHtqB
-sfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4HVtA4oJVwIHaM190e
-3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtlvrsR
-ls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ip
-mXeascClOS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HH
-b6D0jqTsNFFbjCYDcKF31QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksf
-rK/7DZBaZmBwXarNeNQk7shBoJMBkpxqnvy5JMWzFYJ+vq6VK+uxwNrjAWALXmms
-hFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCyx/yP2FS1k2Kdzs9Z+z0Y
-zirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMWNY6E0F/6
-MBr1mmz0DlP5OlvRHA==
------END CERTIFICATE-----
-
-# Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com
-# Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com
-# Label: "DigiCert Assured ID Root CA"
-# Serial: 17154717934120587862167794914071425081
-# MD5 Fingerprint: 87:ce:0b:7b:2a:0e:49:00:e1:58:71:9b:37:a8:93:72
-# SHA1 Fingerprint: 05:63:b8:63:0d:62:d7:5a:bb:c8:ab:1e:4b:df:b5:a8:99:b2:4d:43
-# SHA256 Fingerprint: 3e:90:99:b5:01:5e:8f:48:6c:00:bc:ea:9d:11:1e:e7:21:fa:ba:35:5a:89:bc:f1:df:69:56:1e:3d:c6:32:5c
------BEGIN CERTIFICATE-----
-MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
-b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
-cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi
-MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c
-JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP
-mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+
-wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4
-VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/
-AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB
-AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
-BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun
-pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC
-dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf
-fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm
-NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx
-H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
-+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
------END CERTIFICATE-----
-
-# Issuer: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com
-# Subject: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com
-# Label: "DigiCert Global Root CA"
-# Serial: 10944719598952040374951832963794454346
-# MD5 Fingerprint: 79:e4:a9:84:0d:7d:3a:96:d7:c0:4f:e2:43:4c:89:2e
-# SHA1 Fingerprint: a8:98:5d:3a:65:e5:e5:c4:b2:d7:d6:6d:40:c6:dd:2f:b1:9c:54:36
-# SHA256 Fingerprint: 43:48:a0:e9:44:4c:78:cb:26:5e:05:8d:5e:89:44:b4:d8:4f:96:62:bd:26:db:25:7f:89:34:a4:43:c7:01:61
------BEGIN CERTIFICATE-----
-MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
-QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
-MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
-b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
-CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
-nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
-43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
-T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
-gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
-BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
-TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
-DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
-hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
-06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
-PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
-YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
-CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
------END CERTIFICATE-----
-
-# Issuer: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com
-# Subject: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com
-# Label: "DigiCert High Assurance EV Root CA"
-# Serial: 3553400076410547919724730734378100087
-# MD5 Fingerprint: d4:74:de:57:5c:39:b2:d3:9c:85:83:c5:c0:65:49:8a
-# SHA1 Fingerprint: 5f:b7:ee:06:33:e2:59:db:ad:0c:4c:9a:e6:d3:8f:1a:61:c7:dc:25
-# SHA256 Fingerprint: 74:31:e5:f4:c3:c1:ce:46:90:77:4f:0b:61:e0:54:40:88:3b:a9:a0:1e:d0:0b:a6:ab:d7:80:6e:d3:b1:18:cf
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
-ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
-MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
-LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
-RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
-+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
-PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
-xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
-Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
-hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
-EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
-MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
-FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
-nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
-eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
-hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
-Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
-vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
-+OkuE6N36B9K
------END CERTIFICATE-----
-
-# Issuer: CN=Class 2 Primary CA O=Certplus
-# Subject: CN=Class 2 Primary CA O=Certplus
-# Label: "Certplus Class 2 Primary CA"
-# Serial: 177770208045934040241468760488327595043
-# MD5 Fingerprint: 88:2c:8c:52:b8:a2:3c:f3:f7:bb:03:ea:ae:ac:42:0b
-# SHA1 Fingerprint: 74:20:74:41:72:9c:dd:92:ec:79:31:d8:23:10:8d:c2:81:92:e2:bb
-# SHA256 Fingerprint: 0f:99:3c:8a:ef:97:ba:af:56:87:14:0e:d5:9a:d1:82:1b:b4:af:ac:f0:aa:9a:58:b5:d5:7a:33:8a:3a:fb:cb
------BEGIN CERTIFICATE-----
-MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw
-PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz
-cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9
-MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz
-IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ
-ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR
-VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL
-kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd
-EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas
-H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0
-HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud
-DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4
-QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu
-Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/
-AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8
-yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR
-FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA
-ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB
-kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
-l7+ijrRU
------END CERTIFICATE-----
-
-# Issuer: CN=DST Root CA X3 O=Digital Signature Trust Co.
-# Subject: CN=DST Root CA X3 O=Digital Signature Trust Co.
-# Label: "DST Root CA X3"
-# Serial: 91299735575339953335919266965803778155
-# MD5 Fingerprint: 41:03:52:dc:0f:f7:50:1b:16:f0:02:8e:ba:6f:45:c5
-# SHA1 Fingerprint: da:c9:02:4f:54:d8:f6:df:94:93:5f:b1:73:26:38:ca:6a:d7:7c:13
-# SHA256 Fingerprint: 06:87:26:03:31:a7:24:03:d9:09:f1:05:e6:9b:cf:0d:32:e1:bd:24:93:ff:c6:d9:20:6d:11:bc:d6:77:07:39
------BEGIN CERTIFICATE-----
-MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/
-MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
-DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow
-PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD
-Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O
-rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq
-OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b
-xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw
-7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD
-aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
-HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG
-SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69
-ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr
-AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz
-R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5
-JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo
-Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
------END CERTIFICATE-----
-
-# Issuer: CN=DST ACES CA X6 O=Digital Signature Trust OU=DST ACES
-# Subject: CN=DST ACES CA X6 O=Digital Signature Trust OU=DST ACES
-# Label: "DST ACES CA X6"
-# Serial: 17771143917277623872238992636097467865
-# MD5 Fingerprint: 21:d8:4c:82:2b:99:09:33:a2:eb:14:24:8d:8e:5f:e8
-# SHA1 Fingerprint: 40:54:da:6f:1c:3f:40:74:ac:ed:0f:ec:cd:db:79:d1:53:fb:90:1d
-# SHA256 Fingerprint: 76:7c:95:5a:76:41:2c:89:af:68:8e:90:a1:c7:0f:55:6c:fd:6b:60:25:db:ea:10:41:6d:7e:b6:83:1f:8c:40
------BEGIN CERTIFICATE-----
-MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBb
-MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3Qx
-ETAPBgNVBAsTCERTVCBBQ0VTMRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0w
-MzExMjAyMTE5NThaFw0xNzExMjAyMTE5NThaMFsxCzAJBgNVBAYTAlVTMSAwHgYD
-VQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UECxMIRFNUIEFDRVMx
-FzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPu
-ktKe1jzIDZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7
-gLFViYsx+tC3dr5BPTCapCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZH
-fAjIgrrep4c9oW24MFbCswKBXy314powGCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4a
-ahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPyMjwmR/onJALJfh1biEIT
-ajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1UdEwEB/wQF
-MAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rk
-c3QuY29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjto
-dHRwOi8vd3d3LnRydXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMt
-aW5kZXguaHRtbDAdBgNVHQ4EFgQUCXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZI
-hvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V25FYrnJmQ6AgwbN99Pe7lv7Uk
-QIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6tFr8hlxCBPeP/
-h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
-nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpR
-rscL9yuwNwXsvFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf2
-9w4LTJxoeHtxMcfrHuBnQfO3oKfN5XozNmr6mis=
------END CERTIFICATE-----
-
-# Issuer: CN=TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı O=(c) 2005 TÜRKTRUST Bilgi İletişim ve Bilişim Güvenliği Hizmetleri A.Ş.
-# Subject: CN=TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı O=(c) 2005 TÜRKTRUST Bilgi İletişim ve Bilişim Güvenliği Hizmetleri A.Ş.
-# Label: "TURKTRUST Certificate Services Provider Root 1"
-# Serial: 1
-# MD5 Fingerprint: f1:6a:22:18:c9:cd:df:ce:82:1d:1d:b7:78:5c:a9:a5
-# SHA1 Fingerprint: 79:98:a3:08:e1:4d:65:85:e6:c2:1e:15:3a:71:9f:ba:5a:d3:4a:d9
-# SHA256 Fingerprint: 44:04:e3:3b:5e:14:0d:cf:99:80:51:fd:fc:80:28:c7:c8:16:15:c5:ee:73:7b:11:1b:58:82:33:a9:b5:35:a0
------BEGIN CERTIFICATE-----
-MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOc
-UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
-c8SxMQswCQYDVQQGDAJUUjEPMA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykg
-MjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8
-dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMxMDI3MTdaFw0xNTAz
-MjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2Vy
-dGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYD
-VQQHDAZBTktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kg
-xLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEu
-xZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7
-XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GXyGl8hMW0kWxsE2qkVa2k
-heiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8iSi9BB35J
-YbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5C
-urKZ8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1
-JuTm5Rh8i27fbMx4W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51
-b0dewQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV
-9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46sWrv7/hg0Uw2ZkUd82YCdAR7
-kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxEq8Sn5RTOPEFh
-fEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
-B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdA
-aLX/7KfS0zgYnNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKS
-RGQDJereW26fyfJOrN3H
------END CERTIFICATE-----
-
-# Issuer: CN=TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı O=TÜRKTRUST Bilgi İletişim ve Bilişim Güvenliği Hizmetleri A.Ş. (c) Kasım 2005
-# Subject: CN=TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı O=TÜRKTRUST Bilgi İletişim ve Bilişim Güvenliği Hizmetleri A.Ş. (c) Kasım 2005
-# Label: "TURKTRUST Certificate Services Provider Root 2"
-# Serial: 1
-# MD5 Fingerprint: 37:a5:6e:d4:b1:25:84:97:b7:fd:56:15:7a:f9:a2:00
-# SHA1 Fingerprint: b4:35:d4:e1:11:9d:1c:66:90:a7:49:eb:b3:94:bd:63:7b:a7:82:b7
-# SHA256 Fingerprint: c4:70:cf:54:7e:23:02:b9:77:fb:29:dd:71:a8:9a:7b:6c:1f:60:77:7b:03:29:f5:60:17:f3:28:bf:4f:6b:e6
------BEGIN CERTIFICATE-----
-MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOc
-UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
-c8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xS
-S1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kg
-SGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcNMDUxMTA3MTAwNzU3
-WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVrdHJv
-bmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJU
-UjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSw
-bGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWe
-LiAoYykgS2FzxLFtIDIwMDUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqeLCDe2JAOCtFp0if7qnef
-J1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKIx+XlZEdh
-R3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJ
-Qv2gQrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGX
-JHpsmxcPbe9TmJEr5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1p
-zpwACPI2/z7woQ8arBT9pmAPAgMBAAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58S
-Fq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
-KoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/nttRbj2hWyfIvwq
-ECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
-Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFz
-gw2lGh1uEpJ+hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotH
-uFEJjOp9zYhys2AzsfAKRO8P9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LS
-y3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5UrbnBEI=
------END CERTIFICATE-----
-
-# Issuer: CN=SwissSign Gold CA - G2 O=SwissSign AG
-# Subject: CN=SwissSign Gold CA - G2 O=SwissSign AG
-# Label: "SwissSign Gold CA - G2"
-# Serial: 13492815561806991280
-# MD5 Fingerprint: 24:77:d9:a8:91:d1:3b:fa:88:2d:c2:ff:f8:cd:33:93
-# SHA1 Fingerprint: d8:c5:38:8a:b7:30:1b:1b:6e:d4:7a:e6:45:25:3a:6f:9f:1a:27:61
-# SHA256 Fingerprint: 62:dd:0b:e9:b9:f5:0a:16:3e:a0:f8:e7:5c:05:3b:1e:ca:57:ea:55:c8:68:8f:64:7c:68:81:f2:c8:35:7b:95
------BEGIN CERTIFICATE-----
-MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
-BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln
-biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF
-MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT
-d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
-CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8
-76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+
-bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c
-6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE
-emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd
-MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt
-MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y
-MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y
-FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi
-aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM
-gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB
-qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7
-lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn
-8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
-L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6
-45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO
-UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5
-O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC
-bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv
-GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a
-77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC
-hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3
-92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp
-Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w
-ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt
-Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
------END CERTIFICATE-----
-
-# Issuer: CN=SwissSign Silver CA - G2 O=SwissSign AG
-# Subject: CN=SwissSign Silver CA - G2 O=SwissSign AG
-# Label: "SwissSign Silver CA - G2"
-# Serial: 5700383053117599563
-# MD5 Fingerprint: e0:06:a1:c9:7d:cf:c9:fc:0d:c0:56:75:96:d8:62:13
-# SHA1 Fingerprint: 9b:aa:e5:9f:56:ee:21:cb:43:5a:be:25:93:df:a7:f0:40:d1:1d:cb
-# SHA256 Fingerprint: be:6c:4d:a2:bb:b9:ba:59:b6:f3:93:97:68:37:42:46:c3:c0:05:99:3f:a9:8f:02:0d:1d:ed:be:d4:8a:81:d5
------BEGIN CERTIFICATE-----
-MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE
-BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWdu
-IFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0Nlow
-RzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMY
-U3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
-MIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644N0Mv
-Fz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7br
-YT7QbNHm+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieF
-nbAVlDLaYQ1HTWBCrpJH6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH
-6ATK72oxh9TAtvmUcXtnZLi2kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZt
-eJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/
-c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJ
-MoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRH
-HTBsROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTf
-jNFusB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb6
-5i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOB
-rDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU
-F6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRBtjpbO8tFnb0c
-wpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0
-cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIB
-AHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShp
-WJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9
-xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ
-2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZ
-IseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8
-aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2X
-em1ZqSqPe97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQR
-dAtq/gsD/KNVV4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/
-OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+
-hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLy
-tGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
------END CERTIFICATE-----
-
-# Issuer: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc.
-# Subject: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc.
-# Label: "GeoTrust Primary Certification Authority"
-# Serial: 32798226551256963324313806436981982369
-# MD5 Fingerprint: 02:26:c3:01:5e:08:30:37:43:a9:d0:7d:cf:37:e6:bf
-# SHA1 Fingerprint: 32:3c:11:8e:1b:f7:b8:b6:52:54:e2:e2:10:0d:d6:02:90:37:f0:96
-# SHA256 Fingerprint: 37:d5:10:06:c5:12:ea:ab:62:64:21:f1:ec:8c:92:01:3f:c5:f8:2a:e9:8e:e5:33:eb:46:19:b8:de:b4:d0:6c
------BEGIN CERTIFICATE-----
-MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY
-MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo
-R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx
-MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
-Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9
-AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA
-ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0
-7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W
-kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI
-mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G
-A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ
-KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1
-6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl
-4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K
-oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj
-UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU
-AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
------END CERTIFICATE-----
-
-# Issuer: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only
-# Subject: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only
-# Label: "thawte Primary Root CA"
-# Serial: 69529181992039203566298953787712940909
-# MD5 Fingerprint: 8c:ca:dc:0b:22:ce:f5:be:72:ac:41:1a:11:a8:d8:12
-# SHA1 Fingerprint: 91:c6:d6:ee:3e:8a:c8:63:84:e5:48:c2:99:29:5c:75:6c:81:7b:81
-# SHA256 Fingerprint: 8d:72:2f:81:a9:c1:13:c0:79:1d:f1:36:a2:96:6d:b2:6c:95:0a:97:1d:b4:6b:41:99:f4:ea:54:b7:8b:fb:9f
------BEGIN CERTIFICATE-----
-MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB
-qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
-Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
-MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV
-BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw
-NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j
-LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG
-A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs
-W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta
-3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk
-6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6
-Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J
-NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA
-MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP
-r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU
-DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz
-YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
-xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2
-/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/
-LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7
-jVaMaA==
------END CERTIFICATE-----
-
-# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only
-# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only
-# Label: "VeriSign Class 3 Public Primary Certification Authority - G5"
-# Serial: 33037644167568058970164719475676101450
-# MD5 Fingerprint: cb:17:e4:31:67:3e:e2:09:fe:45:57:93:f3:0a:fa:1c
-# SHA1 Fingerprint: 4e:b6:d5:78:49:9b:1c:cf:5f:58:1e:ad:56:be:3d:9b:67:44:a5:e5
-# SHA256 Fingerprint: 9a:cf:ab:7e:43:c8:d8:80:d0:6b:26:2a:94:de:ee:e4:b4:65:99:89:c3:d0:ca:f1:9b:af:64:05:e4:1a:b7:df
------BEGIN CERTIFICATE-----
-MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
-yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
-ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
-U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
-ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
-MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
-ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
-U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
-aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
-nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
-t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
-SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
-BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
-rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
-NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
-BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
-BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
-aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
-MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
-p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
-5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
-WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
-4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
-hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
------END CERTIFICATE-----
-
-# Issuer: CN=SecureTrust CA O=SecureTrust Corporation
-# Subject: CN=SecureTrust CA O=SecureTrust Corporation
-# Label: "SecureTrust CA"
-# Serial: 17199774589125277788362757014266862032
-# MD5 Fingerprint: dc:32:c3:a7:6d:25:57:c7:68:09:9d:ea:2d:a9:a2:d1
-# SHA1 Fingerprint: 87:82:c6:c3:04:35:3b:cf:d2:96:92:d2:59:3e:7d:44:d9:34:ff:11
-# SHA256 Fingerprint: f1:c1:b5:0a:e5:a2:0d:d8:03:0e:c9:f6:bc:24:82:3d:d3:67:b5:25:57:59:b4:e7:1b:61:fc:e9:f7:37:5d:73
------BEGIN CERTIFICATE-----
-MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI
-MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
-FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz
-MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv
-cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz
-Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO
-0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao
-wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj
-7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS
-8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT
-BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
-/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg
-JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC
-NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3
-6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/
-3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm
-D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS
-CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
-3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
------END CERTIFICATE-----
-
-# Issuer: CN=Secure Global CA O=SecureTrust Corporation
-# Subject: CN=Secure Global CA O=SecureTrust Corporation
-# Label: "Secure Global CA"
-# Serial: 9751836167731051554232119481456978597
-# MD5 Fingerprint: cf:f4:27:0d:d4:ed:dc:65:16:49:6d:3d:da:bf:6e:de
-# SHA1 Fingerprint: 3a:44:73:5a:e5:81:90:1f:24:86:61:46:1e:3b:9c:c4:5f:f5:3a:1b
-# SHA256 Fingerprint: 42:00:f5:04:3a:c8:59:0e:bb:52:7d:20:9e:d1:50:30:29:fb:cb:d4:1c:a1:b5:06:ec:27:f1:5a:de:7d:ac:69
------BEGIN CERTIFICATE-----
-MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK
-MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
-GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx
-MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg
-Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ
-iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa
-/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ
-jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI
-HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7
-sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w
-gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF
-MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw
-KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG
-AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L
-URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO
-H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm
-I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY
-iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
-f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
------END CERTIFICATE-----
-
-# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited
-# Subject: CN=COMODO Certification Authority O=COMODO CA Limited
-# Label: "COMODO Certification Authority"
-# Serial: 104350513648249232941998508985834464573
-# MD5 Fingerprint: 5c:48:dc:f7:42:72:ec:56:94:6d:1c:cc:71:35:80:75
-# SHA1 Fingerprint: 66:31:bf:9e:f7:4f:9e:b6:c9:d5:a6:0c:ba:6a:be:d1:f7:bd:ef:7b
-# SHA256 Fingerprint: 0c:2c:d6:3d:f7:80:6f:a3:99:ed:e8:09:11:6b:57:5b:f8:79:89:f0:65:18:f9:80:8c:86:05:03:17:8b:af:66
------BEGIN CERTIFICATE-----
-MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB
-gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
-A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV
-BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw
-MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl
-YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P
-RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3
-UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI
-2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8
-Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp
-+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+
-DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O
-nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW
-/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g
-PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u
-QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY
-SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv
-IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
-RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4
-zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd
-BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB
-ZQ==
------END CERTIFICATE-----
-
-# Issuer: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C.
-# Subject: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C.
-# Label: "Network Solutions Certificate Authority"
-# Serial: 116697915152937497490437556386812487904
-# MD5 Fingerprint: d3:f3:a6:16:c0:fa:6b:1d:59:b1:2d:96:4d:0e:11:2e
-# SHA1 Fingerprint: 74:f8:a3:c3:ef:e7:b3:90:06:4b:83:90:3c:21:64:60:20:e5:df:ce
-# SHA256 Fingerprint: 15:f0:ba:00:a3:ac:7a:f3:ac:88:4c:07:2b:10:11:a0:77:bd:77:c0:97:f4:01:64:b2:f8:59:8a:bd:83:86:0c
------BEGIN CERTIFICATE-----
-MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi
-MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
-MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp
-dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV
-UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO
-ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz
-c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP
-OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl
-mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF
-BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4
-qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw
-gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB
-BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu
-bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp
-dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8
-6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/
-h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH
-/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
-wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN
-pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
------END CERTIFICATE-----
-
-# Issuer: CN=WellsSecure Public Root Certificate Authority O=Wells Fargo WellsSecure OU=Wells Fargo Bank NA
-# Subject: CN=WellsSecure Public Root Certificate Authority O=Wells Fargo WellsSecure OU=Wells Fargo Bank NA
-# Label: "WellsSecure Public Root Certificate Authority"
-# Serial: 1
-# MD5 Fingerprint: 15:ac:a5:c2:92:2d:79:bc:e8:7f:cb:67:ed:02:cf:36
-# SHA1 Fingerprint: e7:b4:f6:9d:61:ec:90:69:db:7e:90:a7:40:1a:3c:f4:7d:4f:e8:ee
-# SHA256 Fingerprint: a7:12:72:ae:aa:a3:cf:e8:72:7f:7f:b3:9f:0f:b3:d1:e5:42:6e:90:60:b0:6e:e6:f1:3e:9a:3c:58:33:cd:43
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMx
-IDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxs
-cyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9v
-dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDcxMjEzMTcwNzU0WhcNMjIxMjE0
-MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdl
-bGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQD
-DC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkw
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+r
-WxxTkqxtnt3CxC5FlAM1iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjU
-Dk/41itMpBb570OYj7OeUt9tkTmPOL13i0Nj67eT/DBMHAGTthP796EfvyXhdDcs
-HqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8bJVhHlfXBIEyg1J55oNj
-z7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiBK0HmOFaf
-SZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/Slwxl
-AgMBAAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqG
-KGh0dHA6Ly9jcmwucGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0P
-AQH/BAQDAgHGMB0GA1UdDgQWBBQmlRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0j
-BIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGBi6SBiDCBhTELMAkGA1UEBhMC
-VVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNX
-ZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
-Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEB
-ALkVsUSRzCPIK0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd
-/ZDJPHV3V3p9+N701NX3leZ0bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pB
-A4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSljqHyita04pO2t/caaH/+Xc/77szWn
-k4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+esE2fDbbFwRnzVlhE9
-iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJtylv
-2G0xffX8oRAHh84vWdw+WNs=
------END CERTIFICATE-----
-
-# Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited
-# Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited
-# Label: "COMODO ECC Certification Authority"
-# Serial: 41578283867086692638256921589707938090
-# MD5 Fingerprint: 7c:62:ff:74:9d:31:53:5e:68:4a:d5:78:aa:1e:bf:23
-# SHA1 Fingerprint: 9f:74:4e:9f:2b:4d:ba:ec:0f:31:2c:50:b6:56:3b:8e:2d:93:c3:11
-# SHA256 Fingerprint: 17:93:92:7a:06:14:54:97:89:ad:ce:2f:8f:34:f7:f0:b6:6d:0f:3a:e3:a3:b8:4d:21:ec:15:db:ba:4f:ad:c7
------BEGIN CERTIFICATE-----
-MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL
-MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
-BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT
-IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw
-MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy
-ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N
-T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR
-FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J
-cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW
-BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
-BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm
-fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv
-GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
------END CERTIFICATE-----
-
-# Issuer: CN=IGC/A O=PM/SGDN OU=DCSSI
-# Subject: CN=IGC/A O=PM/SGDN OU=DCSSI
-# Label: "IGC/A"
-# Serial: 245102874772
-# MD5 Fingerprint: 0c:7f:dd:6a:f4:2a:b9:c8:9b:bd:20:7e:a9:db:5c:37
-# SHA1 Fingerprint: 60:d6:89:74:b5:c2:65:9e:8a:0f:c1:88:7c:88:d2:46:69:1b:18:2c
-# SHA256 Fingerprint: b9:be:a7:86:0a:96:2e:a3:61:1d:ab:97:ab:6d:a3:e2:1c:10:68:b9:7d:55:57:5e:d0:e1:12:79:c1:1c:89:32
------BEGIN CERTIFICATE-----
-MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYT
-AkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQ
-TS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG
-9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMB4XDTAyMTIxMzE0MjkyM1oXDTIw
-MTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAM
-BgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEO
-MAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2
-LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaI
-s9z4iPf930Pfeo2aSVz2TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2
-xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCWSo7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4
-u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYyHF2fYPepraX/z9E0+X1b
-F8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNdfrGoRpAx
-Vs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGd
-PDPQtQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNV
-HSAEDjAMMAoGCCqBegF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAx
-NjAfBgNVHSMEGDAWgBSjBS8YYFDCiQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUF
-AAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RKq89toB9RlPhJy3Q2FLwV3duJ
-L92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3QMZsyK10XZZOY
-YLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
-Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2a
-NjSaTFR+FwNIlQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R
-0982gaEbeC9xs/FZTEYYKKuF0mBWWg==
------END CERTIFICATE-----
-
-# Issuer: O=SECOM Trust Systems CO.,LTD. OU=Security Communication EV RootCA1
-# Subject: O=SECOM Trust Systems CO.,LTD. OU=Security Communication EV RootCA1
-# Label: "Security Communication EV RootCA1"
-# Serial: 0
-# MD5 Fingerprint: 22:2d:a6:01:ea:7c:0a:f7:f0:6c:56:43:3f:77:76:d3
-# SHA1 Fingerprint: fe:b8:c4:32:dc:f9:76:9a:ce:ae:3d:d8:90:8f:fd:28:86:65:64:7d
-# SHA256 Fingerprint: a2:2d:ba:68:1e:97:37:6e:2d:39:7d:72:8a:ae:3a:9b:62:96:b9:fd:ba:60:bc:2e:11:f6:47:f2:c6:75:fb:37
------BEGIN CERTIFICATE-----
-MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDEl
-MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMh
-U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIz
-MloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09N
-IFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNlY3VyaXR5IENvbW11
-bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSE
-RMqm4miO/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gO
-zXppFodEtZDkBp2uoQSXWHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5
-bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4zZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDF
-MxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4bepJz11sS6/vmsJWXMY1
-VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK9U2vP9eC
-OKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0G
-CSqGSIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HW
-tWS3irO4G8za+6xmiEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZ
-q51ihPZRwSzJIxXYKLerJRO1RuGGAv8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDb
-EJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnWmHyojf6GPgcWkuF75x3sM3Z+
-Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEWT1MKZPlO9L9O
-VL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
------END CERTIFICATE-----
-
-# Issuer: CN=OISTE WISeKey Global Root GA CA O=WISeKey OU=Copyright (c) 2005/OISTE Foundation Endorsed
-# Subject: CN=OISTE WISeKey Global Root GA CA O=WISeKey OU=Copyright (c) 2005/OISTE Foundation Endorsed
-# Label: "OISTE WISeKey Global Root GA CA"
-# Serial: 86718877871133159090080555911823548314
-# MD5 Fingerprint: bc:6c:51:33:a7:e9:d3:66:63:54:15:72:1b:21:92:93
-# SHA1 Fingerprint: 59:22:a1:e1:5a:ea:16:35:21:f8:98:39:6a:46:46:b0:44:1b:0f:a9
-# SHA256 Fingerprint: 41:c9:23:86:6a:b4:ca:d6:b7:ad:57:80:81:58:2e:02:07:97:a6:cb:df:4f:ff:78:ce:83:96:b3:89:37:d7:f5
------BEGIN CERTIFICATE-----
-MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB
-ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly
-aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl
-ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w
-NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G
-A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD
-VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX
-SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR
-VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2
-w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF
-mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg
-4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9
-4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw
-DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw
-EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx
-SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2
-ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8
-vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
-hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi
-Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ
-/L7fCg0=
------END CERTIFICATE-----
-
-# Issuer: CN=Microsec e-Szigno Root CA O=Microsec Ltd. OU=e-Szigno CA
-# Subject: CN=Microsec e-Szigno Root CA O=Microsec Ltd. OU=e-Szigno CA
-# Label: "Microsec e-Szigno Root CA"
-# Serial: 272122594155480254301341951808045322001
-# MD5 Fingerprint: f0:96:b6:2f:c5:10:d5:67:8e:83:25:32:e8:5e:2e:e5
-# SHA1 Fingerprint: 23:88:c9:d3:71:cc:9e:96:3d:ff:7d:3c:a7:ce:fc:d6:25:ec:19:0d
-# SHA256 Fingerprint: 32:7a:3d:76:1a:ba:de:a0:34:eb:99:84:06:27:5c:b1:a4:77:6e:fd:ae:2f:df:6d:01:68:ea:1c:4f:55:67:d0
------BEGIN CERTIFICATE-----
-MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAw
-cjELMAkGA1UEBhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNy
-b3NlYyBMdGQuMRQwEgYDVQQLEwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9z
-ZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0MDYxMjI4NDRaFw0xNzA0MDYxMjI4
-NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEWMBQGA1UEChMN
-TWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMTGU1p
-Y3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2u
-uO/TEdyB5s87lozWbxXGd36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+
-LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/NoqdNAoI/gqyFxuEPkEeZlApxcpMqyabA
-vjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjcQR/Ji3HWVBTji1R4P770
-Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJPqW+jqpx
-62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcB
-AQRbMFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3Aw
-LQYIKwYBBQUHMAKGIWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAP
-BgNVHRMBAf8EBTADAQH/MIIBcwYDVR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIB
-AQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3LmUtc3ppZ25vLmh1L1NaU1ov
-MIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0AdAB2AOEAbgB5
-ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
-AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABT
-AHoAbwBsAGcA4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABh
-ACAAcwB6AGUAcgBpAG4AdAAgAGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABo
-AHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMAegBpAGcAbgBvAC4AaAB1AC8AUwBa
-AFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6Ly93d3cuZS1zemln
-bm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NOPU1p
-Y3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxP
-PU1pY3Jvc2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZv
-Y2F0aW9uTGlzdDtiaW5hcnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuB
-EGluZm9AZS1zemlnbm8uaHWkdzB1MSMwIQYDVQQDDBpNaWNyb3NlYyBlLVN6aWdu
-w7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhTWjEWMBQGA1UEChMNTWlj
-cm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhVMIGsBgNV
-HSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJI
-VTERMA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDAS
-BgNVBAsTC2UtU3ppZ25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBS
-b290IENBghEAzLjnv04pGv2i3GalHCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS
-8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMTnGZjWS7KXHAM/IO8VbH0jgds
-ZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FEaGAHQzAxQmHl
-7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
-86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfR
-hUZLphK3dehKyVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/
-MPMMNz7UwiiAc7EBt51alhQBS6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
------END CERTIFICATE-----
-
-# Issuer: CN=Certigna O=Dhimyotis
-# Subject: CN=Certigna O=Dhimyotis
-# Label: "Certigna"
-# Serial: 18364802974209362175
-# MD5 Fingerprint: ab:57:a6:5b:7d:42:82:19:b5:d8:58:26:28:5e:fd:ff
-# SHA1 Fingerprint: b1:2e:13:63:45:86:a4:6f:1a:b2:60:68:37:58:2d:c4:ac:fd:94:97
-# SHA256 Fingerprint: e3:b6:a2:db:2e:d7:ce:48:84:2f:7a:c5:32:41:c7:b7:1d:54:14:4b:fb:40:c1:1f:3f:1d:0b:42:f5:ee:a1:2d
------BEGIN CERTIFICATE-----
-MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV
-BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X
-DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ
-BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4
-QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny
-gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw
-zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q
-130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2
-JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw
-DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw
-ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT
-AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj
-AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG
-9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h
-bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc
-fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu
-HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w
-t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
-WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
------END CERTIFICATE-----
-
-# Issuer: CN=AC Raíz Certicámara S.A. O=Sociedad Cameral de Certificación Digital - Certicámara S.A.
-# Subject: CN=AC Raíz Certicámara S.A. O=Sociedad Cameral de Certificación Digital - Certicámara S.A.
-# Label: "AC Ra\xC3\xADz Certic\xC3\xA1mara S.A."
-# Serial: 38908203973182606954752843738508300
-# MD5 Fingerprint: 93:2a:3e:f6:fd:23:69:0d:71:20:d4:2b:47:99:2b:a6
-# SHA1 Fingerprint: cb:a1:c5:f8:b0:e3:5e:b8:b9:45:12:d3:f9:34:a2:e9:06:10:d3:36
-# SHA256 Fingerprint: a6:c5:1e:0d:a5:ca:0a:93:09:d2:e4:c0:e4:0c:2a:f9:10:7a:ae:82:03:85:7f:e1:98:e3:e7:69:e3:43:08:5c
------BEGIN CERTIFICATE-----
-MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsx
-CzAJBgNVBAYTAkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRp
-ZmljYWNpw7NuIERpZ2l0YWwgLSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwa
-QUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4wHhcNMDYxMTI3MjA0NjI5WhcNMzAw
-NDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+U29jaWVkYWQgQ2Ft
-ZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJhIFMu
-QS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkq
-hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeG
-qentLhM0R7LQcNzJPNCNyu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzL
-fDe3fezTf3MZsGqy2IiKLUV0qPezuMDU2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQ
-Y5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU34ojC2I+GdV75LaeHM/J4
-Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP2yYe68yQ
-54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+b
-MMCm8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48j
-ilSH5L887uvDdUhfHjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++Ej
-YfDIJss2yKHzMI+ko6Kh3VOz3vCaMh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/zt
-A/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK5lw1omdMEWux+IBkAC1vImHF
-rEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1bczwmPS9KvqfJ
-pxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
-AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCB
-lTCBkgYEVR0gADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFy
-YS5jb20vZHBjLzBaBggrBgEFBQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW50
-7WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2UgcHVlZGVuIGVuY29udHJhciBlbiBs
-YSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEfAygPU3zmpFmps4p6
-xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuXEpBc
-unvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/
-Jre7Ir5v/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dp
-ezy4ydV/NgIlqmjCMRW3MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42
-gzmRkBDI8ck1fj+404HGIGQatlDCIaR43NAvO2STdPCWkPHv+wlaNECW8DYSwaN0
-jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wkeZBWN7PGKX6jD/EpOe9+
-XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f/RWmnkJD
-W2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/
-RL5hRqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35r
-MDOhYil/SrnhLecUIw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxk
-BYn8eNZcLCZDqQ==
------END CERTIFICATE-----
-
-# Issuer: CN=TC TrustCenter Class 2 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 2 CA
-# Subject: CN=TC TrustCenter Class 2 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 2 CA
-# Label: "TC TrustCenter Class 2 CA II"
-# Serial: 941389028203453866782103406992443
-# MD5 Fingerprint: ce:78:33:5c:59:78:01:6e:18:ea:b9:36:a0:b9:2e:23
-# SHA1 Fingerprint: ae:50:83:ed:7c:f4:5c:bc:8f:61:c6:21:fe:68:5d:79:42:21:15:6e
-# SHA256 Fingerprint: e6:b8:f8:76:64:85:f8:07:ae:7f:8d:ac:16:70:46:1f:07:c0:a1:3e:ef:3a:1f:f7:17:53:8d:7a:ba:d3:91:b4
------BEGIN CERTIFICATE-----
-MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjEL
-MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV
-BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0
-Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYwMTEyMTQzODQzWhcNMjUxMjMxMjI1
-OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i
-SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UEAxMc
-VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jf
-tMjWQ+nEdVl//OEd+DFwIxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKg
-uNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2J
-XjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQXa7pIXSSTYtZgo+U4+lK
-8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7uSNQZu+99
-5OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1Ud
-EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3
-kUrL84J6E1wIqzCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy
-dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6
-Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz
-JTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290
-Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
-TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iS
-GNn3Bzn1LL4GdXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprt
-ZjluS5TmVfwLG4t3wVMTZonZKNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8
-au0WOB9/WIFaGusyiC2y8zl3gK9etmF1KdsjTYjKUCjLhdLTEKJZbtOTVAB6okaV
-hgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kPJOzHdiEoZa5X6AeI
-dUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfkvQ==
------END CERTIFICATE-----
-
-# Issuer: CN=TC TrustCenter Class 3 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 3 CA
-# Subject: CN=TC TrustCenter Class 3 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 3 CA
-# Label: "TC TrustCenter Class 3 CA II"
-# Serial: 1506523511417715638772220530020799
-# MD5 Fingerprint: 56:5f:aa:80:61:12:17:f6:67:21:e6:2b:6d:61:56:8e
-# SHA1 Fingerprint: 80:25:ef:f4:6e:70:c8:d4:72:24:65:84:fe:40:3b:8a:8d:6a:db:f5
-# SHA256 Fingerprint: 8d:a0:84:fc:f9:9c:e0:77:22:f8:9b:32:05:93:98:06:fa:5c:b8:11:e1:c8:13:f6:a1:08:c7:d3:36:b3:40:8e
------BEGIN CERTIFICATE-----
-MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjEL
-MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV
-BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0
-Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYwMTEyMTQ0MTU3WhcNMjUxMjMxMjI1
-OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i
-SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UEAxMc
-VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJW
-Ht4bNwcwIi9v8Qbxq63WyKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+Q
-Vl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo6SI7dYnWRBpl8huXJh0obazovVkdKyT2
-1oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZuV3bOx4a+9P/FRQI2Alq
-ukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk2ZyqBwi1
-Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1Ud
-EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NX
-XAek0CSnwPIA1DCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy
-dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6
-Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz
-JTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290
-Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
-TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlN
-irTzwppVMXzEO2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8
-TtXqluJucsG7Kv5sbviRmEb8yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6
-g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9IJqDnxrcOfHFcqMRA/07QlIp2+gB
-95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal092Y+tTmBvTwtiBj
-S+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc5A==
------END CERTIFICATE-----
-
-# Issuer: CN=TC TrustCenter Universal CA I O=TC TrustCenter GmbH OU=TC TrustCenter Universal CA
-# Subject: CN=TC TrustCenter Universal CA I O=TC TrustCenter GmbH OU=TC TrustCenter Universal CA
-# Label: "TC TrustCenter Universal CA I"
-# Serial: 601024842042189035295619584734726
-# MD5 Fingerprint: 45:e1:a5:72:c5:a9:36:64:40:9e:f5:e4:58:84:67:8c
-# SHA1 Fingerprint: 6b:2f:34:ad:89:58:be:62:fd:b0:6b:5c:ce:bb:9d:d9:4f:4e:39:f3
-# SHA256 Fingerprint: eb:f3:c0:2a:87:89:b1:fb:7d:51:19:95:d6:63:b7:29:06:d9:13:ce:0d:5e:10:56:8a:8a:77:e2:58:61:67:e7
------BEGIN CERTIFICATE-----
-MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTEL
-MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV
-BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1
-c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcNMDYwMzIyMTU1NDI4WhcNMjUxMjMx
-MjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIg
-R21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYwJAYD
-VQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSR
-JJZ4Hgmgm5qVSkr1YnwCqMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3T
-fCZdzHd55yx4Oagmcw6iXSVphU9VDprvxrlE4Vc93x9UIuVvZaozhDrzznq+VZeu
-jRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtwag+1m7Z3W0hZneTvWq3z
-wZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9OgdwZu5GQ
-fezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYD
-VR0jBBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAO
-BgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0G
-CSqGSIb3DQEBBQUAA4IBAQAo0uCG1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X1
-7caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/CyvwbZ71q+s2IhtNerNXxTPqYn
-8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3ghUJGooWMNjs
-ydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT
-ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/
-2TYcuiUaUj0a7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY
------END CERTIFICATE-----
-
-# Issuer: CN=Deutsche Telekom Root CA 2 O=Deutsche Telekom AG OU=T-TeleSec Trust Center
-# Subject: CN=Deutsche Telekom Root CA 2 O=Deutsche Telekom AG OU=T-TeleSec Trust Center
-# Label: "Deutsche Telekom Root CA 2"
-# Serial: 38
-# MD5 Fingerprint: 74:01:4a:91:b1:08:c4:58:ce:47:cd:f0:dd:11:53:08
-# SHA1 Fingerprint: 85:a4:08:c0:9c:19:3e:5d:51:58:7d:cd:d6:13:30:fd:8c:de:37:bf
-# SHA256 Fingerprint: b6:19:1a:50:d0:c3:97:7f:7d:a9:9b:cd:aa:c8:6a:22:7d:ae:b9:67:9e:c7:0b:a3:b0:c9:d9:22:71:c1:70:d3
------BEGIN CERTIFICATE-----
-MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc
-MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj
-IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB
-IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE
-RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl
-U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290
-IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU
-ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC
-QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr
-rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S
-NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc
-QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH
-txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP
-BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC
-AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp
-tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa
-IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl
-6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+
-xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
-Cm26OWMohpLzGITY+9HPBVZkVw==
------END CERTIFICATE-----
-
-# Issuer: CN=ComSign Secured CA O=ComSign
-# Subject: CN=ComSign Secured CA O=ComSign
-# Label: "ComSign Secured CA"
-# Serial: 264725503855295744117309814499492384489
-# MD5 Fingerprint: 40:01:25:06:8d:21:43:6a:0e:43:00:9c:e7:43:f3:d5
-# SHA1 Fingerprint: f9:cd:0e:2c:da:76:24:c1:8f:bd:f0:f0:ab:b6:45:b8:f7:fe:d5:7a
-# SHA256 Fingerprint: 50:79:41:c7:44:60:a0:b4:70:86:22:0d:4e:99:32:57:2a:b5:d1:b5:bb:cb:89:80:ab:1c:b1:76:51:a8:44:d2
------BEGIN CERTIFICATE-----
-MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAw
-PDEbMBkGA1UEAxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWdu
-MQswCQYDVQQGEwJJTDAeFw0wNDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwx
-GzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBDQTEQMA4GA1UEChMHQ29tU2lnbjEL
-MAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGtWhf
-HZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs49oh
-gHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sW
-v+bznkqH7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ue
-Mv5WJDmyVIRD9YTC2LxBkMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr
-9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d19guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt
-6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUwAwEB/zBEBgNVHR8EPTA7
-MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29tU2lnblNl
-Y3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58
-ADsAj8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkq
-hkiG9w0BAQUFAAOCAQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7p
-iL1DRYHjZiM/EoZNGeQFsOY3wo3aBijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtC
-dsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtpFhpFfTMDZflScZAmlaxMDPWL
-kz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP51qJThRv4zdL
-hfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz
-OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw==
------END CERTIFICATE-----
-
-# Issuer: CN=Cybertrust Global Root O=Cybertrust, Inc
-# Subject: CN=Cybertrust Global Root O=Cybertrust, Inc
-# Label: "Cybertrust Global Root"
-# Serial: 4835703278459682877484360
-# MD5 Fingerprint: 72:e4:4a:87:e3:69:40:80:77:ea:bc:e3:f4:ff:f0:e1
-# SHA1 Fingerprint: 5f:43:e5:b1:bf:f8:78:8c:ac:1c:c7:ca:4a:9a:c6:22:2b:cc:34:c6
-# SHA256 Fingerprint: 96:0a:df:00:63:e9:63:56:75:0c:29:65:dd:0a:08:67:da:0b:9c:bd:6e:77:71:4a:ea:fb:23:49:ab:39:3d:a3
------BEGIN CERTIFICATE-----
-MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG
-A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh
-bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE
-ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS
-b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5
-7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS
-J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y
-HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP
-t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz
-FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY
-XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/
-MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw
-hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js
-MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA
-A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj
-Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx
-XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o
-omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc
-A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
-WL1WMRJOEcgh4LMRkWXbtKaIOM5V
------END CERTIFICATE-----
-
-# Issuer: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority
-# Subject: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority
-# Label: "ePKI Root Certification Authority"
-# Serial: 28956088682735189655030529057352760477
-# MD5 Fingerprint: 1b:2e:00:ca:26:06:90:3d:ad:fe:6f:15:68:d3:6b:b3
-# SHA1 Fingerprint: 67:65:0d:f1:7e:8e:7e:5b:82:40:a4:f4:56:4b:cf:e2:3d:69:c6:f0
-# SHA256 Fingerprint: c0:a6:f4:dc:63:a2:4b:fd:cf:54:ef:2a:6a:08:2a:0a:72:de:35:80:3e:2f:f5:ff:52:7a:e5:d8:72:06:df:d5
------BEGIN CERTIFICATE-----
-MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe
-MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0
-ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
-Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw
-IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL
-SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF
-AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH
-SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh
-ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X
-DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1
-TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ
-fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA
-sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU
-WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS
-nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH
-dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip
-NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC
-AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF
-MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH
-ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB
-uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl
-PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP
-JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/
-gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2
-j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6
-5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB
-o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS
-/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z
-Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE
-W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D
-hNQ+IIX3Sj0rnP0qCglN6oH4EZw=
------END CERTIFICATE-----
-
-# Issuer: CN=TÜBİTAK UEKAE Kök Sertifika Hizmet Sağlayıcısı - Sürüm 3 O=Türkiye Bilimsel ve Teknolojik Araştırma Kurumu - TÜBİTAK OU=Ulusal Elektronik ve Kriptoloji Araştırma Enstitüsü - UEKAE/Kamu Sertifikasyon Merkezi
-# Subject: CN=TÜBİTAK UEKAE Kök Sertifika Hizmet Sağlayıcısı - Sürüm 3 O=Türkiye Bilimsel ve Teknolojik Araştırma Kurumu - TÜBİTAK OU=Ulusal Elektronik ve Kriptoloji Araştırma Enstitüsü - UEKAE/Kamu Sertifikasyon Merkezi
-# Label: "T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3"
-# Serial: 17
-# MD5 Fingerprint: ed:41:f5:8c:50:c5:2b:9c:73:e6:ee:6c:eb:c2:a8:26
-# SHA1 Fingerprint: 1b:4b:39:61:26:27:6b:64:91:a2:68:6d:d7:02:43:21:2d:1f:1d:96
-# SHA256 Fingerprint: e4:c7:34:30:d7:a5:b5:09:25:df:43:37:0a:0d:21:6e:9a:79:b9:d6:db:83:73:a0:c6:9e:b1:cc:31:c7:c5:2a
------BEGIN CERTIFICATE-----
-MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRS
-MRgwFgYDVQQHDA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJp
-bGltc2VsIHZlIFRla25vbG9qaWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSw
-VEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ryb25payB2ZSBLcmlwdG9sb2ppIEFy
-YcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNVBAsMGkthbXUgU2Vy
-dGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUgS8O2
-ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAe
-Fw0wNzA4MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIx
-GDAWBgNVBAcMD0dlYnplIC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmls
-aW1zZWwgdmUgVGVrbm9sb2ppayBBcmHFn3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBU
-QUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZlIEtyaXB0b2xvamkgQXJh
-xZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2FtdSBTZXJ0
-aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7Zr
-IFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIB
-IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4h
-gb46ezzb8R1Sf1n68yJMlaCQvEhOEav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yK
-O7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1xnnRFDDtG1hba+818qEhTsXO
-fJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR6Oqeyjh1jmKw
-lZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
-hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQID
-AQABo0IwQDAdBgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/
-BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmP
-NOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4N5EY3ATIZJkrGG2AA1nJrvhY0D7t
-wyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLTy9LQQfMmNkqblWwM
-7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYhLBOh
-gLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5n
-oN+J1q2MdqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUs
-yZyQ2uypQjyttgI=
------END CERTIFICATE-----
-
-# Issuer: CN=Buypass Class 2 CA 1 O=Buypass AS-983163327
-# Subject: CN=Buypass Class 2 CA 1 O=Buypass AS-983163327
-# Label: "Buypass Class 2 CA 1"
-# Serial: 1
-# MD5 Fingerprint: b8:08:9a:f0:03:cc:1b:0d:c8:6c:0b:76:a1:75:64:23
-# SHA1 Fingerprint: a0:a1:ab:90:c9:fc:84:7b:3b:12:61:e8:97:7d:5f:d3:22:61:d3:cc
-# SHA256 Fingerprint: 0f:4e:9c:dd:26:4b:02:55:50:d1:70:80:63:40:21:4f:e9:44:34:c9:b0:2f:69:7e:c7:10:fc:5f:ea:fb:5e:38
------BEGIN CERTIFICATE-----
-MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd
-MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg
-Q2xhc3MgMiBDQSAxMB4XDTA2MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzEL
-MAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYD
-VQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7McXA0
-ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLX
-l18xoS830r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVB
-HfCuuCkslFJgNJQ72uA40Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B
-5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/RuFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3
-WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0PAQH/BAQD
-AgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLP
-gcIV1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+
-DKhQ7SLHrQVMdvvt7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKu
-BctN518fV4bVIJwo+28TOPX2EZL2fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHs
-h7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5wwDX3OaJdZtB7WZ+oRxKaJyOk
-LY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
------END CERTIFICATE-----
-
-# Issuer: CN=Buypass Class 3 CA 1 O=Buypass AS-983163327
-# Subject: CN=Buypass Class 3 CA 1 O=Buypass AS-983163327
-# Label: "Buypass Class 3 CA 1"
-# Serial: 2
-# MD5 Fingerprint: df:3c:73:59:81:e7:39:50:81:04:4c:34:a2:cb:b3:7b
-# SHA1 Fingerprint: 61:57:3a:11:df:0e:d8:7e:d5:92:65:22:ea:d0:56:d7:44:b3:23:71
-# SHA256 Fingerprint: b7:b1:2b:17:1f:82:1d:aa:99:0c:d0:fe:50:87:b1:28:44:8b:a8:e5:18:4f:84:c5:1e:02:b5:c8:fb:96:2b:24
------BEGIN CERTIFICATE-----
-MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd
-MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg
-Q2xhc3MgMyBDQSAxMB4XDTA1MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzEL
-MAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYD
-VQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKxifZg
-isRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//z
-NIqeKNc0n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI
-+MkcVyzwPX6UvCWThOiaAJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2R
-hzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+
-mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0PAQH/BAQD
-AgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFP
-Bdy7pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27s
-EzNxZy5p+qksP2bAEllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2
-mSlf56oBzKwzqBwKu5HEA6BvtjT5htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yC
-e/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQjel/wroQk5PMr+4okoyeYZdow
-dXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915
------END CERTIFICATE-----
-
-# Issuer: CN=EBG Elektronik Sertifika Hizmet Sağlayıcısı O=EBG Bilişim Teknolojileri ve Hizmetleri A.Ş.
-# Subject: CN=EBG Elektronik Sertifika Hizmet Sağlayıcısı O=EBG Bilişim Teknolojileri ve Hizmetleri A.Ş.
-# Label: "EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1"
-# Serial: 5525761995591021570
-# MD5 Fingerprint: 2c:20:26:9d:cb:1a:4a:00:85:b5:b7:5a:ae:c2:01:37
-# SHA1 Fingerprint: 8c:96:ba:eb:dd:2b:07:07:48:ee:30:32:66:a0:f3:98:6e:7c:ae:58
-# SHA256 Fingerprint: 35:ae:5b:dd:d8:f7:ae:63:5c:ff:ba:56:82:a8:f0:0b:95:f4:84:62:c7:10:8e:e9:a0:e5:29:2b:07:4a:af:b2
------BEGIN CERTIFICATE-----
-MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNV
-BAMML0VCRyBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
-c8SxMTcwNQYDVQQKDC5FQkcgQmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXpt
-ZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAeFw0wNjA4MTcwMDIxMDlaFw0xNjA4
-MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25payBTZXJ0aWZpa2Eg
-SGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2ltIFRl
-a25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIi
-MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h
-4fuXd7hxlugTlkaDT7byX3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAk
-tiHq6yOU/im/+4mRDGSaBUorzAzu8T2bgmmkTPiab+ci2hC6X5L8GCcKqKpE+i4s
-tPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfreYteIAbTdgtsApWjluTL
-dlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZTqNGFav4
-c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8Um
-TDGyY5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z
-+kI2sSXFCjEmN1ZnuqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0O
-Lna9XvNRiYuoP1Vzv9s6xiQFlpJIqkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMW
-OeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vmExH8nYQKE3vwO9D8owrXieqW
-fo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0Nokb+Clsi7n2
-l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
-/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgw
-FoAU587GT/wWZ5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+
-8ygjdsZs93/mQJ7ANtyVDR2tFcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI
-6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgmzJNSroIBk5DKd8pNSe/iWtkqvTDO
-TLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64kXPBfrAowzIpAoHME
-wfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqTbCmY
-Iai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJn
-xk1Gj7sURT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4Q
-DgZxGhBM/nV+/x5XOULK1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9q
-Kd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11t
-hie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQY9iJSrSq3RZj9W6+YKH4
-7ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9AahH3eU7
-QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT
------END CERTIFICATE-----
-
-# Issuer: O=certSIGN OU=certSIGN ROOT CA
-# Subject: O=certSIGN OU=certSIGN ROOT CA
-# Label: "certSIGN ROOT CA"
-# Serial: 35210227249154
-# MD5 Fingerprint: 18:98:c0:d6:e9:3a:fc:f9:b0:f5:0c:f7:4b:01:44:17
-# SHA1 Fingerprint: fa:b7:ee:36:97:26:62:fb:2d:b0:2a:f6:bf:03:fd:e8:7c:4b:2f:9b
-# SHA256 Fingerprint: ea:a9:62:c4:fa:4a:6b:af:eb:e4:15:19:6d:35:1c:cd:88:8d:4f:53:f3:fa:8a:e6:d7:c4:66:a9:4e:60:42:bb
------BEGIN CERTIFICATE-----
-MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT
-AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD
-QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP
-MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC
-ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do
-0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ
-UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d
-RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ
-OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv
-JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C
-AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O
-BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ
-LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY
-MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ
-44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I
-Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw
-i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN
-9u6wWk5JRFRYX0KD
------END CERTIFICATE-----
-
-# Issuer: CN=CNNIC ROOT O=CNNIC
-# Subject: CN=CNNIC ROOT O=CNNIC
-# Label: "CNNIC ROOT"
-# Serial: 1228079105
-# MD5 Fingerprint: 21:bc:82:ab:49:c4:13:3b:4b:b2:2b:5c:6b:90:9c:19
-# SHA1 Fingerprint: 8b:af:4c:9b:1d:f0:2a:92:f7:da:12:8e:b9:1b:ac:f4:98:60:4b:6f
-# SHA256 Fingerprint: e2:83:93:77:3d:a8:45:a6:79:f2:08:0c:c7:fb:44:a3:b7:a1:c3:79:2c:b7:eb:77:29:fd:cb:6a:8d:99:ae:a7
------BEGIN CERTIFICATE-----
-MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJD
-TjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2
-MDcwOTE0WhcNMjcwNDE2MDcwOTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMF
-Q05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwggEiMA0GCSqGSIb3DQEBAQUAA4IB
-DwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzDo+/hn7E7SIX1mlwh
-IhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tizVHa6
-dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZO
-V/kbZKKTVrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrC
-GHn2emU1z5DrvTOTn1OrczvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gN
-v7Sg2Ca+I19zN38m5pIEo3/PIKe38zrKy5nLAgMBAAGjczBxMBEGCWCGSAGG+EIB
-AQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscCwQ7vptU7ETAPBgNVHRMB
-Af8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991SlgrHAsEO
-76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnK
-OOK5Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvH
-ugDnuL8BV8F3RTIMO/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7Hgvi
-yJA/qIYM/PmLXoXLT1tLYhFHxUV8BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fL
-buXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2G8kS1sHNzYDzAgE8yGnLRUhj
-2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5mmxE=
------END CERTIFICATE-----
-
-# Issuer: O=Japanese Government OU=ApplicationCA
-# Subject: O=Japanese Government OU=ApplicationCA
-# Label: "ApplicationCA - Japanese Government"
-# Serial: 49
-# MD5 Fingerprint: 7e:23:4e:5b:a7:a5:b4:25:e9:00:07:74:11:62:ae:d6
-# SHA1 Fingerprint: 7f:8a:b0:cf:d0:51:87:6a:66:f3:36:0f:47:c8:8d:8c:d3:35:fc:74
-# SHA256 Fingerprint: 2d:47:43:7d:e1:79:51:21:5a:12:f3:c5:8e:51:c7:29:a5:80:26:ef:1f:cc:0a:5f:b3:d9:dc:01:2f:60:0d:19
------BEGIN CERTIFICATE-----
-MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEc
-MBoGA1UEChMTSmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRp
-b25DQTAeFw0wNzEyMTIxNTAwMDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYT
-AkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zlcm5tZW50MRYwFAYDVQQLEw1BcHBs
-aWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp23gdE6H
-j6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4fl+K
-f5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55
-IrmTwcrNwVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cw
-FO5cjFW6WY2H/CPek9AEjP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDiht
-QWEjdnjDuGWk81quzMKq2edY3rZ+nYVunyoKb58DKTCXKB28t89UKU5RMfkntigm
-/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRUWssmP3HMlEYNllPqa0jQ
-k/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNVBAYTAkpQ
-MRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOC
-seODvOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
-ggEBADlqRHZ3ODrso2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJ
-hyzjVOGjprIIC8CFqMjSnHH2HZ9g/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+
-eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYDio+nEhEMy/0/ecGc/WLuo89U
-DNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmWdupwX3kSa+Sj
-B1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
-rosot4LKGAfmt1t06SAZf7IbiVQ=
------END CERTIFICATE-----
-
-# Issuer: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only
-# Subject: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only
-# Label: "GeoTrust Primary Certification Authority - G3"
-# Serial: 28809105769928564313984085209975885599
-# MD5 Fingerprint: b5:e8:34:36:c9:10:44:58:48:70:6d:2e:83:d4:b8:05
-# SHA1 Fingerprint: 03:9e:ed:b8:0b:e7:a0:3c:69:53:89:3b:20:d2:d9:32:3a:4c:2a:fd
-# SHA256 Fingerprint: b4:78:b8:12:25:0d:f8:78:63:5c:2a:a7:ec:7d:15:5e:aa:62:5e:e8:29:16:e2:cd:29:43:61:88:6c:d1:fb:d4
------BEGIN CERTIFICATE-----
-MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB
-mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT
-MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
-eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ
-BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
-MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0
-BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz
-+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm
-hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn
-5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W
-JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL
-DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC
-huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw
-HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB
-AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB
-zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN
-kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
-AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH
-SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G
-spki4cErx5z481+oghLrGREt
------END CERTIFICATE-----
-
-# Issuer: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only
-# Subject: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only
-# Label: "thawte Primary Root CA - G2"
-# Serial: 71758320672825410020661621085256472406
-# MD5 Fingerprint: 74:9d:ea:60:24:c4:fd:22:53:3e:cc:3a:72:d9:29:4f
-# SHA1 Fingerprint: aa:db:bc:22:23:8f:c4:01:a1:27:bb:38:dd:f4:1d:db:08:9e:f0:12
-# SHA256 Fingerprint: a4:31:0d:50:af:18:a6:44:71:90:37:2a:86:af:af:8b:95:1f:fb:43:1d:83:7f:1e:56:88:b4:59:71:ed:15:57
------BEGIN CERTIFICATE-----
-MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL
-MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp
-IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi
-BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw
-MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
-d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig
-YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v
-dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/
-BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6
-papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K
-DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3
-KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox
-XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
------END CERTIFICATE-----
-
-# Issuer: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only
-# Subject: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only
-# Label: "thawte Primary Root CA - G3"
-# Serial: 127614157056681299805556476275995414779
-# MD5 Fingerprint: fb:1b:5d:43:8a:94:cd:44:c6:76:f2:43:4b:47:e7:31
-# SHA1 Fingerprint: f1:8b:53:8d:1b:e9:03:b6:a6:f0:56:43:5b:17:15:89:ca:f3:6b:f2
-# SHA256 Fingerprint: 4b:03:f4:58:07:ad:70:f2:1b:fc:2c:ae:71:c9:fd:e4:60:4c:06:4c:f5:ff:b6:86:ba:e5:db:aa:d7:fd:d3:4c
------BEGIN CERTIFICATE-----
-MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB
-rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
-Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
-MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV
-BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa
-Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl
-LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u
-MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl
-ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm
-gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8
-YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf
-b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9
-9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S
-zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk
-OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV
-HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA
-2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW
-oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
-t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c
-KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM
-m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu
-MdRAGmI0Nj81Aa6sY6A=
------END CERTIFICATE-----
-
-# Issuer: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only
-# Subject: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only
-# Label: "GeoTrust Primary Certification Authority - G2"
-# Serial: 80682863203381065782177908751794619243
-# MD5 Fingerprint: 01:5e:d8:6b:bd:6f:3d:8e:a1:31:f8:12:e0:98:73:6a
-# SHA1 Fingerprint: 8d:17:84:d5:37:f3:03:7d:ec:70:fe:57:8b:51:9a:99:e6:10:d7:b0
-# SHA256 Fingerprint: 5e:db:7a:c4:3b:82:a0:6a:87:61:e8:d7:be:49:79:eb:f2:61:1f:7d:d7:9b:f9:1c:1c:6b:56:6a:21:9e:d7:66
------BEGIN CERTIFICATE-----
-MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL
-MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj
-KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2
-MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
-eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV
-BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw
-NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV
-BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
-MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL
-So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal
-tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO
-BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG
-CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT
-qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz
-rD6ogRLQy7rQkgu2npaqBA+K
------END CERTIFICATE-----
-
-# Issuer: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only
-# Subject: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only
-# Label: "VeriSign Universal Root Certification Authority"
-# Serial: 85209574734084581917763752644031726877
-# MD5 Fingerprint: 8e:ad:b5:01:aa:4d:81:e4:8c:1d:d1:e1:14:00:95:19
-# SHA1 Fingerprint: 36:79:ca:35:66:87:72:30:4d:30:a5:fb:87:3b:0f:a7:7b:b7:0d:54
-# SHA256 Fingerprint: 23:99:56:11:27:a5:71:25:de:8c:ef:ea:61:0d:df:2f:a0:78:b5:c8:06:7f:4e:82:82:90:bf:b8:60:e8:4b:3c
------BEGIN CERTIFICATE-----
-MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB
-vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
-ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp
-U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W
-ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
-Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX
-MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0
-IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y
-IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh
-bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF
-9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH
-H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H
-LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN
-/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT
-rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud
-EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw
-WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs
-exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
-DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4
-sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+
-seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz
-4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+
-BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR
-lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3
-7M2CYfE45k+XmCpajQ==
------END CERTIFICATE-----
-
-# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only
-# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only
-# Label: "VeriSign Class 3 Public Primary Certification Authority - G4"
-# Serial: 63143484348153506665311985501458640051
-# MD5 Fingerprint: 3a:52:e1:e7:fd:6f:3a:e3:6f:f3:6f:99:1b:f9:22:41
-# SHA1 Fingerprint: 22:d5:d8:df:8f:02:31:d1:8d:f7:9d:b7:cf:8a:2d:64:c9:3f:6c:3a
-# SHA256 Fingerprint: 69:dd:d7:ea:90:bb:57:c9:3e:13:5d:c8:5e:a6:fc:d5:48:0b:60:32:39:bd:c4:54:fc:75:8b:2a:26:cf:7f:79
------BEGIN CERTIFICATE-----
-MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL
-MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
-ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
-U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
-aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG
-A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp
-U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg
-SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln
-biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
-IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm
-GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve
-fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw
-AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ
-aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj
-aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW
-kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC
-4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga
-FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
------END CERTIFICATE-----
-
-# Issuer: CN=NetLock Arany (Class Gold) Főtanúsítvány O=NetLock Kft. OU=Tanúsítványkiadók (Certification Services)
-# Subject: CN=NetLock Arany (Class Gold) Főtanúsítvány O=NetLock Kft. OU=Tanúsítványkiadók (Certification Services)
-# Label: "NetLock Arany (Class Gold) Főtanúsítvány"
-# Serial: 80544274841616
-# MD5 Fingerprint: c5:a1:b7:ff:73:dd:d6:d7:34:32:18:df:fc:3c:ad:88
-# SHA1 Fingerprint: 06:08:3f:59:3f:15:a1:04:a0:69:a4:6b:a9:03:d0:06:b7:97:09:91
-# SHA256 Fingerprint: 6c:61:da:c3:a2:de:f0:31:50:6b:e0:36:d2:a6:fe:40:19:94:fb:d1:3d:f9:c8:d4:66:59:92:74:c4:46:ec:98
------BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG
-EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3
-MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl
-cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR
-dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB
-pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM
-b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm
-aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz
-IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT
-lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz
-AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5
-VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG
-ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2
-BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG
-AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M
-U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh
-bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C
-+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
-bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F
-uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2
-XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
------END CERTIFICATE-----
-
-# Issuer: CN=Staat der Nederlanden Root CA - G2 O=Staat der Nederlanden
-# Subject: CN=Staat der Nederlanden Root CA - G2 O=Staat der Nederlanden
-# Label: "Staat der Nederlanden Root CA - G2"
-# Serial: 10000012
-# MD5 Fingerprint: 7c:a5:0f:f8:5b:9a:7d:6d:30:ae:54:5a:e3:42:a2:8a
-# SHA1 Fingerprint: 59:af:82:79:91:86:c7:b4:75:07:cb:cf:03:57:46:eb:04:dd:b7:16
-# SHA256 Fingerprint: 66:8c:83:94:7d:a6:3b:72:4b:ec:e1:74:3c:31:a0:e6:ae:d0:db:8e:c5:b3:1b:e3:77:bb:78:4f:91:b6:71:6f
------BEGIN CERTIFICATE-----
-MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO
-TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh
-dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oX
-DTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl
-ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv
-b3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291
-qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8Sp
-uOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPU
-Z5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE
-pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp
-5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/M
-UGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTN
-GmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy
-5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv
-6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEK
-eN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6
-B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/
-BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov
-L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV
-HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqG
-SIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLyS
-CZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen
-5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897
-IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJK
-gnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL
-+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL
-vJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm
-bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvk
-N1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FC
-Y7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Z
-ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ==
------END CERTIFICATE-----
-
-# Issuer: CN=CA Disig O=Disig a.s.
-# Subject: CN=CA Disig O=Disig a.s.
-# Label: "CA Disig"
-# Serial: 1
-# MD5 Fingerprint: 3f:45:96:39:e2:50:87:f7:bb:fe:98:0c:3c:20:98:e6
-# SHA1 Fingerprint: 2a:c8:d5:8b:57:ce:bf:2f:49:af:f2:fc:76:8f:51:14:62:90:7a:41
-# SHA256 Fingerprint: 92:bf:51:19:ab:ec:ca:d0:b1:33:2d:c4:e1:d0:5f:ba:75:b5:67:90:44:ee:0c:a2:6e:93:1f:74:4f:2f:33:cf
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzET
-MBEGA1UEBxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UE
-AxMIQ0EgRGlzaWcwHhcNMDYwMzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQsw
-CQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcg
-YS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgmGErE
-Nx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnX
-mjxUizkDPw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYD
-XcDtab86wYqg6I7ZuUUohwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhW
-S8+2rT+MitcE5eN4TPWGqvWP+j1scaMtymfraHtuM6kMgiioTGohQBUgDCZbg8Kp
-FhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8wgfwwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0PAQH/BAQD
-AgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cu
-ZGlzaWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5z
-ay9jYS9jcmwvY2FfZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2sv
-Y2EvY3JsL2NhX2Rpc2lnLmNybDAaBgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEw
-DQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59tWDYcPQuBDRIrRhCA/ec8J9B6
-yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3mkkp7M5+cTxq
-EEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/
-CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeB
-EicTXxChds6KezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFN
-PGO+I++MzVpQuGhU+QqZMxEA4Z7CRneC9VkGjCFMhwnN5ag=
------END CERTIFICATE-----
-
-# Issuer: CN=Juur-SK O=AS Sertifitseerimiskeskus
-# Subject: CN=Juur-SK O=AS Sertifitseerimiskeskus
-# Label: "Juur-SK"
-# Serial: 999181308
-# MD5 Fingerprint: aa:8e:5d:d9:f8:db:0a:58:b7:8d:26:87:6c:82:35:55
-# SHA1 Fingerprint: 40:9d:4b:d9:17:b5:5c:27:b6:9b:64:cb:98:22:44:0d:cd:09:b8:89
-# SHA256 Fingerprint: ec:c3:e9:c3:40:75:03:be:e0:91:aa:95:2f:41:34:8f:f8:8b:aa:86:3b:22:64:be:fa:c8:07:90:15:74:e9:39
------BEGIN CERTIFICATE-----
-MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcN
-AQkBFglwa2lAc2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZp
-dHNlZXJpbWlza2Vza3VzMRAwDgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMw
-MVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMQsw
-CQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEQ
-MA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-AIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOB
-SvZiF3tfTQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkz
-ABpTpyHhOEvWgxutr2TC+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvH
-LCu3GFH+4Hv2qEivbDtPL+/40UceJlfwUR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMP
-PbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDaTpxt4brNj3pssAki14sL
-2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQFMAMBAf8w
-ggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwIC
-MIHDHoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDk
-AGwAagBhAHMAdABhAHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0
-AHMAZQBlAHIAaQBtAGkAcwBrAGUAcwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABz
-AGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABrAGkAbgBuAGkAdABhAG0AaQBz
-AGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nwcy8wKwYDVR0f
-BCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
-FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcY
-P2/v6X2+MA4GA1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOi
-CfP+JmeaUOTDBS8rNXiRTHyoERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+g
-kcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyLabVAyJRld/JXIWY7zoVAtjNjGr95
-HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678IIbsSt4beDI3poHS
-na9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkhMp6q
-qIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0Z
-TbvGRNs2yyqcjg==
------END CERTIFICATE-----
-
-# Issuer: CN=Hongkong Post Root CA 1 O=Hongkong Post
-# Subject: CN=Hongkong Post Root CA 1 O=Hongkong Post
-# Label: "Hongkong Post Root CA 1"
-# Serial: 1000
-# MD5 Fingerprint: a8:0d:6f:39:78:b9:43:6d:77:42:6d:98:5a:cc:23:ca
-# SHA1 Fingerprint: d6:da:a8:20:8d:09:d2:15:4d:24:b5:2f:cb:34:6e:b2:58:b2:8a:58
-# SHA256 Fingerprint: f9:e6:7d:33:6c:51:00:2a:c0:54:c6:32:02:2d:66:dd:a2:e7:e3:ff:f1:0a:d0:61:ed:31:d8:bb:b4:10:cf:b2
------BEGIN CERTIFICATE-----
-MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx
-FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg
-Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG
-A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr
-b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ
-jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn
-PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh
-ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9
-nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h
-q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED
-MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC
-mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3
-7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB
-oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs
-EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO
-fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi
-AmvZWg==
------END CERTIFICATE-----
-
-# Issuer: CN=SecureSign RootCA11 O=Japan Certification Services, Inc.
-# Subject: CN=SecureSign RootCA11 O=Japan Certification Services, Inc.
-# Label: "SecureSign RootCA11"
-# Serial: 1
-# MD5 Fingerprint: b7:52:74:e2:92:b4:80:93:f2:75:e4:cc:d7:f2:ea:26
-# SHA1 Fingerprint: 3b:c4:9f:48:f8:f3:73:a0:9c:1e:bd:f8:5b:b1:c3:65:c7:d8:11:b3
-# SHA256 Fingerprint: bf:0f:ee:fb:9e:3a:58:1a:d5:f9:e9:db:75:89:98:57:43:d2:61:08:5c:4d:31:4f:6f:5d:72:59:aa:42:16:12
------BEGIN CERTIFICATE-----
-MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr
-MCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG
-A1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0
-MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZp
-Y2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RD
-QTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJsz
-i1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8
-h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOV
-MdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9
-UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni
-8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsC
-h8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYD
-VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB
-AKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xm
-KbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQ
-X5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWr
-QbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5
-pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN
-QSdJQO7e5iNEOdyhIta6A/I=
------END CERTIFICATE-----
-
-# Issuer: CN=ACEDICOM Root O=EDICOM OU=PKI
-# Subject: CN=ACEDICOM Root O=EDICOM OU=PKI
-# Label: "ACEDICOM Root"
-# Serial: 7029493972724711941
-# MD5 Fingerprint: 42:81:a0:e2:1c:e3:55:10:de:55:89:42:65:96:22:e6
-# SHA1 Fingerprint: e0:b4:32:2e:b2:f6:a5:68:b6:54:53:84:48:18:4a:50:36:87:43:84
-# SHA256 Fingerprint: 03:95:0f:b4:9a:53:1f:3e:19:91:94:23:98:df:a9:e0:ea:32:d7:ba:1c:dd:9b:c8:5d:b5:7e:d9:40:0b:43:4a
------BEGIN CERTIFICATE-----
-MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UE
-AwwNQUNFRElDT00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00x
-CzAJBgNVBAYTAkVTMB4XDTA4MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEW
-MBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZF
-RElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC
-AgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHkWLn7
-09gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7
-XBZXehuDYAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5P
-Grjm6gSSrj0RuVFCPYewMYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAK
-t0SdE3QrwqXrIhWYENiLxQSfHY9g5QYbm8+5eaA9oiM/Qj9r+hwDezCNzmzAv+Yb
-X79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbkHQl/Sog4P75n/TSW9R28
-MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTTxKJxqvQU
-fecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI
-2Sf23EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyH
-K9caUPgn6C9D4zq92Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEae
-ZAwUswdbxcJzbPEHXEUkFDWug/FqTYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAP
-BgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz4SsrSbbXc6GqlPUB53NlTKxQ
-MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU9QHnc2VMrFAw
-RAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv
-bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWIm
-fQwng4/F9tqgaHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3
-gvoFNTPhNahXwOf9jU8/kzJPeGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKe
-I6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1PwkzQSulgUV1qzOMPPKC8W64iLgpq0i
-5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1ThCojz2GuHURwCRi
-ipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oIKiMn
-MCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZ
-o5NjEFIqnxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6
-zqylfDJKZ0DcMDQj3dcEI2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacN
-GHk0vFQYXlPKNFHtRQrmjseCNj6nOGOpMCwXEGCSn1WHElkQwg9naRHMTh5+Spqt
-r0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3otkYNbn5XOmeUwssfnHdK
-Z05phkOTOPu220+DkdRgfks+KzgHVZhepA==
------END CERTIFICATE-----
-
-# Issuer: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority
-# Subject: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority
-# Label: "Verisign Class 3 Public Primary Certification Authority"
-# Serial: 80507572722862485515306429940691309246
-# MD5 Fingerprint: ef:5a:f1:33:ef:f1:cd:bb:51:02:ee:12:14:4b:96:c4
-# SHA1 Fingerprint: a1:db:63:93:91:6f:17:e4:18:55:09:40:04:15:c7:02:40:b0:ae:6b
-# SHA256 Fingerprint: a4:b6:b3:99:6f:c2:f3:06:b3:fd:86:81:bd:63:41:3d:8c:50:09:cc:4f:a3:29:c2:cc:f0:e2:fa:1b:14:03:05
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkG
-A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
-cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
-MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
-BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
-YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
-ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
-BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
-I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
-CSqGSIb3DQEBBQUAA4GBABByUqkFFBkyCEHwxWsKzH4PIRnN5GfcX6kb5sroc50i
-2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWXbj9T/UWZYB2oK0z5XqcJ
-2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/D/xwzoiQ
------END CERTIFICATE-----
-
-# Issuer: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd.
-# Subject: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd.
-# Label: "Microsec e-Szigno Root CA 2009"
-# Serial: 14014712776195784473
-# MD5 Fingerprint: f8:49:f4:03:bc:44:2d:83:be:48:69:7d:29:64:fc:b1
-# SHA1 Fingerprint: 89:df:74:fe:5c:f4:0f:4a:80:f9:e3:37:7d:54:da:91:e1:01:31:8e
-# SHA256 Fingerprint: 3c:5f:81:fe:a5:fa:b8:2c:64:bf:a2:ea:ec:af:cd:e8:e0:77:fc:86:20:a7:ca:e5:37:16:3d:f3:6e:db:f3:78
------BEGIN CERTIFICATE-----
-MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD
-VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0
-ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G
-CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y
-OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx
-FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp
-Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
-dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP
-kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc
-cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U
-fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7
-N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC
-xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1
-+rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
-A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM
-Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG
-SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h
-mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk
-ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
-tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c
-2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t
-HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW
------END CERTIFICATE-----
-
-# Issuer: CN=e-Guven Kok Elektronik Sertifika Hizmet Saglayicisi O=Elektronik Bilgi Guvenligi A.S.
-# Subject: CN=e-Guven Kok Elektronik Sertifika Hizmet Saglayicisi O=Elektronik Bilgi Guvenligi A.S.
-# Label: "E-Guven Kok Elektronik Sertifika Hizmet Saglayicisi"
-# Serial: 91184789765598910059173000485363494069
-# MD5 Fingerprint: 3d:41:29:cb:1e:aa:11:74:cd:5d:b0:62:af:b0:43:5b
-# SHA1 Fingerprint: dd:e1:d2:a9:01:80:2e:1d:87:5e:84:b3:80:7e:4b:b1:fd:99:41:34
-# SHA256 Fingerprint: e6:09:07:84:65:a4:19:78:0c:b6:ac:4c:1c:0b:fb:46:53:d9:d9:cc:6e:b3:94:6e:b7:f3:d6:99:97:ba:d5:98
------BEGIN CERTIFICATE-----
-MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1
-MQswCQYDVQQGEwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxp
-Z2kgQS5TLjE8MDoGA1UEAxMzZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZp
-a2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3MDEwNDExMzI0OFoXDTE3MDEwNDEx
-MzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0cm9uaWsgQmlsZ2kg
-R3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9uaWsg
-U2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdU
-MZTe1RK6UxYC6lhj71vY8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlT
-L/jDj/6z/P2douNffb7tC+Bg62nsM+3YjfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H
-5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAIJjjcJRFHLfO6IxClv7wC
-90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk9Ok0oSy1
-c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/
-BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoE
-VtstxNulMA0GCSqGSIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLP
-qk/CaOv/gKlR6D1id4k9CnU58W5dF4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S
-/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwqD2fK/A+JYZ1lpTzlvBNbCNvj
-/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4Vwpm+Vganf2X
-KWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq
-fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX
------END CERTIFICATE-----
-
-# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3
-# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3
-# Label: "GlobalSign Root CA - R3"
-# Serial: 4835703278459759426209954
-# MD5 Fingerprint: c5:df:b8:49:ca:05:13:55:ee:2d:ba:1a:c3:3e:b0:28
-# SHA1 Fingerprint: d6:9b:56:11:48:f0:1c:77:c5:45:78:c1:09:26:df:5b:85:69:76:ad
-# SHA256 Fingerprint: cb:b5:22:d7:b7:f1:27:ad:6a:01:13:86:5b:df:1c:d4:10:2e:7d:07:59:af:63:5a:7c:f4:72:0d:c9:63:c5:3b
------BEGIN CERTIFICATE-----
-MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G
-A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp
-Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4
-MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG
-A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8
-RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT
-gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm
-KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd
-QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ
-XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw
-DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o
-LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU
-RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp
-jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK
-6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX
-mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs
-Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH
-WD9f
------END CERTIFICATE-----
-
-# Issuer: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068
-# Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068
-# Label: "Autoridad de Certificacion Firmaprofesional CIF A62634068"
-# Serial: 6047274297262753887
-# MD5 Fingerprint: 73:3a:74:7a:ec:bb:a3:96:a6:c2:e4:e2:c8:9b:c0:c3
-# SHA1 Fingerprint: ae:c5:fb:3f:c8:e1:bf:c4:e5:4f:03:07:5a:9a:e8:00:b7:f7:b6:fa
-# SHA256 Fingerprint: 04:04:80:28:bf:1f:28:64:d4:8f:9a:d4:d8:32:94:36:6a:82:88:56:55:3f:3b:14:30:3f:90:14:7f:5d:40:ef
------BEGIN CERTIFICATE-----
-MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UE
-BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h
-cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEy
-MzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg
-Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi
-MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9
-thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM
-cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG
-L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i
-NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h
-X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b
-m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy
-Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja
-EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T
-KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF
-6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh
-OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD
-VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNHDhpkLzCBpgYD
-VR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
-cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBv
-ACAAZABlACAAbABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBl
-AGwAbwBuAGEAIAAwADgAMAAxADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF
-661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx51tkljYyGOylMnfX40S2wBEqgLk9
-am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qkR71kMrv2JYSiJ0L1
-ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaPT481
-PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS
-3a/DTg4fJl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5k
-SeTy36LssUzAKh3ntLFlosS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF
-3dvd6qJ2gHN99ZwExEWN57kci57q13XRcrHedUTnQn3iV2t93Jm8PYMo6oCTjcVM
-ZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoRsaS8I8nkvof/uZS2+F0g
-StRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTDKCOM/icz
-Q0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQB
-jLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
------END CERTIFICATE-----
-
-# Issuer: CN=Izenpe.com O=IZENPE S.A.
-# Subject: CN=Izenpe.com O=IZENPE S.A.
-# Label: "Izenpe.com"
-# Serial: 917563065490389241595536686991402621
-# MD5 Fingerprint: a6:b0:cd:85:80:da:5c:50:34:a3:39:90:2f:55:67:73
-# SHA1 Fingerprint: 2f:78:3d:25:52:18:a7:4a:65:39:71:b5:2c:a2:9c:45:15:6f:e9:19
-# SHA256 Fingerprint: 25:30:cc:8e:98:32:15:02:ba:d9:6f:9b:1f:ba:1b:09:9e:2d:29:9e:0f:45:48:bb:91:4f:36:3b:c0:d4:53:1f
------BEGIN CERTIFICATE-----
-MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4
-MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6
-ZW5wZS5jb20wHhcNMDcxMjEzMTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYD
-VQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5j
-b20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ03rKDx6sp4boFmVq
-scIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAKClaO
-xdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6H
-LmYRY2xU+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFX
-uaOKmMPsOzTFlUFpfnXCPCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQD
-yCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxTOTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+
-JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbKF7jJeodWLBoBHmy+E60Q
-rLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK0GqfvEyN
-BjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8L
-hij+0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIB
-QFqNeb+Lz0vPqhbBleStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+
-HMh3/1uaD7euBUbl8agW7EekFwIDAQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2lu
-Zm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+SVpFTlBFIFMuQS4gLSBDSUYg
-QTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBGNjIgUzgxQzBB
-BgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx
-MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AQYwHQYDVR0OBBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUA
-A4ICAQB4pgwWSp9MiDrAyw6lFn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWb
-laQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbgakEyrkgPH7UIBzg/YsfqikuFgba56
-awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8qhT/AQKM6WfxZSzwo
-JNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Csg1lw
-LDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCT
-VyvehQP5aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGk
-LhObNA5me0mrZJfQRsN5nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJb
-UjWumDqtujWTI6cfSN01RpiyEGjkpTHCClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/
-QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZoQ0iy2+tzJOeRf1SktoA+
-naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1ZWrOZyGls
-QyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
------END CERTIFICATE-----
-
-# Issuer: CN=Chambers of Commerce Root - 2008 O=AC Camerfirma S.A.
-# Subject: CN=Chambers of Commerce Root - 2008 O=AC Camerfirma S.A.
-# Label: "Chambers of Commerce Root - 2008"
-# Serial: 11806822484801597146
-# MD5 Fingerprint: 5e:80:9e:84:5a:0e:65:0b:17:02:f3:55:18:2a:3e:d7
-# SHA1 Fingerprint: 78:6a:74:ac:76:ab:14:7f:9c:6a:30:50:ba:9e:a8:7e:fe:9a:ce:3c
-# SHA256 Fingerprint: 06:3e:4a:fa:c4:91:df:d3:32:f3:08:9b:85:42:e9:46:17:d8:93:d7:fe:94:4e:10:a7:93:7e:e2:9d:96:93:c0
------BEGIN CERTIFICATE-----
-MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD
-VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0
-IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3
-MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJz
-IG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEyMjk1MFoXDTM4MDcz
-MTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBj
-dXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIw
-EAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEp
-MCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0G
-CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW9
-28sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKAXuFixrYp4YFs8r/lfTJq
-VKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorjh40G072Q
-DuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR
-5gN/ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfL
-ZEFHcpOrUMPrCXZkNNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05a
-Sd+pZgvMPMZ4fKecHePOjlO+Bd5gD2vlGts/4+EhySnB8esHnFIbAURRPHsl18Tl
-UlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331lubKgdaX8ZSD6e2wsWsSaR6s
-+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ0wlf2eOKNcx5
-Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
-ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAx
-hduub+84Mxh2EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNV
-HQ4EFgQU+SSsD7K1+HnA+mCIG8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1
-+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpN
-YWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29t
-L2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVy
-ZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAt
-IDIwMDiCCQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRV
-HSAAMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20w
-DQYJKoZIhvcNAQEFBQADggIBAJASryI1wqM58C7e6bXpeHxIvj99RZJe6dqxGfwW
-PJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH3qLPaYRgM+gQDROpI9CF
-5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbURWpGqOt1
-glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaH
-FoI6M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2
-pSB7+R5KBWIBpih1YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MD
-xvbxrN8y8NmBGuScvfaAFPDRLLmF9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QG
-tjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcKzBIKinmwPQN/aUv0NCB9szTq
-jktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvGnrDQWzilm1De
-fhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
-OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZ
-d0jQ
------END CERTIFICATE-----
-
-# Issuer: CN=Global Chambersign Root - 2008 O=AC Camerfirma S.A.
-# Subject: CN=Global Chambersign Root - 2008 O=AC Camerfirma S.A.
-# Label: "Global Chambersign Root - 2008"
-# Serial: 14541511773111788494
-# MD5 Fingerprint: 9e:80:ff:78:01:0c:2e:c1:36:bd:fe:96:90:6e:08:f3
-# SHA1 Fingerprint: 4a:bd:ee:ec:95:0d:35:9c:89:ae:c7:52:a1:2c:5b:29:f6:d6:aa:0c
-# SHA256 Fingerprint: 13:63:35:43:93:34:a7:69:80:16:a0:d3:24:de:72:28:4e:07:9d:7b:52:20:bb:8f:bd:74:78:16:ee:be:ba:ca
------BEGIN CERTIFICATE-----
-MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYD
-VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0
-IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3
-MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
-aGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMxNDBaFw0zODA3MzEx
-MjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3Vy
-cmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAG
-A1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAl
-BgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZI
-hvcNAQEBBQADggIPADCCAgoCggIBAMDfVtPkOpt2RbQT2//BthmLN0EYlVJH6xed
-KYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXfXjaOcNFccUMd2drvXNL7
-G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0ZJJ0YPP2
-zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4
-ddPB/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyG
-HoiMvvKRhI9lNNgATH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2
-Id3UwD2ln58fQ1DJu7xsepeY7s2MH/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3V
-yJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfeOx2YItaswTXbo6Al/3K1dh3e
-beksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSFHTynyQbehP9r
-6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
-wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsog
-zCtLkykPAgMBAAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQW
-BBS5CcqcHtvTbDprru1U8VuTBjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDpr
-ru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UEBhMCRVUxQzBBBgNVBAcTOk1hZHJp
-ZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJmaXJtYS5jb20vYWRk
-cmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJmaXJt
-YSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiC
-CQDJzdPp1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCow
-KAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZI
-hvcNAQEFBQADggIBAICIf3DekijZBZRG/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZ
-UohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6ReAJ3spED8IXDneRRXoz
-X1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/sdZ7LoR/x
-fxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVz
-a2Mg9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yyd
-Yhz2rXzdpjEetrHHfoUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMd
-SqlapskD7+3056huirRXhOukP9DuqqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9O
-AP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETrP3iZ8ntxPjzxmKfFGBI/5rso
-M0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVqc5iJWzouE4ge
-v8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
-09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
------END CERTIFICATE-----
-
-# Issuer: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc.
-# Subject: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc.
-# Label: "Go Daddy Root Certificate Authority - G2"
-# Serial: 0
-# MD5 Fingerprint: 80:3a:bc:22:c1:e6:fb:8d:9b:3b:27:4a:32:1b:9a:01
-# SHA1 Fingerprint: 47:be:ab:c9:22:ea:e8:0e:78:78:34:62:a7:9f:45:c2:54:fd:e6:8b
-# SHA256 Fingerprint: 45:14:0b:32:47:eb:9c:c8:c5:b4:f0:d7:b5:30:91:f7:32:92:08:9e:6e:5a:63:e2:74:9d:d3:ac:a9:19:8e:da
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx
-EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT
-EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp
-ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz
-NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH
-EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE
-AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw
-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD
-E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH
-/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy
-DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh
-GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR
-tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA
-AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE
-FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX
-WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu
-9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr
-gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo
-2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
-LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI
-4uJEvlz36hz1
------END CERTIFICATE-----
-
-# Issuer: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc.
-# Subject: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc.
-# Label: "Starfield Root Certificate Authority - G2"
-# Serial: 0
-# MD5 Fingerprint: d6:39:81:c6:52:7e:96:69:fc:fc:ca:66:ed:05:f2:96
-# SHA1 Fingerprint: b5:1c:06:7c:ee:2b:0c:3d:f8:55:ab:2d:92:f4:fe:39:d4:e7:0f:0e
-# SHA256 Fingerprint: 2c:e1:cb:0b:f9:d2:f9:e1:02:99:3f:be:21:51:52:c3:b2:dd:0c:ab:de:1c:68:e5:31:9b:83:91:54:db:b7:f5
------BEGIN CERTIFICATE-----
-MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx
-EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
-HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs
-ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw
-MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
-b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj
-aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp
-Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg
-nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1
-HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N
-Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN
-dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0
-HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO
-BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G
-CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU
-sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3
-4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg
-8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
-pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1
-mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
------END CERTIFICATE-----
-
-# Issuer: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc.
-# Subject: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc.
-# Label: "Starfield Services Root Certificate Authority - G2"
-# Serial: 0
-# MD5 Fingerprint: 17:35:74:af:7b:61:1c:eb:f4:f9:3c:e2:ee:40:f9:a2
-# SHA1 Fingerprint: 92:5a:8f:8d:2c:6d:04:e0:66:5f:59:6a:ff:22:d8:63:e8:25:6f:3f
-# SHA256 Fingerprint: 56:8d:69:05:a2:c8:87:08:a4:b3:02:51:90:ed:cf:ed:b1:97:4a:60:6a:13:c6:e5:29:0f:cb:2a:e6:3e:da:b5
------BEGIN CERTIFICATE-----
-MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx
-EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
-HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs
-ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
-MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD
-VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy
-ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy
-dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p
-OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2
-8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K
-Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe
-hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk
-6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw
-DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q
-AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI
-bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB
-ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z
-qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
-iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn
-0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN
-sSi6
------END CERTIFICATE-----
-
-# Issuer: CN=AffirmTrust Commercial O=AffirmTrust
-# Subject: CN=AffirmTrust Commercial O=AffirmTrust
-# Label: "AffirmTrust Commercial"
-# Serial: 8608355977964138876
-# MD5 Fingerprint: 82:92:ba:5b:ef:cd:8a:6f:a6:3d:55:f9:84:f6:d6:b7
-# SHA1 Fingerprint: f9:b5:b6:32:45:5f:9c:be:ec:57:5f:80:dc:e9:6e:2c:c7:b2:78:b7
-# SHA256 Fingerprint: 03:76:ab:1d:54:c5:f9:80:3c:e4:b2:e2:01:a0:ee:7e:ef:7b:57:b6:36:e8:a9:3c:9b:8d:48:60:c9:6f:5f:a7
------BEGIN CERTIFICATE-----
-MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE
-BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
-dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL
-MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
-cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP
-Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr
-ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL
-MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1
-yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr
-VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/
-nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
-KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG
-XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj
-vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt
-Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g
-N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC
-nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
------END CERTIFICATE-----
-
-# Issuer: CN=AffirmTrust Networking O=AffirmTrust
-# Subject: CN=AffirmTrust Networking O=AffirmTrust
-# Label: "AffirmTrust Networking"
-# Serial: 8957382827206547757
-# MD5 Fingerprint: 42:65:ca:be:01:9a:9a:4c:a9:8c:41:49:cd:c0:d5:7f
-# SHA1 Fingerprint: 29:36:21:02:8b:20:ed:02:f5:66:c5:32:d1:d6:ed:90:9f:45:00:2f
-# SHA256 Fingerprint: 0a:81:ec:5a:92:97:77:f1:45:90:4a:f3:8d:5d:50:9f:66:b5:e2:c5:8f:cd:b5:31:05:8b:0e:17:f3:f0:b4:1b
------BEGIN CERTIFICATE-----
-MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE
-BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
-dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL
-MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
-cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y
-YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua
-kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL
-QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp
-6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG
-yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i
-QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
-KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO
-tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu
-QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ
-Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u
-olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48
-x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
------END CERTIFICATE-----
-
-# Issuer: CN=AffirmTrust Premium O=AffirmTrust
-# Subject: CN=AffirmTrust Premium O=AffirmTrust
-# Label: "AffirmTrust Premium"
-# Serial: 7893706540734352110
-# MD5 Fingerprint: c4:5d:0e:48:b6:ac:28:30:4e:0a:bc:f9:38:16:87:57
-# SHA1 Fingerprint: d8:a6:33:2c:e0:03:6f:b1:85:f6:63:4f:7d:6a:06:65:26:32:28:27
-# SHA256 Fingerprint: 70:a7:3f:7f:37:6b:60:07:42:48:90:45:34:b1:14:82:d5:bf:0e:69:8e:cc:49:8d:f5:25:77:eb:f2:e9:3b:9a
------BEGIN CERTIFICATE-----
-MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE
-BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz
-dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG
-A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U
-cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf
-qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ
-JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ
-+jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS
-s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5
-HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7
-70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG
-V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S
-qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S
-5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia
-C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX
-OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE
-FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
-BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2
-KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
-Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B
-8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ
-MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc
-0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ
-u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF
-u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH
-YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8
-GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO
-RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e
-KeC2uAloGRwYQw==
------END CERTIFICATE-----
-
-# Issuer: CN=AffirmTrust Premium ECC O=AffirmTrust
-# Subject: CN=AffirmTrust Premium ECC O=AffirmTrust
-# Label: "AffirmTrust Premium ECC"
-# Serial: 8401224907861490260
-# MD5 Fingerprint: 64:b0:09:55:cf:b1:d5:99:e2:be:13:ab:a6:5d:ea:4d
-# SHA1 Fingerprint: b8:23:6b:00:2f:1d:16:86:53:01:55:6c:11:a4:37:ca:eb:ff:c3:bb
-# SHA256 Fingerprint: bd:71:fd:f6:da:97:e4:cf:62:d1:64:7a:dd:25:81:b0:7d:79:ad:f8:39:7e:b4:ec:ba:9c:5e:84:88:82:14:23
------BEGIN CERTIFICATE-----
-MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC
-VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ
-cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ
-BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt
-VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D
-0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9
-ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G
-A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G
-A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs
-aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I
-flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ==
------END CERTIFICATE-----
-
-# Issuer: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority
-# Subject: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority
-# Label: "Certum Trusted Network CA"
-# Serial: 279744
-# MD5 Fingerprint: d5:e9:81:40:c5:18:69:fc:46:2c:89:75:62:0f:aa:78
-# SHA1 Fingerprint: 07:e0:32:e0:20:b7:2c:3f:19:2f:06:28:a2:59:3a:19:a7:0f:06:9e
-# SHA256 Fingerprint: 5c:58:46:8d:55:f5:8e:49:7e:74:39:82:d2:b5:00:10:b6:d1:65:37:4a:cf:83:a7:d4:a3:2d:b7:68:c4:40:8e
------BEGIN CERTIFICATE-----
-MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM
-MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D
-ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU
-cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3
-WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg
-Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw
-IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH
-UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM
-TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU
-BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM
-kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x
-AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV
-HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV
-HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y
-sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL
-I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8
-J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY
-VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
-03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
------END CERTIFICATE-----
-
-# Issuer: CN=Certinomis - Autorité Racine O=Certinomis OU=0002 433998903
-# Subject: CN=Certinomis - Autorité Racine O=Certinomis OU=0002 433998903
-# Label: "Certinomis - Autorité Racine"
-# Serial: 1
-# MD5 Fingerprint: 7f:30:78:8c:03:e3:ca:c9:0a:e2:c9:ea:1e:aa:55:1a
-# SHA1 Fingerprint: 2e:14:da:ec:28:f0:fa:1e:8e:38:9a:4e:ab:eb:26:c0:0a:d3:83:c3
-# SHA256 Fingerprint: fc:bf:e2:88:62:06:f7:2b:27:59:3c:8b:07:02:97:e1:2d:76:9e:d1:0e:d7:93:07:05:a8:09:8e:ff:c1:4d:17
------BEGIN CERTIFICATE-----
-MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjET
-MBEGA1UEChMKQ2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAk
-BgNVBAMMHUNlcnRpbm9taXMgLSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4
-Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkGA1UEBhMCRlIxEzARBgNVBAoTCkNl
-cnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYwJAYDVQQDDB1DZXJ0
-aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
-ADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jY
-F1AMnmHawE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N
-8y4oH3DfVS9O7cdxbwlyLu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWe
-rP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K
-/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92NjMD2AR5vpTESOH2VwnHu
-7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9qc1pkIuVC
-28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6
-lSTClrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1E
-nn1So2+WLhl+HPNbxxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB
-0iSVL1N6aaLwD4ZFjliCK0wi1F6g530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql09
-5gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna4NH4+ej9Uji29YnfAgMBAAGj
-WzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBQN
-jLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ
-KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9s
-ov3/4gbIOZ/xWqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZM
-OH8oMDX/nyNTt7buFHAAQCvaR6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q
-619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40nJ+U8/aGH88bc62UeYdocMMzpXDn
-2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1BCxMjidPJC+iKunqj
-o3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjvJL1v
-nxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG
-5ERQL1TEqkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWq
-pdEdnV1j6CTmNhTih60bWfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZb
-dsLLO7XSAPCjDuGtbkD326C00EauFddEwk01+dIL8hf2rGbVJLJP0RyZwG71fet0
-BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/vgt2Fl43N+bYdJeimUV5
------END CERTIFICATE-----
-
-# Issuer: CN=Root CA Generalitat Valenciana O=Generalitat Valenciana OU=PKIGVA
-# Subject: CN=Root CA Generalitat Valenciana O=Generalitat Valenciana OU=PKIGVA
-# Label: "Root CA Generalitat Valenciana"
-# Serial: 994436456
-# MD5 Fingerprint: 2c:8c:17:5e:b1:54:ab:93:17:b5:36:5a:db:d1:c6:f2
-# SHA1 Fingerprint: a0:73:e5:c5:bd:43:61:0d:86:4c:21:13:0a:85:58:57:cc:9c:ea:46
-# SHA256 Fingerprint: 8c:4e:df:d0:43:48:f3:22:96:9e:7e:29:a4:cd:4d:ca:00:46:55:06:1c:16:e1:b0:76:42:2e:f3:42:ad:63:0e
------BEGIN CERTIFICATE-----
-MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJF
-UzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJ
-R1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcN
-MDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3WjBoMQswCQYDVQQGEwJFUzEfMB0G
-A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScw
-JQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+
-WmmmO3I2F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKj
-SgbwJ/BXufjpTjJ3Cj9BZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGl
-u6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQD0EbtFpKd71ng+CT516nDOeB0/RSrFOy
-A8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXteJajCq+TA81yc477OMUxk
-Hl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMBAAGjggM7
-MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBr
-aS5ndmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIIC
-IwYKKwYBBAG/VQIBADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8A
-cgBpAGQAYQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIA
-YQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIAYQBsAGkAdABhAHQAIABWAGEA
-bABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQByAGEAYwBpAPMA
-bgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA
-aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMA
-aQBvAG4AYQBtAGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQA
-ZQAgAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEA
-YwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBuAHQAcgBhACAAZQBuACAAbABhACAA
-ZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAAOgAvAC8AdwB3AHcA
-LgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0dHA6
-Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+y
-eAT8MIGVBgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQsw
-CQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0G
-A1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVu
-Y2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRhTvW1yEICKrNcda3Fbcrn
-lD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdzCkj+IHLt
-b8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg
-9J63NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XF
-ducTZnV+ZfsBn5OHiJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmC
-IoaZM3Fa6hlXPZHNqcCjbgcTpsnt+GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
------END CERTIFICATE-----
-
-# Issuer: CN=A-Trust-nQual-03 O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH OU=A-Trust-nQual-03
-# Subject: CN=A-Trust-nQual-03 O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH OU=A-Trust-nQual-03
-# Label: "A-Trust-nQual-03"
-# Serial: 93214
-# MD5 Fingerprint: 49:63:ae:27:f4:d5:95:3d:d8:db:24:86:b8:9c:07:53
-# SHA1 Fingerprint: d3:c0:63:f2:19:ed:07:3e:34:ad:5d:75:0b:32:76:29:ff:d5:9a:f2
-# SHA256 Fingerprint: 79:3c:bf:45:59:b9:fd:e3:8a:b2:2d:f1:68:69:f6:98:81:ae:14:c4:b0:13:9a:c7:88:a7:8a:1a:fc:ca:02:fb
------BEGIN CERTIFICATE-----
-MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJB
-VDFIMEYGA1UECgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBp
-bSBlbGVrdHIuIERhdGVudmVya2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5R
-dWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5RdWFsLTAzMB4XDTA1MDgxNzIyMDAw
-MFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgwRgYDVQQKDD9BLVRy
-dXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0ZW52
-ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMM
-EEEtVHJ1c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQCtPWFuA/OQO8BBC4SAzewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUj
-lUC5B3ilJfYKvUWG6Nm9wASOhURh73+nyfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZ
-znF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPESU7l0+m0iKsMrmKS1GWH
-2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4iHQF63n1
-k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs
-2e3Vcuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYD
-VR0OBAoECERqlWdVeRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC
-AQEAVdRU0VlIXLOThaq/Yy/kgM40ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fG
-KOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmrsQd7TZjTXLDR8KdCoLXEjq/+
-8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZdJXDRZslo+S4R
-FGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS
-mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmE
-DNuxUCAKGkq6ahq97BvIxYSazQ==
------END CERTIFICATE-----
-
-# Issuer: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA
-# Subject: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA
-# Label: "TWCA Root Certification Authority"
-# Serial: 1
-# MD5 Fingerprint: aa:08:8f:f6:f9:7b:b7:f2:b1:a7:1e:9b:ea:ea:bd:79
-# SHA1 Fingerprint: cf:9e:87:6d:d3:eb:fc:42:26:97:a3:b5:a3:7a:a0:76:a9:06:23:48
-# SHA256 Fingerprint: bf:d8:8f:e1:10:1c:41:ae:3e:80:1b:f8:be:56:35:0e:e9:ba:d1:a6:b9:bd:51:5e:dc:5c:6d:5b:87:11:ac:44
------BEGIN CERTIFICATE-----
-MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES
-MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU
-V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz
-WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO
-LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm
-aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE
-AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH
-K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX
-RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z
-rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx
-3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
-HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq
-hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC
-MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls
-XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D
-lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn
-aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ
-YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
------END CERTIFICATE-----
-
-# Issuer: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2
-# Subject: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2
-# Label: "Security Communication RootCA2"
-# Serial: 0
-# MD5 Fingerprint: 6c:39:7d:a4:0e:55:59:b2:3f:d6:41:b1:12:50:de:43
-# SHA1 Fingerprint: 5f:3b:8c:f2:f8:10:b3:7d:78:b4:ce:ec:19:19:c3:73:34:b9:c7:74
-# SHA256 Fingerprint: 51:3b:2c:ec:b8:10:d4:cd:e5:dd:85:39:1a:df:c6:c2:dd:60:d8:7b:b7:36:d2:b5:21:48:4a:a4:7a:0e:be:f6
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl
-MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe
-U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX
-DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy
-dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj
-YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV
-OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr
-zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM
-VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ
-hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO
-ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw
-awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs
-OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3
-DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF
-coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc
-okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8
-t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy
-1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/
-SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
------END CERTIFICATE-----
-
-# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority
-# Subject: CN=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority
-# Label: "Hellenic Academic and Research Institutions RootCA 2011"
-# Serial: 0
-# MD5 Fingerprint: 73:9f:4c:4b:73:5b:79:e9:fa:ba:1c:ef:6e:cb:d5:c9
-# SHA1 Fingerprint: fe:45:65:9b:79:03:5b:98:a1:61:b5:51:2e:ac:da:58:09:48:22:4d
-# SHA256 Fingerprint: bc:10:4f:15:a4:8b:e7:09:dc:a5:42:a7:e1:d4:b9:df:6f:05:45:27:e8:02:ea:a9:2d:59:54:44:25:8a:fe:71
------BEGIN CERTIFICATE-----
-MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1Ix
-RDBCBgNVBAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1
-dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1p
-YyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIw
-NjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQK
-EztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENl
-cnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl
-c2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEB
-BQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPz
-dYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJ
-fel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEns
-bgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD
-75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSP
-FEDH3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNV
-HRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp
-5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQu
-b3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3DQEBBQUA
-A4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p
-6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
-TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7
-dIsXRSZMFpGD/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8Acys
-Nnq/onN694/BtZqhFLKPM58N7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXI
-l7WdmplNsDz4SgCbZN2fOUvRJ9e4
------END CERTIFICATE-----
-
-# Issuer: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967
-# Subject: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967
-# Label: "Actalis Authentication Root CA"
-# Serial: 6271844772424770508
-# MD5 Fingerprint: 69:c1:0d:4f:07:a3:1b:c3:fe:56:3d:04:bc:11:f6:a6
-# SHA1 Fingerprint: f3:73:b3:87:06:5a:28:84:8a:f2:f3:4a:ce:19:2b:dd:c7:8e:9c:ac
-# SHA256 Fingerprint: 55:92:60:84:ec:96:3a:64:b9:6e:2a:be:01:ce:0b:a8:6a:64:fb:fe:bc:c7:aa:b5:af:c1:55:b3:7f:d7:60:66
------BEGIN CERTIFICATE-----
-MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE
-BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w
-MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
-IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC
-SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1
-ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB
-MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv
-UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX
-4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9
-KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/
-gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb
-rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ
-51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F
-be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe
-KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F
-v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn
-fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7
-jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz
-ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
-ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL
-e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70
-jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz
-WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V
-SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j
-pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX
-X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok
-fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R
-K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU
-ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU
-LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT
-LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
------END CERTIFICATE-----
-
-# Issuer: O=Trustis Limited OU=Trustis FPS Root CA
-# Subject: O=Trustis Limited OU=Trustis FPS Root CA
-# Label: "Trustis FPS Root CA"
-# Serial: 36053640375399034304724988975563710553
-# MD5 Fingerprint: 30:c9:e7:1e:6b:e6:14:eb:65:b2:16:69:20:31:67:4d
-# SHA1 Fingerprint: 3b:c0:38:0b:33:c3:f6:a6:0c:86:15:22:93:d9:df:f5:4b:81:c0:04
-# SHA256 Fingerprint: c1:b4:82:99:ab:a5:20:8f:e9:63:0a:ce:55:ca:68:a0:3e:da:5a:51:9c:88:02:a0:d3:a6:73:be:8f:8e:55:7d
------BEGIN CERTIFICATE-----
-MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBF
-MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQL
-ExNUcnVzdGlzIEZQUyBSb290IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTEx
-MzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1RydXN0aXMgTGltaXRlZDEc
-MBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQRUN+
-AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihH
-iTHcDnlkH5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjj
-vSkCqPoc4Vu5g6hBSLwacY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA
-0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zto3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlB
-OrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEAAaNTMFEwDwYDVR0TAQH/
-BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAdBgNVHQ4E
-FgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01
-GX2cGE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmW
-zaD+vkAMXBJV+JOCyinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP4
-1BIy+Q7DsdwyhEQsb8tGD+pmQQ9P8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZE
-f1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHVl/9D7S3B2l0pKoU/rGXuhg8F
-jZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYliB6XzCGcKQEN
-ZetX2fNXlrtIzYE=
------END CERTIFICATE-----
-
-# Issuer: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing
-# Subject: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing
-# Label: "StartCom Certification Authority"
-# Serial: 45
-# MD5 Fingerprint: c9:3b:0d:84:41:fc:a4:76:79:23:08:57:de:10:19:16
-# SHA1 Fingerprint: a3:f1:33:3f:e2:42:bf:cf:c5:d1:4e:8f:39:42:98:40:68:10:d1:a0
-# SHA256 Fingerprint: e1:78:90:ee:09:a3:fb:f4:f4:8b:9c:41:4a:17:d6:37:b7:a5:06:47:e9:bc:75:23:22:72:7f:cc:17:42:a9:11
------BEGIN CERTIFICATE-----
-MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEW
-MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg
-Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM3WhcNMzYwOTE3MTk0NjM2WjB9
-MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi
-U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh
-cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA
-A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk
-pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf
-OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C
-Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT
-Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi
-HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM
-Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w
-+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+
-Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3
-Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B
-26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID
-AQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
-VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFul
-F2mHMMo0aEPQQa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCC
-ATgwLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5w
-ZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL2ludGVybWVk
-aWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENvbW1lcmNpYWwgKFN0
-YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0aGUg
-c2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93
-d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgG
-CWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1
-dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5fPGFf59Jb2vKXfuM/gTF
-wWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWmN3PH/UvS
-Ta0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst
-0OcNOrg+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNc
-pRJvkrKTlMeIFw6Ttn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKl
-CcWw0bdT82AUuoVpaiF8H3VhFyAXe2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVF
-P0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA2MFrLH9ZXF2RsXAiV+uKa0hK
-1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBsHvUwyKMQ5bLm
-KhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
-JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ
-8dCAWZvLMdibD4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnm
-fyWl8kgAwKQB2j8=
------END CERTIFICATE-----
-
-# Issuer: CN=StartCom Certification Authority G2 O=StartCom Ltd.
-# Subject: CN=StartCom Certification Authority G2 O=StartCom Ltd.
-# Label: "StartCom Certification Authority G2"
-# Serial: 59
-# MD5 Fingerprint: 78:4b:fb:9e:64:82:0a:d3:b8:4c:62:f3:64:f2:90:64
-# SHA1 Fingerprint: 31:f1:fd:68:22:63:20:ee:c6:3b:3f:9d:ea:4a:3e:53:7c:7c:39:17
-# SHA256 Fingerprint: c7:ba:65:67:de:93:a7:98:ae:1f:aa:79:1e:71:2d:37:8f:ae:1f:93:c4:39:7f:ea:44:1b:b7:cb:e6:fd:59:95
------BEGIN CERTIFICATE-----
-MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEW
-MBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlm
-aWNhdGlvbiBBdXRob3JpdHkgRzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1
-OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoG
-A1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRzIwggIiMA0G
-CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8Oo1XJ
-JZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsD
-vfOpL9HG4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnoo
-D/Uefyf3lLE3PbfHkffiAez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/
-Q0kGi4xDuFby2X8hQxfqp0iVAXV16iulQ5XqFYSdCI0mblWbq9zSOdIxHWDirMxW
-RST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbsO+wmETRIjfaAKxojAuuK
-HDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8HvKTlXcxN
-nw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM
-0D4LnMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/i
-UUjXuG+v+E5+M5iSFGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9
-Ha90OrInwMEePnWjFqmveiJdnxMaz6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHg
-TuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
-AwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJKoZIhvcNAQEL
-BQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K
-2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfX
-UfEpY9Z1zRbkJ4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl
-6/2o1PXWT6RbdejF0mCy2wl+JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK
-9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG/+gyRr61M3Z3qAFdlsHB1b6uJcDJ
-HgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTcnIhT76IxW1hPkWLI
-wpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/XldblhY
-XzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5l
-IxKVCCIcl85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoo
-hdVddLHRDiBYmxOlsGOm7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulr
-so8uBtjRkcfGEvRM/TAXw8HaOFvjqermobp573PYtlNXLfbQ4ddI
------END CERTIFICATE-----
-
-# Issuer: CN=Buypass Class 2 Root CA O=Buypass AS-983163327
-# Subject: CN=Buypass Class 2 Root CA O=Buypass AS-983163327
-# Label: "Buypass Class 2 Root CA"
-# Serial: 2
-# MD5 Fingerprint: 46:a7:d2:fe:45:fb:64:5a:a8:59:90:9b:78:44:9b:29
-# SHA1 Fingerprint: 49:0a:75:74:de:87:0a:47:fe:58:ee:f6:c7:6b:eb:c6:0b:12:40:99
-# SHA256 Fingerprint: 9a:11:40:25:19:7c:5b:b9:5d:94:e6:3d:55:cd:43:79:08:47:b6:46:b2:3c:df:11:ad:a4:a0:0e:ff:15:fb:48
------BEGIN CERTIFICATE-----
-MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd
-MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg
-Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow
-TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw
-HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB
-BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr
-6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV
-L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91
-1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx
-MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ
-QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB
-arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr
-Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi
-FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS
-P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN
-9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP
-AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz
-uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h
-9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s
-A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t
-OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo
-+fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7
-KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2
-DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us
-H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ
-I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7
-5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h
-3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz
-Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA=
------END CERTIFICATE-----
-
-# Issuer: CN=Buypass Class 3 Root CA O=Buypass AS-983163327
-# Subject: CN=Buypass Class 3 Root CA O=Buypass AS-983163327
-# Label: "Buypass Class 3 Root CA"
-# Serial: 2
-# MD5 Fingerprint: 3d:3b:18:9e:2c:64:5a:e8:d5:88:ce:0e:f9:37:c2:ec
-# SHA1 Fingerprint: da:fa:f7:fa:66:84:ec:06:8f:14:50:bd:c7:c2:81:a5:bc:a9:64:57
-# SHA256 Fingerprint: ed:f7:eb:bc:a2:7a:2a:38:4d:38:7b:7d:40:10:c6:66:e2:ed:b4:84:3e:4c:29:b4:ae:1d:5b:93:32:e6:b2:4d
------BEGIN CERTIFICATE-----
-MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd
-MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg
-Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow
-TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw
-HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB
-BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y
-ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E
-N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9
-tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX
-0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c
-/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X
-KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY
-zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS
-O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D
-34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP
-K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3
-AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv
-Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj
-QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV
-cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS
-IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2
-HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa
-O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv
-033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u
-dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE
-kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41
-3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD
-u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq
-4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc=
------END CERTIFICATE-----
-
-# Issuer: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center
-# Subject: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center
-# Label: "T-TeleSec GlobalRoot Class 3"
-# Serial: 1
-# MD5 Fingerprint: ca:fb:40:a8:4e:39:92:8a:1d:fe:8e:2f:c4:27:ea:ef
-# SHA1 Fingerprint: 55:a6:72:3e:cb:f2:ec:cd:c3:23:74:70:19:9d:2a:be:11:e3:81:d1
-# SHA256 Fingerprint: fd:73:da:d3:1c:64:4f:f1:b4:3b:ef:0c:cd:da:96:71:0b:9c:d9:87:5e:ca:7e:31:70:7a:f3:e9:6d:52:2b:bd
------BEGIN CERTIFICATE-----
-MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx
-KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd
-BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl
-YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1
-OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy
-aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50
-ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN
-8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/
-RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4
-hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5
-ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM
-EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj
-QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1
-A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy
-WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ
-1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30
-6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT
-91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
-e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p
-TpPDpFQUWw==
------END CERTIFICATE-----
-
-# Issuer: CN=EE Certification Centre Root CA O=AS Sertifitseerimiskeskus
-# Subject: CN=EE Certification Centre Root CA O=AS Sertifitseerimiskeskus
-# Label: "EE Certification Centre Root CA"
-# Serial: 112324828676200291871926431888494945866
-# MD5 Fingerprint: 43:5e:88:d4:7d:1a:4a:7e:fd:84:2e:52:eb:01:d4:6f
-# SHA1 Fingerprint: c9:a8:b9:e7:55:80:5e:58:e3:53:77:a7:25:eb:af:c3:7b:27:cc:d7
-# SHA256 Fingerprint: 3e:84:ba:43:42:90:85:16:e7:75:73:c0:99:2f:09:79:ca:08:4e:46:85:68:1f:f1:95:cc:ba:8a:22:9b:8a:76
------BEGIN CERTIFICATE-----
-MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1
-MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1
-czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG
-CSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEy
-MTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNl
-ZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBS
-b290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUy
-euuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO
-bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIw
-WFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/d
-MtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE
-1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYD
-VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/
-zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYB
-BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEF
-BQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGV
-v9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG
-E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
-uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIW
-iAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/v
-GVCJYMzpJJUPwssd8m92kMfMdcGWxZ0=
------END CERTIFICATE-----
-
-# Issuer: CN=TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı O=TÜRKTRUST Bilgi İletişim ve Bilişim Güvenliği Hizmetleri A.Ş. (c) Aralık 2007
-# Subject: CN=TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı O=TÜRKTRUST Bilgi İletişim ve Bilişim Güvenliği Hizmetleri A.Ş. (c) Aralık 2007
-# Label: "TURKTRUST Certificate Services Provider Root 2007"
-# Serial: 1
-# MD5 Fingerprint: 2b:70:20:56:86:82:a0:18:c8:07:53:12:28:70:21:72
-# SHA1 Fingerprint: f1:7f:6f:b6:31:dc:99:e3:a3:c8:7f:fe:1c:f1:81:10:88:d9:60:33
-# SHA256 Fingerprint: 97:8c:d9:66:f2:fa:a0:7b:a7:aa:95:00:d9:c0:2e:9d:77:f2:cd:ad:a6:ad:6b:a7:4a:f4:b9:1c:66:59:3c:50
------BEGIN CERTIFICATE-----
-MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOc
-UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
-c8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xS
-S1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kg
-SGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4XDTA3MTIyNTE4Mzcx
-OVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxla3Ry
-b25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMC
-VFIxDzANBgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDE
-sGxldGnFn2ltIHZlIEJpbGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7F
-ni4gKGMpIEFyYWzEsWsgMjAwNzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9NYvDdE3ePYakqtdTyuTFY
-KTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQvKUmi8wUG
-+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveG
-HtyaKhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6P
-IzdezKKqdfcYbwnTrqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M
-733WB2+Y8a+xwXrXgTW4qhe04MsCAwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHk
-Yb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0G
-CSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/sPx+EnWVUXKgW
-AkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I
-aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5
-mxRZNTZPz/OOXl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsa
-XRik7r4EW5nVcV9VZWRi1aKbBFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZ
-qxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAKpoRq0Tl9
------END CERTIFICATE-----
-
-# Issuer: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH
-# Subject: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH
-# Label: "D-TRUST Root Class 3 CA 2 2009"
-# Serial: 623603
-# MD5 Fingerprint: cd:e0:25:69:8d:47:ac:9c:89:35:90:f7:fd:51:3d:2f
-# SHA1 Fingerprint: 58:e8:ab:b0:36:15:33:fb:80:f7:9b:1b:6d:29:d3:ff:8d:5f:00:f0
-# SHA256 Fingerprint: 49:e7:a4:42:ac:f0:ea:62:87:05:00:54:b5:25:64:b6:50:e4:f4:9e:42:e3:48:d6:aa:38:e0:39:e9:57:b1:c1
------BEGIN CERTIFICATE-----
-MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF
-MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD
-bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha
-ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM
-HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB
-BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03
-UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42
-tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R
-ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM
-lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp
-/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G
-A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G
-A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj
-dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy
-MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl
-cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js
-L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL
-BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni
-acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0
-o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K
-zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8
-PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y
-Johw1+qRzT65ysCQblrGXnRl11z+o+I=
------END CERTIFICATE-----
-
-# Issuer: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH
-# Subject: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH
-# Label: "D-TRUST Root Class 3 CA 2 EV 2009"
-# Serial: 623604
-# MD5 Fingerprint: aa:c6:43:2c:5e:2d:cd:c4:34:c0:50:4f:11:02:4f:b6
-# SHA1 Fingerprint: 96:c9:1b:0b:95:b4:10:98:42:fa:d0:d8:22:79:fe:60:fa:b9:16:83
-# SHA256 Fingerprint: ee:c5:49:6b:98:8c:e9:86:25:b9:34:09:2e:ec:29:08:be:d0:b0:f3:16:c2:d4:73:0c:84:ea:f1:f3:d3:48:81
------BEGIN CERTIFICATE-----
-MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF
-MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD
-bGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw
-NDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV
-BAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn
-ljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0
-3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z
-qQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR
-p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8
-HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw
-ggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea
-HNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw
-Oi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh
-c3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E
-RT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt
-dHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku
-Y3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp
-3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05
-nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF
-CSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na
-xpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX
-KVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1
------END CERTIFICATE-----
-
-# Issuer: CN=Autoridad de Certificacion Raiz del Estado Venezolano O=Sistema Nacional de Certificacion Electronica OU=Superintendencia de Servicios de Certificacion Electronica
-# Subject: CN=PSCProcert O=Sistema Nacional de Certificacion Electronica OU=Proveedor de Certificados PROCERT
-# Label: "PSCProcert"
-# Serial: 11
-# MD5 Fingerprint: e6:24:e9:12:01:ae:0c:de:8e:85:c4:ce:a3:12:dd:ec
-# SHA1 Fingerprint: 70:c1:8d:74:b4:28:81:0a:e4:fd:a5:75:d7:01:9f:99:b0:3d:50:74
-# SHA256 Fingerprint: 3c:fc:3c:14:d1:f6:84:ff:17:e3:8c:43:ca:44:0c:00:b9:67:ec:93:3e:8b:fe:06:4c:a1:d7:2c:90:f2:ad:b0
------BEGIN CERTIFICATE-----
-MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1
-dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9s
-YW5vMQswCQYDVQQGEwJWRTEQMA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlz
-dHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0
-aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBlcmludGVuZGVuY2lh
-IGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUwIwYJ
-KoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEw
-MFoXDTIwMTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHBy
-b2NlcnQubmV0LnZlMQ8wDQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGEx
-KjAoBgNVBAsTIVByb3ZlZWRvciBkZSBDZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQG
-A1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9u
-aWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIwDQYJKoZI
-hvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo9
-7BVCwfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74
-BCXfgI8Qhd19L3uA3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38G
-ieU89RLAu9MLmV+QfI4tL3czkkohRqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9
-JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmOEO8GqQKJ/+MMbpfg353bIdD0
-PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG20qCZyFSTXai2
-0b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH
-0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/
-6mnbVSKVUyqUtd+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1m
-v6JpIzi4mWCZDlZTOpx+FIywBm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7
-K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvpr2uKGcfLFFb14dq12fy/czja+eev
-bqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/AgEBMDcGA1UdEgQw
-MC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAzNi0w
-MB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFD
-gBStuyIdxuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0
-b3JpZGFkIGRlIENlcnRpZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xh
-bm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQHEwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0
-cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5hY2lvbmFsIGRlIENlcnRp
-ZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5kZW5jaWEg
-ZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkq
-hkiG9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQD
-AgEGME0GA1UdEQRGMESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0w
-MDAwMDKgGwYFYIZeAgKgEgwQUklGLUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEag
-RKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9sY3IvQ0VSVElGSUNBRE8t
-UkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNyYWl6LnN1c2Nl
-cnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v
-Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsG
-AQUFBwIBFh5odHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcN
-AQELBQADggIBACtZ6yKZu4SqT96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS
-1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmNg7+mvTV+LFwxNG9s2/NkAZiqlCxB
-3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4quxtxj7mkoP3Yldmv
-Wb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1n8Gh
-HVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHm
-pHmJWhSnFFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXz
-sOfIt+FTvZLm8wyWuevo5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bE
-qCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq3TNWOByyrYDT13K9mmyZY+gAu0F2Bbdb
-mRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5poLWccret9W6aAjtmcz9
-opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3YeMLEYC/H
-YvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km
------END CERTIFICATE-----
-
-# Issuer: CN=China Internet Network Information Center EV Certificates Root O=China Internet Network Information Center
-# Subject: CN=China Internet Network Information Center EV Certificates Root O=China Internet Network Information Center
-# Label: "China Internet Network Information Center EV Certificates Root"
-# Serial: 1218379777
-# MD5 Fingerprint: 55:5d:63:00:97:bd:6a:97:f5:67:ab:4b:fb:6e:63:15
-# SHA1 Fingerprint: 4f:99:aa:93:fb:2b:d1:37:26:a1:99:4a:ce:7f:f0:05:f2:93:5d:1e
-# SHA256 Fingerprint: 1c:01:c6:f4:db:b2:fe:fc:22:55:8b:2b:ca:32:56:3f:49:84:4a:cf:c3:2b:7b:e4:b0:ff:59:9f:9e:8c:7a:f7
------BEGIN CERTIFICATE-----
-MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMC
-Q04xMjAwBgNVBAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24g
-Q2VudGVyMUcwRQYDVQQDDD5DaGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0
-aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMgUm9vdDAeFw0xMDA4MzEwNzExMjVa
-Fw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAGA1UECgwpQ2hpbmEg
-SW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMMPkNo
-aW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRp
-ZmljYXRlcyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z
-7r07eKpkQ0H1UN+U8i6yjUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA//
-DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV98YPjUesWgbdYavi7NifFy2cyjw1l1Vx
-zUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2HklY0bBoQCxfVWhyXWIQ8
-hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23KzhmBsUs
-4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54u
-gQEC7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oY
-NJKiyoOCWTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E
-FgQUfHJLOcfA22KlT5uqGDSSosqDglkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3
-j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd50XPFtQO3WKwMVC/GVhMPMdoG
-52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM7+czV0I664zB
-echNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws
-ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrI
-zo9uoV1/A3U05K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATy
-wy39FCqQmbkHzJ8=
------END CERTIFICATE-----
-
-# Issuer: CN=Swisscom Root CA 2 O=Swisscom OU=Digital Certificate Services
-# Subject: CN=Swisscom Root CA 2 O=Swisscom OU=Digital Certificate Services
-# Label: "Swisscom Root CA 2"
-# Serial: 40698052477090394928831521023204026294
-# MD5 Fingerprint: 5b:04:69:ec:a5:83:94:63:18:a7:86:d0:e4:f2:6e:19
-# SHA1 Fingerprint: 77:47:4f:c6:30:e4:0f:4c:47:64:3f:84:ba:b8:c6:95:4a:8a:41:ec
-# SHA256 Fingerprint: f0:9b:12:2c:71:14:f4:a0:9b:d4:ea:4f:4a:99:d5:58:b4:6e:4c:25:cd:81:14:0d:29:c0:56:13:91:4c:38:41
------BEGIN CERTIFICATE-----
-MIIF2TCCA8GgAwIBAgIQHp4o6Ejy5e/DfEoeWhhntjANBgkqhkiG9w0BAQsFADBk
-MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0
-YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3Qg
-Q0EgMjAeFw0xMTA2MjQwODM4MTRaFw0zMTA2MjUwNzM4MTRaMGQxCzAJBgNVBAYT
-AmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZp
-Y2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAyMIICIjAN
-BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlUJOhJ1R5tMJ6HJaI2nbeHCOFvEr
-jw0DzpPMLgAIe6szjPTpQOYXTKueuEcUMncy3SgM3hhLX3af+Dk7/E6J2HzFZ++r
-0rk0X2s682Q2zsKwzxNoysjL67XiPS4h3+os1OD5cJZM/2pYmLcX5BtS5X4HAB1f
-2uY+lQS3aYg5oUFgJWFLlTloYhyxCwWJwDaCFCE/rtuh/bxvHGCGtlOUSbkrRsVP
-ACu/obvLP+DHVxxX6NZp+MEkUp2IVd3Chy50I9AU/SpHWrumnf2U5NGKpV+GY3aF
-y6//SSj8gO1MedK75MDvAe5QQQg1I3ArqRa0jG6F6bYRzzHdUyYb3y1aSgJA/MTA
-tukxGggo5WDDH8SQjhBiYEQN7Aq+VRhxLKX0srwVYv8c474d2h5Xszx+zYIdkeNL
-6yxSNLCK/RJOlrDrcH+eOfdmQrGrrFLadkBXeyq96G4DsguAhYidDMfCd7Camlf0
-uPoTXGiTOmekl9AbmbeGMktg2M7v0Ax/lZ9vh0+Hio5fCHyqW/xavqGRn1V9TrAL
-acywlKinh/LTSlDcX3KwFnUey7QYYpqwpzmqm59m2I2mbJYV4+by+PGDYmy7Velh
-k6M99bFXi08jsJvllGov34zflVEpYKELKeRcVVi3qPyZ7iVNTA6z00yPhOgpD/0Q
-VAKFyPnlw4vP5w8CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw
-FDASBgdghXQBUwIBBgdghXQBUwIBMBIGA1UdEwEB/wQIMAYBAf8CAQcwHQYDVR0O
-BBYEFE0mICKJS9PVpAqhb97iEoHF8TwuMB8GA1UdIwQYMBaAFE0mICKJS9PVpAqh
-b97iEoHF8TwuMA0GCSqGSIb3DQEBCwUAA4ICAQAyCrKkG8t9voJXiblqf/P0wS4R
-fbgZPnm3qKhyN2abGu2sEzsOv2LwnN+ee6FTSA5BesogpxcbtnjsQJHzQq0Qw1zv
-/2BZf82Fo4s9SBwlAjxnffUy6S8w5X2lejjQ82YqZh6NM4OKb3xuqFp1mrjX2lhI
-REeoTPpMSQpKwhI3qEAMw8jh0FcNlzKVxzqfl9NX+Ave5XLzo9v/tdhZsnPdTSpx
-srpJ9csc1fV5yJmz/MFMdOO0vSk3FQQoHt5FRnDsr7p4DooqzgB53MBfGWcsa0vv
-aGgLQ+OswWIJ76bdZWGgr4RVSJFSHMYlkSrQwSIjYVmvRRGFHQEkNI/Ps/8XciAT
-woCqISxxOQ7Qj1zB09GOInJGTB2Wrk9xseEFKZZZ9LuedT3PDTcNYtsmjGOpI99n
-Bjx8Oto0QuFmtEYE3saWmA9LSHokMnWRn6z3aOkquVVlzl1h0ydw2Df+n7mvoC5W
-t6NlUe07qxS/TFED6F+KBZvuim6c779o+sjaC+NCydAXFJy3SuCvkychVSa1ZC+N
-8f+mQAWFBVzKBxlcCxMoTFh/wqXvRdpg065lYZ1Tg3TCrvJcwhbtkj6EPnNgiLx2
-9CzP0H1907he0ZESEOnN3col49XtmS++dYFLJPlFRpTJKSFTnCZFqhMX5OfNeOI5
-wSsSnqaeG8XmDtkx2Q==
------END CERTIFICATE-----
-
-# Issuer: CN=Swisscom Root EV CA 2 O=Swisscom OU=Digital Certificate Services
-# Subject: CN=Swisscom Root EV CA 2 O=Swisscom OU=Digital Certificate Services
-# Label: "Swisscom Root EV CA 2"
-# Serial: 322973295377129385374608406479535262296
-# MD5 Fingerprint: 7b:30:34:9f:dd:0a:4b:6b:35:ca:31:51:28:5d:ae:ec
-# SHA1 Fingerprint: e7:a1:90:29:d3:d5:52:dc:0d:0f:c6:92:d3:ea:88:0d:15:2e:1a:6b
-# SHA256 Fingerprint: d9:5f:ea:3c:a4:ee:dc:e7:4c:d7:6e:75:fc:6d:1f:f6:2c:44:1f:0f:a8:bc:77:f0:34:b1:9e:5d:b2:58:01:5d
------BEGIN CERTIFICATE-----
-MIIF4DCCA8igAwIBAgIRAPL6ZOJ0Y9ON/RAdBB92ylgwDQYJKoZIhvcNAQELBQAw
-ZzELMAkGA1UEBhMCY2gxETAPBgNVBAoTCFN3aXNzY29tMSUwIwYDVQQLExxEaWdp
-dGFsIENlcnRpZmljYXRlIFNlcnZpY2VzMR4wHAYDVQQDExVTd2lzc2NvbSBSb290
-IEVWIENBIDIwHhcNMTEwNjI0MDk0NTA4WhcNMzEwNjI1MDg0NTA4WjBnMQswCQYD
-VQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2Vy
-dGlmaWNhdGUgU2VydmljZXMxHjAcBgNVBAMTFVN3aXNzY29tIFJvb3QgRVYgQ0Eg
-MjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMT3HS9X6lds93BdY7Bx
-UglgRCgzo3pOCvrY6myLURYaVa5UJsTMRQdBTxB5f3HSek4/OE6zAMaVylvNwSqD
-1ycfMQ4jFrclyxy0uYAyXhqdk/HoPGAsp15XGVhRXrwsVgu42O+LgrQ8uMIkqBPH
-oCE2G3pXKSinLr9xJZDzRINpUKTk4RtiGZQJo/PDvO/0vezbE53PnUgJUmfANykR
-HvvSEaeFGHR55E+FFOtSN+KxRdjMDUN/rhPSays/p8LiqG12W0OfvrSdsyaGOx9/
-5fLoZigWJdBLlzin5M8J0TbDC77aO0RYjb7xnglrPvMyxyuHxuxenPaHZa0zKcQv
-idm5y8kDnftslFGXEBuGCxobP/YCfnvUxVFkKJ3106yDgYjTdLRZncHrYTNaRdHL
-OdAGalNgHa/2+2m8atwBz735j9m9W8E6X47aD0upm50qKGsaCnw8qyIL5XctcfaC
-NYGu+HuB5ur+rPQam3Rc6I8k9l2dRsQs0h4rIWqDJ2dVSqTjyDKXZpBy2uPUZC5f
-46Fq9mDU5zXNysRojddxyNMkM3OxbPlq4SjbX8Y96L5V5jcb7STZDxmPX2MYWFCB
-UWVv8p9+agTnNCRxunZLWB4ZvRVgRaoMEkABnRDixzgHcgplwLa7JSnaFp6LNYth
-7eVxV4O1PHGf40+/fh6Bn0GXAgMBAAGjgYYwgYMwDgYDVR0PAQH/BAQDAgGGMB0G
-A1UdIQQWMBQwEgYHYIV0AVMCAgYHYIV0AVMCAjASBgNVHRMBAf8ECDAGAQH/AgED
-MB0GA1UdDgQWBBRF2aWBbj2ITY1x0kbBbkUe88SAnTAfBgNVHSMEGDAWgBRF2aWB
-bj2ITY1x0kbBbkUe88SAnTANBgkqhkiG9w0BAQsFAAOCAgEAlDpzBp9SSzBc1P6x
-XCX5145v9Ydkn+0UjrgEjihLj6p7jjm02Vj2e6E1CqGdivdj5eu9OYLU43otb98T
-PLr+flaYC/NUn81ETm484T4VvwYmneTwkLbUwp4wLh/vx3rEUMfqe9pQy3omywC0
-Wqu1kx+AiYQElY2NfwmTv9SoqORjbdlk5LgpWgi/UOGED1V7XwgiG/W9mR4U9s70
-WBCCswo9GcG/W6uqmdjyMb3lOGbcWAXH7WMaLgqXfIeTK7KK4/HsGOV1timH59yL
-Gn602MnTihdsfSlEvoqq9X46Lmgxk7lq2prg2+kupYTNHAq4Sgj5nPFhJpiTt3tm
-7JFe3VE/23MPrQRYCd0EApUKPtN236YQHoA96M2kZNEzx5LH4k5E4wnJTsJdhw4S
-nr8PyQUQ3nqjsTzyP6WqJ3mtMX0f/fwZacXduT98zca0wjAefm6S139hdlqP65VN
-vBFuIXxZN5nQBrz5Bm0yFqXZaajh3DyAHmBR3NdUIR7KYndP+tiPsys6DXhyyWhB
-WkdKwqPrGtcKqzwyVcgKEZzfdNbwQBUdyLmPtTbFr/giuMod89a2GQ+fYWVq6nTI
-fI/DT11lgh/ZDYnadXL77/FHZxOzyNEZiCcmmpl5fx7kLD977vHeTYuWl8PVP3wb
-I+2ksx0WckNLIOFZfsLorSa/ovc=
------END CERTIFICATE-----
-
-# Issuer: CN=CA Disig Root R1 O=Disig a.s.
-# Subject: CN=CA Disig Root R1 O=Disig a.s.
-# Label: "CA Disig Root R1"
-# Serial: 14052245610670616104
-# MD5 Fingerprint: be:ec:11:93:9a:f5:69:21:bc:d7:c1:c0:67:89:cc:2a
-# SHA1 Fingerprint: 8e:1c:74:f8:a6:20:b9:e5:8a:f4:61:fa:ec:2b:47:56:51:1a:52:c6
-# SHA256 Fingerprint: f9:6f:23:f4:c3:e7:9c:07:7a:46:98:8d:5a:f5:90:06:76:a0:f0:39:cb:64:5d:d1:75:49:b2:16:c8:24:40:ce
------BEGIN CERTIFICATE-----
-MIIFaTCCA1GgAwIBAgIJAMMDmu5QkG4oMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNV
-BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu
-MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIxMB4XDTEyMDcxOTA5MDY1NloXDTQy
-MDcxOTA5MDY1NlowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx
-EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjEw
-ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqw3j33Jijp1pedxiy3QRk
-D2P9m5YJgNXoqqXinCaUOuiZc4yd39ffg/N4T0Dhf9Kn0uXKE5Pn7cZ3Xza1lK/o
-OI7bm+V8u8yN63Vz4STN5qctGS7Y1oprFOsIYgrY3LMATcMjfF9DCCMyEtztDK3A
-fQ+lekLZWnDZv6fXARz2m6uOt0qGeKAeVjGu74IKgEH3G8muqzIm1Cxr7X1r5OJe
-IgpFy4QxTaz+29FHuvlglzmxZcfe+5nkCiKxLU3lSCZpq+Kq8/v8kiky6bM+TR8n
-oc2OuRf7JT7JbvN32g0S9l3HuzYQ1VTW8+DiR0jm3hTaYVKvJrT1cU/J19IG32PK
-/yHoWQbgCNWEFVP3Q+V8xaCJmGtzxmjOZd69fwX3se72V6FglcXM6pM6vpmumwKj
-rckWtc7dXpl4fho5frLABaTAgqWjR56M6ly2vGfb5ipN0gTco65F97yLnByn1tUD
-3AjLLhbKXEAz6GfDLuemROoRRRw1ZS0eRWEkG4IupZ0zXWX4Qfkuy5Q/H6MMMSRE
-7cderVC6xkGbrPAXZcD4XW9boAo0PO7X6oifmPmvTiT6l7Jkdtqr9O3jw2Dv1fkC
-yC2fg69naQanMVXVz0tv/wQFx1isXxYb5dKj6zHbHzMVTdDypVP1y+E9Tmgt2BLd
-qvLmTZtJ5cUoobqwWsagtQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud
-DwEB/wQEAwIBBjAdBgNVHQ4EFgQUiQq0OJMa5qvum5EY+fU8PjXQ04IwDQYJKoZI
-hvcNAQEFBQADggIBADKL9p1Kyb4U5YysOMo6CdQbzoaz3evUuii+Eq5FLAR0rBNR
-xVgYZk2C2tXck8An4b58n1KeElb21Zyp9HWc+jcSjxyT7Ff+Bw+r1RL3D65hXlaA
-SfX8MPWbTx9BLxyE04nH4toCdu0Jz2zBuByDHBb6lM19oMgY0sidbvW9adRtPTXo
-HqJPYNcHKfyyo6SdbhWSVhlMCrDpfNIZTUJG7L399ldb3Zh+pE3McgODWF3vkzpB
-emOqfDqo9ayk0d2iLbYq/J8BjuIQscTK5GfbVSUZP/3oNn6z4eGBrxEWi1CXYBmC
-AMBrTXO40RMHPuq2MU/wQppt4hF05ZSsjYSVPCGvxdpHyN85YmLLW1AL14FABZyb
-7bq2ix4Eb5YgOe2kfSnbSM6C3NQCjR0EMVrHS/BsYVLXtFHCgWzN4funodKSds+x
-DzdYpPJScWc/DIh4gInByLUfkmO+p3qKViwaqKactV2zY9ATIKHrkWzQjX2v3wvk
-F7mGnjixlAxYjOBVqjtjbZqJYLhkKpLGN/R+Q0O3c+gB53+XD9fyexn9GtePyfqF
-a3qdnom2piiZk4hA9z7NUaPK6u95RyG1/jLix8NRb76AdPCkwzryT+lf3xkK8jsT
-Q6wxpLPn6/wY1gGp8yqPNg7rtLG8t0zJa7+h89n07eLw4+1knj0vllJPgFOL
------END CERTIFICATE-----
-
-# Issuer: CN=CA Disig Root R2 O=Disig a.s.
-# Subject: CN=CA Disig Root R2 O=Disig a.s.
-# Label: "CA Disig Root R2"
-# Serial: 10572350602393338211
-# MD5 Fingerprint: 26:01:fb:d8:27:a7:17:9a:45:54:38:1a:43:01:3b:03
-# SHA1 Fingerprint: b5:61:eb:ea:a4:de:e4:25:4b:69:1a:98:a5:57:47:c2:34:c7:d9:71
-# SHA256 Fingerprint: e2:3d:4a:03:6d:7b:70:e9:f5:95:b1:42:20:79:d2:b9:1e:df:bb:1f:b6:51:a0:63:3e:aa:8a:9d:c5:f8:07:03
------BEGIN CERTIFICATE-----
-MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV
-BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu
-MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQy
-MDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx
-EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIw
-ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3Oe
-NcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNH
-PWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3I
-x2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe
-QTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfR
-yyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrO
-QG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912
-H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJ
-QfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUD
-i/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORs
-nLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1
-rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud
-DwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI
-hvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM
-tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqf
-GopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkb
-lvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka
-+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1bal
-TFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0i
-nSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3
-gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18Dr
-G5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os
-zMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8x
-L4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL
------END CERTIFICATE-----
-
-# Issuer: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV
-# Subject: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV
-# Label: "ACCVRAIZ1"
-# Serial: 6828503384748696800
-# MD5 Fingerprint: d0:a0:5a:ee:05:b6:09:94:21:a1:7d:f1:b2:29:82:02
-# SHA1 Fingerprint: 93:05:7a:88:15:c6:4f:ce:88:2f:fa:91:16:52:28:78:bc:53:64:17
-# SHA256 Fingerprint: 9a:6e:c0:12:e1:a7:da:9d:be:34:19:4d:47:8a:d7:c0:db:18:22:fb:07:1d:f1:29:81:49:6e:d1:04:38:41:13
------BEGIN CERTIFICATE-----
-MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UE
-AwwJQUNDVlJBSVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQsw
-CQYDVQQGEwJFUzAeFw0xMTA1MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQ
-BgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwHUEtJQUNDVjENMAsGA1UECgwEQUND
-VjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCb
-qau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gMjmoY
-HtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWo
-G2ioPej0RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpA
-lHPrzg5XPAOBOp0KoVdDaaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhr
-IA8wKFSVf+DuzgpmndFALW4ir50awQUZ0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/
-0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDGWuzndN9wrqODJerWx5eH
-k6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs78yM2x/47
-4KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMO
-m3WR5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpa
-cXpkatcnYGMN285J9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPl
-uUsXQA+xtrn13k/c4LOsOxFwYIRKQ26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYI
-KwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRwOi8vd3d3LmFjY3YuZXMvZmls
-ZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEuY3J0MB8GCCsG
-AQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2
-VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeT
-VfZW6oHlNsyMHj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIG
-CCsGAQUFBwICMIIBFB6CARAAQQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUA
-cgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBhAO0AegAgAGQAZQAgAGwAYQAgAEEA
-QwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUAYwBuAG8AbABvAGcA
-7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBjAHQA
-cgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAA
-QwBQAFMAIABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUA
-czAwBggrBgEFBQcCARYkaHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2Mu
-aHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRt
-aW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2MV9kZXIuY3JsMA4GA1Ud
-DwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZIhvcNAQEF
-BQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdp
-D70ER9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gU
-JyCpZET/LtZ1qmxNYEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+m
-AM/EKXMRNt6GGT6d7hmKG9Ww7Y49nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepD
-vV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJTS+xJlsndQAJxGJ3KQhfnlms
-tn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3sCPdK6jT2iWH
-7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h
-I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szA
-h1xA2syVP1XgNce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xF
-d3+YJ5oyXSrjhO7FmGYvliAd3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2H
-pPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3pEfbRD0tVNEYqi4Y7
------END CERTIFICATE-----
-
-# Issuer: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA
-# Subject: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA
-# Label: "TWCA Global Root CA"
-# Serial: 3262
-# MD5 Fingerprint: f9:03:7e:cf:e6:9e:3c:73:7a:2a:90:07:69:ff:2b:96
-# SHA1 Fingerprint: 9c:bb:48:53:f6:a4:f6:d3:52:a4:e8:32:52:55:60:13:f5:ad:af:65
-# SHA256 Fingerprint: 59:76:90:07:f7:68:5d:0f:cd:50:87:2f:9f:95:d5:75:5a:5b:2b:45:7d:81:f3:69:2b:61:0a:98:67:2f:0e:1b
------BEGIN CERTIFICATE-----
-MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcx
-EjAQBgNVBAoTCVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMT
-VFdDQSBHbG9iYWwgUm9vdCBDQTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5
-NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQKEwlUQUlXQU4tQ0ExEDAOBgNVBAsT
-B1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqG
-SIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2CnJfF
-10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz
-0ALfUPZVr2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfCh
-MBwqoJimFb3u/Rk28OKRQ4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbH
-zIh1HrtsBv+baz4X7GGqcXzGHaL3SekVtTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc
-46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1WKKD+u4ZqyPpcC1jcxkt2
-yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99sy2sbZCi
-laLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYP
-oA/pyJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQA
-BDzfuBSO6N+pjWxnkjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcE
-qYSjMq+u7msXi7Kx/mzhkIyIqJdIzshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm
-4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
-/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6gcFGn90xHNcgL
-1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn
-LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WF
-H6vPNOw/KP4M8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNo
-RI2T9GRwoD2dKAXDOXC4Ynsg/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+
-nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlglPx4mI88k1HtQJAH32RjJMtOcQWh
-15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryPA9gK8kxkRr05YuWW
-6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3mi4TW
-nsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5j
-wa19hAM8EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWz
-aGHQRiapIVJpLesux+t3zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmy
-KwbQBM0=
------END CERTIFICATE-----
diff --git a/bundle/requests/certs.py b/bundle/requests/certs.py
deleted file mode 100644
index bc00826..0000000
--- a/bundle/requests/certs.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-"""
-certs.py
-~~~~~~~~
-
-This module returns the preferred default CA certificate bundle.
-
-If you are packaging Requests, e.g., for a Linux distribution or a managed
-environment, you can change the definition of where() to return a separately
-packaged CA bundle.
-"""
-
-import os.path
-
-
-def where():
-    """Return the preferred certificate bundle."""
-    # vendored bundle inside Requests
-    return os.path.join(os.path.dirname(__file__), 'cacert.pem')
-
-if __name__ == '__main__':
-    print(where())
diff --git a/bundle/requests/certs.pyc b/bundle/requests/certs.pyc
deleted file mode 100644
index 2b78cdd..0000000
Binary files a/bundle/requests/certs.pyc and /dev/null differ
diff --git a/bundle/requests/compat.py b/bundle/requests/compat.py
deleted file mode 100644
index bdf10d6..0000000
--- a/bundle/requests/compat.py
+++ /dev/null
@@ -1,115 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
-pythoncompat
-"""
-
-from .packages import chardet
-
-import sys
-
-# -------
-# Pythons
-# -------
-
-# Syntax sugar.
-_ver = sys.version_info
-
-#: Python 2.x?
-is_py2 = (_ver[0] == 2)
-
-#: Python 3.x?
-is_py3 = (_ver[0] == 3)
-
-#: Python 3.0.x
-is_py30 = (is_py3 and _ver[1] == 0)
-
-#: Python 3.1.x
-is_py31 = (is_py3 and _ver[1] == 1)
-
-#: Python 3.2.x
-is_py32 = (is_py3 and _ver[1] == 2)
-
-#: Python 3.3.x
-is_py33 = (is_py3 and _ver[1] == 3)
-
-#: Python 3.4.x
-is_py34 = (is_py3 and _ver[1] == 4)
-
-#: Python 2.7.x
-is_py27 = (is_py2 and _ver[1] == 7)
-
-#: Python 2.6.x
-is_py26 = (is_py2 and _ver[1] == 6)
-
-#: Python 2.5.x
-is_py25 = (is_py2 and _ver[1] == 5)
-
-#: Python 2.4.x
-is_py24 = (is_py2 and _ver[1] == 4)   # I'm assuming this is not by choice.
-
-
-# ---------
-# Platforms
-# ---------
-
-
-# Syntax sugar.
-_ver = sys.version.lower()
-
-is_pypy = ('pypy' in _ver)
-is_jython = ('jython' in _ver)
-is_ironpython = ('iron' in _ver)
-
-# Assume CPython, if nothing else.
-is_cpython = not any((is_pypy, is_jython, is_ironpython))
-
-# Windows-based system.
-is_windows = 'win32' in str(sys.platform).lower()
-
-# Standard Linux 2+ system.
-is_linux = ('linux' in str(sys.platform).lower())
-is_osx = ('darwin' in str(sys.platform).lower())
-is_hpux = ('hpux' in str(sys.platform).lower())   # Complete guess.
-is_solaris = ('solar==' in str(sys.platform).lower())   # Complete guess.
-
-try:
-    import simplejson as json
-except ImportError:
-    import json
-
-# ---------
-# Specifics
-# ---------
-
-if is_py2:
-    from urllib import quote, unquote, quote_plus, unquote_plus, urlencode, getproxies, proxy_bypass
-    from urlparse import urlparse, urlunparse, urljoin, urlsplit, urldefrag
-    from urllib2 import parse_http_list
-    import cookielib
-    from Cookie import Morsel
-    from StringIO import StringIO
-    from .packages.urllib3.packages.ordered_dict import OrderedDict
-    from httplib import IncompleteRead
-
-    builtin_str = str
-    bytes = str
-    str = unicode
-    basestring = basestring
-    numeric_types = (int, long, float)
-
-
-elif is_py3:
-    from urllib.parse import urlparse, urlunparse, urljoin, urlsplit, urlencode, quote, unquote, quote_plus, unquote_plus, urldefrag
-    from urllib.request import parse_http_list, getproxies, proxy_bypass
-    from http import cookiejar as cookielib
-    from http.cookies import Morsel
-    from io import StringIO
-    from collections import OrderedDict
-    from http.client import IncompleteRead
-
-    builtin_str = str
-    str = str
-    bytes = bytes
-    basestring = (str, bytes)
-    numeric_types = (int, float)
diff --git a/bundle/requests/compat.pyc b/bundle/requests/compat.pyc
deleted file mode 100644
index 617a5de..0000000
Binary files a/bundle/requests/compat.pyc and /dev/null differ
diff --git a/bundle/requests/cookies.py b/bundle/requests/cookies.py
deleted file mode 100644
index 831c49c..0000000
--- a/bundle/requests/cookies.py
+++ /dev/null
@@ -1,454 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
-Compatibility code to be able to use `cookielib.CookieJar` with requests.
-
-requests.utils imports from here, so be careful with imports.
-"""
-
-import time
-import collections
-from .compat import cookielib, urlparse, urlunparse, Morsel
-
-try:
-    import threading
-    # grr, pyflakes: this fixes "redefinition of unused 'threading'"
-    threading
-except ImportError:
-    import dummy_threading as threading
-
-
-class MockRequest(object):
-    """Wraps a `requests.Request` to mimic a `urllib2.Request`.
-
-    The code in `cookielib.CookieJar` expects this interface in order to correctly
-    manage cookie policies, i.e., determine whether a cookie can be set, given the
-    domains of the request and the cookie.
-
-    The original request object is read-only. The client is responsible for collecting
-    the new headers via `get_new_headers()` and interpreting them appropriately. You
-    probably want `get_cookie_header`, defined below.
-    """
-
-    def __init__(self, request):
-        self._r = request
-        self._new_headers = {}
-        self.type = urlparse(self._r.url).scheme
-
-    def get_type(self):
-        return self.type
-
-    def get_host(self):
-        return urlparse(self._r.url).netloc
-
-    def get_origin_req_host(self):
-        return self.get_host()
-
-    def get_full_url(self):
-        # Only return the response's URL if the user hadn't set the Host
-        # header
-        if not self._r.headers.get('Host'):
-            return self._r.url
-        # If they did set it, retrieve it and reconstruct the expected domain
-        host = self._r.headers['Host']
-        parsed = urlparse(self._r.url)
-        # Reconstruct the URL as we expect it
-        return urlunparse([
-            parsed.scheme, host, parsed.path, parsed.params, parsed.query,
-            parsed.fragment
-        ])
-
-    def is_unverifiable(self):
-        return True
-
-    def has_header(self, name):
-        return name in self._r.headers or name in self._new_headers
-
-    def get_header(self, name, default=None):
-        return self._r.headers.get(name, self._new_headers.get(name, default))
-
-    def add_header(self, key, val):
-        """cookielib has no legitimate use for this method; add it back if you find one."""
-        raise NotImplementedError("Cookie headers should be added with add_unredirected_header()")
-
-    def add_unredirected_header(self, name, value):
-        self._new_headers[name] = value
-
-    def get_new_headers(self):
-        return self._new_headers
-
-    @property
-    def unverifiable(self):
-        return self.is_unverifiable()
-
-    @property
-    def origin_req_host(self):
-        return self.get_origin_req_host()
-
-    @property
-    def host(self):
-        return self.get_host()
-
-
-class MockResponse(object):
-    """Wraps a `httplib.HTTPMessage` to mimic a `urllib.addinfourl`.
-
-    ...what? Basically, expose the parsed HTTP headers from the server response
-    the way `cookielib` expects to see them.
-    """
-
-    def __init__(self, headers):
-        """Make a MockResponse for `cookielib` to read.
-
-        :param headers: a httplib.HTTPMessage or analogous carrying the headers
-        """
-        self._headers = headers
-
-    def info(self):
-        return self._headers
-
-    def getheaders(self, name):
-        self._headers.getheaders(name)
-
-
-def extract_cookies_to_jar(jar, request, response):
-    """Extract the cookies from the response into a CookieJar.
-
-    :param jar: cookielib.CookieJar (not necessarily a RequestsCookieJar)
-    :param request: our own requests.Request object
-    :param response: urllib3.HTTPResponse object
-    """
-    if not (hasattr(response, '_original_response') and
-            response._original_response):
-        return
-    # the _original_response field is the wrapped httplib.HTTPResponse object,
-    req = MockRequest(request)
-    # pull out the HTTPMessage with the headers and put it in the mock:
-    res = MockResponse(response._original_response.msg)
-    jar.extract_cookies(res, req)
-
-
-def get_cookie_header(jar, request):
-    """Produce an appropriate Cookie header string to be sent with `request`, or None."""
-    r = MockRequest(request)
-    jar.add_cookie_header(r)
-    return r.get_new_headers().get('Cookie')
-
-
-def remove_cookie_by_name(cookiejar, name, domain=None, path=None):
-    """Unsets a cookie by name, by default over all domains and paths.
-
-    Wraps CookieJar.clear(), is O(n).
-    """
-    clearables = []
-    for cookie in cookiejar:
-        if cookie.name == name:
-            if domain is None or domain == cookie.domain:
-                if path is None or path == cookie.path:
-                    clearables.append((cookie.domain, cookie.path, cookie.name))
-
-    for domain, path, name in clearables:
-        cookiejar.clear(domain, path, name)
-
-
-class CookieConflictError(RuntimeError):
-    """There are two cookies that meet the criteria specified in the cookie jar.
-    Use .get and .set and include domain and path args in order to be more specific."""
-
-
-class RequestsCookieJar(cookielib.CookieJar, collections.MutableMapping):
-    """Compatibility class; is a cookielib.CookieJar, but exposes a dict interface.
-
-    This is the CookieJar we create by default for requests and sessions that
-    don't specify one, since some clients may expect response.cookies and
-    session.cookies to support dict operations.
-
-    Don't use the dict interface internally; it's just for compatibility with
-    with external client code. All `requests` code should work out of the box
-    with externally provided instances of CookieJar, e.g., LWPCookieJar and
-    FileCookieJar.
-
-    Caution: dictionary operations that are normally O(1) may be O(n).
-
-    Unlike a regular CookieJar, this class is pickleable.
-    """
-
-    def get(self, name, default=None, domain=None, path=None):
-        """Dict-like get() that also supports optional domain and path args in
-        order to resolve naming collisions from using one cookie jar over
-        multiple domains. Caution: operation is O(n), not O(1)."""
-        try:
-            return self._find_no_duplicates(name, domain, path)
-        except KeyError:
-            return default
-
-    def set(self, name, value, **kwargs):
-        """Dict-like set() that also supports optional domain and path args in
-        order to resolve naming collisions from using one cookie jar over
-        multiple domains."""
-        # support client code that unsets cookies by assignment of a None value:
-        if value is None:
-            remove_cookie_by_name(self, name, domain=kwargs.get('domain'), path=kwargs.get('path'))
-            return
-
-        if isinstance(value, Morsel):
-            c = morsel_to_cookie(value)
-        else:
-            c = create_cookie(name, value, **kwargs)
-        self.set_cookie(c)
-        return c
-
-    def iterkeys(self):
-        """Dict-like iterkeys() that returns an iterator of names of cookies from the jar.
-        See itervalues() and iteritems()."""
-        for cookie in iter(self):
-            yield cookie.name
-
-    def keys(self):
-        """Dict-like keys() that returns a list of names of cookies from the jar.
-        See values() and items()."""
-        return list(self.iterkeys())
-
-    def itervalues(self):
-        """Dict-like itervalues() that returns an iterator of values of cookies from the jar.
-        See iterkeys() and iteritems()."""
-        for cookie in iter(self):
-            yield cookie.value
-
-    def values(self):
-        """Dict-like values() that returns a list of values of cookies from the jar.
-        See keys() and items()."""
-        return list(self.itervalues())
-
-    def iteritems(self):
-        """Dict-like iteritems() that returns an iterator of name-value tuples from the jar.
-        See iterkeys() and itervalues()."""
-        for cookie in iter(self):
-            yield cookie.name, cookie.value
-
-    def items(self):
-        """Dict-like items() that returns a list of name-value tuples from the jar.
-        See keys() and values(). Allows client-code to call "dict(RequestsCookieJar)
-        and get a vanilla python dict of key value pairs."""
-        return list(self.iteritems())
-
-    def list_domains(self):
-        """Utility method to list all the domains in the jar."""
-        domains = []
-        for cookie in iter(self):
-            if cookie.domain not in domains:
-                domains.append(cookie.domain)
-        return domains
-
-    def list_paths(self):
-        """Utility method to list all the paths in the jar."""
-        paths = []
-        for cookie in iter(self):
-            if cookie.path not in paths:
-                paths.append(cookie.path)
-        return paths
-
-    def multiple_domains(self):
-        """Returns True if there are multiple domains in the jar.
-        Returns False otherwise."""
-        domains = []
-        for cookie in iter(self):
-            if cookie.domain is not None and cookie.domain in domains:
-                return True
-            domains.append(cookie.domain)
-        return False  # there is only one domain in jar
-
-    def get_dict(self, domain=None, path=None):
-        """Takes as an argument an optional domain and path and returns a plain old
-        Python dict of name-value pairs of cookies that meet the requirements."""
-        dictionary = {}
-        for cookie in iter(self):
-            if (domain is None or cookie.domain == domain) and (path is None
-                                                or cookie.path == path):
-                dictionary[cookie.name] = cookie.value
-        return dictionary
-
-    def __getitem__(self, name):
-        """Dict-like __getitem__() for compatibility with client code. Throws exception
-        if there are more than one cookie with name. In that case, use the more
-        explicit get() method instead. Caution: operation is O(n), not O(1)."""
-
-        return self._find_no_duplicates(name)
-
-    def __setitem__(self, name, value):
-        """Dict-like __setitem__ for compatibility with client code. Throws exception
-        if there is already a cookie of that name in the jar. In that case, use the more
-        explicit set() method instead."""
-
-        self.set(name, value)
-
-    def __delitem__(self, name):
-        """Deletes a cookie given a name. Wraps cookielib.CookieJar's remove_cookie_by_name()."""
-        remove_cookie_by_name(self, name)
-
-    def set_cookie(self, cookie, *args, **kwargs):
-        if hasattr(cookie.value, 'startswith') and cookie.value.startswith('"') and cookie.value.endswith('"'):
-            cookie.value = cookie.value.replace('\\"', '')
-        return super(RequestsCookieJar, self).set_cookie(cookie, *args, **kwargs)
-
-    def update(self, other):
-        """Updates this jar with cookies from another CookieJar or dict-like"""
-        if isinstance(other, cookielib.CookieJar):
-            for cookie in other:
-                self.set_cookie(cookie)
-        else:
-            super(RequestsCookieJar, self).update(other)
-
-    def _find(self, name, domain=None, path=None):
-        """Requests uses this method internally to get cookie values. Takes as args name
-        and optional domain and path. Returns a cookie.value. If there are conflicting cookies,
-        _find arbitrarily chooses one. See _find_no_duplicates if you want an exception thrown
-        if there are conflicting cookies."""
-        for cookie in iter(self):
-            if cookie.name == name:
-                if domain is None or cookie.domain == domain:
-                    if path is None or cookie.path == path:
-                        return cookie.value
-
-        raise KeyError('name=%r, domain=%r, path=%r' % (name, domain, path))
-
-    def _find_no_duplicates(self, name, domain=None, path=None):
-        """__get_item__ and get call _find_no_duplicates -- never used in Requests internally.
-        Takes as args name and optional domain and path. Returns a cookie.value.
-        Throws KeyError if cookie is not found and CookieConflictError if there are
-        multiple cookies that match name and optionally domain and path."""
-        toReturn = None
-        for cookie in iter(self):
-            if cookie.name == name:
-                if domain is None or cookie.domain == domain:
-                    if path is None or cookie.path == path:
-                        if toReturn is not None:  # if there are multiple cookies that meet passed in criteria
-                            raise CookieConflictError('There are multiple cookies with name, %r' % (name))
-                        toReturn = cookie.value  # we will eventually return this as long as no cookie conflict
-
-        if toReturn:
-            return toReturn
-        raise KeyError('name=%r, domain=%r, path=%r' % (name, domain, path))
-
-    def __getstate__(self):
-        """Unlike a normal CookieJar, this class is pickleable."""
-        state = self.__dict__.copy()
-        # remove the unpickleable RLock object
-        state.pop('_cookies_lock')
-        return state
-
-    def __setstate__(self, state):
-        """Unlike a normal CookieJar, this class is pickleable."""
-        self.__dict__.update(state)
-        if '_cookies_lock' not in self.__dict__:
-            self._cookies_lock = threading.RLock()
-
-    def copy(self):
-        """Return a copy of this RequestsCookieJar."""
-        new_cj = RequestsCookieJar()
-        new_cj.update(self)
-        return new_cj
-
-
-def create_cookie(name, value, **kwargs):
-    """Make a cookie from underspecified parameters.
-
-    By default, the pair of `name` and `value` will be set for the domain ''
-    and sent on every request (this is sometimes called a "supercookie").
-    """
-    result = dict(
-        version=0,
-        name=name,
-        value=value,
-        port=None,
-        domain='',
-        path='/',
-        secure=False,
-        expires=None,
-        discard=True,
-        comment=None,
-        comment_url=None,
-        rest={'HttpOnly': None},
-        rfc2109=False,)
-
-    badargs = set(kwargs) - set(result)
-    if badargs:
-        err = 'create_cookie() got unexpected keyword arguments: %s'
-        raise TypeError(err % list(badargs))
-
-    result.update(kwargs)
-    result['port_specified'] = bool(result['port'])
-    result['domain_specified'] = bool(result['domain'])
-    result['domain_initial_dot'] = result['domain'].startswith('.')
-    result['path_specified'] = bool(result['path'])
-
-    return cookielib.Cookie(**result)
-
-
-def morsel_to_cookie(morsel):
-    """Convert a Morsel object into a Cookie containing the one k/v pair."""
-
-    expires = None
-    if morsel['max-age']:
-        expires = time.time() + morsel['max-age']
-    elif morsel['expires']:
-        time_template = '%a, %d-%b-%Y %H:%M:%S GMT'
-        expires = time.mktime(
-            time.strptime(morsel['expires'], time_template)) - time.timezone
-    return create_cookie(
-        comment=morsel['comment'],
-        comment_url=bool(morsel['comment']),
-        discard=False,
-        domain=morsel['domain'],
-        expires=expires,
-        name=morsel.key,
-        path=morsel['path'],
-        port=None,
-        rest={'HttpOnly': morsel['httponly']},
-        rfc2109=False,
-        secure=bool(morsel['secure']),
-        value=morsel.value,
-        version=morsel['version'] or 0,
-    )
-
-
-def cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True):
-    """Returns a CookieJar from a key/value dictionary.
-
-    :param cookie_dict: Dict of key/values to insert into CookieJar.
-    :param cookiejar: (optional) A cookiejar to add the cookies to.
-    :param overwrite: (optional) If False, will not replace cookies
-        already in the jar with new ones.
-    """
-    if cookiejar is None:
-        cookiejar = RequestsCookieJar()
-
-    if cookie_dict is not None:
-        names_from_jar = [cookie.name for cookie in cookiejar]
-        for name in cookie_dict:
-            if overwrite or (name not in names_from_jar):
-                cookiejar.set_cookie(create_cookie(name, cookie_dict[name]))
-
-    return cookiejar
-
-
-def merge_cookies(cookiejar, cookies):
-    """Add cookies to cookiejar and returns a merged CookieJar.
-
-    :param cookiejar: CookieJar object to add the cookies to.
-    :param cookies: Dictionary or CookieJar object to be added.
-    """
-    if not isinstance(cookiejar, cookielib.CookieJar):
-        raise ValueError('You can only merge into CookieJar')
-    
-    if isinstance(cookies, dict):
-        cookiejar = cookiejar_from_dict(
-            cookies, cookiejar=cookiejar, overwrite=False)
-    elif isinstance(cookies, cookielib.CookieJar):
-        try:
-            cookiejar.update(cookies)
-        except AttributeError:
-            for cookie_in_jar in cookies:
-                cookiejar.set_cookie(cookie_in_jar)
-
-    return cookiejar
diff --git a/bundle/requests/cookies.pyc b/bundle/requests/cookies.pyc
deleted file mode 100644
index 09f8053..0000000
Binary files a/bundle/requests/cookies.pyc and /dev/null differ
diff --git a/bundle/requests/exceptions.py b/bundle/requests/exceptions.py
deleted file mode 100644
index a4ee9d6..0000000
--- a/bundle/requests/exceptions.py
+++ /dev/null
@@ -1,75 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
-requests.exceptions
-~~~~~~~~~~~~~~~~~~~
-
-This module contains the set of Requests' exceptions.
-
-"""
-from .packages.urllib3.exceptions import HTTPError as BaseHTTPError
-
-
-class RequestException(IOError):
-    """There was an ambiguous exception that occurred while handling your
-    request."""
-
-    def __init__(self, *args, **kwargs):
-        """
-        Initialize RequestException with `request` and `response` objects.
-        """
-        response = kwargs.pop('response', None)
-        self.response = response
-        self.request = kwargs.pop('request', None)
-        if (response is not None and not self.request and
-                hasattr(response, 'request')):
-            self.request = self.response.request
-        super(RequestException, self).__init__(*args, **kwargs)
-
-
-class HTTPError(RequestException):
-    """An HTTP error occurred."""
-
-
-class ConnectionError(RequestException):
-    """A Connection error occurred."""
-
-
-class ProxyError(ConnectionError):
-    """A proxy error occurred."""
-
-
-class SSLError(ConnectionError):
-    """An SSL error occurred."""
-
-
-class Timeout(RequestException):
-    """The request timed out."""
-
-
-class URLRequired(RequestException):
-    """A valid URL is required to make a request."""
-
-
-class TooManyRedirects(RequestException):
-    """Too many redirects."""
-
-
-class MissingSchema(RequestException, ValueError):
-    """The URL schema (e.g. http or https) is missing."""
-
-
-class InvalidSchema(RequestException, ValueError):
-    """See defaults.py for valid schemas."""
-
-
-class InvalidURL(RequestException, ValueError):
-    """ The URL provided was somehow invalid. """
-
-
-class ChunkedEncodingError(RequestException):
-    """The server declared chunked encoding but sent an invalid chunk."""
-
-
-class ContentDecodingError(RequestException, BaseHTTPError):
-    """Failed to decode response content"""
diff --git a/bundle/requests/exceptions.pyc b/bundle/requests/exceptions.pyc
deleted file mode 100644
index b4195b6..0000000
Binary files a/bundle/requests/exceptions.pyc and /dev/null differ
diff --git a/bundle/requests/hooks.py b/bundle/requests/hooks.py
deleted file mode 100644
index 5dfaf6b..0000000
--- a/bundle/requests/hooks.py
+++ /dev/null
@@ -1,45 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
-requests.hooks
-~~~~~~~~~~~~~~
-
-This module provides the capabilities for the Requests hooks system.
-
-Available hooks:
-
-``response``:
-    The response generated from a Request.
-
-"""
-
-
-HOOKS = ['response']
-
-
-def default_hooks():
-    hooks = {}
-    for event in HOOKS:
-        hooks[event] = []
-    return hooks
-
-# TODO: response is the only one
-
-
-def dispatch_hook(key, hooks, hook_data, **kwargs):
-    """Dispatches a hook dictionary on a given piece of data."""
-
-    hooks = hooks or dict()
-
-    if key in hooks:
-        hooks = hooks.get(key)
-
-        if hasattr(hooks, '__call__'):
-            hooks = [hooks]
-
-        for hook in hooks:
-            _hook_data = hook(hook_data, **kwargs)
-            if _hook_data is not None:
-                hook_data = _hook_data
-
-    return hook_data
diff --git a/bundle/requests/hooks.pyc b/bundle/requests/hooks.pyc
deleted file mode 100644
index 4dbf52c..0000000
Binary files a/bundle/requests/hooks.pyc and /dev/null differ
diff --git a/bundle/requests/models.py b/bundle/requests/models.py
deleted file mode 100644
index 7390d1c..0000000
--- a/bundle/requests/models.py
+++ /dev/null
@@ -1,799 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
-requests.models
-~~~~~~~~~~~~~~~
-
-This module contains the primary objects that power Requests.
-"""
-
-import collections
-import datetime
-
-from io import BytesIO, UnsupportedOperation
-from .hooks import default_hooks
-from .structures import CaseInsensitiveDict
-
-from .auth import HTTPBasicAuth
-from .cookies import cookiejar_from_dict, get_cookie_header
-from .packages.urllib3.fields import RequestField
-from .packages.urllib3.filepost import encode_multipart_formdata
-from .packages.urllib3.util import parse_url
-from .packages.urllib3.exceptions import DecodeError
-from .exceptions import (
-    HTTPError, RequestException, MissingSchema, InvalidURL,
-    ChunkedEncodingError, ContentDecodingError)
-from .utils import (
-    guess_filename, get_auth_from_url, requote_uri,
-    stream_decode_response_unicode, to_key_val_list, parse_header_links,
-    iter_slices, guess_json_utf, super_len, to_native_string)
-from .compat import (
-    cookielib, urlunparse, urlsplit, urlencode, str, bytes, StringIO,
-    is_py2, chardet, json, builtin_str, basestring, IncompleteRead)
-from .status_codes import codes
-
-#: The set of HTTP status codes that indicate an automatically
-#: processable redirect.
-REDIRECT_STATI = (
-    codes.moved,  # 301
-    codes.found,  # 302
-    codes.other,  # 303
-    codes.temporary_moved,  # 307
-)
-DEFAULT_REDIRECT_LIMIT = 30
-CONTENT_CHUNK_SIZE = 10 * 1024
-ITER_CHUNK_SIZE = 512
-
-
-class RequestEncodingMixin(object):
-    @property
-    def path_url(self):
-        """Build the path URL to use."""
-
-        url = []
-
-        p = urlsplit(self.url)
-
-        path = p.path
-        if not path:
-            path = '/'
-
-        url.append(path)
-
-        query = p.query
-        if query:
-            url.append('?')
-            url.append(query)
-
-        return ''.join(url)
-
-    @staticmethod
-    def _encode_params(data):
-        """Encode parameters in a piece of data.
-
-        Will successfully encode parameters when passed as a dict or a list of
-        2-tuples. Order is retained if data is a list of 2-tuples but arbitrary
-        if parameters are supplied as a dict.
-        """
-
-        if isinstance(data, (str, bytes)):
-            return data
-        elif hasattr(data, 'read'):
-            return data
-        elif hasattr(data, '__iter__'):
-            result = []
-            for k, vs in to_key_val_list(data):
-                if isinstance(vs, basestring) or not hasattr(vs, '__iter__'):
-                    vs = [vs]
-                for v in vs:
-                    if v is not None:
-                        result.append(
-                            (k.encode('utf-8') if isinstance(k, str) else k,
-                             v.encode('utf-8') if isinstance(v, str) else v))
-            return urlencode(result, doseq=True)
-        else:
-            return data
-
-    @staticmethod
-    def _encode_files(files, data):
-        """Build the body for a multipart/form-data request.
-
-        Will successfully encode files when passed as a dict or a list of
-        2-tuples. Order is retained if data is a list of 2-tuples but arbitrary
-        if parameters are supplied as a dict.
-
-        """
-        if (not files):
-            raise ValueError("Files must be provided.")
-        elif isinstance(data, basestring):
-            raise ValueError("Data must not be a string.")
-
-        new_fields = []
-        fields = to_key_val_list(data or {})
-        files = to_key_val_list(files or {})
-
-        for field, val in fields:
-            if isinstance(val, basestring) or not hasattr(val, '__iter__'):
-                val = [val]
-            for v in val:
-                if v is not None:
-                    # Don't call str() on bytestrings: in Py3 it all goes wrong.
-                    if not isinstance(v, bytes):
-                        v = str(v)
-
-                    new_fields.append(
-                        (field.decode('utf-8') if isinstance(field, bytes) else field,
-                         v.encode('utf-8') if isinstance(v, str) else v))
-
-        for (k, v) in files:
-            # support for explicit filename
-            ft = None
-            fh = None
-            if isinstance(v, (tuple, list)):
-                if len(v) == 2:
-                    fn, fp = v
-                elif len(v) == 3:
-                    fn, fp, ft = v
-                else:
-                    fn, fp, ft, fh = v
-            else:
-                fn = guess_filename(v) or k
-                fp = v
-            if isinstance(fp, str):
-                fp = StringIO(fp)
-            if isinstance(fp, bytes):
-                fp = BytesIO(fp)
-
-            rf = RequestField(name=k, data=fp.read(),
-                              filename=fn, headers=fh)
-            rf.make_multipart(content_type=ft)
-            new_fields.append(rf)
-
-        body, content_type = encode_multipart_formdata(new_fields)
-
-        return body, content_type
-
-
-class RequestHooksMixin(object):
-    def register_hook(self, event, hook):
-        """Properly register a hook."""
-
-        if event not in self.hooks:
-            raise ValueError('Unsupported event specified, with event name "%s"' % (event))
-
-        if isinstance(hook, collections.Callable):
-            self.hooks[event].append(hook)
-        elif hasattr(hook, '__iter__'):
-            self.hooks[event].extend(h for h in hook if isinstance(h, collections.Callable))
-
-    def deregister_hook(self, event, hook):
-        """Deregister a previously registered hook.
-        Returns True if the hook existed, False if not.
-        """
-
-        try:
-            self.hooks[event].remove(hook)
-            return True
-        except ValueError:
-            return False
-
-
-class Request(RequestHooksMixin):
-    """A user-created :class:`Request <Request>` object.
-
-    Used to prepare a :class:`PreparedRequest <PreparedRequest>`, which is sent to the server.
-
-    :param method: HTTP method to use.
-    :param url: URL to send.
-    :param headers: dictionary of headers to send.
-    :param files: dictionary of {filename: fileobject} files to multipart upload.
-    :param data: the body to attach the request. If a dictionary is provided, form-encoding will take place.
-    :param params: dictionary of URL parameters to append to the URL.
-    :param auth: Auth handler or (user, pass) tuple.
-    :param cookies: dictionary or CookieJar of cookies to attach to this request.
-    :param hooks: dictionary of callback hooks, for internal usage.
-
-    Usage::
-
-      >>> import requests
-      >>> req = requests.Request('GET', 'http://httpbin.org/get')
-      >>> req.prepare()
-      <PreparedRequest [GET]>
-
-    """
-    def __init__(self,
-        method=None,
-        url=None,
-        headers=None,
-        files=None,
-        data=None,
-        params=None,
-        auth=None,
-        cookies=None,
-        hooks=None):
-
-        # Default empty dicts for dict params.
-        data = [] if data is None else data
-        files = [] if files is None else files
-        headers = {} if headers is None else headers
-        params = {} if params is None else params
-        hooks = {} if hooks is None else hooks
-
-        self.hooks = default_hooks()
-        for (k, v) in list(hooks.items()):
-            self.register_hook(event=k, hook=v)
-
-        self.method = method
-        self.url = url
-        self.headers = headers
-        self.files = files
-        self.data = data
-        self.params = params
-        self.auth = auth
-        self.cookies = cookies
-
-    def __repr__(self):
-        return '<Request [%s]>' % (self.method)
-
-    def prepare(self):
-        """Constructs a :class:`PreparedRequest <PreparedRequest>` for transmission and returns it."""
-        p = PreparedRequest()
-        p.prepare(
-            method=self.method,
-            url=self.url,
-            headers=self.headers,
-            files=self.files,
-            data=self.data,
-            params=self.params,
-            auth=self.auth,
-            cookies=self.cookies,
-            hooks=self.hooks,
-        )
-        return p
-
-
-class PreparedRequest(RequestEncodingMixin, RequestHooksMixin):
-    """The fully mutable :class:`PreparedRequest <PreparedRequest>` object,
-    containing the exact bytes that will be sent to the server.
-
-    Generated from either a :class:`Request <Request>` object or manually.
-
-    Usage::
-
-      >>> import requests
-      >>> req = requests.Request('GET', 'http://httpbin.org/get')
-      >>> r = req.prepare()
-      <PreparedRequest [GET]>
-
-      >>> s = requests.Session()
-      >>> s.send(r)
-      <Response [200]>
-
-    """
-
-    def __init__(self):
-        #: HTTP verb to send to the server.
-        self.method = None
-        #: HTTP URL to send the request to.
-        self.url = None
-        #: dictionary of HTTP headers.
-        self.headers = None
-        # The `CookieJar` used to create the Cookie header will be stored here
-        # after prepare_cookies is called
-        self._cookies = None
-        #: request body to send to the server.
-        self.body = None
-        #: dictionary of callback hooks, for internal usage.
-        self.hooks = default_hooks()
-
-    def prepare(self, method=None, url=None, headers=None, files=None,
-                data=None, params=None, auth=None, cookies=None, hooks=None):
-        """Prepares the entire request with the given parameters."""
-
-        self.prepare_method(method)
-        self.prepare_url(url, params)
-        self.prepare_headers(headers)
-        self.prepare_cookies(cookies)
-        self.prepare_body(data, files)
-        self.prepare_auth(auth, url)
-        # Note that prepare_auth must be last to enable authentication schemes
-        # such as OAuth to work on a fully prepared request.
-
-        # This MUST go after prepare_auth. Authenticators could add a hook
-        self.prepare_hooks(hooks)
-
-    def __repr__(self):
-        return '<PreparedRequest [%s]>' % (self.method)
-
-    def copy(self):
-        p = PreparedRequest()
-        p.method = self.method
-        p.url = self.url
-        p.headers = self.headers.copy()
-        p._cookies = self._cookies.copy()
-        p.body = self.body
-        p.hooks = self.hooks
-        return p
-
-    def prepare_method(self, method):
-        """Prepares the given HTTP method."""
-        self.method = method
-        if self.method is not None:
-            self.method = self.method.upper()
-
-    def prepare_url(self, url, params):
-        """Prepares the given HTTP URL."""
-        #: Accept objects that have string representations.
-        try:
-            url = unicode(url)
-        except NameError:
-            # We're on Python 3.
-            url = str(url)
-        except UnicodeDecodeError:
-            pass
-
-        # Don't do any URL preparation for oddball schemes
-        if ':' in url and not url.lower().startswith('http'):
-            self.url = url
-            return
-
-        # Support for unicode domain names and paths.
-        scheme, auth, host, port, path, query, fragment = parse_url(url)
-
-        if not scheme:
-            raise MissingSchema("Invalid URL {0!r}: No schema supplied. "
-                                "Perhaps you meant http://{0}?".format(url))
-
-        if not host:
-            raise InvalidURL("Invalid URL %r: No host supplied" % url)
-
-        # Only want to apply IDNA to the hostname
-        try:
-            host = host.encode('idna').decode('utf-8')
-        except UnicodeError:
-            raise InvalidURL('URL has an invalid label.')
-
-        # Carefully reconstruct the network location
-        netloc = auth or ''
-        if netloc:
-            netloc += '@'
-        netloc += host
-        if port:
-            netloc += ':' + str(port)
-
-        # Bare domains aren't valid URLs.
-        if not path:
-            path = '/'
-
-        if is_py2:
-            if isinstance(scheme, str):
-                scheme = scheme.encode('utf-8')
-            if isinstance(netloc, str):
-                netloc = netloc.encode('utf-8')
-            if isinstance(path, str):
-                path = path.encode('utf-8')
-            if isinstance(query, str):
-                query = query.encode('utf-8')
-            if isinstance(fragment, str):
-                fragment = fragment.encode('utf-8')
-
-        enc_params = self._encode_params(params)
-        if enc_params:
-            if query:
-                query = '%s&%s' % (query, enc_params)
-            else:
-                query = enc_params
-
-        url = requote_uri(urlunparse([scheme, netloc, path, None, query, fragment]))
-        self.url = url
-
-    def prepare_headers(self, headers):
-        """Prepares the given HTTP headers."""
-
-        if headers:
-            self.headers = CaseInsensitiveDict((to_native_string(name), value) for name, value in headers.items())
-        else:
-            self.headers = CaseInsensitiveDict()
-
-    def prepare_body(self, data, files):
-        """Prepares the given HTTP body data."""
-
-        # Check if file, fo, generator, iterator.
-        # If not, run through normal process.
-
-        # Nottin' on you.
-        body = None
-        content_type = None
-        length = None
-
-        is_stream = all([
-            hasattr(data, '__iter__'),
-            not isinstance(data, (basestring, list, tuple, dict))
-        ])
-
-        try:
-            length = super_len(data)
-        except (TypeError, AttributeError, UnsupportedOperation):
-            length = None
-
-        if is_stream:
-            body = data
-
-            if files:
-                raise NotImplementedError('Streamed bodies and files are mutually exclusive.')
-
-            if length is not None:
-                self.headers['Content-Length'] = builtin_str(length)
-            else:
-                self.headers['Transfer-Encoding'] = 'chunked'
-        else:
-            # Multi-part file uploads.
-            if files:
-                (body, content_type) = self._encode_files(files, data)
-            else:
-                if data:
-                    body = self._encode_params(data)
-                    if isinstance(data, str) or isinstance(data, builtin_str) or hasattr(data, 'read'):
-                        content_type = None
-                    else:
-                        content_type = 'application/x-www-form-urlencoded'
-
-            self.prepare_content_length(body)
-
-            # Add content-type if it wasn't explicitly provided.
-            if (content_type) and (not 'content-type' in self.headers):
-                self.headers['Content-Type'] = content_type
-
-        self.body = body
-
-    def prepare_content_length(self, body):
-        if hasattr(body, 'seek') and hasattr(body, 'tell'):
-            body.seek(0, 2)
-            self.headers['Content-Length'] = builtin_str(body.tell())
-            body.seek(0, 0)
-        elif body is not None:
-            l = super_len(body)
-            if l:
-                self.headers['Content-Length'] = builtin_str(l)
-        elif self.method not in ('GET', 'HEAD'):
-            self.headers['Content-Length'] = '0'
-
-    def prepare_auth(self, auth, url=''):
-        """Prepares the given HTTP auth data."""
-
-        # If no Auth is explicitly provided, extract it from the URL first.
-        if auth is None:
-            url_auth = get_auth_from_url(self.url)
-            auth = url_auth if any(url_auth) else None
-
-        if auth:
-            if isinstance(auth, tuple) and len(auth) == 2:
-                # special-case basic HTTP auth
-                auth = HTTPBasicAuth(*auth)
-
-            # Allow auth to make its changes.
-            r = auth(self)
-
-            # Update self to reflect the auth changes.
-            self.__dict__.update(r.__dict__)
-
-            # Recompute Content-Length
-            self.prepare_content_length(self.body)
-
-    def prepare_cookies(self, cookies):
-        """Prepares the given HTTP cookie data."""
-
-        if isinstance(cookies, cookielib.CookieJar):
-            self._cookies = cookies
-        else:
-            self._cookies = cookiejar_from_dict(cookies)
-
-        cookie_header = get_cookie_header(self._cookies, self)
-        if cookie_header is not None:
-            self.headers['Cookie'] = cookie_header
-
-    def prepare_hooks(self, hooks):
-        """Prepares the given hooks."""
-        for event in hooks:
-            self.register_hook(event, hooks[event])
-
-
-class Response(object):
-    """The :class:`Response <Response>` object, which contains a
-    server's response to an HTTP request.
-    """
-
-    __attrs__ = [
-        '_content',
-        'status_code',
-        'headers',
-        'url',
-        'history',
-        'encoding',
-        'reason',
-        'cookies',
-        'elapsed',
-        'request',
-    ]
-
-    def __init__(self):
-        super(Response, self).__init__()
-
-        self._content = False
-        self._content_consumed = False
-
-        #: Integer Code of responded HTTP Status, e.g. 404 or 200.
-        self.status_code = None
-
-        #: Case-insensitive Dictionary of Response Headers.
-        #: For example, ``headers['content-encoding']`` will return the
-        #: value of a ``'Content-Encoding'`` response header.
-        self.headers = CaseInsensitiveDict()
-
-        #: File-like object representation of response (for advanced usage).
-        #: Use of ``raw`` requires that ``stream=True`` be set on the request.
-        # This requirement does not apply for use internally to Requests.
-        self.raw = None
-
-        #: Final URL location of Response.
-        self.url = None
-
-        #: Encoding to decode with when accessing r.text.
-        self.encoding = None
-
-        #: A list of :class:`Response <Response>` objects from
-        #: the history of the Request. Any redirect responses will end
-        #: up here. The list is sorted from the oldest to the most recent request.
-        self.history = []
-
-        #: Textual reason of responded HTTP Status, e.g. "Not Found" or "OK".
-        self.reason = None
-
-        #: A CookieJar of Cookies the server sent back.
-        self.cookies = cookiejar_from_dict({})
-
-        #: The amount of time elapsed between sending the request
-        #: and the arrival of the response (as a timedelta)
-        self.elapsed = datetime.timedelta(0)
-
-    def __getstate__(self):
-        # Consume everything; accessing the content attribute makes
-        # sure the content has been fully read.
-        if not self._content_consumed:
-            self.content
-
-        return dict(
-            (attr, getattr(self, attr, None))
-            for attr in self.__attrs__
-        )
-
-    def __setstate__(self, state):
-        for name, value in state.items():
-            setattr(self, name, value)
-
-        # pickled objects do not have .raw
-        setattr(self, '_content_consumed', True)
-        setattr(self, 'raw', None)
-
-    def __repr__(self):
-        return '<Response [%s]>' % (self.status_code)
-
-    def __bool__(self):
-        """Returns true if :attr:`status_code` is 'OK'."""
-        return self.ok
-
-    def __nonzero__(self):
-        """Returns true if :attr:`status_code` is 'OK'."""
-        return self.ok
-
-    def __iter__(self):
-        """Allows you to use a response as an iterator."""
-        return self.iter_content(128)
-
-    @property
-    def ok(self):
-        try:
-            self.raise_for_status()
-        except RequestException:
-            return False
-        return True
-
-    @property
-    def is_redirect(self):
-        """True if this Response is a well-formed HTTP redirect that could have
-        been processed automatically (by :meth:`Session.resolve_redirects`).
-        """
-        return ('location' in self.headers and self.status_code in REDIRECT_STATI)
-
-    @property
-    def apparent_encoding(self):
-        """The apparent encoding, provided by the chardet library"""
-        return chardet.detect(self.content)['encoding']
-
-    def iter_content(self, chunk_size=1, decode_unicode=False):
-        """Iterates over the response data.  When stream=True is set on the
-        request, this avoids reading the content at once into memory for
-        large responses.  The chunk size is the number of bytes it should
-        read into memory.  This is not necessarily the length of each item
-        returned as decoding can take place.
-        """
-        if self._content_consumed:
-            # simulate reading small chunks of the content
-            return iter_slices(self._content, chunk_size)
-
-        def generate():
-            try:
-                # Special case for urllib3.
-                try:
-                    for chunk in self.raw.stream(chunk_size, decode_content=True):
-                        yield chunk
-                except IncompleteRead as e:
-                    raise ChunkedEncodingError(e)
-                except DecodeError as e:
-                    raise ContentDecodingError(e)
-            except AttributeError:
-                # Standard file-like object.
-                while True:
-                    chunk = self.raw.read(chunk_size)
-                    if not chunk:
-                        break
-                    yield chunk
-
-            self._content_consumed = True
-
-        gen = generate()
-
-        if decode_unicode:
-            gen = stream_decode_response_unicode(gen, self)
-
-        return gen
-
-    def iter_lines(self, chunk_size=ITER_CHUNK_SIZE, decode_unicode=None):
-        """Iterates over the response data, one line at a time.  When
-        stream=True is set on the request, this avoids reading the
-        content at once into memory for large responses.
-        """
-
-        pending = None
-
-        for chunk in self.iter_content(chunk_size=chunk_size, decode_unicode=decode_unicode):
-
-            if pending is not None:
-                chunk = pending + chunk
-            lines = chunk.splitlines()
-
-            if lines and lines[-1] and chunk and lines[-1][-1] == chunk[-1]:
-                pending = lines.pop()
-            else:
-                pending = None
-
-            for line in lines:
-                yield line
-
-        if pending is not None:
-            yield pending
-
-    @property
-    def content(self):
-        """Content of the response, in bytes."""
-
-        if self._content is False:
-            # Read the contents.
-            try:
-                if self._content_consumed:
-                    raise RuntimeError(
-                        'The content for this response was already consumed')
-
-                if self.status_code == 0:
-                    self._content = None
-                else:
-                    self._content = bytes().join(self.iter_content(CONTENT_CHUNK_SIZE)) or bytes()
-
-            except AttributeError:
-                self._content = None
-
-        self._content_consumed = True
-        # don't need to release the connection; that's been handled by urllib3
-        # since we exhausted the data.
-        return self._content
-
-    @property
-    def text(self):
-        """Content of the response, in unicode.
-
-        If Response.encoding is None, encoding will be guessed using
-        ``chardet``.
-
-        The encoding of the response content is determined based solely on HTTP
-        headers, following RFC 2616 to the letter. If you can take advantage of
-        non-HTTP knowledge to make a better guess at the encoding, you should
-        set ``r.encoding`` appropriately before accessing this property.
-        """
-
-        # Try charset from content-type
-        content = None
-        encoding = self.encoding
-
-        if not self.content:
-            return str('')
-
-        # Fallback to auto-detected encoding.
-        if self.encoding is None:
-            encoding = self.apparent_encoding
-
-        # Decode unicode from given encoding.
-        try:
-            content = str(self.content, encoding, errors='replace')
-        except (LookupError, TypeError):
-            # A LookupError is raised if the encoding was not found which could
-            # indicate a misspelling or similar mistake.
-            #
-            # A TypeError can be raised if encoding is None
-            #
-            # So we try blindly encoding.
-            content = str(self.content, errors='replace')
-
-        return content
-
-    def json(self, **kwargs):
-        """Returns the json-encoded content of a response, if any.
-
-        :param \*\*kwargs: Optional arguments that ``json.loads`` takes.
-        """
-
-        if not self.encoding and len(self.content) > 3:
-            # No encoding set. JSON RFC 4627 section 3 states we should expect
-            # UTF-8, -16 or -32. Detect which one to use; If the detection or
-            # decoding fails, fall back to `self.text` (using chardet to make
-            # a best guess).
-            encoding = guess_json_utf(self.content)
-            if encoding is not None:
-                try:
-                    return json.loads(self.content.decode(encoding), **kwargs)
-                except UnicodeDecodeError:
-                    # Wrong UTF codec detected; usually because it's not UTF-8
-                    # but some other 8-bit codec.  This is an RFC violation,
-                    # and the server didn't bother to tell us what codec *was*
-                    # used.
-                    pass
-        return json.loads(self.text, **kwargs)
-
-    @property
-    def links(self):
-        """Returns the parsed header links of the response, if any."""
-
-        header = self.headers.get('link')
-
-        # l = MultiDict()
-        l = {}
-
-        if header:
-            links = parse_header_links(header)
-
-            for link in links:
-                key = link.get('rel') or link.get('url')
-                l[key] = link
-
-        return l
-
-    def raise_for_status(self):
-        """Raises stored :class:`HTTPError`, if one occurred."""
-
-        http_error_msg = ''
-
-        if 400 <= self.status_code < 500:
-            http_error_msg = '%s Client Error: %s' % (self.status_code, self.reason)
-
-        elif 500 <= self.status_code < 600:
-            http_error_msg = '%s Server Error: %s' % (self.status_code, self.reason)
-
-        if http_error_msg:
-            raise HTTPError(http_error_msg, response=self)
-
-    def close(self):
-        """Closes the underlying file descriptor and releases the connection
-        back to the pool.
-
-        *Note: Should not normally need to be called explicitly.*
-        """
-        return self.raw.release_conn()
diff --git a/bundle/requests/models.pyc b/bundle/requests/models.pyc
deleted file mode 100644
index c58150d..0000000
Binary files a/bundle/requests/models.pyc and /dev/null differ
diff --git a/bundle/requests/packages/README.rst b/bundle/requests/packages/README.rst
deleted file mode 100644
index c42f376..0000000
--- a/bundle/requests/packages/README.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-If you are planning to submit a pull request to requests with any changes in 
-this library do not go any further. These are independent libraries which we 
-vendor into requests. Any changes necessary to these libraries must be made in 
-them and submitted as separate pull requests to those libraries.
-
-urllib3 pull requests go here: https://github.com/shazow/urllib3
-
-chardet pull requests go here: https://github.com/chardet/chardet
diff --git a/bundle/requests/packages/__init__.py b/bundle/requests/packages/__init__.py
deleted file mode 100644
index d62c4b7..0000000
--- a/bundle/requests/packages/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-from __future__ import absolute_import
-
-from . import urllib3
diff --git a/bundle/requests/packages/__init__.pyc b/bundle/requests/packages/__init__.pyc
deleted file mode 100644
index dc3f534..0000000
Binary files a/bundle/requests/packages/__init__.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/__init__.py b/bundle/requests/packages/chardet/__init__.py
deleted file mode 100644
index e4f0799..0000000
--- a/bundle/requests/packages/chardet/__init__.py
+++ /dev/null
@@ -1,32 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-__version__ = "2.2.1"
-from sys import version_info
-
-
-def detect(aBuf):
-    if ((version_info < (3, 0) and isinstance(aBuf, unicode)) or
-            (version_info >= (3, 0) and not isinstance(aBuf, bytes))):
-        raise ValueError('Expected a bytes object, not a unicode object')
-
-    from . import universaldetector
-    u = universaldetector.UniversalDetector()
-    u.reset()
-    u.feed(aBuf)
-    u.close()
-    return u.result
diff --git a/bundle/requests/packages/chardet/__init__.pyc b/bundle/requests/packages/chardet/__init__.pyc
deleted file mode 100644
index 41a02e7..0000000
Binary files a/bundle/requests/packages/chardet/__init__.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/big5freq.py b/bundle/requests/packages/chardet/big5freq.py
deleted file mode 100644
index 65bffc0..0000000
--- a/bundle/requests/packages/chardet/big5freq.py
+++ /dev/null
@@ -1,925 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Communicator client code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-# Big5 frequency table
-# by Taiwan's Mandarin Promotion Council
-# <http://www.edu.tw:81/mandr/>
-#
-# 128  --> 0.42261
-# 256  --> 0.57851
-# 512  --> 0.74851
-# 1024 --> 0.89384
-# 2048 --> 0.97583
-#
-# Ideal Distribution Ratio = 0.74851/(1-0.74851) =2.98
-# Random Distribution Ration = 512/(5401-512)=0.105
-#
-# Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR
-
-BIG5_TYPICAL_DISTRIBUTION_RATIO = 0.75
-
-#Char to FreqOrder table
-BIG5_TABLE_SIZE = 5376
-
-Big5CharToFreqOrder = (
-   1,1801,1506, 255,1431, 198,   9,  82,   6,5008, 177, 202,3681,1256,2821, 110, #   16
-3814,  33,3274, 261,  76,  44,2114,  16,2946,2187,1176, 659,3971,  26,3451,2653, #   32
-1198,3972,3350,4202, 410,2215, 302, 590, 361,1964,   8, 204,  58,4510,5009,1932, #   48
-  63,5010,5011, 317,1614,  75, 222, 159,4203,2417,1480,5012,3555,3091, 224,2822, #   64
-3682,   3,  10,3973,1471,  29,2787,1135,2866,1940, 873, 130,3275,1123, 312,5013, #   80
-4511,2052, 507, 252, 682,5014, 142,1915, 124, 206,2947,  34,3556,3204,  64, 604, #   96
-5015,2501,1977,1978, 155,1991, 645, 641,1606,5016,3452, 337,  72, 406,5017,  80, #  112
- 630, 238,3205,1509, 263, 939,1092,2654, 756,1440,1094,3453, 449,  69,2987, 591, #  128
- 179,2096, 471, 115,2035,1844,  60,  50,2988, 134, 806,1869, 734,2036,3454, 180, #  144
- 995,1607, 156, 537,2907, 688,5018, 319,1305, 779,2145, 514,2379, 298,4512, 359, #  160
-2502,  90,2716,1338, 663,  11, 906,1099,2553,  20,2441, 182, 532,1716,5019, 732, #  176
-1376,4204,1311,1420,3206,  25,2317,1056, 113, 399, 382,1950, 242,3455,2474, 529, #  192
-3276, 475,1447,3683,5020, 117,  21, 656, 810,1297,2300,2334,3557,5021, 126,4205, #  208
- 706, 456, 150, 613,4513,  71,1118,2037,4206, 145,3092,  85, 835, 486,2115,1246, #  224
-1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,5022,2128,2359, 347,3815, 221, #  240
-3558,3135,5023,1956,1153,4207,  83, 296,1199,3093, 192, 624,  93,5024, 822,1898, #  256
-2823,3136, 795,2065, 991,1554,1542,1592,  27,  43,2867, 859, 139,1456, 860,4514, #  272
- 437, 712,3974, 164,2397,3137, 695, 211,3037,2097, 195,3975,1608,3559,3560,3684, #  288
-3976, 234, 811,2989,2098,3977,2233,1441,3561,1615,2380, 668,2077,1638, 305, 228, #  304
-1664,4515, 467, 415,5025, 262,2099,1593, 239, 108, 300, 200,1033, 512,1247,2078, #  320
-5026,5027,2176,3207,3685,2682, 593, 845,1062,3277,  88,1723,2038,3978,1951, 212, #  336
- 266, 152, 149, 468,1899,4208,4516,  77, 187,5028,3038,  37,   5,2990,5029,3979, #  352
-5030,5031,  39,2524,4517,2908,3208,2079,  55, 148,  74,4518, 545, 483,1474,1029, #  368
-1665, 217,1870,1531,3138,1104,2655,4209,  24, 172,3562, 900,3980,3563,3564,4519, #  384
-  32,1408,2824,1312, 329, 487,2360,2251,2717, 784,2683,   4,3039,3351,1427,1789, #  400
- 188, 109, 499,5032,3686,1717,1790, 888,1217,3040,4520,5033,3565,5034,3352,1520, #  416
-3687,3981, 196,1034, 775,5035,5036, 929,1816, 249, 439,  38,5037,1063,5038, 794, #  432
-3982,1435,2301,  46, 178,3278,2066,5039,2381,5040, 214,1709,4521, 804,  35, 707, #  448
- 324,3688,1601,2554, 140, 459,4210,5041,5042,1365, 839, 272, 978,2262,2580,3456, #  464
-2129,1363,3689,1423, 697, 100,3094,  48,  70,1231, 495,3139,2196,5043,1294,5044, #  480
-2080, 462, 586,1042,3279, 853, 256, 988, 185,2382,3457,1698, 434,1084,5045,3458, #  496
- 314,2625,2788,4522,2335,2336, 569,2285, 637,1817,2525, 757,1162,1879,1616,3459, #  512
- 287,1577,2116, 768,4523,1671,2868,3566,2526,1321,3816, 909,2418,5046,4211, 933, #  528
-3817,4212,2053,2361,1222,4524, 765,2419,1322, 786,4525,5047,1920,1462,1677,2909, #  544
-1699,5048,4526,1424,2442,3140,3690,2600,3353,1775,1941,3460,3983,4213, 309,1369, #  560
-1130,2825, 364,2234,1653,1299,3984,3567,3985,3986,2656, 525,1085,3041, 902,2001, #  576
-1475, 964,4527, 421,1845,1415,1057,2286, 940,1364,3141, 376,4528,4529,1381,   7, #  592
-2527, 983,2383, 336,1710,2684,1846, 321,3461, 559,1131,3042,2752,1809,1132,1313, #  608
- 265,1481,1858,5049, 352,1203,2826,3280, 167,1089, 420,2827, 776, 792,1724,3568, #  624
-4214,2443,3281,5050,4215,5051, 446, 229, 333,2753, 901,3818,1200,1557,4530,2657, #  640
-1921, 395,2754,2685,3819,4216,1836, 125, 916,3209,2626,4531,5052,5053,3820,5054, #  656
-5055,5056,4532,3142,3691,1133,2555,1757,3462,1510,2318,1409,3569,5057,2146, 438, #  672
-2601,2910,2384,3354,1068, 958,3043, 461, 311,2869,2686,4217,1916,3210,4218,1979, #  688
- 383, 750,2755,2627,4219, 274, 539, 385,1278,1442,5058,1154,1965, 384, 561, 210, #  704
-  98,1295,2556,3570,5059,1711,2420,1482,3463,3987,2911,1257, 129,5060,3821, 642, #  720
- 523,2789,2790,2658,5061, 141,2235,1333,  68, 176, 441, 876, 907,4220, 603,2602, #  736
- 710, 171,3464, 404, 549,  18,3143,2398,1410,3692,1666,5062,3571,4533,2912,4534, #  752
-5063,2991, 368,5064, 146, 366,  99, 871,3693,1543, 748, 807,1586,1185,  22,2263, #  768
- 379,3822,3211,5065,3212, 505,1942,2628,1992,1382,2319,5066, 380,2362, 218, 702, #  784
-1818,1248,3465,3044,3572,3355,3282,5067,2992,3694, 930,3283,3823,5068,  59,5069, #  800
- 585, 601,4221, 497,3466,1112,1314,4535,1802,5070,1223,1472,2177,5071, 749,1837, #  816
- 690,1900,3824,1773,3988,1476, 429,1043,1791,2236,2117, 917,4222, 447,1086,1629, #  832
-5072, 556,5073,5074,2021,1654, 844,1090, 105, 550, 966,1758,2828,1008,1783, 686, #  848
-1095,5075,2287, 793,1602,5076,3573,2603,4536,4223,2948,2302,4537,3825, 980,2503, #  864
- 544, 353, 527,4538, 908,2687,2913,5077, 381,2629,1943,1348,5078,1341,1252, 560, #  880
-3095,5079,3467,2870,5080,2054, 973, 886,2081, 143,4539,5081,5082, 157,3989, 496, #  896
-4224,  57, 840, 540,2039,4540,4541,3468,2118,1445, 970,2264,1748,1966,2082,4225, #  912
-3144,1234,1776,3284,2829,3695, 773,1206,2130,1066,2040,1326,3990,1738,1725,4226, #  928
- 279,3145,  51,1544,2604, 423,1578,2131,2067, 173,4542,1880,5083,5084,1583, 264, #  944
- 610,3696,4543,2444, 280, 154,5085,5086,5087,1739, 338,1282,3096, 693,2871,1411, #  960
-1074,3826,2445,5088,4544,5089,5090,1240, 952,2399,5091,2914,1538,2688, 685,1483, #  976
-4227,2475,1436, 953,4228,2055,4545, 671,2400,  79,4229,2446,3285, 608, 567,2689, #  992
-3469,4230,4231,1691, 393,1261,1792,2401,5092,4546,5093,5094,5095,5096,1383,1672, # 1008
-3827,3213,1464, 522,1119, 661,1150, 216, 675,4547,3991,1432,3574, 609,4548,2690, # 1024
-2402,5097,5098,5099,4232,3045,   0,5100,2476, 315, 231,2447, 301,3356,4549,2385, # 1040
-5101, 233,4233,3697,1819,4550,4551,5102,  96,1777,1315,2083,5103, 257,5104,1810, # 1056
-3698,2718,1139,1820,4234,2022,1124,2164,2791,1778,2659,5105,3097, 363,1655,3214, # 1072
-5106,2993,5107,5108,5109,3992,1567,3993, 718, 103,3215, 849,1443, 341,3357,2949, # 1088
-1484,5110,1712, 127,  67, 339,4235,2403, 679,1412, 821,5111,5112, 834, 738, 351, # 1104
-2994,2147, 846, 235,1497,1881, 418,1993,3828,2719, 186,1100,2148,2756,3575,1545, # 1120
-1355,2950,2872,1377, 583,3994,4236,2581,2995,5113,1298,3699,1078,2557,3700,2363, # 1136
-  78,3829,3830, 267,1289,2100,2002,1594,4237, 348, 369,1274,2197,2178,1838,4552, # 1152
-1821,2830,3701,2757,2288,2003,4553,2951,2758, 144,3358, 882,4554,3995,2759,3470, # 1168
-4555,2915,5114,4238,1726, 320,5115,3996,3046, 788,2996,5116,2831,1774,1327,2873, # 1184
-3997,2832,5117,1306,4556,2004,1700,3831,3576,2364,2660, 787,2023, 506, 824,3702, # 1200
- 534, 323,4557,1044,3359,2024,1901, 946,3471,5118,1779,1500,1678,5119,1882,4558, # 1216
- 165, 243,4559,3703,2528, 123, 683,4239, 764,4560,  36,3998,1793, 589,2916, 816, # 1232
- 626,1667,3047,2237,1639,1555,1622,3832,3999,5120,4000,2874,1370,1228,1933, 891, # 1248
-2084,2917, 304,4240,5121, 292,2997,2720,3577, 691,2101,4241,1115,4561, 118, 662, # 1264
-5122, 611,1156, 854,2386,1316,2875,   2, 386, 515,2918,5123,5124,3286, 868,2238, # 1280
-1486, 855,2661, 785,2216,3048,5125,1040,3216,3578,5126,3146, 448,5127,1525,5128, # 1296
-2165,4562,5129,3833,5130,4242,2833,3579,3147, 503, 818,4001,3148,1568, 814, 676, # 1312
-1444, 306,1749,5131,3834,1416,1030, 197,1428, 805,2834,1501,4563,5132,5133,5134, # 1328
-1994,5135,4564,5136,5137,2198,  13,2792,3704,2998,3149,1229,1917,5138,3835,2132, # 1344
-5139,4243,4565,2404,3580,5140,2217,1511,1727,1120,5141,5142, 646,3836,2448, 307, # 1360
-5143,5144,1595,3217,5145,5146,5147,3705,1113,1356,4002,1465,2529,2530,5148, 519, # 1376
-5149, 128,2133,  92,2289,1980,5150,4003,1512, 342,3150,2199,5151,2793,2218,1981, # 1392
-3360,4244, 290,1656,1317, 789, 827,2365,5152,3837,4566, 562, 581,4004,5153, 401, # 1408
-4567,2252,  94,4568,5154,1399,2794,5155,1463,2025,4569,3218,1944,5156, 828,1105, # 1424
-4245,1262,1394,5157,4246, 605,4570,5158,1784,2876,5159,2835, 819,2102, 578,2200, # 1440
-2952,5160,1502, 436,3287,4247,3288,2836,4005,2919,3472,3473,5161,2721,2320,5162, # 1456
-5163,2337,2068,  23,4571, 193, 826,3838,2103, 699,1630,4248,3098, 390,1794,1064, # 1472
-3581,5164,1579,3099,3100,1400,5165,4249,1839,1640,2877,5166,4572,4573, 137,4250, # 1488
- 598,3101,1967, 780, 104, 974,2953,5167, 278, 899, 253, 402, 572, 504, 493,1339, # 1504
-5168,4006,1275,4574,2582,2558,5169,3706,3049,3102,2253, 565,1334,2722, 863,  41, # 1520
-5170,5171,4575,5172,1657,2338,  19, 463,2760,4251, 606,5173,2999,3289,1087,2085, # 1536
-1323,2662,3000,5174,1631,1623,1750,4252,2691,5175,2878, 791,2723,2663,2339, 232, # 1552
-2421,5176,3001,1498,5177,2664,2630, 755,1366,3707,3290,3151,2026,1609, 119,1918, # 1568
-3474, 862,1026,4253,5178,4007,3839,4576,4008,4577,2265,1952,2477,5179,1125, 817, # 1584
-4254,4255,4009,1513,1766,2041,1487,4256,3050,3291,2837,3840,3152,5180,5181,1507, # 1600
-5182,2692, 733,  40,1632,1106,2879, 345,4257, 841,2531, 230,4578,3002,1847,3292, # 1616
-3475,5183,1263, 986,3476,5184, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562, # 1632
-4010,4011,2954, 967,2761,2665,1349, 592,2134,1692,3361,3003,1995,4258,1679,4012, # 1648
-1902,2188,5185, 739,3708,2724,1296,1290,5186,4259,2201,2202,1922,1563,2605,2559, # 1664
-1871,2762,3004,5187, 435,5188, 343,1108, 596,  17,1751,4579,2239,3477,3709,5189, # 1680
-4580, 294,3582,2955,1693, 477, 979, 281,2042,3583, 643,2043,3710,2631,2795,2266, # 1696
-1031,2340,2135,2303,3584,4581, 367,1249,2560,5190,3585,5191,4582,1283,3362,2005, # 1712
- 240,1762,3363,4583,4584, 836,1069,3153, 474,5192,2149,2532, 268,3586,5193,3219, # 1728
-1521,1284,5194,1658,1546,4260,5195,3587,3588,5196,4261,3364,2693,1685,4262, 961, # 1744
-1673,2632, 190,2006,2203,3841,4585,4586,5197, 570,2504,3711,1490,5198,4587,2633, # 1760
-3293,1957,4588, 584,1514, 396,1045,1945,5199,4589,1968,2449,5200,5201,4590,4013, # 1776
- 619,5202,3154,3294, 215,2007,2796,2561,3220,4591,3221,4592, 763,4263,3842,4593, # 1792
-5203,5204,1958,1767,2956,3365,3712,1174, 452,1477,4594,3366,3155,5205,2838,1253, # 1808
-2387,2189,1091,2290,4264, 492,5206, 638,1169,1825,2136,1752,4014, 648, 926,1021, # 1824
-1324,4595, 520,4596, 997, 847,1007, 892,4597,3843,2267,1872,3713,2405,1785,4598, # 1840
-1953,2957,3103,3222,1728,4265,2044,3714,4599,2008,1701,3156,1551,  30,2268,4266, # 1856
-5207,2027,4600,3589,5208, 501,5209,4267, 594,3478,2166,1822,3590,3479,3591,3223, # 1872
- 829,2839,4268,5210,1680,3157,1225,4269,5211,3295,4601,4270,3158,2341,5212,4602, # 1888
-4271,5213,4015,4016,5214,1848,2388,2606,3367,5215,4603, 374,4017, 652,4272,4273, # 1904
- 375,1140, 798,5216,5217,5218,2366,4604,2269, 546,1659, 138,3051,2450,4605,5219, # 1920
-2254, 612,1849, 910, 796,3844,1740,1371, 825,3845,3846,5220,2920,2562,5221, 692, # 1936
- 444,3052,2634, 801,4606,4274,5222,1491, 244,1053,3053,4275,4276, 340,5223,4018, # 1952
-1041,3005, 293,1168,  87,1357,5224,1539, 959,5225,2240, 721, 694,4277,3847, 219, # 1968
-1478, 644,1417,3368,2666,1413,1401,1335,1389,4019,5226,5227,3006,2367,3159,1826, # 1984
- 730,1515, 184,2840,  66,4607,5228,1660,2958, 246,3369, 378,1457, 226,3480, 975, # 2000
-4020,2959,1264,3592, 674, 696,5229, 163,5230,1141,2422,2167, 713,3593,3370,4608, # 2016
-4021,5231,5232,1186,  15,5233,1079,1070,5234,1522,3224,3594, 276,1050,2725, 758, # 2032
-1126, 653,2960,3296,5235,2342, 889,3595,4022,3104,3007, 903,1250,4609,4023,3481, # 2048
-3596,1342,1681,1718, 766,3297, 286,  89,2961,3715,5236,1713,5237,2607,3371,3008, # 2064
-5238,2962,2219,3225,2880,5239,4610,2505,2533, 181, 387,1075,4024, 731,2190,3372, # 2080
-5240,3298, 310, 313,3482,2304, 770,4278,  54,3054, 189,4611,3105,3848,4025,5241, # 2096
-1230,1617,1850, 355,3597,4279,4612,3373, 111,4280,3716,1350,3160,3483,3055,4281, # 2112
-2150,3299,3598,5242,2797,4026,4027,3009, 722,2009,5243,1071, 247,1207,2343,2478, # 2128
-1378,4613,2010, 864,1437,1214,4614, 373,3849,1142,2220, 667,4615, 442,2763,2563, # 2144
-3850,4028,1969,4282,3300,1840, 837, 170,1107, 934,1336,1883,5244,5245,2119,4283, # 2160
-2841, 743,1569,5246,4616,4284, 582,2389,1418,3484,5247,1803,5248, 357,1395,1729, # 2176
-3717,3301,2423,1564,2241,5249,3106,3851,1633,4617,1114,2086,4285,1532,5250, 482, # 2192
-2451,4618,5251,5252,1492, 833,1466,5253,2726,3599,1641,2842,5254,1526,1272,3718, # 2208
-4286,1686,1795, 416,2564,1903,1954,1804,5255,3852,2798,3853,1159,2321,5256,2881, # 2224
-4619,1610,1584,3056,2424,2764, 443,3302,1163,3161,5257,5258,4029,5259,4287,2506, # 2240
-3057,4620,4030,3162,2104,1647,3600,2011,1873,4288,5260,4289, 431,3485,5261, 250, # 2256
-  97,  81,4290,5262,1648,1851,1558, 160, 848,5263, 866, 740,1694,5264,2204,2843, # 2272
-3226,4291,4621,3719,1687, 950,2479, 426, 469,3227,3720,3721,4031,5265,5266,1188, # 2288
- 424,1996, 861,3601,4292,3854,2205,2694, 168,1235,3602,4293,5267,2087,1674,4622, # 2304
-3374,3303, 220,2565,1009,5268,3855, 670,3010, 332,1208, 717,5269,5270,3603,2452, # 2320
-4032,3375,5271, 513,5272,1209,2882,3376,3163,4623,1080,5273,5274,5275,5276,2534, # 2336
-3722,3604, 815,1587,4033,4034,5277,3605,3486,3856,1254,4624,1328,3058,1390,4035, # 2352
-1741,4036,3857,4037,5278, 236,3858,2453,3304,5279,5280,3723,3859,1273,3860,4625, # 2368
-5281, 308,5282,4626, 245,4627,1852,2480,1307,2583, 430, 715,2137,2454,5283, 270, # 2384
- 199,2883,4038,5284,3606,2727,1753, 761,1754, 725,1661,1841,4628,3487,3724,5285, # 2400
-5286, 587,  14,3305, 227,2608, 326, 480,2270, 943,2765,3607, 291, 650,1884,5287, # 2416
-1702,1226, 102,1547,  62,3488, 904,4629,3489,1164,4294,5288,5289,1224,1548,2766, # 2432
- 391, 498,1493,5290,1386,1419,5291,2056,1177,4630, 813, 880,1081,2368, 566,1145, # 2448
-4631,2291,1001,1035,2566,2609,2242, 394,1286,5292,5293,2069,5294,  86,1494,1730, # 2464
-4039, 491,1588, 745, 897,2963, 843,3377,4040,2767,2884,3306,1768, 998,2221,2070, # 2480
- 397,1827,1195,1970,3725,3011,3378, 284,5295,3861,2507,2138,2120,1904,5296,4041, # 2496
-2151,4042,4295,1036,3490,1905, 114,2567,4296, 209,1527,5297,5298,2964,2844,2635, # 2512
-2390,2728,3164, 812,2568,5299,3307,5300,1559, 737,1885,3726,1210, 885,  28,2695, # 2528
-3608,3862,5301,4297,1004,1780,4632,5302, 346,1982,2222,2696,4633,3863,1742, 797, # 2544
-1642,4043,1934,1072,1384,2152, 896,4044,3308,3727,3228,2885,3609,5303,2569,1959, # 2560
-4634,2455,1786,5304,5305,5306,4045,4298,1005,1308,3728,4299,2729,4635,4636,1528, # 2576
-2610, 161,1178,4300,1983, 987,4637,1101,4301, 631,4046,1157,3229,2425,1343,1241, # 2592
-1016,2243,2570, 372, 877,2344,2508,1160, 555,1935, 911,4047,5307, 466,1170, 169, # 2608
-1051,2921,2697,3729,2481,3012,1182,2012,2571,1251,2636,5308, 992,2345,3491,1540, # 2624
-2730,1201,2071,2406,1997,2482,5309,4638, 528,1923,2191,1503,1874,1570,2369,3379, # 2640
-3309,5310, 557,1073,5311,1828,3492,2088,2271,3165,3059,3107, 767,3108,2799,4639, # 2656
-1006,4302,4640,2346,1267,2179,3730,3230, 778,4048,3231,2731,1597,2667,5312,4641, # 2672
-5313,3493,5314,5315,5316,3310,2698,1433,3311, 131,  95,1504,4049, 723,4303,3166, # 2688
-1842,3610,2768,2192,4050,2028,2105,3731,5317,3013,4051,1218,5318,3380,3232,4052, # 2704
-4304,2584, 248,1634,3864, 912,5319,2845,3732,3060,3865, 654,  53,5320,3014,5321, # 2720
-1688,4642, 777,3494,1032,4053,1425,5322, 191, 820,2121,2846, 971,4643, 931,3233, # 2736
- 135, 664, 783,3866,1998, 772,2922,1936,4054,3867,4644,2923,3234, 282,2732, 640, # 2752
-1372,3495,1127, 922, 325,3381,5323,5324, 711,2045,5325,5326,4055,2223,2800,1937, # 2768
-4056,3382,2224,2255,3868,2305,5327,4645,3869,1258,3312,4057,3235,2139,2965,4058, # 2784
-4059,5328,2225, 258,3236,4646, 101,1227,5329,3313,1755,5330,1391,3314,5331,2924, # 2800
-2057, 893,5332,5333,5334,1402,4305,2347,5335,5336,3237,3611,5337,5338, 878,1325, # 2816
-1781,2801,4647, 259,1385,2585, 744,1183,2272,4648,5339,4060,2509,5340, 684,1024, # 2832
-4306,5341, 472,3612,3496,1165,3315,4061,4062, 322,2153, 881, 455,1695,1152,1340, # 2848
- 660, 554,2154,4649,1058,4650,4307, 830,1065,3383,4063,4651,1924,5342,1703,1919, # 2864
-5343, 932,2273, 122,5344,4652, 947, 677,5345,3870,2637, 297,1906,1925,2274,4653, # 2880
-2322,3316,5346,5347,4308,5348,4309,  84,4310, 112, 989,5349, 547,1059,4064, 701, # 2896
-3613,1019,5350,4311,5351,3497, 942, 639, 457,2306,2456, 993,2966, 407, 851, 494, # 2912
-4654,3384, 927,5352,1237,5353,2426,3385, 573,4312, 680, 921,2925,1279,1875, 285, # 2928
- 790,1448,1984, 719,2168,5354,5355,4655,4065,4066,1649,5356,1541, 563,5357,1077, # 2944
-5358,3386,3061,3498, 511,3015,4067,4068,3733,4069,1268,2572,3387,3238,4656,4657, # 2960
-5359, 535,1048,1276,1189,2926,2029,3167,1438,1373,2847,2967,1134,2013,5360,4313, # 2976
-1238,2586,3109,1259,5361, 700,5362,2968,3168,3734,4314,5363,4315,1146,1876,1907, # 2992
-4658,2611,4070, 781,2427, 132,1589, 203, 147, 273,2802,2407, 898,1787,2155,4071, # 3008
-4072,5364,3871,2803,5365,5366,4659,4660,5367,3239,5368,1635,3872, 965,5369,1805, # 3024
-2699,1516,3614,1121,1082,1329,3317,4073,1449,3873,  65,1128,2848,2927,2769,1590, # 3040
-3874,5370,5371,  12,2668,  45, 976,2587,3169,4661, 517,2535,1013,1037,3240,5372, # 3056
-3875,2849,5373,3876,5374,3499,5375,2612, 614,1999,2323,3877,3110,2733,2638,5376, # 3072
-2588,4316, 599,1269,5377,1811,3735,5378,2700,3111, 759,1060, 489,1806,3388,3318, # 3088
-1358,5379,5380,2391,1387,1215,2639,2256, 490,5381,5382,4317,1759,2392,2348,5383, # 3104
-4662,3878,1908,4074,2640,1807,3241,4663,3500,3319,2770,2349, 874,5384,5385,3501, # 3120
-3736,1859,  91,2928,3737,3062,3879,4664,5386,3170,4075,2669,5387,3502,1202,1403, # 3136
-3880,2969,2536,1517,2510,4665,3503,2511,5388,4666,5389,2701,1886,1495,1731,4076, # 3152
-2370,4667,5390,2030,5391,5392,4077,2702,1216, 237,2589,4318,2324,4078,3881,4668, # 3168
-4669,2703,3615,3504, 445,4670,5393,5394,5395,5396,2771,  61,4079,3738,1823,4080, # 3184
-5397, 687,2046, 935, 925, 405,2670, 703,1096,1860,2734,4671,4081,1877,1367,2704, # 3200
-3389, 918,2106,1782,2483, 334,3320,1611,1093,4672, 564,3171,3505,3739,3390, 945, # 3216
-2641,2058,4673,5398,1926, 872,4319,5399,3506,2705,3112, 349,4320,3740,4082,4674, # 3232
-3882,4321,3741,2156,4083,4675,4676,4322,4677,2408,2047, 782,4084, 400, 251,4323, # 3248
-1624,5400,5401, 277,3742, 299,1265, 476,1191,3883,2122,4324,4325,1109, 205,5402, # 3264
-2590,1000,2157,3616,1861,5403,5404,5405,4678,5406,4679,2573, 107,2484,2158,4085, # 3280
-3507,3172,5407,1533, 541,1301, 158, 753,4326,2886,3617,5408,1696, 370,1088,4327, # 3296
-4680,3618, 579, 327, 440, 162,2244, 269,1938,1374,3508, 968,3063,  56,1396,3113, # 3312
-2107,3321,3391,5409,1927,2159,4681,3016,5410,3619,5411,5412,3743,4682,2485,5413, # 3328
-2804,5414,1650,4683,5415,2613,5416,5417,4086,2671,3392,1149,3393,4087,3884,4088, # 3344
-5418,1076,  49,5419, 951,3242,3322,3323, 450,2850, 920,5420,1812,2805,2371,4328, # 3360
-1909,1138,2372,3885,3509,5421,3243,4684,1910,1147,1518,2428,4685,3886,5422,4686, # 3376
-2393,2614, 260,1796,3244,5423,5424,3887,3324, 708,5425,3620,1704,5426,3621,1351, # 3392
-1618,3394,3017,1887, 944,4329,3395,4330,3064,3396,4331,5427,3744, 422, 413,1714, # 3408
-3325, 500,2059,2350,4332,2486,5428,1344,1911, 954,5429,1668,5430,5431,4089,2409, # 3424
-4333,3622,3888,4334,5432,2307,1318,2512,3114, 133,3115,2887,4687, 629,  31,2851, # 3440
-2706,3889,4688, 850, 949,4689,4090,2970,1732,2089,4335,1496,1853,5433,4091, 620, # 3456
-3245, 981,1242,3745,3397,1619,3746,1643,3326,2140,2457,1971,1719,3510,2169,5434, # 3472
-3246,5435,5436,3398,1829,5437,1277,4690,1565,2048,5438,1636,3623,3116,5439, 869, # 3488
-2852, 655,3890,3891,3117,4092,3018,3892,1310,3624,4691,5440,5441,5442,1733, 558, # 3504
-4692,3747, 335,1549,3065,1756,4336,3748,1946,3511,1830,1291,1192, 470,2735,2108, # 3520
-2806, 913,1054,4093,5443,1027,5444,3066,4094,4693, 982,2672,3399,3173,3512,3247, # 3536
-3248,1947,2807,5445, 571,4694,5446,1831,5447,3625,2591,1523,2429,5448,2090, 984, # 3552
-4695,3749,1960,5449,3750, 852, 923,2808,3513,3751, 969,1519, 999,2049,2325,1705, # 3568
-5450,3118, 615,1662, 151, 597,4095,2410,2326,1049, 275,4696,3752,4337, 568,3753, # 3584
-3626,2487,4338,3754,5451,2430,2275, 409,3249,5452,1566,2888,3514,1002, 769,2853, # 3600
- 194,2091,3174,3755,2226,3327,4339, 628,1505,5453,5454,1763,2180,3019,4096, 521, # 3616
-1161,2592,1788,2206,2411,4697,4097,1625,4340,4341, 412,  42,3119, 464,5455,2642, # 3632
-4698,3400,1760,1571,2889,3515,2537,1219,2207,3893,2643,2141,2373,4699,4700,3328, # 3648
-1651,3401,3627,5456,5457,3628,2488,3516,5458,3756,5459,5460,2276,2092, 460,5461, # 3664
-4701,5462,3020, 962, 588,3629, 289,3250,2644,1116,  52,5463,3067,1797,5464,5465, # 3680
-5466,1467,5467,1598,1143,3757,4342,1985,1734,1067,4702,1280,3402, 465,4703,1572, # 3696
- 510,5468,1928,2245,1813,1644,3630,5469,4704,3758,5470,5471,2673,1573,1534,5472, # 3712
-5473, 536,1808,1761,3517,3894,3175,2645,5474,5475,5476,4705,3518,2929,1912,2809, # 3728
-5477,3329,1122, 377,3251,5478, 360,5479,5480,4343,1529, 551,5481,2060,3759,1769, # 3744
-2431,5482,2930,4344,3330,3120,2327,2109,2031,4706,1404, 136,1468,1479, 672,1171, # 3760
-3252,2308, 271,3176,5483,2772,5484,2050, 678,2736, 865,1948,4707,5485,2014,4098, # 3776
-2971,5486,2737,2227,1397,3068,3760,4708,4709,1735,2931,3403,3631,5487,3895, 509, # 3792
-2854,2458,2890,3896,5488,5489,3177,3178,4710,4345,2538,4711,2309,1166,1010, 552, # 3808
- 681,1888,5490,5491,2972,2973,4099,1287,1596,1862,3179, 358, 453, 736, 175, 478, # 3824
-1117, 905,1167,1097,5492,1854,1530,5493,1706,5494,2181,3519,2292,3761,3520,3632, # 3840
-4346,2093,4347,5495,3404,1193,2489,4348,1458,2193,2208,1863,1889,1421,3331,2932, # 3856
-3069,2182,3521, 595,2123,5496,4100,5497,5498,4349,1707,2646, 223,3762,1359, 751, # 3872
-3121, 183,3522,5499,2810,3021, 419,2374, 633, 704,3897,2394, 241,5500,5501,5502, # 3888
- 838,3022,3763,2277,2773,2459,3898,1939,2051,4101,1309,3122,2246,1181,5503,1136, # 3904
-2209,3899,2375,1446,4350,2310,4712,5504,5505,4351,1055,2615, 484,3764,5506,4102, # 3920
- 625,4352,2278,3405,1499,4353,4103,5507,4104,4354,3253,2279,2280,3523,5508,5509, # 3936
-2774, 808,2616,3765,3406,4105,4355,3123,2539, 526,3407,3900,4356, 955,5510,1620, # 3952
-4357,2647,2432,5511,1429,3766,1669,1832, 994, 928,5512,3633,1260,5513,5514,5515, # 3968
-1949,2293, 741,2933,1626,4358,2738,2460, 867,1184, 362,3408,1392,5516,5517,4106, # 3984
-4359,1770,1736,3254,2934,4713,4714,1929,2707,1459,1158,5518,3070,3409,2891,1292, # 4000
-1930,2513,2855,3767,1986,1187,2072,2015,2617,4360,5519,2574,2514,2170,3768,2490, # 4016
-3332,5520,3769,4715,5521,5522, 666,1003,3023,1022,3634,4361,5523,4716,1814,2257, # 4032
- 574,3901,1603, 295,1535, 705,3902,4362, 283, 858, 417,5524,5525,3255,4717,4718, # 4048
-3071,1220,1890,1046,2281,2461,4107,1393,1599, 689,2575, 388,4363,5526,2491, 802, # 4064
-5527,2811,3903,2061,1405,2258,5528,4719,3904,2110,1052,1345,3256,1585,5529, 809, # 4080
-5530,5531,5532, 575,2739,3524, 956,1552,1469,1144,2328,5533,2329,1560,2462,3635, # 4096
-3257,4108, 616,2210,4364,3180,2183,2294,5534,1833,5535,3525,4720,5536,1319,3770, # 4112
-3771,1211,3636,1023,3258,1293,2812,5537,5538,5539,3905, 607,2311,3906, 762,2892, # 4128
-1439,4365,1360,4721,1485,3072,5540,4722,1038,4366,1450,2062,2648,4367,1379,4723, # 4144
-2593,5541,5542,4368,1352,1414,2330,2935,1172,5543,5544,3907,3908,4724,1798,1451, # 4160
-5545,5546,5547,5548,2936,4109,4110,2492,2351, 411,4111,4112,3637,3333,3124,4725, # 4176
-1561,2674,1452,4113,1375,5549,5550,  47,2974, 316,5551,1406,1591,2937,3181,5552, # 4192
-1025,2142,3125,3182, 354,2740, 884,2228,4369,2412, 508,3772, 726,3638, 996,2433, # 4208
-3639, 729,5553, 392,2194,1453,4114,4726,3773,5554,5555,2463,3640,2618,1675,2813, # 4224
- 919,2352,2975,2353,1270,4727,4115,  73,5556,5557, 647,5558,3259,2856,2259,1550, # 4240
-1346,3024,5559,1332, 883,3526,5560,5561,5562,5563,3334,2775,5564,1212, 831,1347, # 4256
-4370,4728,2331,3909,1864,3073, 720,3910,4729,4730,3911,5565,4371,5566,5567,4731, # 4272
-5568,5569,1799,4732,3774,2619,4733,3641,1645,2376,4734,5570,2938, 669,2211,2675, # 4288
-2434,5571,2893,5572,5573,1028,3260,5574,4372,2413,5575,2260,1353,5576,5577,4735, # 4304
-3183, 518,5578,4116,5579,4373,1961,5580,2143,4374,5581,5582,3025,2354,2355,3912, # 4320
- 516,1834,1454,4117,2708,4375,4736,2229,2620,1972,1129,3642,5583,2776,5584,2976, # 4336
-1422, 577,1470,3026,1524,3410,5585,5586, 432,4376,3074,3527,5587,2594,1455,2515, # 4352
-2230,1973,1175,5588,1020,2741,4118,3528,4737,5589,2742,5590,1743,1361,3075,3529, # 4368
-2649,4119,4377,4738,2295, 895, 924,4378,2171, 331,2247,3076, 166,1627,3077,1098, # 4384
-5591,1232,2894,2231,3411,4739, 657, 403,1196,2377, 542,3775,3412,1600,4379,3530, # 4400
-5592,4740,2777,3261, 576, 530,1362,4741,4742,2540,2676,3776,4120,5593, 842,3913, # 4416
-5594,2814,2032,1014,4121, 213,2709,3413, 665, 621,4380,5595,3777,2939,2435,5596, # 4432
-2436,3335,3643,3414,4743,4381,2541,4382,4744,3644,1682,4383,3531,1380,5597, 724, # 4448
-2282, 600,1670,5598,1337,1233,4745,3126,2248,5599,1621,4746,5600, 651,4384,5601, # 4464
-1612,4385,2621,5602,2857,5603,2743,2312,3078,5604, 716,2464,3079, 174,1255,2710, # 4480
-4122,3645, 548,1320,1398, 728,4123,1574,5605,1891,1197,3080,4124,5606,3081,3082, # 4496
-3778,3646,3779, 747,5607, 635,4386,4747,5608,5609,5610,4387,5611,5612,4748,5613, # 4512
-3415,4749,2437, 451,5614,3780,2542,2073,4388,2744,4389,4125,5615,1764,4750,5616, # 4528
-4390, 350,4751,2283,2395,2493,5617,4391,4126,2249,1434,4127, 488,4752, 458,4392, # 4544
-4128,3781, 771,1330,2396,3914,2576,3184,2160,2414,1553,2677,3185,4393,5618,2494, # 4560
-2895,2622,1720,2711,4394,3416,4753,5619,2543,4395,5620,3262,4396,2778,5621,2016, # 4576
-2745,5622,1155,1017,3782,3915,5623,3336,2313, 201,1865,4397,1430,5624,4129,5625, # 4592
-5626,5627,5628,5629,4398,1604,5630, 414,1866, 371,2595,4754,4755,3532,2017,3127, # 4608
-4756,1708, 960,4399, 887, 389,2172,1536,1663,1721,5631,2232,4130,2356,2940,1580, # 4624
-5632,5633,1744,4757,2544,4758,4759,5634,4760,5635,2074,5636,4761,3647,3417,2896, # 4640
-4400,5637,4401,2650,3418,2815, 673,2712,2465, 709,3533,4131,3648,4402,5638,1148, # 4656
- 502, 634,5639,5640,1204,4762,3649,1575,4763,2623,3783,5641,3784,3128, 948,3263, # 4672
- 121,1745,3916,1110,5642,4403,3083,2516,3027,4132,3785,1151,1771,3917,1488,4133, # 4688
-1987,5643,2438,3534,5644,5645,2094,5646,4404,3918,1213,1407,2816, 531,2746,2545, # 4704
-3264,1011,1537,4764,2779,4405,3129,1061,5647,3786,3787,1867,2897,5648,2018, 120, # 4720
-4406,4407,2063,3650,3265,2314,3919,2678,3419,1955,4765,4134,5649,3535,1047,2713, # 4736
-1266,5650,1368,4766,2858, 649,3420,3920,2546,2747,1102,2859,2679,5651,5652,2000, # 4752
-5653,1111,3651,2977,5654,2495,3921,3652,2817,1855,3421,3788,5655,5656,3422,2415, # 4768
-2898,3337,3266,3653,5657,2577,5658,3654,2818,4135,1460, 856,5659,3655,5660,2899, # 4784
-2978,5661,2900,3922,5662,4408, 632,2517, 875,3923,1697,3924,2296,5663,5664,4767, # 4800
-3028,1239, 580,4768,4409,5665, 914, 936,2075,1190,4136,1039,2124,5666,5667,5668, # 4816
-5669,3423,1473,5670,1354,4410,3925,4769,2173,3084,4137, 915,3338,4411,4412,3339, # 4832
-1605,1835,5671,2748, 398,3656,4413,3926,4138, 328,1913,2860,4139,3927,1331,4414, # 4848
-3029, 937,4415,5672,3657,4140,4141,3424,2161,4770,3425, 524, 742, 538,3085,1012, # 4864
-5673,5674,3928,2466,5675, 658,1103, 225,3929,5676,5677,4771,5678,4772,5679,3267, # 4880
-1243,5680,4142, 963,2250,4773,5681,2714,3658,3186,5682,5683,2596,2332,5684,4774, # 4896
-5685,5686,5687,3536, 957,3426,2547,2033,1931,2941,2467, 870,2019,3659,1746,2780, # 4912
-2781,2439,2468,5688,3930,5689,3789,3130,3790,3537,3427,3791,5690,1179,3086,5691, # 4928
-3187,2378,4416,3792,2548,3188,3131,2749,4143,5692,3428,1556,2549,2297, 977,2901, # 4944
-2034,4144,1205,3429,5693,1765,3430,3189,2125,1271, 714,1689,4775,3538,5694,2333, # 4960
-3931, 533,4417,3660,2184, 617,5695,2469,3340,3539,2315,5696,5697,3190,5698,5699, # 4976
-3932,1988, 618, 427,2651,3540,3431,5700,5701,1244,1690,5702,2819,4418,4776,5703, # 4992
-3541,4777,5704,2284,1576, 473,3661,4419,3432, 972,5705,3662,5706,3087,5707,5708, # 5008
-4778,4779,5709,3793,4145,4146,5710, 153,4780, 356,5711,1892,2902,4420,2144, 408, # 5024
- 803,2357,5712,3933,5713,4421,1646,2578,2518,4781,4782,3934,5714,3935,4422,5715, # 5040
-2416,3433, 752,5716,5717,1962,3341,2979,5718, 746,3030,2470,4783,4423,3794, 698, # 5056
-4784,1893,4424,3663,2550,4785,3664,3936,5719,3191,3434,5720,1824,1302,4147,2715, # 5072
-3937,1974,4425,5721,4426,3192, 823,1303,1288,1236,2861,3542,4148,3435, 774,3938, # 5088
-5722,1581,4786,1304,2862,3939,4787,5723,2440,2162,1083,3268,4427,4149,4428, 344, # 5104
-1173, 288,2316, 454,1683,5724,5725,1461,4788,4150,2597,5726,5727,4789, 985, 894, # 5120
-5728,3436,3193,5729,1914,2942,3795,1989,5730,2111,1975,5731,4151,5732,2579,1194, # 5136
- 425,5733,4790,3194,1245,3796,4429,5734,5735,2863,5736, 636,4791,1856,3940, 760, # 5152
-1800,5737,4430,2212,1508,4792,4152,1894,1684,2298,5738,5739,4793,4431,4432,2213, # 5168
- 479,5740,5741, 832,5742,4153,2496,5743,2980,2497,3797, 990,3132, 627,1815,2652, # 5184
-4433,1582,4434,2126,2112,3543,4794,5744, 799,4435,3195,5745,4795,2113,1737,3031, # 5200
-1018, 543, 754,4436,3342,1676,4796,4797,4154,4798,1489,5746,3544,5747,2624,2903, # 5216
-4155,5748,5749,2981,5750,5751,5752,5753,3196,4799,4800,2185,1722,5754,3269,3270, # 5232
-1843,3665,1715, 481, 365,1976,1857,5755,5756,1963,2498,4801,5757,2127,3666,3271, # 5248
- 433,1895,2064,2076,5758, 602,2750,5759,5760,5761,5762,5763,3032,1628,3437,5764, # 5264
-3197,4802,4156,2904,4803,2519,5765,2551,2782,5766,5767,5768,3343,4804,2905,5769, # 5280
-4805,5770,2864,4806,4807,1221,2982,4157,2520,5771,5772,5773,1868,1990,5774,5775, # 5296
-5776,1896,5777,5778,4808,1897,4158, 318,5779,2095,4159,4437,5780,5781, 485,5782, # 5312
- 938,3941, 553,2680, 116,5783,3942,3667,5784,3545,2681,2783,3438,3344,2820,5785, # 5328
-3668,2943,4160,1747,2944,2983,5786,5787, 207,5788,4809,5789,4810,2521,5790,3033, # 5344
- 890,3669,3943,5791,1878,3798,3439,5792,2186,2358,3440,1652,5793,5794,5795, 941, # 5360
-2299, 208,3546,4161,2020, 330,4438,3944,2906,2499,3799,4439,4811,5796,5797,5798, # 5376  #last 512
-#Everything below is of no interest for detection purpose
-2522,1613,4812,5799,3345,3945,2523,5800,4162,5801,1637,4163,2471,4813,3946,5802, # 5392
-2500,3034,3800,5803,5804,2195,4814,5805,2163,5806,5807,5808,5809,5810,5811,5812, # 5408
-5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824,5825,5826,5827,5828, # 5424
-5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844, # 5440
-5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856,5857,5858,5859,5860, # 5456
-5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872,5873,5874,5875,5876, # 5472
-5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888,5889,5890,5891,5892, # 5488
-5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904,5905,5906,5907,5908, # 5504
-5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920,5921,5922,5923,5924, # 5520
-5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940, # 5536
-5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952,5953,5954,5955,5956, # 5552
-5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968,5969,5970,5971,5972, # 5568
-5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984,5985,5986,5987,5988, # 5584
-5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004, # 5600
-6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020, # 5616
-6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032,6033,6034,6035,6036, # 5632
-6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052, # 5648
-6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068, # 5664
-6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084, # 5680
-6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100, # 5696
-6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116, # 5712
-6117,6118,6119,6120,6121,6122,6123,6124,6125,6126,6127,6128,6129,6130,6131,6132, # 5728
-6133,6134,6135,6136,6137,6138,6139,6140,6141,6142,6143,6144,6145,6146,6147,6148, # 5744
-6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163,6164, # 5760
-6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6177,6178,6179,6180, # 5776
-6181,6182,6183,6184,6185,6186,6187,6188,6189,6190,6191,6192,6193,6194,6195,6196, # 5792
-6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210,6211,6212, # 5808
-6213,6214,6215,6216,6217,6218,6219,6220,6221,6222,6223,3670,6224,6225,6226,6227, # 5824
-6228,6229,6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241,6242,6243, # 5840
-6244,6245,6246,6247,6248,6249,6250,6251,6252,6253,6254,6255,6256,6257,6258,6259, # 5856
-6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6274,6275, # 5872
-6276,6277,6278,6279,6280,6281,6282,6283,6284,6285,4815,6286,6287,6288,6289,6290, # 5888
-6291,6292,4816,6293,6294,6295,6296,6297,6298,6299,6300,6301,6302,6303,6304,6305, # 5904
-6306,6307,6308,6309,6310,6311,4817,4818,6312,6313,6314,6315,6316,6317,6318,4819, # 5920
-6319,6320,6321,6322,6323,6324,6325,6326,6327,6328,6329,6330,6331,6332,6333,6334, # 5936
-6335,6336,6337,4820,6338,6339,6340,6341,6342,6343,6344,6345,6346,6347,6348,6349, # 5952
-6350,6351,6352,6353,6354,6355,6356,6357,6358,6359,6360,6361,6362,6363,6364,6365, # 5968
-6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381, # 5984
-6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395,6396,6397, # 6000
-6398,6399,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,3441,6411,6412, # 6016
-6413,6414,6415,6416,6417,6418,6419,6420,6421,6422,6423,6424,6425,4440,6426,6427, # 6032
-6428,6429,6430,6431,6432,6433,6434,6435,6436,6437,6438,6439,6440,6441,6442,6443, # 6048
-6444,6445,6446,6447,6448,6449,6450,6451,6452,6453,6454,4821,6455,6456,6457,6458, # 6064
-6459,6460,6461,6462,6463,6464,6465,6466,6467,6468,6469,6470,6471,6472,6473,6474, # 6080
-6475,6476,6477,3947,3948,6478,6479,6480,6481,3272,4441,6482,6483,6484,6485,4442, # 6096
-6486,6487,6488,6489,6490,6491,6492,6493,6494,6495,6496,4822,6497,6498,6499,6500, # 6112
-6501,6502,6503,6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516, # 6128
-6517,6518,6519,6520,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532, # 6144
-6533,6534,6535,6536,6537,6538,6539,6540,6541,6542,6543,6544,6545,6546,6547,6548, # 6160
-6549,6550,6551,6552,6553,6554,6555,6556,2784,6557,4823,6558,6559,6560,6561,6562, # 6176
-6563,6564,6565,6566,6567,6568,6569,3949,6570,6571,6572,4824,6573,6574,6575,6576, # 6192
-6577,6578,6579,6580,6581,6582,6583,4825,6584,6585,6586,3950,2785,6587,6588,6589, # 6208
-6590,6591,6592,6593,6594,6595,6596,6597,6598,6599,6600,6601,6602,6603,6604,6605, # 6224
-6606,6607,6608,6609,6610,6611,6612,4826,6613,6614,6615,4827,6616,6617,6618,6619, # 6240
-6620,6621,6622,6623,6624,6625,4164,6626,6627,6628,6629,6630,6631,6632,6633,6634, # 6256
-3547,6635,4828,6636,6637,6638,6639,6640,6641,6642,3951,2984,6643,6644,6645,6646, # 6272
-6647,6648,6649,4165,6650,4829,6651,6652,4830,6653,6654,6655,6656,6657,6658,6659, # 6288
-6660,6661,6662,4831,6663,6664,6665,6666,6667,6668,6669,6670,6671,4166,6672,4832, # 6304
-3952,6673,6674,6675,6676,4833,6677,6678,6679,4167,6680,6681,6682,3198,6683,6684, # 6320
-6685,6686,6687,6688,6689,6690,6691,6692,6693,6694,6695,6696,6697,4834,6698,6699, # 6336
-6700,6701,6702,6703,6704,6705,6706,6707,6708,6709,6710,6711,6712,6713,6714,6715, # 6352
-6716,6717,6718,6719,6720,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731, # 6368
-6732,6733,6734,4443,6735,6736,6737,6738,6739,6740,6741,6742,6743,6744,6745,4444, # 6384
-6746,6747,6748,6749,6750,6751,6752,6753,6754,6755,6756,6757,6758,6759,6760,6761, # 6400
-6762,6763,6764,6765,6766,6767,6768,6769,6770,6771,6772,6773,6774,6775,6776,6777, # 6416
-6778,6779,6780,6781,4168,6782,6783,3442,6784,6785,6786,6787,6788,6789,6790,6791, # 6432
-4169,6792,6793,6794,6795,6796,6797,6798,6799,6800,6801,6802,6803,6804,6805,6806, # 6448
-6807,6808,6809,6810,6811,4835,6812,6813,6814,4445,6815,6816,4446,6817,6818,6819, # 6464
-6820,6821,6822,6823,6824,6825,6826,6827,6828,6829,6830,6831,6832,6833,6834,6835, # 6480
-3548,6836,6837,6838,6839,6840,6841,6842,6843,6844,6845,6846,4836,6847,6848,6849, # 6496
-6850,6851,6852,6853,6854,3953,6855,6856,6857,6858,6859,6860,6861,6862,6863,6864, # 6512
-6865,6866,6867,6868,6869,6870,6871,6872,6873,6874,6875,6876,6877,3199,6878,6879, # 6528
-6880,6881,6882,4447,6883,6884,6885,6886,6887,6888,6889,6890,6891,6892,6893,6894, # 6544
-6895,6896,6897,6898,6899,6900,6901,6902,6903,6904,4170,6905,6906,6907,6908,6909, # 6560
-6910,6911,6912,6913,6914,6915,6916,6917,6918,6919,6920,6921,6922,6923,6924,6925, # 6576
-6926,6927,4837,6928,6929,6930,6931,6932,6933,6934,6935,6936,3346,6937,6938,4838, # 6592
-6939,6940,6941,4448,6942,6943,6944,6945,6946,4449,6947,6948,6949,6950,6951,6952, # 6608
-6953,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966,6967,6968, # 6624
-6969,6970,6971,6972,6973,6974,6975,6976,6977,6978,6979,6980,6981,6982,6983,6984, # 6640
-6985,6986,6987,6988,6989,6990,6991,6992,6993,6994,3671,6995,6996,6997,6998,4839, # 6656
-6999,7000,7001,7002,3549,7003,7004,7005,7006,7007,7008,7009,7010,7011,7012,7013, # 6672
-7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7024,7025,7026,7027,7028,7029, # 6688
-7030,4840,7031,7032,7033,7034,7035,7036,7037,7038,4841,7039,7040,7041,7042,7043, # 6704
-7044,7045,7046,7047,7048,7049,7050,7051,7052,7053,7054,7055,7056,7057,7058,7059, # 6720
-7060,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070,2985,7071,7072,7073,7074, # 6736
-7075,7076,7077,7078,7079,7080,4842,7081,7082,7083,7084,7085,7086,7087,7088,7089, # 6752
-7090,7091,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105, # 6768
-7106,7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7117,7118,4450,7119,7120, # 6784
-7121,7122,7123,7124,7125,7126,7127,7128,7129,7130,7131,7132,7133,7134,7135,7136, # 6800
-7137,7138,7139,7140,7141,7142,7143,4843,7144,7145,7146,7147,7148,7149,7150,7151, # 6816
-7152,7153,7154,7155,7156,7157,7158,7159,7160,7161,7162,7163,7164,7165,7166,7167, # 6832
-7168,7169,7170,7171,7172,7173,7174,7175,7176,7177,7178,7179,7180,7181,7182,7183, # 6848
-7184,7185,7186,7187,7188,4171,4172,7189,7190,7191,7192,7193,7194,7195,7196,7197, # 6864
-7198,7199,7200,7201,7202,7203,7204,7205,7206,7207,7208,7209,7210,7211,7212,7213, # 6880
-7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229, # 6896
-7230,7231,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245, # 6912
-7246,7247,7248,7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261, # 6928
-7262,7263,7264,7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277, # 6944
-7278,7279,7280,7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293, # 6960
-7294,7295,7296,4844,7297,7298,7299,7300,7301,7302,7303,7304,7305,7306,7307,7308, # 6976
-7309,7310,7311,7312,7313,7314,7315,7316,4451,7317,7318,7319,7320,7321,7322,7323, # 6992
-7324,7325,7326,7327,7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339, # 7008
-7340,7341,7342,7343,7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,4173,7354, # 7024
-7355,4845,7356,7357,7358,7359,7360,7361,7362,7363,7364,7365,7366,7367,7368,7369, # 7040
-7370,7371,7372,7373,7374,7375,7376,7377,7378,7379,7380,7381,7382,7383,7384,7385, # 7056
-7386,7387,7388,4846,7389,7390,7391,7392,7393,7394,7395,7396,7397,7398,7399,7400, # 7072
-7401,7402,7403,7404,7405,3672,7406,7407,7408,7409,7410,7411,7412,7413,7414,7415, # 7088
-7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7427,7428,7429,7430,7431, # 7104
-7432,7433,7434,7435,7436,7437,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447, # 7120
-7448,7449,7450,7451,7452,7453,4452,7454,3200,7455,7456,7457,7458,7459,7460,7461, # 7136
-7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7473,7474,4847,7475,7476, # 7152
-7477,3133,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487,7488,7489,7490,7491, # 7168
-7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,3347,7503,7504,7505,7506, # 7184
-7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519,7520,7521,4848, # 7200
-7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535,7536,7537, # 7216
-7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,3801,4849,7550,7551, # 7232
-7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567, # 7248
-7568,7569,3035,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582, # 7264
-7583,7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598, # 7280
-7599,7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614, # 7296
-7615,7616,4850,7617,7618,3802,7619,7620,7621,7622,7623,7624,7625,7626,7627,7628, # 7312
-7629,7630,7631,7632,4851,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643, # 7328
-7644,7645,7646,7647,7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659, # 7344
-7660,7661,7662,7663,7664,7665,7666,7667,7668,7669,7670,4453,7671,7672,7673,7674, # 7360
-7675,7676,7677,7678,7679,7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690, # 7376
-7691,7692,7693,7694,7695,7696,7697,3443,7698,7699,7700,7701,7702,4454,7703,7704, # 7392
-7705,7706,7707,7708,7709,7710,7711,7712,7713,2472,7714,7715,7716,7717,7718,7719, # 7408
-7720,7721,7722,7723,7724,7725,7726,7727,7728,7729,7730,7731,3954,7732,7733,7734, # 7424
-7735,7736,7737,7738,7739,7740,7741,7742,7743,7744,7745,7746,7747,7748,7749,7750, # 7440
-3134,7751,7752,4852,7753,7754,7755,4853,7756,7757,7758,7759,7760,4174,7761,7762, # 7456
-7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,7777,7778, # 7472
-7779,7780,7781,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791,7792,7793,7794, # 7488
-7795,7796,7797,7798,7799,7800,7801,7802,7803,7804,7805,4854,7806,7807,7808,7809, # 7504
-7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7824,7825, # 7520
-4855,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,7840, # 7536
-7841,7842,7843,7844,7845,7846,7847,3955,7848,7849,7850,7851,7852,7853,7854,7855, # 7552
-7856,7857,7858,7859,7860,3444,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870, # 7568
-7871,7872,7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886, # 7584
-7887,7888,7889,7890,7891,4175,7892,7893,7894,7895,7896,4856,4857,7897,7898,7899, # 7600
-7900,2598,7901,7902,7903,7904,7905,7906,7907,7908,4455,7909,7910,7911,7912,7913, # 7616
-7914,3201,7915,7916,7917,7918,7919,7920,7921,4858,7922,7923,7924,7925,7926,7927, # 7632
-7928,7929,7930,7931,7932,7933,7934,7935,7936,7937,7938,7939,7940,7941,7942,7943, # 7648
-7944,7945,7946,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7957,7958,7959, # 7664
-7960,7961,7962,7963,7964,7965,7966,7967,7968,7969,7970,7971,7972,7973,7974,7975, # 7680
-7976,7977,7978,7979,7980,7981,4859,7982,7983,7984,7985,7986,7987,7988,7989,7990, # 7696
-7991,7992,7993,7994,7995,7996,4860,7997,7998,7999,8000,8001,8002,8003,8004,8005, # 7712
-8006,8007,8008,8009,8010,8011,8012,8013,8014,8015,8016,4176,8017,8018,8019,8020, # 7728
-8021,8022,8023,4861,8024,8025,8026,8027,8028,8029,8030,8031,8032,8033,8034,8035, # 7744
-8036,4862,4456,8037,8038,8039,8040,4863,8041,8042,8043,8044,8045,8046,8047,8048, # 7760
-8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063,8064, # 7776
-8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079,8080, # 7792
-8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095,8096, # 7808
-8097,8098,8099,4864,4177,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110, # 7824
-8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,4178,8121,8122,8123,8124,8125, # 7840
-8126,8127,8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141, # 7856
-8142,8143,8144,8145,4865,4866,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155, # 7872
-8156,8157,8158,8159,8160,8161,8162,8163,8164,8165,4179,8166,8167,8168,8169,8170, # 7888
-8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181,4457,8182,8183,8184,8185, # 7904
-8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201, # 7920
-8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213,8214,8215,8216,8217, # 7936
-8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229,8230,8231,8232,8233, # 7952
-8234,8235,8236,8237,8238,8239,8240,8241,8242,8243,8244,8245,8246,8247,8248,8249, # 7968
-8250,8251,8252,8253,8254,8255,8256,3445,8257,8258,8259,8260,8261,8262,4458,8263, # 7984
-8264,8265,8266,8267,8268,8269,8270,8271,8272,4459,8273,8274,8275,8276,3550,8277, # 8000
-8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,8288,8289,4460,8290,8291,8292, # 8016
-8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,4867, # 8032
-8308,8309,8310,8311,8312,3551,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322, # 8048
-8323,8324,8325,8326,4868,8327,8328,8329,8330,8331,8332,8333,8334,8335,8336,8337, # 8064
-8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353, # 8080
-8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,4869,4461,8364,8365,8366,8367, # 8096
-8368,8369,8370,4870,8371,8372,8373,8374,8375,8376,8377,8378,8379,8380,8381,8382, # 8112
-8383,8384,8385,8386,8387,8388,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398, # 8128
-8399,8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,4871,8411,8412,8413, # 8144
-8414,8415,8416,8417,8418,8419,8420,8421,8422,4462,8423,8424,8425,8426,8427,8428, # 8160
-8429,8430,8431,8432,8433,2986,8434,8435,8436,8437,8438,8439,8440,8441,8442,8443, # 8176
-8444,8445,8446,8447,8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459, # 8192
-8460,8461,8462,8463,8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475, # 8208
-8476,8477,8478,4180,8479,8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490, # 8224
-8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506, # 8240
-8507,8508,8509,8510,8511,8512,8513,8514,8515,8516,8517,8518,8519,8520,8521,8522, # 8256
-8523,8524,8525,8526,8527,8528,8529,8530,8531,8532,8533,8534,8535,8536,8537,8538, # 8272
-8539,8540,8541,8542,8543,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554, # 8288
-8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,4872,8565,8566,8567,8568,8569, # 8304
-8570,8571,8572,8573,4873,8574,8575,8576,8577,8578,8579,8580,8581,8582,8583,8584, # 8320
-8585,8586,8587,8588,8589,8590,8591,8592,8593,8594,8595,8596,8597,8598,8599,8600, # 8336
-8601,8602,8603,8604,8605,3803,8606,8607,8608,8609,8610,8611,8612,8613,4874,3804, # 8352
-8614,8615,8616,8617,8618,8619,8620,8621,3956,8622,8623,8624,8625,8626,8627,8628, # 8368
-8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,2865,8639,8640,8641,8642,8643, # 8384
-8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,4463,8657,8658, # 8400
-8659,4875,4876,8660,8661,8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,8672, # 8416
-8673,8674,8675,8676,8677,8678,8679,8680,8681,4464,8682,8683,8684,8685,8686,8687, # 8432
-8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703, # 8448
-8704,8705,8706,8707,8708,8709,2261,8710,8711,8712,8713,8714,8715,8716,8717,8718, # 8464
-8719,8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,4181, # 8480
-8734,8735,8736,8737,8738,8739,8740,8741,8742,8743,8744,8745,8746,8747,8748,8749, # 8496
-8750,8751,8752,8753,8754,8755,8756,8757,8758,8759,8760,8761,8762,8763,4877,8764, # 8512
-8765,8766,8767,8768,8769,8770,8771,8772,8773,8774,8775,8776,8777,8778,8779,8780, # 8528
-8781,8782,8783,8784,8785,8786,8787,8788,4878,8789,4879,8790,8791,8792,4880,8793, # 8544
-8794,8795,8796,8797,8798,8799,8800,8801,4881,8802,8803,8804,8805,8806,8807,8808, # 8560
-8809,8810,8811,8812,8813,8814,8815,3957,8816,8817,8818,8819,8820,8821,8822,8823, # 8576
-8824,8825,8826,8827,8828,8829,8830,8831,8832,8833,8834,8835,8836,8837,8838,8839, # 8592
-8840,8841,8842,8843,8844,8845,8846,8847,4882,8848,8849,8850,8851,8852,8853,8854, # 8608
-8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870, # 8624
-8871,8872,8873,8874,8875,8876,8877,8878,8879,8880,8881,8882,8883,8884,3202,8885, # 8640
-8886,8887,8888,8889,8890,8891,8892,8893,8894,8895,8896,8897,8898,8899,8900,8901, # 8656
-8902,8903,8904,8905,8906,8907,8908,8909,8910,8911,8912,8913,8914,8915,8916,8917, # 8672
-8918,8919,8920,8921,8922,8923,8924,4465,8925,8926,8927,8928,8929,8930,8931,8932, # 8688
-4883,8933,8934,8935,8936,8937,8938,8939,8940,8941,8942,8943,2214,8944,8945,8946, # 8704
-8947,8948,8949,8950,8951,8952,8953,8954,8955,8956,8957,8958,8959,8960,8961,8962, # 8720
-8963,8964,8965,4884,8966,8967,8968,8969,8970,8971,8972,8973,8974,8975,8976,8977, # 8736
-8978,8979,8980,8981,8982,8983,8984,8985,8986,8987,8988,8989,8990,8991,8992,4885, # 8752
-8993,8994,8995,8996,8997,8998,8999,9000,9001,9002,9003,9004,9005,9006,9007,9008, # 8768
-9009,9010,9011,9012,9013,9014,9015,9016,9017,9018,9019,9020,9021,4182,9022,9023, # 8784
-9024,9025,9026,9027,9028,9029,9030,9031,9032,9033,9034,9035,9036,9037,9038,9039, # 8800
-9040,9041,9042,9043,9044,9045,9046,9047,9048,9049,9050,9051,9052,9053,9054,9055, # 8816
-9056,9057,9058,9059,9060,9061,9062,9063,4886,9064,9065,9066,9067,9068,9069,4887, # 8832
-9070,9071,9072,9073,9074,9075,9076,9077,9078,9079,9080,9081,9082,9083,9084,9085, # 8848
-9086,9087,9088,9089,9090,9091,9092,9093,9094,9095,9096,9097,9098,9099,9100,9101, # 8864
-9102,9103,9104,9105,9106,9107,9108,9109,9110,9111,9112,9113,9114,9115,9116,9117, # 8880
-9118,9119,9120,9121,9122,9123,9124,9125,9126,9127,9128,9129,9130,9131,9132,9133, # 8896
-9134,9135,9136,9137,9138,9139,9140,9141,3958,9142,9143,9144,9145,9146,9147,9148, # 8912
-9149,9150,9151,4888,9152,9153,9154,9155,9156,9157,9158,9159,9160,9161,9162,9163, # 8928
-9164,9165,9166,9167,9168,9169,9170,9171,9172,9173,9174,9175,4889,9176,9177,9178, # 8944
-9179,9180,9181,9182,9183,9184,9185,9186,9187,9188,9189,9190,9191,9192,9193,9194, # 8960
-9195,9196,9197,9198,9199,9200,9201,9202,9203,4890,9204,9205,9206,9207,9208,9209, # 8976
-9210,9211,9212,9213,9214,9215,9216,9217,9218,9219,9220,9221,9222,4466,9223,9224, # 8992
-9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240, # 9008
-9241,9242,9243,9244,9245,4891,9246,9247,9248,9249,9250,9251,9252,9253,9254,9255, # 9024
-9256,9257,4892,9258,9259,9260,9261,4893,4894,9262,9263,9264,9265,9266,9267,9268, # 9040
-9269,9270,9271,9272,9273,4467,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283, # 9056
-9284,9285,3673,9286,9287,9288,9289,9290,9291,9292,9293,9294,9295,9296,9297,9298, # 9072
-9299,9300,9301,9302,9303,9304,9305,9306,9307,9308,9309,9310,9311,9312,9313,9314, # 9088
-9315,9316,9317,9318,9319,9320,9321,9322,4895,9323,9324,9325,9326,9327,9328,9329, # 9104
-9330,9331,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345, # 9120
-9346,9347,4468,9348,9349,9350,9351,9352,9353,9354,9355,9356,9357,9358,9359,9360, # 9136
-9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9371,9372,9373,4896,9374,4469, # 9152
-9375,9376,9377,9378,9379,4897,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389, # 9168
-9390,9391,9392,9393,9394,9395,9396,9397,9398,9399,9400,9401,9402,9403,9404,9405, # 9184
-9406,4470,9407,2751,9408,9409,3674,3552,9410,9411,9412,9413,9414,9415,9416,9417, # 9200
-9418,9419,9420,9421,4898,9422,9423,9424,9425,9426,9427,9428,9429,3959,9430,9431, # 9216
-9432,9433,9434,9435,9436,4471,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446, # 9232
-9447,9448,9449,9450,3348,9451,9452,9453,9454,9455,9456,9457,9458,9459,9460,9461, # 9248
-9462,9463,9464,9465,9466,9467,9468,9469,9470,9471,9472,4899,9473,9474,9475,9476, # 9264
-9477,4900,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,3349,9489,9490, # 9280
-9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506, # 9296
-9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,4901,9521, # 9312
-9522,9523,9524,9525,9526,4902,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536, # 9328
-9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,9548,9549,9550,9551,9552, # 9344
-9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568, # 9360
-9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584, # 9376
-3805,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599, # 9392
-9600,9601,9602,4903,9603,9604,9605,9606,9607,4904,9608,9609,9610,9611,9612,9613, # 9408
-9614,4905,9615,9616,9617,9618,9619,9620,9621,9622,9623,9624,9625,9626,9627,9628, # 9424
-9629,9630,9631,9632,4906,9633,9634,9635,9636,9637,9638,9639,9640,9641,9642,9643, # 9440
-4907,9644,9645,9646,9647,9648,9649,9650,9651,9652,9653,9654,9655,9656,9657,9658, # 9456
-9659,9660,9661,9662,9663,9664,9665,9666,9667,9668,9669,9670,9671,9672,4183,9673, # 9472
-9674,9675,9676,9677,4908,9678,9679,9680,9681,4909,9682,9683,9684,9685,9686,9687, # 9488
-9688,9689,9690,4910,9691,9692,9693,3675,9694,9695,9696,2945,9697,9698,9699,9700, # 9504
-9701,9702,9703,9704,9705,4911,9706,9707,9708,9709,9710,9711,9712,9713,9714,9715, # 9520
-9716,9717,9718,9719,9720,9721,9722,9723,9724,9725,9726,9727,9728,9729,9730,9731, # 9536
-9732,9733,9734,9735,4912,9736,9737,9738,9739,9740,4913,9741,9742,9743,9744,9745, # 9552
-9746,9747,9748,9749,9750,9751,9752,9753,9754,9755,9756,9757,9758,4914,9759,9760, # 9568
-9761,9762,9763,9764,9765,9766,9767,9768,9769,9770,9771,9772,9773,9774,9775,9776, # 9584
-9777,9778,9779,9780,9781,9782,4915,9783,9784,9785,9786,9787,9788,9789,9790,9791, # 9600
-9792,9793,4916,9794,9795,9796,9797,9798,9799,9800,9801,9802,9803,9804,9805,9806, # 9616
-9807,9808,9809,9810,9811,9812,9813,9814,9815,9816,9817,9818,9819,9820,9821,9822, # 9632
-9823,9824,9825,9826,9827,9828,9829,9830,9831,9832,9833,9834,9835,9836,9837,9838, # 9648
-9839,9840,9841,9842,9843,9844,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854, # 9664
-9855,9856,9857,9858,9859,9860,9861,9862,9863,9864,9865,9866,9867,9868,4917,9869, # 9680
-9870,9871,9872,9873,9874,9875,9876,9877,9878,9879,9880,9881,9882,9883,9884,9885, # 9696
-9886,9887,9888,9889,9890,9891,9892,4472,9893,9894,9895,9896,9897,3806,9898,9899, # 9712
-9900,9901,9902,9903,9904,9905,9906,9907,9908,9909,9910,9911,9912,9913,9914,4918, # 9728
-9915,9916,9917,4919,9918,9919,9920,9921,4184,9922,9923,9924,9925,9926,9927,9928, # 9744
-9929,9930,9931,9932,9933,9934,9935,9936,9937,9938,9939,9940,9941,9942,9943,9944, # 9760
-9945,9946,4920,9947,9948,9949,9950,9951,9952,9953,9954,9955,4185,9956,9957,9958, # 9776
-9959,9960,9961,9962,9963,9964,9965,4921,9966,9967,9968,4473,9969,9970,9971,9972, # 9792
-9973,9974,9975,9976,9977,4474,9978,9979,9980,9981,9982,9983,9984,9985,9986,9987, # 9808
-9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,10001,10002,10003, # 9824
-10004,10005,10006,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016,10017,10018,10019, # 9840
-10020,10021,4922,10022,4923,10023,10024,10025,10026,10027,10028,10029,10030,10031,10032,10033, # 9856
-10034,10035,10036,10037,10038,10039,10040,10041,10042,10043,10044,10045,10046,10047,10048,4924, # 9872
-10049,10050,10051,10052,10053,10054,10055,10056,10057,10058,10059,10060,10061,10062,10063,10064, # 9888
-10065,10066,10067,10068,10069,10070,10071,10072,10073,10074,10075,10076,10077,10078,10079,10080, # 9904
-10081,10082,10083,10084,10085,10086,10087,4475,10088,10089,10090,10091,10092,10093,10094,10095, # 9920
-10096,10097,4476,10098,10099,10100,10101,10102,10103,10104,10105,10106,10107,10108,10109,10110, # 9936
-10111,2174,10112,10113,10114,10115,10116,10117,10118,10119,10120,10121,10122,10123,10124,10125, # 9952
-10126,10127,10128,10129,10130,10131,10132,10133,10134,10135,10136,10137,10138,10139,10140,3807, # 9968
-4186,4925,10141,10142,10143,10144,10145,10146,10147,4477,4187,10148,10149,10150,10151,10152, # 9984
-10153,4188,10154,10155,10156,10157,10158,10159,10160,10161,4926,10162,10163,10164,10165,10166, #10000
-10167,10168,10169,10170,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180,10181,10182, #10016
-10183,10184,10185,10186,10187,10188,10189,10190,10191,10192,3203,10193,10194,10195,10196,10197, #10032
-10198,10199,10200,4478,10201,10202,10203,10204,4479,10205,10206,10207,10208,10209,10210,10211, #10048
-10212,10213,10214,10215,10216,10217,10218,10219,10220,10221,10222,10223,10224,10225,10226,10227, #10064
-10228,10229,10230,10231,10232,10233,10234,4927,10235,10236,10237,10238,10239,10240,10241,10242, #10080
-10243,10244,10245,10246,10247,10248,10249,10250,10251,10252,10253,10254,10255,10256,10257,10258, #10096
-10259,10260,10261,10262,10263,10264,10265,10266,10267,10268,10269,10270,10271,10272,10273,4480, #10112
-4928,4929,10274,10275,10276,10277,10278,10279,10280,10281,10282,10283,10284,10285,10286,10287, #10128
-10288,10289,10290,10291,10292,10293,10294,10295,10296,10297,10298,10299,10300,10301,10302,10303, #10144
-10304,10305,10306,10307,10308,10309,10310,10311,10312,10313,10314,10315,10316,10317,10318,10319, #10160
-10320,10321,10322,10323,10324,10325,10326,10327,10328,10329,10330,10331,10332,10333,10334,4930, #10176
-10335,10336,10337,10338,10339,10340,10341,10342,4931,10343,10344,10345,10346,10347,10348,10349, #10192
-10350,10351,10352,10353,10354,10355,3088,10356,2786,10357,10358,10359,10360,4189,10361,10362, #10208
-10363,10364,10365,10366,10367,10368,10369,10370,10371,10372,10373,10374,10375,4932,10376,10377, #10224
-10378,10379,10380,10381,10382,10383,10384,10385,10386,10387,10388,10389,10390,10391,10392,4933, #10240
-10393,10394,10395,4934,10396,10397,10398,10399,10400,10401,10402,10403,10404,10405,10406,10407, #10256
-10408,10409,10410,10411,10412,3446,10413,10414,10415,10416,10417,10418,10419,10420,10421,10422, #10272
-10423,4935,10424,10425,10426,10427,10428,10429,10430,4936,10431,10432,10433,10434,10435,10436, #10288
-10437,10438,10439,10440,10441,10442,10443,4937,10444,10445,10446,10447,4481,10448,10449,10450, #10304
-10451,10452,10453,10454,10455,10456,10457,10458,10459,10460,10461,10462,10463,10464,10465,10466, #10320
-10467,10468,10469,10470,10471,10472,10473,10474,10475,10476,10477,10478,10479,10480,10481,10482, #10336
-10483,10484,10485,10486,10487,10488,10489,10490,10491,10492,10493,10494,10495,10496,10497,10498, #10352
-10499,10500,10501,10502,10503,10504,10505,4938,10506,10507,10508,10509,10510,2552,10511,10512, #10368
-10513,10514,10515,10516,3447,10517,10518,10519,10520,10521,10522,10523,10524,10525,10526,10527, #10384
-10528,10529,10530,10531,10532,10533,10534,10535,10536,10537,10538,10539,10540,10541,10542,10543, #10400
-4482,10544,4939,10545,10546,10547,10548,10549,10550,10551,10552,10553,10554,10555,10556,10557, #10416
-10558,10559,10560,10561,10562,10563,10564,10565,10566,10567,3676,4483,10568,10569,10570,10571, #10432
-10572,3448,10573,10574,10575,10576,10577,10578,10579,10580,10581,10582,10583,10584,10585,10586, #10448
-10587,10588,10589,10590,10591,10592,10593,10594,10595,10596,10597,10598,10599,10600,10601,10602, #10464
-10603,10604,10605,10606,10607,10608,10609,10610,10611,10612,10613,10614,10615,10616,10617,10618, #10480
-10619,10620,10621,10622,10623,10624,10625,10626,10627,4484,10628,10629,10630,10631,10632,4940, #10496
-10633,10634,10635,10636,10637,10638,10639,10640,10641,10642,10643,10644,10645,10646,10647,10648, #10512
-10649,10650,10651,10652,10653,10654,10655,10656,4941,10657,10658,10659,2599,10660,10661,10662, #10528
-10663,10664,10665,10666,3089,10667,10668,10669,10670,10671,10672,10673,10674,10675,10676,10677, #10544
-10678,10679,10680,4942,10681,10682,10683,10684,10685,10686,10687,10688,10689,10690,10691,10692, #10560
-10693,10694,10695,10696,10697,4485,10698,10699,10700,10701,10702,10703,10704,4943,10705,3677, #10576
-10706,10707,10708,10709,10710,10711,10712,4944,10713,10714,10715,10716,10717,10718,10719,10720, #10592
-10721,10722,10723,10724,10725,10726,10727,10728,4945,10729,10730,10731,10732,10733,10734,10735, #10608
-10736,10737,10738,10739,10740,10741,10742,10743,10744,10745,10746,10747,10748,10749,10750,10751, #10624
-10752,10753,10754,10755,10756,10757,10758,10759,10760,10761,4946,10762,10763,10764,10765,10766, #10640
-10767,4947,4948,10768,10769,10770,10771,10772,10773,10774,10775,10776,10777,10778,10779,10780, #10656
-10781,10782,10783,10784,10785,10786,10787,10788,10789,10790,10791,10792,10793,10794,10795,10796, #10672
-10797,10798,10799,10800,10801,10802,10803,10804,10805,10806,10807,10808,10809,10810,10811,10812, #10688
-10813,10814,10815,10816,10817,10818,10819,10820,10821,10822,10823,10824,10825,10826,10827,10828, #10704
-10829,10830,10831,10832,10833,10834,10835,10836,10837,10838,10839,10840,10841,10842,10843,10844, #10720
-10845,10846,10847,10848,10849,10850,10851,10852,10853,10854,10855,10856,10857,10858,10859,10860, #10736
-10861,10862,10863,10864,10865,10866,10867,10868,10869,10870,10871,10872,10873,10874,10875,10876, #10752
-10877,10878,4486,10879,10880,10881,10882,10883,10884,10885,4949,10886,10887,10888,10889,10890, #10768
-10891,10892,10893,10894,10895,10896,10897,10898,10899,10900,10901,10902,10903,10904,10905,10906, #10784
-10907,10908,10909,10910,10911,10912,10913,10914,10915,10916,10917,10918,10919,4487,10920,10921, #10800
-10922,10923,10924,10925,10926,10927,10928,10929,10930,10931,10932,4950,10933,10934,10935,10936, #10816
-10937,10938,10939,10940,10941,10942,10943,10944,10945,10946,10947,10948,10949,4488,10950,10951, #10832
-10952,10953,10954,10955,10956,10957,10958,10959,4190,10960,10961,10962,10963,10964,10965,10966, #10848
-10967,10968,10969,10970,10971,10972,10973,10974,10975,10976,10977,10978,10979,10980,10981,10982, #10864
-10983,10984,10985,10986,10987,10988,10989,10990,10991,10992,10993,10994,10995,10996,10997,10998, #10880
-10999,11000,11001,11002,11003,11004,11005,11006,3960,11007,11008,11009,11010,11011,11012,11013, #10896
-11014,11015,11016,11017,11018,11019,11020,11021,11022,11023,11024,11025,11026,11027,11028,11029, #10912
-11030,11031,11032,4951,11033,11034,11035,11036,11037,11038,11039,11040,11041,11042,11043,11044, #10928
-11045,11046,11047,4489,11048,11049,11050,11051,4952,11052,11053,11054,11055,11056,11057,11058, #10944
-4953,11059,11060,11061,11062,11063,11064,11065,11066,11067,11068,11069,11070,11071,4954,11072, #10960
-11073,11074,11075,11076,11077,11078,11079,11080,11081,11082,11083,11084,11085,11086,11087,11088, #10976
-11089,11090,11091,11092,11093,11094,11095,11096,11097,11098,11099,11100,11101,11102,11103,11104, #10992
-11105,11106,11107,11108,11109,11110,11111,11112,11113,11114,11115,3808,11116,11117,11118,11119, #11008
-11120,11121,11122,11123,11124,11125,11126,11127,11128,11129,11130,11131,11132,11133,11134,4955, #11024
-11135,11136,11137,11138,11139,11140,11141,11142,11143,11144,11145,11146,11147,11148,11149,11150, #11040
-11151,11152,11153,11154,11155,11156,11157,11158,11159,11160,11161,4956,11162,11163,11164,11165, #11056
-11166,11167,11168,11169,11170,11171,11172,11173,11174,11175,11176,11177,11178,11179,11180,4957, #11072
-11181,11182,11183,11184,11185,11186,4958,11187,11188,11189,11190,11191,11192,11193,11194,11195, #11088
-11196,11197,11198,11199,11200,3678,11201,11202,11203,11204,11205,11206,4191,11207,11208,11209, #11104
-11210,11211,11212,11213,11214,11215,11216,11217,11218,11219,11220,11221,11222,11223,11224,11225, #11120
-11226,11227,11228,11229,11230,11231,11232,11233,11234,11235,11236,11237,11238,11239,11240,11241, #11136
-11242,11243,11244,11245,11246,11247,11248,11249,11250,11251,4959,11252,11253,11254,11255,11256, #11152
-11257,11258,11259,11260,11261,11262,11263,11264,11265,11266,11267,11268,11269,11270,11271,11272, #11168
-11273,11274,11275,11276,11277,11278,11279,11280,11281,11282,11283,11284,11285,11286,11287,11288, #11184
-11289,11290,11291,11292,11293,11294,11295,11296,11297,11298,11299,11300,11301,11302,11303,11304, #11200
-11305,11306,11307,11308,11309,11310,11311,11312,11313,11314,3679,11315,11316,11317,11318,4490, #11216
-11319,11320,11321,11322,11323,11324,11325,11326,11327,11328,11329,11330,11331,11332,11333,11334, #11232
-11335,11336,11337,11338,11339,11340,11341,11342,11343,11344,11345,11346,11347,4960,11348,11349, #11248
-11350,11351,11352,11353,11354,11355,11356,11357,11358,11359,11360,11361,11362,11363,11364,11365, #11264
-11366,11367,11368,11369,11370,11371,11372,11373,11374,11375,11376,11377,3961,4961,11378,11379, #11280
-11380,11381,11382,11383,11384,11385,11386,11387,11388,11389,11390,11391,11392,11393,11394,11395, #11296
-11396,11397,4192,11398,11399,11400,11401,11402,11403,11404,11405,11406,11407,11408,11409,11410, #11312
-11411,4962,11412,11413,11414,11415,11416,11417,11418,11419,11420,11421,11422,11423,11424,11425, #11328
-11426,11427,11428,11429,11430,11431,11432,11433,11434,11435,11436,11437,11438,11439,11440,11441, #11344
-11442,11443,11444,11445,11446,11447,11448,11449,11450,11451,11452,11453,11454,11455,11456,11457, #11360
-11458,11459,11460,11461,11462,11463,11464,11465,11466,11467,11468,11469,4963,11470,11471,4491, #11376
-11472,11473,11474,11475,4964,11476,11477,11478,11479,11480,11481,11482,11483,11484,11485,11486, #11392
-11487,11488,11489,11490,11491,11492,4965,11493,11494,11495,11496,11497,11498,11499,11500,11501, #11408
-11502,11503,11504,11505,11506,11507,11508,11509,11510,11511,11512,11513,11514,11515,11516,11517, #11424
-11518,11519,11520,11521,11522,11523,11524,11525,11526,11527,11528,11529,3962,11530,11531,11532, #11440
-11533,11534,11535,11536,11537,11538,11539,11540,11541,11542,11543,11544,11545,11546,11547,11548, #11456
-11549,11550,11551,11552,11553,11554,11555,11556,11557,11558,11559,11560,11561,11562,11563,11564, #11472
-4193,4194,11565,11566,11567,11568,11569,11570,11571,11572,11573,11574,11575,11576,11577,11578, #11488
-11579,11580,11581,11582,11583,11584,11585,11586,11587,11588,11589,11590,11591,4966,4195,11592, #11504
-11593,11594,11595,11596,11597,11598,11599,11600,11601,11602,11603,11604,3090,11605,11606,11607, #11520
-11608,11609,11610,4967,11611,11612,11613,11614,11615,11616,11617,11618,11619,11620,11621,11622, #11536
-11623,11624,11625,11626,11627,11628,11629,11630,11631,11632,11633,11634,11635,11636,11637,11638, #11552
-11639,11640,11641,11642,11643,11644,11645,11646,11647,11648,11649,11650,11651,11652,11653,11654, #11568
-11655,11656,11657,11658,11659,11660,11661,11662,11663,11664,11665,11666,11667,11668,11669,11670, #11584
-11671,11672,11673,11674,4968,11675,11676,11677,11678,11679,11680,11681,11682,11683,11684,11685, #11600
-11686,11687,11688,11689,11690,11691,11692,11693,3809,11694,11695,11696,11697,11698,11699,11700, #11616
-11701,11702,11703,11704,11705,11706,11707,11708,11709,11710,11711,11712,11713,11714,11715,11716, #11632
-11717,11718,3553,11719,11720,11721,11722,11723,11724,11725,11726,11727,11728,11729,11730,4969, #11648
-11731,11732,11733,11734,11735,11736,11737,11738,11739,11740,4492,11741,11742,11743,11744,11745, #11664
-11746,11747,11748,11749,11750,11751,11752,4970,11753,11754,11755,11756,11757,11758,11759,11760, #11680
-11761,11762,11763,11764,11765,11766,11767,11768,11769,11770,11771,11772,11773,11774,11775,11776, #11696
-11777,11778,11779,11780,11781,11782,11783,11784,11785,11786,11787,11788,11789,11790,4971,11791, #11712
-11792,11793,11794,11795,11796,11797,4972,11798,11799,11800,11801,11802,11803,11804,11805,11806, #11728
-11807,11808,11809,11810,4973,11811,11812,11813,11814,11815,11816,11817,11818,11819,11820,11821, #11744
-11822,11823,11824,11825,11826,11827,11828,11829,11830,11831,11832,11833,11834,3680,3810,11835, #11760
-11836,4974,11837,11838,11839,11840,11841,11842,11843,11844,11845,11846,11847,11848,11849,11850, #11776
-11851,11852,11853,11854,11855,11856,11857,11858,11859,11860,11861,11862,11863,11864,11865,11866, #11792
-11867,11868,11869,11870,11871,11872,11873,11874,11875,11876,11877,11878,11879,11880,11881,11882, #11808
-11883,11884,4493,11885,11886,11887,11888,11889,11890,11891,11892,11893,11894,11895,11896,11897, #11824
-11898,11899,11900,11901,11902,11903,11904,11905,11906,11907,11908,11909,11910,11911,11912,11913, #11840
-11914,11915,4975,11916,11917,11918,11919,11920,11921,11922,11923,11924,11925,11926,11927,11928, #11856
-11929,11930,11931,11932,11933,11934,11935,11936,11937,11938,11939,11940,11941,11942,11943,11944, #11872
-11945,11946,11947,11948,11949,4976,11950,11951,11952,11953,11954,11955,11956,11957,11958,11959, #11888
-11960,11961,11962,11963,11964,11965,11966,11967,11968,11969,11970,11971,11972,11973,11974,11975, #11904
-11976,11977,11978,11979,11980,11981,11982,11983,11984,11985,11986,11987,4196,11988,11989,11990, #11920
-11991,11992,4977,11993,11994,11995,11996,11997,11998,11999,12000,12001,12002,12003,12004,12005, #11936
-12006,12007,12008,12009,12010,12011,12012,12013,12014,12015,12016,12017,12018,12019,12020,12021, #11952
-12022,12023,12024,12025,12026,12027,12028,12029,12030,12031,12032,12033,12034,12035,12036,12037, #11968
-12038,12039,12040,12041,12042,12043,12044,12045,12046,12047,12048,12049,12050,12051,12052,12053, #11984
-12054,12055,12056,12057,12058,12059,12060,12061,4978,12062,12063,12064,12065,12066,12067,12068, #12000
-12069,12070,12071,12072,12073,12074,12075,12076,12077,12078,12079,12080,12081,12082,12083,12084, #12016
-12085,12086,12087,12088,12089,12090,12091,12092,12093,12094,12095,12096,12097,12098,12099,12100, #12032
-12101,12102,12103,12104,12105,12106,12107,12108,12109,12110,12111,12112,12113,12114,12115,12116, #12048
-12117,12118,12119,12120,12121,12122,12123,4979,12124,12125,12126,12127,12128,4197,12129,12130, #12064
-12131,12132,12133,12134,12135,12136,12137,12138,12139,12140,12141,12142,12143,12144,12145,12146, #12080
-12147,12148,12149,12150,12151,12152,12153,12154,4980,12155,12156,12157,12158,12159,12160,4494, #12096
-12161,12162,12163,12164,3811,12165,12166,12167,12168,12169,4495,12170,12171,4496,12172,12173, #12112
-12174,12175,12176,3812,12177,12178,12179,12180,12181,12182,12183,12184,12185,12186,12187,12188, #12128
-12189,12190,12191,12192,12193,12194,12195,12196,12197,12198,12199,12200,12201,12202,12203,12204, #12144
-12205,12206,12207,12208,12209,12210,12211,12212,12213,12214,12215,12216,12217,12218,12219,12220, #12160
-12221,4981,12222,12223,12224,12225,12226,12227,12228,12229,12230,12231,12232,12233,12234,12235, #12176
-4982,12236,12237,12238,12239,12240,12241,12242,12243,12244,12245,4983,12246,12247,12248,12249, #12192
-4984,12250,12251,12252,12253,12254,12255,12256,12257,12258,12259,12260,12261,12262,12263,12264, #12208
-4985,12265,4497,12266,12267,12268,12269,12270,12271,12272,12273,12274,12275,12276,12277,12278, #12224
-12279,12280,12281,12282,12283,12284,12285,12286,12287,4986,12288,12289,12290,12291,12292,12293, #12240
-12294,12295,12296,2473,12297,12298,12299,12300,12301,12302,12303,12304,12305,12306,12307,12308, #12256
-12309,12310,12311,12312,12313,12314,12315,12316,12317,12318,12319,3963,12320,12321,12322,12323, #12272
-12324,12325,12326,12327,12328,12329,12330,12331,12332,4987,12333,12334,12335,12336,12337,12338, #12288
-12339,12340,12341,12342,12343,12344,12345,12346,12347,12348,12349,12350,12351,12352,12353,12354, #12304
-12355,12356,12357,12358,12359,3964,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369, #12320
-12370,3965,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384, #12336
-12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400, #12352
-12401,12402,12403,12404,12405,12406,12407,12408,4988,12409,12410,12411,12412,12413,12414,12415, #12368
-12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431, #12384
-12432,12433,12434,12435,12436,12437,12438,3554,12439,12440,12441,12442,12443,12444,12445,12446, #12400
-12447,12448,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462, #12416
-12463,12464,4989,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477, #12432
-12478,12479,12480,4990,12481,12482,12483,12484,12485,12486,12487,12488,12489,4498,12490,12491, #12448
-12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507, #12464
-12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523, #12480
-12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,12535,12536,12537,12538,12539, #12496
-12540,12541,12542,12543,12544,12545,12546,12547,12548,12549,12550,12551,4991,12552,12553,12554, #12512
-12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570, #12528
-12571,12572,12573,12574,12575,12576,12577,12578,3036,12579,12580,12581,12582,12583,3966,12584, #12544
-12585,12586,12587,12588,12589,12590,12591,12592,12593,12594,12595,12596,12597,12598,12599,12600, #12560
-12601,12602,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12613,12614,12615,12616, #12576
-12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12630,12631,12632, #12592
-12633,12634,12635,12636,12637,12638,12639,12640,12641,12642,12643,12644,12645,12646,4499,12647, #12608
-12648,12649,12650,12651,12652,12653,12654,12655,12656,12657,12658,12659,12660,12661,12662,12663, #12624
-12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679, #12640
-12680,12681,12682,12683,12684,12685,12686,12687,12688,12689,12690,12691,12692,12693,12694,12695, #12656
-12696,12697,12698,4992,12699,12700,12701,12702,12703,12704,12705,12706,12707,12708,12709,12710, #12672
-12711,12712,12713,12714,12715,12716,12717,12718,12719,12720,12721,12722,12723,12724,12725,12726, #12688
-12727,12728,12729,12730,12731,12732,12733,12734,12735,12736,12737,12738,12739,12740,12741,12742, #12704
-12743,12744,12745,12746,12747,12748,12749,12750,12751,12752,12753,12754,12755,12756,12757,12758, #12720
-12759,12760,12761,12762,12763,12764,12765,12766,12767,12768,12769,12770,12771,12772,12773,12774, #12736
-12775,12776,12777,12778,4993,2175,12779,12780,12781,12782,12783,12784,12785,12786,4500,12787, #12752
-12788,12789,12790,12791,12792,12793,12794,12795,12796,12797,12798,12799,12800,12801,12802,12803, #12768
-12804,12805,12806,12807,12808,12809,12810,12811,12812,12813,12814,12815,12816,12817,12818,12819, #12784
-12820,12821,12822,12823,12824,12825,12826,4198,3967,12827,12828,12829,12830,12831,12832,12833, #12800
-12834,12835,12836,12837,12838,12839,12840,12841,12842,12843,12844,12845,12846,12847,12848,12849, #12816
-12850,12851,12852,12853,12854,12855,12856,12857,12858,12859,12860,12861,4199,12862,12863,12864, #12832
-12865,12866,12867,12868,12869,12870,12871,12872,12873,12874,12875,12876,12877,12878,12879,12880, #12848
-12881,12882,12883,12884,12885,12886,12887,4501,12888,12889,12890,12891,12892,12893,12894,12895, #12864
-12896,12897,12898,12899,12900,12901,12902,12903,12904,12905,12906,12907,12908,12909,12910,12911, #12880
-12912,4994,12913,12914,12915,12916,12917,12918,12919,12920,12921,12922,12923,12924,12925,12926, #12896
-12927,12928,12929,12930,12931,12932,12933,12934,12935,12936,12937,12938,12939,12940,12941,12942, #12912
-12943,12944,12945,12946,12947,12948,12949,12950,12951,12952,12953,12954,12955,12956,1772,12957, #12928
-12958,12959,12960,12961,12962,12963,12964,12965,12966,12967,12968,12969,12970,12971,12972,12973, #12944
-12974,12975,12976,12977,12978,12979,12980,12981,12982,12983,12984,12985,12986,12987,12988,12989, #12960
-12990,12991,12992,12993,12994,12995,12996,12997,4502,12998,4503,12999,13000,13001,13002,13003, #12976
-4504,13004,13005,13006,13007,13008,13009,13010,13011,13012,13013,13014,13015,13016,13017,13018, #12992
-13019,13020,13021,13022,13023,13024,13025,13026,13027,13028,13029,3449,13030,13031,13032,13033, #13008
-13034,13035,13036,13037,13038,13039,13040,13041,13042,13043,13044,13045,13046,13047,13048,13049, #13024
-13050,13051,13052,13053,13054,13055,13056,13057,13058,13059,13060,13061,13062,13063,13064,13065, #13040
-13066,13067,13068,13069,13070,13071,13072,13073,13074,13075,13076,13077,13078,13079,13080,13081, #13056
-13082,13083,13084,13085,13086,13087,13088,13089,13090,13091,13092,13093,13094,13095,13096,13097, #13072
-13098,13099,13100,13101,13102,13103,13104,13105,13106,13107,13108,13109,13110,13111,13112,13113, #13088
-13114,13115,13116,13117,13118,3968,13119,4995,13120,13121,13122,13123,13124,13125,13126,13127, #13104
-4505,13128,13129,13130,13131,13132,13133,13134,4996,4506,13135,13136,13137,13138,13139,4997, #13120
-13140,13141,13142,13143,13144,13145,13146,13147,13148,13149,13150,13151,13152,13153,13154,13155, #13136
-13156,13157,13158,13159,4998,13160,13161,13162,13163,13164,13165,13166,13167,13168,13169,13170, #13152
-13171,13172,13173,13174,13175,13176,4999,13177,13178,13179,13180,13181,13182,13183,13184,13185, #13168
-13186,13187,13188,13189,13190,13191,13192,13193,13194,13195,13196,13197,13198,13199,13200,13201, #13184
-13202,13203,13204,13205,13206,5000,13207,13208,13209,13210,13211,13212,13213,13214,13215,13216, #13200
-13217,13218,13219,13220,13221,13222,13223,13224,13225,13226,13227,4200,5001,13228,13229,13230, #13216
-13231,13232,13233,13234,13235,13236,13237,13238,13239,13240,3969,13241,13242,13243,13244,3970, #13232
-13245,13246,13247,13248,13249,13250,13251,13252,13253,13254,13255,13256,13257,13258,13259,13260, #13248
-13261,13262,13263,13264,13265,13266,13267,13268,3450,13269,13270,13271,13272,13273,13274,13275, #13264
-13276,5002,13277,13278,13279,13280,13281,13282,13283,13284,13285,13286,13287,13288,13289,13290, #13280
-13291,13292,13293,13294,13295,13296,13297,13298,13299,13300,13301,13302,3813,13303,13304,13305, #13296
-13306,13307,13308,13309,13310,13311,13312,13313,13314,13315,13316,13317,13318,13319,13320,13321, #13312
-13322,13323,13324,13325,13326,13327,13328,4507,13329,13330,13331,13332,13333,13334,13335,13336, #13328
-13337,13338,13339,13340,13341,5003,13342,13343,13344,13345,13346,13347,13348,13349,13350,13351, #13344
-13352,13353,13354,13355,13356,13357,13358,13359,13360,13361,13362,13363,13364,13365,13366,13367, #13360
-5004,13368,13369,13370,13371,13372,13373,13374,13375,13376,13377,13378,13379,13380,13381,13382, #13376
-13383,13384,13385,13386,13387,13388,13389,13390,13391,13392,13393,13394,13395,13396,13397,13398, #13392
-13399,13400,13401,13402,13403,13404,13405,13406,13407,13408,13409,13410,13411,13412,13413,13414, #13408
-13415,13416,13417,13418,13419,13420,13421,13422,13423,13424,13425,13426,13427,13428,13429,13430, #13424
-13431,13432,4508,13433,13434,13435,4201,13436,13437,13438,13439,13440,13441,13442,13443,13444, #13440
-13445,13446,13447,13448,13449,13450,13451,13452,13453,13454,13455,13456,13457,5005,13458,13459, #13456
-13460,13461,13462,13463,13464,13465,13466,13467,13468,13469,13470,4509,13471,13472,13473,13474, #13472
-13475,13476,13477,13478,13479,13480,13481,13482,13483,13484,13485,13486,13487,13488,13489,13490, #13488
-13491,13492,13493,13494,13495,13496,13497,13498,13499,13500,13501,13502,13503,13504,13505,13506, #13504
-13507,13508,13509,13510,13511,13512,13513,13514,13515,13516,13517,13518,13519,13520,13521,13522, #13520
-13523,13524,13525,13526,13527,13528,13529,13530,13531,13532,13533,13534,13535,13536,13537,13538, #13536
-13539,13540,13541,13542,13543,13544,13545,13546,13547,13548,13549,13550,13551,13552,13553,13554, #13552
-13555,13556,13557,13558,13559,13560,13561,13562,13563,13564,13565,13566,13567,13568,13569,13570, #13568
-13571,13572,13573,13574,13575,13576,13577,13578,13579,13580,13581,13582,13583,13584,13585,13586, #13584
-13587,13588,13589,13590,13591,13592,13593,13594,13595,13596,13597,13598,13599,13600,13601,13602, #13600
-13603,13604,13605,13606,13607,13608,13609,13610,13611,13612,13613,13614,13615,13616,13617,13618, #13616
-13619,13620,13621,13622,13623,13624,13625,13626,13627,13628,13629,13630,13631,13632,13633,13634, #13632
-13635,13636,13637,13638,13639,13640,13641,13642,5006,13643,13644,13645,13646,13647,13648,13649, #13648
-13650,13651,5007,13652,13653,13654,13655,13656,13657,13658,13659,13660,13661,13662,13663,13664, #13664
-13665,13666,13667,13668,13669,13670,13671,13672,13673,13674,13675,13676,13677,13678,13679,13680, #13680
-13681,13682,13683,13684,13685,13686,13687,13688,13689,13690,13691,13692,13693,13694,13695,13696, #13696
-13697,13698,13699,13700,13701,13702,13703,13704,13705,13706,13707,13708,13709,13710,13711,13712, #13712
-13713,13714,13715,13716,13717,13718,13719,13720,13721,13722,13723,13724,13725,13726,13727,13728, #13728
-13729,13730,13731,13732,13733,13734,13735,13736,13737,13738,13739,13740,13741,13742,13743,13744, #13744
-13745,13746,13747,13748,13749,13750,13751,13752,13753,13754,13755,13756,13757,13758,13759,13760, #13760
-13761,13762,13763,13764,13765,13766,13767,13768,13769,13770,13771,13772,13773,13774,3273,13775, #13776
-13776,13777,13778,13779,13780,13781,13782,13783,13784,13785,13786,13787,13788,13789,13790,13791, #13792
-13792,13793,13794,13795,13796,13797,13798,13799,13800,13801,13802,13803,13804,13805,13806,13807, #13808
-13808,13809,13810,13811,13812,13813,13814,13815,13816,13817,13818,13819,13820,13821,13822,13823, #13824
-13824,13825,13826,13827,13828,13829,13830,13831,13832,13833,13834,13835,13836,13837,13838,13839, #13840
-13840,13841,13842,13843,13844,13845,13846,13847,13848,13849,13850,13851,13852,13853,13854,13855, #13856
-13856,13857,13858,13859,13860,13861,13862,13863,13864,13865,13866,13867,13868,13869,13870,13871, #13872
-13872,13873,13874,13875,13876,13877,13878,13879,13880,13881,13882,13883,13884,13885,13886,13887, #13888
-13888,13889,13890,13891,13892,13893,13894,13895,13896,13897,13898,13899,13900,13901,13902,13903, #13904
-13904,13905,13906,13907,13908,13909,13910,13911,13912,13913,13914,13915,13916,13917,13918,13919, #13920
-13920,13921,13922,13923,13924,13925,13926,13927,13928,13929,13930,13931,13932,13933,13934,13935, #13936
-13936,13937,13938,13939,13940,13941,13942,13943,13944,13945,13946,13947,13948,13949,13950,13951, #13952
-13952,13953,13954,13955,13956,13957,13958,13959,13960,13961,13962,13963,13964,13965,13966,13967, #13968
-13968,13969,13970,13971,13972) #13973
-
-# flake8: noqa
diff --git a/bundle/requests/packages/chardet/big5freq.pyc b/bundle/requests/packages/chardet/big5freq.pyc
deleted file mode 100644
index c6cafdf..0000000
Binary files a/bundle/requests/packages/chardet/big5freq.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/big5prober.py b/bundle/requests/packages/chardet/big5prober.py
deleted file mode 100644
index becce81..0000000
--- a/bundle/requests/packages/chardet/big5prober.py
+++ /dev/null
@@ -1,42 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Communicator client code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-from .mbcharsetprober import MultiByteCharSetProber
-from .codingstatemachine import CodingStateMachine
-from .chardistribution import Big5DistributionAnalysis
-from .mbcssm import Big5SMModel
-
-
-class Big5Prober(MultiByteCharSetProber):
-    def __init__(self):
-        MultiByteCharSetProber.__init__(self)
-        self._mCodingSM = CodingStateMachine(Big5SMModel)
-        self._mDistributionAnalyzer = Big5DistributionAnalysis()
-        self.reset()
-
-    def get_charset_name(self):
-        return "Big5"
diff --git a/bundle/requests/packages/chardet/big5prober.pyc b/bundle/requests/packages/chardet/big5prober.pyc
deleted file mode 100644
index 673d6cf..0000000
Binary files a/bundle/requests/packages/chardet/big5prober.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/chardetect.py b/bundle/requests/packages/chardet/chardetect.py
deleted file mode 100644
index ecd0163..0000000
--- a/bundle/requests/packages/chardet/chardetect.py
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/env python
-"""
-Script which takes one or more file paths and reports on their detected
-encodings
-
-Example::
-
-    % chardetect somefile someotherfile
-    somefile: windows-1252 with confidence 0.5
-    someotherfile: ascii with confidence 1.0
-
-If no paths are provided, it takes its input from stdin.
-
-"""
-from io import open
-from sys import argv, stdin
-
-from chardet.universaldetector import UniversalDetector
-
-
-def description_of(file, name='stdin'):
-    """Return a string describing the probable encoding of a file."""
-    u = UniversalDetector()
-    for line in file:
-        u.feed(line)
-    u.close()
-    result = u.result
-    if result['encoding']:
-        return '%s: %s with confidence %s' % (name,
-                                              result['encoding'],
-                                              result['confidence'])
-    else:
-        return '%s: no result' % name
-
-
-def main():
-    if len(argv) <= 1:
-        print(description_of(stdin))
-    else:
-        for path in argv[1:]:
-            with open(path, 'rb') as f:
-                print(description_of(f, path))
-
-
-if __name__ == '__main__':
-    main()
diff --git a/bundle/requests/packages/chardet/chardistribution.py b/bundle/requests/packages/chardet/chardistribution.py
deleted file mode 100644
index 4e64a00..0000000
--- a/bundle/requests/packages/chardet/chardistribution.py
+++ /dev/null
@@ -1,231 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Communicator client code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-from .euctwfreq import (EUCTWCharToFreqOrder, EUCTW_TABLE_SIZE,
-                        EUCTW_TYPICAL_DISTRIBUTION_RATIO)
-from .euckrfreq import (EUCKRCharToFreqOrder, EUCKR_TABLE_SIZE,
-                        EUCKR_TYPICAL_DISTRIBUTION_RATIO)
-from .gb2312freq import (GB2312CharToFreqOrder, GB2312_TABLE_SIZE,
-                         GB2312_TYPICAL_DISTRIBUTION_RATIO)
-from .big5freq import (Big5CharToFreqOrder, BIG5_TABLE_SIZE,
-                       BIG5_TYPICAL_DISTRIBUTION_RATIO)
-from .jisfreq import (JISCharToFreqOrder, JIS_TABLE_SIZE,
-                      JIS_TYPICAL_DISTRIBUTION_RATIO)
-from .compat import wrap_ord
-
-ENOUGH_DATA_THRESHOLD = 1024
-SURE_YES = 0.99
-SURE_NO = 0.01
-MINIMUM_DATA_THRESHOLD = 3
-
-
-class CharDistributionAnalysis:
-    def __init__(self):
-        # Mapping table to get frequency order from char order (get from
-        # GetOrder())
-        self._mCharToFreqOrder = None
-        self._mTableSize = None  # Size of above table
-        # This is a constant value which varies from language to language,
-        # used in calculating confidence.  See
-        # http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html
-        # for further detail.
-        self._mTypicalDistributionRatio = None
-        self.reset()
-
-    def reset(self):
-        """reset analyser, clear any state"""
-        # If this flag is set to True, detection is done and conclusion has
-        # been made
-        self._mDone = False
-        self._mTotalChars = 0  # Total characters encountered
-        # The number of characters whose frequency order is less than 512
-        self._mFreqChars = 0
-
-    def feed(self, aBuf, aCharLen):
-        """feed a character with known length"""
-        if aCharLen == 2:
-            # we only care about 2-bytes character in our distribution analysis
-            order = self.get_order(aBuf)
-        else:
-            order = -1
-        if order >= 0:
-            self._mTotalChars += 1
-            # order is valid
-            if order < self._mTableSize:
-                if 512 > self._mCharToFreqOrder[order]:
-                    self._mFreqChars += 1
-
-    def get_confidence(self):
-        """return confidence based on existing data"""
-        # if we didn't receive any character in our consideration range,
-        # return negative answer
-        if self._mTotalChars <= 0 or self._mFreqChars <= MINIMUM_DATA_THRESHOLD:
-            return SURE_NO
-
-        if self._mTotalChars != self._mFreqChars:
-            r = (self._mFreqChars / ((self._mTotalChars - self._mFreqChars)
-                 * self._mTypicalDistributionRatio))
-            if r < SURE_YES:
-                return r
-
-        # normalize confidence (we don't want to be 100% sure)
-        return SURE_YES
-
-    def got_enough_data(self):
-        # It is not necessary to receive all data to draw conclusion.
-        # For charset detection, certain amount of data is enough
-        return self._mTotalChars > ENOUGH_DATA_THRESHOLD
-
-    def get_order(self, aBuf):
-        # We do not handle characters based on the original encoding string,
-        # but convert this encoding string to a number, here called order.
-        # This allows multiple encodings of a language to share one frequency
-        # table.
-        return -1
-
-
-class EUCTWDistributionAnalysis(CharDistributionAnalysis):
-    def __init__(self):
-        CharDistributionAnalysis.__init__(self)
-        self._mCharToFreqOrder = EUCTWCharToFreqOrder
-        self._mTableSize = EUCTW_TABLE_SIZE
-        self._mTypicalDistributionRatio = EUCTW_TYPICAL_DISTRIBUTION_RATIO
-
-    def get_order(self, aBuf):
-        # for euc-TW encoding, we are interested
-        #   first  byte range: 0xc4 -- 0xfe
-        #   second byte range: 0xa1 -- 0xfe
-        # no validation needed here. State machine has done that
-        first_char = wrap_ord(aBuf[0])
-        if first_char >= 0xC4:
-            return 94 * (first_char - 0xC4) + wrap_ord(aBuf[1]) - 0xA1
-        else:
-            return -1
-
-
-class EUCKRDistributionAnalysis(CharDistributionAnalysis):
-    def __init__(self):
-        CharDistributionAnalysis.__init__(self)
-        self._mCharToFreqOrder = EUCKRCharToFreqOrder
-        self._mTableSize = EUCKR_TABLE_SIZE
-        self._mTypicalDistributionRatio = EUCKR_TYPICAL_DISTRIBUTION_RATIO
-
-    def get_order(self, aBuf):
-        # for euc-KR encoding, we are interested
-        #   first  byte range: 0xb0 -- 0xfe
-        #   second byte range: 0xa1 -- 0xfe
-        # no validation needed here. State machine has done that
-        first_char = wrap_ord(aBuf[0])
-        if first_char >= 0xB0:
-            return 94 * (first_char - 0xB0) + wrap_ord(aBuf[1]) - 0xA1
-        else:
-            return -1
-
-
-class GB2312DistributionAnalysis(CharDistributionAnalysis):
-    def __init__(self):
-        CharDistributionAnalysis.__init__(self)
-        self._mCharToFreqOrder = GB2312CharToFreqOrder
-        self._mTableSize = GB2312_TABLE_SIZE
-        self._mTypicalDistributionRatio = GB2312_TYPICAL_DISTRIBUTION_RATIO
-
-    def get_order(self, aBuf):
-        # for GB2312 encoding, we are interested
-        #  first  byte range: 0xb0 -- 0xfe
-        #  second byte range: 0xa1 -- 0xfe
-        # no validation needed here. State machine has done that
-        first_char, second_char = wrap_ord(aBuf[0]), wrap_ord(aBuf[1])
-        if (first_char >= 0xB0) and (second_char >= 0xA1):
-            return 94 * (first_char - 0xB0) + second_char - 0xA1
-        else:
-            return -1
-
-
-class Big5DistributionAnalysis(CharDistributionAnalysis):
-    def __init__(self):
-        CharDistributionAnalysis.__init__(self)
-        self._mCharToFreqOrder = Big5CharToFreqOrder
-        self._mTableSize = BIG5_TABLE_SIZE
-        self._mTypicalDistributionRatio = BIG5_TYPICAL_DISTRIBUTION_RATIO
-
-    def get_order(self, aBuf):
-        # for big5 encoding, we are interested
-        #   first  byte range: 0xa4 -- 0xfe
-        #   second byte range: 0x40 -- 0x7e , 0xa1 -- 0xfe
-        # no validation needed here. State machine has done that
-        first_char, second_char = wrap_ord(aBuf[0]), wrap_ord(aBuf[1])
-        if first_char >= 0xA4:
-            if second_char >= 0xA1:
-                return 157 * (first_char - 0xA4) + second_char - 0xA1 + 63
-            else:
-                return 157 * (first_char - 0xA4) + second_char - 0x40
-        else:
-            return -1
-
-
-class SJISDistributionAnalysis(CharDistributionAnalysis):
-    def __init__(self):
-        CharDistributionAnalysis.__init__(self)
-        self._mCharToFreqOrder = JISCharToFreqOrder
-        self._mTableSize = JIS_TABLE_SIZE
-        self._mTypicalDistributionRatio = JIS_TYPICAL_DISTRIBUTION_RATIO
-
-    def get_order(self, aBuf):
-        # for sjis encoding, we are interested
-        #   first  byte range: 0x81 -- 0x9f , 0xe0 -- 0xfe
-        #   second byte range: 0x40 -- 0x7e,  0x81 -- oxfe
-        # no validation needed here. State machine has done that
-        first_char, second_char = wrap_ord(aBuf[0]), wrap_ord(aBuf[1])
-        if (first_char >= 0x81) and (first_char <= 0x9F):
-            order = 188 * (first_char - 0x81)
-        elif (first_char >= 0xE0) and (first_char <= 0xEF):
-            order = 188 * (first_char - 0xE0 + 31)
-        else:
-            return -1
-        order = order + second_char - 0x40
-        if second_char > 0x7F:
-            order = -1
-        return order
-
-
-class EUCJPDistributionAnalysis(CharDistributionAnalysis):
-    def __init__(self):
-        CharDistributionAnalysis.__init__(self)
-        self._mCharToFreqOrder = JISCharToFreqOrder
-        self._mTableSize = JIS_TABLE_SIZE
-        self._mTypicalDistributionRatio = JIS_TYPICAL_DISTRIBUTION_RATIO
-
-    def get_order(self, aBuf):
-        # for euc-JP encoding, we are interested
-        #   first  byte range: 0xa0 -- 0xfe
-        #   second byte range: 0xa1 -- 0xfe
-        # no validation needed here. State machine has done that
-        char = wrap_ord(aBuf[0])
-        if char >= 0xA0:
-            return 94 * (char - 0xA1) + wrap_ord(aBuf[1]) - 0xa1
-        else:
-            return -1
diff --git a/bundle/requests/packages/chardet/chardistribution.pyc b/bundle/requests/packages/chardet/chardistribution.pyc
deleted file mode 100644
index c04b415..0000000
Binary files a/bundle/requests/packages/chardet/chardistribution.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/charsetgroupprober.py b/bundle/requests/packages/chardet/charsetgroupprober.py
deleted file mode 100644
index 85e7a1c..0000000
--- a/bundle/requests/packages/chardet/charsetgroupprober.py
+++ /dev/null
@@ -1,106 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Communicator client code.
-# 
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-# 
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-# 
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-# 
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-from . import constants
-import sys
-from .charsetprober import CharSetProber
-
-
-class CharSetGroupProber(CharSetProber):
-    def __init__(self):
-        CharSetProber.__init__(self)
-        self._mActiveNum = 0
-        self._mProbers = []
-        self._mBestGuessProber = None
-
-    def reset(self):
-        CharSetProber.reset(self)
-        self._mActiveNum = 0
-        for prober in self._mProbers:
-            if prober:
-                prober.reset()
-                prober.active = True
-                self._mActiveNum += 1
-        self._mBestGuessProber = None
-
-    def get_charset_name(self):
-        if not self._mBestGuessProber:
-            self.get_confidence()
-            if not self._mBestGuessProber:
-                return None
-#                self._mBestGuessProber = self._mProbers[0]
-        return self._mBestGuessProber.get_charset_name()
-
-    def feed(self, aBuf):
-        for prober in self._mProbers:
-            if not prober:
-                continue
-            if not prober.active:
-                continue
-            st = prober.feed(aBuf)
-            if not st:
-                continue
-            if st == constants.eFoundIt:
-                self._mBestGuessProber = prober
-                return self.get_state()
-            elif st == constants.eNotMe:
-                prober.active = False
-                self._mActiveNum -= 1
-                if self._mActiveNum <= 0:
-                    self._mState = constants.eNotMe
-                    return self.get_state()
-        return self.get_state()
-
-    def get_confidence(self):
-        st = self.get_state()
-        if st == constants.eFoundIt:
-            return 0.99
-        elif st == constants.eNotMe:
-            return 0.01
-        bestConf = 0.0
-        self._mBestGuessProber = None
-        for prober in self._mProbers:
-            if not prober:
-                continue
-            if not prober.active:
-                if constants._debug:
-                    sys.stderr.write(prober.get_charset_name()
-                                     + ' not active\n')
-                continue
-            cf = prober.get_confidence()
-            if constants._debug:
-                sys.stderr.write('%s confidence = %s\n' %
-                                 (prober.get_charset_name(), cf))
-            if bestConf < cf:
-                bestConf = cf
-                self._mBestGuessProber = prober
-        if not self._mBestGuessProber:
-            return 0.0
-        return bestConf
-#        else:
-#            self._mBestGuessProber = self._mProbers[0]
-#            return self._mBestGuessProber.get_confidence()
diff --git a/bundle/requests/packages/chardet/charsetgroupprober.pyc b/bundle/requests/packages/chardet/charsetgroupprober.pyc
deleted file mode 100644
index cd68ab3..0000000
Binary files a/bundle/requests/packages/chardet/charsetgroupprober.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/charsetprober.py b/bundle/requests/packages/chardet/charsetprober.py
deleted file mode 100644
index 9758171..0000000
--- a/bundle/requests/packages/chardet/charsetprober.py
+++ /dev/null
@@ -1,62 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Universal charset detector code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 2001
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#   Shy Shalom - original C code
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-from . import constants
-import re
-
-
-class CharSetProber:
-    def __init__(self):
-        pass
-
-    def reset(self):
-        self._mState = constants.eDetecting
-
-    def get_charset_name(self):
-        return None
-
-    def feed(self, aBuf):
-        pass
-
-    def get_state(self):
-        return self._mState
-
-    def get_confidence(self):
-        return 0.0
-
-    def filter_high_bit_only(self, aBuf):
-        aBuf = re.sub(b'([\x00-\x7F])+', b' ', aBuf)
-        return aBuf
-
-    def filter_without_english_letters(self, aBuf):
-        aBuf = re.sub(b'([A-Za-z])+', b' ', aBuf)
-        return aBuf
-
-    def filter_with_english_letters(self, aBuf):
-        # TODO
-        return aBuf
diff --git a/bundle/requests/packages/chardet/charsetprober.pyc b/bundle/requests/packages/chardet/charsetprober.pyc
deleted file mode 100644
index 3717454..0000000
Binary files a/bundle/requests/packages/chardet/charsetprober.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/codingstatemachine.py b/bundle/requests/packages/chardet/codingstatemachine.py
deleted file mode 100644
index 8dd8c91..0000000
--- a/bundle/requests/packages/chardet/codingstatemachine.py
+++ /dev/null
@@ -1,61 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is mozilla.org code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-from .constants import eStart
-from .compat import wrap_ord
-
-
-class CodingStateMachine:
-    def __init__(self, sm):
-        self._mModel = sm
-        self._mCurrentBytePos = 0
-        self._mCurrentCharLen = 0
-        self.reset()
-
-    def reset(self):
-        self._mCurrentState = eStart
-
-    def next_state(self, c):
-        # for each byte we get its class
-        # if it is first byte, we also get byte length
-        # PY3K: aBuf is a byte stream, so c is an int, not a byte
-        byteCls = self._mModel['classTable'][wrap_ord(c)]
-        if self._mCurrentState == eStart:
-            self._mCurrentBytePos = 0
-            self._mCurrentCharLen = self._mModel['charLenTable'][byteCls]
-        # from byte's class and stateTable, we get its next state
-        curr_state = (self._mCurrentState * self._mModel['classFactor']
-                      + byteCls)
-        self._mCurrentState = self._mModel['stateTable'][curr_state]
-        self._mCurrentBytePos += 1
-        return self._mCurrentState
-
-    def get_current_charlen(self):
-        return self._mCurrentCharLen
-
-    def get_coding_state_machine(self):
-        return self._mModel['name']
diff --git a/bundle/requests/packages/chardet/codingstatemachine.pyc b/bundle/requests/packages/chardet/codingstatemachine.pyc
deleted file mode 100644
index ea9f8bd..0000000
Binary files a/bundle/requests/packages/chardet/codingstatemachine.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/compat.py b/bundle/requests/packages/chardet/compat.py
deleted file mode 100644
index d9e30ad..0000000
--- a/bundle/requests/packages/chardet/compat.py
+++ /dev/null
@@ -1,34 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# Contributor(s):
-#   Ian Cordasco - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-import sys
-
-
-if sys.version_info < (3, 0):
-    base_str = (str, unicode)
-else:
-    base_str = (bytes, str)
-
-
-def wrap_ord(a):
-    if sys.version_info < (3, 0) and isinstance(a, base_str):
-        return ord(a)
-    else:
-        return a
diff --git a/bundle/requests/packages/chardet/compat.pyc b/bundle/requests/packages/chardet/compat.pyc
deleted file mode 100644
index 8a56cb2..0000000
Binary files a/bundle/requests/packages/chardet/compat.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/constants.py b/bundle/requests/packages/chardet/constants.py
deleted file mode 100644
index e4d148b..0000000
--- a/bundle/requests/packages/chardet/constants.py
+++ /dev/null
@@ -1,39 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Universal charset detector code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 2001
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#   Shy Shalom - original C code
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-# 
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-# 
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-_debug = 0
-
-eDetecting = 0
-eFoundIt = 1
-eNotMe = 2
-
-eStart = 0
-eError = 1
-eItsMe = 2
-
-SHORTCUT_THRESHOLD = 0.95
diff --git a/bundle/requests/packages/chardet/constants.pyc b/bundle/requests/packages/chardet/constants.pyc
deleted file mode 100644
index 18f0429..0000000
Binary files a/bundle/requests/packages/chardet/constants.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/cp949prober.py b/bundle/requests/packages/chardet/cp949prober.py
deleted file mode 100644
index ff4272f..0000000
--- a/bundle/requests/packages/chardet/cp949prober.py
+++ /dev/null
@@ -1,44 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is mozilla.org code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-from .mbcharsetprober import MultiByteCharSetProber
-from .codingstatemachine import CodingStateMachine
-from .chardistribution import EUCKRDistributionAnalysis
-from .mbcssm import CP949SMModel
-
-
-class CP949Prober(MultiByteCharSetProber):
-    def __init__(self):
-        MultiByteCharSetProber.__init__(self)
-        self._mCodingSM = CodingStateMachine(CP949SMModel)
-        # NOTE: CP949 is a superset of EUC-KR, so the distribution should be
-        #       not different.
-        self._mDistributionAnalyzer = EUCKRDistributionAnalysis()
-        self.reset()
-
-    def get_charset_name(self):
-        return "CP949"
diff --git a/bundle/requests/packages/chardet/cp949prober.pyc b/bundle/requests/packages/chardet/cp949prober.pyc
deleted file mode 100644
index df8a7af..0000000
Binary files a/bundle/requests/packages/chardet/cp949prober.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/escprober.py b/bundle/requests/packages/chardet/escprober.py
deleted file mode 100644
index 80a844f..0000000
--- a/bundle/requests/packages/chardet/escprober.py
+++ /dev/null
@@ -1,86 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is mozilla.org code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-from . import constants
-from .escsm import (HZSMModel, ISO2022CNSMModel, ISO2022JPSMModel,
-                    ISO2022KRSMModel)
-from .charsetprober import CharSetProber
-from .codingstatemachine import CodingStateMachine
-from .compat import wrap_ord
-
-
-class EscCharSetProber(CharSetProber):
-    def __init__(self):
-        CharSetProber.__init__(self)
-        self._mCodingSM = [
-            CodingStateMachine(HZSMModel),
-            CodingStateMachine(ISO2022CNSMModel),
-            CodingStateMachine(ISO2022JPSMModel),
-            CodingStateMachine(ISO2022KRSMModel)
-        ]
-        self.reset()
-
-    def reset(self):
-        CharSetProber.reset(self)
-        for codingSM in self._mCodingSM:
-            if not codingSM:
-                continue
-            codingSM.active = True
-            codingSM.reset()
-        self._mActiveSM = len(self._mCodingSM)
-        self._mDetectedCharset = None
-
-    def get_charset_name(self):
-        return self._mDetectedCharset
-
-    def get_confidence(self):
-        if self._mDetectedCharset:
-            return 0.99
-        else:
-            return 0.00
-
-    def feed(self, aBuf):
-        for c in aBuf:
-            # PY3K: aBuf is a byte array, so c is an int, not a byte
-            for codingSM in self._mCodingSM:
-                if not codingSM:
-                    continue
-                if not codingSM.active:
-                    continue
-                codingState = codingSM.next_state(wrap_ord(c))
-                if codingState == constants.eError:
-                    codingSM.active = False
-                    self._mActiveSM -= 1
-                    if self._mActiveSM <= 0:
-                        self._mState = constants.eNotMe
-                        return self.get_state()
-                elif codingState == constants.eItsMe:
-                    self._mState = constants.eFoundIt
-                    self._mDetectedCharset = codingSM.get_coding_state_machine()  # nopep8
-                    return self.get_state()
-
-        return self.get_state()
diff --git a/bundle/requests/packages/chardet/escprober.pyc b/bundle/requests/packages/chardet/escprober.pyc
deleted file mode 100644
index 798c3b8..0000000
Binary files a/bundle/requests/packages/chardet/escprober.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/escsm.py b/bundle/requests/packages/chardet/escsm.py
deleted file mode 100644
index bd302b4..0000000
--- a/bundle/requests/packages/chardet/escsm.py
+++ /dev/null
@@ -1,242 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is mozilla.org code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-from .constants import eStart, eError, eItsMe
-
-HZ_cls = (
-1,0,0,0,0,0,0,0,  # 00 - 07
-0,0,0,0,0,0,0,0,  # 08 - 0f
-0,0,0,0,0,0,0,0,  # 10 - 17
-0,0,0,1,0,0,0,0,  # 18 - 1f
-0,0,0,0,0,0,0,0,  # 20 - 27
-0,0,0,0,0,0,0,0,  # 28 - 2f
-0,0,0,0,0,0,0,0,  # 30 - 37
-0,0,0,0,0,0,0,0,  # 38 - 3f
-0,0,0,0,0,0,0,0,  # 40 - 47
-0,0,0,0,0,0,0,0,  # 48 - 4f
-0,0,0,0,0,0,0,0,  # 50 - 57
-0,0,0,0,0,0,0,0,  # 58 - 5f
-0,0,0,0,0,0,0,0,  # 60 - 67
-0,0,0,0,0,0,0,0,  # 68 - 6f
-0,0,0,0,0,0,0,0,  # 70 - 77
-0,0,0,4,0,5,2,0,  # 78 - 7f
-1,1,1,1,1,1,1,1,  # 80 - 87
-1,1,1,1,1,1,1,1,  # 88 - 8f
-1,1,1,1,1,1,1,1,  # 90 - 97
-1,1,1,1,1,1,1,1,  # 98 - 9f
-1,1,1,1,1,1,1,1,  # a0 - a7
-1,1,1,1,1,1,1,1,  # a8 - af
-1,1,1,1,1,1,1,1,  # b0 - b7
-1,1,1,1,1,1,1,1,  # b8 - bf
-1,1,1,1,1,1,1,1,  # c0 - c7
-1,1,1,1,1,1,1,1,  # c8 - cf
-1,1,1,1,1,1,1,1,  # d0 - d7
-1,1,1,1,1,1,1,1,  # d8 - df
-1,1,1,1,1,1,1,1,  # e0 - e7
-1,1,1,1,1,1,1,1,  # e8 - ef
-1,1,1,1,1,1,1,1,  # f0 - f7
-1,1,1,1,1,1,1,1,  # f8 - ff
-)
-
-HZ_st = (
-eStart,eError,     3,eStart,eStart,eStart,eError,eError,# 00-07
-eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,# 08-0f
-eItsMe,eItsMe,eError,eError,eStart,eStart,     4,eError,# 10-17
-     5,eError,     6,eError,     5,     5,     4,eError,# 18-1f
-     4,eError,     4,     4,     4,eError,     4,eError,# 20-27
-     4,eItsMe,eStart,eStart,eStart,eStart,eStart,eStart,# 28-2f
-)
-
-HZCharLenTable = (0, 0, 0, 0, 0, 0)
-
-HZSMModel = {'classTable': HZ_cls,
-             'classFactor': 6,
-             'stateTable': HZ_st,
-             'charLenTable': HZCharLenTable,
-             'name': "HZ-GB-2312"}
-
-ISO2022CN_cls = (
-2,0,0,0,0,0,0,0,  # 00 - 07
-0,0,0,0,0,0,0,0,  # 08 - 0f
-0,0,0,0,0,0,0,0,  # 10 - 17
-0,0,0,1,0,0,0,0,  # 18 - 1f
-0,0,0,0,0,0,0,0,  # 20 - 27
-0,3,0,0,0,0,0,0,  # 28 - 2f
-0,0,0,0,0,0,0,0,  # 30 - 37
-0,0,0,0,0,0,0,0,  # 38 - 3f
-0,0,0,4,0,0,0,0,  # 40 - 47
-0,0,0,0,0,0,0,0,  # 48 - 4f
-0,0,0,0,0,0,0,0,  # 50 - 57
-0,0,0,0,0,0,0,0,  # 58 - 5f
-0,0,0,0,0,0,0,0,  # 60 - 67
-0,0,0,0,0,0,0,0,  # 68 - 6f
-0,0,0,0,0,0,0,0,  # 70 - 77
-0,0,0,0,0,0,0,0,  # 78 - 7f
-2,2,2,2,2,2,2,2,  # 80 - 87
-2,2,2,2,2,2,2,2,  # 88 - 8f
-2,2,2,2,2,2,2,2,  # 90 - 97
-2,2,2,2,2,2,2,2,  # 98 - 9f
-2,2,2,2,2,2,2,2,  # a0 - a7
-2,2,2,2,2,2,2,2,  # a8 - af
-2,2,2,2,2,2,2,2,  # b0 - b7
-2,2,2,2,2,2,2,2,  # b8 - bf
-2,2,2,2,2,2,2,2,  # c0 - c7
-2,2,2,2,2,2,2,2,  # c8 - cf
-2,2,2,2,2,2,2,2,  # d0 - d7
-2,2,2,2,2,2,2,2,  # d8 - df
-2,2,2,2,2,2,2,2,  # e0 - e7
-2,2,2,2,2,2,2,2,  # e8 - ef
-2,2,2,2,2,2,2,2,  # f0 - f7
-2,2,2,2,2,2,2,2,  # f8 - ff
-)
-
-ISO2022CN_st = (
-eStart,     3,eError,eStart,eStart,eStart,eStart,eStart,# 00-07
-eStart,eError,eError,eError,eError,eError,eError,eError,# 08-0f
-eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,# 10-17
-eItsMe,eItsMe,eItsMe,eError,eError,eError,     4,eError,# 18-1f
-eError,eError,eError,eItsMe,eError,eError,eError,eError,# 20-27
-     5,     6,eError,eError,eError,eError,eError,eError,# 28-2f
-eError,eError,eError,eItsMe,eError,eError,eError,eError,# 30-37
-eError,eError,eError,eError,eError,eItsMe,eError,eStart,# 38-3f
-)
-
-ISO2022CNCharLenTable = (0, 0, 0, 0, 0, 0, 0, 0, 0)
-
-ISO2022CNSMModel = {'classTable': ISO2022CN_cls,
-                    'classFactor': 9,
-                    'stateTable': ISO2022CN_st,
-                    'charLenTable': ISO2022CNCharLenTable,
-                    'name': "ISO-2022-CN"}
-
-ISO2022JP_cls = (
-2,0,0,0,0,0,0,0,  # 00 - 07
-0,0,0,0,0,0,2,2,  # 08 - 0f
-0,0,0,0,0,0,0,0,  # 10 - 17
-0,0,0,1,0,0,0,0,  # 18 - 1f
-0,0,0,0,7,0,0,0,  # 20 - 27
-3,0,0,0,0,0,0,0,  # 28 - 2f
-0,0,0,0,0,0,0,0,  # 30 - 37
-0,0,0,0,0,0,0,0,  # 38 - 3f
-6,0,4,0,8,0,0,0,  # 40 - 47
-0,9,5,0,0,0,0,0,  # 48 - 4f
-0,0,0,0,0,0,0,0,  # 50 - 57
-0,0,0,0,0,0,0,0,  # 58 - 5f
-0,0,0,0,0,0,0,0,  # 60 - 67
-0,0,0,0,0,0,0,0,  # 68 - 6f
-0,0,0,0,0,0,0,0,  # 70 - 77
-0,0,0,0,0,0,0,0,  # 78 - 7f
-2,2,2,2,2,2,2,2,  # 80 - 87
-2,2,2,2,2,2,2,2,  # 88 - 8f
-2,2,2,2,2,2,2,2,  # 90 - 97
-2,2,2,2,2,2,2,2,  # 98 - 9f
-2,2,2,2,2,2,2,2,  # a0 - a7
-2,2,2,2,2,2,2,2,  # a8 - af
-2,2,2,2,2,2,2,2,  # b0 - b7
-2,2,2,2,2,2,2,2,  # b8 - bf
-2,2,2,2,2,2,2,2,  # c0 - c7
-2,2,2,2,2,2,2,2,  # c8 - cf
-2,2,2,2,2,2,2,2,  # d0 - d7
-2,2,2,2,2,2,2,2,  # d8 - df
-2,2,2,2,2,2,2,2,  # e0 - e7
-2,2,2,2,2,2,2,2,  # e8 - ef
-2,2,2,2,2,2,2,2,  # f0 - f7
-2,2,2,2,2,2,2,2,  # f8 - ff
-)
-
-ISO2022JP_st = (
-eStart,     3,eError,eStart,eStart,eStart,eStart,eStart,# 00-07
-eStart,eStart,eError,eError,eError,eError,eError,eError,# 08-0f
-eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,# 10-17
-eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eError,eError,# 18-1f
-eError,     5,eError,eError,eError,     4,eError,eError,# 20-27
-eError,eError,eError,     6,eItsMe,eError,eItsMe,eError,# 28-2f
-eError,eError,eError,eError,eError,eError,eItsMe,eItsMe,# 30-37
-eError,eError,eError,eItsMe,eError,eError,eError,eError,# 38-3f
-eError,eError,eError,eError,eItsMe,eError,eStart,eStart,# 40-47
-)
-
-ISO2022JPCharLenTable = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
-
-ISO2022JPSMModel = {'classTable': ISO2022JP_cls,
-                    'classFactor': 10,
-                    'stateTable': ISO2022JP_st,
-                    'charLenTable': ISO2022JPCharLenTable,
-                    'name': "ISO-2022-JP"}
-
-ISO2022KR_cls = (
-2,0,0,0,0,0,0,0,  # 00 - 07
-0,0,0,0,0,0,0,0,  # 08 - 0f
-0,0,0,0,0,0,0,0,  # 10 - 17
-0,0,0,1,0,0,0,0,  # 18 - 1f
-0,0,0,0,3,0,0,0,  # 20 - 27
-0,4,0,0,0,0,0,0,  # 28 - 2f
-0,0,0,0,0,0,0,0,  # 30 - 37
-0,0,0,0,0,0,0,0,  # 38 - 3f
-0,0,0,5,0,0,0,0,  # 40 - 47
-0,0,0,0,0,0,0,0,  # 48 - 4f
-0,0,0,0,0,0,0,0,  # 50 - 57
-0,0,0,0,0,0,0,0,  # 58 - 5f
-0,0,0,0,0,0,0,0,  # 60 - 67
-0,0,0,0,0,0,0,0,  # 68 - 6f
-0,0,0,0,0,0,0,0,  # 70 - 77
-0,0,0,0,0,0,0,0,  # 78 - 7f
-2,2,2,2,2,2,2,2,  # 80 - 87
-2,2,2,2,2,2,2,2,  # 88 - 8f
-2,2,2,2,2,2,2,2,  # 90 - 97
-2,2,2,2,2,2,2,2,  # 98 - 9f
-2,2,2,2,2,2,2,2,  # a0 - a7
-2,2,2,2,2,2,2,2,  # a8 - af
-2,2,2,2,2,2,2,2,  # b0 - b7
-2,2,2,2,2,2,2,2,  # b8 - bf
-2,2,2,2,2,2,2,2,  # c0 - c7
-2,2,2,2,2,2,2,2,  # c8 - cf
-2,2,2,2,2,2,2,2,  # d0 - d7
-2,2,2,2,2,2,2,2,  # d8 - df
-2,2,2,2,2,2,2,2,  # e0 - e7
-2,2,2,2,2,2,2,2,  # e8 - ef
-2,2,2,2,2,2,2,2,  # f0 - f7
-2,2,2,2,2,2,2,2,  # f8 - ff
-)
-
-ISO2022KR_st = (
-eStart,     3,eError,eStart,eStart,eStart,eError,eError,# 00-07
-eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,# 08-0f
-eItsMe,eItsMe,eError,eError,eError,     4,eError,eError,# 10-17
-eError,eError,eError,eError,     5,eError,eError,eError,# 18-1f
-eError,eError,eError,eItsMe,eStart,eStart,eStart,eStart,# 20-27
-)
-
-ISO2022KRCharLenTable = (0, 0, 0, 0, 0, 0)
-
-ISO2022KRSMModel = {'classTable': ISO2022KR_cls,
-                    'classFactor': 6,
-                    'stateTable': ISO2022KR_st,
-                    'charLenTable': ISO2022KRCharLenTable,
-                    'name': "ISO-2022-KR"}
-
-# flake8: noqa
diff --git a/bundle/requests/packages/chardet/escsm.pyc b/bundle/requests/packages/chardet/escsm.pyc
deleted file mode 100644
index 8ff1e54..0000000
Binary files a/bundle/requests/packages/chardet/escsm.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/eucjpprober.py b/bundle/requests/packages/chardet/eucjpprober.py
deleted file mode 100644
index 8e64fdc..0000000
--- a/bundle/requests/packages/chardet/eucjpprober.py
+++ /dev/null
@@ -1,90 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is mozilla.org code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-import sys
-from . import constants
-from .mbcharsetprober import MultiByteCharSetProber
-from .codingstatemachine import CodingStateMachine
-from .chardistribution import EUCJPDistributionAnalysis
-from .jpcntx import EUCJPContextAnalysis
-from .mbcssm import EUCJPSMModel
-
-
-class EUCJPProber(MultiByteCharSetProber):
-    def __init__(self):
-        MultiByteCharSetProber.__init__(self)
-        self._mCodingSM = CodingStateMachine(EUCJPSMModel)
-        self._mDistributionAnalyzer = EUCJPDistributionAnalysis()
-        self._mContextAnalyzer = EUCJPContextAnalysis()
-        self.reset()
-
-    def reset(self):
-        MultiByteCharSetProber.reset(self)
-        self._mContextAnalyzer.reset()
-
-    def get_charset_name(self):
-        return "EUC-JP"
-
-    def feed(self, aBuf):
-        aLen = len(aBuf)
-        for i in range(0, aLen):
-            # PY3K: aBuf is a byte array, so aBuf[i] is an int, not a byte
-            codingState = self._mCodingSM.next_state(aBuf[i])
-            if codingState == constants.eError:
-                if constants._debug:
-                    sys.stderr.write(self.get_charset_name()
-                                     + ' prober hit error at byte ' + str(i)
-                                     + '\n')
-                self._mState = constants.eNotMe
-                break
-            elif codingState == constants.eItsMe:
-                self._mState = constants.eFoundIt
-                break
-            elif codingState == constants.eStart:
-                charLen = self._mCodingSM.get_current_charlen()
-                if i == 0:
-                    self._mLastChar[1] = aBuf[0]
-                    self._mContextAnalyzer.feed(self._mLastChar, charLen)
-                    self._mDistributionAnalyzer.feed(self._mLastChar, charLen)
-                else:
-                    self._mContextAnalyzer.feed(aBuf[i - 1:i + 1], charLen)
-                    self._mDistributionAnalyzer.feed(aBuf[i - 1:i + 1],
-                                                     charLen)
-
-        self._mLastChar[0] = aBuf[aLen - 1]
-
-        if self.get_state() == constants.eDetecting:
-            if (self._mContextAnalyzer.got_enough_data() and
-               (self.get_confidence() > constants.SHORTCUT_THRESHOLD)):
-                self._mState = constants.eFoundIt
-
-        return self.get_state()
-
-    def get_confidence(self):
-        contxtCf = self._mContextAnalyzer.get_confidence()
-        distribCf = self._mDistributionAnalyzer.get_confidence()
-        return max(contxtCf, distribCf)
diff --git a/bundle/requests/packages/chardet/eucjpprober.pyc b/bundle/requests/packages/chardet/eucjpprober.pyc
deleted file mode 100644
index b119436..0000000
Binary files a/bundle/requests/packages/chardet/eucjpprober.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/euckrfreq.py b/bundle/requests/packages/chardet/euckrfreq.py
deleted file mode 100644
index a179e4c..0000000
--- a/bundle/requests/packages/chardet/euckrfreq.py
+++ /dev/null
@@ -1,596 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Communicator client code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-# 
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-# 
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-# Sampling from about 20M text materials include literature and computer technology
-
-# 128  --> 0.79
-# 256  --> 0.92
-# 512  --> 0.986
-# 1024 --> 0.99944
-# 2048 --> 0.99999
-#
-# Idea Distribution Ratio = 0.98653 / (1-0.98653) = 73.24
-# Random Distribution Ration = 512 / (2350-512) = 0.279.
-# 
-# Typical Distribution Ratio  
-
-EUCKR_TYPICAL_DISTRIBUTION_RATIO = 6.0
-
-EUCKR_TABLE_SIZE = 2352
-
-# Char to FreqOrder table , 
-EUCKRCharToFreqOrder = ( \
-  13, 130, 120,1396, 481,1719,1720, 328, 609, 212,1721, 707, 400, 299,1722,  87,
-1397,1723, 104, 536,1117,1203,1724,1267, 685,1268, 508,1725,1726,1727,1728,1398,
-1399,1729,1730,1731, 141, 621, 326,1057, 368,1732, 267, 488,  20,1733,1269,1734,
- 945,1400,1735,  47, 904,1270,1736,1737, 773, 248,1738, 409, 313, 786, 429,1739,
- 116, 987, 813,1401, 683,  75,1204, 145,1740,1741,1742,1743,  16, 847, 667, 622,
- 708,1744,1745,1746, 966, 787, 304, 129,1747,  60, 820, 123, 676,1748,1749,1750,
-1751, 617,1752, 626,1753,1754,1755,1756, 653,1757,1758,1759,1760,1761,1762, 856,
- 344,1763,1764,1765,1766,  89, 401, 418, 806, 905, 848,1767,1768,1769, 946,1205,
- 709,1770,1118,1771, 241,1772,1773,1774,1271,1775, 569,1776, 999,1777,1778,1779,
-1780, 337, 751,1058,  28, 628, 254,1781, 177, 906, 270, 349, 891,1079,1782,  19,
-1783, 379,1784, 315,1785, 629, 754,1402, 559,1786, 636, 203,1206,1787, 710, 567,
-1788, 935, 814,1789,1790,1207, 766, 528,1791,1792,1208,1793,1794,1795,1796,1797,
-1403,1798,1799, 533,1059,1404,1405,1156,1406, 936, 884,1080,1800, 351,1801,1802,
-1803,1804,1805, 801,1806,1807,1808,1119,1809,1157, 714, 474,1407,1810, 298, 899,
- 885,1811,1120, 802,1158,1812, 892,1813,1814,1408, 659,1815,1816,1121,1817,1818,
-1819,1820,1821,1822, 319,1823, 594, 545,1824, 815, 937,1209,1825,1826, 573,1409,
-1022,1827,1210,1828,1829,1830,1831,1832,1833, 556, 722, 807,1122,1060,1834, 697,
-1835, 900, 557, 715,1836,1410, 540,1411, 752,1159, 294, 597,1211, 976, 803, 770,
-1412,1837,1838,  39, 794,1413, 358,1839, 371, 925,1840, 453, 661, 788, 531, 723,
- 544,1023,1081, 869,  91,1841, 392, 430, 790, 602,1414, 677,1082, 457,1415,1416,
-1842,1843, 475, 327,1024,1417, 795, 121,1844, 733, 403,1418,1845,1846,1847, 300,
- 119, 711,1212, 627,1848,1272, 207,1849,1850, 796,1213, 382,1851, 519,1852,1083,
- 893,1853,1854,1855, 367, 809, 487, 671,1856, 663,1857,1858, 956, 471, 306, 857,
-1859,1860,1160,1084,1861,1862,1863,1864,1865,1061,1866,1867,1868,1869,1870,1871,
- 282,  96, 574,1872, 502,1085,1873,1214,1874, 907,1875,1876, 827, 977,1419,1420,
-1421, 268,1877,1422,1878,1879,1880, 308,1881,   2, 537,1882,1883,1215,1884,1885,
- 127, 791,1886,1273,1423,1887,  34, 336, 404, 643,1888, 571, 654, 894, 840,1889,
-   0, 886,1274, 122, 575, 260, 908, 938,1890,1275, 410, 316,1891,1892, 100,1893,
-1894,1123,  48,1161,1124,1025,1895, 633, 901,1276,1896,1897, 115, 816,1898, 317,
-1899, 694,1900, 909, 734,1424, 572, 866,1425, 691,  85, 524,1010, 543, 394, 841,
-1901,1902,1903,1026,1904,1905,1906,1907,1908,1909,  30, 451, 651, 988, 310,1910,
-1911,1426, 810,1216,  93,1912,1913,1277,1217,1914, 858, 759,  45,  58, 181, 610,
- 269,1915,1916, 131,1062, 551, 443,1000, 821,1427, 957, 895,1086,1917,1918, 375,
-1919, 359,1920, 687,1921, 822,1922, 293,1923,1924,  40, 662, 118, 692,  29, 939,
- 887, 640, 482, 174,1925,  69,1162, 728,1428, 910,1926,1278,1218,1279, 386, 870,
- 217, 854,1163, 823,1927,1928,1929,1930, 834,1931,  78,1932, 859,1933,1063,1934,
-1935,1936,1937, 438,1164, 208, 595,1938,1939,1940,1941,1219,1125,1942, 280, 888,
-1429,1430,1220,1431,1943,1944,1945,1946,1947,1280, 150, 510,1432,1948,1949,1950,
-1951,1952,1953,1954,1011,1087,1955,1433,1043,1956, 881,1957, 614, 958,1064,1065,
-1221,1958, 638,1001, 860, 967, 896,1434, 989, 492, 553,1281,1165,1959,1282,1002,
-1283,1222,1960,1961,1962,1963,  36, 383, 228, 753, 247, 454,1964, 876, 678,1965,
-1966,1284, 126, 464, 490, 835, 136, 672, 529, 940,1088,1435, 473,1967,1968, 467,
-  50, 390, 227, 587, 279, 378, 598, 792, 968, 240, 151, 160, 849, 882,1126,1285,
- 639,1044, 133, 140, 288, 360, 811, 563,1027, 561, 142, 523,1969,1970,1971,   7,
- 103, 296, 439, 407, 506, 634, 990,1972,1973,1974,1975, 645,1976,1977,1978,1979,
-1980,1981, 236,1982,1436,1983,1984,1089, 192, 828, 618, 518,1166, 333,1127,1985,
- 818,1223,1986,1987,1988,1989,1990,1991,1992,1993, 342,1128,1286, 746, 842,1994,
-1995, 560, 223,1287,  98,   8, 189, 650, 978,1288,1996,1437,1997,  17, 345, 250,
- 423, 277, 234, 512, 226,  97, 289,  42, 167,1998, 201,1999,2000, 843, 836, 824,
- 532, 338, 783,1090, 182, 576, 436,1438,1439, 527, 500,2001, 947, 889,2002,2003,
-2004,2005, 262, 600, 314, 447,2006, 547,2007, 693, 738,1129,2008,  71,1440, 745,
- 619, 688,2009, 829,2010,2011, 147,2012,  33, 948,2013,2014,  74, 224,2015,  61,
- 191, 918, 399, 637,2016,1028,1130, 257, 902,2017,2018,2019,2020,2021,2022,2023,
-2024,2025,2026, 837,2027,2028,2029,2030, 179, 874, 591,  52, 724, 246,2031,2032,
-2033,2034,1167, 969,2035,1289, 630, 605, 911,1091,1168,2036,2037,2038,1441, 912,
-2039, 623,2040,2041, 253,1169,1290,2042,1442, 146, 620, 611, 577, 433,2043,1224,
- 719,1170, 959, 440, 437, 534,  84, 388, 480,1131, 159, 220, 198, 679,2044,1012,
- 819,1066,1443, 113,1225, 194, 318,1003,1029,2045,2046,2047,2048,1067,2049,2050,
-2051,2052,2053,  59, 913, 112,2054, 632,2055, 455, 144, 739,1291,2056, 273, 681,
- 499,2057, 448,2058,2059, 760,2060,2061, 970, 384, 169, 245,1132,2062,2063, 414,
-1444,2064,2065,  41, 235,2066, 157, 252, 877, 568, 919, 789, 580,2067, 725,2068,
-2069,1292,2070,2071,1445,2072,1446,2073,2074,  55, 588,  66,1447, 271,1092,2075,
-1226,2076, 960,1013, 372,2077,2078,2079,2080,2081,1293,2082,2083,2084,2085, 850,
-2086,2087,2088,2089,2090, 186,2091,1068, 180,2092,2093,2094, 109,1227, 522, 606,
-2095, 867,1448,1093, 991,1171, 926, 353,1133,2096, 581,2097,2098,2099,1294,1449,
-1450,2100, 596,1172,1014,1228,2101,1451,1295,1173,1229,2102,2103,1296,1134,1452,
- 949,1135,2104,2105,1094,1453,1454,1455,2106,1095,2107,2108,2109,2110,2111,2112,
-2113,2114,2115,2116,2117, 804,2118,2119,1230,1231, 805,1456, 405,1136,2120,2121,
-2122,2123,2124, 720, 701,1297, 992,1457, 927,1004,2125,2126,2127,2128,2129,2130,
-  22, 417,2131, 303,2132, 385,2133, 971, 520, 513,2134,1174,  73,1096, 231, 274,
- 962,1458, 673,2135,1459,2136, 152,1137,2137,2138,2139,2140,1005,1138,1460,1139,
-2141,2142,2143,2144,  11, 374, 844,2145, 154,1232,  46,1461,2146, 838, 830, 721,
-1233, 106,2147,  90, 428, 462, 578, 566,1175, 352,2148,2149, 538,1234, 124,1298,
-2150,1462, 761, 565,2151, 686,2152, 649,2153,  72, 173,2154, 460, 415,2155,1463,
-2156,1235, 305,2157,2158,2159,2160,2161,2162, 579,2163,2164,2165,2166,2167, 747,
-2168,2169,2170,2171,1464, 669,2172,2173,2174,2175,2176,1465,2177,  23, 530, 285,
-2178, 335, 729,2179, 397,2180,2181,2182,1030,2183,2184, 698,2185,2186, 325,2187,
-2188, 369,2189, 799,1097,1015, 348,2190,1069, 680,2191, 851,1466,2192,2193,  10,
-2194, 613, 424,2195, 979, 108, 449, 589,  27, 172,  81,1031,  80, 774, 281, 350,
-1032, 525, 301, 582,1176,2196, 674,1045,2197,2198,1467, 730, 762,2199,2200,2201,
-2202,1468,2203, 993,2204,2205, 266,1070, 963,1140,2206,2207,2208, 664,1098, 972,
-2209,2210,2211,1177,1469,1470, 871,2212,2213,2214,2215,2216,1471,2217,2218,2219,
-2220,2221,2222,2223,2224,2225,2226,2227,1472,1236,2228,2229,2230,2231,2232,2233,
-2234,2235,1299,2236,2237, 200,2238, 477, 373,2239,2240, 731, 825, 777,2241,2242,
-2243, 521, 486, 548,2244,2245,2246,1473,1300,  53, 549, 137, 875,  76, 158,2247,
-1301,1474, 469, 396,1016, 278, 712,2248, 321, 442, 503, 767, 744, 941,1237,1178,
-1475,2249,  82, 178,1141,1179, 973,2250,1302,2251, 297,2252,2253, 570,2254,2255,
-2256,  18, 450, 206,2257, 290, 292,1142,2258, 511, 162,  99, 346, 164, 735,2259,
-1476,1477,   4, 554, 343, 798,1099,2260,1100,2261,  43, 171,1303, 139, 215,2262,
-2263, 717, 775,2264,1033, 322, 216,2265, 831,2266, 149,2267,1304,2268,2269, 702,
-1238, 135, 845, 347, 309,2270, 484,2271, 878, 655, 238,1006,1478,2272,  67,2273,
- 295,2274,2275, 461,2276, 478, 942, 412,2277,1034,2278,2279,2280, 265,2281, 541,
-2282,2283,2284,2285,2286,  70, 852,1071,2287,2288,2289,2290,  21,  56, 509, 117,
- 432,2291,2292, 331, 980, 552,1101, 148, 284, 105, 393,1180,1239, 755,2293, 187,
-2294,1046,1479,2295, 340,2296,  63,1047, 230,2297,2298,1305, 763,1306, 101, 800,
- 808, 494,2299,2300,2301, 903,2302,  37,1072,  14,   5,2303,  79, 675,2304, 312,
-2305,2306,2307,2308,2309,1480,   6,1307,2310,2311,2312,   1, 470,  35,  24, 229,
-2313, 695, 210,  86, 778,  15, 784, 592, 779,  32,  77, 855, 964,2314, 259,2315,
- 501, 380,2316,2317,  83, 981, 153, 689,1308,1481,1482,1483,2318,2319, 716,1484,
-2320,2321,2322,2323,2324,2325,1485,2326,2327, 128,  57,  68, 261,1048, 211, 170,
-1240,  31,2328,  51, 435, 742,2329,2330,2331, 635,2332, 264, 456,2333,2334,2335,
- 425,2336,1486, 143, 507, 263, 943,2337, 363, 920,1487, 256,1488,1102, 243, 601,
-1489,2338,2339,2340,2341,2342,2343,2344, 861,2345,2346,2347,2348,2349,2350, 395,
-2351,1490,1491,  62, 535, 166, 225,2352,2353, 668, 419,1241, 138, 604, 928,2354,
-1181,2355,1492,1493,2356,2357,2358,1143,2359, 696,2360, 387, 307,1309, 682, 476,
-2361,2362, 332,  12, 222, 156,2363, 232,2364, 641, 276, 656, 517,1494,1495,1035,
- 416, 736,1496,2365,1017, 586,2366,2367,2368,1497,2369, 242,2370,2371,2372,1498,
-2373, 965, 713,2374,2375,2376,2377, 740, 982,1499, 944,1500,1007,2378,2379,1310,
-1501,2380,2381,2382, 785, 329,2383,2384,1502,2385,2386,2387, 932,2388,1503,2389,
-2390,2391,2392,1242,2393,2394,2395,2396,2397, 994, 950,2398,2399,2400,2401,1504,
-1311,2402,2403,2404,2405,1049, 749,2406,2407, 853, 718,1144,1312,2408,1182,1505,
-2409,2410, 255, 516, 479, 564, 550, 214,1506,1507,1313, 413, 239, 444, 339,1145,
-1036,1508,1509,1314,1037,1510,1315,2411,1511,2412,2413,2414, 176, 703, 497, 624,
- 593, 921, 302,2415, 341, 165,1103,1512,2416,1513,2417,2418,2419, 376,2420, 700,
-2421,2422,2423, 258, 768,1316,2424,1183,2425, 995, 608,2426,2427,2428,2429, 221,
-2430,2431,2432,2433,2434,2435,2436,2437, 195, 323, 726, 188, 897, 983,1317, 377,
- 644,1050, 879,2438, 452,2439,2440,2441,2442,2443,2444, 914,2445,2446,2447,2448,
- 915, 489,2449,1514,1184,2450,2451, 515,  64, 427, 495,2452, 583,2453, 483, 485,
-1038, 562, 213,1515, 748, 666,2454,2455,2456,2457, 334,2458, 780, 996,1008, 705,
-1243,2459,2460,2461,2462,2463, 114,2464, 493,1146, 366, 163,1516, 961,1104,2465,
- 291,2466,1318,1105,2467,1517, 365,2468, 355, 951,1244,2469,1319,2470, 631,2471,
-2472, 218,1320, 364, 320, 756,1518,1519,1321,1520,1322,2473,2474,2475,2476, 997,
-2477,2478,2479,2480, 665,1185,2481, 916,1521,2482,2483,2484, 584, 684,2485,2486,
- 797,2487,1051,1186,2488,2489,2490,1522,2491,2492, 370,2493,1039,1187,  65,2494,
- 434, 205, 463,1188,2495, 125, 812, 391, 402, 826, 699, 286, 398, 155, 781, 771,
- 585,2496, 590, 505,1073,2497, 599, 244, 219, 917,1018, 952, 646,1523,2498,1323,
-2499,2500,  49, 984, 354, 741,2501, 625,2502,1324,2503,1019, 190, 357, 757, 491,
-  95, 782, 868,2504,2505,2506,2507,2508,2509, 134,1524,1074, 422,1525, 898,2510,
- 161,2511,2512,2513,2514, 769,2515,1526,2516,2517, 411,1325,2518, 472,1527,2519,
-2520,2521,2522,2523,2524, 985,2525,2526,2527,2528,2529,2530, 764,2531,1245,2532,
-2533,  25, 204, 311,2534, 496,2535,1052,2536,2537,2538,2539,2540,2541,2542, 199,
- 704, 504, 468, 758, 657,1528, 196,  44, 839,1246, 272, 750,2543, 765, 862,2544,
-2545,1326,2546, 132, 615, 933,2547, 732,2548,2549,2550,1189,1529,2551, 283,1247,
-1053, 607, 929,2552,2553,2554, 930, 183, 872, 616,1040,1147,2555,1148,1020, 441,
- 249,1075,2556,2557,2558, 466, 743,2559,2560,2561,  92, 514, 426, 420, 526,2562,
-2563,2564,2565,2566,2567,2568, 185,2569,2570,2571,2572, 776,1530, 658,2573, 362,
-2574, 361, 922,1076, 793,2575,2576,2577,2578,2579,2580,1531, 251,2581,2582,2583,
-2584,1532,  54, 612, 237,1327,2585,2586, 275, 408, 647, 111,2587,1533,1106, 465,
-   3, 458,   9,  38,2588, 107, 110, 890, 209,  26, 737, 498,2589,1534,2590, 431,
- 202,  88,1535, 356, 287,1107, 660,1149,2591, 381,1536, 986,1150, 445,1248,1151,
- 974,2592,2593, 846,2594, 446, 953, 184,1249,1250, 727,2595, 923, 193, 883,2596,
-2597,2598, 102, 324, 539, 817,2599, 421,1041,2600, 832,2601,  94, 175, 197, 406,
-2602, 459,2603,2604,2605,2606,2607, 330, 555,2608,2609,2610, 706,1108, 389,2611,
-2612,2613,2614, 233,2615, 833, 558, 931, 954,1251,2616,2617,1537, 546,2618,2619,
-1009,2620,2621,2622,1538, 690,1328,2623, 955,2624,1539,2625,2626, 772,2627,2628,
-2629,2630,2631, 924, 648, 863, 603,2632,2633, 934,1540, 864, 865,2634, 642,1042,
- 670,1190,2635,2636,2637,2638, 168,2639, 652, 873, 542,1054,1541,2640,2641,2642,  # 512, 256
-#Everything below is of no interest for detection purpose
-2643,2644,2645,2646,2647,2648,2649,2650,2651,2652,2653,2654,2655,2656,2657,2658,
-2659,2660,2661,2662,2663,2664,2665,2666,2667,2668,2669,2670,2671,2672,2673,2674,
-2675,2676,2677,2678,2679,2680,2681,2682,2683,2684,2685,2686,2687,2688,2689,2690,
-2691,2692,2693,2694,2695,2696,2697,2698,2699,1542, 880,2700,2701,2702,2703,2704,
-2705,2706,2707,2708,2709,2710,2711,2712,2713,2714,2715,2716,2717,2718,2719,2720,
-2721,2722,2723,2724,2725,1543,2726,2727,2728,2729,2730,2731,2732,1544,2733,2734,
-2735,2736,2737,2738,2739,2740,2741,2742,2743,2744,2745,2746,2747,2748,2749,2750,
-2751,2752,2753,2754,1545,2755,2756,2757,2758,2759,2760,2761,2762,2763,2764,2765,
-2766,1546,2767,1547,2768,2769,2770,2771,2772,2773,2774,2775,2776,2777,2778,2779,
-2780,2781,2782,2783,2784,2785,2786,1548,2787,2788,2789,1109,2790,2791,2792,2793,
-2794,2795,2796,2797,2798,2799,2800,2801,2802,2803,2804,2805,2806,2807,2808,2809,
-2810,2811,2812,1329,2813,2814,2815,2816,2817,2818,2819,2820,2821,2822,2823,2824,
-2825,2826,2827,2828,2829,2830,2831,2832,2833,2834,2835,2836,2837,2838,2839,2840,
-2841,2842,2843,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2856,
-1549,2857,2858,2859,2860,1550,2861,2862,1551,2863,2864,2865,2866,2867,2868,2869,
-2870,2871,2872,2873,2874,1110,1330,2875,2876,2877,2878,2879,2880,2881,2882,2883,
-2884,2885,2886,2887,2888,2889,2890,2891,2892,2893,2894,2895,2896,2897,2898,2899,
-2900,2901,2902,2903,2904,2905,2906,2907,2908,2909,2910,2911,2912,2913,2914,2915,
-2916,2917,2918,2919,2920,2921,2922,2923,2924,2925,2926,2927,2928,2929,2930,1331,
-2931,2932,2933,2934,2935,2936,2937,2938,2939,2940,2941,2942,2943,1552,2944,2945,
-2946,2947,2948,2949,2950,2951,2952,2953,2954,2955,2956,2957,2958,2959,2960,2961,
-2962,2963,2964,1252,2965,2966,2967,2968,2969,2970,2971,2972,2973,2974,2975,2976,
-2977,2978,2979,2980,2981,2982,2983,2984,2985,2986,2987,2988,2989,2990,2991,2992,
-2993,2994,2995,2996,2997,2998,2999,3000,3001,3002,3003,3004,3005,3006,3007,3008,
-3009,3010,3011,3012,1553,3013,3014,3015,3016,3017,1554,3018,1332,3019,3020,3021,
-3022,3023,3024,3025,3026,3027,3028,3029,3030,3031,3032,3033,3034,3035,3036,3037,
-3038,3039,3040,3041,3042,3043,3044,3045,3046,3047,3048,3049,3050,1555,3051,3052,
-3053,1556,1557,3054,3055,3056,3057,3058,3059,3060,3061,3062,3063,3064,3065,3066,
-3067,1558,3068,3069,3070,3071,3072,3073,3074,3075,3076,1559,3077,3078,3079,3080,
-3081,3082,3083,1253,3084,3085,3086,3087,3088,3089,3090,3091,3092,3093,3094,3095,
-3096,3097,3098,3099,3100,3101,3102,3103,3104,3105,3106,3107,3108,1152,3109,3110,
-3111,3112,3113,1560,3114,3115,3116,3117,1111,3118,3119,3120,3121,3122,3123,3124,
-3125,3126,3127,3128,3129,3130,3131,3132,3133,3134,3135,3136,3137,3138,3139,3140,
-3141,3142,3143,3144,3145,3146,3147,3148,3149,3150,3151,3152,3153,3154,3155,3156,
-3157,3158,3159,3160,3161,3162,3163,3164,3165,3166,3167,3168,3169,3170,3171,3172,
-3173,3174,3175,3176,1333,3177,3178,3179,3180,3181,3182,3183,3184,3185,3186,3187,
-3188,3189,1561,3190,3191,1334,3192,3193,3194,3195,3196,3197,3198,3199,3200,3201,
-3202,3203,3204,3205,3206,3207,3208,3209,3210,3211,3212,3213,3214,3215,3216,3217,
-3218,3219,3220,3221,3222,3223,3224,3225,3226,3227,3228,3229,3230,3231,3232,3233,
-3234,1562,3235,3236,3237,3238,3239,3240,3241,3242,3243,3244,3245,3246,3247,3248,
-3249,3250,3251,3252,3253,3254,3255,3256,3257,3258,3259,3260,3261,3262,3263,3264,
-3265,3266,3267,3268,3269,3270,3271,3272,3273,3274,3275,3276,3277,1563,3278,3279,
-3280,3281,3282,3283,3284,3285,3286,3287,3288,3289,3290,3291,3292,3293,3294,3295,
-3296,3297,3298,3299,3300,3301,3302,3303,3304,3305,3306,3307,3308,3309,3310,3311,
-3312,3313,3314,3315,3316,3317,3318,3319,3320,3321,3322,3323,3324,3325,3326,3327,
-3328,3329,3330,3331,3332,3333,3334,3335,3336,3337,3338,3339,3340,3341,3342,3343,
-3344,3345,3346,3347,3348,3349,3350,3351,3352,3353,3354,3355,3356,3357,3358,3359,
-3360,3361,3362,3363,3364,1335,3365,3366,3367,3368,3369,3370,3371,3372,3373,3374,
-3375,3376,3377,3378,3379,3380,3381,3382,3383,3384,3385,3386,3387,1336,3388,3389,
-3390,3391,3392,3393,3394,3395,3396,3397,3398,3399,3400,3401,3402,3403,3404,3405,
-3406,3407,3408,3409,3410,3411,3412,3413,3414,1337,3415,3416,3417,3418,3419,1338,
-3420,3421,3422,1564,1565,3423,3424,3425,3426,3427,3428,3429,3430,3431,1254,3432,
-3433,3434,1339,3435,3436,3437,3438,3439,1566,3440,3441,3442,3443,3444,3445,3446,
-3447,3448,3449,3450,3451,3452,3453,3454,1255,3455,3456,3457,3458,3459,1567,1191,
-3460,1568,1569,3461,3462,3463,1570,3464,3465,3466,3467,3468,1571,3469,3470,3471,
-3472,3473,1572,3474,3475,3476,3477,3478,3479,3480,3481,3482,3483,3484,3485,3486,
-1340,3487,3488,3489,3490,3491,3492,1021,3493,3494,3495,3496,3497,3498,1573,3499,
-1341,3500,3501,3502,3503,3504,3505,3506,3507,3508,3509,3510,3511,1342,3512,3513,
-3514,3515,3516,1574,1343,3517,3518,3519,1575,3520,1576,3521,3522,3523,3524,3525,
-3526,3527,3528,3529,3530,3531,3532,3533,3534,3535,3536,3537,3538,3539,3540,3541,
-3542,3543,3544,3545,3546,3547,3548,3549,3550,3551,3552,3553,3554,3555,3556,3557,
-3558,3559,3560,3561,3562,3563,3564,3565,3566,3567,3568,3569,3570,3571,3572,3573,
-3574,3575,3576,3577,3578,3579,3580,1577,3581,3582,1578,3583,3584,3585,3586,3587,
-3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,
-3604,1579,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,
-3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,1580,3630,3631,1581,3632,
-3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,3643,3644,3645,3646,3647,3648,
-3649,3650,3651,3652,3653,3654,3655,3656,1582,3657,3658,3659,3660,3661,3662,3663,
-3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,3676,3677,3678,3679,
-3680,3681,3682,3683,3684,3685,3686,3687,3688,3689,3690,3691,3692,3693,3694,3695,
-3696,3697,3698,3699,3700,1192,3701,3702,3703,3704,1256,3705,3706,3707,3708,1583,
-1257,3709,3710,3711,3712,3713,3714,3715,3716,1584,3717,3718,3719,3720,3721,3722,
-3723,3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734,3735,3736,3737,3738,
-3739,3740,3741,3742,3743,3744,3745,1344,3746,3747,3748,3749,3750,3751,3752,3753,
-3754,3755,3756,1585,3757,3758,3759,3760,3761,3762,3763,3764,3765,3766,1586,3767,
-3768,3769,3770,3771,3772,3773,3774,3775,3776,3777,3778,1345,3779,3780,3781,3782,
-3783,3784,3785,3786,3787,3788,3789,3790,3791,3792,3793,3794,3795,1346,1587,3796,
-3797,1588,3798,3799,3800,3801,3802,3803,3804,3805,3806,1347,3807,3808,3809,3810,
-3811,1589,3812,3813,3814,3815,3816,3817,3818,3819,3820,3821,1590,3822,3823,1591,
-1348,3824,3825,3826,3827,3828,3829,3830,1592,3831,3832,1593,3833,3834,3835,3836,
-3837,3838,3839,3840,3841,3842,3843,3844,1349,3845,3846,3847,3848,3849,3850,3851,
-3852,3853,3854,3855,3856,3857,3858,1594,3859,3860,3861,3862,3863,3864,3865,3866,
-3867,3868,3869,1595,3870,3871,3872,3873,1596,3874,3875,3876,3877,3878,3879,3880,
-3881,3882,3883,3884,3885,3886,1597,3887,3888,3889,3890,3891,3892,3893,3894,3895,
-1598,3896,3897,3898,1599,1600,3899,1350,3900,1351,3901,3902,1352,3903,3904,3905,
-3906,3907,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921,
-3922,3923,3924,1258,3925,3926,3927,3928,3929,3930,3931,1193,3932,1601,3933,3934,
-3935,3936,3937,3938,3939,3940,3941,3942,3943,1602,3944,3945,3946,3947,3948,1603,
-3949,3950,3951,3952,3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3963,3964,
-3965,1604,3966,3967,3968,3969,3970,3971,3972,3973,3974,3975,3976,3977,1353,3978,
-3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3991,1354,3992,3993,
-3994,3995,3996,3997,3998,3999,4000,4001,4002,4003,4004,4005,4006,4007,4008,4009,
-4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,4022,4023,1355,4024,
-4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036,4037,4038,4039,4040,
-1605,4041,4042,4043,4044,4045,4046,4047,4048,4049,4050,4051,4052,4053,4054,4055,
-4056,4057,4058,4059,4060,1606,4061,4062,4063,4064,1607,4065,4066,4067,4068,4069,
-4070,4071,4072,4073,4074,4075,4076,1194,4077,4078,1608,4079,4080,4081,4082,4083,
-4084,4085,4086,4087,1609,4088,4089,4090,4091,4092,4093,4094,4095,4096,4097,4098,
-4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,1259,4109,4110,4111,4112,4113,
-4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,1195,4125,4126,4127,1610,
-4128,4129,4130,4131,4132,4133,4134,4135,4136,4137,1356,4138,4139,4140,4141,4142,
-4143,4144,1611,4145,4146,4147,4148,4149,4150,4151,4152,4153,4154,4155,4156,4157,
-4158,4159,4160,4161,4162,4163,4164,4165,4166,4167,4168,4169,4170,4171,4172,4173,
-4174,4175,4176,4177,4178,4179,4180,4181,4182,4183,4184,4185,4186,4187,4188,4189,
-4190,4191,4192,4193,4194,4195,4196,4197,4198,4199,4200,4201,4202,4203,4204,4205,
-4206,4207,4208,4209,4210,4211,4212,4213,4214,4215,4216,4217,4218,4219,1612,4220,
-4221,4222,4223,4224,4225,4226,4227,1357,4228,1613,4229,4230,4231,4232,4233,4234,
-4235,4236,4237,4238,4239,4240,4241,4242,4243,1614,4244,4245,4246,4247,4248,4249,
-4250,4251,4252,4253,4254,4255,4256,4257,4258,4259,4260,4261,4262,4263,4264,4265,
-4266,4267,4268,4269,4270,1196,1358,4271,4272,4273,4274,4275,4276,4277,4278,4279,
-4280,4281,4282,4283,4284,4285,4286,4287,1615,4288,4289,4290,4291,4292,4293,4294,
-4295,4296,4297,4298,4299,4300,4301,4302,4303,4304,4305,4306,4307,4308,4309,4310,
-4311,4312,4313,4314,4315,4316,4317,4318,4319,4320,4321,4322,4323,4324,4325,4326,
-4327,4328,4329,4330,4331,4332,4333,4334,1616,4335,4336,4337,4338,4339,4340,4341,
-4342,4343,4344,4345,4346,4347,4348,4349,4350,4351,4352,4353,4354,4355,4356,4357,
-4358,4359,4360,1617,4361,4362,4363,4364,4365,1618,4366,4367,4368,4369,4370,4371,
-4372,4373,4374,4375,4376,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386,4387,
-4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402,4403,
-4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,1619,4417,4418,
-4419,4420,4421,4422,4423,4424,4425,1112,4426,4427,4428,4429,4430,1620,4431,4432,
-4433,4434,4435,4436,4437,4438,4439,4440,4441,4442,1260,1261,4443,4444,4445,4446,
-4447,4448,4449,4450,4451,4452,4453,4454,4455,1359,4456,4457,4458,4459,4460,4461,
-4462,4463,4464,4465,1621,4466,4467,4468,4469,4470,4471,4472,4473,4474,4475,4476,
-4477,4478,4479,4480,4481,4482,4483,4484,4485,4486,4487,4488,4489,1055,4490,4491,
-4492,4493,4494,4495,4496,4497,4498,4499,4500,4501,4502,4503,4504,4505,4506,4507,
-4508,4509,4510,4511,4512,4513,4514,4515,4516,4517,4518,1622,4519,4520,4521,1623,
-4522,4523,4524,4525,4526,4527,4528,4529,4530,4531,4532,4533,4534,4535,1360,4536,
-4537,4538,4539,4540,4541,4542,4543, 975,4544,4545,4546,4547,4548,4549,4550,4551,
-4552,4553,4554,4555,4556,4557,4558,4559,4560,4561,4562,4563,4564,4565,4566,4567,
-4568,4569,4570,4571,1624,4572,4573,4574,4575,4576,1625,4577,4578,4579,4580,4581,
-4582,4583,4584,1626,4585,4586,4587,4588,4589,4590,4591,4592,4593,4594,4595,1627,
-4596,4597,4598,4599,4600,4601,4602,4603,4604,4605,4606,4607,4608,4609,4610,4611,
-4612,4613,4614,4615,1628,4616,4617,4618,4619,4620,4621,4622,4623,4624,4625,4626,
-4627,4628,4629,4630,4631,4632,4633,4634,4635,4636,4637,4638,4639,4640,4641,4642,
-4643,4644,4645,4646,4647,4648,4649,1361,4650,4651,4652,4653,4654,4655,4656,4657,
-4658,4659,4660,4661,1362,4662,4663,4664,4665,4666,4667,4668,4669,4670,4671,4672,
-4673,4674,4675,4676,4677,4678,4679,4680,4681,4682,1629,4683,4684,4685,4686,4687,
-1630,4688,4689,4690,4691,1153,4692,4693,4694,1113,4695,4696,4697,4698,4699,4700,
-4701,4702,4703,4704,4705,4706,4707,4708,4709,4710,4711,1197,4712,4713,4714,4715,
-4716,4717,4718,4719,4720,4721,4722,4723,4724,4725,4726,4727,4728,4729,4730,4731,
-4732,4733,4734,4735,1631,4736,1632,4737,4738,4739,4740,4741,4742,4743,4744,1633,
-4745,4746,4747,4748,4749,1262,4750,4751,4752,4753,4754,1363,4755,4756,4757,4758,
-4759,4760,4761,4762,4763,4764,4765,4766,4767,4768,1634,4769,4770,4771,4772,4773,
-4774,4775,4776,4777,4778,1635,4779,4780,4781,4782,4783,4784,4785,4786,4787,4788,
-4789,1636,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803,
-4804,4805,4806,1637,4807,4808,4809,1638,4810,4811,4812,4813,4814,4815,4816,4817,
-4818,1639,4819,4820,4821,4822,4823,4824,4825,4826,4827,4828,4829,4830,4831,4832,
-4833,1077,4834,4835,4836,4837,4838,4839,4840,4841,4842,4843,4844,4845,4846,4847,
-4848,4849,4850,4851,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863,
-4864,4865,4866,4867,4868,4869,4870,4871,4872,4873,4874,4875,4876,4877,4878,4879,
-4880,4881,4882,4883,1640,4884,4885,1641,4886,4887,4888,4889,4890,4891,4892,4893,
-4894,4895,4896,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909,
-4910,4911,1642,4912,4913,4914,1364,4915,4916,4917,4918,4919,4920,4921,4922,4923,
-4924,4925,4926,4927,4928,4929,4930,4931,1643,4932,4933,4934,4935,4936,4937,4938,
-4939,4940,4941,4942,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954,
-4955,4956,4957,4958,4959,4960,4961,4962,4963,4964,4965,4966,4967,4968,4969,4970,
-4971,4972,4973,4974,4975,4976,4977,4978,4979,4980,1644,4981,4982,4983,4984,1645,
-4985,4986,1646,4987,4988,4989,4990,4991,4992,4993,4994,4995,4996,4997,4998,4999,
-5000,5001,5002,5003,5004,5005,1647,5006,1648,5007,5008,5009,5010,5011,5012,1078,
-5013,5014,5015,5016,5017,5018,5019,5020,5021,5022,5023,5024,5025,5026,5027,5028,
-1365,5029,5030,5031,5032,5033,5034,5035,5036,5037,5038,5039,1649,5040,5041,5042,
-5043,5044,5045,1366,5046,5047,5048,5049,5050,5051,5052,5053,5054,5055,1650,5056,
-5057,5058,5059,5060,5061,5062,5063,5064,5065,5066,5067,5068,5069,5070,5071,5072,
-5073,5074,5075,5076,5077,1651,5078,5079,5080,5081,5082,5083,5084,5085,5086,5087,
-5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102,5103,
-5104,5105,5106,5107,5108,5109,5110,1652,5111,5112,5113,5114,5115,5116,5117,5118,
-1367,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,1653,5130,5131,5132,
-5133,5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,
-5149,1368,5150,1654,5151,1369,5152,5153,5154,5155,5156,5157,5158,5159,5160,5161,
-5162,5163,5164,5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,5176,5177,
-5178,1370,5179,5180,5181,5182,5183,5184,5185,5186,5187,5188,5189,5190,5191,5192,
-5193,5194,5195,5196,5197,5198,1655,5199,5200,5201,5202,1656,5203,5204,5205,5206,
-1371,5207,1372,5208,5209,5210,5211,1373,5212,5213,1374,5214,5215,5216,5217,5218,
-5219,5220,5221,5222,5223,5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,
-5235,5236,5237,5238,5239,5240,5241,5242,5243,5244,5245,5246,5247,1657,5248,5249,
-5250,5251,1658,1263,5252,5253,5254,5255,5256,1375,5257,5258,5259,5260,5261,5262,
-5263,5264,5265,5266,5267,5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,
-5279,5280,5281,5282,5283,1659,5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,
-5294,5295,5296,5297,5298,5299,5300,1660,5301,5302,5303,5304,5305,5306,5307,5308,
-5309,5310,5311,5312,5313,5314,5315,5316,5317,5318,5319,5320,5321,1376,5322,5323,
-5324,5325,5326,5327,5328,5329,5330,5331,5332,5333,1198,5334,5335,5336,5337,5338,
-5339,5340,5341,5342,5343,1661,5344,5345,5346,5347,5348,5349,5350,5351,5352,5353,
-5354,5355,5356,5357,5358,5359,5360,5361,5362,5363,5364,5365,5366,5367,5368,5369,
-5370,5371,5372,5373,5374,5375,5376,5377,5378,5379,5380,5381,5382,5383,5384,5385,
-5386,5387,5388,5389,5390,5391,5392,5393,5394,5395,5396,5397,5398,1264,5399,5400,
-5401,5402,5403,5404,5405,5406,5407,5408,5409,5410,5411,5412,1662,5413,5414,5415,
-5416,1663,5417,5418,5419,5420,5421,5422,5423,5424,5425,5426,5427,5428,5429,5430,
-5431,5432,5433,5434,5435,5436,5437,5438,1664,5439,5440,5441,5442,5443,5444,5445,
-5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456,5457,5458,5459,5460,5461,
-5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472,5473,5474,5475,5476,5477,
-5478,1154,5479,5480,5481,5482,5483,5484,5485,1665,5486,5487,5488,5489,5490,5491,
-5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504,5505,5506,5507,
-5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520,5521,5522,5523,
-5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536,5537,5538,5539,
-5540,5541,5542,5543,5544,5545,5546,5547,5548,1377,5549,5550,5551,5552,5553,5554,
-5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568,5569,5570,
-1114,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584,5585,
-5586,5587,5588,5589,5590,5591,5592,1378,5593,5594,5595,5596,5597,5598,5599,5600,
-5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,1379,5615,
-5616,5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,
-5632,5633,5634,1380,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,
-5647,5648,5649,1381,1056,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,
-1666,5661,5662,5663,5664,5665,5666,5667,5668,1667,5669,1668,5670,5671,5672,5673,
-5674,5675,5676,5677,5678,1155,5679,5680,5681,5682,5683,5684,5685,5686,5687,5688,
-5689,5690,5691,5692,5693,5694,5695,5696,5697,5698,1669,5699,5700,5701,5702,5703,
-5704,5705,1670,5706,5707,5708,5709,5710,1671,5711,5712,5713,5714,1382,5715,5716,
-5717,5718,5719,5720,5721,5722,5723,5724,5725,1672,5726,5727,1673,1674,5728,5729,
-5730,5731,5732,5733,5734,5735,5736,1675,5737,5738,5739,5740,5741,5742,5743,5744,
-1676,5745,5746,5747,5748,5749,5750,5751,1383,5752,5753,5754,5755,5756,5757,5758,
-5759,5760,5761,5762,5763,5764,5765,5766,5767,5768,1677,5769,5770,5771,5772,5773,
-1678,5774,5775,5776, 998,5777,5778,5779,5780,5781,5782,5783,5784,5785,1384,5786,
-5787,5788,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,1679,5801,
-5802,5803,1115,1116,5804,5805,5806,5807,5808,5809,5810,5811,5812,5813,5814,5815,
-5816,5817,5818,5819,5820,5821,5822,5823,5824,5825,5826,5827,5828,5829,5830,5831,
-5832,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844,5845,5846,5847,
-5848,5849,5850,5851,5852,5853,5854,5855,1680,5856,5857,5858,5859,5860,5861,5862,
-5863,5864,1681,5865,5866,5867,1682,5868,5869,5870,5871,5872,5873,5874,5875,5876,
-5877,5878,5879,1683,5880,1684,5881,5882,5883,5884,1685,5885,5886,5887,5888,5889,
-5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904,5905,
-5906,5907,1686,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920,
-5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,1687,
-5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,
-5952,1688,1689,5953,1199,5954,5955,5956,5957,5958,5959,5960,5961,1690,5962,5963,
-5964,5965,5966,5967,5968,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,
-5980,5981,1385,5982,1386,5983,5984,5985,5986,5987,5988,5989,5990,5991,5992,5993,
-5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004,6005,6006,6007,6008,6009,
-6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020,6021,6022,6023,6024,6025,
-6026,6027,1265,6028,6029,1691,6030,6031,6032,6033,6034,6035,6036,6037,6038,6039,
-6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052,6053,6054,6055,
-6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068,6069,6070,6071,
-6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084,1692,6085,6086,
-6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100,6101,6102,
-6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116,6117,6118,
-6119,6120,6121,6122,6123,6124,6125,6126,6127,6128,6129,6130,6131,1693,6132,6133,
-6134,6135,6136,1694,6137,6138,6139,6140,6141,1695,6142,6143,6144,6145,6146,6147,
-6148,6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163,
-6164,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6177,6178,6179,
-6180,6181,6182,6183,6184,6185,1696,6186,6187,6188,6189,6190,6191,6192,6193,6194,
-6195,6196,6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210,
-6211,6212,6213,6214,6215,6216,6217,6218,6219,1697,6220,6221,6222,6223,6224,6225,
-6226,6227,6228,6229,6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241,
-6242,6243,6244,6245,6246,6247,6248,6249,6250,6251,6252,6253,1698,6254,6255,6256,
-6257,6258,6259,6260,6261,6262,6263,1200,6264,6265,6266,6267,6268,6269,6270,6271,  #1024
-6272,6273,6274,6275,6276,6277,6278,6279,6280,6281,6282,6283,6284,6285,6286,6287,
-6288,6289,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6300,6301,6302,1699,
-6303,6304,1700,6305,6306,6307,6308,6309,6310,6311,6312,6313,6314,6315,6316,6317,
-6318,6319,6320,6321,6322,6323,6324,6325,6326,6327,6328,6329,6330,6331,6332,6333,
-6334,6335,6336,6337,6338,6339,1701,6340,6341,6342,6343,6344,1387,6345,6346,6347,
-6348,6349,6350,6351,6352,6353,6354,6355,6356,6357,6358,6359,6360,6361,6362,6363,
-6364,6365,6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,
-6380,6381,6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395,
-6396,6397,6398,6399,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,6411,
-6412,6413,1702,6414,6415,6416,6417,6418,6419,6420,6421,6422,1703,6423,6424,6425,
-6426,6427,6428,6429,6430,6431,6432,6433,6434,6435,6436,6437,6438,1704,6439,6440,
-6441,6442,6443,6444,6445,6446,6447,6448,6449,6450,6451,6452,6453,6454,6455,6456,
-6457,6458,6459,6460,6461,6462,6463,6464,6465,6466,6467,6468,6469,6470,6471,6472,
-6473,6474,6475,6476,6477,6478,6479,6480,6481,6482,6483,6484,6485,6486,6487,6488,
-6489,6490,6491,6492,6493,6494,6495,6496,6497,6498,6499,6500,6501,6502,6503,1266,
-6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516,6517,6518,6519,
-6520,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,6535,
-6536,6537,6538,6539,6540,6541,6542,6543,6544,6545,6546,6547,6548,6549,6550,6551,
-1705,1706,6552,6553,6554,6555,6556,6557,6558,6559,6560,6561,6562,6563,6564,6565,
-6566,6567,6568,6569,6570,6571,6572,6573,6574,6575,6576,6577,6578,6579,6580,6581,
-6582,6583,6584,6585,6586,6587,6588,6589,6590,6591,6592,6593,6594,6595,6596,6597,
-6598,6599,6600,6601,6602,6603,6604,6605,6606,6607,6608,6609,6610,6611,6612,6613,
-6614,6615,6616,6617,6618,6619,6620,6621,6622,6623,6624,6625,6626,6627,6628,6629,
-6630,6631,6632,6633,6634,6635,6636,6637,1388,6638,6639,6640,6641,6642,6643,6644,
-1707,6645,6646,6647,6648,6649,6650,6651,6652,6653,6654,6655,6656,6657,6658,6659,
-6660,6661,6662,6663,1708,6664,6665,6666,6667,6668,6669,6670,6671,6672,6673,6674,
-1201,6675,6676,6677,6678,6679,6680,6681,6682,6683,6684,6685,6686,6687,6688,6689,
-6690,6691,6692,6693,6694,6695,6696,6697,6698,6699,6700,6701,6702,6703,6704,6705,
-6706,6707,6708,6709,6710,6711,6712,6713,6714,6715,6716,6717,6718,6719,6720,6721,
-6722,6723,6724,6725,1389,6726,6727,6728,6729,6730,6731,6732,6733,6734,6735,6736,
-1390,1709,6737,6738,6739,6740,6741,6742,1710,6743,6744,6745,6746,1391,6747,6748,
-6749,6750,6751,6752,6753,6754,6755,6756,6757,1392,6758,6759,6760,6761,6762,6763,
-6764,6765,6766,6767,6768,6769,6770,6771,6772,6773,6774,6775,6776,6777,6778,6779,
-6780,1202,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793,6794,
-6795,6796,6797,6798,6799,6800,6801,6802,6803,6804,6805,6806,6807,6808,6809,1711,
-6810,6811,6812,6813,6814,6815,6816,6817,6818,6819,6820,6821,6822,6823,6824,6825,
-6826,6827,6828,6829,6830,6831,6832,6833,6834,6835,6836,1393,6837,6838,6839,6840,
-6841,6842,6843,6844,6845,6846,6847,6848,6849,6850,6851,6852,6853,6854,6855,6856,
-6857,6858,6859,6860,6861,6862,6863,6864,6865,6866,6867,6868,6869,6870,6871,6872,
-6873,6874,6875,6876,6877,6878,6879,6880,6881,6882,6883,6884,6885,6886,6887,6888,
-6889,6890,6891,6892,6893,6894,6895,6896,6897,6898,6899,6900,6901,6902,1712,6903,
-6904,6905,6906,6907,6908,6909,6910,1713,6911,6912,6913,6914,6915,6916,6917,6918,
-6919,6920,6921,6922,6923,6924,6925,6926,6927,6928,6929,6930,6931,6932,6933,6934,
-6935,6936,6937,6938,6939,6940,6941,6942,6943,6944,6945,6946,6947,6948,6949,6950,
-6951,6952,6953,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966,
-6967,6968,6969,6970,6971,6972,6973,6974,1714,6975,6976,6977,6978,6979,6980,6981,
-6982,6983,6984,6985,6986,6987,6988,1394,6989,6990,6991,6992,6993,6994,6995,6996,
-6997,6998,6999,7000,1715,7001,7002,7003,7004,7005,7006,7007,7008,7009,7010,7011,
-7012,7013,7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7024,7025,7026,7027,
-7028,1716,7029,7030,7031,7032,7033,7034,7035,7036,7037,7038,7039,7040,7041,7042,
-7043,7044,7045,7046,7047,7048,7049,7050,7051,7052,7053,7054,7055,7056,7057,7058,
-7059,7060,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070,7071,7072,7073,7074,
-7075,7076,7077,7078,7079,7080,7081,7082,7083,7084,7085,7086,7087,7088,7089,7090,
-7091,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105,7106,
-7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7117,7118,7119,7120,7121,7122,
-7123,7124,7125,7126,7127,7128,7129,7130,7131,7132,7133,7134,7135,7136,7137,7138,
-7139,7140,7141,7142,7143,7144,7145,7146,7147,7148,7149,7150,7151,7152,7153,7154,
-7155,7156,7157,7158,7159,7160,7161,7162,7163,7164,7165,7166,7167,7168,7169,7170,
-7171,7172,7173,7174,7175,7176,7177,7178,7179,7180,7181,7182,7183,7184,7185,7186,
-7187,7188,7189,7190,7191,7192,7193,7194,7195,7196,7197,7198,7199,7200,7201,7202,
-7203,7204,7205,7206,7207,1395,7208,7209,7210,7211,7212,7213,1717,7214,7215,7216,
-7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229,7230,7231,7232,
-7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245,7246,7247,7248,
-7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261,7262,7263,7264,
-7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277,7278,7279,7280,
-7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7294,7295,7296,
-7297,7298,7299,7300,7301,7302,7303,7304,7305,7306,7307,7308,7309,7310,7311,7312,
-7313,1718,7314,7315,7316,7317,7318,7319,7320,7321,7322,7323,7324,7325,7326,7327,
-7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339,7340,7341,7342,7343,
-7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,7354,7355,7356,7357,7358,7359,
-7360,7361,7362,7363,7364,7365,7366,7367,7368,7369,7370,7371,7372,7373,7374,7375,
-7376,7377,7378,7379,7380,7381,7382,7383,7384,7385,7386,7387,7388,7389,7390,7391,
-7392,7393,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407,
-7408,7409,7410,7411,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423,
-7424,7425,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7437,7438,7439,
-7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7452,7453,7454,7455,
-7456,7457,7458,7459,7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,
-7472,7473,7474,7475,7476,7477,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487,
-7488,7489,7490,7491,7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,7503,
-7504,7505,7506,7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519,
-7520,7521,7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535,
-7536,7537,7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,7550,7551,
-7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567,
-7568,7569,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582,7583,
-7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598,7599,
-7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615,
-7616,7617,7618,7619,7620,7621,7622,7623,7624,7625,7626,7627,7628,7629,7630,7631,
-7632,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643,7644,7645,7646,7647,
-7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659,7660,7661,7662,7663,
-7664,7665,7666,7667,7668,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,
-7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,
-7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,
-7712,7713,7714,7715,7716,7717,7718,7719,7720,7721,7722,7723,7724,7725,7726,7727,
-7728,7729,7730,7731,7732,7733,7734,7735,7736,7737,7738,7739,7740,7741,7742,7743,
-7744,7745,7746,7747,7748,7749,7750,7751,7752,7753,7754,7755,7756,7757,7758,7759,
-7760,7761,7762,7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775,
-7776,7777,7778,7779,7780,7781,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791,
-7792,7793,7794,7795,7796,7797,7798,7799,7800,7801,7802,7803,7804,7805,7806,7807,
-7808,7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,
-7824,7825,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,
-7840,7841,7842,7843,7844,7845,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,
-7856,7857,7858,7859,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7871,
-7872,7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886,7887,
-7888,7889,7890,7891,7892,7893,7894,7895,7896,7897,7898,7899,7900,7901,7902,7903,
-7904,7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919,
-7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935,
-7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951,
-7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,7967,
-7968,7969,7970,7971,7972,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983,
-7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,7995,7996,7997,7998,7999,
-8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8010,8011,8012,8013,8014,8015,
-8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031,
-8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047,
-8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063,
-8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079,
-8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095,
-8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111,
-8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127,
-8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,
-8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,
-8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175,
-8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,
-8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,
-8208,8209,8210,8211,8212,8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223,
-8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239,
-8240,8241,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8253,8254,8255,
-8256,8257,8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271,
-8272,8273,8274,8275,8276,8277,8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,
-8288,8289,8290,8291,8292,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,
-8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8315,8316,8317,8318,8319,
-8320,8321,8322,8323,8324,8325,8326,8327,8328,8329,8330,8331,8332,8333,8334,8335,
-8336,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,
-8352,8353,8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,8364,8365,8366,8367,
-8368,8369,8370,8371,8372,8373,8374,8375,8376,8377,8378,8379,8380,8381,8382,8383,
-8384,8385,8386,8387,8388,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398,8399,
-8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,8411,8412,8413,8414,8415,
-8416,8417,8418,8419,8420,8421,8422,8423,8424,8425,8426,8427,8428,8429,8430,8431,
-8432,8433,8434,8435,8436,8437,8438,8439,8440,8441,8442,8443,8444,8445,8446,8447,
-8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459,8460,8461,8462,8463,
-8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475,8476,8477,8478,8479,
-8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490,8491,8492,8493,8494,8495,
-8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506,8507,8508,8509,8510,8511,
-8512,8513,8514,8515,8516,8517,8518,8519,8520,8521,8522,8523,8524,8525,8526,8527,
-8528,8529,8530,8531,8532,8533,8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,
-8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,8556,8557,8558,8559,
-8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8570,8571,8572,8573,8574,8575,
-8576,8577,8578,8579,8580,8581,8582,8583,8584,8585,8586,8587,8588,8589,8590,8591,
-8592,8593,8594,8595,8596,8597,8598,8599,8600,8601,8602,8603,8604,8605,8606,8607,
-8608,8609,8610,8611,8612,8613,8614,8615,8616,8617,8618,8619,8620,8621,8622,8623,
-8624,8625,8626,8627,8628,8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,8639,
-8640,8641,8642,8643,8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,
-8656,8657,8658,8659,8660,8661,8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,
-8672,8673,8674,8675,8676,8677,8678,8679,8680,8681,8682,8683,8684,8685,8686,8687,
-8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703,
-8704,8705,8706,8707,8708,8709,8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,
-8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,8734,8735,
-8736,8737,8738,8739,8740,8741)
-
-# flake8: noqa
diff --git a/bundle/requests/packages/chardet/euckrfreq.pyc b/bundle/requests/packages/chardet/euckrfreq.pyc
deleted file mode 100644
index cce2b5a..0000000
Binary files a/bundle/requests/packages/chardet/euckrfreq.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/euckrprober.py b/bundle/requests/packages/chardet/euckrprober.py
deleted file mode 100644
index 5982a46..0000000
--- a/bundle/requests/packages/chardet/euckrprober.py
+++ /dev/null
@@ -1,42 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is mozilla.org code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-from .mbcharsetprober import MultiByteCharSetProber
-from .codingstatemachine import CodingStateMachine
-from .chardistribution import EUCKRDistributionAnalysis
-from .mbcssm import EUCKRSMModel
-
-
-class EUCKRProber(MultiByteCharSetProber):
-    def __init__(self):
-        MultiByteCharSetProber.__init__(self)
-        self._mCodingSM = CodingStateMachine(EUCKRSMModel)
-        self._mDistributionAnalyzer = EUCKRDistributionAnalysis()
-        self.reset()
-
-    def get_charset_name(self):
-        return "EUC-KR"
diff --git a/bundle/requests/packages/chardet/euckrprober.pyc b/bundle/requests/packages/chardet/euckrprober.pyc
deleted file mode 100644
index 8b58a0e..0000000
Binary files a/bundle/requests/packages/chardet/euckrprober.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/euctwfreq.py b/bundle/requests/packages/chardet/euctwfreq.py
deleted file mode 100644
index 576e750..0000000
--- a/bundle/requests/packages/chardet/euctwfreq.py
+++ /dev/null
@@ -1,428 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Communicator client code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-# EUCTW frequency table
-# Converted from big5 work
-# by Taiwan's Mandarin Promotion Council
-# <http:#www.edu.tw:81/mandr/>
-
-# 128  --> 0.42261
-# 256  --> 0.57851
-# 512  --> 0.74851
-# 1024 --> 0.89384
-# 2048 --> 0.97583
-#
-# Idea Distribution Ratio = 0.74851/(1-0.74851) =2.98
-# Random Distribution Ration = 512/(5401-512)=0.105
-#
-# Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR
-
-EUCTW_TYPICAL_DISTRIBUTION_RATIO = 0.75
-
-# Char to FreqOrder table ,
-EUCTW_TABLE_SIZE = 8102
-
-EUCTWCharToFreqOrder = (
-   1,1800,1506, 255,1431, 198,   9,  82,   6,7310, 177, 202,3615,1256,2808, 110, # 2742
-3735,  33,3241, 261,  76,  44,2113,  16,2931,2184,1176, 659,3868,  26,3404,2643, # 2758
-1198,3869,3313,4060, 410,2211, 302, 590, 361,1963,   8, 204,  58,4296,7311,1931, # 2774
-  63,7312,7313, 317,1614,  75, 222, 159,4061,2412,1480,7314,3500,3068, 224,2809, # 2790
-3616,   3,  10,3870,1471,  29,2774,1135,2852,1939, 873, 130,3242,1123, 312,7315, # 2806
-4297,2051, 507, 252, 682,7316, 142,1914, 124, 206,2932,  34,3501,3173,  64, 604, # 2822
-7317,2494,1976,1977, 155,1990, 645, 641,1606,7318,3405, 337,  72, 406,7319,  80, # 2838
- 630, 238,3174,1509, 263, 939,1092,2644, 756,1440,1094,3406, 449,  69,2969, 591, # 2854
- 179,2095, 471, 115,2034,1843,  60,  50,2970, 134, 806,1868, 734,2035,3407, 180, # 2870
- 995,1607, 156, 537,2893, 688,7320, 319,1305, 779,2144, 514,2374, 298,4298, 359, # 2886
-2495,  90,2707,1338, 663,  11, 906,1099,2545,  20,2436, 182, 532,1716,7321, 732, # 2902
-1376,4062,1311,1420,3175,  25,2312,1056, 113, 399, 382,1949, 242,3408,2467, 529, # 2918
-3243, 475,1447,3617,7322, 117,  21, 656, 810,1297,2295,2329,3502,7323, 126,4063, # 2934
- 706, 456, 150, 613,4299,  71,1118,2036,4064, 145,3069,  85, 835, 486,2114,1246, # 2950
-1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,7324,2127,2354, 347,3736, 221, # 2966
-3503,3110,7325,1955,1153,4065,  83, 296,1199,3070, 192, 624,  93,7326, 822,1897, # 2982
-2810,3111, 795,2064, 991,1554,1542,1592,  27,  43,2853, 859, 139,1456, 860,4300, # 2998
- 437, 712,3871, 164,2392,3112, 695, 211,3017,2096, 195,3872,1608,3504,3505,3618, # 3014
-3873, 234, 811,2971,2097,3874,2229,1441,3506,1615,2375, 668,2076,1638, 305, 228, # 3030
-1664,4301, 467, 415,7327, 262,2098,1593, 239, 108, 300, 200,1033, 512,1247,2077, # 3046
-7328,7329,2173,3176,3619,2673, 593, 845,1062,3244,  88,1723,2037,3875,1950, 212, # 3062
- 266, 152, 149, 468,1898,4066,4302,  77, 187,7330,3018,  37,   5,2972,7331,3876, # 3078
-7332,7333,  39,2517,4303,2894,3177,2078,  55, 148,  74,4304, 545, 483,1474,1029, # 3094
-1665, 217,1869,1531,3113,1104,2645,4067,  24, 172,3507, 900,3877,3508,3509,4305, # 3110
-  32,1408,2811,1312, 329, 487,2355,2247,2708, 784,2674,   4,3019,3314,1427,1788, # 3126
- 188, 109, 499,7334,3620,1717,1789, 888,1217,3020,4306,7335,3510,7336,3315,1520, # 3142
-3621,3878, 196,1034, 775,7337,7338, 929,1815, 249, 439,  38,7339,1063,7340, 794, # 3158
-3879,1435,2296,  46, 178,3245,2065,7341,2376,7342, 214,1709,4307, 804,  35, 707, # 3174
- 324,3622,1601,2546, 140, 459,4068,7343,7344,1365, 839, 272, 978,2257,2572,3409, # 3190
-2128,1363,3623,1423, 697, 100,3071,  48,  70,1231, 495,3114,2193,7345,1294,7346, # 3206
-2079, 462, 586,1042,3246, 853, 256, 988, 185,2377,3410,1698, 434,1084,7347,3411, # 3222
- 314,2615,2775,4308,2330,2331, 569,2280, 637,1816,2518, 757,1162,1878,1616,3412, # 3238
- 287,1577,2115, 768,4309,1671,2854,3511,2519,1321,3737, 909,2413,7348,4069, 933, # 3254
-3738,7349,2052,2356,1222,4310, 765,2414,1322, 786,4311,7350,1919,1462,1677,2895, # 3270
-1699,7351,4312,1424,2437,3115,3624,2590,3316,1774,1940,3413,3880,4070, 309,1369, # 3286
-1130,2812, 364,2230,1653,1299,3881,3512,3882,3883,2646, 525,1085,3021, 902,2000, # 3302
-1475, 964,4313, 421,1844,1415,1057,2281, 940,1364,3116, 376,4314,4315,1381,   7, # 3318
-2520, 983,2378, 336,1710,2675,1845, 321,3414, 559,1131,3022,2742,1808,1132,1313, # 3334
- 265,1481,1857,7352, 352,1203,2813,3247, 167,1089, 420,2814, 776, 792,1724,3513, # 3350
-4071,2438,3248,7353,4072,7354, 446, 229, 333,2743, 901,3739,1200,1557,4316,2647, # 3366
-1920, 395,2744,2676,3740,4073,1835, 125, 916,3178,2616,4317,7355,7356,3741,7357, # 3382
-7358,7359,4318,3117,3625,1133,2547,1757,3415,1510,2313,1409,3514,7360,2145, 438, # 3398
-2591,2896,2379,3317,1068, 958,3023, 461, 311,2855,2677,4074,1915,3179,4075,1978, # 3414
- 383, 750,2745,2617,4076, 274, 539, 385,1278,1442,7361,1154,1964, 384, 561, 210, # 3430
-  98,1295,2548,3515,7362,1711,2415,1482,3416,3884,2897,1257, 129,7363,3742, 642, # 3446
- 523,2776,2777,2648,7364, 141,2231,1333,  68, 176, 441, 876, 907,4077, 603,2592, # 3462
- 710, 171,3417, 404, 549,  18,3118,2393,1410,3626,1666,7365,3516,4319,2898,4320, # 3478
-7366,2973, 368,7367, 146, 366,  99, 871,3627,1543, 748, 807,1586,1185,  22,2258, # 3494
- 379,3743,3180,7368,3181, 505,1941,2618,1991,1382,2314,7369, 380,2357, 218, 702, # 3510
-1817,1248,3418,3024,3517,3318,3249,7370,2974,3628, 930,3250,3744,7371,  59,7372, # 3526
- 585, 601,4078, 497,3419,1112,1314,4321,1801,7373,1223,1472,2174,7374, 749,1836, # 3542
- 690,1899,3745,1772,3885,1476, 429,1043,1790,2232,2116, 917,4079, 447,1086,1629, # 3558
-7375, 556,7376,7377,2020,1654, 844,1090, 105, 550, 966,1758,2815,1008,1782, 686, # 3574
-1095,7378,2282, 793,1602,7379,3518,2593,4322,4080,2933,2297,4323,3746, 980,2496, # 3590
- 544, 353, 527,4324, 908,2678,2899,7380, 381,2619,1942,1348,7381,1341,1252, 560, # 3606
-3072,7382,3420,2856,7383,2053, 973, 886,2080, 143,4325,7384,7385, 157,3886, 496, # 3622
-4081,  57, 840, 540,2038,4326,4327,3421,2117,1445, 970,2259,1748,1965,2081,4082, # 3638
-3119,1234,1775,3251,2816,3629, 773,1206,2129,1066,2039,1326,3887,1738,1725,4083, # 3654
- 279,3120,  51,1544,2594, 423,1578,2130,2066, 173,4328,1879,7386,7387,1583, 264, # 3670
- 610,3630,4329,2439, 280, 154,7388,7389,7390,1739, 338,1282,3073, 693,2857,1411, # 3686
-1074,3747,2440,7391,4330,7392,7393,1240, 952,2394,7394,2900,1538,2679, 685,1483, # 3702
-4084,2468,1436, 953,4085,2054,4331, 671,2395,  79,4086,2441,3252, 608, 567,2680, # 3718
-3422,4087,4088,1691, 393,1261,1791,2396,7395,4332,7396,7397,7398,7399,1383,1672, # 3734
-3748,3182,1464, 522,1119, 661,1150, 216, 675,4333,3888,1432,3519, 609,4334,2681, # 3750
-2397,7400,7401,7402,4089,3025,   0,7403,2469, 315, 231,2442, 301,3319,4335,2380, # 3766
-7404, 233,4090,3631,1818,4336,4337,7405,  96,1776,1315,2082,7406, 257,7407,1809, # 3782
-3632,2709,1139,1819,4091,2021,1124,2163,2778,1777,2649,7408,3074, 363,1655,3183, # 3798
-7409,2975,7410,7411,7412,3889,1567,3890, 718, 103,3184, 849,1443, 341,3320,2934, # 3814
-1484,7413,1712, 127,  67, 339,4092,2398, 679,1412, 821,7414,7415, 834, 738, 351, # 3830
-2976,2146, 846, 235,1497,1880, 418,1992,3749,2710, 186,1100,2147,2746,3520,1545, # 3846
-1355,2935,2858,1377, 583,3891,4093,2573,2977,7416,1298,3633,1078,2549,3634,2358, # 3862
-  78,3750,3751, 267,1289,2099,2001,1594,4094, 348, 369,1274,2194,2175,1837,4338, # 3878
-1820,2817,3635,2747,2283,2002,4339,2936,2748, 144,3321, 882,4340,3892,2749,3423, # 3894
-4341,2901,7417,4095,1726, 320,7418,3893,3026, 788,2978,7419,2818,1773,1327,2859, # 3910
-3894,2819,7420,1306,4342,2003,1700,3752,3521,2359,2650, 787,2022, 506, 824,3636, # 3926
- 534, 323,4343,1044,3322,2023,1900, 946,3424,7421,1778,1500,1678,7422,1881,4344, # 3942
- 165, 243,4345,3637,2521, 123, 683,4096, 764,4346,  36,3895,1792, 589,2902, 816, # 3958
- 626,1667,3027,2233,1639,1555,1622,3753,3896,7423,3897,2860,1370,1228,1932, 891, # 3974
-2083,2903, 304,4097,7424, 292,2979,2711,3522, 691,2100,4098,1115,4347, 118, 662, # 3990
-7425, 611,1156, 854,2381,1316,2861,   2, 386, 515,2904,7426,7427,3253, 868,2234, # 4006
-1486, 855,2651, 785,2212,3028,7428,1040,3185,3523,7429,3121, 448,7430,1525,7431, # 4022
-2164,4348,7432,3754,7433,4099,2820,3524,3122, 503, 818,3898,3123,1568, 814, 676, # 4038
-1444, 306,1749,7434,3755,1416,1030, 197,1428, 805,2821,1501,4349,7435,7436,7437, # 4054
-1993,7438,4350,7439,7440,2195,  13,2779,3638,2980,3124,1229,1916,7441,3756,2131, # 4070
-7442,4100,4351,2399,3525,7443,2213,1511,1727,1120,7444,7445, 646,3757,2443, 307, # 4086
-7446,7447,1595,3186,7448,7449,7450,3639,1113,1356,3899,1465,2522,2523,7451, 519, # 4102
-7452, 128,2132,  92,2284,1979,7453,3900,1512, 342,3125,2196,7454,2780,2214,1980, # 4118
-3323,7455, 290,1656,1317, 789, 827,2360,7456,3758,4352, 562, 581,3901,7457, 401, # 4134
-4353,2248,  94,4354,1399,2781,7458,1463,2024,4355,3187,1943,7459, 828,1105,4101, # 4150
-1262,1394,7460,4102, 605,4356,7461,1783,2862,7462,2822, 819,2101, 578,2197,2937, # 4166
-7463,1502, 436,3254,4103,3255,2823,3902,2905,3425,3426,7464,2712,2315,7465,7466, # 4182
-2332,2067,  23,4357, 193, 826,3759,2102, 699,1630,4104,3075, 390,1793,1064,3526, # 4198
-7467,1579,3076,3077,1400,7468,4105,1838,1640,2863,7469,4358,4359, 137,4106, 598, # 4214
-3078,1966, 780, 104, 974,2938,7470, 278, 899, 253, 402, 572, 504, 493,1339,7471, # 4230
-3903,1275,4360,2574,2550,7472,3640,3029,3079,2249, 565,1334,2713, 863,  41,7473, # 4246
-7474,4361,7475,1657,2333,  19, 463,2750,4107, 606,7476,2981,3256,1087,2084,1323, # 4262
-2652,2982,7477,1631,1623,1750,4108,2682,7478,2864, 791,2714,2653,2334, 232,2416, # 4278
-7479,2983,1498,7480,2654,2620, 755,1366,3641,3257,3126,2025,1609, 119,1917,3427, # 4294
- 862,1026,4109,7481,3904,3760,4362,3905,4363,2260,1951,2470,7482,1125, 817,4110, # 4310
-4111,3906,1513,1766,2040,1487,4112,3030,3258,2824,3761,3127,7483,7484,1507,7485, # 4326
-2683, 733,  40,1632,1106,2865, 345,4113, 841,2524, 230,4364,2984,1846,3259,3428, # 4342
-7486,1263, 986,3429,7487, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562,3907, # 4358
-3908,2939, 967,2751,2655,1349, 592,2133,1692,3324,2985,1994,4114,1679,3909,1901, # 4374
-2185,7488, 739,3642,2715,1296,1290,7489,4115,2198,2199,1921,1563,2595,2551,1870, # 4390
-2752,2986,7490, 435,7491, 343,1108, 596,  17,1751,4365,2235,3430,3643,7492,4366, # 4406
- 294,3527,2940,1693, 477, 979, 281,2041,3528, 643,2042,3644,2621,2782,2261,1031, # 4422
-2335,2134,2298,3529,4367, 367,1249,2552,7493,3530,7494,4368,1283,3325,2004, 240, # 4438
-1762,3326,4369,4370, 836,1069,3128, 474,7495,2148,2525, 268,3531,7496,3188,1521, # 4454
-1284,7497,1658,1546,4116,7498,3532,3533,7499,4117,3327,2684,1685,4118, 961,1673, # 4470
-2622, 190,2005,2200,3762,4371,4372,7500, 570,2497,3645,1490,7501,4373,2623,3260, # 4486
-1956,4374, 584,1514, 396,1045,1944,7502,4375,1967,2444,7503,7504,4376,3910, 619, # 4502
-7505,3129,3261, 215,2006,2783,2553,3189,4377,3190,4378, 763,4119,3763,4379,7506, # 4518
-7507,1957,1767,2941,3328,3646,1174, 452,1477,4380,3329,3130,7508,2825,1253,2382, # 4534
-2186,1091,2285,4120, 492,7509, 638,1169,1824,2135,1752,3911, 648, 926,1021,1324, # 4550
-4381, 520,4382, 997, 847,1007, 892,4383,3764,2262,1871,3647,7510,2400,1784,4384, # 4566
-1952,2942,3080,3191,1728,4121,2043,3648,4385,2007,1701,3131,1551,  30,2263,4122, # 4582
-7511,2026,4386,3534,7512, 501,7513,4123, 594,3431,2165,1821,3535,3432,3536,3192, # 4598
- 829,2826,4124,7514,1680,3132,1225,4125,7515,3262,4387,4126,3133,2336,7516,4388, # 4614
-4127,7517,3912,3913,7518,1847,2383,2596,3330,7519,4389, 374,3914, 652,4128,4129, # 4630
- 375,1140, 798,7520,7521,7522,2361,4390,2264, 546,1659, 138,3031,2445,4391,7523, # 4646
-2250, 612,1848, 910, 796,3765,1740,1371, 825,3766,3767,7524,2906,2554,7525, 692, # 4662
- 444,3032,2624, 801,4392,4130,7526,1491, 244,1053,3033,4131,4132, 340,7527,3915, # 4678
-1041,2987, 293,1168,  87,1357,7528,1539, 959,7529,2236, 721, 694,4133,3768, 219, # 4694
-1478, 644,1417,3331,2656,1413,1401,1335,1389,3916,7530,7531,2988,2362,3134,1825, # 4710
- 730,1515, 184,2827,  66,4393,7532,1660,2943, 246,3332, 378,1457, 226,3433, 975, # 4726
-3917,2944,1264,3537, 674, 696,7533, 163,7534,1141,2417,2166, 713,3538,3333,4394, # 4742
-3918,7535,7536,1186,  15,7537,1079,1070,7538,1522,3193,3539, 276,1050,2716, 758, # 4758
-1126, 653,2945,3263,7539,2337, 889,3540,3919,3081,2989, 903,1250,4395,3920,3434, # 4774
-3541,1342,1681,1718, 766,3264, 286,  89,2946,3649,7540,1713,7541,2597,3334,2990, # 4790
-7542,2947,2215,3194,2866,7543,4396,2498,2526, 181, 387,1075,3921, 731,2187,3335, # 4806
-7544,3265, 310, 313,3435,2299, 770,4134,  54,3034, 189,4397,3082,3769,3922,7545, # 4822
-1230,1617,1849, 355,3542,4135,4398,3336, 111,4136,3650,1350,3135,3436,3035,4137, # 4838
-2149,3266,3543,7546,2784,3923,3924,2991, 722,2008,7547,1071, 247,1207,2338,2471, # 4854
-1378,4399,2009, 864,1437,1214,4400, 373,3770,1142,2216, 667,4401, 442,2753,2555, # 4870
-3771,3925,1968,4138,3267,1839, 837, 170,1107, 934,1336,1882,7548,7549,2118,4139, # 4886
-2828, 743,1569,7550,4402,4140, 582,2384,1418,3437,7551,1802,7552, 357,1395,1729, # 4902
-3651,3268,2418,1564,2237,7553,3083,3772,1633,4403,1114,2085,4141,1532,7554, 482, # 4918
-2446,4404,7555,7556,1492, 833,1466,7557,2717,3544,1641,2829,7558,1526,1272,3652, # 4934
-4142,1686,1794, 416,2556,1902,1953,1803,7559,3773,2785,3774,1159,2316,7560,2867, # 4950
-4405,1610,1584,3036,2419,2754, 443,3269,1163,3136,7561,7562,3926,7563,4143,2499, # 4966
-3037,4406,3927,3137,2103,1647,3545,2010,1872,4144,7564,4145, 431,3438,7565, 250, # 4982
-  97,  81,4146,7566,1648,1850,1558, 160, 848,7567, 866, 740,1694,7568,2201,2830, # 4998
-3195,4147,4407,3653,1687, 950,2472, 426, 469,3196,3654,3655,3928,7569,7570,1188, # 5014
- 424,1995, 861,3546,4148,3775,2202,2685, 168,1235,3547,4149,7571,2086,1674,4408, # 5030
-3337,3270, 220,2557,1009,7572,3776, 670,2992, 332,1208, 717,7573,7574,3548,2447, # 5046
-3929,3338,7575, 513,7576,1209,2868,3339,3138,4409,1080,7577,7578,7579,7580,2527, # 5062
-3656,3549, 815,1587,3930,3931,7581,3550,3439,3777,1254,4410,1328,3038,1390,3932, # 5078
-1741,3933,3778,3934,7582, 236,3779,2448,3271,7583,7584,3657,3780,1273,3781,4411, # 5094
-7585, 308,7586,4412, 245,4413,1851,2473,1307,2575, 430, 715,2136,2449,7587, 270, # 5110
- 199,2869,3935,7588,3551,2718,1753, 761,1754, 725,1661,1840,4414,3440,3658,7589, # 5126
-7590, 587,  14,3272, 227,2598, 326, 480,2265, 943,2755,3552, 291, 650,1883,7591, # 5142
-1702,1226, 102,1547,  62,3441, 904,4415,3442,1164,4150,7592,7593,1224,1548,2756, # 5158
- 391, 498,1493,7594,1386,1419,7595,2055,1177,4416, 813, 880,1081,2363, 566,1145, # 5174
-4417,2286,1001,1035,2558,2599,2238, 394,1286,7596,7597,2068,7598,  86,1494,1730, # 5190
-3936, 491,1588, 745, 897,2948, 843,3340,3937,2757,2870,3273,1768, 998,2217,2069, # 5206
- 397,1826,1195,1969,3659,2993,3341, 284,7599,3782,2500,2137,2119,1903,7600,3938, # 5222
-2150,3939,4151,1036,3443,1904, 114,2559,4152, 209,1527,7601,7602,2949,2831,2625, # 5238
-2385,2719,3139, 812,2560,7603,3274,7604,1559, 737,1884,3660,1210, 885,  28,2686, # 5254
-3553,3783,7605,4153,1004,1779,4418,7606, 346,1981,2218,2687,4419,3784,1742, 797, # 5270
-1642,3940,1933,1072,1384,2151, 896,3941,3275,3661,3197,2871,3554,7607,2561,1958, # 5286
-4420,2450,1785,7608,7609,7610,3942,4154,1005,1308,3662,4155,2720,4421,4422,1528, # 5302
-2600, 161,1178,4156,1982, 987,4423,1101,4157, 631,3943,1157,3198,2420,1343,1241, # 5318
-1016,2239,2562, 372, 877,2339,2501,1160, 555,1934, 911,3944,7611, 466,1170, 169, # 5334
-1051,2907,2688,3663,2474,2994,1182,2011,2563,1251,2626,7612, 992,2340,3444,1540, # 5350
-2721,1201,2070,2401,1996,2475,7613,4424, 528,1922,2188,1503,1873,1570,2364,3342, # 5366
-3276,7614, 557,1073,7615,1827,3445,2087,2266,3140,3039,3084, 767,3085,2786,4425, # 5382
-1006,4158,4426,2341,1267,2176,3664,3199, 778,3945,3200,2722,1597,2657,7616,4427, # 5398
-7617,3446,7618,7619,7620,3277,2689,1433,3278, 131,  95,1504,3946, 723,4159,3141, # 5414
-1841,3555,2758,2189,3947,2027,2104,3665,7621,2995,3948,1218,7622,3343,3201,3949, # 5430
-4160,2576, 248,1634,3785, 912,7623,2832,3666,3040,3786, 654,  53,7624,2996,7625, # 5446
-1688,4428, 777,3447,1032,3950,1425,7626, 191, 820,2120,2833, 971,4429, 931,3202, # 5462
- 135, 664, 783,3787,1997, 772,2908,1935,3951,3788,4430,2909,3203, 282,2723, 640, # 5478
-1372,3448,1127, 922, 325,3344,7627,7628, 711,2044,7629,7630,3952,2219,2787,1936, # 5494
-3953,3345,2220,2251,3789,2300,7631,4431,3790,1258,3279,3954,3204,2138,2950,3955, # 5510
-3956,7632,2221, 258,3205,4432, 101,1227,7633,3280,1755,7634,1391,3281,7635,2910, # 5526
-2056, 893,7636,7637,7638,1402,4161,2342,7639,7640,3206,3556,7641,7642, 878,1325, # 5542
-1780,2788,4433, 259,1385,2577, 744,1183,2267,4434,7643,3957,2502,7644, 684,1024, # 5558
-4162,7645, 472,3557,3449,1165,3282,3958,3959, 322,2152, 881, 455,1695,1152,1340, # 5574
- 660, 554,2153,4435,1058,4436,4163, 830,1065,3346,3960,4437,1923,7646,1703,1918, # 5590
-7647, 932,2268, 122,7648,4438, 947, 677,7649,3791,2627, 297,1905,1924,2269,4439, # 5606
-2317,3283,7650,7651,4164,7652,4165,  84,4166, 112, 989,7653, 547,1059,3961, 701, # 5622
-3558,1019,7654,4167,7655,3450, 942, 639, 457,2301,2451, 993,2951, 407, 851, 494, # 5638
-4440,3347, 927,7656,1237,7657,2421,3348, 573,4168, 680, 921,2911,1279,1874, 285, # 5654
- 790,1448,1983, 719,2167,7658,7659,4441,3962,3963,1649,7660,1541, 563,7661,1077, # 5670
-7662,3349,3041,3451, 511,2997,3964,3965,3667,3966,1268,2564,3350,3207,4442,4443, # 5686
-7663, 535,1048,1276,1189,2912,2028,3142,1438,1373,2834,2952,1134,2012,7664,4169, # 5702
-1238,2578,3086,1259,7665, 700,7666,2953,3143,3668,4170,7667,4171,1146,1875,1906, # 5718
-4444,2601,3967, 781,2422, 132,1589, 203, 147, 273,2789,2402, 898,1786,2154,3968, # 5734
-3969,7668,3792,2790,7669,7670,4445,4446,7671,3208,7672,1635,3793, 965,7673,1804, # 5750
-2690,1516,3559,1121,1082,1329,3284,3970,1449,3794,  65,1128,2835,2913,2759,1590, # 5766
-3795,7674,7675,  12,2658,  45, 976,2579,3144,4447, 517,2528,1013,1037,3209,7676, # 5782
-3796,2836,7677,3797,7678,3452,7679,2602, 614,1998,2318,3798,3087,2724,2628,7680, # 5798
-2580,4172, 599,1269,7681,1810,3669,7682,2691,3088, 759,1060, 489,1805,3351,3285, # 5814
-1358,7683,7684,2386,1387,1215,2629,2252, 490,7685,7686,4173,1759,2387,2343,7687, # 5830
-4448,3799,1907,3971,2630,1806,3210,4449,3453,3286,2760,2344, 874,7688,7689,3454, # 5846
-3670,1858,  91,2914,3671,3042,3800,4450,7690,3145,3972,2659,7691,3455,1202,1403, # 5862
-3801,2954,2529,1517,2503,4451,3456,2504,7692,4452,7693,2692,1885,1495,1731,3973, # 5878
-2365,4453,7694,2029,7695,7696,3974,2693,1216, 237,2581,4174,2319,3975,3802,4454, # 5894
-4455,2694,3560,3457, 445,4456,7697,7698,7699,7700,2761,  61,3976,3672,1822,3977, # 5910
-7701, 687,2045, 935, 925, 405,2660, 703,1096,1859,2725,4457,3978,1876,1367,2695, # 5926
-3352, 918,2105,1781,2476, 334,3287,1611,1093,4458, 564,3146,3458,3673,3353, 945, # 5942
-2631,2057,4459,7702,1925, 872,4175,7703,3459,2696,3089, 349,4176,3674,3979,4460, # 5958
-3803,4177,3675,2155,3980,4461,4462,4178,4463,2403,2046, 782,3981, 400, 251,4179, # 5974
-1624,7704,7705, 277,3676, 299,1265, 476,1191,3804,2121,4180,4181,1109, 205,7706, # 5990
-2582,1000,2156,3561,1860,7707,7708,7709,4464,7710,4465,2565, 107,2477,2157,3982, # 6006
-3460,3147,7711,1533, 541,1301, 158, 753,4182,2872,3562,7712,1696, 370,1088,4183, # 6022
-4466,3563, 579, 327, 440, 162,2240, 269,1937,1374,3461, 968,3043,  56,1396,3090, # 6038
-2106,3288,3354,7713,1926,2158,4467,2998,7714,3564,7715,7716,3677,4468,2478,7717, # 6054
-2791,7718,1650,4469,7719,2603,7720,7721,3983,2661,3355,1149,3356,3984,3805,3985, # 6070
-7722,1076,  49,7723, 951,3211,3289,3290, 450,2837, 920,7724,1811,2792,2366,4184, # 6086
-1908,1138,2367,3806,3462,7725,3212,4470,1909,1147,1518,2423,4471,3807,7726,4472, # 6102
-2388,2604, 260,1795,3213,7727,7728,3808,3291, 708,7729,3565,1704,7730,3566,1351, # 6118
-1618,3357,2999,1886, 944,4185,3358,4186,3044,3359,4187,7731,3678, 422, 413,1714, # 6134
-3292, 500,2058,2345,4188,2479,7732,1344,1910, 954,7733,1668,7734,7735,3986,2404, # 6150
-4189,3567,3809,4190,7736,2302,1318,2505,3091, 133,3092,2873,4473, 629,  31,2838, # 6166
-2697,3810,4474, 850, 949,4475,3987,2955,1732,2088,4191,1496,1852,7737,3988, 620, # 6182
-3214, 981,1242,3679,3360,1619,3680,1643,3293,2139,2452,1970,1719,3463,2168,7738, # 6198
-3215,7739,7740,3361,1828,7741,1277,4476,1565,2047,7742,1636,3568,3093,7743, 869, # 6214
-2839, 655,3811,3812,3094,3989,3000,3813,1310,3569,4477,7744,7745,7746,1733, 558, # 6230
-4478,3681, 335,1549,3045,1756,4192,3682,1945,3464,1829,1291,1192, 470,2726,2107, # 6246
-2793, 913,1054,3990,7747,1027,7748,3046,3991,4479, 982,2662,3362,3148,3465,3216, # 6262
-3217,1946,2794,7749, 571,4480,7750,1830,7751,3570,2583,1523,2424,7752,2089, 984, # 6278
-4481,3683,1959,7753,3684, 852, 923,2795,3466,3685, 969,1519, 999,2048,2320,1705, # 6294
-7754,3095, 615,1662, 151, 597,3992,2405,2321,1049, 275,4482,3686,4193, 568,3687, # 6310
-3571,2480,4194,3688,7755,2425,2270, 409,3218,7756,1566,2874,3467,1002, 769,2840, # 6326
- 194,2090,3149,3689,2222,3294,4195, 628,1505,7757,7758,1763,2177,3001,3993, 521, # 6342
-1161,2584,1787,2203,2406,4483,3994,1625,4196,4197, 412,  42,3096, 464,7759,2632, # 6358
-4484,3363,1760,1571,2875,3468,2530,1219,2204,3814,2633,2140,2368,4485,4486,3295, # 6374
-1651,3364,3572,7760,7761,3573,2481,3469,7762,3690,7763,7764,2271,2091, 460,7765, # 6390
-4487,7766,3002, 962, 588,3574, 289,3219,2634,1116,  52,7767,3047,1796,7768,7769, # 6406
-7770,1467,7771,1598,1143,3691,4198,1984,1734,1067,4488,1280,3365, 465,4489,1572, # 6422
- 510,7772,1927,2241,1812,1644,3575,7773,4490,3692,7774,7775,2663,1573,1534,7776, # 6438
-7777,4199, 536,1807,1761,3470,3815,3150,2635,7778,7779,7780,4491,3471,2915,1911, # 6454
-2796,7781,3296,1122, 377,3220,7782, 360,7783,7784,4200,1529, 551,7785,2059,3693, # 6470
-1769,2426,7786,2916,4201,3297,3097,2322,2108,2030,4492,1404, 136,1468,1479, 672, # 6486
-1171,3221,2303, 271,3151,7787,2762,7788,2049, 678,2727, 865,1947,4493,7789,2013, # 6502
-3995,2956,7790,2728,2223,1397,3048,3694,4494,4495,1735,2917,3366,3576,7791,3816, # 6518
- 509,2841,2453,2876,3817,7792,7793,3152,3153,4496,4202,2531,4497,2304,1166,1010, # 6534
- 552, 681,1887,7794,7795,2957,2958,3996,1287,1596,1861,3154, 358, 453, 736, 175, # 6550
- 478,1117, 905,1167,1097,7796,1853,1530,7797,1706,7798,2178,3472,2287,3695,3473, # 6566
-3577,4203,2092,4204,7799,3367,1193,2482,4205,1458,2190,2205,1862,1888,1421,3298, # 6582
-2918,3049,2179,3474, 595,2122,7800,3997,7801,7802,4206,1707,2636, 223,3696,1359, # 6598
- 751,3098, 183,3475,7803,2797,3003, 419,2369, 633, 704,3818,2389, 241,7804,7805, # 6614
-7806, 838,3004,3697,2272,2763,2454,3819,1938,2050,3998,1309,3099,2242,1181,7807, # 6630
-1136,2206,3820,2370,1446,4207,2305,4498,7808,7809,4208,1055,2605, 484,3698,7810, # 6646
-3999, 625,4209,2273,3368,1499,4210,4000,7811,4001,4211,3222,2274,2275,3476,7812, # 6662
-7813,2764, 808,2606,3699,3369,4002,4212,3100,2532, 526,3370,3821,4213, 955,7814, # 6678
-1620,4214,2637,2427,7815,1429,3700,1669,1831, 994, 928,7816,3578,1260,7817,7818, # 6694
-7819,1948,2288, 741,2919,1626,4215,2729,2455, 867,1184, 362,3371,1392,7820,7821, # 6710
-4003,4216,1770,1736,3223,2920,4499,4500,1928,2698,1459,1158,7822,3050,3372,2877, # 6726
-1292,1929,2506,2842,3701,1985,1187,2071,2014,2607,4217,7823,2566,2507,2169,3702, # 6742
-2483,3299,7824,3703,4501,7825,7826, 666,1003,3005,1022,3579,4218,7827,4502,1813, # 6758
-2253, 574,3822,1603, 295,1535, 705,3823,4219, 283, 858, 417,7828,7829,3224,4503, # 6774
-4504,3051,1220,1889,1046,2276,2456,4004,1393,1599, 689,2567, 388,4220,7830,2484, # 6790
- 802,7831,2798,3824,2060,1405,2254,7832,4505,3825,2109,1052,1345,3225,1585,7833, # 6806
- 809,7834,7835,7836, 575,2730,3477, 956,1552,1469,1144,2323,7837,2324,1560,2457, # 6822
-3580,3226,4005, 616,2207,3155,2180,2289,7838,1832,7839,3478,4506,7840,1319,3704, # 6838
-3705,1211,3581,1023,3227,1293,2799,7841,7842,7843,3826, 607,2306,3827, 762,2878, # 6854
-1439,4221,1360,7844,1485,3052,7845,4507,1038,4222,1450,2061,2638,4223,1379,4508, # 6870
-2585,7846,7847,4224,1352,1414,2325,2921,1172,7848,7849,3828,3829,7850,1797,1451, # 6886
-7851,7852,7853,7854,2922,4006,4007,2485,2346, 411,4008,4009,3582,3300,3101,4509, # 6902
-1561,2664,1452,4010,1375,7855,7856,  47,2959, 316,7857,1406,1591,2923,3156,7858, # 6918
-1025,2141,3102,3157, 354,2731, 884,2224,4225,2407, 508,3706, 726,3583, 996,2428, # 6934
-3584, 729,7859, 392,2191,1453,4011,4510,3707,7860,7861,2458,3585,2608,1675,2800, # 6950
- 919,2347,2960,2348,1270,4511,4012,  73,7862,7863, 647,7864,3228,2843,2255,1550, # 6966
-1346,3006,7865,1332, 883,3479,7866,7867,7868,7869,3301,2765,7870,1212, 831,1347, # 6982
-4226,4512,2326,3830,1863,3053, 720,3831,4513,4514,3832,7871,4227,7872,7873,4515, # 6998
-7874,7875,1798,4516,3708,2609,4517,3586,1645,2371,7876,7877,2924, 669,2208,2665, # 7014
-2429,7878,2879,7879,7880,1028,3229,7881,4228,2408,7882,2256,1353,7883,7884,4518, # 7030
-3158, 518,7885,4013,7886,4229,1960,7887,2142,4230,7888,7889,3007,2349,2350,3833, # 7046
- 516,1833,1454,4014,2699,4231,4519,2225,2610,1971,1129,3587,7890,2766,7891,2961, # 7062
-1422, 577,1470,3008,1524,3373,7892,7893, 432,4232,3054,3480,7894,2586,1455,2508, # 7078
-2226,1972,1175,7895,1020,2732,4015,3481,4520,7896,2733,7897,1743,1361,3055,3482, # 7094
-2639,4016,4233,4521,2290, 895, 924,4234,2170, 331,2243,3056, 166,1627,3057,1098, # 7110
-7898,1232,2880,2227,3374,4522, 657, 403,1196,2372, 542,3709,3375,1600,4235,3483, # 7126
-7899,4523,2767,3230, 576, 530,1362,7900,4524,2533,2666,3710,4017,7901, 842,3834, # 7142
-7902,2801,2031,1014,4018, 213,2700,3376, 665, 621,4236,7903,3711,2925,2430,7904, # 7158
-2431,3302,3588,3377,7905,4237,2534,4238,4525,3589,1682,4239,3484,1380,7906, 724, # 7174
-2277, 600,1670,7907,1337,1233,4526,3103,2244,7908,1621,4527,7909, 651,4240,7910, # 7190
-1612,4241,2611,7911,2844,7912,2734,2307,3058,7913, 716,2459,3059, 174,1255,2701, # 7206
-4019,3590, 548,1320,1398, 728,4020,1574,7914,1890,1197,3060,4021,7915,3061,3062, # 7222
-3712,3591,3713, 747,7916, 635,4242,4528,7917,7918,7919,4243,7920,7921,4529,7922, # 7238
-3378,4530,2432, 451,7923,3714,2535,2072,4244,2735,4245,4022,7924,1764,4531,7925, # 7254
-4246, 350,7926,2278,2390,2486,7927,4247,4023,2245,1434,4024, 488,4532, 458,4248, # 7270
-4025,3715, 771,1330,2391,3835,2568,3159,2159,2409,1553,2667,3160,4249,7928,2487, # 7286
-2881,2612,1720,2702,4250,3379,4533,7929,2536,4251,7930,3231,4252,2768,7931,2015, # 7302
-2736,7932,1155,1017,3716,3836,7933,3303,2308, 201,1864,4253,1430,7934,4026,7935, # 7318
-7936,7937,7938,7939,4254,1604,7940, 414,1865, 371,2587,4534,4535,3485,2016,3104, # 7334
-4536,1708, 960,4255, 887, 389,2171,1536,1663,1721,7941,2228,4027,2351,2926,1580, # 7350
-7942,7943,7944,1744,7945,2537,4537,4538,7946,4539,7947,2073,7948,7949,3592,3380, # 7366
-2882,4256,7950,4257,2640,3381,2802, 673,2703,2460, 709,3486,4028,3593,4258,7951, # 7382
-1148, 502, 634,7952,7953,1204,4540,3594,1575,4541,2613,3717,7954,3718,3105, 948, # 7398
-3232, 121,1745,3837,1110,7955,4259,3063,2509,3009,4029,3719,1151,1771,3838,1488, # 7414
-4030,1986,7956,2433,3487,7957,7958,2093,7959,4260,3839,1213,1407,2803, 531,2737, # 7430
-2538,3233,1011,1537,7960,2769,4261,3106,1061,7961,3720,3721,1866,2883,7962,2017, # 7446
- 120,4262,4263,2062,3595,3234,2309,3840,2668,3382,1954,4542,7963,7964,3488,1047, # 7462
-2704,1266,7965,1368,4543,2845, 649,3383,3841,2539,2738,1102,2846,2669,7966,7967, # 7478
-1999,7968,1111,3596,2962,7969,2488,3842,3597,2804,1854,3384,3722,7970,7971,3385, # 7494
-2410,2884,3304,3235,3598,7972,2569,7973,3599,2805,4031,1460, 856,7974,3600,7975, # 7510
-2885,2963,7976,2886,3843,7977,4264, 632,2510, 875,3844,1697,3845,2291,7978,7979, # 7526
-4544,3010,1239, 580,4545,4265,7980, 914, 936,2074,1190,4032,1039,2123,7981,7982, # 7542
-7983,3386,1473,7984,1354,4266,3846,7985,2172,3064,4033, 915,3305,4267,4268,3306, # 7558
-1605,1834,7986,2739, 398,3601,4269,3847,4034, 328,1912,2847,4035,3848,1331,4270, # 7574
-3011, 937,4271,7987,3602,4036,4037,3387,2160,4546,3388, 524, 742, 538,3065,1012, # 7590
-7988,7989,3849,2461,7990, 658,1103, 225,3850,7991,7992,4547,7993,4548,7994,3236, # 7606
-1243,7995,4038, 963,2246,4549,7996,2705,3603,3161,7997,7998,2588,2327,7999,4550, # 7622
-8000,8001,8002,3489,3307, 957,3389,2540,2032,1930,2927,2462, 870,2018,3604,1746, # 7638
-2770,2771,2434,2463,8003,3851,8004,3723,3107,3724,3490,3390,3725,8005,1179,3066, # 7654
-8006,3162,2373,4272,3726,2541,3163,3108,2740,4039,8007,3391,1556,2542,2292, 977, # 7670
-2887,2033,4040,1205,3392,8008,1765,3393,3164,2124,1271,1689, 714,4551,3491,8009, # 7686
-2328,3852, 533,4273,3605,2181, 617,8010,2464,3308,3492,2310,8011,8012,3165,8013, # 7702
-8014,3853,1987, 618, 427,2641,3493,3394,8015,8016,1244,1690,8017,2806,4274,4552, # 7718
-8018,3494,8019,8020,2279,1576, 473,3606,4275,3395, 972,8021,3607,8022,3067,8023, # 7734
-8024,4553,4554,8025,3727,4041,4042,8026, 153,4555, 356,8027,1891,2888,4276,2143, # 7750
- 408, 803,2352,8028,3854,8029,4277,1646,2570,2511,4556,4557,3855,8030,3856,4278, # 7766
-8031,2411,3396, 752,8032,8033,1961,2964,8034, 746,3012,2465,8035,4279,3728, 698, # 7782
-4558,1892,4280,3608,2543,4559,3609,3857,8036,3166,3397,8037,1823,1302,4043,2706, # 7798
-3858,1973,4281,8038,4282,3167, 823,1303,1288,1236,2848,3495,4044,3398, 774,3859, # 7814
-8039,1581,4560,1304,2849,3860,4561,8040,2435,2161,1083,3237,4283,4045,4284, 344, # 7830
-1173, 288,2311, 454,1683,8041,8042,1461,4562,4046,2589,8043,8044,4563, 985, 894, # 7846
-8045,3399,3168,8046,1913,2928,3729,1988,8047,2110,1974,8048,4047,8049,2571,1194, # 7862
- 425,8050,4564,3169,1245,3730,4285,8051,8052,2850,8053, 636,4565,1855,3861, 760, # 7878
-1799,8054,4286,2209,1508,4566,4048,1893,1684,2293,8055,8056,8057,4287,4288,2210, # 7894
- 479,8058,8059, 832,8060,4049,2489,8061,2965,2490,3731, 990,3109, 627,1814,2642, # 7910
-4289,1582,4290,2125,2111,3496,4567,8062, 799,4291,3170,8063,4568,2112,1737,3013, # 7926
-1018, 543, 754,4292,3309,1676,4569,4570,4050,8064,1489,8065,3497,8066,2614,2889, # 7942
-4051,8067,8068,2966,8069,8070,8071,8072,3171,4571,4572,2182,1722,8073,3238,3239, # 7958
-1842,3610,1715, 481, 365,1975,1856,8074,8075,1962,2491,4573,8076,2126,3611,3240, # 7974
- 433,1894,2063,2075,8077, 602,2741,8078,8079,8080,8081,8082,3014,1628,3400,8083, # 7990
-3172,4574,4052,2890,4575,2512,8084,2544,2772,8085,8086,8087,3310,4576,2891,8088, # 8006
-4577,8089,2851,4578,4579,1221,2967,4053,2513,8090,8091,8092,1867,1989,8093,8094, # 8022
-8095,1895,8096,8097,4580,1896,4054, 318,8098,2094,4055,4293,8099,8100, 485,8101, # 8038
- 938,3862, 553,2670, 116,8102,3863,3612,8103,3498,2671,2773,3401,3311,2807,8104, # 8054
-3613,2929,4056,1747,2930,2968,8105,8106, 207,8107,8108,2672,4581,2514,8109,3015, # 8070
- 890,3614,3864,8110,1877,3732,3402,8111,2183,2353,3403,1652,8112,8113,8114, 941, # 8086
-2294, 208,3499,4057,2019, 330,4294,3865,2892,2492,3733,4295,8115,8116,8117,8118, # 8102
-#Everything below is of no interest for detection purpose
-2515,1613,4582,8119,3312,3866,2516,8120,4058,8121,1637,4059,2466,4583,3867,8122, # 8118
-2493,3016,3734,8123,8124,2192,8125,8126,2162,8127,8128,8129,8130,8131,8132,8133, # 8134
-8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145,8146,8147,8148,8149, # 8150
-8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,8160,8161,8162,8163,8164,8165, # 8166
-8166,8167,8168,8169,8170,8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181, # 8182
-8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197, # 8198
-8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213, # 8214
-8214,8215,8216,8217,8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229, # 8230
-8230,8231,8232,8233,8234,8235,8236,8237,8238,8239,8240,8241,8242,8243,8244,8245, # 8246
-8246,8247,8248,8249,8250,8251,8252,8253,8254,8255,8256,8257,8258,8259,8260,8261, # 8262
-8262,8263,8264,8265,8266,8267,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277, # 8278
-8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,8288,8289,8290,8291,8292,8293, # 8294
-8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,8308,8309, # 8310
-8310,8311,8312,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322,8323,8324,8325, # 8326
-8326,8327,8328,8329,8330,8331,8332,8333,8334,8335,8336,8337,8338,8339,8340,8341, # 8342
-8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353,8354,8355,8356,8357, # 8358
-8358,8359,8360,8361,8362,8363,8364,8365,8366,8367,8368,8369,8370,8371,8372,8373, # 8374
-8374,8375,8376,8377,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388,8389, # 8390
-8390,8391,8392,8393,8394,8395,8396,8397,8398,8399,8400,8401,8402,8403,8404,8405, # 8406
-8406,8407,8408,8409,8410,8411,8412,8413,8414,8415,8416,8417,8418,8419,8420,8421, # 8422
-8422,8423,8424,8425,8426,8427,8428,8429,8430,8431,8432,8433,8434,8435,8436,8437, # 8438
-8438,8439,8440,8441,8442,8443,8444,8445,8446,8447,8448,8449,8450,8451,8452,8453, # 8454
-8454,8455,8456,8457,8458,8459,8460,8461,8462,8463,8464,8465,8466,8467,8468,8469, # 8470
-8470,8471,8472,8473,8474,8475,8476,8477,8478,8479,8480,8481,8482,8483,8484,8485, # 8486
-8486,8487,8488,8489,8490,8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501, # 8502
-8502,8503,8504,8505,8506,8507,8508,8509,8510,8511,8512,8513,8514,8515,8516,8517, # 8518
-8518,8519,8520,8521,8522,8523,8524,8525,8526,8527,8528,8529,8530,8531,8532,8533, # 8534
-8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,8544,8545,8546,8547,8548,8549, # 8550
-8550,8551,8552,8553,8554,8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,8565, # 8566
-8566,8567,8568,8569,8570,8571,8572,8573,8574,8575,8576,8577,8578,8579,8580,8581, # 8582
-8582,8583,8584,8585,8586,8587,8588,8589,8590,8591,8592,8593,8594,8595,8596,8597, # 8598
-8598,8599,8600,8601,8602,8603,8604,8605,8606,8607,8608,8609,8610,8611,8612,8613, # 8614
-8614,8615,8616,8617,8618,8619,8620,8621,8622,8623,8624,8625,8626,8627,8628,8629, # 8630
-8630,8631,8632,8633,8634,8635,8636,8637,8638,8639,8640,8641,8642,8643,8644,8645, # 8646
-8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,8657,8658,8659,8660,8661, # 8662
-8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,8672,8673,8674,8675,8676,8677, # 8678
-8678,8679,8680,8681,8682,8683,8684,8685,8686,8687,8688,8689,8690,8691,8692,8693, # 8694
-8694,8695,8696,8697,8698,8699,8700,8701,8702,8703,8704,8705,8706,8707,8708,8709, # 8710
-8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,8720,8721,8722,8723,8724,8725, # 8726
-8726,8727,8728,8729,8730,8731,8732,8733,8734,8735,8736,8737,8738,8739,8740,8741) # 8742
-
-# flake8: noqa
diff --git a/bundle/requests/packages/chardet/euctwfreq.pyc b/bundle/requests/packages/chardet/euctwfreq.pyc
deleted file mode 100644
index aa7efea..0000000
Binary files a/bundle/requests/packages/chardet/euctwfreq.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/euctwprober.py b/bundle/requests/packages/chardet/euctwprober.py
deleted file mode 100644
index fe652fe..0000000
--- a/bundle/requests/packages/chardet/euctwprober.py
+++ /dev/null
@@ -1,41 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is mozilla.org code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-# 
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-# 
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-from .mbcharsetprober import MultiByteCharSetProber
-from .codingstatemachine import CodingStateMachine
-from .chardistribution import EUCTWDistributionAnalysis
-from .mbcssm import EUCTWSMModel
-
-class EUCTWProber(MultiByteCharSetProber):
-    def __init__(self):
-        MultiByteCharSetProber.__init__(self)
-        self._mCodingSM = CodingStateMachine(EUCTWSMModel)
-        self._mDistributionAnalyzer = EUCTWDistributionAnalysis()
-        self.reset()
-
-    def get_charset_name(self):
-        return "EUC-TW"
diff --git a/bundle/requests/packages/chardet/euctwprober.pyc b/bundle/requests/packages/chardet/euctwprober.pyc
deleted file mode 100644
index ecba7e0..0000000
Binary files a/bundle/requests/packages/chardet/euctwprober.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/gb2312freq.py b/bundle/requests/packages/chardet/gb2312freq.py
deleted file mode 100644
index 1238f51..0000000
--- a/bundle/requests/packages/chardet/gb2312freq.py
+++ /dev/null
@@ -1,472 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Communicator client code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-# GB2312 most frequently used character table
-#
-# Char to FreqOrder table , from hz6763
-
-# 512  --> 0.79  -- 0.79
-# 1024 --> 0.92  -- 0.13
-# 2048 --> 0.98  -- 0.06
-# 6768 --> 1.00  -- 0.02
-#
-# Ideal Distribution Ratio = 0.79135/(1-0.79135) = 3.79
-# Random Distribution Ration = 512 / (3755 - 512) = 0.157
-#
-# Typical Distribution Ratio about 25% of Ideal one, still much higher that RDR
-
-GB2312_TYPICAL_DISTRIBUTION_RATIO = 0.9
-
-GB2312_TABLE_SIZE = 3760
-
-GB2312CharToFreqOrder = (
-1671, 749,1443,2364,3924,3807,2330,3921,1704,3463,2691,1511,1515, 572,3191,2205,
-2361, 224,2558, 479,1711, 963,3162, 440,4060,1905,2966,2947,3580,2647,3961,3842,
-2204, 869,4207, 970,2678,5626,2944,2956,1479,4048, 514,3595, 588,1346,2820,3409,
- 249,4088,1746,1873,2047,1774, 581,1813, 358,1174,3590,1014,1561,4844,2245, 670,
-1636,3112, 889,1286, 953, 556,2327,3060,1290,3141, 613, 185,3477,1367, 850,3820,
-1715,2428,2642,2303,2732,3041,2562,2648,3566,3946,1349, 388,3098,2091,1360,3585,
- 152,1687,1539, 738,1559,  59,1232,2925,2267,1388,1249,1741,1679,2960, 151,1566,
-1125,1352,4271, 924,4296, 385,3166,4459, 310,1245,2850,  70,3285,2729,3534,3575,
-2398,3298,3466,1960,2265, 217,3647, 864,1909,2084,4401,2773,1010,3269,5152, 853,
-3051,3121,1244,4251,1895, 364,1499,1540,2313,1180,3655,2268, 562, 715,2417,3061,
- 544, 336,3768,2380,1752,4075, 950, 280,2425,4382, 183,2759,3272, 333,4297,2155,
-1688,2356,1444,1039,4540, 736,1177,3349,2443,2368,2144,2225, 565, 196,1482,3406,
- 927,1335,4147, 692, 878,1311,1653,3911,3622,1378,4200,1840,2969,3149,2126,1816,
-2534,1546,2393,2760, 737,2494,  13, 447, 245,2747,  38,2765,2129,2589,1079, 606,
- 360, 471,3755,2890, 404, 848, 699,1785,1236, 370,2221,1023,3746,2074,2026,2023,
-2388,1581,2119, 812,1141,3091,2536,1519, 804,2053, 406,1596,1090, 784, 548,4414,
-1806,2264,2936,1100, 343,4114,5096, 622,3358, 743,3668,1510,1626,5020,3567,2513,
-3195,4115,5627,2489,2991,  24,2065,2697,1087,2719,  48,1634, 315,  68, 985,2052,
- 198,2239,1347,1107,1439, 597,2366,2172, 871,3307, 919,2487,2790,1867, 236,2570,
-1413,3794, 906,3365,3381,1701,1982,1818,1524,2924,1205, 616,2586,2072,2004, 575,
- 253,3099,  32,1365,1182, 197,1714,2454,1201, 554,3388,3224,2748, 756,2587, 250,
-2567,1507,1517,3529,1922,2761,2337,3416,1961,1677,2452,2238,3153, 615, 911,1506,
-1474,2495,1265,1906,2749,3756,3280,2161, 898,2714,1759,3450,2243,2444, 563,  26,
-3286,2266,3769,3344,2707,3677, 611,1402, 531,1028,2871,4548,1375, 261,2948, 835,
-1190,4134, 353, 840,2684,1900,3082,1435,2109,1207,1674, 329,1872,2781,4055,2686,
-2104, 608,3318,2423,2957,2768,1108,3739,3512,3271,3985,2203,1771,3520,1418,2054,
-1681,1153, 225,1627,2929, 162,2050,2511,3687,1954, 124,1859,2431,1684,3032,2894,
- 585,4805,3969,2869,2704,2088,2032,2095,3656,2635,4362,2209, 256, 518,2042,2105,
-3777,3657, 643,2298,1148,1779, 190, 989,3544, 414,  11,2135,2063,2979,1471, 403,
-3678, 126, 770,1563, 671,2499,3216,2877, 600,1179, 307,2805,4937,1268,1297,2694,
- 252,4032,1448,1494,1331,1394, 127,2256, 222,1647,1035,1481,3056,1915,1048, 873,
-3651, 210,  33,1608,2516, 200,1520, 415, 102,   0,3389,1287, 817,  91,3299,2940,
- 836,1814, 549,2197,1396,1669,2987,3582,2297,2848,4528,1070, 687,  20,1819, 121,
-1552,1364,1461,1968,2617,3540,2824,2083, 177, 948,4938,2291, 110,4549,2066, 648,
-3359,1755,2110,2114,4642,4845,1693,3937,3308,1257,1869,2123, 208,1804,3159,2992,
-2531,2549,3361,2418,1350,2347,2800,2568,1291,2036,2680,  72, 842,1990, 212,1233,
-1154,1586,  75,2027,3410,4900,1823,1337,2710,2676, 728,2810,1522,3026,4995, 157,
- 755,1050,4022, 710, 785,1936,2194,2085,1406,2777,2400, 150,1250,4049,1206, 807,
-1910, 534, 529,3309,1721,1660, 274,  39,2827, 661,2670,1578, 925,3248,3815,1094,
-4278,4901,4252,  41,1150,3747,2572,2227,4501,3658,4902,3813,3357,3617,2884,2258,
- 887, 538,4187,3199,1294,2439,3042,2329,2343,2497,1255, 107, 543,1527, 521,3478,
-3568, 194,5062,  15, 961,3870,1241,1192,2664,  66,5215,3260,2111,1295,1127,2152,
-3805,4135, 901,1164,1976, 398,1278, 530,1460, 748, 904,1054,1966,1426,  53,2909,
- 509, 523,2279,1534, 536,1019, 239,1685, 460,2353, 673,1065,2401,3600,4298,2272,
-1272,2363, 284,1753,3679,4064,1695,  81, 815,2677,2757,2731,1386, 859, 500,4221,
-2190,2566, 757,1006,2519,2068,1166,1455, 337,2654,3203,1863,1682,1914,3025,1252,
-1409,1366, 847, 714,2834,2038,3209, 964,2970,1901, 885,2553,1078,1756,3049, 301,
-1572,3326, 688,2130,1996,2429,1805,1648,2930,3421,2750,3652,3088, 262,1158,1254,
- 389,1641,1812, 526,1719, 923,2073,1073,1902, 468, 489,4625,1140, 857,2375,3070,
-3319,2863, 380, 116,1328,2693,1161,2244, 273,1212,1884,2769,3011,1775,1142, 461,
-3066,1200,2147,2212, 790, 702,2695,4222,1601,1058, 434,2338,5153,3640,  67,2360,
-4099,2502, 618,3472,1329, 416,1132, 830,2782,1807,2653,3211,3510,1662, 192,2124,
- 296,3979,1739,1611,3684,  23, 118, 324, 446,1239,1225, 293,2520,3814,3795,2535,
-3116,  17,1074, 467,2692,2201, 387,2922,  45,1326,3055,1645,3659,2817, 958, 243,
-1903,2320,1339,2825,1784,3289, 356, 576, 865,2315,2381,3377,3916,1088,3122,1713,
-1655, 935, 628,4689,1034,1327, 441, 800, 720, 894,1979,2183,1528,5289,2702,1071,
-4046,3572,2399,1571,3281,  79, 761,1103, 327, 134, 758,1899,1371,1615, 879, 442,
- 215,2605,2579, 173,2048,2485,1057,2975,3317,1097,2253,3801,4263,1403,1650,2946,
- 814,4968,3487,1548,2644,1567,1285,   2, 295,2636,  97, 946,3576, 832, 141,4257,
-3273, 760,3821,3521,3156,2607, 949,1024,1733,1516,1803,1920,2125,2283,2665,3180,
-1501,2064,3560,2171,1592, 803,3518,1416, 732,3897,4258,1363,1362,2458, 119,1427,
- 602,1525,2608,1605,1639,3175, 694,3064,  10, 465,  76,2000,4846,4208, 444,3781,
-1619,3353,2206,1273,3796, 740,2483, 320,1723,2377,3660,2619,1359,1137,1762,1724,
-2345,2842,1850,1862, 912, 821,1866, 612,2625,1735,2573,3369,1093, 844,  89, 937,
- 930,1424,3564,2413,2972,1004,3046,3019,2011, 711,3171,1452,4178, 428, 801,1943,
- 432, 445,2811, 206,4136,1472, 730, 349,  73, 397,2802,2547, 998,1637,1167, 789,
- 396,3217, 154,1218, 716,1120,1780,2819,4826,1931,3334,3762,2139,1215,2627, 552,
-3664,3628,3232,1405,2383,3111,1356,2652,3577,3320,3101,1703, 640,1045,1370,1246,
-4996, 371,1575,2436,1621,2210, 984,4033,1734,2638,  16,4529, 663,2755,3255,1451,
-3917,2257,1253,1955,2234,1263,2951, 214,1229, 617, 485, 359,1831,1969, 473,2310,
- 750,2058, 165,  80,2864,2419, 361,4344,2416,2479,1134, 796,3726,1266,2943, 860,
-2715, 938, 390,2734,1313,1384, 248, 202, 877,1064,2854, 522,3907, 279,1602, 297,
-2357, 395,3740, 137,2075, 944,4089,2584,1267,3802,  62,1533,2285, 178, 176, 780,
-2440, 201,3707, 590, 478,1560,4354,2117,1075,  30,  74,4643,4004,1635,1441,2745,
- 776,2596, 238,1077,1692,1912,2844, 605, 499,1742,3947, 241,3053, 980,1749, 936,
-2640,4511,2582, 515,1543,2162,5322,2892,2993, 890,2148,1924, 665,1827,3581,1032,
- 968,3163, 339,1044,1896, 270, 583,1791,1720,4367,1194,3488,3669,  43,2523,1657,
- 163,2167, 290,1209,1622,3378, 550, 634,2508,2510, 695,2634,2384,2512,1476,1414,
- 220,1469,2341,2138,2852,3183,2900,4939,2865,3502,1211,3680, 854,3227,1299,2976,
-3172, 186,2998,1459, 443,1067,3251,1495, 321,1932,3054, 909, 753,1410,1828, 436,
-2441,1119,1587,3164,2186,1258, 227, 231,1425,1890,3200,3942, 247, 959, 725,5254,
-2741, 577,2158,2079, 929, 120, 174, 838,2813, 591,1115, 417,2024,  40,3240,1536,
-1037, 291,4151,2354, 632,1298,2406,2500,3535,1825,1846,3451, 205,1171, 345,4238,
-  18,1163, 811, 685,2208,1217, 425,1312,1508,1175,4308,2552,1033, 587,1381,3059,
-2984,3482, 340,1316,4023,3972, 792,3176, 519, 777,4690, 918, 933,4130,2981,3741,
-  90,3360,2911,2200,5184,4550, 609,3079,2030, 272,3379,2736, 363,3881,1130,1447,
- 286, 779, 357,1169,3350,3137,1630,1220,2687,2391, 747,1277,3688,2618,2682,2601,
-1156,3196,5290,4034,3102,1689,3596,3128, 874, 219,2783, 798, 508,1843,2461, 269,
-1658,1776,1392,1913,2983,3287,2866,2159,2372, 829,4076,  46,4253,2873,1889,1894,
- 915,1834,1631,2181,2318, 298, 664,2818,3555,2735, 954,3228,3117, 527,3511,2173,
- 681,2712,3033,2247,2346,3467,1652, 155,2164,3382, 113,1994, 450, 899, 494, 994,
-1237,2958,1875,2336,1926,3727, 545,1577,1550, 633,3473, 204,1305,3072,2410,1956,
-2471, 707,2134, 841,2195,2196,2663,3843,1026,4940, 990,3252,4997, 368,1092, 437,
-3212,3258,1933,1829, 675,2977,2893, 412, 943,3723,4644,3294,3283,2230,2373,5154,
-2389,2241,2661,2323,1404,2524, 593, 787, 677,3008,1275,2059, 438,2709,2609,2240,
-2269,2246,1446,  36,1568,1373,3892,1574,2301,1456,3962, 693,2276,5216,2035,1143,
-2720,1919,1797,1811,2763,4137,2597,1830,1699,1488,1198,2090, 424,1694, 312,3634,
-3390,4179,3335,2252,1214, 561,1059,3243,2295,2561, 975,5155,2321,2751,3772, 472,
-1537,3282,3398,1047,2077,2348,2878,1323,3340,3076, 690,2906,  51, 369, 170,3541,
-1060,2187,2688,3670,2541,1083,1683, 928,3918, 459, 109,4427, 599,3744,4286, 143,
-2101,2730,2490,  82,1588,3036,2121, 281,1860, 477,4035,1238,2812,3020,2716,3312,
-1530,2188,2055,1317, 843, 636,1808,1173,3495, 649, 181,1002, 147,3641,1159,2414,
-3750,2289,2795, 813,3123,2610,1136,4368,   5,3391,4541,2174, 420, 429,1728, 754,
-1228,2115,2219, 347,2223,2733, 735,1518,3003,2355,3134,1764,3948,3329,1888,2424,
-1001,1234,1972,3321,3363,1672,1021,1450,1584, 226, 765, 655,2526,3404,3244,2302,
-3665, 731, 594,2184, 319,1576, 621, 658,2656,4299,2099,3864,1279,2071,2598,2739,
- 795,3086,3699,3908,1707,2352,2402,1382,3136,2475,1465,4847,3496,3865,1085,3004,
-2591,1084, 213,2287,1963,3565,2250, 822, 793,4574,3187,1772,1789,3050, 595,1484,
-1959,2770,1080,2650, 456, 422,2996, 940,3322,4328,4345,3092,2742, 965,2784, 739,
-4124, 952,1358,2498,2949,2565, 332,2698,2378, 660,2260,2473,4194,3856,2919, 535,
-1260,2651,1208,1428,1300,1949,1303,2942, 433,2455,2450,1251,1946, 614,1269, 641,
-1306,1810,2737,3078,2912, 564,2365,1419,1415,1497,4460,2367,2185,1379,3005,1307,
-3218,2175,1897,3063, 682,1157,4040,4005,1712,1160,1941,1399, 394, 402,2952,1573,
-1151,2986,2404, 862, 299,2033,1489,3006, 346, 171,2886,3401,1726,2932, 168,2533,
-  47,2507,1030,3735,1145,3370,1395,1318,1579,3609,4560,2857,4116,1457,2529,1965,
- 504,1036,2690,2988,2405, 745,5871, 849,2397,2056,3081, 863,2359,3857,2096,  99,
-1397,1769,2300,4428,1643,3455,1978,1757,3718,1440,  35,4879,3742,1296,4228,2280,
- 160,5063,1599,2013, 166, 520,3479,1646,3345,3012, 490,1937,1545,1264,2182,2505,
-1096,1188,1369,1436,2421,1667,2792,2460,1270,2122, 727,3167,2143, 806,1706,1012,
-1800,3037, 960,2218,1882, 805, 139,2456,1139,1521, 851,1052,3093,3089, 342,2039,
- 744,5097,1468,1502,1585,2087, 223, 939, 326,2140,2577, 892,2481,1623,4077, 982,
-3708, 135,2131,  87,2503,3114,2326,1106, 876,1616, 547,2997,2831,2093,3441,4530,
-4314,   9,3256,4229,4148, 659,1462,1986,1710,2046,2913,2231,4090,4880,5255,3392,
-3274,1368,3689,4645,1477, 705,3384,3635,1068,1529,2941,1458,3782,1509, 100,1656,
-2548, 718,2339, 408,1590,2780,3548,1838,4117,3719,1345,3530, 717,3442,2778,3220,
-2898,1892,4590,3614,3371,2043,1998,1224,3483, 891, 635, 584,2559,3355, 733,1766,
-1729,1172,3789,1891,2307, 781,2982,2271,1957,1580,5773,2633,2005,4195,3097,1535,
-3213,1189,1934,5693,3262, 586,3118,1324,1598, 517,1564,2217,1868,1893,4445,3728,
-2703,3139,1526,1787,1992,3882,2875,1549,1199,1056,2224,1904,2711,5098,4287, 338,
-1993,3129,3489,2689,1809,2815,1997, 957,1855,3898,2550,3275,3057,1105,1319, 627,
-1505,1911,1883,3526, 698,3629,3456,1833,1431, 746,  77,1261,2017,2296,1977,1885,
- 125,1334,1600, 525,1798,1109,2222,1470,1945, 559,2236,1186,3443,2476,1929,1411,
-2411,3135,1777,3372,2621,1841,1613,3229, 668,1430,1839,2643,2916, 195,1989,2671,
-2358,1387, 629,3205,2293,5256,4439, 123,1310, 888,1879,4300,3021,3605,1003,1162,
-3192,2910,2010, 140,2395,2859,  55,1082,2012,2901, 662, 419,2081,1438, 680,2774,
-4654,3912,1620,1731,1625,5035,4065,2328, 512,1344, 802,5443,2163,2311,2537, 524,
-3399,  98,1155,2103,1918,2606,3925,2816,1393,2465,1504,3773,2177,3963,1478,4346,
- 180,1113,4655,3461,2028,1698, 833,2696,1235,1322,1594,4408,3623,3013,3225,2040,
-3022, 541,2881, 607,3632,2029,1665,1219, 639,1385,1686,1099,2803,3231,1938,3188,
-2858, 427, 676,2772,1168,2025, 454,3253,2486,3556, 230,1950, 580, 791,1991,1280,
-1086,1974,2034, 630, 257,3338,2788,4903,1017,  86,4790, 966,2789,1995,1696,1131,
- 259,3095,4188,1308, 179,1463,5257, 289,4107,1248,  42,3413,1725,2288, 896,1947,
- 774,4474,4254, 604,3430,4264, 392,2514,2588, 452, 237,1408,3018, 988,4531,1970,
-3034,3310, 540,2370,1562,1288,2990, 502,4765,1147,   4,1853,2708, 207, 294,2814,
-4078,2902,2509, 684,  34,3105,3532,2551, 644, 709,2801,2344, 573,1727,3573,3557,
-2021,1081,3100,4315,2100,3681, 199,2263,1837,2385, 146,3484,1195,2776,3949, 997,
-1939,3973,1008,1091,1202,1962,1847,1149,4209,5444,1076, 493, 117,5400,2521, 972,
-1490,2934,1796,4542,2374,1512,2933,2657, 413,2888,1135,2762,2314,2156,1355,2369,
- 766,2007,2527,2170,3124,2491,2593,2632,4757,2437, 234,3125,3591,1898,1750,1376,
-1942,3468,3138, 570,2127,2145,3276,4131, 962, 132,1445,4196,  19, 941,3624,3480,
-3366,1973,1374,4461,3431,2629, 283,2415,2275, 808,2887,3620,2112,2563,1353,3610,
- 955,1089,3103,1053,  96,  88,4097, 823,3808,1583, 399, 292,4091,3313, 421,1128,
- 642,4006, 903,2539,1877,2082, 596,  29,4066,1790, 722,2157, 130, 995,1569, 769,
-1485, 464, 513,2213, 288,1923,1101,2453,4316, 133, 486,2445,  50, 625, 487,2207,
-  57, 423, 481,2962, 159,3729,1558, 491, 303, 482, 501, 240,2837, 112,3648,2392,
-1783, 362,   8,3433,3422, 610,2793,3277,1390,1284,1654,  21,3823, 734, 367, 623,
- 193, 287, 374,1009,1483, 816, 476, 313,2255,2340,1262,2150,2899,1146,2581, 782,
-2116,1659,2018,1880, 255,3586,3314,1110,2867,2137,2564, 986,2767,5185,2006, 650,
- 158, 926, 762, 881,3157,2717,2362,3587, 306,3690,3245,1542,3077,2427,1691,2478,
-2118,2985,3490,2438, 539,2305, 983, 129,1754, 355,4201,2386, 827,2923, 104,1773,
-2838,2771, 411,2905,3919, 376, 767, 122,1114, 828,2422,1817,3506, 266,3460,1007,
-1609,4998, 945,2612,4429,2274, 726,1247,1964,2914,2199,2070,4002,4108, 657,3323,
-1422, 579, 455,2764,4737,1222,2895,1670, 824,1223,1487,2525, 558, 861,3080, 598,
-2659,2515,1967, 752,2583,2376,2214,4180, 977, 704,2464,4999,2622,4109,1210,2961,
- 819,1541, 142,2284,  44, 418, 457,1126,3730,4347,4626,1644,1876,3671,1864, 302,
-1063,5694, 624, 723,1984,3745,1314,1676,2488,1610,1449,3558,3569,2166,2098, 409,
-1011,2325,3704,2306, 818,1732,1383,1824,1844,3757, 999,2705,3497,1216,1423,2683,
-2426,2954,2501,2726,2229,1475,2554,5064,1971,1794,1666,2014,1343, 783, 724, 191,
-2434,1354,2220,5065,1763,2752,2472,4152, 131, 175,2885,3434,  92,1466,4920,2616,
-3871,3872,3866, 128,1551,1632, 669,1854,3682,4691,4125,1230, 188,2973,3290,1302,
-1213, 560,3266, 917, 763,3909,3249,1760, 868,1958, 764,1782,2097, 145,2277,3774,
-4462,  64,1491,3062, 971,2132,3606,2442, 221,1226,1617, 218, 323,1185,3207,3147,
- 571, 619,1473,1005,1744,2281, 449,1887,2396,3685, 275, 375,3816,1743,3844,3731,
- 845,1983,2350,4210,1377, 773, 967,3499,3052,3743,2725,4007,1697,1022,3943,1464,
-3264,2855,2722,1952,1029,2839,2467,  84,4383,2215, 820,1391,2015,2448,3672, 377,
-1948,2168, 797,2545,3536,2578,2645,  94,2874,1678, 405,1259,3071, 771, 546,1315,
- 470,1243,3083, 895,2468, 981, 969,2037, 846,4181, 653,1276,2928,  14,2594, 557,
-3007,2474, 156, 902,1338,1740,2574, 537,2518, 973,2282,2216,2433,1928, 138,2903,
-1293,2631,1612, 646,3457, 839,2935, 111, 496,2191,2847, 589,3186, 149,3994,2060,
-4031,2641,4067,3145,1870,  37,3597,2136,1025,2051,3009,3383,3549,1121,1016,3261,
-1301, 251,2446,2599,2153, 872,3246, 637, 334,3705, 831, 884, 921,3065,3140,4092,
-2198,1944, 246,2964, 108,2045,1152,1921,2308,1031, 203,3173,4170,1907,3890, 810,
-1401,2003,1690, 506, 647,1242,2828,1761,1649,3208,2249,1589,3709,2931,5156,1708,
- 498, 666,2613, 834,3817,1231, 184,2851,1124, 883,3197,2261,3710,1765,1553,2658,
-1178,2639,2351,  93,1193, 942,2538,2141,4402, 235,1821, 870,1591,2192,1709,1871,
-3341,1618,4126,2595,2334, 603, 651,  69, 701, 268,2662,3411,2555,1380,1606, 503,
- 448, 254,2371,2646, 574,1187,2309,1770, 322,2235,1292,1801, 305, 566,1133, 229,
-2067,2057, 706, 167, 483,2002,2672,3295,1820,3561,3067, 316, 378,2746,3452,1112,
- 136,1981, 507,1651,2917,1117, 285,4591, 182,2580,3522,1304, 335,3303,1835,2504,
-1795,1792,2248, 674,1018,2106,2449,1857,2292,2845, 976,3047,1781,2600,2727,1389,
-1281,  52,3152, 153, 265,3950, 672,3485,3951,4463, 430,1183, 365, 278,2169,  27,
-1407,1336,2304, 209,1340,1730,2202,1852,2403,2883, 979,1737,1062, 631,2829,2542,
-3876,2592, 825,2086,2226,3048,3625, 352,1417,3724, 542, 991, 431,1351,3938,1861,
-2294, 826,1361,2927,3142,3503,1738, 463,2462,2723, 582,1916,1595,2808, 400,3845,
-3891,2868,3621,2254,  58,2492,1123, 910,2160,2614,1372,1603,1196,1072,3385,1700,
-3267,1980, 696, 480,2430, 920, 799,1570,2920,1951,2041,4047,2540,1321,4223,2469,
-3562,2228,1271,2602, 401,2833,3351,2575,5157, 907,2312,1256, 410, 263,3507,1582,
- 996, 678,1849,2316,1480, 908,3545,2237, 703,2322, 667,1826,2849,1531,2604,2999,
-2407,3146,2151,2630,1786,3711, 469,3542, 497,3899,2409, 858, 837,4446,3393,1274,
- 786, 620,1845,2001,3311, 484, 308,3367,1204,1815,3691,2332,1532,2557,1842,2020,
-2724,1927,2333,4440, 567,  22,1673,2728,4475,1987,1858,1144,1597, 101,1832,3601,
-  12, 974,3783,4391, 951,1412,   1,3720, 453,4608,4041, 528,1041,1027,3230,2628,
-1129, 875,1051,3291,1203,2262,1069,2860,2799,2149,2615,3278, 144,1758,3040,  31,
- 475,1680, 366,2685,3184, 311,1642,4008,2466,5036,1593,1493,2809, 216,1420,1668,
- 233, 304,2128,3284, 232,1429,1768,1040,2008,3407,2740,2967,2543, 242,2133, 778,
-1565,2022,2620, 505,2189,2756,1098,2273, 372,1614, 708, 553,2846,2094,2278, 169,
-3626,2835,4161, 228,2674,3165, 809,1454,1309, 466,1705,1095, 900,3423, 880,2667,
-3751,5258,2317,3109,2571,4317,2766,1503,1342, 866,4447,1118,  63,2076, 314,1881,
-1348,1061, 172, 978,3515,1747, 532, 511,3970,   6, 601, 905,2699,3300,1751, 276,
-1467,3725,2668,  65,4239,2544,2779,2556,1604, 578,2451,1802, 992,2331,2624,1320,
-3446, 713,1513,1013, 103,2786,2447,1661, 886,1702, 916, 654,3574,2031,1556, 751,
-2178,2821,2179,1498,1538,2176, 271, 914,2251,2080,1325, 638,1953,2937,3877,2432,
-2754,  95,3265,1716, 260,1227,4083, 775, 106,1357,3254, 426,1607, 555,2480, 772,
-1985, 244,2546, 474, 495,1046,2611,1851,2061,  71,2089,1675,2590, 742,3758,2843,
-3222,1433, 267,2180,2576,2826,2233,2092,3913,2435, 956,1745,3075, 856,2113,1116,
- 451,   3,1988,2896,1398, 993,2463,1878,2049,1341,2718,2721,2870,2108, 712,2904,
-4363,2753,2324, 277,2872,2349,2649, 384, 987, 435, 691,3000, 922, 164,3939, 652,
-1500,1184,4153,2482,3373,2165,4848,2335,3775,3508,3154,2806,2830,1554,2102,1664,
-2530,1434,2408, 893,1547,2623,3447,2832,2242,2532,3169,2856,3223,2078,  49,3770,
-3469, 462, 318, 656,2259,3250,3069, 679,1629,2758, 344,1138,1104,3120,1836,1283,
-3115,2154,1437,4448, 934, 759,1999, 794,2862,1038, 533,2560,1722,2342, 855,2626,
-1197,1663,4476,3127,  85,4240,2528,  25,1111,1181,3673, 407,3470,4561,2679,2713,
- 768,1925,2841,3986,1544,1165, 932, 373,1240,2146,1930,2673, 721,4766, 354,4333,
- 391,2963, 187,  61,3364,1442,1102, 330,1940,1767, 341,3809,4118, 393,2496,2062,
-2211, 105, 331, 300, 439, 913,1332, 626, 379,3304,1557, 328, 689,3952, 309,1555,
- 931, 317,2517,3027, 325, 569, 686,2107,3084,  60,1042,1333,2794, 264,3177,4014,
-1628, 258,3712,   7,4464,1176,1043,1778, 683, 114,1975,  78,1492, 383,1886, 510,
- 386, 645,5291,2891,2069,3305,4138,3867,2939,2603,2493,1935,1066,1848,3588,1015,
-1282,1289,4609, 697,1453,3044,2666,3611,1856,2412,  54, 719,1330, 568,3778,2459,
-1748, 788, 492, 551,1191,1000, 488,3394,3763, 282,1799, 348,2016,1523,3155,2390,
-1049, 382,2019,1788,1170, 729,2968,3523, 897,3926,2785,2938,3292, 350,2319,3238,
-1718,1717,2655,3453,3143,4465, 161,2889,2980,2009,1421,  56,1908,1640,2387,2232,
-1917,1874,2477,4921, 148,  83,3438, 592,4245,2882,1822,1055, 741, 115,1496,1624,
- 381,1638,4592,1020, 516,3214, 458, 947,4575,1432, 211,1514,2926,1865,2142, 189,
- 852,1221,1400,1486, 882,2299,4036, 351,  28,1122, 700,6479,6480,6481,6482,6483,  # last 512
-#Everything below is of no interest for detection purpose
-5508,6484,3900,3414,3974,4441,4024,3537,4037,5628,5099,3633,6485,3148,6486,3636,
-5509,3257,5510,5973,5445,5872,4941,4403,3174,4627,5873,6276,2286,4230,5446,5874,
-5122,6102,6103,4162,5447,5123,5323,4849,6277,3980,3851,5066,4246,5774,5067,6278,
-3001,2807,5695,3346,5775,5974,5158,5448,6487,5975,5976,5776,3598,6279,5696,4806,
-4211,4154,6280,6488,6489,6490,6281,4212,5037,3374,4171,6491,4562,4807,4722,4827,
-5977,6104,4532,4079,5159,5324,5160,4404,3858,5359,5875,3975,4288,4610,3486,4512,
-5325,3893,5360,6282,6283,5560,2522,4231,5978,5186,5449,2569,3878,6284,5401,3578,
-4415,6285,4656,5124,5979,2506,4247,4449,3219,3417,4334,4969,4329,6492,4576,4828,
-4172,4416,4829,5402,6286,3927,3852,5361,4369,4830,4477,4867,5876,4173,6493,6105,
-4657,6287,6106,5877,5450,6494,4155,4868,5451,3700,5629,4384,6288,6289,5878,3189,
-4881,6107,6290,6495,4513,6496,4692,4515,4723,5100,3356,6497,6291,3810,4080,5561,
-3570,4430,5980,6498,4355,5697,6499,4724,6108,6109,3764,4050,5038,5879,4093,3226,
-6292,5068,5217,4693,3342,5630,3504,4831,4377,4466,4309,5698,4431,5777,6293,5778,
-4272,3706,6110,5326,3752,4676,5327,4273,5403,4767,5631,6500,5699,5880,3475,5039,
-6294,5562,5125,4348,4301,4482,4068,5126,4593,5700,3380,3462,5981,5563,3824,5404,
-4970,5511,3825,4738,6295,6501,5452,4516,6111,5881,5564,6502,6296,5982,6503,4213,
-4163,3454,6504,6112,4009,4450,6113,4658,6297,6114,3035,6505,6115,3995,4904,4739,
-4563,4942,4110,5040,3661,3928,5362,3674,6506,5292,3612,4791,5565,4149,5983,5328,
-5259,5021,4725,4577,4564,4517,4364,6298,5405,4578,5260,4594,4156,4157,5453,3592,
-3491,6507,5127,5512,4709,4922,5984,5701,4726,4289,6508,4015,6116,5128,4628,3424,
-4241,5779,6299,4905,6509,6510,5454,5702,5780,6300,4365,4923,3971,6511,5161,3270,
-3158,5985,4100, 867,5129,5703,6117,5363,3695,3301,5513,4467,6118,6512,5455,4232,
-4242,4629,6513,3959,4478,6514,5514,5329,5986,4850,5162,5566,3846,4694,6119,5456,
-4869,5781,3779,6301,5704,5987,5515,4710,6302,5882,6120,4392,5364,5705,6515,6121,
-6516,6517,3736,5988,5457,5989,4695,2457,5883,4551,5782,6303,6304,6305,5130,4971,
-6122,5163,6123,4870,3263,5365,3150,4871,6518,6306,5783,5069,5706,3513,3498,4409,
-5330,5632,5366,5458,5459,3991,5990,4502,3324,5991,5784,3696,4518,5633,4119,6519,
-4630,5634,4417,5707,4832,5992,3418,6124,5993,5567,4768,5218,6520,4595,3458,5367,
-6125,5635,6126,4202,6521,4740,4924,6307,3981,4069,4385,6308,3883,2675,4051,3834,
-4302,4483,5568,5994,4972,4101,5368,6309,5164,5884,3922,6127,6522,6523,5261,5460,
-5187,4164,5219,3538,5516,4111,3524,5995,6310,6311,5369,3181,3386,2484,5188,3464,
-5569,3627,5708,6524,5406,5165,4677,4492,6312,4872,4851,5885,4468,5996,6313,5709,
-5710,6128,2470,5886,6314,5293,4882,5785,3325,5461,5101,6129,5711,5786,6525,4906,
-6526,6527,4418,5887,5712,4808,2907,3701,5713,5888,6528,3765,5636,5331,6529,6530,
-3593,5889,3637,4943,3692,5714,5787,4925,6315,6130,5462,4405,6131,6132,6316,5262,
-6531,6532,5715,3859,5716,5070,4696,5102,3929,5788,3987,4792,5997,6533,6534,3920,
-4809,5000,5998,6535,2974,5370,6317,5189,5263,5717,3826,6536,3953,5001,4883,3190,
-5463,5890,4973,5999,4741,6133,6134,3607,5570,6000,4711,3362,3630,4552,5041,6318,
-6001,2950,2953,5637,4646,5371,4944,6002,2044,4120,3429,6319,6537,5103,4833,6538,
-6539,4884,4647,3884,6003,6004,4758,3835,5220,5789,4565,5407,6540,6135,5294,4697,
-4852,6320,6321,3206,4907,6541,6322,4945,6542,6136,6543,6323,6005,4631,3519,6544,
-5891,6545,5464,3784,5221,6546,5571,4659,6547,6324,6137,5190,6548,3853,6549,4016,
-4834,3954,6138,5332,3827,4017,3210,3546,4469,5408,5718,3505,4648,5790,5131,5638,
-5791,5465,4727,4318,6325,6326,5792,4553,4010,4698,3439,4974,3638,4335,3085,6006,
-5104,5042,5166,5892,5572,6327,4356,4519,5222,5573,5333,5793,5043,6550,5639,5071,
-4503,6328,6139,6551,6140,3914,3901,5372,6007,5640,4728,4793,3976,3836,4885,6552,
-4127,6553,4451,4102,5002,6554,3686,5105,6555,5191,5072,5295,4611,5794,5296,6556,
-5893,5264,5894,4975,5466,5265,4699,4976,4370,4056,3492,5044,4886,6557,5795,4432,
-4769,4357,5467,3940,4660,4290,6141,4484,4770,4661,3992,6329,4025,4662,5022,4632,
-4835,4070,5297,4663,4596,5574,5132,5409,5895,6142,4504,5192,4664,5796,5896,3885,
-5575,5797,5023,4810,5798,3732,5223,4712,5298,4084,5334,5468,6143,4052,4053,4336,
-4977,4794,6558,5335,4908,5576,5224,4233,5024,4128,5469,5225,4873,6008,5045,4729,
-4742,4633,3675,4597,6559,5897,5133,5577,5003,5641,5719,6330,6560,3017,2382,3854,
-4406,4811,6331,4393,3964,4946,6561,2420,3722,6562,4926,4378,3247,1736,4442,6332,
-5134,6333,5226,3996,2918,5470,4319,4003,4598,4743,4744,4485,3785,3902,5167,5004,
-5373,4394,5898,6144,4874,1793,3997,6334,4085,4214,5106,5642,4909,5799,6009,4419,
-4189,3330,5899,4165,4420,5299,5720,5227,3347,6145,4081,6335,2876,3930,6146,3293,
-3786,3910,3998,5900,5300,5578,2840,6563,5901,5579,6147,3531,5374,6564,6565,5580,
-4759,5375,6566,6148,3559,5643,6336,6010,5517,6337,6338,5721,5902,3873,6011,6339,
-6567,5518,3868,3649,5722,6568,4771,4947,6569,6149,4812,6570,2853,5471,6340,6341,
-5644,4795,6342,6012,5723,6343,5724,6013,4349,6344,3160,6150,5193,4599,4514,4493,
-5168,4320,6345,4927,3666,4745,5169,5903,5005,4928,6346,5725,6014,4730,4203,5046,
-4948,3395,5170,6015,4150,6016,5726,5519,6347,5047,3550,6151,6348,4197,4310,5904,
-6571,5581,2965,6152,4978,3960,4291,5135,6572,5301,5727,4129,4026,5905,4853,5728,
-5472,6153,6349,4533,2700,4505,5336,4678,3583,5073,2994,4486,3043,4554,5520,6350,
-6017,5800,4487,6351,3931,4103,5376,6352,4011,4321,4311,4190,5136,6018,3988,3233,
-4350,5906,5645,4198,6573,5107,3432,4191,3435,5582,6574,4139,5410,6353,5411,3944,
-5583,5074,3198,6575,6354,4358,6576,5302,4600,5584,5194,5412,6577,6578,5585,5413,
-5303,4248,5414,3879,4433,6579,4479,5025,4854,5415,6355,4760,4772,3683,2978,4700,
-3797,4452,3965,3932,3721,4910,5801,6580,5195,3551,5907,3221,3471,3029,6019,3999,
-5908,5909,5266,5267,3444,3023,3828,3170,4796,5646,4979,4259,6356,5647,5337,3694,
-6357,5648,5338,4520,4322,5802,3031,3759,4071,6020,5586,4836,4386,5048,6581,3571,
-4679,4174,4949,6154,4813,3787,3402,3822,3958,3215,3552,5268,4387,3933,4950,4359,
-6021,5910,5075,3579,6358,4234,4566,5521,6359,3613,5049,6022,5911,3375,3702,3178,
-4911,5339,4521,6582,6583,4395,3087,3811,5377,6023,6360,6155,4027,5171,5649,4421,
-4249,2804,6584,2270,6585,4000,4235,3045,6156,5137,5729,4140,4312,3886,6361,4330,
-6157,4215,6158,3500,3676,4929,4331,3713,4930,5912,4265,3776,3368,5587,4470,4855,
-3038,4980,3631,6159,6160,4132,4680,6161,6362,3923,4379,5588,4255,6586,4121,6587,
-6363,4649,6364,3288,4773,4774,6162,6024,6365,3543,6588,4274,3107,3737,5050,5803,
-4797,4522,5589,5051,5730,3714,4887,5378,4001,4523,6163,5026,5522,4701,4175,2791,
-3760,6589,5473,4224,4133,3847,4814,4815,4775,3259,5416,6590,2738,6164,6025,5304,
-3733,5076,5650,4816,5590,6591,6165,6592,3934,5269,6593,3396,5340,6594,5804,3445,
-3602,4042,4488,5731,5732,3525,5591,4601,5196,6166,6026,5172,3642,4612,3202,4506,
-4798,6366,3818,5108,4303,5138,5139,4776,3332,4304,2915,3415,4434,5077,5109,4856,
-2879,5305,4817,6595,5913,3104,3144,3903,4634,5341,3133,5110,5651,5805,6167,4057,
-5592,2945,4371,5593,6596,3474,4182,6367,6597,6168,4507,4279,6598,2822,6599,4777,
-4713,5594,3829,6169,3887,5417,6170,3653,5474,6368,4216,2971,5228,3790,4579,6369,
-5733,6600,6601,4951,4746,4555,6602,5418,5475,6027,3400,4665,5806,6171,4799,6028,
-5052,6172,3343,4800,4747,5006,6370,4556,4217,5476,4396,5229,5379,5477,3839,5914,
-5652,5807,4714,3068,4635,5808,6173,5342,4192,5078,5419,5523,5734,6174,4557,6175,
-4602,6371,6176,6603,5809,6372,5735,4260,3869,5111,5230,6029,5112,6177,3126,4681,
-5524,5915,2706,3563,4748,3130,6178,4018,5525,6604,6605,5478,4012,4837,6606,4534,
-4193,5810,4857,3615,5479,6030,4082,3697,3539,4086,5270,3662,4508,4931,5916,4912,
-5811,5027,3888,6607,4397,3527,3302,3798,2775,2921,2637,3966,4122,4388,4028,4054,
-1633,4858,5079,3024,5007,3982,3412,5736,6608,3426,3236,5595,3030,6179,3427,3336,
-3279,3110,6373,3874,3039,5080,5917,5140,4489,3119,6374,5812,3405,4494,6031,4666,
-4141,6180,4166,6032,5813,4981,6609,5081,4422,4982,4112,3915,5653,3296,3983,6375,
-4266,4410,5654,6610,6181,3436,5082,6611,5380,6033,3819,5596,4535,5231,5306,5113,
-6612,4952,5918,4275,3113,6613,6376,6182,6183,5814,3073,4731,4838,5008,3831,6614,
-4888,3090,3848,4280,5526,5232,3014,5655,5009,5737,5420,5527,6615,5815,5343,5173,
-5381,4818,6616,3151,4953,6617,5738,2796,3204,4360,2989,4281,5739,5174,5421,5197,
-3132,5141,3849,5142,5528,5083,3799,3904,4839,5480,2880,4495,3448,6377,6184,5271,
-5919,3771,3193,6034,6035,5920,5010,6036,5597,6037,6378,6038,3106,5422,6618,5423,
-5424,4142,6619,4889,5084,4890,4313,5740,6620,3437,5175,5307,5816,4199,5198,5529,
-5817,5199,5656,4913,5028,5344,3850,6185,2955,5272,5011,5818,4567,4580,5029,5921,
-3616,5233,6621,6622,6186,4176,6039,6379,6380,3352,5200,5273,2908,5598,5234,3837,
-5308,6623,6624,5819,4496,4323,5309,5201,6625,6626,4983,3194,3838,4167,5530,5922,
-5274,6381,6382,3860,3861,5599,3333,4292,4509,6383,3553,5481,5820,5531,4778,6187,
-3955,3956,4324,4389,4218,3945,4325,3397,2681,5923,4779,5085,4019,5482,4891,5382,
-5383,6040,4682,3425,5275,4094,6627,5310,3015,5483,5657,4398,5924,3168,4819,6628,
-5925,6629,5532,4932,4613,6041,6630,4636,6384,4780,4204,5658,4423,5821,3989,4683,
-5822,6385,4954,6631,5345,6188,5425,5012,5384,3894,6386,4490,4104,6632,5741,5053,
-6633,5823,5926,5659,5660,5927,6634,5235,5742,5824,4840,4933,4820,6387,4859,5928,
-4955,6388,4143,3584,5825,5346,5013,6635,5661,6389,5014,5484,5743,4337,5176,5662,
-6390,2836,6391,3268,6392,6636,6042,5236,6637,4158,6638,5744,5663,4471,5347,3663,
-4123,5143,4293,3895,6639,6640,5311,5929,5826,3800,6189,6393,6190,5664,5348,3554,
-3594,4749,4603,6641,5385,4801,6043,5827,4183,6642,5312,5426,4761,6394,5665,6191,
-4715,2669,6643,6644,5533,3185,5427,5086,5930,5931,5386,6192,6044,6645,4781,4013,
-5745,4282,4435,5534,4390,4267,6045,5746,4984,6046,2743,6193,3501,4087,5485,5932,
-5428,4184,4095,5747,4061,5054,3058,3862,5933,5600,6646,5144,3618,6395,3131,5055,
-5313,6396,4650,4956,3855,6194,3896,5202,4985,4029,4225,6195,6647,5828,5486,5829,
-3589,3002,6648,6397,4782,5276,6649,6196,6650,4105,3803,4043,5237,5830,6398,4096,
-3643,6399,3528,6651,4453,3315,4637,6652,3984,6197,5535,3182,3339,6653,3096,2660,
-6400,6654,3449,5934,4250,4236,6047,6401,5831,6655,5487,3753,4062,5832,6198,6199,
-6656,3766,6657,3403,4667,6048,6658,4338,2897,5833,3880,2797,3780,4326,6659,5748,
-5015,6660,5387,4351,5601,4411,6661,3654,4424,5935,4339,4072,5277,4568,5536,6402,
-6662,5238,6663,5349,5203,6200,5204,6201,5145,4536,5016,5056,4762,5834,4399,4957,
-6202,6403,5666,5749,6664,4340,6665,5936,5177,5667,6666,6667,3459,4668,6404,6668,
-6669,4543,6203,6670,4276,6405,4480,5537,6671,4614,5205,5668,6672,3348,2193,4763,
-6406,6204,5937,5602,4177,5669,3419,6673,4020,6205,4443,4569,5388,3715,3639,6407,
-6049,4058,6206,6674,5938,4544,6050,4185,4294,4841,4651,4615,5488,6207,6408,6051,
-5178,3241,3509,5835,6208,4958,5836,4341,5489,5278,6209,2823,5538,5350,5206,5429,
-6675,4638,4875,4073,3516,4684,4914,4860,5939,5603,5389,6052,5057,3237,5490,3791,
-6676,6409,6677,4821,4915,4106,5351,5058,4243,5539,4244,5604,4842,4916,5239,3028,
-3716,5837,5114,5605,5390,5940,5430,6210,4332,6678,5540,4732,3667,3840,6053,4305,
-3408,5670,5541,6410,2744,5240,5750,6679,3234,5606,6680,5607,5671,3608,4283,4159,
-4400,5352,4783,6681,6411,6682,4491,4802,6211,6412,5941,6413,6414,5542,5751,6683,
-4669,3734,5942,6684,6415,5943,5059,3328,4670,4144,4268,6685,6686,6687,6688,4372,
-3603,6689,5944,5491,4373,3440,6416,5543,4784,4822,5608,3792,4616,5838,5672,3514,
-5391,6417,4892,6690,4639,6691,6054,5673,5839,6055,6692,6056,5392,6212,4038,5544,
-5674,4497,6057,6693,5840,4284,5675,4021,4545,5609,6418,4454,6419,6213,4113,4472,
-5314,3738,5087,5279,4074,5610,4959,4063,3179,4750,6058,6420,6214,3476,4498,4716,
-5431,4960,4685,6215,5241,6694,6421,6216,6695,5841,5945,6422,3748,5946,5179,3905,
-5752,5545,5947,4374,6217,4455,6423,4412,6218,4803,5353,6696,3832,5280,6219,4327,
-4702,6220,6221,6059,4652,5432,6424,3749,4751,6425,5753,4986,5393,4917,5948,5030,
-5754,4861,4733,6426,4703,6697,6222,4671,5949,4546,4961,5180,6223,5031,3316,5281,
-6698,4862,4295,4934,5207,3644,6427,5842,5950,6428,6429,4570,5843,5282,6430,6224,
-5088,3239,6060,6699,5844,5755,6061,6431,2701,5546,6432,5115,5676,4039,3993,3327,
-4752,4425,5315,6433,3941,6434,5677,4617,4604,3074,4581,6225,5433,6435,6226,6062,
-4823,5756,5116,6227,3717,5678,4717,5845,6436,5679,5846,6063,5847,6064,3977,3354,
-6437,3863,5117,6228,5547,5394,4499,4524,6229,4605,6230,4306,4500,6700,5951,6065,
-3693,5952,5089,4366,4918,6701,6231,5548,6232,6702,6438,4704,5434,6703,6704,5953,
-4168,6705,5680,3420,6706,5242,4407,6066,3812,5757,5090,5954,4672,4525,3481,5681,
-4618,5395,5354,5316,5955,6439,4962,6707,4526,6440,3465,4673,6067,6441,5682,6708,
-5435,5492,5758,5683,4619,4571,4674,4804,4893,4686,5493,4753,6233,6068,4269,6442,
-6234,5032,4705,5146,5243,5208,5848,6235,6443,4963,5033,4640,4226,6236,5849,3387,
-6444,6445,4436,4437,5850,4843,5494,4785,4894,6709,4361,6710,5091,5956,3331,6237,
-4987,5549,6069,6711,4342,3517,4473,5317,6070,6712,6071,4706,6446,5017,5355,6713,
-6714,4988,5436,6447,4734,5759,6715,4735,4547,4456,4754,6448,5851,6449,6450,3547,
-5852,5318,6451,6452,5092,4205,6716,6238,4620,4219,5611,6239,6072,4481,5760,5957,
-5958,4059,6240,6453,4227,4537,6241,5761,4030,4186,5244,5209,3761,4457,4876,3337,
-5495,5181,6242,5959,5319,5612,5684,5853,3493,5854,6073,4169,5613,5147,4895,6074,
-5210,6717,5182,6718,3830,6243,2798,3841,6075,6244,5855,5614,3604,4606,5496,5685,
-5118,5356,6719,6454,5960,5357,5961,6720,4145,3935,4621,5119,5962,4261,6721,6455,
-4786,5963,4375,4582,6245,6246,6247,6076,5437,4877,5856,3376,4380,6248,4160,6722,
-5148,6456,5211,6457,6723,4718,6458,6724,6249,5358,4044,3297,6459,6250,5857,5615,
-5497,5245,6460,5498,6725,6251,6252,5550,3793,5499,2959,5396,6461,6462,4572,5093,
-5500,5964,3806,4146,6463,4426,5762,5858,6077,6253,4755,3967,4220,5965,6254,4989,
-5501,6464,4352,6726,6078,4764,2290,5246,3906,5438,5283,3767,4964,2861,5763,5094,
-6255,6256,4622,5616,5859,5860,4707,6727,4285,4708,4824,5617,6257,5551,4787,5212,
-4965,4935,4687,6465,6728,6466,5686,6079,3494,4413,2995,5247,5966,5618,6729,5967,
-5764,5765,5687,5502,6730,6731,6080,5397,6467,4990,6258,6732,4538,5060,5619,6733,
-4719,5688,5439,5018,5149,5284,5503,6734,6081,4607,6259,5120,3645,5861,4583,6260,
-4584,4675,5620,4098,5440,6261,4863,2379,3306,4585,5552,5689,4586,5285,6735,4864,
-6736,5286,6082,6737,4623,3010,4788,4381,4558,5621,4587,4896,3698,3161,5248,4353,
-4045,6262,3754,5183,4588,6738,6263,6739,6740,5622,3936,6741,6468,6742,6264,5095,
-6469,4991,5968,6743,4992,6744,6083,4897,6745,4256,5766,4307,3108,3968,4444,5287,
-3889,4343,6084,4510,6085,4559,6086,4898,5969,6746,5623,5061,4919,5249,5250,5504,
-5441,6265,5320,4878,3242,5862,5251,3428,6087,6747,4237,5624,5442,6266,5553,4539,
-6748,2585,3533,5398,4262,6088,5150,4736,4438,6089,6267,5505,4966,6749,6268,6750,
-6269,5288,5554,3650,6090,6091,4624,6092,5690,6751,5863,4270,5691,4277,5555,5864,
-6752,5692,4720,4865,6470,5151,4688,4825,6753,3094,6754,6471,3235,4653,6755,5213,
-5399,6756,3201,4589,5865,4967,6472,5866,6473,5019,3016,6757,5321,4756,3957,4573,
-6093,4993,5767,4721,6474,6758,5625,6759,4458,6475,6270,6760,5556,4994,5214,5252,
-6271,3875,5768,6094,5034,5506,4376,5769,6761,2120,6476,5253,5770,6762,5771,5970,
-3990,5971,5557,5558,5772,6477,6095,2787,4641,5972,5121,6096,6097,6272,6763,3703,
-5867,5507,6273,4206,6274,4789,6098,6764,3619,3646,3833,3804,2394,3788,4936,3978,
-4866,4899,6099,6100,5559,6478,6765,3599,5868,6101,5869,5870,6275,6766,4527,6767)
-
-# flake8: noqa
diff --git a/bundle/requests/packages/chardet/gb2312freq.pyc b/bundle/requests/packages/chardet/gb2312freq.pyc
deleted file mode 100644
index 36de004..0000000
Binary files a/bundle/requests/packages/chardet/gb2312freq.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/gb2312prober.py b/bundle/requests/packages/chardet/gb2312prober.py
deleted file mode 100644
index 0325a2d..0000000
--- a/bundle/requests/packages/chardet/gb2312prober.py
+++ /dev/null
@@ -1,41 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is mozilla.org code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-# 
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-# 
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-from .mbcharsetprober import MultiByteCharSetProber
-from .codingstatemachine import CodingStateMachine
-from .chardistribution import GB2312DistributionAnalysis
-from .mbcssm import GB2312SMModel
-
-class GB2312Prober(MultiByteCharSetProber):
-    def __init__(self):
-        MultiByteCharSetProber.__init__(self)
-        self._mCodingSM = CodingStateMachine(GB2312SMModel)
-        self._mDistributionAnalyzer = GB2312DistributionAnalysis()
-        self.reset()
-
-    def get_charset_name(self):
-        return "GB2312"
diff --git a/bundle/requests/packages/chardet/gb2312prober.pyc b/bundle/requests/packages/chardet/gb2312prober.pyc
deleted file mode 100644
index 3fd1aaa..0000000
Binary files a/bundle/requests/packages/chardet/gb2312prober.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/hebrewprober.py b/bundle/requests/packages/chardet/hebrewprober.py
deleted file mode 100644
index ba225c5..0000000
--- a/bundle/requests/packages/chardet/hebrewprober.py
+++ /dev/null
@@ -1,283 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Universal charset detector code.
-#
-# The Initial Developer of the Original Code is
-#          Shy Shalom
-# Portions created by the Initial Developer are Copyright (C) 2005
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-from .charsetprober import CharSetProber
-from .constants import eNotMe, eDetecting
-from .compat import wrap_ord
-
-# This prober doesn't actually recognize a language or a charset.
-# It is a helper prober for the use of the Hebrew model probers
-
-### General ideas of the Hebrew charset recognition ###
-#
-# Four main charsets exist in Hebrew:
-# "ISO-8859-8" - Visual Hebrew
-# "windows-1255" - Logical Hebrew
-# "ISO-8859-8-I" - Logical Hebrew
-# "x-mac-hebrew" - ?? Logical Hebrew ??
-#
-# Both "ISO" charsets use a completely identical set of code points, whereas
-# "windows-1255" and "x-mac-hebrew" are two different proper supersets of
-# these code points. windows-1255 defines additional characters in the range
-# 0x80-0x9F as some misc punctuation marks as well as some Hebrew-specific
-# diacritics and additional 'Yiddish' ligature letters in the range 0xc0-0xd6.
-# x-mac-hebrew defines similar additional code points but with a different
-# mapping.
-#
-# As far as an average Hebrew text with no diacritics is concerned, all four
-# charsets are identical with respect to code points. Meaning that for the
-# main Hebrew alphabet, all four map the same values to all 27 Hebrew letters
-# (including final letters).
-#
-# The dominant difference between these charsets is their directionality.
-# "Visual" directionality means that the text is ordered as if the renderer is
-# not aware of a BIDI rendering algorithm. The renderer sees the text and
-# draws it from left to right. The text itself when ordered naturally is read
-# backwards. A buffer of Visual Hebrew generally looks like so:
-# "[last word of first line spelled backwards] [whole line ordered backwards
-# and spelled backwards] [first word of first line spelled backwards]
-# [end of line] [last word of second line] ... etc' "
-# adding punctuation marks, numbers and English text to visual text is
-# naturally also "visual" and from left to right.
-#
-# "Logical" directionality means the text is ordered "naturally" according to
-# the order it is read. It is the responsibility of the renderer to display
-# the text from right to left. A BIDI algorithm is used to place general
-# punctuation marks, numbers and English text in the text.
-#
-# Texts in x-mac-hebrew are almost impossible to find on the Internet. From
-# what little evidence I could find, it seems that its general directionality
-# is Logical.
-#
-# To sum up all of the above, the Hebrew probing mechanism knows about two
-# charsets:
-# Visual Hebrew - "ISO-8859-8" - backwards text - Words and sentences are
-#    backwards while line order is natural. For charset recognition purposes
-#    the line order is unimportant (In fact, for this implementation, even
-#    word order is unimportant).
-# Logical Hebrew - "windows-1255" - normal, naturally ordered text.
-#
-# "ISO-8859-8-I" is a subset of windows-1255 and doesn't need to be
-#    specifically identified.
-# "x-mac-hebrew" is also identified as windows-1255. A text in x-mac-hebrew
-#    that contain special punctuation marks or diacritics is displayed with
-#    some unconverted characters showing as question marks. This problem might
-#    be corrected using another model prober for x-mac-hebrew. Due to the fact
-#    that x-mac-hebrew texts are so rare, writing another model prober isn't
-#    worth the effort and performance hit.
-#
-#### The Prober ####
-#
-# The prober is divided between two SBCharSetProbers and a HebrewProber,
-# all of which are managed, created, fed data, inquired and deleted by the
-# SBCSGroupProber. The two SBCharSetProbers identify that the text is in
-# fact some kind of Hebrew, Logical or Visual. The final decision about which
-# one is it is made by the HebrewProber by combining final-letter scores
-# with the scores of the two SBCharSetProbers to produce a final answer.
-#
-# The SBCSGroupProber is responsible for stripping the original text of HTML
-# tags, English characters, numbers, low-ASCII punctuation characters, spaces
-# and new lines. It reduces any sequence of such characters to a single space.
-# The buffer fed to each prober in the SBCS group prober is pure text in
-# high-ASCII.
-# The two SBCharSetProbers (model probers) share the same language model:
-# Win1255Model.
-# The first SBCharSetProber uses the model normally as any other
-# SBCharSetProber does, to recognize windows-1255, upon which this model was
-# built. The second SBCharSetProber is told to make the pair-of-letter
-# lookup in the language model backwards. This in practice exactly simulates
-# a visual Hebrew model using the windows-1255 logical Hebrew model.
-#
-# The HebrewProber is not using any language model. All it does is look for
-# final-letter evidence suggesting the text is either logical Hebrew or visual
-# Hebrew. Disjointed from the model probers, the results of the HebrewProber
-# alone are meaningless. HebrewProber always returns 0.00 as confidence
-# since it never identifies a charset by itself. Instead, the pointer to the
-# HebrewProber is passed to the model probers as a helper "Name Prober".
-# When the Group prober receives a positive identification from any prober,
-# it asks for the name of the charset identified. If the prober queried is a
-# Hebrew model prober, the model prober forwards the call to the
-# HebrewProber to make the final decision. In the HebrewProber, the
-# decision is made according to the final-letters scores maintained and Both
-# model probers scores. The answer is returned in the form of the name of the
-# charset identified, either "windows-1255" or "ISO-8859-8".
-
-# windows-1255 / ISO-8859-8 code points of interest
-FINAL_KAF = 0xea
-NORMAL_KAF = 0xeb
-FINAL_MEM = 0xed
-NORMAL_MEM = 0xee
-FINAL_NUN = 0xef
-NORMAL_NUN = 0xf0
-FINAL_PE = 0xf3
-NORMAL_PE = 0xf4
-FINAL_TSADI = 0xf5
-NORMAL_TSADI = 0xf6
-
-# Minimum Visual vs Logical final letter score difference.
-# If the difference is below this, don't rely solely on the final letter score
-# distance.
-MIN_FINAL_CHAR_DISTANCE = 5
-
-# Minimum Visual vs Logical model score difference.
-# If the difference is below this, don't rely at all on the model score
-# distance.
-MIN_MODEL_DISTANCE = 0.01
-
-VISUAL_HEBREW_NAME = "ISO-8859-8"
-LOGICAL_HEBREW_NAME = "windows-1255"
-
-
-class HebrewProber(CharSetProber):
-    def __init__(self):
-        CharSetProber.__init__(self)
-        self._mLogicalProber = None
-        self._mVisualProber = None
-        self.reset()
-
-    def reset(self):
-        self._mFinalCharLogicalScore = 0
-        self._mFinalCharVisualScore = 0
-        # The two last characters seen in the previous buffer,
-        # mPrev and mBeforePrev are initialized to space in order to simulate
-        # a word delimiter at the beginning of the data
-        self._mPrev = ' '
-        self._mBeforePrev = ' '
-        # These probers are owned by the group prober.
-
-    def set_model_probers(self, logicalProber, visualProber):
-        self._mLogicalProber = logicalProber
-        self._mVisualProber = visualProber
-
-    def is_final(self, c):
-        return wrap_ord(c) in [FINAL_KAF, FINAL_MEM, FINAL_NUN, FINAL_PE,
-                               FINAL_TSADI]
-
-    def is_non_final(self, c):
-        # The normal Tsadi is not a good Non-Final letter due to words like
-        # 'lechotet' (to chat) containing an apostrophe after the tsadi. This
-        # apostrophe is converted to a space in FilterWithoutEnglishLetters
-        # causing the Non-Final tsadi to appear at an end of a word even
-        # though this is not the case in the original text.
-        # The letters Pe and Kaf rarely display a related behavior of not being
-        # a good Non-Final letter. Words like 'Pop', 'Winamp' and 'Mubarak'
-        # for example legally end with a Non-Final Pe or Kaf. However, the
-        # benefit of these letters as Non-Final letters outweighs the damage
-        # since these words are quite rare.
-        return wrap_ord(c) in [NORMAL_KAF, NORMAL_MEM, NORMAL_NUN, NORMAL_PE]
-
-    def feed(self, aBuf):
-        # Final letter analysis for logical-visual decision.
-        # Look for evidence that the received buffer is either logical Hebrew
-        # or visual Hebrew.
-        # The following cases are checked:
-        # 1) A word longer than 1 letter, ending with a final letter. This is
-        #    an indication that the text is laid out "naturally" since the
-        #    final letter really appears at the end. +1 for logical score.
-        # 2) A word longer than 1 letter, ending with a Non-Final letter. In
-        #    normal Hebrew, words ending with Kaf, Mem, Nun, Pe or Tsadi,
-        #    should not end with the Non-Final form of that letter. Exceptions
-        #    to this rule are mentioned above in isNonFinal(). This is an
-        #    indication that the text is laid out backwards. +1 for visual
-        #    score
-        # 3) A word longer than 1 letter, starting with a final letter. Final
-        #    letters should not appear at the beginning of a word. This is an
-        #    indication that the text is laid out backwards. +1 for visual
-        #    score.
-        #
-        # The visual score and logical score are accumulated throughout the
-        # text and are finally checked against each other in GetCharSetName().
-        # No checking for final letters in the middle of words is done since
-        # that case is not an indication for either Logical or Visual text.
-        #
-        # We automatically filter out all 7-bit characters (replace them with
-        # spaces) so the word boundary detection works properly. [MAP]
-
-        if self.get_state() == eNotMe:
-            # Both model probers say it's not them. No reason to continue.
-            return eNotMe
-
-        aBuf = self.filter_high_bit_only(aBuf)
-
-        for cur in aBuf:
-            if cur == ' ':
-                # We stand on a space - a word just ended
-                if self._mBeforePrev != ' ':
-                    # next-to-last char was not a space so self._mPrev is not a
-                    # 1 letter word
-                    if self.is_final(self._mPrev):
-                        # case (1) [-2:not space][-1:final letter][cur:space]
-                        self._mFinalCharLogicalScore += 1
-                    elif self.is_non_final(self._mPrev):
-                        # case (2) [-2:not space][-1:Non-Final letter][
-                        #  cur:space]
-                        self._mFinalCharVisualScore += 1
-            else:
-                # Not standing on a space
-                if ((self._mBeforePrev == ' ') and
-                        (self.is_final(self._mPrev)) and (cur != ' ')):
-                    # case (3) [-2:space][-1:final letter][cur:not space]
-                    self._mFinalCharVisualScore += 1
-            self._mBeforePrev = self._mPrev
-            self._mPrev = cur
-
-        # Forever detecting, till the end or until both model probers return
-        # eNotMe (handled above)
-        return eDetecting
-
-    def get_charset_name(self):
-        # Make the decision: is it Logical or Visual?
-        # If the final letter score distance is dominant enough, rely on it.
-        finalsub = self._mFinalCharLogicalScore - self._mFinalCharVisualScore
-        if finalsub >= MIN_FINAL_CHAR_DISTANCE:
-            return LOGICAL_HEBREW_NAME
-        if finalsub <= -MIN_FINAL_CHAR_DISTANCE:
-            return VISUAL_HEBREW_NAME
-
-        # It's not dominant enough, try to rely on the model scores instead.
-        modelsub = (self._mLogicalProber.get_confidence()
-                    - self._mVisualProber.get_confidence())
-        if modelsub > MIN_MODEL_DISTANCE:
-            return LOGICAL_HEBREW_NAME
-        if modelsub < -MIN_MODEL_DISTANCE:
-            return VISUAL_HEBREW_NAME
-
-        # Still no good, back to final letter distance, maybe it'll save the
-        # day.
-        if finalsub < 0.0:
-            return VISUAL_HEBREW_NAME
-
-        # (finalsub > 0 - Logical) or (don't know what to do) default to
-        # Logical.
-        return LOGICAL_HEBREW_NAME
-
-    def get_state(self):
-        # Remain active as long as any of the model probers are active.
-        if (self._mLogicalProber.get_state() == eNotMe) and \
-           (self._mVisualProber.get_state() == eNotMe):
-            return eNotMe
-        return eDetecting
diff --git a/bundle/requests/packages/chardet/hebrewprober.pyc b/bundle/requests/packages/chardet/hebrewprober.pyc
deleted file mode 100644
index ff48b0e..0000000
Binary files a/bundle/requests/packages/chardet/hebrewprober.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/jisfreq.py b/bundle/requests/packages/chardet/jisfreq.py
deleted file mode 100644
index 064345b..0000000
--- a/bundle/requests/packages/chardet/jisfreq.py
+++ /dev/null
@@ -1,569 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Communicator client code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-# Sampling from about 20M text materials include literature and computer technology
-#
-# Japanese frequency table, applied to both S-JIS and EUC-JP
-# They are sorted in order.
-
-# 128  --> 0.77094
-# 256  --> 0.85710
-# 512  --> 0.92635
-# 1024 --> 0.97130
-# 2048 --> 0.99431
-#
-# Ideal Distribution Ratio = 0.92635 / (1-0.92635) = 12.58
-# Random Distribution Ration = 512 / (2965+62+83+86-512) = 0.191
-#
-# Typical Distribution Ratio, 25% of IDR
-
-JIS_TYPICAL_DISTRIBUTION_RATIO = 3.0
-
-# Char to FreqOrder table ,
-JIS_TABLE_SIZE = 4368
-
-JISCharToFreqOrder = (
-  40,   1,   6, 182, 152, 180, 295,2127, 285, 381,3295,4304,3068,4606,3165,3510, #   16
-3511,1822,2785,4607,1193,2226,5070,4608, 171,2996,1247,  18, 179,5071, 856,1661, #   32
-1262,5072, 619, 127,3431,3512,3230,1899,1700, 232, 228,1294,1298, 284, 283,2041, #   48
-2042,1061,1062,  48,  49,  44,  45, 433, 434,1040,1041, 996, 787,2997,1255,4305, #   64
-2108,4609,1684,1648,5073,5074,5075,5076,5077,5078,3687,5079,4610,5080,3927,3928, #   80
-5081,3296,3432, 290,2285,1471,2187,5082,2580,2825,1303,2140,1739,1445,2691,3375, #   96
-1691,3297,4306,4307,4611, 452,3376,1182,2713,3688,3069,4308,5083,5084,5085,5086, #  112
-5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102, #  128
-5103,5104,5105,5106,5107,5108,5109,5110,5111,5112,4097,5113,5114,5115,5116,5117, #  144
-5118,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133, #  160
-5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149, #  176
-5150,5151,5152,4612,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5163,5164, #  192
-5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,1472, 598, 618, 820,1205, #  208
-1309,1412,1858,1307,1692,5176,5177,5178,5179,5180,5181,5182,1142,1452,1234,1172, #  224
-1875,2043,2149,1793,1382,2973, 925,2404,1067,1241, 960,1377,2935,1491, 919,1217, #  240
-1865,2030,1406,1499,2749,4098,5183,5184,5185,5186,5187,5188,2561,4099,3117,1804, #  256
-2049,3689,4309,3513,1663,5189,3166,3118,3298,1587,1561,3433,5190,3119,1625,2998, #  272
-3299,4613,1766,3690,2786,4614,5191,5192,5193,5194,2161,  26,3377,   2,3929,  20, #  288
-3691,  47,4100,  50,  17,  16,  35, 268,  27, 243,  42, 155,  24, 154,  29, 184, #  304
-   4,  91,  14,  92,  53, 396,  33, 289,   9,  37,  64, 620,  21,  39, 321,   5, #  320
-  12,  11,  52,  13,   3, 208, 138,   0,   7,  60, 526, 141, 151,1069, 181, 275, #  336
-1591,  83, 132,1475, 126, 331, 829,  15,  69, 160,  59,  22, 157,  55,1079, 312, #  352
- 109,  38,  23,  25,  10,  19,  79,5195,  61, 382,1124,   8,  30,5196,5197,5198, #  368
-5199,5200,5201,5202,5203,5204,5205,5206,  89,  62,  74,  34,2416, 112, 139, 196, #  384
- 271, 149,  84, 607, 131, 765,  46,  88, 153, 683,  76, 874, 101, 258,  57,  80, #  400
-  32, 364, 121,1508, 169,1547,  68, 235, 145,2999,  41, 360,3027,  70,  63,  31, #  416
-  43, 259, 262,1383,  99, 533, 194,  66,  93, 846, 217, 192,  56, 106,  58, 565, #  432
- 280, 272, 311, 256, 146,  82, 308,  71, 100, 128, 214, 655, 110, 261, 104,1140, #  448
-  54,  51,  36,  87,  67,3070, 185,2618,2936,2020,  28,1066,2390,2059,5207,5208, #  464
-5209,5210,5211,5212,5213,5214,5215,5216,4615,5217,5218,5219,5220,5221,5222,5223, #  480
-5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,5235,5236,3514,5237,5238, #  496
-5239,5240,5241,5242,5243,5244,2297,2031,4616,4310,3692,5245,3071,5246,3598,5247, #  512
-4617,3231,3515,5248,4101,4311,4618,3808,4312,4102,5249,4103,4104,3599,5250,5251, #  528
-5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267, #  544
-5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283, #  560
-5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5298,5299, #  576
-5300,5301,5302,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5313,5314,5315, #  592
-5316,5317,5318,5319,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5330,5331, #  608
-5332,5333,5334,5335,5336,5337,5338,5339,5340,5341,5342,5343,5344,5345,5346,5347, #  624
-5348,5349,5350,5351,5352,5353,5354,5355,5356,5357,5358,5359,5360,5361,5362,5363, #  640
-5364,5365,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375,5376,5377,5378,5379, #  656
-5380,5381, 363, 642,2787,2878,2788,2789,2316,3232,2317,3434,2011, 165,1942,3930, #  672
-3931,3932,3933,5382,4619,5383,4620,5384,5385,5386,5387,5388,5389,5390,5391,5392, #  688
-5393,5394,5395,5396,5397,5398,5399,5400,5401,5402,5403,5404,5405,5406,5407,5408, #  704
-5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5422,5423,5424, #  720
-5425,5426,5427,5428,5429,5430,5431,5432,5433,5434,5435,5436,5437,5438,5439,5440, #  736
-5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456, #  752
-5457,5458,5459,5460,5461,5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472, #  768
-5473,5474,5475,5476,5477,5478,5479,5480,5481,5482,5483,5484,5485,5486,5487,5488, #  784
-5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504, #  800
-5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520, #  816
-5521,5522,5523,5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536, #  832
-5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552, #  848
-5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568, #  864
-5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584, #  880
-5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600, #  896
-5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616, #  912
-5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632, #  928
-5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648, #  944
-5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664, #  960
-5665,5666,5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678,5679,5680, #  976
-5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696, #  992
-5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712, # 1008
-5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,5725,5726,5727,5728, # 1024
-5729,5730,5731,5732,5733,5734,5735,5736,5737,5738,5739,5740,5741,5742,5743,5744, # 1040
-5745,5746,5747,5748,5749,5750,5751,5752,5753,5754,5755,5756,5757,5758,5759,5760, # 1056
-5761,5762,5763,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5776, # 1072
-5777,5778,5779,5780,5781,5782,5783,5784,5785,5786,5787,5788,5789,5790,5791,5792, # 1088
-5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5808, # 1104
-5809,5810,5811,5812,5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824, # 1120
-5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840, # 1136
-5841,5842,5843,5844,5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856, # 1152
-5857,5858,5859,5860,5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872, # 1168
-5873,5874,5875,5876,5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888, # 1184
-5889,5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904, # 1200
-5905,5906,5907,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920, # 1216
-5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936, # 1232
-5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952, # 1248
-5953,5954,5955,5956,5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968, # 1264
-5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984, # 1280
-5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000, # 1296
-6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016, # 1312
-6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032, # 1328
-6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048, # 1344
-6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064, # 1360
-6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080, # 1376
-6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096, # 1392
-6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112, # 1408
-6113,6114,2044,2060,4621, 997,1235, 473,1186,4622, 920,3378,6115,6116, 379,1108, # 1424
-4313,2657,2735,3934,6117,3809, 636,3233, 573,1026,3693,3435,2974,3300,2298,4105, # 1440
- 854,2937,2463, 393,2581,2417, 539, 752,1280,2750,2480, 140,1161, 440, 708,1569, # 1456
- 665,2497,1746,1291,1523,3000, 164,1603, 847,1331, 537,1997, 486, 508,1693,2418, # 1472
-1970,2227, 878,1220, 299,1030, 969, 652,2751, 624,1137,3301,2619,  65,3302,2045, # 1488
-1761,1859,3120,1930,3694,3516, 663,1767, 852, 835,3695, 269, 767,2826,2339,1305, # 1504
- 896,1150, 770,1616,6118, 506,1502,2075,1012,2519, 775,2520,2975,2340,2938,4314, # 1520
-3028,2086,1224,1943,2286,6119,3072,4315,2240,1273,1987,3935,1557, 175, 597, 985, # 1536
-3517,2419,2521,1416,3029, 585, 938,1931,1007,1052,1932,1685,6120,3379,4316,4623, # 1552
- 804, 599,3121,1333,2128,2539,1159,1554,2032,3810, 687,2033,2904, 952, 675,1467, # 1568
-3436,6121,2241,1096,1786,2440,1543,1924, 980,1813,2228, 781,2692,1879, 728,1918, # 1584
-3696,4624, 548,1950,4625,1809,1088,1356,3303,2522,1944, 502, 972, 373, 513,2827, # 1600
- 586,2377,2391,1003,1976,1631,6122,2464,1084, 648,1776,4626,2141, 324, 962,2012, # 1616
-2177,2076,1384, 742,2178,1448,1173,1810, 222, 102, 301, 445, 125,2420, 662,2498, # 1632
- 277, 200,1476,1165,1068, 224,2562,1378,1446, 450,1880, 659, 791, 582,4627,2939, # 1648
-3936,1516,1274, 555,2099,3697,1020,1389,1526,3380,1762,1723,1787,2229, 412,2114, # 1664
-1900,2392,3518, 512,2597, 427,1925,2341,3122,1653,1686,2465,2499, 697, 330, 273, # 1680
- 380,2162, 951, 832, 780, 991,1301,3073, 965,2270,3519, 668,2523,2636,1286, 535, # 1696
-1407, 518, 671, 957,2658,2378, 267, 611,2197,3030,6123, 248,2299, 967,1799,2356, # 1712
- 850,1418,3437,1876,1256,1480,2828,1718,6124,6125,1755,1664,2405,6126,4628,2879, # 1728
-2829, 499,2179, 676,4629, 557,2329,2214,2090, 325,3234, 464, 811,3001, 992,2342, # 1744
-2481,1232,1469, 303,2242, 466,1070,2163, 603,1777,2091,4630,2752,4631,2714, 322, # 1760
-2659,1964,1768, 481,2188,1463,2330,2857,3600,2092,3031,2421,4632,2318,2070,1849, # 1776
-2598,4633,1302,2254,1668,1701,2422,3811,2905,3032,3123,2046,4106,1763,1694,4634, # 1792
-1604, 943,1724,1454, 917, 868,2215,1169,2940, 552,1145,1800,1228,1823,1955, 316, # 1808
-1080,2510, 361,1807,2830,4107,2660,3381,1346,1423,1134,4108,6127, 541,1263,1229, # 1824
-1148,2540, 545, 465,1833,2880,3438,1901,3074,2482, 816,3937, 713,1788,2500, 122, # 1840
-1575, 195,1451,2501,1111,6128, 859, 374,1225,2243,2483,4317, 390,1033,3439,3075, # 1856
-2524,1687, 266, 793,1440,2599, 946, 779, 802, 507, 897,1081, 528,2189,1292, 711, # 1872
-1866,1725,1167,1640, 753, 398,2661,1053, 246, 348,4318, 137,1024,3440,1600,2077, # 1888
-2129, 825,4319, 698, 238, 521, 187,2300,1157,2423,1641,1605,1464,1610,1097,2541, # 1904
-1260,1436, 759,2255,1814,2150, 705,3235, 409,2563,3304, 561,3033,2005,2564, 726, # 1920
-1956,2343,3698,4109, 949,3812,3813,3520,1669, 653,1379,2525, 881,2198, 632,2256, # 1936
-1027, 778,1074, 733,1957, 514,1481,2466, 554,2180, 702,3938,1606,1017,1398,6129, # 1952
-1380,3521, 921, 993,1313, 594, 449,1489,1617,1166, 768,1426,1360, 495,1794,3601, # 1968
-1177,3602,1170,4320,2344, 476, 425,3167,4635,3168,1424, 401,2662,1171,3382,1998, # 1984
-1089,4110, 477,3169, 474,6130,1909, 596,2831,1842, 494, 693,1051,1028,1207,3076, # 2000
- 606,2115, 727,2790,1473,1115, 743,3522, 630, 805,1532,4321,2021, 366,1057, 838, # 2016
- 684,1114,2142,4322,2050,1492,1892,1808,2271,3814,2424,1971,1447,1373,3305,1090, # 2032
-1536,3939,3523,3306,1455,2199, 336, 369,2331,1035, 584,2393, 902, 718,2600,6131, # 2048
-2753, 463,2151,1149,1611,2467, 715,1308,3124,1268, 343,1413,3236,1517,1347,2663, # 2064
-2093,3940,2022,1131,1553,2100,2941,1427,3441,2942,1323,2484,6132,1980, 872,2368, # 2080
-2441,2943, 320,2369,2116,1082, 679,1933,3941,2791,3815, 625,1143,2023, 422,2200, # 2096
-3816,6133, 730,1695, 356,2257,1626,2301,2858,2637,1627,1778, 937, 883,2906,2693, # 2112
-3002,1769,1086, 400,1063,1325,3307,2792,4111,3077, 456,2345,1046, 747,6134,1524, # 2128
- 884,1094,3383,1474,2164,1059, 974,1688,2181,2258,1047, 345,1665,1187, 358, 875, # 2144
-3170, 305, 660,3524,2190,1334,1135,3171,1540,1649,2542,1527, 927, 968,2793, 885, # 2160
-1972,1850, 482, 500,2638,1218,1109,1085,2543,1654,2034, 876,  78,2287,1482,1277, # 2176
- 861,1675,1083,1779, 724,2754, 454, 397,1132,1612,2332, 893, 672,1237, 257,2259, # 2192
-2370, 135,3384, 337,2244, 547, 352, 340, 709,2485,1400, 788,1138,2511, 540, 772, # 2208
-1682,2260,2272,2544,2013,1843,1902,4636,1999,1562,2288,4637,2201,1403,1533, 407, # 2224
- 576,3308,1254,2071, 978,3385, 170, 136,1201,3125,2664,3172,2394, 213, 912, 873, # 2240
-3603,1713,2202, 699,3604,3699, 813,3442, 493, 531,1054, 468,2907,1483, 304, 281, # 2256
-4112,1726,1252,2094, 339,2319,2130,2639, 756,1563,2944, 748, 571,2976,1588,2425, # 2272
-2715,1851,1460,2426,1528,1392,1973,3237, 288,3309, 685,3386, 296, 892,2716,2216, # 2288
-1570,2245, 722,1747,2217, 905,3238,1103,6135,1893,1441,1965, 251,1805,2371,3700, # 2304
-2601,1919,1078,  75,2182,1509,1592,1270,2640,4638,2152,6136,3310,3817, 524, 706, # 2320
-1075, 292,3818,1756,2602, 317,  98,3173,3605,3525,1844,2218,3819,2502, 814, 567, # 2336
- 385,2908,1534,6137, 534,1642,3239, 797,6138,1670,1529, 953,4323, 188,1071, 538, # 2352
- 178, 729,3240,2109,1226,1374,2000,2357,2977, 731,2468,1116,2014,2051,6139,1261, # 2368
-1593, 803,2859,2736,3443, 556, 682, 823,1541,6140,1369,2289,1706,2794, 845, 462, # 2384
-2603,2665,1361, 387, 162,2358,1740, 739,1770,1720,1304,1401,3241,1049, 627,1571, # 2400
-2427,3526,1877,3942,1852,1500, 431,1910,1503, 677, 297,2795, 286,1433,1038,1198, # 2416
-2290,1133,1596,4113,4639,2469,1510,1484,3943,6141,2442, 108, 712,4640,2372, 866, # 2432
-3701,2755,3242,1348, 834,1945,1408,3527,2395,3243,1811, 824, 994,1179,2110,1548, # 2448
-1453, 790,3003, 690,4324,4325,2832,2909,3820,1860,3821, 225,1748, 310, 346,1780, # 2464
-2470, 821,1993,2717,2796, 828, 877,3528,2860,2471,1702,2165,2910,2486,1789, 453, # 2480
- 359,2291,1676,  73,1164,1461,1127,3311, 421, 604, 314,1037, 589, 116,2487, 737, # 2496
- 837,1180, 111, 244, 735,6142,2261,1861,1362, 986, 523, 418, 581,2666,3822, 103, # 2512
- 855, 503,1414,1867,2488,1091, 657,1597, 979, 605,1316,4641,1021,2443,2078,2001, # 2528
-1209,  96, 587,2166,1032, 260,1072,2153, 173,  94, 226,3244, 819,2006,4642,4114, # 2544
-2203, 231,1744, 782,  97,2667, 786,3387, 887, 391, 442,2219,4326,1425,6143,2694, # 2560
- 633,1544,1202, 483,2015, 592,2052,1958,2472,1655, 419, 129,4327,3444,3312,1714, # 2576
-1257,3078,4328,1518,1098, 865,1310,1019,1885,1512,1734, 469,2444, 148, 773, 436, # 2592
-1815,1868,1128,1055,4329,1245,2756,3445,2154,1934,1039,4643, 579,1238, 932,2320, # 2608
- 353, 205, 801, 115,2428, 944,2321,1881, 399,2565,1211, 678, 766,3944, 335,2101, # 2624
-1459,1781,1402,3945,2737,2131,1010, 844, 981,1326,1013, 550,1816,1545,2620,1335, # 2640
-1008, 371,2881, 936,1419,1613,3529,1456,1395,2273,1834,2604,1317,2738,2503, 416, # 2656
-1643,4330, 806,1126, 229, 591,3946,1314,1981,1576,1837,1666, 347,1790, 977,3313, # 2672
- 764,2861,1853, 688,2429,1920,1462,  77, 595, 415,2002,3034, 798,1192,4115,6144, # 2688
-2978,4331,3035,2695,2582,2072,2566, 430,2430,1727, 842,1396,3947,3702, 613, 377, # 2704
- 278, 236,1417,3388,3314,3174, 757,1869, 107,3530,6145,1194, 623,2262, 207,1253, # 2720
-2167,3446,3948, 492,1117,1935, 536,1838,2757,1246,4332, 696,2095,2406,1393,1572, # 2736
-3175,1782, 583, 190, 253,1390,2230, 830,3126,3389, 934,3245,1703,1749,2979,1870, # 2752
-2545,1656,2204, 869,2346,4116,3176,1817, 496,1764,4644, 942,1504, 404,1903,1122, # 2768
-1580,3606,2945,1022, 515, 372,1735, 955,2431,3036,6146,2797,1110,2302,2798, 617, # 2784
-6147, 441, 762,1771,3447,3607,3608,1904, 840,3037,  86, 939,1385, 572,1370,2445, # 2800
-1336, 114,3703, 898, 294, 203,3315, 703,1583,2274, 429, 961,4333,1854,1951,3390, # 2816
-2373,3704,4334,1318,1381, 966,1911,2322,1006,1155, 309, 989, 458,2718,1795,1372, # 2832
-1203, 252,1689,1363,3177, 517,1936, 168,1490, 562, 193,3823,1042,4117,1835, 551, # 2848
- 470,4645, 395, 489,3448,1871,1465,2583,2641, 417,1493, 279,1295, 511,1236,1119, # 2864
-  72,1231,1982,1812,3004, 871,1564, 984,3449,1667,2696,2096,4646,2347,2833,1673, # 2880
-3609, 695,3246,2668, 807,1183,4647, 890, 388,2333,1801,1457,2911,1765,1477,1031, # 2896
-3316,3317,1278,3391,2799,2292,2526, 163,3450,4335,2669,1404,1802,6148,2323,2407, # 2912
-1584,1728,1494,1824,1269, 298, 909,3318,1034,1632, 375, 776,1683,2061, 291, 210, # 2928
-1123, 809,1249,1002,2642,3038, 206,1011,2132, 144, 975, 882,1565, 342, 667, 754, # 2944
-1442,2143,1299,2303,2062, 447, 626,2205,1221,2739,2912,1144,1214,2206,2584, 760, # 2960
-1715, 614, 950,1281,2670,2621, 810, 577,1287,2546,4648, 242,2168, 250,2643, 691, # 2976
- 123,2644, 647, 313,1029, 689,1357,2946,1650, 216, 771,1339,1306, 808,2063, 549, # 2992
- 913,1371,2913,2914,6149,1466,1092,1174,1196,1311,2605,2396,1783,1796,3079, 406, # 3008
-2671,2117,3949,4649, 487,1825,2220,6150,2915, 448,2348,1073,6151,2397,1707, 130, # 3024
- 900,1598, 329, 176,1959,2527,1620,6152,2275,4336,3319,1983,2191,3705,3610,2155, # 3040
-3706,1912,1513,1614,6153,1988, 646, 392,2304,1589,3320,3039,1826,1239,1352,1340, # 3056
-2916, 505,2567,1709,1437,2408,2547, 906,6154,2672, 384,1458,1594,1100,1329, 710, # 3072
- 423,3531,2064,2231,2622,1989,2673,1087,1882, 333, 841,3005,1296,2882,2379, 580, # 3088
-1937,1827,1293,2585, 601, 574, 249,1772,4118,2079,1120, 645, 901,1176,1690, 795, # 3104
-2207, 478,1434, 516,1190,1530, 761,2080, 930,1264, 355, 435,1552, 644,1791, 987, # 3120
- 220,1364,1163,1121,1538, 306,2169,1327,1222, 546,2645, 218, 241, 610,1704,3321, # 3136
-1984,1839,1966,2528, 451,6155,2586,3707,2568, 907,3178, 254,2947, 186,1845,4650, # 3152
- 745, 432,1757, 428,1633, 888,2246,2221,2489,3611,2118,1258,1265, 956,3127,1784, # 3168
-4337,2490, 319, 510, 119, 457,3612, 274,2035,2007,4651,1409,3128, 970,2758, 590, # 3184
-2800, 661,2247,4652,2008,3950,1420,1549,3080,3322,3951,1651,1375,2111, 485,2491, # 3200
-1429,1156,6156,2548,2183,1495, 831,1840,2529,2446, 501,1657, 307,1894,3247,1341, # 3216
- 666, 899,2156,1539,2549,1559, 886, 349,2208,3081,2305,1736,3824,2170,2759,1014, # 3232
-1913,1386, 542,1397,2948, 490, 368, 716, 362, 159, 282,2569,1129,1658,1288,1750, # 3248
-2674, 276, 649,2016, 751,1496, 658,1818,1284,1862,2209,2087,2512,3451, 622,2834, # 3264
- 376, 117,1060,2053,1208,1721,1101,1443, 247,1250,3179,1792,3952,2760,2398,3953, # 3280
-6157,2144,3708, 446,2432,1151,2570,3452,2447,2761,2835,1210,2448,3082, 424,2222, # 3296
-1251,2449,2119,2836, 504,1581,4338, 602, 817, 857,3825,2349,2306, 357,3826,1470, # 3312
-1883,2883, 255, 958, 929,2917,3248, 302,4653,1050,1271,1751,2307,1952,1430,2697, # 3328
-2719,2359, 354,3180, 777, 158,2036,4339,1659,4340,4654,2308,2949,2248,1146,2232, # 3344
-3532,2720,1696,2623,3827,6158,3129,1550,2698,1485,1297,1428, 637, 931,2721,2145, # 3360
- 914,2550,2587,  81,2450, 612, 827,2646,1242,4655,1118,2884, 472,1855,3181,3533, # 3376
-3534, 569,1353,2699,1244,1758,2588,4119,2009,2762,2171,3709,1312,1531,6159,1152, # 3392
-1938, 134,1830, 471,3710,2276,1112,1535,3323,3453,3535, 982,1337,2950, 488, 826, # 3408
- 674,1058,1628,4120,2017, 522,2399, 211, 568,1367,3454, 350, 293,1872,1139,3249, # 3424
-1399,1946,3006,1300,2360,3324, 588, 736,6160,2606, 744, 669,3536,3828,6161,1358, # 3440
- 199, 723, 848, 933, 851,1939,1505,1514,1338,1618,1831,4656,1634,3613, 443,2740, # 3456
-3829, 717,1947, 491,1914,6162,2551,1542,4121,1025,6163,1099,1223, 198,3040,2722, # 3472
- 370, 410,1905,2589, 998,1248,3182,2380, 519,1449,4122,1710, 947, 928,1153,4341, # 3488
-2277, 344,2624,1511, 615, 105, 161,1212,1076,1960,3130,2054,1926,1175,1906,2473, # 3504
- 414,1873,2801,6164,2309, 315,1319,3325, 318,2018,2146,2157, 963, 631, 223,4342, # 3520
-4343,2675, 479,3711,1197,2625,3712,2676,2361,6165,4344,4123,6166,2451,3183,1886, # 3536
-2184,1674,1330,1711,1635,1506, 799, 219,3250,3083,3954,1677,3713,3326,2081,3614, # 3552
-1652,2073,4657,1147,3041,1752, 643,1961, 147,1974,3955,6167,1716,2037, 918,3007, # 3568
-1994, 120,1537, 118, 609,3184,4345, 740,3455,1219, 332,1615,3830,6168,1621,2980, # 3584
-1582, 783, 212, 553,2350,3714,1349,2433,2082,4124, 889,6169,2310,1275,1410, 973, # 3600
- 166,1320,3456,1797,1215,3185,2885,1846,2590,2763,4658, 629, 822,3008, 763, 940, # 3616
-1990,2862, 439,2409,1566,1240,1622, 926,1282,1907,2764, 654,2210,1607, 327,1130, # 3632
-3956,1678,1623,6170,2434,2192, 686, 608,3831,3715, 903,3957,3042,6171,2741,1522, # 3648
-1915,1105,1555,2552,1359, 323,3251,4346,3457, 738,1354,2553,2311,2334,1828,2003, # 3664
-3832,1753,2351,1227,6172,1887,4125,1478,6173,2410,1874,1712,1847, 520,1204,2607, # 3680
- 264,4659, 836,2677,2102, 600,4660,3833,2278,3084,6174,4347,3615,1342, 640, 532, # 3696
- 543,2608,1888,2400,2591,1009,4348,1497, 341,1737,3616,2723,1394, 529,3252,1321, # 3712
- 983,4661,1515,2120, 971,2592, 924, 287,1662,3186,4349,2700,4350,1519, 908,1948, # 3728
-2452, 156, 796,1629,1486,2223,2055, 694,4126,1259,1036,3392,1213,2249,2742,1889, # 3744
-1230,3958,1015, 910, 408, 559,3617,4662, 746, 725, 935,4663,3959,3009,1289, 563, # 3760
- 867,4664,3960,1567,2981,2038,2626, 988,2263,2381,4351, 143,2374, 704,1895,6175, # 3776
-1188,3716,2088, 673,3085,2362,4352, 484,1608,1921,2765,2918, 215, 904,3618,3537, # 3792
- 894, 509, 976,3043,2701,3961,4353,2837,2982, 498,6176,6177,1102,3538,1332,3393, # 3808
-1487,1636,1637, 233, 245,3962, 383, 650, 995,3044, 460,1520,1206,2352, 749,3327, # 3824
- 530, 700, 389,1438,1560,1773,3963,2264, 719,2951,2724,3834, 870,1832,1644,1000, # 3840
- 839,2474,3717, 197,1630,3394, 365,2886,3964,1285,2133, 734, 922, 818,1106, 732, # 3856
- 480,2083,1774,3458, 923,2279,1350, 221,3086,  85,2233,2234,3835,1585,3010,2147, # 3872
-1387,1705,2382,1619,2475, 133, 239,2802,1991,1016,2084,2383, 411,2838,1113, 651, # 3888
-1985,1160,3328, 990,1863,3087,1048,1276,2647, 265,2627,1599,3253,2056, 150, 638, # 3904
-2019, 656, 853, 326,1479, 680,1439,4354,1001,1759, 413,3459,3395,2492,1431, 459, # 3920
-4355,1125,3329,2265,1953,1450,2065,2863, 849, 351,2678,3131,3254,3255,1104,1577, # 3936
- 227,1351,1645,2453,2193,1421,2887, 812,2121, 634,  95,2435, 201,2312,4665,1646, # 3952
-1671,2743,1601,2554,2702,2648,2280,1315,1366,2089,3132,1573,3718,3965,1729,1189, # 3968
- 328,2679,1077,1940,1136, 558,1283, 964,1195, 621,2074,1199,1743,3460,3619,1896, # 3984
-1916,1890,3836,2952,1154,2112,1064, 862, 378,3011,2066,2113,2803,1568,2839,6178, # 4000
-3088,2919,1941,1660,2004,1992,2194, 142, 707,1590,1708,1624,1922,1023,1836,1233, # 4016
-1004,2313, 789, 741,3620,6179,1609,2411,1200,4127,3719,3720,4666,2057,3721, 593, # 4032
-2840, 367,2920,1878,6180,3461,1521, 628,1168, 692,2211,2649, 300, 720,2067,2571, # 4048
-2953,3396, 959,2504,3966,3539,3462,1977, 701,6181, 954,1043, 800, 681, 183,3722, # 4064
-1803,1730,3540,4128,2103, 815,2314, 174, 467, 230,2454,1093,2134, 755,3541,3397, # 4080
-1141,1162,6182,1738,2039, 270,3256,2513,1005,1647,2185,3837, 858,1679,1897,1719, # 4096
-2954,2324,1806, 402, 670, 167,4129,1498,2158,2104, 750,6183, 915, 189,1680,1551, # 4112
- 455,4356,1501,2455, 405,1095,2955, 338,1586,1266,1819, 570, 641,1324, 237,1556, # 4128
-2650,1388,3723,6184,1368,2384,1343,1978,3089,2436, 879,3724, 792,1191, 758,3012, # 4144
-1411,2135,1322,4357, 240,4667,1848,3725,1574,6185, 420,3045,1546,1391, 714,4358, # 4160
-1967, 941,1864, 863, 664, 426, 560,1731,2680,1785,2864,1949,2363, 403,3330,1415, # 4176
-1279,2136,1697,2335, 204, 721,2097,3838,  90,6186,2085,2505, 191,3967, 124,2148, # 4192
-1376,1798,1178,1107,1898,1405, 860,4359,1243,1272,2375,2983,1558,2456,1638, 113, # 4208
-3621, 578,1923,2609, 880, 386,4130, 784,2186,2266,1422,2956,2172,1722, 497, 263, # 4224
-2514,1267,2412,2610, 177,2703,3542, 774,1927,1344, 616,1432,1595,1018, 172,4360, # 4240
-2325, 911,4361, 438,1468,3622, 794,3968,2024,2173,1681,1829,2957, 945, 895,3090, # 4256
- 575,2212,2476, 475,2401,2681, 785,2744,1745,2293,2555,1975,3133,2865, 394,4668, # 4272
-3839, 635,4131, 639, 202,1507,2195,2766,1345,1435,2572,3726,1908,1184,1181,2457, # 4288
-3727,3134,4362, 843,2611, 437, 916,4669, 234, 769,1884,3046,3047,3623, 833,6187, # 4304
-1639,2250,2402,1355,1185,2010,2047, 999, 525,1732,1290,1488,2612, 948,1578,3728, # 4320
-2413,2477,1216,2725,2159, 334,3840,1328,3624,2921,1525,4132, 564,1056, 891,4363, # 4336
-1444,1698,2385,2251,3729,1365,2281,2235,1717,6188, 864,3841,2515, 444, 527,2767, # 4352
-2922,3625, 544, 461,6189, 566, 209,2437,3398,2098,1065,2068,3331,3626,3257,2137, # 4368  #last 512
-#Everything below is of no interest for detection purpose
-2138,2122,3730,2888,1995,1820,1044,6190,6191,6192,6193,6194,6195,6196,6197,6198, # 4384
-6199,6200,6201,6202,6203,6204,6205,4670,6206,6207,6208,6209,6210,6211,6212,6213, # 4400
-6214,6215,6216,6217,6218,6219,6220,6221,6222,6223,6224,6225,6226,6227,6228,6229, # 4416
-6230,6231,6232,6233,6234,6235,6236,6237,3187,6238,6239,3969,6240,6241,6242,6243, # 4432
-6244,4671,6245,6246,4672,6247,6248,4133,6249,6250,4364,6251,2923,2556,2613,4673, # 4448
-4365,3970,6252,6253,6254,6255,4674,6256,6257,6258,2768,2353,4366,4675,4676,3188, # 4464
-4367,3463,6259,4134,4677,4678,6260,2267,6261,3842,3332,4368,3543,6262,6263,6264, # 4480
-3013,1954,1928,4135,4679,6265,6266,2478,3091,6267,4680,4369,6268,6269,1699,6270, # 4496
-3544,4136,4681,6271,4137,6272,4370,2804,6273,6274,2593,3971,3972,4682,6275,2236, # 4512
-4683,6276,6277,4684,6278,6279,4138,3973,4685,6280,6281,3258,6282,6283,6284,6285, # 4528
-3974,4686,2841,3975,6286,6287,3545,6288,6289,4139,4687,4140,6290,4141,6291,4142, # 4544
-6292,6293,3333,6294,6295,6296,4371,6297,3399,6298,6299,4372,3976,6300,6301,6302, # 4560
-4373,6303,6304,3843,3731,6305,4688,4374,6306,6307,3259,2294,6308,3732,2530,4143, # 4576
-6309,4689,6310,6311,6312,3048,6313,6314,4690,3733,2237,6315,6316,2282,3334,6317, # 4592
-6318,3844,6319,6320,4691,6321,3400,4692,6322,4693,6323,3049,6324,4375,6325,3977, # 4608
-6326,6327,6328,3546,6329,4694,3335,6330,4695,4696,6331,6332,6333,6334,4376,3978, # 4624
-6335,4697,3979,4144,6336,3980,4698,6337,6338,6339,6340,6341,4699,4700,4701,6342, # 4640
-6343,4702,6344,6345,4703,6346,6347,4704,6348,4705,4706,3135,6349,4707,6350,4708, # 4656
-6351,4377,6352,4709,3734,4145,6353,2506,4710,3189,6354,3050,4711,3981,6355,3547, # 4672
-3014,4146,4378,3735,2651,3845,3260,3136,2224,1986,6356,3401,6357,4712,2594,3627, # 4688
-3137,2573,3736,3982,4713,3628,4714,4715,2682,3629,4716,6358,3630,4379,3631,6359, # 4704
-6360,6361,3983,6362,6363,6364,6365,4147,3846,4717,6366,6367,3737,2842,6368,4718, # 4720
-2628,6369,3261,6370,2386,6371,6372,3738,3984,4719,3464,4720,3402,6373,2924,3336, # 4736
-4148,2866,6374,2805,3262,4380,2704,2069,2531,3138,2806,2984,6375,2769,6376,4721, # 4752
-4722,3403,6377,6378,3548,6379,6380,2705,3092,1979,4149,2629,3337,2889,6381,3338, # 4768
-4150,2557,3339,4381,6382,3190,3263,3739,6383,4151,4723,4152,2558,2574,3404,3191, # 4784
-6384,6385,4153,6386,4724,4382,6387,6388,4383,6389,6390,4154,6391,4725,3985,6392, # 4800
-3847,4155,6393,6394,6395,6396,6397,3465,6398,4384,6399,6400,6401,6402,6403,6404, # 4816
-4156,6405,6406,6407,6408,2123,6409,6410,2326,3192,4726,6411,6412,6413,6414,4385, # 4832
-4157,6415,6416,4158,6417,3093,3848,6418,3986,6419,6420,3849,6421,6422,6423,4159, # 4848
-6424,6425,4160,6426,3740,6427,6428,6429,6430,3987,6431,4727,6432,2238,6433,6434, # 4864
-4386,3988,6435,6436,3632,6437,6438,2843,6439,6440,6441,6442,3633,6443,2958,6444, # 4880
-6445,3466,6446,2364,4387,3850,6447,4388,2959,3340,6448,3851,6449,4728,6450,6451, # 4896
-3264,4729,6452,3193,6453,4389,4390,2706,3341,4730,6454,3139,6455,3194,6456,3051, # 4912
-2124,3852,1602,4391,4161,3853,1158,3854,4162,3989,4392,3990,4731,4732,4393,2040, # 4928
-4163,4394,3265,6457,2807,3467,3855,6458,6459,6460,3991,3468,4733,4734,6461,3140, # 4944
-2960,6462,4735,6463,6464,6465,6466,4736,4737,4738,4739,6467,6468,4164,2403,3856, # 4960
-6469,6470,2770,2844,6471,4740,6472,6473,6474,6475,6476,6477,6478,3195,6479,4741, # 4976
-4395,6480,2867,6481,4742,2808,6482,2493,4165,6483,6484,6485,6486,2295,4743,6487, # 4992
-6488,6489,3634,6490,6491,6492,6493,6494,6495,6496,2985,4744,6497,6498,4745,6499, # 5008
-6500,2925,3141,4166,6501,6502,4746,6503,6504,4747,6505,6506,6507,2890,6508,6509, # 5024
-6510,6511,6512,6513,6514,6515,6516,6517,6518,6519,3469,4167,6520,6521,6522,4748, # 5040
-4396,3741,4397,4749,4398,3342,2125,4750,6523,4751,4752,4753,3052,6524,2961,4168, # 5056
-6525,4754,6526,4755,4399,2926,4169,6527,3857,6528,4400,4170,6529,4171,6530,6531, # 5072
-2595,6532,6533,6534,6535,3635,6536,6537,6538,6539,6540,6541,6542,4756,6543,6544, # 5088
-6545,6546,6547,6548,4401,6549,6550,6551,6552,4402,3405,4757,4403,6553,6554,6555, # 5104
-4172,3742,6556,6557,6558,3992,3636,6559,6560,3053,2726,6561,3549,4173,3054,4404, # 5120
-6562,6563,3993,4405,3266,3550,2809,4406,6564,6565,6566,4758,4759,6567,3743,6568, # 5136
-4760,3744,4761,3470,6569,6570,6571,4407,6572,3745,4174,6573,4175,2810,4176,3196, # 5152
-4762,6574,4177,6575,6576,2494,2891,3551,6577,6578,3471,6579,4408,6580,3015,3197, # 5168
-6581,3343,2532,3994,3858,6582,3094,3406,4409,6583,2892,4178,4763,4410,3016,4411, # 5184
-6584,3995,3142,3017,2683,6585,4179,6586,6587,4764,4412,6588,6589,4413,6590,2986, # 5200
-6591,2962,3552,6592,2963,3472,6593,6594,4180,4765,6595,6596,2225,3267,4414,6597, # 5216
-3407,3637,4766,6598,6599,3198,6600,4415,6601,3859,3199,6602,3473,4767,2811,4416, # 5232
-1856,3268,3200,2575,3996,3997,3201,4417,6603,3095,2927,6604,3143,6605,2268,6606, # 5248
-3998,3860,3096,2771,6607,6608,3638,2495,4768,6609,3861,6610,3269,2745,4769,4181, # 5264
-3553,6611,2845,3270,6612,6613,6614,3862,6615,6616,4770,4771,6617,3474,3999,4418, # 5280
-4419,6618,3639,3344,6619,4772,4182,6620,2126,6621,6622,6623,4420,4773,6624,3018, # 5296
-6625,4774,3554,6626,4183,2025,3746,6627,4184,2707,6628,4421,4422,3097,1775,4185, # 5312
-3555,6629,6630,2868,6631,6632,4423,6633,6634,4424,2414,2533,2928,6635,4186,2387, # 5328
-6636,4775,6637,4187,6638,1891,4425,3202,3203,6639,6640,4776,6641,3345,6642,6643, # 5344
-3640,6644,3475,3346,3641,4000,6645,3144,6646,3098,2812,4188,3642,3204,6647,3863, # 5360
-3476,6648,3864,6649,4426,4001,6650,6651,6652,2576,6653,4189,4777,6654,6655,6656, # 5376
-2846,6657,3477,3205,4002,6658,4003,6659,3347,2252,6660,6661,6662,4778,6663,6664, # 5392
-6665,6666,6667,6668,6669,4779,4780,2048,6670,3478,3099,6671,3556,3747,4004,6672, # 5408
-6673,6674,3145,4005,3748,6675,6676,6677,6678,6679,3408,6680,6681,6682,6683,3206, # 5424
-3207,6684,6685,4781,4427,6686,4782,4783,4784,6687,6688,6689,4190,6690,6691,3479, # 5440
-6692,2746,6693,4428,6694,6695,6696,6697,6698,6699,4785,6700,6701,3208,2727,6702, # 5456
-3146,6703,6704,3409,2196,6705,4429,6706,6707,6708,2534,1996,6709,6710,6711,2747, # 5472
-6712,6713,6714,4786,3643,6715,4430,4431,6716,3557,6717,4432,4433,6718,6719,6720, # 5488
-6721,3749,6722,4006,4787,6723,6724,3644,4788,4434,6725,6726,4789,2772,6727,6728, # 5504
-6729,6730,6731,2708,3865,2813,4435,6732,6733,4790,4791,3480,6734,6735,6736,6737, # 5520
-4436,3348,6738,3410,4007,6739,6740,4008,6741,6742,4792,3411,4191,6743,6744,6745, # 5536
-6746,6747,3866,6748,3750,6749,6750,6751,6752,6753,6754,6755,3867,6756,4009,6757, # 5552
-4793,4794,6758,2814,2987,6759,6760,6761,4437,6762,6763,6764,6765,3645,6766,6767, # 5568
-3481,4192,6768,3751,6769,6770,2174,6771,3868,3752,6772,6773,6774,4193,4795,4438, # 5584
-3558,4796,4439,6775,4797,6776,6777,4798,6778,4799,3559,4800,6779,6780,6781,3482, # 5600
-6782,2893,6783,6784,4194,4801,4010,6785,6786,4440,6787,4011,6788,6789,6790,6791, # 5616
-6792,6793,4802,6794,6795,6796,4012,6797,6798,6799,6800,3349,4803,3483,6801,4804, # 5632
-4195,6802,4013,6803,6804,4196,6805,4014,4015,6806,2847,3271,2848,6807,3484,6808, # 5648
-6809,6810,4441,6811,4442,4197,4443,3272,4805,6812,3412,4016,1579,6813,6814,4017, # 5664
-6815,3869,6816,2964,6817,4806,6818,6819,4018,3646,6820,6821,4807,4019,4020,6822, # 5680
-6823,3560,6824,6825,4021,4444,6826,4198,6827,6828,4445,6829,6830,4199,4808,6831, # 5696
-6832,6833,3870,3019,2458,6834,3753,3413,3350,6835,4809,3871,4810,3561,4446,6836, # 5712
-6837,4447,4811,4812,6838,2459,4448,6839,4449,6840,6841,4022,3872,6842,4813,4814, # 5728
-6843,6844,4815,4200,4201,4202,6845,4023,6846,6847,4450,3562,3873,6848,6849,4816, # 5744
-4817,6850,4451,4818,2139,6851,3563,6852,6853,3351,6854,6855,3352,4024,2709,3414, # 5760
-4203,4452,6856,4204,6857,6858,3874,3875,6859,6860,4819,6861,6862,6863,6864,4453, # 5776
-3647,6865,6866,4820,6867,6868,6869,6870,4454,6871,2869,6872,6873,4821,6874,3754, # 5792
-6875,4822,4205,6876,6877,6878,3648,4206,4455,6879,4823,6880,4824,3876,6881,3055, # 5808
-4207,6882,3415,6883,6884,6885,4208,4209,6886,4210,3353,6887,3354,3564,3209,3485, # 5824
-2652,6888,2728,6889,3210,3755,6890,4025,4456,6891,4825,6892,6893,6894,6895,4211, # 5840
-6896,6897,6898,4826,6899,6900,4212,6901,4827,6902,2773,3565,6903,4828,6904,6905, # 5856
-6906,6907,3649,3650,6908,2849,3566,6909,3567,3100,6910,6911,6912,6913,6914,6915, # 5872
-4026,6916,3355,4829,3056,4457,3756,6917,3651,6918,4213,3652,2870,6919,4458,6920, # 5888
-2438,6921,6922,3757,2774,4830,6923,3356,4831,4832,6924,4833,4459,3653,2507,6925, # 5904
-4834,2535,6926,6927,3273,4027,3147,6928,3568,6929,6930,6931,4460,6932,3877,4461, # 5920
-2729,3654,6933,6934,6935,6936,2175,4835,2630,4214,4028,4462,4836,4215,6937,3148, # 5936
-4216,4463,4837,4838,4217,6938,6939,2850,4839,6940,4464,6941,6942,6943,4840,6944, # 5952
-4218,3274,4465,6945,6946,2710,6947,4841,4466,6948,6949,2894,6950,6951,4842,6952, # 5968
-4219,3057,2871,6953,6954,6955,6956,4467,6957,2711,6958,6959,6960,3275,3101,4843, # 5984
-6961,3357,3569,6962,4844,6963,6964,4468,4845,3570,6965,3102,4846,3758,6966,4847, # 6000
-3878,4848,4849,4029,6967,2929,3879,4850,4851,6968,6969,1733,6970,4220,6971,6972, # 6016
-6973,6974,6975,6976,4852,6977,6978,6979,6980,6981,6982,3759,6983,6984,6985,3486, # 6032
-3487,6986,3488,3416,6987,6988,6989,6990,6991,6992,6993,6994,6995,6996,6997,4853, # 6048
-6998,6999,4030,7000,7001,3211,7002,7003,4221,7004,7005,3571,4031,7006,3572,7007, # 6064
-2614,4854,2577,7008,7009,2965,3655,3656,4855,2775,3489,3880,4222,4856,3881,4032, # 6080
-3882,3657,2730,3490,4857,7010,3149,7011,4469,4858,2496,3491,4859,2283,7012,7013, # 6096
-7014,2365,4860,4470,7015,7016,3760,7017,7018,4223,1917,7019,7020,7021,4471,7022, # 6112
-2776,4472,7023,7024,7025,7026,4033,7027,3573,4224,4861,4034,4862,7028,7029,1929, # 6128
-3883,4035,7030,4473,3058,7031,2536,3761,3884,7032,4036,7033,2966,2895,1968,4474, # 6144
-3276,4225,3417,3492,4226,2105,7034,7035,1754,2596,3762,4227,4863,4475,3763,4864, # 6160
-3764,2615,2777,3103,3765,3658,3418,4865,2296,3766,2815,7036,7037,7038,3574,2872, # 6176
-3277,4476,7039,4037,4477,7040,7041,4038,7042,7043,7044,7045,7046,7047,2537,7048, # 6192
-7049,7050,7051,7052,7053,7054,4478,7055,7056,3767,3659,4228,3575,7057,7058,4229, # 6208
-7059,7060,7061,3660,7062,3212,7063,3885,4039,2460,7064,7065,7066,7067,7068,7069, # 6224
-7070,7071,7072,7073,7074,4866,3768,4867,7075,7076,7077,7078,4868,3358,3278,2653, # 6240
-7079,7080,4479,3886,7081,7082,4869,7083,7084,7085,7086,7087,7088,2538,7089,7090, # 6256
-7091,4040,3150,3769,4870,4041,2896,3359,4230,2930,7092,3279,7093,2967,4480,3213, # 6272
-4481,3661,7094,7095,7096,7097,7098,7099,7100,7101,7102,2461,3770,7103,7104,4231, # 6288
-3151,7105,7106,7107,4042,3662,7108,7109,4871,3663,4872,4043,3059,7110,7111,7112, # 6304
-3493,2988,7113,4873,7114,7115,7116,3771,4874,7117,7118,4232,4875,7119,3576,2336, # 6320
-4876,7120,4233,3419,4044,4877,4878,4482,4483,4879,4484,4234,7121,3772,4880,1045, # 6336
-3280,3664,4881,4882,7122,7123,7124,7125,4883,7126,2778,7127,4485,4486,7128,4884, # 6352
-3214,3887,7129,7130,3215,7131,4885,4045,7132,7133,4046,7134,7135,7136,7137,7138, # 6368
-7139,7140,7141,7142,7143,4235,7144,4886,7145,7146,7147,4887,7148,7149,7150,4487, # 6384
-4047,4488,7151,7152,4888,4048,2989,3888,7153,3665,7154,4049,7155,7156,7157,7158, # 6400
-7159,7160,2931,4889,4890,4489,7161,2631,3889,4236,2779,7162,7163,4891,7164,3060, # 6416
-7165,1672,4892,7166,4893,4237,3281,4894,7167,7168,3666,7169,3494,7170,7171,4050, # 6432
-7172,7173,3104,3360,3420,4490,4051,2684,4052,7174,4053,7175,7176,7177,2253,4054, # 6448
-7178,7179,4895,7180,3152,3890,3153,4491,3216,7181,7182,7183,2968,4238,4492,4055, # 6464
-7184,2990,7185,2479,7186,7187,4493,7188,7189,7190,7191,7192,4896,7193,4897,2969, # 6480
-4494,4898,7194,3495,7195,7196,4899,4495,7197,3105,2731,7198,4900,7199,7200,7201, # 6496
-4056,7202,3361,7203,7204,4496,4901,4902,7205,4497,7206,7207,2315,4903,7208,4904, # 6512
-7209,4905,2851,7210,7211,3577,7212,3578,4906,7213,4057,3667,4907,7214,4058,2354, # 6528
-3891,2376,3217,3773,7215,7216,7217,7218,7219,4498,7220,4908,3282,2685,7221,3496, # 6544
-4909,2632,3154,4910,7222,2337,7223,4911,7224,7225,7226,4912,4913,3283,4239,4499, # 6560
-7227,2816,7228,7229,7230,7231,7232,7233,7234,4914,4500,4501,7235,7236,7237,2686, # 6576
-7238,4915,7239,2897,4502,7240,4503,7241,2516,7242,4504,3362,3218,7243,7244,7245, # 6592
-4916,7246,7247,4505,3363,7248,7249,7250,7251,3774,4506,7252,7253,4917,7254,7255, # 6608
-3284,2991,4918,4919,3219,3892,4920,3106,3497,4921,7256,7257,7258,4922,7259,4923, # 6624
-3364,4507,4508,4059,7260,4240,3498,7261,7262,4924,7263,2992,3893,4060,3220,7264, # 6640
-7265,7266,7267,7268,7269,4509,3775,7270,2817,7271,4061,4925,4510,3776,7272,4241, # 6656
-4511,3285,7273,7274,3499,7275,7276,7277,4062,4512,4926,7278,3107,3894,7279,7280, # 6672
-4927,7281,4513,7282,7283,3668,7284,7285,4242,4514,4243,7286,2058,4515,4928,4929, # 6688
-4516,7287,3286,4244,7288,4517,7289,7290,7291,3669,7292,7293,4930,4931,4932,2355, # 6704
-4933,7294,2633,4518,7295,4245,7296,7297,4519,7298,7299,4520,4521,4934,7300,4246, # 6720
-4522,7301,7302,7303,3579,7304,4247,4935,7305,4936,7306,7307,7308,7309,3777,7310, # 6736
-4523,7311,7312,7313,4248,3580,7314,4524,3778,4249,7315,3581,7316,3287,7317,3221, # 6752
-7318,4937,7319,7320,7321,7322,7323,7324,4938,4939,7325,4525,7326,7327,7328,4063, # 6768
-7329,7330,4940,7331,7332,4941,7333,4526,7334,3500,2780,1741,4942,2026,1742,7335, # 6784
-7336,3582,4527,2388,7337,7338,7339,4528,7340,4250,4943,7341,7342,7343,4944,7344, # 6800
-7345,7346,3020,7347,4945,7348,7349,7350,7351,3895,7352,3896,4064,3897,7353,7354, # 6816
-7355,4251,7356,7357,3898,7358,3779,7359,3780,3288,7360,7361,4529,7362,4946,4530, # 6832
-2027,7363,3899,4531,4947,3222,3583,7364,4948,7365,7366,7367,7368,4949,3501,4950, # 6848
-3781,4951,4532,7369,2517,4952,4252,4953,3155,7370,4954,4955,4253,2518,4533,7371, # 6864
-7372,2712,4254,7373,7374,7375,3670,4956,3671,7376,2389,3502,4065,7377,2338,7378, # 6880
-7379,7380,7381,3061,7382,4957,7383,7384,7385,7386,4958,4534,7387,7388,2993,7389, # 6896
-3062,7390,4959,7391,7392,7393,4960,3108,4961,7394,4535,7395,4962,3421,4536,7396, # 6912
-4963,7397,4964,1857,7398,4965,7399,7400,2176,3584,4966,7401,7402,3422,4537,3900, # 6928
-3585,7403,3782,7404,2852,7405,7406,7407,4538,3783,2654,3423,4967,4539,7408,3784, # 6944
-3586,2853,4540,4541,7409,3901,7410,3902,7411,7412,3785,3109,2327,3903,7413,7414, # 6960
-2970,4066,2932,7415,7416,7417,3904,3672,3424,7418,4542,4543,4544,7419,4968,7420, # 6976
-7421,4255,7422,7423,7424,7425,7426,4067,7427,3673,3365,4545,7428,3110,2559,3674, # 6992
-7429,7430,3156,7431,7432,3503,7433,3425,4546,7434,3063,2873,7435,3223,4969,4547, # 7008
-4548,2898,4256,4068,7436,4069,3587,3786,2933,3787,4257,4970,4971,3788,7437,4972, # 7024
-3064,7438,4549,7439,7440,7441,7442,7443,4973,3905,7444,2874,7445,7446,7447,7448, # 7040
-3021,7449,4550,3906,3588,4974,7450,7451,3789,3675,7452,2578,7453,4070,7454,7455, # 7056
-7456,4258,3676,7457,4975,7458,4976,4259,3790,3504,2634,4977,3677,4551,4260,7459, # 7072
-7460,7461,7462,3907,4261,4978,7463,7464,7465,7466,4979,4980,7467,7468,2213,4262, # 7088
-7469,7470,7471,3678,4981,7472,2439,7473,4263,3224,3289,7474,3908,2415,4982,7475, # 7104
-4264,7476,4983,2655,7477,7478,2732,4552,2854,2875,7479,7480,4265,7481,4553,4984, # 7120
-7482,7483,4266,7484,3679,3366,3680,2818,2781,2782,3367,3589,4554,3065,7485,4071, # 7136
-2899,7486,7487,3157,2462,4072,4555,4073,4985,4986,3111,4267,2687,3368,4556,4074, # 7152
-3791,4268,7488,3909,2783,7489,2656,1962,3158,4557,4987,1963,3159,3160,7490,3112, # 7168
-4988,4989,3022,4990,4991,3792,2855,7491,7492,2971,4558,7493,7494,4992,7495,7496, # 7184
-7497,7498,4993,7499,3426,4559,4994,7500,3681,4560,4269,4270,3910,7501,4075,4995, # 7200
-4271,7502,7503,4076,7504,4996,7505,3225,4997,4272,4077,2819,3023,7506,7507,2733, # 7216
-4561,7508,4562,7509,3369,3793,7510,3590,2508,7511,7512,4273,3113,2994,2616,7513, # 7232
-7514,7515,7516,7517,7518,2820,3911,4078,2748,7519,7520,4563,4998,7521,7522,7523, # 7248
-7524,4999,4274,7525,4564,3682,2239,4079,4565,7526,7527,7528,7529,5000,7530,7531, # 7264
-5001,4275,3794,7532,7533,7534,3066,5002,4566,3161,7535,7536,4080,7537,3162,7538, # 7280
-7539,4567,7540,7541,7542,7543,7544,7545,5003,7546,4568,7547,7548,7549,7550,7551, # 7296
-7552,7553,7554,7555,7556,5004,7557,7558,7559,5005,7560,3795,7561,4569,7562,7563, # 7312
-7564,2821,3796,4276,4277,4081,7565,2876,7566,5006,7567,7568,2900,7569,3797,3912, # 7328
-7570,7571,7572,4278,7573,7574,7575,5007,7576,7577,5008,7578,7579,4279,2934,7580, # 7344
-7581,5009,7582,4570,7583,4280,7584,7585,7586,4571,4572,3913,7587,4573,3505,7588, # 7360
-5010,7589,7590,7591,7592,3798,4574,7593,7594,5011,7595,4281,7596,7597,7598,4282, # 7376
-5012,7599,7600,5013,3163,7601,5014,7602,3914,7603,7604,2734,4575,4576,4577,7605, # 7392
-7606,7607,7608,7609,3506,5015,4578,7610,4082,7611,2822,2901,2579,3683,3024,4579, # 7408
-3507,7612,4580,7613,3226,3799,5016,7614,7615,7616,7617,7618,7619,7620,2995,3290, # 7424
-7621,4083,7622,5017,7623,7624,7625,7626,7627,4581,3915,7628,3291,7629,5018,7630, # 7440
-7631,7632,7633,4084,7634,7635,3427,3800,7636,7637,4582,7638,5019,4583,5020,7639, # 7456
-3916,7640,3801,5021,4584,4283,7641,7642,3428,3591,2269,7643,2617,7644,4585,3592, # 7472
-7645,4586,2902,7646,7647,3227,5022,7648,4587,7649,4284,7650,7651,7652,4588,2284, # 7488
-7653,5023,7654,7655,7656,4589,5024,3802,7657,7658,5025,3508,4590,7659,7660,7661, # 7504
-1969,5026,7662,7663,3684,1821,2688,7664,2028,2509,4285,7665,2823,1841,7666,2689, # 7520
-3114,7667,3917,4085,2160,5027,5028,2972,7668,5029,7669,7670,7671,3593,4086,7672, # 7536
-4591,4087,5030,3803,7673,7674,7675,7676,7677,7678,7679,4286,2366,4592,4593,3067, # 7552
-2328,7680,7681,4594,3594,3918,2029,4287,7682,5031,3919,3370,4288,4595,2856,7683, # 7568
-3509,7684,7685,5032,5033,7686,7687,3804,2784,7688,7689,7690,7691,3371,7692,7693, # 7584
-2877,5034,7694,7695,3920,4289,4088,7696,7697,7698,5035,7699,5036,4290,5037,5038, # 7600
-5039,7700,7701,7702,5040,5041,3228,7703,1760,7704,5042,3229,4596,2106,4089,7705, # 7616
-4597,2824,5043,2107,3372,7706,4291,4090,5044,7707,4091,7708,5045,3025,3805,4598, # 7632
-4292,4293,4294,3373,7709,4599,7710,5046,7711,7712,5047,5048,3806,7713,7714,7715, # 7648
-5049,7716,7717,7718,7719,4600,5050,7720,7721,7722,5051,7723,4295,3429,7724,7725, # 7664
-7726,7727,3921,7728,3292,5052,4092,7729,7730,7731,7732,7733,7734,7735,5053,5054, # 7680
-7736,7737,7738,7739,3922,3685,7740,7741,7742,7743,2635,5055,7744,5056,4601,7745, # 7696
-7746,2560,7747,7748,7749,7750,3923,7751,7752,7753,7754,7755,4296,2903,7756,7757, # 7712
-7758,7759,7760,3924,7761,5057,4297,7762,7763,5058,4298,7764,4093,7765,7766,5059, # 7728
-3925,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,3595,7777,4299,5060,4094, # 7744
-7778,3293,5061,7779,7780,4300,7781,7782,4602,7783,3596,7784,7785,3430,2367,7786, # 7760
-3164,5062,5063,4301,7787,7788,4095,5064,5065,7789,3374,3115,7790,7791,7792,7793, # 7776
-7794,7795,7796,3597,4603,7797,7798,3686,3116,3807,5066,7799,7800,5067,7801,7802, # 7792
-4604,4302,5068,4303,4096,7803,7804,3294,7805,7806,5069,4605,2690,7807,3026,7808, # 7808
-7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7824, # 7824
-7825,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,7840, # 7840
-7841,7842,7843,7844,7845,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856, # 7856
-7857,7858,7859,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7871,7872, # 7872
-7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886,7887,7888, # 7888
-7889,7890,7891,7892,7893,7894,7895,7896,7897,7898,7899,7900,7901,7902,7903,7904, # 7904
-7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919,7920, # 7920
-7921,7922,7923,7924,3926,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935, # 7936
-7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951, # 7952
-7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,7967, # 7968
-7968,7969,7970,7971,7972,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983, # 7984
-7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,7995,7996,7997,7998,7999, # 8000
-8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8010,8011,8012,8013,8014,8015, # 8016
-8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031, # 8032
-8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047, # 8048
-8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063, # 8064
-8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079, # 8080
-8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095, # 8096
-8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111, # 8112
-8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127, # 8128
-8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143, # 8144
-8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159, # 8160
-8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175, # 8176
-8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191, # 8192
-8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207, # 8208
-8208,8209,8210,8211,8212,8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223, # 8224
-8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239, # 8240
-8240,8241,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8253,8254,8255, # 8256
-8256,8257,8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271) # 8272
-
-# flake8: noqa
diff --git a/bundle/requests/packages/chardet/jisfreq.pyc b/bundle/requests/packages/chardet/jisfreq.pyc
deleted file mode 100644
index e06f61c..0000000
Binary files a/bundle/requests/packages/chardet/jisfreq.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/jpcntx.py b/bundle/requests/packages/chardet/jpcntx.py
deleted file mode 100644
index f7f69ba..0000000
--- a/bundle/requests/packages/chardet/jpcntx.py
+++ /dev/null
@@ -1,219 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Communicator client code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-from .compat import wrap_ord
-
-NUM_OF_CATEGORY = 6
-DONT_KNOW = -1
-ENOUGH_REL_THRESHOLD = 100
-MAX_REL_THRESHOLD = 1000
-MINIMUM_DATA_THRESHOLD = 4
-
-# This is hiragana 2-char sequence table, the number in each cell represents its frequency category
-jp2CharContext = (
-(0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1),
-(2,4,0,4,0,3,0,4,0,3,4,4,4,2,4,3,3,4,3,2,3,3,4,2,3,3,3,2,4,1,4,3,3,1,5,4,3,4,3,4,3,5,3,0,3,5,4,2,0,3,1,0,3,3,0,3,3,0,1,1,0,4,3,0,3,3,0,4,0,2,0,3,5,5,5,5,4,0,4,1,0,3,4),
-(0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2),
-(0,4,0,5,0,5,0,4,0,4,5,4,4,3,5,3,5,1,5,3,4,3,4,4,3,4,3,3,4,3,5,4,4,3,5,5,3,5,5,5,3,5,5,3,4,5,5,3,1,3,2,0,3,4,0,4,2,0,4,2,1,5,3,2,3,5,0,4,0,2,0,5,4,4,5,4,5,0,4,0,0,4,4),
-(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
-(0,3,0,4,0,3,0,3,0,4,5,4,3,3,3,3,4,3,5,4,4,3,5,4,4,3,4,3,4,4,4,4,5,3,4,4,3,4,5,5,4,5,5,1,4,5,4,3,0,3,3,1,3,3,0,4,4,0,3,3,1,5,3,3,3,5,0,4,0,3,0,4,4,3,4,3,3,0,4,1,1,3,4),
-(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
-(0,4,0,3,0,3,0,4,0,3,4,4,3,2,2,1,2,1,3,1,3,3,3,3,3,4,3,1,3,3,5,3,3,0,4,3,0,5,4,3,3,5,4,4,3,4,4,5,0,1,2,0,1,2,0,2,2,0,1,0,0,5,2,2,1,4,0,3,0,1,0,4,4,3,5,4,3,0,2,1,0,4,3),
-(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
-(0,3,0,5,0,4,0,2,1,4,4,2,4,1,4,2,4,2,4,3,3,3,4,3,3,3,3,1,4,2,3,3,3,1,4,4,1,1,1,4,3,3,2,0,2,4,3,2,0,3,3,0,3,1,1,0,0,0,3,3,0,4,2,2,3,4,0,4,0,3,0,4,4,5,3,4,4,0,3,0,0,1,4),
-(1,4,0,4,0,4,0,4,0,3,5,4,4,3,4,3,5,4,3,3,4,3,5,4,4,4,4,3,4,2,4,3,3,1,5,4,3,2,4,5,4,5,5,4,4,5,4,4,0,3,2,2,3,3,0,4,3,1,3,2,1,4,3,3,4,5,0,3,0,2,0,4,5,5,4,5,4,0,4,0,0,5,4),
-(0,5,0,5,0,4,0,3,0,4,4,3,4,3,3,3,4,0,4,4,4,3,4,3,4,3,3,1,4,2,4,3,4,0,5,4,1,4,5,4,4,5,3,2,4,3,4,3,2,4,1,3,3,3,2,3,2,0,4,3,3,4,3,3,3,4,0,4,0,3,0,4,5,4,4,4,3,0,4,1,0,1,3),
-(0,3,1,4,0,3,0,2,0,3,4,4,3,1,4,2,3,3,4,3,4,3,4,3,4,4,3,2,3,1,5,4,4,1,4,4,3,5,4,4,3,5,5,4,3,4,4,3,1,2,3,1,2,2,0,3,2,0,3,1,0,5,3,3,3,4,3,3,3,3,4,4,4,4,5,4,2,0,3,3,2,4,3),
-(0,2,0,3,0,1,0,1,0,0,3,2,0,0,2,0,1,0,2,1,3,3,3,1,2,3,1,0,1,0,4,2,1,1,3,3,0,4,3,3,1,4,3,3,0,3,3,2,0,0,0,0,1,0,0,2,0,0,0,0,0,4,1,0,2,3,2,2,2,1,3,3,3,4,4,3,2,0,3,1,0,3,3),
-(0,4,0,4,0,3,0,3,0,4,4,4,3,3,3,3,3,3,4,3,4,2,4,3,4,3,3,2,4,3,4,5,4,1,4,5,3,5,4,5,3,5,4,0,3,5,5,3,1,3,3,2,2,3,0,3,4,1,3,3,2,4,3,3,3,4,0,4,0,3,0,4,5,4,4,5,3,0,4,1,0,3,4),
-(0,2,0,3,0,3,0,0,0,2,2,2,1,0,1,0,0,0,3,0,3,0,3,0,1,3,1,0,3,1,3,3,3,1,3,3,3,0,1,3,1,3,4,0,0,3,1,1,0,3,2,0,0,0,0,1,3,0,1,0,0,3,3,2,0,3,0,0,0,0,0,3,4,3,4,3,3,0,3,0,0,2,3),
-(2,3,0,3,0,2,0,1,0,3,3,4,3,1,3,1,1,1,3,1,4,3,4,3,3,3,0,0,3,1,5,4,3,1,4,3,2,5,5,4,4,4,4,3,3,4,4,4,0,2,1,1,3,2,0,1,2,0,0,1,0,4,1,3,3,3,0,3,0,1,0,4,4,4,5,5,3,0,2,0,0,4,4),
-(0,2,0,1,0,3,1,3,0,2,3,3,3,0,3,1,0,0,3,0,3,2,3,1,3,2,1,1,0,0,4,2,1,0,2,3,1,4,3,2,0,4,4,3,1,3,1,3,0,1,0,0,1,0,0,0,1,0,0,0,0,4,1,1,1,2,0,3,0,0,0,3,4,2,4,3,2,0,1,0,0,3,3),
-(0,1,0,4,0,5,0,4,0,2,4,4,2,3,3,2,3,3,5,3,3,3,4,3,4,2,3,0,4,3,3,3,4,1,4,3,2,1,5,5,3,4,5,1,3,5,4,2,0,3,3,0,1,3,0,4,2,0,1,3,1,4,3,3,3,3,0,3,0,1,0,3,4,4,4,5,5,0,3,0,1,4,5),
-(0,2,0,3,0,3,0,0,0,2,3,1,3,0,4,0,1,1,3,0,3,4,3,2,3,1,0,3,3,2,3,1,3,0,2,3,0,2,1,4,1,2,2,0,0,3,3,0,0,2,0,0,0,1,0,0,0,0,2,2,0,3,2,1,3,3,0,2,0,2,0,0,3,3,1,2,4,0,3,0,2,2,3),
-(2,4,0,5,0,4,0,4,0,2,4,4,4,3,4,3,3,3,1,2,4,3,4,3,4,4,5,0,3,3,3,3,2,0,4,3,1,4,3,4,1,4,4,3,3,4,4,3,1,2,3,0,4,2,0,4,1,0,3,3,0,4,3,3,3,4,0,4,0,2,0,3,5,3,4,5,2,0,3,0,0,4,5),
-(0,3,0,4,0,1,0,1,0,1,3,2,2,1,3,0,3,0,2,0,2,0,3,0,2,0,0,0,1,0,1,1,0,0,3,1,0,0,0,4,0,3,1,0,2,1,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,4,2,2,3,1,0,3,0,0,0,1,4,4,4,3,0,0,4,0,0,1,4),
-(1,4,1,5,0,3,0,3,0,4,5,4,4,3,5,3,3,4,4,3,4,1,3,3,3,3,2,1,4,1,5,4,3,1,4,4,3,5,4,4,3,5,4,3,3,4,4,4,0,3,3,1,2,3,0,3,1,0,3,3,0,5,4,4,4,4,4,4,3,3,5,4,4,3,3,5,4,0,3,2,0,4,4),
-(0,2,0,3,0,1,0,0,0,1,3,3,3,2,4,1,3,0,3,1,3,0,2,2,1,1,0,0,2,0,4,3,1,0,4,3,0,4,4,4,1,4,3,1,1,3,3,1,0,2,0,0,1,3,0,0,0,0,2,0,0,4,3,2,4,3,5,4,3,3,3,4,3,3,4,3,3,0,2,1,0,3,3),
-(0,2,0,4,0,3,0,2,0,2,5,5,3,4,4,4,4,1,4,3,3,0,4,3,4,3,1,3,3,2,4,3,0,3,4,3,0,3,4,4,2,4,4,0,4,5,3,3,2,2,1,1,1,2,0,1,5,0,3,3,2,4,3,3,3,4,0,3,0,2,0,4,4,3,5,5,0,0,3,0,2,3,3),
-(0,3,0,4,0,3,0,1,0,3,4,3,3,1,3,3,3,0,3,1,3,0,4,3,3,1,1,0,3,0,3,3,0,0,4,4,0,1,5,4,3,3,5,0,3,3,4,3,0,2,0,1,1,1,0,1,3,0,1,2,1,3,3,2,3,3,0,3,0,1,0,1,3,3,4,4,1,0,1,2,2,1,3),
-(0,1,0,4,0,4,0,3,0,1,3,3,3,2,3,1,1,0,3,0,3,3,4,3,2,4,2,0,1,0,4,3,2,0,4,3,0,5,3,3,2,4,4,4,3,3,3,4,0,1,3,0,0,1,0,0,1,0,0,0,0,4,2,3,3,3,0,3,0,0,0,4,4,4,5,3,2,0,3,3,0,3,5),
-(0,2,0,3,0,0,0,3,0,1,3,0,2,0,0,0,1,0,3,1,1,3,3,0,0,3,0,0,3,0,2,3,1,0,3,1,0,3,3,2,0,4,2,2,0,2,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,2,1,2,0,1,0,1,0,0,0,1,3,1,2,0,0,0,1,0,0,1,4),
-(0,3,0,3,0,5,0,1,0,2,4,3,1,3,3,2,1,1,5,2,1,0,5,1,2,0,0,0,3,3,2,2,3,2,4,3,0,0,3,3,1,3,3,0,2,5,3,4,0,3,3,0,1,2,0,2,2,0,3,2,0,2,2,3,3,3,0,2,0,1,0,3,4,4,2,5,4,0,3,0,0,3,5),
-(0,3,0,3,0,3,0,1,0,3,3,3,3,0,3,0,2,0,2,1,1,0,2,0,1,0,0,0,2,1,0,0,1,0,3,2,0,0,3,3,1,2,3,1,0,3,3,0,0,1,0,0,0,0,0,2,0,0,0,0,0,2,3,1,2,3,0,3,0,1,0,3,2,1,0,4,3,0,1,1,0,3,3),
-(0,4,0,5,0,3,0,3,0,4,5,5,4,3,5,3,4,3,5,3,3,2,5,3,4,4,4,3,4,3,4,5,5,3,4,4,3,4,4,5,4,4,4,3,4,5,5,4,2,3,4,2,3,4,0,3,3,1,4,3,2,4,3,3,5,5,0,3,0,3,0,5,5,5,5,4,4,0,4,0,1,4,4),
-(0,4,0,4,0,3,0,3,0,3,5,4,4,2,3,2,5,1,3,2,5,1,4,2,3,2,3,3,4,3,3,3,3,2,5,4,1,3,3,5,3,4,4,0,4,4,3,1,1,3,1,0,2,3,0,2,3,0,3,0,0,4,3,1,3,4,0,3,0,2,0,4,4,4,3,4,5,0,4,0,0,3,4),
-(0,3,0,3,0,3,1,2,0,3,4,4,3,3,3,0,2,2,4,3,3,1,3,3,3,1,1,0,3,1,4,3,2,3,4,4,2,4,4,4,3,4,4,3,2,4,4,3,1,3,3,1,3,3,0,4,1,0,2,2,1,4,3,2,3,3,5,4,3,3,5,4,4,3,3,0,4,0,3,2,2,4,4),
-(0,2,0,1,0,0,0,0,0,1,2,1,3,0,0,0,0,0,2,0,1,2,1,0,0,1,0,0,0,0,3,0,0,1,0,1,1,3,1,0,0,0,1,1,0,1,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,1,2,2,0,3,4,0,0,0,1,1,0,0,1,0,0,0,0,0,1,1),
-(0,1,0,0,0,1,0,0,0,0,4,0,4,1,4,0,3,0,4,0,3,0,4,0,3,0,3,0,4,1,5,1,4,0,0,3,0,5,0,5,2,0,1,0,0,0,2,1,4,0,1,3,0,0,3,0,0,3,1,1,4,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0),
-(1,4,0,5,0,3,0,2,0,3,5,4,4,3,4,3,5,3,4,3,3,0,4,3,3,3,3,3,3,2,4,4,3,1,3,4,4,5,4,4,3,4,4,1,3,5,4,3,3,3,1,2,2,3,3,1,3,1,3,3,3,5,3,3,4,5,0,3,0,3,0,3,4,3,4,4,3,0,3,0,2,4,3),
-(0,1,0,4,0,0,0,0,0,1,4,0,4,1,4,2,4,0,3,0,1,0,1,0,0,0,0,0,2,0,3,1,1,1,0,3,0,0,0,1,2,1,0,0,1,1,1,1,0,1,0,0,0,1,0,0,3,0,0,0,0,3,2,0,2,2,0,1,0,0,0,2,3,2,3,3,0,0,0,0,2,1,0),
-(0,5,1,5,0,3,0,3,0,5,4,4,5,1,5,3,3,0,4,3,4,3,5,3,4,3,3,2,4,3,4,3,3,0,3,3,1,4,4,3,4,4,4,3,4,5,5,3,2,3,1,1,3,3,1,3,1,1,3,3,2,4,5,3,3,5,0,4,0,3,0,4,4,3,5,3,3,0,3,4,0,4,3),
-(0,5,0,5,0,3,0,2,0,4,4,3,5,2,4,3,3,3,4,4,4,3,5,3,5,3,3,1,4,0,4,3,3,0,3,3,0,4,4,4,4,5,4,3,3,5,5,3,2,3,1,2,3,2,0,1,0,0,3,2,2,4,4,3,1,5,0,4,0,3,0,4,3,1,3,2,1,0,3,3,0,3,3),
-(0,4,0,5,0,5,0,4,0,4,5,5,5,3,4,3,3,2,5,4,4,3,5,3,5,3,4,0,4,3,4,4,3,2,4,4,3,4,5,4,4,5,5,0,3,5,5,4,1,3,3,2,3,3,1,3,1,0,4,3,1,4,4,3,4,5,0,4,0,2,0,4,3,4,4,3,3,0,4,0,0,5,5),
-(0,4,0,4,0,5,0,1,1,3,3,4,4,3,4,1,3,0,5,1,3,0,3,1,3,1,1,0,3,0,3,3,4,0,4,3,0,4,4,4,3,4,4,0,3,5,4,1,0,3,0,0,2,3,0,3,1,0,3,1,0,3,2,1,3,5,0,3,0,1,0,3,2,3,3,4,4,0,2,2,0,4,4),
-(2,4,0,5,0,4,0,3,0,4,5,5,4,3,5,3,5,3,5,3,5,2,5,3,4,3,3,4,3,4,5,3,2,1,5,4,3,2,3,4,5,3,4,1,2,5,4,3,0,3,3,0,3,2,0,2,3,0,4,1,0,3,4,3,3,5,0,3,0,1,0,4,5,5,5,4,3,0,4,2,0,3,5),
-(0,5,0,4,0,4,0,2,0,5,4,3,4,3,4,3,3,3,4,3,4,2,5,3,5,3,4,1,4,3,4,4,4,0,3,5,0,4,4,4,4,5,3,1,3,4,5,3,3,3,3,3,3,3,0,2,2,0,3,3,2,4,3,3,3,5,3,4,1,3,3,5,3,2,0,0,0,0,4,3,1,3,3),
-(0,1,0,3,0,3,0,1,0,1,3,3,3,2,3,3,3,0,3,0,0,0,3,1,3,0,0,0,2,2,2,3,0,0,3,2,0,1,2,4,1,3,3,0,0,3,3,3,0,1,0,0,2,1,0,0,3,0,3,1,0,3,0,0,1,3,0,2,0,1,0,3,3,1,3,3,0,0,1,1,0,3,3),
-(0,2,0,3,0,2,1,4,0,2,2,3,1,1,3,1,1,0,2,0,3,1,2,3,1,3,0,0,1,0,4,3,2,3,3,3,1,4,2,3,3,3,3,1,0,3,1,4,0,1,1,0,1,2,0,1,1,0,1,1,0,3,1,3,2,2,0,1,0,0,0,2,3,3,3,1,0,0,0,0,0,2,3),
-(0,5,0,4,0,5,0,2,0,4,5,5,3,3,4,3,3,1,5,4,4,2,4,4,4,3,4,2,4,3,5,5,4,3,3,4,3,3,5,5,4,5,5,1,3,4,5,3,1,4,3,1,3,3,0,3,3,1,4,3,1,4,5,3,3,5,0,4,0,3,0,5,3,3,1,4,3,0,4,0,1,5,3),
-(0,5,0,5,0,4,0,2,0,4,4,3,4,3,3,3,3,3,5,4,4,4,4,4,4,5,3,3,5,2,4,4,4,3,4,4,3,3,4,4,5,5,3,3,4,3,4,3,3,4,3,3,3,3,1,2,2,1,4,3,3,5,4,4,3,4,0,4,0,3,0,4,4,4,4,4,1,0,4,2,0,2,4),
-(0,4,0,4,0,3,0,1,0,3,5,2,3,0,3,0,2,1,4,2,3,3,4,1,4,3,3,2,4,1,3,3,3,0,3,3,0,0,3,3,3,5,3,3,3,3,3,2,0,2,0,0,2,0,0,2,0,0,1,0,0,3,1,2,2,3,0,3,0,2,0,4,4,3,3,4,1,0,3,0,0,2,4),
-(0,0,0,4,0,0,0,0,0,0,1,0,1,0,2,0,0,0,0,0,1,0,2,0,1,0,0,0,0,0,3,1,3,0,3,2,0,0,0,1,0,3,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,2,0,0,0,0,0,0,2),
-(0,2,1,3,0,2,0,2,0,3,3,3,3,1,3,1,3,3,3,3,3,3,4,2,2,1,2,1,4,0,4,3,1,3,3,3,2,4,3,5,4,3,3,3,3,3,3,3,0,1,3,0,2,0,0,1,0,0,1,0,0,4,2,0,2,3,0,3,3,0,3,3,4,2,3,1,4,0,1,2,0,2,3),
-(0,3,0,3,0,1,0,3,0,2,3,3,3,0,3,1,2,0,3,3,2,3,3,2,3,2,3,1,3,0,4,3,2,0,3,3,1,4,3,3,2,3,4,3,1,3,3,1,1,0,1,1,0,1,0,1,0,1,0,0,0,4,1,1,0,3,0,3,1,0,2,3,3,3,3,3,1,0,0,2,0,3,3),
-(0,0,0,0,0,0,0,0,0,0,3,0,2,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,3,0,3,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,2,0,2,3,0,0,0,0,0,0,0,0,3),
-(0,2,0,3,1,3,0,3,0,2,3,3,3,1,3,1,3,1,3,1,3,3,3,1,3,0,2,3,1,1,4,3,3,2,3,3,1,2,2,4,1,3,3,0,1,4,2,3,0,1,3,0,3,0,0,1,3,0,2,0,0,3,3,2,1,3,0,3,0,2,0,3,4,4,4,3,1,0,3,0,0,3,3),
-(0,2,0,1,0,2,0,0,0,1,3,2,2,1,3,0,1,1,3,0,3,2,3,1,2,0,2,0,1,1,3,3,3,0,3,3,1,1,2,3,2,3,3,1,2,3,2,0,0,1,0,0,0,0,0,0,3,0,1,0,0,2,1,2,1,3,0,3,0,0,0,3,4,4,4,3,2,0,2,0,0,2,4),
-(0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,3,1,0,0,0,0,0,0,0,3),
-(0,3,0,3,0,2,0,3,0,3,3,3,2,3,2,2,2,0,3,1,3,3,3,2,3,3,0,0,3,0,3,2,2,0,2,3,1,4,3,4,3,3,2,3,1,5,4,4,0,3,1,2,1,3,0,3,1,1,2,0,2,3,1,3,1,3,0,3,0,1,0,3,3,4,4,2,1,0,2,1,0,2,4),
-(0,1,0,3,0,1,0,2,0,1,4,2,5,1,4,0,2,0,2,1,3,1,4,0,2,1,0,0,2,1,4,1,1,0,3,3,0,5,1,3,2,3,3,1,0,3,2,3,0,1,0,0,0,0,0,0,1,0,0,0,0,4,0,1,0,3,0,2,0,1,0,3,3,3,4,3,3,0,0,0,0,2,3),
-(0,0,0,1,0,0,0,0,0,0,2,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,0,1,0,0,0,0,0,3),
-(0,1,0,3,0,4,0,3,0,2,4,3,1,0,3,2,2,1,3,1,2,2,3,1,1,1,2,1,3,0,1,2,0,1,3,2,1,3,0,5,5,1,0,0,1,3,2,1,0,3,0,0,1,0,0,0,0,0,3,4,0,1,1,1,3,2,0,2,0,1,0,2,3,3,1,2,3,0,1,0,1,0,4),
-(0,0,0,1,0,3,0,3,0,2,2,1,0,0,4,0,3,0,3,1,3,0,3,0,3,0,1,0,3,0,3,1,3,0,3,3,0,0,1,2,1,1,1,0,1,2,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,2,2,1,2,0,0,2,0,0,0,0,2,3,3,3,3,0,0,0,0,1,4),
-(0,0,0,3,0,3,0,0,0,0,3,1,1,0,3,0,1,0,2,0,1,0,0,0,0,0,0,0,1,0,3,0,2,0,2,3,0,0,2,2,3,1,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,2,3),
-(2,4,0,5,0,5,0,4,0,3,4,3,3,3,4,3,3,3,4,3,4,4,5,4,5,5,5,2,3,0,5,5,4,1,5,4,3,1,5,4,3,4,4,3,3,4,3,3,0,3,2,0,2,3,0,3,0,0,3,3,0,5,3,2,3,3,0,3,0,3,0,3,4,5,4,5,3,0,4,3,0,3,4),
-(0,3,0,3,0,3,0,3,0,3,3,4,3,2,3,2,3,0,4,3,3,3,3,3,3,3,3,0,3,2,4,3,3,1,3,4,3,4,4,4,3,4,4,3,2,4,4,1,0,2,0,0,1,1,0,2,0,0,3,1,0,5,3,2,1,3,0,3,0,1,2,4,3,2,4,3,3,0,3,2,0,4,4),
-(0,3,0,3,0,1,0,0,0,1,4,3,3,2,3,1,3,1,4,2,3,2,4,2,3,4,3,0,2,2,3,3,3,0,3,3,3,0,3,4,1,3,3,0,3,4,3,3,0,1,1,0,1,0,0,0,4,0,3,0,0,3,1,2,1,3,0,4,0,1,0,4,3,3,4,3,3,0,2,0,0,3,3),
-(0,3,0,4,0,1,0,3,0,3,4,3,3,0,3,3,3,1,3,1,3,3,4,3,3,3,0,0,3,1,5,3,3,1,3,3,2,5,4,3,3,4,5,3,2,5,3,4,0,1,0,0,0,0,0,2,0,0,1,1,0,4,2,2,1,3,0,3,0,2,0,4,4,3,5,3,2,0,1,1,0,3,4),
-(0,5,0,4,0,5,0,2,0,4,4,3,3,2,3,3,3,1,4,3,4,1,5,3,4,3,4,0,4,2,4,3,4,1,5,4,0,4,4,4,4,5,4,1,3,5,4,2,1,4,1,1,3,2,0,3,1,0,3,2,1,4,3,3,3,4,0,4,0,3,0,4,4,4,3,3,3,0,4,2,0,3,4),
-(1,4,0,4,0,3,0,1,0,3,3,3,1,1,3,3,2,2,3,3,1,0,3,2,2,1,2,0,3,1,2,1,2,0,3,2,0,2,2,3,3,4,3,0,3,3,1,2,0,1,1,3,1,2,0,0,3,0,1,1,0,3,2,2,3,3,0,3,0,0,0,2,3,3,4,3,3,0,1,0,0,1,4),
-(0,4,0,4,0,4,0,0,0,3,4,4,3,1,4,2,3,2,3,3,3,1,4,3,4,0,3,0,4,2,3,3,2,2,5,4,2,1,3,4,3,4,3,1,3,3,4,2,0,2,1,0,3,3,0,0,2,0,3,1,0,4,4,3,4,3,0,4,0,1,0,2,4,4,4,4,4,0,3,2,0,3,3),
-(0,0,0,1,0,4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,3,2,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,2),
-(0,2,0,3,0,4,0,4,0,1,3,3,3,0,4,0,2,1,2,1,1,1,2,0,3,1,1,0,1,0,3,1,0,0,3,3,2,0,1,1,0,0,0,0,0,1,0,2,0,2,2,0,3,1,0,0,1,0,1,1,0,1,2,0,3,0,0,0,0,1,0,0,3,3,4,3,1,0,1,0,3,0,2),
-(0,0,0,3,0,5,0,0,0,0,1,0,2,0,3,1,0,1,3,0,0,0,2,0,0,0,1,0,0,0,1,1,0,0,4,0,0,0,2,3,0,1,4,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,3,0,0,0,0,0,3),
-(0,2,0,5,0,5,0,1,0,2,4,3,3,2,5,1,3,2,3,3,3,0,4,1,2,0,3,0,4,0,2,2,1,1,5,3,0,0,1,4,2,3,2,0,3,3,3,2,0,2,4,1,1,2,0,1,1,0,3,1,0,1,3,1,2,3,0,2,0,0,0,1,3,5,4,4,4,0,3,0,0,1,3),
-(0,4,0,5,0,4,0,4,0,4,5,4,3,3,4,3,3,3,4,3,4,4,5,3,4,5,4,2,4,2,3,4,3,1,4,4,1,3,5,4,4,5,5,4,4,5,5,5,2,3,3,1,4,3,1,3,3,0,3,3,1,4,3,4,4,4,0,3,0,4,0,3,3,4,4,5,0,0,4,3,0,4,5),
-(0,4,0,4,0,3,0,3,0,3,4,4,4,3,3,2,4,3,4,3,4,3,5,3,4,3,2,1,4,2,4,4,3,1,3,4,2,4,5,5,3,4,5,4,1,5,4,3,0,3,2,2,3,2,1,3,1,0,3,3,3,5,3,3,3,5,4,4,2,3,3,4,3,3,3,2,1,0,3,2,1,4,3),
-(0,4,0,5,0,4,0,3,0,3,5,5,3,2,4,3,4,0,5,4,4,1,4,4,4,3,3,3,4,3,5,5,2,3,3,4,1,2,5,5,3,5,5,2,3,5,5,4,0,3,2,0,3,3,1,1,5,1,4,1,0,4,3,2,3,5,0,4,0,3,0,5,4,3,4,3,0,0,4,1,0,4,4),
-(1,3,0,4,0,2,0,2,0,2,5,5,3,3,3,3,3,0,4,2,3,4,4,4,3,4,0,0,3,4,5,4,3,3,3,3,2,5,5,4,5,5,5,4,3,5,5,5,1,3,1,0,1,0,0,3,2,0,4,2,0,5,2,3,2,4,1,3,0,3,0,4,5,4,5,4,3,0,4,2,0,5,4),
-(0,3,0,4,0,5,0,3,0,3,4,4,3,2,3,2,3,3,3,3,3,2,4,3,3,2,2,0,3,3,3,3,3,1,3,3,3,0,4,4,3,4,4,1,1,4,4,2,0,3,1,0,1,1,0,4,1,0,2,3,1,3,3,1,3,4,0,3,0,1,0,3,1,3,0,0,1,0,2,0,0,4,4),
-(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
-(0,3,0,3,0,2,0,3,0,1,5,4,3,3,3,1,4,2,1,2,3,4,4,2,4,4,5,0,3,1,4,3,4,0,4,3,3,3,2,3,2,5,3,4,3,2,2,3,0,0,3,0,2,1,0,1,2,0,0,0,0,2,1,1,3,1,0,2,0,4,0,3,4,4,4,5,2,0,2,0,0,1,3),
-(0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,1,1,0,0,0,4,2,1,1,0,1,0,3,2,0,0,3,1,1,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,1,0,0,0,2,0,0,0,1,4,0,4,2,1,0,0,0,0,0,1),
-(0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,3,1,0,0,0,2,0,2,1,0,0,1,2,1,0,1,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,1,3,1,0,0,0,0,0,1,0,0,2,1,0,0,0,0,0,0,0,0,2),
-(0,4,0,4,0,4,0,3,0,4,4,3,4,2,4,3,2,0,4,4,4,3,5,3,5,3,3,2,4,2,4,3,4,3,1,4,0,2,3,4,4,4,3,3,3,4,4,4,3,4,1,3,4,3,2,1,2,1,3,3,3,4,4,3,3,5,0,4,0,3,0,4,3,3,3,2,1,0,3,0,0,3,3),
-(0,4,0,3,0,3,0,3,0,3,5,5,3,3,3,3,4,3,4,3,3,3,4,4,4,3,3,3,3,4,3,5,3,3,1,3,2,4,5,5,5,5,4,3,4,5,5,3,2,2,3,3,3,3,2,3,3,1,2,3,2,4,3,3,3,4,0,4,0,2,0,4,3,2,2,1,2,0,3,0,0,4,1),
-)
-
-class JapaneseContextAnalysis:
-    def __init__(self):
-        self.reset()
-
-    def reset(self):
-        self._mTotalRel = 0  # total sequence received
-        # category counters, each interger counts sequence in its category
-        self._mRelSample = [0] * NUM_OF_CATEGORY
-        # if last byte in current buffer is not the last byte of a character,
-        # we need to know how many bytes to skip in next buffer
-        self._mNeedToSkipCharNum = 0
-        self._mLastCharOrder = -1  # The order of previous char
-        # If this flag is set to True, detection is done and conclusion has
-        # been made
-        self._mDone = False
-
-    def feed(self, aBuf, aLen):
-        if self._mDone:
-            return
-
-        # The buffer we got is byte oriented, and a character may span in more than one
-        # buffers. In case the last one or two byte in last buffer is not
-        # complete, we record how many byte needed to complete that character
-        # and skip these bytes here.  We can choose to record those bytes as
-        # well and analyse the character once it is complete, but since a
-        # character will not make much difference, by simply skipping
-        # this character will simply our logic and improve performance.
-        i = self._mNeedToSkipCharNum
-        while i < aLen:
-            order, charLen = self.get_order(aBuf[i:i + 2])
-            i += charLen
-            if i > aLen:
-                self._mNeedToSkipCharNum = i - aLen
-                self._mLastCharOrder = -1
-            else:
-                if (order != -1) and (self._mLastCharOrder != -1):
-                    self._mTotalRel += 1
-                    if self._mTotalRel > MAX_REL_THRESHOLD:
-                        self._mDone = True
-                        break
-                    self._mRelSample[jp2CharContext[self._mLastCharOrder][order]] += 1
-                self._mLastCharOrder = order
-
-    def got_enough_data(self):
-        return self._mTotalRel > ENOUGH_REL_THRESHOLD
-
-    def get_confidence(self):
-        # This is just one way to calculate confidence. It works well for me.
-        if self._mTotalRel > MINIMUM_DATA_THRESHOLD:
-            return (self._mTotalRel - self._mRelSample[0]) / self._mTotalRel
-        else:
-            return DONT_KNOW
-
-    def get_order(self, aBuf):
-        return -1, 1
-
-class SJISContextAnalysis(JapaneseContextAnalysis):
-    def get_order(self, aBuf):
-        if not aBuf:
-            return -1, 1
-        # find out current char's byte length
-        first_char = wrap_ord(aBuf[0])
-        if ((0x81 <= first_char <= 0x9F) or (0xE0 <= first_char <= 0xFC)):
-            charLen = 2
-        else:
-            charLen = 1
-
-        # return its order if it is hiragana
-        if len(aBuf) > 1:
-            second_char = wrap_ord(aBuf[1])
-            if (first_char == 202) and (0x9F <= second_char <= 0xF1):
-                return second_char - 0x9F, charLen
-
-        return -1, charLen
-
-class EUCJPContextAnalysis(JapaneseContextAnalysis):
-    def get_order(self, aBuf):
-        if not aBuf:
-            return -1, 1
-        # find out current char's byte length
-        first_char = wrap_ord(aBuf[0])
-        if (first_char == 0x8E) or (0xA1 <= first_char <= 0xFE):
-            charLen = 2
-        elif first_char == 0x8F:
-            charLen = 3
-        else:
-            charLen = 1
-
-        # return its order if it is hiragana
-        if len(aBuf) > 1:
-            second_char = wrap_ord(aBuf[1])
-            if (first_char == 0xA4) and (0xA1 <= second_char <= 0xF3):
-                return second_char - 0xA1, charLen
-
-        return -1, charLen
-
-# flake8: noqa
diff --git a/bundle/requests/packages/chardet/jpcntx.pyc b/bundle/requests/packages/chardet/jpcntx.pyc
deleted file mode 100644
index c5562cd..0000000
Binary files a/bundle/requests/packages/chardet/jpcntx.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/langbulgarianmodel.py b/bundle/requests/packages/chardet/langbulgarianmodel.py
deleted file mode 100644
index e5788fc..0000000
--- a/bundle/requests/packages/chardet/langbulgarianmodel.py
+++ /dev/null
@@ -1,229 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Communicator client code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-# 255: Control characters that usually does not exist in any text
-# 254: Carriage/Return
-# 253: symbol (punctuation) that does not belong to word
-# 252: 0 - 9
-
-# Character Mapping Table:
-# this table is modified base on win1251BulgarianCharToOrderMap, so
-# only number <64 is sure valid
-
-Latin5_BulgarianCharToOrderMap = (
-255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255,  # 00
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  # 10
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,  # 20
-252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253,  # 30
-253, 77, 90, 99,100, 72,109,107,101, 79,185, 81,102, 76, 94, 82,  # 40
-110,186,108, 91, 74,119, 84, 96,111,187,115,253,253,253,253,253,  # 50
-253, 65, 69, 70, 66, 63, 68,112,103, 92,194,104, 95, 86, 87, 71,  # 60
-116,195, 85, 93, 97,113,196,197,198,199,200,253,253,253,253,253,  # 70
-194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,  # 80
-210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,  # 90
- 81,226,227,228,229,230,105,231,232,233,234,235,236, 45,237,238,  # a0
- 31, 32, 35, 43, 37, 44, 55, 47, 40, 59, 33, 46, 38, 36, 41, 30,  # b0
- 39, 28, 34, 51, 48, 49, 53, 50, 54, 57, 61,239, 67,240, 60, 56,  # c0
-  1, 18,  9, 20, 11,  3, 23, 15,  2, 26, 12, 10, 14,  6,  4, 13,  # d0
-  7,  8,  5, 19, 29, 25, 22, 21, 27, 24, 17, 75, 52,241, 42, 16,  # e0
- 62,242,243,244, 58,245, 98,246,247,248,249,250,251, 91,252,253,  # f0
-)
-
-win1251BulgarianCharToOrderMap = (
-255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255,  # 00
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  # 10
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,  # 20
-252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253,  # 30
-253, 77, 90, 99,100, 72,109,107,101, 79,185, 81,102, 76, 94, 82,  # 40
-110,186,108, 91, 74,119, 84, 96,111,187,115,253,253,253,253,253,  # 50
-253, 65, 69, 70, 66, 63, 68,112,103, 92,194,104, 95, 86, 87, 71,  # 60
-116,195, 85, 93, 97,113,196,197,198,199,200,253,253,253,253,253,  # 70
-206,207,208,209,210,211,212,213,120,214,215,216,217,218,219,220,  # 80
-221, 78, 64, 83,121, 98,117,105,222,223,224,225,226,227,228,229,  # 90
- 88,230,231,232,233,122, 89,106,234,235,236,237,238, 45,239,240,  # a0
- 73, 80,118,114,241,242,243,244,245, 62, 58,246,247,248,249,250,  # b0
- 31, 32, 35, 43, 37, 44, 55, 47, 40, 59, 33, 46, 38, 36, 41, 30,  # c0
- 39, 28, 34, 51, 48, 49, 53, 50, 54, 57, 61,251, 67,252, 60, 56,  # d0
-  1, 18,  9, 20, 11,  3, 23, 15,  2, 26, 12, 10, 14,  6,  4, 13,  # e0
-  7,  8,  5, 19, 29, 25, 22, 21, 27, 24, 17, 75, 52,253, 42, 16,  # f0
-)
-
-# Model Table:
-# total sequences: 100%
-# first 512 sequences: 96.9392%
-# first 1024 sequences:3.0618%
-# rest  sequences:     0.2992%
-# negative sequences:  0.0020%
-BulgarianLangModel = (
-0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,3,3,3,3,3,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,2,2,3,2,2,1,2,2,
-3,1,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,0,3,0,1,
-0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,3,3,0,3,1,0,
-0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
-3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,2,3,3,3,3,3,3,3,3,0,3,0,0,
-0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,1,3,2,3,3,3,3,3,3,3,3,0,3,0,0,
-0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,1,3,3,3,3,2,2,2,1,1,2,0,1,0,1,0,0,
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,
-3,3,3,3,3,3,3,2,3,2,2,3,3,1,1,2,3,3,2,3,3,3,3,2,1,2,0,2,0,3,0,0,
-0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,
-3,3,3,3,3,3,3,1,3,3,3,3,3,2,3,2,3,3,3,3,3,2,3,3,1,3,0,3,0,2,0,0,
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,
-3,3,3,3,3,3,3,3,1,3,3,2,3,3,3,1,3,3,2,3,2,2,2,0,0,2,0,2,0,2,0,0,
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,
-3,3,3,3,3,3,3,3,3,0,3,3,3,2,2,3,3,3,1,2,2,3,2,1,1,2,0,2,0,0,0,0,
-1,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,
-3,3,3,3,3,3,3,2,3,3,1,2,3,2,2,2,3,3,3,3,3,2,2,3,1,2,0,2,1,2,0,0,
-0,0,0,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,
-3,3,3,3,3,1,3,3,3,3,3,2,3,3,3,2,3,3,2,3,2,2,2,3,1,2,0,1,0,1,0,0,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,
-3,3,3,3,3,3,3,3,3,3,3,1,1,1,2,2,1,3,1,3,2,2,3,0,0,1,0,1,0,1,0,0,
-0,0,0,1,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,
-3,3,3,3,3,2,2,3,2,2,3,1,2,1,1,1,2,3,1,3,1,2,2,0,1,1,1,1,0,1,0,0,
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,
-3,3,3,3,3,1,3,2,2,3,3,1,2,3,1,1,3,3,3,3,1,2,2,1,1,1,0,2,0,2,0,1,
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,2,3,3,3,2,2,1,1,2,0,2,0,1,0,0,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,
-3,0,1,2,1,3,3,2,3,3,3,3,3,2,3,2,1,0,3,1,2,1,2,1,2,3,2,1,0,1,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,1,1,2,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,1,3,3,2,3,3,2,2,2,0,1,0,0,
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,3,3,3,3,0,3,3,3,3,3,2,1,1,2,1,3,3,0,3,1,1,1,1,3,2,0,1,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,
-3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,1,1,3,1,3,3,2,3,2,2,2,3,0,2,0,0,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,2,3,3,2,2,3,2,1,1,1,1,1,3,1,3,1,1,0,0,0,1,0,0,0,1,0,0,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,2,3,2,0,3,2,0,3,0,2,0,0,2,1,3,1,0,0,1,0,0,0,1,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
-3,3,3,3,2,1,1,1,1,2,1,1,2,1,1,1,2,2,1,2,1,1,1,0,1,1,0,1,0,1,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,
-3,3,3,3,2,1,3,1,1,2,1,3,2,1,1,0,1,2,3,2,1,1,1,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,3,3,3,3,2,2,1,0,1,0,0,1,0,0,0,2,1,0,3,0,0,1,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
-3,3,3,2,3,2,3,3,1,3,2,1,1,1,2,1,1,2,1,3,0,1,0,0,0,1,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,1,1,2,2,3,3,2,3,2,2,2,3,1,2,2,1,1,2,1,1,2,2,0,1,1,0,1,0,2,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,2,1,3,1,0,2,2,1,3,2,1,0,0,2,0,2,0,1,0,0,0,0,0,0,0,1,0,0,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,
-3,3,3,3,3,3,1,2,0,2,3,1,2,3,2,0,1,3,1,2,1,1,1,0,0,1,0,0,2,2,2,3,
-2,2,2,2,1,2,1,1,2,2,1,1,2,0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1,1,0,1,
-3,3,3,3,3,2,1,2,2,1,2,0,2,0,1,0,1,2,1,2,1,1,0,0,0,1,0,1,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,
-3,3,2,3,3,1,1,3,1,0,3,2,1,0,0,0,1,2,0,2,0,1,0,0,0,1,0,1,2,1,2,2,
-1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,0,1,2,1,1,1,0,0,0,0,0,1,1,0,0,
-3,1,0,1,0,2,3,2,2,2,3,2,2,2,2,2,1,0,2,1,2,1,1,1,0,1,2,1,2,2,2,1,
-1,1,2,2,2,2,1,2,1,1,0,1,2,1,2,2,2,1,1,1,0,1,1,1,1,2,0,1,0,0,0,0,
-2,3,2,3,3,0,0,2,1,0,2,1,0,0,0,0,2,3,0,2,0,0,0,0,0,1,0,0,2,0,1,2,
-2,1,2,1,2,2,1,1,1,2,1,1,1,0,1,2,2,1,1,1,1,1,0,1,1,1,0,0,1,2,0,0,
-3,3,2,2,3,0,2,3,1,1,2,0,0,0,1,0,0,2,0,2,0,0,0,1,0,1,0,1,2,0,2,2,
-1,1,1,1,2,1,0,1,2,2,2,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,
-2,3,2,3,3,0,0,3,0,1,1,0,1,0,0,0,2,2,1,2,0,0,0,0,0,0,0,0,2,0,1,2,
-2,2,1,1,1,1,1,2,2,2,1,0,2,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0,
-3,3,3,3,2,2,2,2,2,0,2,1,1,1,1,2,1,2,1,1,0,2,0,1,0,1,0,0,2,0,1,2,
-1,1,1,1,1,1,1,2,2,1,1,0,2,0,1,0,2,0,0,1,1,1,0,0,2,0,0,0,1,1,0,0,
-2,3,3,3,3,1,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0,0,0,0,1,2,0,1,2,
-2,2,2,1,1,2,1,1,2,2,2,1,2,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,0,0,
-2,3,3,3,3,0,2,2,0,2,1,0,0,0,1,1,1,2,0,2,0,0,0,3,0,0,0,0,2,0,2,2,
-1,1,1,2,1,2,1,1,2,2,2,1,2,0,1,1,1,0,1,1,1,1,0,2,1,0,0,0,1,1,0,0,
-2,3,3,3,3,0,2,1,0,0,2,0,0,0,0,0,1,2,0,2,0,0,0,0,0,0,0,0,2,0,1,2,
-1,1,1,2,1,1,1,1,2,2,2,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0,
-3,3,2,2,3,0,1,0,1,0,0,0,0,0,0,0,1,1,0,3,0,0,0,0,0,0,0,0,1,0,2,2,
-1,1,1,1,1,2,1,1,2,2,1,2,2,1,0,1,1,1,1,1,0,1,0,0,1,0,0,0,1,1,0,0,
-3,1,0,1,0,2,2,2,2,3,2,1,1,1,2,3,0,0,1,0,2,1,1,0,1,1,1,1,2,1,1,1,
-1,2,2,1,2,1,2,2,1,1,0,1,2,1,2,2,1,1,1,0,0,1,1,1,2,1,0,1,0,0,0,0,
-2,1,0,1,0,3,1,2,2,2,2,1,2,2,1,1,1,0,2,1,2,2,1,1,2,1,1,0,2,1,1,1,
-1,2,2,2,2,2,2,2,1,2,0,1,1,0,2,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,0,0,
-2,1,1,1,1,2,2,2,2,1,2,2,2,1,2,2,1,1,2,1,2,3,2,2,1,1,1,1,0,1,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,2,2,3,2,0,1,2,0,1,2,1,1,0,1,0,1,2,1,2,0,0,0,1,1,0,0,0,1,0,0,2,
-1,1,0,0,1,1,0,1,1,1,1,0,2,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0,
-2,0,0,0,0,1,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,1,1,1,
-1,2,2,2,2,1,1,2,1,2,1,1,1,0,2,1,2,1,1,1,0,2,1,1,1,1,0,1,0,0,0,0,
-3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,
-1,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,2,2,3,2,0,0,0,0,1,0,0,0,0,0,0,1,1,0,2,0,0,0,0,0,0,0,0,1,0,1,2,
-1,1,1,1,1,1,0,0,2,2,2,2,2,0,1,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1,
-2,3,1,2,1,0,1,1,0,2,2,2,0,0,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,2,
-1,1,1,1,2,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,
-2,2,2,2,2,0,0,2,0,0,2,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,2,0,2,2,
-1,1,1,1,1,0,0,1,2,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,
-1,2,2,2,2,0,0,2,0,1,1,0,0,0,1,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,1,1,
-0,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,
-1,2,2,3,2,0,0,1,0,0,1,0,0,0,0,0,0,1,0,2,0,0,0,1,0,0,0,0,0,0,0,2,
-1,1,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,
-2,1,2,2,2,1,2,1,2,2,1,1,2,1,1,1,0,1,1,1,1,2,0,1,0,1,1,1,1,0,1,1,
-1,1,2,1,1,1,1,1,1,0,0,1,2,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,
-1,0,0,1,3,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,2,2,2,1,0,0,1,0,2,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,2,0,0,1,
-0,2,0,1,0,0,1,1,2,0,1,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,
-1,2,2,2,2,0,1,1,0,2,1,0,1,1,1,0,0,1,0,2,0,1,0,0,0,0,0,0,0,0,0,1,
-0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,
-2,2,2,2,2,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,
-0,1,0,1,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,
-2,0,1,0,0,1,2,1,1,1,1,1,1,2,2,1,0,0,1,0,1,0,0,0,0,1,1,1,1,0,0,0,
-1,1,2,1,1,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,2,1,2,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,
-0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,0,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,
-0,1,1,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,
-1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,2,0,0,2,0,1,0,0,1,0,0,1,
-1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,
-1,1,1,1,1,1,1,2,0,0,0,0,0,0,2,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,
-2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,0,1,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
-)
-
-Latin5BulgarianModel = {
-  'charToOrderMap': Latin5_BulgarianCharToOrderMap,
-  'precedenceMatrix': BulgarianLangModel,
-  'mTypicalPositiveRatio': 0.969392,
-  'keepEnglishLetter': False,
-  'charsetName': "ISO-8859-5"
-}
-
-Win1251BulgarianModel = {
-  'charToOrderMap': win1251BulgarianCharToOrderMap,
-  'precedenceMatrix': BulgarianLangModel,
-  'mTypicalPositiveRatio': 0.969392,
-  'keepEnglishLetter': False,
-  'charsetName': "windows-1251"
-}
-
-
-# flake8: noqa
diff --git a/bundle/requests/packages/chardet/langbulgarianmodel.pyc b/bundle/requests/packages/chardet/langbulgarianmodel.pyc
deleted file mode 100644
index 15529e4..0000000
Binary files a/bundle/requests/packages/chardet/langbulgarianmodel.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/langcyrillicmodel.py b/bundle/requests/packages/chardet/langcyrillicmodel.py
deleted file mode 100644
index a86f54b..0000000
--- a/bundle/requests/packages/chardet/langcyrillicmodel.py
+++ /dev/null
@@ -1,329 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Communicator client code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-# KOI8-R language model
-# Character Mapping Table:
-KOI8R_CharToOrderMap = (
-255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255,  # 00
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  # 10
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,  # 20
-252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253,  # 30
-253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154,  # 40
-155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253,  # 50
-253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69,  # 60
- 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253,  # 70
-191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,  # 80
-207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,  # 90
-223,224,225, 68,226,227,228,229,230,231,232,233,234,235,236,237,  # a0
-238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,  # b0
- 27,  3, 21, 28, 13,  2, 39, 19, 26,  4, 23, 11,  8, 12,  5,  1,  # c0
- 15, 16,  9,  7,  6, 14, 24, 10, 17, 18, 20, 25, 30, 29, 22, 54,  # d0
- 59, 37, 44, 58, 41, 48, 53, 46, 55, 42, 60, 36, 49, 38, 31, 34,  # e0
- 35, 43, 45, 32, 40, 52, 56, 33, 61, 62, 51, 57, 47, 63, 50, 70,  # f0
-)
-
-win1251_CharToOrderMap = (
-255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255,  # 00
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  # 10
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,  # 20
-252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253,  # 30
-253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154,  # 40
-155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253,  # 50
-253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69,  # 60
- 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253,  # 70
-191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,
-207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,
-223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,
-239,240,241,242,243,244,245,246, 68,247,248,249,250,251,252,253,
- 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35,
- 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43,
-  3, 21, 10, 19, 13,  2, 24, 20,  4, 23, 11,  8, 12,  5,  1, 15,
-  9,  7,  6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16,
-)
-
-latin5_CharToOrderMap = (
-255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255,  # 00
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  # 10
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,  # 20
-252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253,  # 30
-253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154,  # 40
-155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253,  # 50
-253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69,  # 60
- 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253,  # 70
-191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,
-207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,
-223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,
- 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35,
- 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43,
-  3, 21, 10, 19, 13,  2, 24, 20,  4, 23, 11,  8, 12,  5,  1, 15,
-  9,  7,  6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16,
-239, 68,240,241,242,243,244,245,246,247,248,249,250,251,252,255,
-)
-
-macCyrillic_CharToOrderMap = (
-255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255,  # 00
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  # 10
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,  # 20
-252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253,  # 30
-253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154,  # 40
-155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253,  # 50
-253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69,  # 60
- 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253,  # 70
- 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35,
- 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43,
-191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,
-207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,
-223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,
-239,240,241,242,243,244,245,246,247,248,249,250,251,252, 68, 16,
-  3, 21, 10, 19, 13,  2, 24, 20,  4, 23, 11,  8, 12,  5,  1, 15,
-  9,  7,  6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27,255,
-)
-
-IBM855_CharToOrderMap = (
-255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255,  # 00
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  # 10
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,  # 20
-252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253,  # 30
-253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154,  # 40
-155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253,  # 50
-253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69,  # 60
- 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253,  # 70
-191,192,193,194, 68,195,196,197,198,199,200,201,202,203,204,205,
-206,207,208,209,210,211,212,213,214,215,216,217, 27, 59, 54, 70,
-  3, 37, 21, 44, 28, 58, 13, 41,  2, 48, 39, 53, 19, 46,218,219,
-220,221,222,223,224, 26, 55,  4, 42,225,226,227,228, 23, 60,229,
-230,231,232,233,234,235, 11, 36,236,237,238,239,240,241,242,243,
-  8, 49, 12, 38,  5, 31,  1, 34, 15,244,245,246,247, 35, 16,248,
- 43,  9, 45,  7, 32,  6, 40, 14, 52, 24, 56, 10, 33, 17, 61,249,
-250, 18, 62, 20, 51, 25, 57, 30, 47, 29, 63, 22, 50,251,252,255,
-)
-
-IBM866_CharToOrderMap = (
-255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255,  # 00
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  # 10
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,  # 20
-252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253,  # 30
-253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154,  # 40
-155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253,  # 50
-253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69,  # 60
- 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253,  # 70
- 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35,
- 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43,
-  3, 21, 10, 19, 13,  2, 24, 20,  4, 23, 11,  8, 12,  5,  1, 15,
-191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,
-207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,
-223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,
-  9,  7,  6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16,
-239, 68,240,241,242,243,244,245,246,247,248,249,250,251,252,255,
-)
-
-# Model Table:
-# total sequences: 100%
-# first 512 sequences: 97.6601%
-# first 1024 sequences: 2.3389%
-# rest  sequences:      0.1237%
-# negative sequences:   0.0009%
-RussianLangModel = (
-0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,3,3,3,3,1,3,3,3,2,3,2,3,3,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,2,2,2,2,2,0,0,2,
-3,3,3,2,3,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,3,2,3,2,0,
-0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,2,2,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,2,3,3,1,0,
-0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,2,1,
-0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,2,1,
-0,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,3,3,2,2,2,3,1,3,3,1,3,3,3,3,2,2,3,0,2,2,2,3,3,2,1,0,
-0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,2,3,3,3,3,3,2,2,3,2,3,3,3,2,1,2,2,0,1,2,2,2,2,2,2,0,
-0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,0,2,2,3,3,2,1,2,0,
-0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,2,3,3,1,2,3,2,2,3,2,3,3,3,3,2,2,3,0,3,2,2,3,1,1,1,0,
-0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,3,3,3,3,2,2,2,0,3,3,3,2,2,2,2,0,
-0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,2,3,2,2,0,1,3,2,1,2,2,1,0,
-0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,3,3,3,3,3,2,1,1,3,0,1,1,1,1,2,1,1,0,2,2,2,1,2,0,1,0,
-0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,2,3,3,2,2,2,2,1,3,2,3,2,3,2,1,2,2,0,1,1,2,1,2,1,2,0,
-0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,3,3,3,2,2,2,2,0,2,2,2,2,3,1,1,0,
-0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,
-3,2,3,2,2,3,3,3,3,3,3,3,3,3,1,3,2,0,0,3,3,3,3,2,3,3,3,3,2,3,2,0,
-0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,3,3,3,3,3,2,2,3,3,0,2,1,0,3,2,3,2,3,0,0,1,2,0,0,1,0,1,2,1,1,0,
-0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,0,3,0,2,3,3,3,3,2,3,3,3,3,1,2,2,0,0,2,3,2,2,2,3,2,3,2,2,3,0,0,
-0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,2,3,0,2,3,2,3,0,1,2,3,3,2,0,2,3,0,0,2,3,2,2,0,1,3,1,3,2,2,1,0,
-0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,1,3,0,2,3,3,3,3,3,3,3,3,2,1,3,2,0,0,2,2,3,3,3,2,3,3,0,2,2,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,2,2,3,3,2,2,2,3,3,0,0,1,1,1,1,1,2,0,0,1,1,1,1,0,1,0,
-0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,0,3,2,3,3,2,3,2,0,2,1,0,1,1,0,1,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,2,3,3,3,2,2,2,2,3,1,3,2,3,1,1,2,1,0,2,2,2,2,1,3,1,0,
-0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,
-2,2,3,3,3,3,3,1,2,2,1,3,1,0,3,0,0,3,0,0,0,1,1,0,1,2,1,0,0,0,0,0,
-0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,2,2,1,1,3,3,3,2,2,1,2,2,3,1,1,2,0,0,2,2,1,3,0,0,2,1,1,2,1,1,0,
-0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,2,3,3,3,3,1,2,2,2,1,2,1,3,3,1,1,2,1,2,1,2,2,0,2,0,0,1,1,0,1,0,
-0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,3,3,3,3,3,2,1,3,2,2,3,2,0,3,2,0,3,0,1,0,1,1,0,0,1,1,1,1,0,1,0,
-0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,2,3,3,3,2,2,2,3,3,1,2,1,2,1,0,1,0,1,1,0,1,0,0,2,1,1,1,0,1,0,
-0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
-3,1,1,2,1,2,3,3,2,2,1,2,2,3,0,2,1,0,0,2,2,3,2,1,2,2,2,2,2,3,1,0,
-0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,1,1,0,1,1,2,2,1,1,3,0,0,1,3,1,1,1,0,0,0,1,0,1,1,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,1,3,3,3,2,0,0,0,2,1,0,1,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,0,1,0,0,2,3,2,2,2,1,2,2,2,1,2,1,0,0,1,1,1,0,2,0,1,1,1,0,0,1,1,
-1,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,
-2,3,3,3,3,0,0,0,0,1,0,0,0,0,3,0,1,2,1,0,0,0,0,0,0,0,1,1,0,0,1,1,
-1,0,1,0,1,2,0,0,1,1,2,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0,
-2,2,3,2,2,2,3,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,0,1,1,1,0,2,1,
-1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,0,1,1,0,
-3,3,3,2,2,2,2,3,2,2,1,1,2,2,2,2,1,1,3,1,2,1,2,0,0,1,1,0,1,0,2,1,
-1,1,1,1,1,2,1,0,1,1,1,1,0,1,0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,1,1,0,
-2,0,0,1,0,3,2,2,2,2,1,2,1,2,1,2,0,0,0,2,1,2,2,1,1,2,2,0,1,1,0,2,
-1,1,1,1,1,0,1,1,1,2,1,1,1,2,1,0,1,2,1,1,1,1,0,1,1,1,0,0,1,0,0,1,
-1,3,2,2,2,1,1,1,2,3,0,0,0,0,2,0,2,2,1,0,0,0,0,0,0,1,0,0,0,0,1,1,
-1,0,1,1,0,1,0,1,1,0,1,1,0,2,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,
-2,3,2,3,2,1,2,2,2,2,1,0,0,0,2,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,2,1,
-1,1,2,1,0,2,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,
-3,0,0,1,0,2,2,2,3,2,2,2,2,2,2,2,0,0,0,2,1,2,1,1,1,2,2,0,0,0,1,2,
-1,1,1,1,1,0,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,1,
-2,3,2,3,3,2,0,1,1,1,0,0,1,0,2,0,1,1,3,1,0,0,0,0,0,0,0,1,0,0,2,1,
-1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,1,0,
-2,3,3,3,3,1,2,2,2,2,0,1,1,0,2,1,1,1,2,1,0,1,1,0,0,1,0,1,0,0,2,0,
-0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,3,3,3,2,0,0,1,1,2,2,1,0,0,2,0,1,1,3,0,0,1,0,0,0,0,0,1,0,1,2,1,
-1,1,2,0,1,1,1,0,1,0,1,1,0,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,0,
-1,3,2,3,2,1,0,0,2,2,2,0,1,0,2,0,1,1,1,0,1,0,0,0,3,0,1,1,0,0,2,1,
-1,1,1,0,1,1,0,0,0,0,1,1,0,1,0,0,2,1,1,0,1,0,0,0,1,0,1,0,0,1,1,0,
-3,1,2,1,1,2,2,2,2,2,2,1,2,2,1,1,0,0,0,2,2,2,0,0,0,1,2,1,0,1,0,1,
-2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,2,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1,
-3,0,0,0,0,2,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,1,
-1,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,
-1,3,3,2,2,0,0,0,2,2,0,0,0,1,2,0,1,1,2,0,0,0,0,0,0,0,0,1,0,0,2,1,
-0,1,1,0,0,1,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,
-2,3,2,3,2,0,0,0,0,1,1,0,0,0,2,0,2,0,2,0,0,0,0,0,1,0,0,1,0,0,1,1,
-1,1,2,0,1,2,1,0,1,1,2,1,1,1,1,1,2,1,1,0,1,0,0,1,1,1,1,1,0,1,1,0,
-1,3,2,2,2,1,0,0,2,2,1,0,1,2,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1,
-0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,
-1,0,0,1,0,2,3,1,2,2,2,2,2,2,1,1,0,0,0,1,0,1,0,2,1,1,1,0,0,0,0,1,
-1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,
-2,0,2,0,0,1,0,3,2,1,2,1,2,2,0,1,0,0,0,2,1,0,0,2,1,1,1,1,0,2,0,2,
-2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,0,1,1,1,1,0,0,0,1,1,1,1,0,1,0,0,1,
-1,2,2,2,2,1,0,0,1,0,0,0,0,0,2,0,1,1,1,1,0,0,0,0,1,0,1,2,0,0,2,0,
-1,0,1,1,1,2,1,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,1,0,
-2,1,2,2,2,0,3,0,1,1,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
-0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,
-1,2,2,3,2,2,0,0,1,1,2,0,1,2,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,
-0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,
-2,2,1,1,2,1,2,2,2,2,2,1,2,2,0,1,0,0,0,1,2,2,2,1,2,1,1,1,1,1,2,1,
-1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,0,1,
-1,2,2,2,2,0,1,0,2,2,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,
-0,0,1,0,0,1,0,0,0,0,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,
-0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,2,2,2,2,0,0,0,2,2,2,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
-0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,2,2,2,2,0,0,0,0,1,0,0,1,1,2,0,0,0,0,1,0,1,0,0,1,0,0,2,0,0,0,1,
-0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,
-1,2,2,2,1,1,2,0,2,1,1,1,1,0,2,2,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,
-0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,
-1,0,2,1,2,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,
-0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,
-1,0,0,0,0,2,0,1,2,1,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1,
-0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,
-2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
-1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,
-2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
-1,1,1,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,
-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
-1,1,0,1,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,0,0,
-0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,
-)
-
-Koi8rModel = {
-  'charToOrderMap': KOI8R_CharToOrderMap,
-  'precedenceMatrix': RussianLangModel,
-  'mTypicalPositiveRatio': 0.976601,
-  'keepEnglishLetter': False,
-  'charsetName': "KOI8-R"
-}
-
-Win1251CyrillicModel = {
-  'charToOrderMap': win1251_CharToOrderMap,
-  'precedenceMatrix': RussianLangModel,
-  'mTypicalPositiveRatio': 0.976601,
-  'keepEnglishLetter': False,
-  'charsetName': "windows-1251"
-}
-
-Latin5CyrillicModel = {
-  'charToOrderMap': latin5_CharToOrderMap,
-  'precedenceMatrix': RussianLangModel,
-  'mTypicalPositiveRatio': 0.976601,
-  'keepEnglishLetter': False,
-  'charsetName': "ISO-8859-5"
-}
-
-MacCyrillicModel = {
-  'charToOrderMap': macCyrillic_CharToOrderMap,
-  'precedenceMatrix': RussianLangModel,
-  'mTypicalPositiveRatio': 0.976601,
-  'keepEnglishLetter': False,
-  'charsetName': "MacCyrillic"
-};
-
-Ibm866Model = {
-  'charToOrderMap': IBM866_CharToOrderMap,
-  'precedenceMatrix': RussianLangModel,
-  'mTypicalPositiveRatio': 0.976601,
-  'keepEnglishLetter': False,
-  'charsetName': "IBM866"
-}
-
-Ibm855Model = {
-  'charToOrderMap': IBM855_CharToOrderMap,
-  'precedenceMatrix': RussianLangModel,
-  'mTypicalPositiveRatio': 0.976601,
-  'keepEnglishLetter': False,
-  'charsetName': "IBM855"
-}
-
-# flake8: noqa
diff --git a/bundle/requests/packages/chardet/langcyrillicmodel.pyc b/bundle/requests/packages/chardet/langcyrillicmodel.pyc
deleted file mode 100644
index 4184d3d..0000000
Binary files a/bundle/requests/packages/chardet/langcyrillicmodel.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/langgreekmodel.py b/bundle/requests/packages/chardet/langgreekmodel.py
deleted file mode 100644
index ddb5837..0000000
--- a/bundle/requests/packages/chardet/langgreekmodel.py
+++ /dev/null
@@ -1,225 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Communicator client code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-# 255: Control characters that usually does not exist in any text
-# 254: Carriage/Return
-# 253: symbol (punctuation) that does not belong to word
-# 252: 0 - 9
-
-# Character Mapping Table:
-Latin7_CharToOrderMap = (
-255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255,  # 00
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  # 10
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,  # 20
-252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253,  # 30
-253, 82,100,104, 94, 98,101,116,102,111,187,117, 92, 88,113, 85,  # 40
- 79,118,105, 83, 67,114,119, 95, 99,109,188,253,253,253,253,253,  # 50
-253, 72, 70, 80, 81, 60, 96, 93, 89, 68,120, 97, 77, 86, 69, 55,  # 60
- 78,115, 65, 66, 58, 76,106,103, 87,107,112,253,253,253,253,253,  # 70
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  # 80
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  # 90
-253,233, 90,253,253,253,253,253,253,253,253,253,253, 74,253,253,  # a0
-253,253,253,253,247,248, 61, 36, 46, 71, 73,253, 54,253,108,123,  # b0
-110, 31, 51, 43, 41, 34, 91, 40, 52, 47, 44, 53, 38, 49, 59, 39,  # c0
- 35, 48,250, 37, 33, 45, 56, 50, 84, 57,120,121, 17, 18, 22, 15,  # d0
-124,  1, 29, 20, 21,  3, 32, 13, 25,  5, 11, 16, 10,  6, 30,  4,  # e0
-  9,  8, 14,  7,  2, 12, 28, 23, 42, 24, 64, 75, 19, 26, 27,253,  # f0
-)
-
-win1253_CharToOrderMap = (
-255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255,  # 00
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  # 10
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,  # 20
-252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253,  # 30
-253, 82,100,104, 94, 98,101,116,102,111,187,117, 92, 88,113, 85,  # 40
- 79,118,105, 83, 67,114,119, 95, 99,109,188,253,253,253,253,253,  # 50
-253, 72, 70, 80, 81, 60, 96, 93, 89, 68,120, 97, 77, 86, 69, 55,  # 60
- 78,115, 65, 66, 58, 76,106,103, 87,107,112,253,253,253,253,253,  # 70
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  # 80
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  # 90
-253,233, 61,253,253,253,253,253,253,253,253,253,253, 74,253,253,  # a0
-253,253,253,253,247,253,253, 36, 46, 71, 73,253, 54,253,108,123,  # b0
-110, 31, 51, 43, 41, 34, 91, 40, 52, 47, 44, 53, 38, 49, 59, 39,  # c0
- 35, 48,250, 37, 33, 45, 56, 50, 84, 57,120,121, 17, 18, 22, 15,  # d0
-124,  1, 29, 20, 21,  3, 32, 13, 25,  5, 11, 16, 10,  6, 30,  4,  # e0
-  9,  8, 14,  7,  2, 12, 28, 23, 42, 24, 64, 75, 19, 26, 27,253,  # f0
-)
-
-# Model Table:
-# total sequences: 100%
-# first 512 sequences: 98.2851%
-# first 1024 sequences:1.7001%
-# rest  sequences:     0.0359%
-# negative sequences:  0.0148%
-GreekLangModel = (
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,3,2,2,3,3,3,3,3,3,3,3,1,3,3,3,0,2,2,3,3,0,3,0,3,2,0,3,3,3,0,
-3,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,3,3,3,3,0,3,3,0,3,2,3,3,0,3,2,3,3,3,0,0,3,0,3,0,3,3,2,0,0,0,
-2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,
-0,2,3,2,2,3,3,3,3,3,3,3,3,0,3,3,3,3,0,2,3,3,0,3,3,3,3,2,3,3,3,0,
-2,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,0,2,1,3,3,3,3,2,3,3,2,3,3,2,0,
-0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,3,3,3,0,3,3,3,3,3,3,0,3,3,0,3,3,3,3,3,3,3,3,3,3,0,3,2,3,3,0,
-2,0,1,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,
-0,3,3,3,3,3,2,3,0,0,0,0,3,3,0,3,1,3,3,3,0,3,3,0,3,3,3,3,0,0,0,0,
-2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,3,3,3,3,0,3,0,3,3,3,3,3,0,3,2,2,2,3,0,2,3,3,3,3,3,2,3,3,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,3,3,3,3,3,2,2,2,3,3,3,3,0,3,1,3,3,3,3,2,3,3,3,3,3,3,3,2,2,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,3,3,3,3,2,0,3,0,0,0,3,3,2,3,3,3,3,3,0,0,3,2,3,0,2,3,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,0,3,3,3,3,0,0,3,3,0,2,3,0,3,0,3,3,3,0,0,3,0,3,0,2,2,3,3,0,0,
-0,0,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,3,3,3,3,2,0,3,2,3,3,3,3,0,3,3,3,3,3,0,3,3,2,3,2,3,3,2,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,3,2,3,2,3,3,3,3,3,3,0,2,3,2,3,2,2,2,3,2,3,3,2,3,0,2,2,2,3,0,
-2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,3,0,0,0,3,3,3,2,3,3,0,0,3,0,3,0,0,0,3,2,0,3,0,3,0,0,2,0,2,0,
-0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,3,3,3,0,3,3,3,3,3,3,0,3,3,0,3,0,0,0,3,3,0,3,3,3,0,0,1,2,3,0,
-3,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,3,3,3,3,2,0,0,3,2,2,3,3,0,3,3,3,3,3,2,1,3,0,3,2,3,3,2,1,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,3,3,0,2,3,3,3,3,3,3,0,0,3,0,3,0,0,0,3,3,0,3,2,3,0,0,3,3,3,0,
-3,0,0,0,2,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,3,3,3,0,3,3,3,3,3,3,0,0,3,0,3,0,0,0,3,2,0,3,2,3,0,0,3,2,3,0,
-2,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,3,1,2,2,3,3,3,3,3,3,0,2,3,0,3,0,0,0,3,3,0,3,0,2,0,0,2,3,1,0,
-2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,0,3,3,3,3,0,3,0,3,3,2,3,0,3,3,3,3,3,3,0,3,3,3,0,2,3,0,0,3,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,0,3,3,3,0,0,3,0,0,0,3,3,0,3,0,2,3,3,0,0,3,0,3,0,3,3,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,3,0,0,0,3,3,3,3,3,3,0,0,3,0,2,0,0,0,3,3,0,3,0,3,0,0,2,0,2,0,
-0,0,0,0,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,3,3,3,3,3,0,3,0,2,0,3,2,0,3,2,3,2,3,0,0,3,2,3,2,3,3,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,3,0,0,2,3,3,3,3,3,0,0,0,3,0,2,1,0,0,3,2,2,2,0,3,0,0,2,2,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,0,3,3,3,2,0,3,0,3,0,3,3,0,2,1,2,3,3,0,0,3,0,3,0,3,3,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,2,3,3,3,0,3,3,3,3,3,3,0,2,3,0,3,0,0,0,2,1,0,2,2,3,0,0,2,2,2,0,
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,3,0,0,2,3,3,3,2,3,0,0,1,3,0,2,0,0,0,0,3,0,1,0,2,0,0,1,1,1,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,3,3,3,3,1,0,3,0,0,0,3,2,0,3,2,3,3,3,0,0,3,0,3,2,2,2,1,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,0,3,3,3,0,0,3,0,0,0,0,2,0,2,3,3,2,2,2,2,3,0,2,0,2,2,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,3,3,3,2,0,0,0,0,0,0,2,3,0,2,0,2,3,2,0,0,3,0,3,0,3,1,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,3,2,3,3,2,2,3,0,2,0,3,0,0,0,2,0,0,0,0,1,2,0,2,0,2,0,
-0,2,0,2,0,2,2,0,0,1,0,2,2,2,0,2,2,2,0,2,2,2,0,0,2,0,0,1,0,0,0,0,
-0,2,0,3,3,2,0,0,0,0,0,0,1,3,0,2,0,2,2,2,0,0,2,0,3,0,0,2,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,0,2,3,2,0,2,2,0,2,0,2,2,0,2,0,2,2,2,0,0,0,0,0,0,2,3,0,0,0,2,
-0,1,2,0,0,0,0,2,2,0,0,0,2,1,0,2,2,0,0,0,0,0,0,1,0,2,0,0,0,0,0,0,
-0,0,2,1,0,2,3,2,2,3,2,3,2,0,0,3,3,3,0,0,3,2,0,0,0,1,1,0,2,0,2,2,
-0,2,0,2,0,2,2,0,0,2,0,2,2,2,0,2,2,2,2,0,0,2,0,0,0,2,0,1,0,0,0,0,
-0,3,0,3,3,2,2,0,3,0,0,0,2,2,0,2,2,2,1,2,0,0,1,2,2,0,0,3,0,0,0,2,
-0,1,2,0,0,0,1,2,0,0,0,0,0,0,0,2,2,0,1,0,0,2,0,0,0,2,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,2,3,3,2,2,0,0,0,2,0,2,3,3,0,2,0,0,0,0,0,0,2,2,2,0,2,2,0,2,0,2,
-0,2,2,0,0,2,2,2,2,1,0,0,2,2,0,2,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,
-0,2,0,3,2,3,0,0,0,3,0,0,2,2,0,2,0,2,2,2,0,0,2,0,0,0,0,0,0,0,0,2,
-0,0,2,2,0,0,2,2,2,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,2,0,0,3,2,0,2,2,2,2,2,0,0,0,2,0,0,0,0,2,0,1,0,0,2,0,1,0,0,0,
-0,2,2,2,0,2,2,0,1,2,0,2,2,2,0,2,2,2,2,1,2,2,0,0,2,0,0,0,0,0,0,0,
-0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,
-0,2,0,2,0,2,2,0,0,0,0,1,2,1,0,0,2,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,3,2,3,0,0,2,0,0,0,2,2,0,2,0,0,0,1,0,0,2,0,2,0,2,2,0,0,0,0,
-0,0,2,0,0,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,
-0,2,2,3,2,2,0,0,0,0,0,0,1,3,0,2,0,2,2,0,0,0,1,0,2,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,2,0,2,0,3,2,0,2,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
-0,0,2,0,0,0,0,1,1,0,0,2,1,2,0,2,2,0,1,0,0,1,0,0,0,2,0,0,0,0,0,0,
-0,3,0,2,2,2,0,0,2,0,0,0,2,0,0,0,2,3,0,2,0,0,0,0,0,0,2,2,0,0,0,2,
-0,1,2,0,0,0,1,2,2,1,0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,2,1,2,0,2,2,0,2,0,0,2,0,0,0,0,1,2,1,0,2,1,0,0,0,0,0,0,0,0,0,0,
-0,0,2,0,0,0,3,1,2,2,0,2,0,0,0,0,2,0,0,0,2,0,0,3,0,0,0,0,2,2,2,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,2,1,0,2,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,2,
-0,2,2,0,0,2,2,2,2,2,0,1,2,0,0,0,2,2,0,1,0,2,0,0,2,2,0,0,0,0,0,0,
-0,0,0,0,1,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,2,
-0,1,2,0,0,0,0,2,2,1,0,1,0,1,0,2,2,2,1,0,0,0,0,0,0,1,0,0,0,0,0,0,
-0,2,0,1,2,0,0,0,0,0,0,0,0,0,0,2,0,0,2,2,0,0,0,0,1,0,0,0,0,0,0,2,
-0,2,2,0,0,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0,
-0,2,2,2,2,0,0,0,3,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,1,
-0,0,2,0,0,0,0,1,2,0,0,0,0,0,0,2,2,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,
-0,2,0,2,2,2,0,0,2,0,0,0,0,0,0,0,2,2,2,0,0,0,2,0,0,0,0,0,0,0,0,2,
-0,0,1,0,0,0,0,2,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,
-0,3,0,2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,2,
-0,0,2,0,0,0,0,2,2,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,2,0,2,2,1,0,0,0,0,0,0,2,0,0,2,0,2,2,2,0,0,0,0,0,0,2,0,0,0,0,2,
-0,0,2,0,0,2,0,2,2,0,0,0,0,2,0,2,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,
-0,0,3,0,0,0,2,2,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0,0,0,
-0,2,2,2,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,
-0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,
-0,2,0,0,0,2,0,0,0,0,0,1,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,2,0,0,0,
-0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,2,0,2,0,0,0,
-0,0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,0,0,0,1,2,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-)
-
-Latin7GreekModel = {
-  'charToOrderMap': Latin7_CharToOrderMap,
-  'precedenceMatrix': GreekLangModel,
-  'mTypicalPositiveRatio': 0.982851,
-  'keepEnglishLetter': False,
-  'charsetName': "ISO-8859-7"
-}
-
-Win1253GreekModel = {
-  'charToOrderMap': win1253_CharToOrderMap,
-  'precedenceMatrix': GreekLangModel,
-  'mTypicalPositiveRatio': 0.982851,
-  'keepEnglishLetter': False,
-  'charsetName': "windows-1253"
-}
-
-# flake8: noqa
diff --git a/bundle/requests/packages/chardet/langgreekmodel.pyc b/bundle/requests/packages/chardet/langgreekmodel.pyc
deleted file mode 100644
index ecfa117..0000000
Binary files a/bundle/requests/packages/chardet/langgreekmodel.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/langhebrewmodel.py b/bundle/requests/packages/chardet/langhebrewmodel.py
deleted file mode 100644
index 75f2bc7..0000000
--- a/bundle/requests/packages/chardet/langhebrewmodel.py
+++ /dev/null
@@ -1,201 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Universal charset detector code.
-#
-# The Initial Developer of the Original Code is
-#          Simon Montagu
-# Portions created by the Initial Developer are Copyright (C) 2005
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#   Shy Shalom - original C code
-#   Shoshannah Forbes - original C code (?)
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-# 255: Control characters that usually does not exist in any text
-# 254: Carriage/Return
-# 253: symbol (punctuation) that does not belong to word
-# 252: 0 - 9
-
-# Windows-1255 language model
-# Character Mapping Table:
-win1255_CharToOrderMap = (
-255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255,  # 00
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  # 10
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,  # 20
-252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253,  # 30
-253, 69, 91, 79, 80, 92, 89, 97, 90, 68,111,112, 82, 73, 95, 85,  # 40
- 78,121, 86, 71, 67,102,107, 84,114,103,115,253,253,253,253,253,  # 50
-253, 50, 74, 60, 61, 42, 76, 70, 64, 53,105, 93, 56, 65, 54, 49,  # 60
- 66,110, 51, 43, 44, 63, 81, 77, 98, 75,108,253,253,253,253,253,  # 70
-124,202,203,204,205, 40, 58,206,207,208,209,210,211,212,213,214,
-215, 83, 52, 47, 46, 72, 32, 94,216,113,217,109,218,219,220,221,
- 34,116,222,118,100,223,224,117,119,104,125,225,226, 87, 99,227,
-106,122,123,228, 55,229,230,101,231,232,120,233, 48, 39, 57,234,
- 30, 59, 41, 88, 33, 37, 36, 31, 29, 35,235, 62, 28,236,126,237,
-238, 38, 45,239,240,241,242,243,127,244,245,246,247,248,249,250,
-  9,  8, 20, 16,  3,  2, 24, 14, 22,  1, 25, 15,  4, 11,  6, 23,
- 12, 19, 13, 26, 18, 27, 21, 17,  7, 10,  5,251,252,128, 96,253,
-)
-
-# Model Table:
-# total sequences: 100%
-# first 512 sequences: 98.4004%
-# first 1024 sequences: 1.5981%
-# rest  sequences:      0.087%
-# negative sequences:   0.0015%
-HebrewLangModel = (
-0,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,3,2,1,2,0,1,0,0,
-3,0,3,1,0,0,1,3,2,0,1,1,2,0,2,2,2,1,1,1,1,2,1,1,1,2,0,0,2,2,0,1,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,
-1,2,1,2,1,2,0,0,2,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,
-1,2,1,3,1,1,0,0,2,0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,1,2,2,1,3,
-1,2,1,1,2,2,0,0,2,2,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,0,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,3,2,
-1,2,1,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,2,2,3,2,2,2,1,2,2,2,2,
-1,2,1,1,2,2,0,1,2,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,0,2,2,2,2,2,
-0,2,0,2,2,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,0,2,2,2,
-0,2,1,2,2,2,0,0,2,1,0,0,0,0,1,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,
-3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,1,2,3,2,2,2,
-1,2,1,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,
-3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,2,0,2,
-0,2,1,2,2,2,0,0,1,2,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,2,0,0,1,0,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,2,2,3,2,1,2,1,1,1,
-0,1,1,1,1,1,3,0,1,0,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
-3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,0,
-0,0,1,0,0,0,0,0,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,
-0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
-3,3,3,3,3,3,3,3,3,2,3,3,3,2,1,2,3,3,2,3,3,3,3,2,3,2,1,2,0,2,1,2,
-0,2,0,2,2,2,0,0,1,2,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,
-3,3,3,3,3,3,3,3,3,2,3,3,3,1,2,2,3,3,2,3,2,3,2,2,3,1,2,2,0,2,2,2,
-0,2,1,2,2,2,0,0,1,2,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,
-3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,2,2,3,3,3,3,1,3,2,2,2,
-0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,2,3,2,2,2,1,2,2,0,2,2,2,2,
-0,2,0,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
-3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,1,3,2,3,3,2,3,3,2,2,1,2,2,2,2,2,2,
-0,2,1,2,1,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,
-3,3,3,3,3,3,2,3,2,3,3,2,3,3,3,3,2,3,2,3,3,3,3,3,2,2,2,2,2,2,2,1,
-0,2,0,1,2,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,
-3,3,3,3,3,3,3,3,3,2,1,2,3,3,3,3,3,3,3,2,3,2,3,2,1,2,3,0,2,1,2,2,
-0,2,1,1,2,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2,0,
-3,3,3,3,3,3,3,3,3,2,3,3,3,3,2,1,3,1,2,2,2,1,2,3,3,1,2,1,2,2,2,2,
-0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,3,3,3,3,0,2,3,3,3,1,3,3,3,1,2,2,2,2,1,1,2,2,2,2,2,2,
-0,2,0,1,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,
-3,3,3,3,3,3,2,3,3,3,2,2,3,3,3,2,1,2,3,2,3,2,2,2,2,1,2,1,1,1,2,2,
-0,2,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
-3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,
-1,0,1,0,0,0,0,0,2,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,2,3,3,2,3,1,2,2,2,2,3,2,3,1,1,2,2,1,2,2,1,1,0,2,2,2,2,
-0,1,0,1,2,2,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,
-3,0,0,1,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,0,
-0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,0,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,
-0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,
-3,2,2,1,2,2,2,2,2,2,2,1,2,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,0,3,3,3,
-0,3,0,2,2,2,2,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
-2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,1,1,1,2,0,1,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,0,0,0,0,0,
-0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,3,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,0,2,1,0,
-0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
-0,3,1,1,2,2,2,2,2,1,2,2,2,1,1,2,2,2,2,2,2,2,1,2,2,1,0,1,1,1,1,0,
-0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,2,1,1,1,1,2,1,1,2,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,
-0,0,2,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,0,0,
-2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,1,2,1,2,1,1,1,1,0,0,0,0,
-0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,2,1,2,2,2,2,2,2,2,2,2,2,1,2,1,2,1,1,2,1,1,1,2,1,2,1,2,0,1,0,1,
-0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,3,1,2,2,2,1,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,2,1,2,1,1,0,1,0,1,
-0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,1,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,
-0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
-3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,2,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,0,0,
-0,1,1,1,2,1,2,2,2,0,2,0,2,0,1,1,2,1,1,1,1,2,1,0,1,1,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,0,1,0,0,0,0,0,1,0,1,2,2,0,1,0,0,1,1,2,2,1,2,0,2,0,0,0,1,2,0,1,
-2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,2,0,2,1,2,0,2,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,0,1,
-2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,1,0,0,0,0,0,1,0,2,1,1,0,1,0,0,1,1,1,2,2,0,0,1,0,0,0,1,0,0,1,
-1,1,2,1,0,1,1,1,0,1,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,2,2,1,
-0,2,0,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,1,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,1,1,1,1,1,1,1,1,2,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1,
-2,0,1,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,2,1,1,2,0,1,0,0,0,1,1,0,1,
-1,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,0,0,2,1,1,2,0,2,0,0,0,1,1,0,1,
-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,1,0,2,1,1,0,1,0,0,2,2,1,2,1,1,0,1,0,0,0,1,1,0,1,
-2,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,1,2,2,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,1,0,1,
-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,1,2,2,0,0,0,0,2,1,1,1,0,2,1,1,0,0,0,2,1,0,1,
-1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,1,1,0,2,1,1,0,1,0,0,0,1,1,0,1,
-2,2,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,1,0,2,1,1,0,1,0,0,1,1,0,1,2,1,0,2,0,0,0,1,1,0,1,
-2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,
-0,1,0,0,2,0,2,1,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,1,0,0,1,
-1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,2,1,1,1,1,1,0,1,0,0,0,0,1,0,1,
-0,1,1,1,2,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,1,2,1,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,1,1,0,0,
-)
-
-Win1255HebrewModel = {
-  'charToOrderMap': win1255_CharToOrderMap,
-  'precedenceMatrix': HebrewLangModel,
-  'mTypicalPositiveRatio': 0.984004,
-  'keepEnglishLetter': False,
-  'charsetName': "windows-1255"
-}
-
-# flake8: noqa
diff --git a/bundle/requests/packages/chardet/langhebrewmodel.pyc b/bundle/requests/packages/chardet/langhebrewmodel.pyc
deleted file mode 100644
index 7ed466b..0000000
Binary files a/bundle/requests/packages/chardet/langhebrewmodel.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/langhungarianmodel.py b/bundle/requests/packages/chardet/langhungarianmodel.py
deleted file mode 100644
index 49d2f0f..0000000
--- a/bundle/requests/packages/chardet/langhungarianmodel.py
+++ /dev/null
@@ -1,225 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Communicator client code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-# 255: Control characters that usually does not exist in any text
-# 254: Carriage/Return
-# 253: symbol (punctuation) that does not belong to word
-# 252: 0 - 9
-
-# Character Mapping Table:
-Latin2_HungarianCharToOrderMap = (
-255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255,  # 00
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  # 10
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,  # 20
-252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253,  # 30
-253, 28, 40, 54, 45, 32, 50, 49, 38, 39, 53, 36, 41, 34, 35, 47,
- 46, 71, 43, 33, 37, 57, 48, 64, 68, 55, 52,253,253,253,253,253,
-253,  2, 18, 26, 17,  1, 27, 12, 20,  9, 22,  7,  6, 13,  4,  8,
- 23, 67, 10,  5,  3, 21, 19, 65, 62, 16, 11,253,253,253,253,253,
-159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,
-175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,
-191,192,193,194,195,196,197, 75,198,199,200,201,202,203,204,205,
- 79,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,
-221, 51, 81,222, 78,223,224,225,226, 44,227,228,229, 61,230,231,
-232,233,234, 58,235, 66, 59,236,237,238, 60, 69, 63,239,240,241,
- 82, 14, 74,242, 70, 80,243, 72,244, 15, 83, 77, 84, 30, 76, 85,
-245,246,247, 25, 73, 42, 24,248,249,250, 31, 56, 29,251,252,253,
-)
-
-win1250HungarianCharToOrderMap = (
-255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255,  # 00
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  # 10
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,  # 20
-252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253,  # 30
-253, 28, 40, 54, 45, 32, 50, 49, 38, 39, 53, 36, 41, 34, 35, 47,
- 46, 72, 43, 33, 37, 57, 48, 64, 68, 55, 52,253,253,253,253,253,
-253,  2, 18, 26, 17,  1, 27, 12, 20,  9, 22,  7,  6, 13,  4,  8,
- 23, 67, 10,  5,  3, 21, 19, 65, 62, 16, 11,253,253,253,253,253,
-161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,
-177,178,179,180, 78,181, 69,182,183,184,185,186,187,188,189,190,
-191,192,193,194,195,196,197, 76,198,199,200,201,202,203,204,205,
- 81,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,
-221, 51, 83,222, 80,223,224,225,226, 44,227,228,229, 61,230,231,
-232,233,234, 58,235, 66, 59,236,237,238, 60, 70, 63,239,240,241,
- 84, 14, 75,242, 71, 82,243, 73,244, 15, 85, 79, 86, 30, 77, 87,
-245,246,247, 25, 74, 42, 24,248,249,250, 31, 56, 29,251,252,253,
-)
-
-# Model Table:
-# total sequences: 100%
-# first 512 sequences: 94.7368%
-# first 1024 sequences:5.2623%
-# rest  sequences:     0.8894%
-# negative sequences:  0.0009%
-HungarianLangModel = (
-0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
-3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,2,3,3,1,1,2,2,2,2,2,1,2,
-3,2,2,3,3,3,3,3,2,3,3,3,3,3,3,1,2,3,3,3,3,2,3,3,1,1,3,3,0,1,1,1,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,
-3,2,1,3,3,3,3,3,2,3,3,3,3,3,1,1,2,3,3,3,3,3,3,3,1,1,3,2,0,1,1,1,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
-3,3,3,3,3,3,3,3,3,3,3,1,1,2,3,3,3,1,3,3,3,3,3,1,3,3,2,2,0,3,2,3,
-0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,
-3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,3,3,2,3,3,2,2,3,2,3,2,0,3,2,2,
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,
-3,3,3,3,3,3,2,3,3,3,3,3,2,3,3,3,1,2,3,2,2,3,1,2,3,3,2,2,0,3,3,3,
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
-3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,2,3,3,3,3,2,3,3,3,3,0,2,3,2,
-0,0,0,1,1,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
-3,3,3,3,3,3,3,3,3,3,3,1,1,1,3,3,2,1,3,2,2,3,2,1,3,2,2,1,0,3,3,1,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
-3,2,2,3,3,3,3,3,1,2,3,3,3,3,1,2,1,3,3,3,3,2,2,3,1,1,3,2,0,1,1,1,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
-3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,1,3,3,3,3,3,2,2,1,3,3,3,0,1,1,2,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,2,0,3,2,3,
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,1,0,
-3,3,3,3,3,3,2,3,3,3,2,3,2,3,3,3,1,3,2,2,2,3,1,1,3,3,1,1,0,3,3,2,
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
-3,3,3,3,3,3,3,2,3,3,3,2,3,2,3,3,3,2,3,3,3,3,3,1,2,3,2,2,0,2,2,2,
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
-3,3,3,2,2,2,3,1,3,3,2,2,1,3,3,3,1,1,3,1,2,3,2,3,2,2,2,1,0,2,2,2,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,
-3,1,1,3,3,3,3,3,1,2,3,3,3,3,1,2,1,3,3,3,2,2,3,2,1,0,3,2,0,1,1,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,1,1,3,3,3,3,3,1,2,3,3,3,3,1,1,0,3,3,3,3,0,2,3,0,0,2,1,0,1,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,2,2,3,3,2,2,2,2,3,3,0,1,2,3,2,3,2,2,3,2,1,2,0,2,2,2,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,
-3,3,3,3,3,3,1,2,3,3,3,2,1,2,3,3,2,2,2,3,2,3,3,1,3,3,1,1,0,2,3,2,
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
-3,3,3,1,2,2,2,2,3,3,3,1,1,1,3,3,1,1,3,1,1,3,2,1,2,3,1,1,0,2,2,2,
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
-3,3,3,2,1,2,1,1,3,3,1,1,1,1,3,3,1,1,2,2,1,2,1,1,2,2,1,1,0,2,2,1,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
-3,3,3,1,1,2,1,1,3,3,1,0,1,1,3,3,2,0,1,1,2,3,1,0,2,2,1,0,0,1,3,2,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
-3,2,1,3,3,3,3,3,1,2,3,2,3,3,2,1,1,3,2,3,2,1,2,2,0,1,2,1,0,0,1,1,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
-3,3,3,3,2,2,2,2,3,1,2,2,1,1,3,3,0,3,2,1,2,3,2,1,3,3,1,1,0,2,1,3,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
-3,3,3,2,2,2,3,2,3,3,3,2,1,1,3,3,1,1,1,2,2,3,2,3,2,2,2,1,0,2,2,1,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
-1,0,0,3,3,3,3,3,0,0,3,3,2,3,0,0,0,2,3,3,1,0,1,2,0,0,1,1,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,1,2,3,3,3,3,3,1,2,3,3,2,2,1,1,0,3,3,2,2,1,2,2,1,0,2,2,0,1,1,1,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,2,2,1,3,1,2,3,3,2,2,1,1,2,2,1,1,1,1,3,2,1,1,1,1,2,1,0,1,2,1,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
-2,3,3,1,1,1,1,1,3,3,3,0,1,1,3,3,1,1,1,1,1,2,2,0,3,1,1,2,0,2,1,1,
-0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
-3,1,0,1,2,1,2,2,0,1,2,3,1,2,0,0,0,2,1,1,1,1,1,2,0,0,1,1,0,0,0,0,
-1,2,1,2,2,2,1,2,1,2,0,2,0,2,2,1,1,2,1,1,2,1,1,1,0,1,0,0,0,1,1,0,
-1,1,1,2,3,2,3,3,0,1,2,2,3,1,0,1,0,2,1,2,2,0,1,1,0,0,1,1,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,0,0,3,3,2,2,1,0,0,3,2,3,2,0,0,0,1,1,3,0,0,1,1,0,0,2,1,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,1,1,2,2,3,3,1,0,1,3,2,3,1,1,1,0,1,1,1,1,1,3,1,0,0,2,2,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,1,1,1,2,2,2,1,0,1,2,3,3,2,0,0,0,2,1,1,1,2,1,1,1,0,1,1,1,0,0,0,
-1,2,2,2,2,2,1,1,1,2,0,2,1,1,1,1,1,2,1,1,1,1,1,1,0,1,1,1,0,0,1,1,
-3,2,2,1,0,0,1,1,2,2,0,3,0,1,2,1,1,0,0,1,1,1,0,1,1,1,1,0,2,1,1,1,
-2,2,1,1,1,2,1,2,1,1,1,1,1,1,1,2,1,1,1,2,3,1,1,1,1,1,1,1,1,1,0,1,
-2,3,3,0,1,0,0,0,3,3,1,0,0,1,2,2,1,0,0,0,0,2,0,0,1,1,1,0,2,1,1,1,
-2,1,1,1,1,1,1,2,1,1,0,1,1,0,1,1,1,0,1,2,1,1,0,1,1,1,1,1,1,1,0,1,
-2,3,3,0,1,0,0,0,2,2,0,0,0,0,1,2,2,0,0,0,0,1,0,0,1,1,0,0,2,0,1,0,
-2,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,0,1,
-3,2,2,0,1,0,1,0,2,3,2,0,0,1,2,2,1,0,0,1,1,1,0,0,2,1,0,1,2,2,1,1,
-2,1,1,1,1,1,1,2,1,1,1,1,1,1,0,2,1,0,1,1,0,1,1,1,0,1,1,2,1,1,0,1,
-2,2,2,0,0,1,0,0,2,2,1,1,0,0,2,1,1,0,0,0,1,2,0,0,2,1,0,0,2,1,1,1,
-2,1,1,1,1,2,1,2,1,1,1,2,2,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1,
-1,2,3,0,0,0,1,0,3,2,1,0,0,1,2,1,1,0,0,0,0,2,1,0,1,1,0,0,2,1,2,1,
-1,1,0,0,0,1,0,1,1,1,1,1,2,0,0,1,0,0,0,2,0,0,1,1,1,1,1,1,1,1,0,1,
-3,0,0,2,1,2,2,1,0,0,2,1,2,2,0,0,0,2,1,1,1,0,1,1,0,0,1,1,2,0,0,0,
-1,2,1,2,2,1,1,2,1,2,0,1,1,1,1,1,1,1,1,1,2,1,1,0,0,1,1,1,1,0,0,1,
-1,3,2,0,0,0,1,0,2,2,2,0,0,0,2,2,1,0,0,0,0,3,1,1,1,1,0,0,2,1,1,1,
-2,1,0,1,1,1,0,1,1,1,1,1,1,1,0,2,1,0,0,1,0,1,1,0,1,1,1,1,1,1,0,1,
-2,3,2,0,0,0,1,0,2,2,0,0,0,0,2,1,1,0,0,0,0,2,1,0,1,1,0,0,2,1,1,0,
-2,1,1,1,1,2,1,2,1,2,0,1,1,1,0,2,1,1,1,2,1,1,1,1,0,1,1,1,1,1,0,1,
-3,1,1,2,2,2,3,2,1,1,2,2,1,1,0,1,0,2,2,1,1,1,1,1,0,0,1,1,0,1,1,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,2,2,0,0,0,0,0,2,2,0,0,0,0,2,2,1,0,0,0,1,1,0,0,1,2,0,0,2,1,1,1,
-2,2,1,1,1,2,1,2,1,1,0,1,1,1,1,2,1,1,1,2,1,1,1,1,0,1,2,1,1,1,0,1,
-1,0,0,1,2,3,2,1,0,0,2,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0,
-1,2,1,2,1,2,1,1,1,2,0,2,1,1,1,0,1,2,0,0,1,1,1,0,0,0,0,0,0,0,0,0,
-2,3,2,0,0,0,0,0,1,1,2,1,0,0,1,1,1,0,0,0,0,2,0,0,1,1,0,0,2,1,1,1,
-2,1,1,1,1,1,1,2,1,0,1,1,1,1,0,2,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1,
-1,2,2,0,1,1,1,0,2,2,2,0,0,0,3,2,1,0,0,0,1,1,0,0,1,1,0,1,1,1,0,0,
-1,1,0,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,0,0,1,1,1,0,1,0,1,
-2,1,0,2,1,1,2,2,1,1,2,1,1,1,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,
-1,2,2,2,2,2,1,1,1,2,0,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,1,0,
-1,2,3,0,0,0,1,0,2,2,0,0,0,0,2,2,0,0,0,0,0,1,0,0,1,0,0,0,2,0,1,0,
-2,1,1,1,1,1,0,2,0,0,0,1,2,1,1,1,1,0,1,2,0,1,0,1,0,1,1,1,0,1,0,1,
-2,2,2,0,0,0,1,0,2,1,2,0,0,0,1,1,2,0,0,0,0,1,0,0,1,1,0,0,2,1,0,1,
-2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,0,1,
-1,2,2,0,0,0,1,0,2,2,2,0,0,0,1,1,0,0,0,0,0,1,1,0,2,0,0,1,1,1,0,1,
-1,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,0,0,0,1,
-1,0,0,1,0,1,2,1,0,0,1,1,1,2,0,0,0,1,1,0,1,0,1,1,0,0,1,0,0,0,0,0,
-0,2,1,2,1,1,1,1,1,2,0,2,0,1,1,0,1,2,1,0,1,1,1,0,0,0,0,0,0,1,0,0,
-2,1,1,0,1,2,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,2,1,0,1,
-2,2,1,1,1,1,1,2,1,1,0,1,1,1,1,2,1,1,1,2,1,1,0,1,0,1,1,1,1,1,0,1,
-1,2,2,0,0,0,0,0,1,1,0,0,0,0,2,1,0,0,0,0,0,2,0,0,2,2,0,0,2,0,0,1,
-2,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,
-1,1,2,0,0,3,1,0,2,1,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,1,0,0,1,0,1,0,
-1,2,1,0,1,1,1,2,1,1,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,1,0,0,0,1,0,0,
-2,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,2,0,0,0,
-2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,1,1,0,0,1,1,1,1,1,0,1,
-2,1,1,1,2,1,1,1,0,1,1,2,1,0,0,0,0,1,1,1,1,0,1,0,0,0,0,1,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,1,0,1,1,1,1,1,0,0,1,1,2,1,0,0,0,1,1,0,0,0,1,1,0,0,1,0,1,0,0,0,
-1,2,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,
-2,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,2,0,0,1,0,0,1,0,1,0,0,0,
-0,1,1,1,1,1,1,1,1,2,0,1,1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,
-1,0,0,1,1,1,1,1,0,0,2,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,
-0,1,1,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,
-1,0,0,1,1,1,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,
-0,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,
-0,0,0,1,0,0,0,0,0,0,1,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,1,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,
-2,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,0,1,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,0,0,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,
-0,1,1,1,1,1,1,0,1,1,0,1,0,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,
-)
-
-Latin2HungarianModel = {
-  'charToOrderMap': Latin2_HungarianCharToOrderMap,
-  'precedenceMatrix': HungarianLangModel,
-  'mTypicalPositiveRatio': 0.947368,
-  'keepEnglishLetter': True,
-  'charsetName': "ISO-8859-2"
-}
-
-Win1250HungarianModel = {
-  'charToOrderMap': win1250HungarianCharToOrderMap,
-  'precedenceMatrix': HungarianLangModel,
-  'mTypicalPositiveRatio': 0.947368,
-  'keepEnglishLetter': True,
-  'charsetName': "windows-1250"
-}
-
-# flake8: noqa
diff --git a/bundle/requests/packages/chardet/langhungarianmodel.pyc b/bundle/requests/packages/chardet/langhungarianmodel.pyc
deleted file mode 100644
index 2fdc313..0000000
Binary files a/bundle/requests/packages/chardet/langhungarianmodel.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/langthaimodel.py b/bundle/requests/packages/chardet/langthaimodel.py
deleted file mode 100644
index 0508b1b..0000000
--- a/bundle/requests/packages/chardet/langthaimodel.py
+++ /dev/null
@@ -1,200 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Communicator client code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-# 255: Control characters that usually does not exist in any text
-# 254: Carriage/Return
-# 253: symbol (punctuation) that does not belong to word
-# 252: 0 - 9
-
-# The following result for thai was collected from a limited sample (1M).
-
-# Character Mapping Table:
-TIS620CharToOrderMap = (
-255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255,  # 00
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  # 10
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,  # 20
-252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253,  # 30
-253,182,106,107,100,183,184,185,101, 94,186,187,108,109,110,111,  # 40
-188,189,190, 89, 95,112,113,191,192,193,194,253,253,253,253,253,  # 50
-253, 64, 72, 73,114, 74,115,116,102, 81,201,117, 90,103, 78, 82,  # 60
- 96,202, 91, 79, 84,104,105, 97, 98, 92,203,253,253,253,253,253,  # 70
-209,210,211,212,213, 88,214,215,216,217,218,219,220,118,221,222,
-223,224, 99, 85, 83,225,226,227,228,229,230,231,232,233,234,235,
-236,  5, 30,237, 24,238, 75,  8, 26, 52, 34, 51,119, 47, 58, 57,
- 49, 53, 55, 43, 20, 19, 44, 14, 48,  3, 17, 25, 39, 62, 31, 54,
- 45,  9, 16,  2, 61, 15,239, 12, 42, 46, 18, 21, 76,  4, 66, 63,
- 22, 10,  1, 36, 23, 13, 40, 27, 32, 35, 86,240,241,242,243,244,
- 11, 28, 41, 29, 33,245, 50, 37,  6,  7, 67, 77, 38, 93,246,247,
- 68, 56, 59, 65, 69, 60, 70, 80, 71, 87,248,249,250,251,252,253,
-)
-
-# Model Table:
-# total sequences: 100%
-# first 512 sequences: 92.6386%
-# first 1024 sequences:7.3177%
-# rest  sequences:     1.0230%
-# negative sequences:  0.0436%
-ThaiLangModel = (
-0,1,3,3,3,3,0,0,3,3,0,3,3,0,3,3,3,3,3,3,3,3,0,0,3,3,3,0,3,3,3,3,
-0,3,3,0,0,0,1,3,0,3,3,2,3,3,0,1,2,3,3,3,3,0,2,0,2,0,0,3,2,1,2,2,
-3,0,3,3,2,3,0,0,3,3,0,3,3,0,3,3,3,3,3,3,3,3,3,0,3,2,3,0,2,2,2,3,
-0,2,3,0,0,0,0,1,0,1,2,3,1,1,3,2,2,0,1,1,0,0,1,0,0,0,0,0,0,0,1,1,
-3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,2,3,2,3,3,2,2,2,
-3,1,2,3,0,3,3,2,2,1,2,3,3,1,2,0,1,3,0,1,0,0,1,0,0,0,0,0,0,0,1,1,
-3,3,2,2,3,3,3,3,1,2,3,3,3,3,3,2,2,2,2,3,3,2,2,3,3,2,2,3,2,3,2,2,
-3,3,1,2,3,1,2,2,3,3,1,0,2,1,0,0,3,1,2,1,0,0,1,0,0,0,0,0,0,1,0,1,
-3,3,3,3,3,3,2,2,3,3,3,3,2,3,2,2,3,3,2,2,3,2,2,2,2,1,1,3,1,2,1,1,
-3,2,1,0,2,1,0,1,0,1,1,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,
-3,3,3,2,3,2,3,3,2,2,3,2,3,3,2,3,1,1,2,3,2,2,2,3,2,2,2,2,2,1,2,1,
-2,2,1,1,3,3,2,1,0,1,2,2,0,1,3,0,0,0,1,1,0,0,0,0,0,2,3,0,0,2,1,1,
-3,3,2,3,3,2,0,0,3,3,0,3,3,0,2,2,3,1,2,2,1,1,1,0,2,2,2,0,2,2,1,1,
-0,2,1,0,2,0,0,2,0,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,
-3,3,2,3,3,2,0,0,3,3,0,2,3,0,2,1,2,2,2,2,1,2,0,0,2,2,2,0,2,2,1,1,
-0,2,1,0,2,0,0,2,0,1,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,
-3,3,2,3,2,3,2,0,2,2,1,3,2,1,3,2,1,2,3,2,2,3,0,2,3,2,2,1,2,2,2,2,
-1,2,2,0,0,0,0,2,0,1,2,0,1,1,1,0,1,0,3,1,1,0,0,0,0,0,0,0,0,0,1,0,
-3,3,2,3,3,2,3,2,2,2,3,2,2,3,2,2,1,2,3,2,2,3,1,3,2,2,2,3,2,2,2,3,
-3,2,1,3,0,1,1,1,0,2,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,2,0,0,
-1,0,0,3,0,3,3,3,3,3,0,0,3,0,2,2,3,3,3,3,3,0,0,0,1,1,3,0,0,0,0,2,
-0,0,1,0,0,0,0,0,0,0,2,3,0,0,0,3,0,2,0,0,0,0,0,3,0,0,0,0,0,0,0,0,
-2,0,3,3,3,3,0,0,2,3,0,0,3,0,3,3,2,3,3,3,3,3,0,0,3,3,3,0,0,0,3,3,
-0,0,3,0,0,0,0,2,0,0,2,1,1,3,0,0,1,0,0,2,3,0,1,0,0,0,0,0,0,0,1,0,
-3,3,3,3,2,3,3,3,3,3,3,3,1,2,1,3,3,2,2,1,2,2,2,3,1,1,2,0,2,1,2,1,
-2,2,1,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,
-3,0,2,1,2,3,3,3,0,2,0,2,2,0,2,1,3,2,2,1,2,1,0,0,2,2,1,0,2,1,2,2,
-0,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,2,1,3,3,1,1,3,0,2,3,1,1,3,2,1,1,2,0,2,2,3,2,1,1,1,1,1,2,
-3,0,0,1,3,1,2,1,2,0,3,0,0,0,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,
-3,3,1,1,3,2,3,3,3,1,3,2,1,3,2,1,3,2,2,2,2,1,3,3,1,2,1,3,1,2,3,0,
-2,1,1,3,2,2,2,1,2,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,
-3,3,2,3,2,3,3,2,3,2,3,2,3,3,2,1,0,3,2,2,2,1,2,2,2,1,2,2,1,2,1,1,
-2,2,2,3,0,1,3,1,1,1,1,0,1,1,0,2,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,2,3,2,2,1,1,3,2,3,2,3,2,0,3,2,2,1,2,0,2,2,2,1,2,2,2,2,1,
-3,2,1,2,2,1,0,2,0,1,0,0,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,1,
-3,3,3,3,3,2,3,1,2,3,3,2,2,3,0,1,1,2,0,3,3,2,2,3,0,1,1,3,0,0,0,0,
-3,1,0,3,3,0,2,0,2,1,0,0,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,2,3,2,3,3,0,1,3,1,1,2,1,2,1,1,3,1,1,0,2,3,1,1,1,1,1,1,1,1,
-3,1,1,2,2,2,2,1,1,1,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
-3,2,2,1,1,2,1,3,3,2,3,2,2,3,2,2,3,1,2,2,1,2,0,3,2,1,2,2,2,2,2,1,
-3,2,1,2,2,2,1,1,1,1,0,0,1,1,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,3,3,3,3,1,3,3,0,2,1,0,3,2,0,0,3,1,0,1,1,0,1,0,0,0,0,0,1,
-1,0,0,1,0,3,2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,0,2,2,2,3,0,0,1,3,0,3,2,0,3,2,2,3,3,3,3,3,1,0,2,2,2,0,2,2,1,2,
-0,2,3,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
-3,0,2,3,1,3,3,2,3,3,0,3,3,0,3,2,2,3,2,3,3,3,0,0,2,2,3,0,1,1,1,3,
-0,0,3,0,0,0,2,2,0,1,3,0,1,2,2,2,3,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,
-3,2,3,3,2,0,3,3,2,2,3,1,3,2,1,3,2,0,1,2,2,0,2,3,2,1,0,3,0,0,0,0,
-3,0,0,2,3,1,3,0,0,3,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,1,3,2,2,2,1,2,0,1,3,1,1,3,1,3,0,0,2,1,1,1,1,2,1,1,1,0,2,1,0,1,
-1,2,0,0,0,3,1,1,0,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,3,1,0,0,0,1,0,
-3,3,3,3,2,2,2,2,2,1,3,1,1,1,2,0,1,1,2,1,2,1,3,2,0,0,3,1,1,1,1,1,
-3,1,0,2,3,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,2,3,0,3,3,0,2,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0,
-0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,2,3,1,3,0,0,1,2,0,0,2,0,3,3,2,3,3,3,2,3,0,0,2,2,2,0,0,0,2,2,
-0,0,1,0,0,0,0,3,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,
-0,0,0,3,0,2,0,0,0,0,0,0,0,0,0,0,1,2,3,1,3,3,0,0,1,0,3,0,0,0,0,0,
-0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,1,2,3,1,2,3,1,0,3,0,2,2,1,0,2,1,1,2,0,1,0,0,1,1,1,1,0,1,0,0,
-1,0,0,0,0,1,1,0,3,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,3,3,2,1,0,1,1,1,3,1,2,2,2,2,2,2,1,1,1,1,0,3,1,0,1,3,1,1,1,1,
-1,1,0,2,0,1,3,1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,1,
-3,0,2,2,1,3,3,2,3,3,0,1,1,0,2,2,1,2,1,3,3,1,0,0,3,2,0,0,0,0,2,1,
-0,1,0,0,0,0,1,2,0,1,1,3,1,1,2,2,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,
-0,0,3,0,0,1,0,0,0,3,0,0,3,0,3,1,0,1,1,1,3,2,0,0,0,3,0,0,0,0,2,0,
-0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0,
-3,3,1,3,2,1,3,3,1,2,2,0,1,2,1,0,1,2,0,0,0,0,0,3,0,0,0,3,0,0,0,0,
-3,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,0,1,2,0,3,3,3,2,2,0,1,1,0,1,3,0,0,0,2,2,0,0,0,0,3,1,0,1,0,0,0,
-0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,0,2,3,1,2,0,0,2,1,0,3,1,0,1,2,0,1,1,1,1,3,0,0,3,1,1,0,2,2,1,1,
-0,2,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,0,0,3,1,2,0,0,2,2,0,1,2,0,1,0,1,3,1,2,1,0,0,0,2,0,3,0,0,0,1,0,
-0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,0,1,1,2,2,0,0,0,2,0,2,1,0,1,1,0,1,1,1,2,1,0,0,1,1,1,0,2,1,1,1,
-0,1,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,
-0,0,0,2,0,1,3,1,1,1,1,0,0,0,0,3,2,0,1,0,0,0,1,2,0,0,0,1,0,0,0,0,
-0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,3,3,3,3,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,0,2,3,2,2,0,0,0,1,0,0,0,0,2,3,2,1,2,2,3,0,0,0,2,3,1,0,0,0,1,1,
-0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,
-3,3,2,2,0,1,0,0,0,0,2,0,2,0,1,0,0,0,1,1,0,0,0,2,1,0,1,0,1,1,0,0,
-0,1,0,2,0,0,1,0,3,0,1,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,1,0,0,1,0,0,0,0,0,1,1,2,0,0,0,0,1,0,0,1,3,1,0,0,0,0,1,1,0,0,
-0,1,0,0,0,0,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,
-3,3,1,1,1,1,2,3,0,0,2,1,1,1,1,1,0,2,1,1,0,0,0,2,1,0,1,2,1,1,0,1,
-2,1,0,3,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,3,1,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,
-0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,3,2,0,0,0,0,0,0,1,2,1,0,1,1,0,2,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,2,0,0,0,1,3,0,1,0,0,0,2,0,0,0,0,0,0,0,1,2,0,0,0,0,0,
-3,3,0,0,1,1,2,0,0,1,2,1,0,1,1,1,0,1,1,0,0,2,1,1,0,1,0,0,1,1,1,0,
-0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,2,2,1,0,0,0,0,1,0,0,0,0,3,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,
-2,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,3,0,0,1,1,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,1,0,1,2,0,1,2,0,0,1,1,0,2,0,1,0,0,1,0,0,0,0,1,0,0,0,2,0,0,0,0,
-1,0,0,1,0,1,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,1,0,0,0,0,0,0,0,1,1,0,1,1,0,2,1,3,0,0,0,0,1,1,0,0,0,0,0,0,0,3,
-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,0,1,0,1,0,0,2,0,0,2,0,0,1,1,2,0,0,1,1,0,0,0,1,0,0,0,1,1,0,0,0,
-1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,
-1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0,
-2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,3,0,0,0,
-2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,
-1,0,0,0,0,0,0,0,0,1,0,0,0,0,2,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,1,1,0,0,2,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-)
-
-TIS620ThaiModel = {
-  'charToOrderMap': TIS620CharToOrderMap,
-  'precedenceMatrix': ThaiLangModel,
-  'mTypicalPositiveRatio': 0.926386,
-  'keepEnglishLetter': False,
-  'charsetName': "TIS-620"
-}
-
-# flake8: noqa
diff --git a/bundle/requests/packages/chardet/langthaimodel.pyc b/bundle/requests/packages/chardet/langthaimodel.pyc
deleted file mode 100644
index 6813312..0000000
Binary files a/bundle/requests/packages/chardet/langthaimodel.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/latin1prober.py b/bundle/requests/packages/chardet/latin1prober.py
deleted file mode 100644
index ad695f5..0000000
--- a/bundle/requests/packages/chardet/latin1prober.py
+++ /dev/null
@@ -1,139 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Universal charset detector code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 2001
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#   Shy Shalom - original C code
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-from .charsetprober import CharSetProber
-from .constants import eNotMe
-from .compat import wrap_ord
-
-FREQ_CAT_NUM = 4
-
-UDF = 0  # undefined
-OTH = 1  # other
-ASC = 2  # ascii capital letter
-ASS = 3  # ascii small letter
-ACV = 4  # accent capital vowel
-ACO = 5  # accent capital other
-ASV = 6  # accent small vowel
-ASO = 7  # accent small other
-CLASS_NUM = 8  # total classes
-
-Latin1_CharToClass = (
-    OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH,   # 00 - 07
-    OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH,   # 08 - 0F
-    OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH,   # 10 - 17
-    OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH,   # 18 - 1F
-    OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH,   # 20 - 27
-    OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH,   # 28 - 2F
-    OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH,   # 30 - 37
-    OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH,   # 38 - 3F
-    OTH, ASC, ASC, ASC, ASC, ASC, ASC, ASC,   # 40 - 47
-    ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,   # 48 - 4F
-    ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,   # 50 - 57
-    ASC, ASC, ASC, OTH, OTH, OTH, OTH, OTH,   # 58 - 5F
-    OTH, ASS, ASS, ASS, ASS, ASS, ASS, ASS,   # 60 - 67
-    ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS,   # 68 - 6F
-    ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS,   # 70 - 77
-    ASS, ASS, ASS, OTH, OTH, OTH, OTH, OTH,   # 78 - 7F
-    OTH, UDF, OTH, ASO, OTH, OTH, OTH, OTH,   # 80 - 87
-    OTH, OTH, ACO, OTH, ACO, UDF, ACO, UDF,   # 88 - 8F
-    UDF, OTH, OTH, OTH, OTH, OTH, OTH, OTH,   # 90 - 97
-    OTH, OTH, ASO, OTH, ASO, UDF, ASO, ACO,   # 98 - 9F
-    OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH,   # A0 - A7
-    OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH,   # A8 - AF
-    OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH,   # B0 - B7
-    OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH,   # B8 - BF
-    ACV, ACV, ACV, ACV, ACV, ACV, ACO, ACO,   # C0 - C7
-    ACV, ACV, ACV, ACV, ACV, ACV, ACV, ACV,   # C8 - CF
-    ACO, ACO, ACV, ACV, ACV, ACV, ACV, OTH,   # D0 - D7
-    ACV, ACV, ACV, ACV, ACV, ACO, ACO, ACO,   # D8 - DF
-    ASV, ASV, ASV, ASV, ASV, ASV, ASO, ASO,   # E0 - E7
-    ASV, ASV, ASV, ASV, ASV, ASV, ASV, ASV,   # E8 - EF
-    ASO, ASO, ASV, ASV, ASV, ASV, ASV, OTH,   # F0 - F7
-    ASV, ASV, ASV, ASV, ASV, ASO, ASO, ASO,   # F8 - FF
-)
-
-# 0 : illegal
-# 1 : very unlikely
-# 2 : normal
-# 3 : very likely
-Latin1ClassModel = (
-    # UDF OTH ASC ASS ACV ACO ASV ASO
-    0,  0,  0,  0,  0,  0,  0,  0,  # UDF
-    0,  3,  3,  3,  3,  3,  3,  3,  # OTH
-    0,  3,  3,  3,  3,  3,  3,  3,  # ASC
-    0,  3,  3,  3,  1,  1,  3,  3,  # ASS
-    0,  3,  3,  3,  1,  2,  1,  2,  # ACV
-    0,  3,  3,  3,  3,  3,  3,  3,  # ACO
-    0,  3,  1,  3,  1,  1,  1,  3,  # ASV
-    0,  3,  1,  3,  1,  1,  3,  3,  # ASO
-)
-
-
-class Latin1Prober(CharSetProber):
-    def __init__(self):
-        CharSetProber.__init__(self)
-        self.reset()
-
-    def reset(self):
-        self._mLastCharClass = OTH
-        self._mFreqCounter = [0] * FREQ_CAT_NUM
-        CharSetProber.reset(self)
-
-    def get_charset_name(self):
-        return "windows-1252"
-
-    def feed(self, aBuf):
-        aBuf = self.filter_with_english_letters(aBuf)
-        for c in aBuf:
-            charClass = Latin1_CharToClass[wrap_ord(c)]
-            freq = Latin1ClassModel[(self._mLastCharClass * CLASS_NUM)
-                                    + charClass]
-            if freq == 0:
-                self._mState = eNotMe
-                break
-            self._mFreqCounter[freq] += 1
-            self._mLastCharClass = charClass
-
-        return self.get_state()
-
-    def get_confidence(self):
-        if self.get_state() == eNotMe:
-            return 0.01
-
-        total = sum(self._mFreqCounter)
-        if total < 0.01:
-            confidence = 0.0
-        else:
-            confidence = ((self._mFreqCounter[3] / total)
-                          - (self._mFreqCounter[1] * 20.0 / total))
-        if confidence < 0.0:
-            confidence = 0.0
-        # lower the confidence of latin1 so that other more accurate
-        # detector can take priority.
-        confidence = confidence * 0.5
-        return confidence
diff --git a/bundle/requests/packages/chardet/latin1prober.pyc b/bundle/requests/packages/chardet/latin1prober.pyc
deleted file mode 100644
index afa5ec9..0000000
Binary files a/bundle/requests/packages/chardet/latin1prober.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/mbcharsetprober.py b/bundle/requests/packages/chardet/mbcharsetprober.py
deleted file mode 100644
index bb42f2f..0000000
--- a/bundle/requests/packages/chardet/mbcharsetprober.py
+++ /dev/null
@@ -1,86 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Universal charset detector code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 2001
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#   Shy Shalom - original C code
-#   Proofpoint, Inc.
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-import sys
-from . import constants
-from .charsetprober import CharSetProber
-
-
-class MultiByteCharSetProber(CharSetProber):
-    def __init__(self):
-        CharSetProber.__init__(self)
-        self._mDistributionAnalyzer = None
-        self._mCodingSM = None
-        self._mLastChar = [0, 0]
-
-    def reset(self):
-        CharSetProber.reset(self)
-        if self._mCodingSM:
-            self._mCodingSM.reset()
-        if self._mDistributionAnalyzer:
-            self._mDistributionAnalyzer.reset()
-        self._mLastChar = [0, 0]
-
-    def get_charset_name(self):
-        pass
-
-    def feed(self, aBuf):
-        aLen = len(aBuf)
-        for i in range(0, aLen):
-            codingState = self._mCodingSM.next_state(aBuf[i])
-            if codingState == constants.eError:
-                if constants._debug:
-                    sys.stderr.write(self.get_charset_name()
-                                     + ' prober hit error at byte ' + str(i)
-                                     + '\n')
-                self._mState = constants.eNotMe
-                break
-            elif codingState == constants.eItsMe:
-                self._mState = constants.eFoundIt
-                break
-            elif codingState == constants.eStart:
-                charLen = self._mCodingSM.get_current_charlen()
-                if i == 0:
-                    self._mLastChar[1] = aBuf[0]
-                    self._mDistributionAnalyzer.feed(self._mLastChar, charLen)
-                else:
-                    self._mDistributionAnalyzer.feed(aBuf[i - 1:i + 1],
-                                                     charLen)
-
-        self._mLastChar[0] = aBuf[aLen - 1]
-
-        if self.get_state() == constants.eDetecting:
-            if (self._mDistributionAnalyzer.got_enough_data() and
-                    (self.get_confidence() > constants.SHORTCUT_THRESHOLD)):
-                self._mState = constants.eFoundIt
-
-        return self.get_state()
-
-    def get_confidence(self):
-        return self._mDistributionAnalyzer.get_confidence()
diff --git a/bundle/requests/packages/chardet/mbcharsetprober.pyc b/bundle/requests/packages/chardet/mbcharsetprober.pyc
deleted file mode 100644
index bb86b76..0000000
Binary files a/bundle/requests/packages/chardet/mbcharsetprober.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/mbcsgroupprober.py b/bundle/requests/packages/chardet/mbcsgroupprober.py
deleted file mode 100644
index 03c9dcf..0000000
--- a/bundle/requests/packages/chardet/mbcsgroupprober.py
+++ /dev/null
@@ -1,54 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Universal charset detector code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 2001
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#   Shy Shalom - original C code
-#   Proofpoint, Inc.
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-from .charsetgroupprober import CharSetGroupProber
-from .utf8prober import UTF8Prober
-from .sjisprober import SJISProber
-from .eucjpprober import EUCJPProber
-from .gb2312prober import GB2312Prober
-from .euckrprober import EUCKRProber
-from .cp949prober import CP949Prober
-from .big5prober import Big5Prober
-from .euctwprober import EUCTWProber
-
-
-class MBCSGroupProber(CharSetGroupProber):
-    def __init__(self):
-        CharSetGroupProber.__init__(self)
-        self._mProbers = [
-            UTF8Prober(),
-            SJISProber(),
-            EUCJPProber(),
-            GB2312Prober(),
-            EUCKRProber(),
-            CP949Prober(),
-            Big5Prober(),
-            EUCTWProber()
-        ]
-        self.reset()
diff --git a/bundle/requests/packages/chardet/mbcsgroupprober.pyc b/bundle/requests/packages/chardet/mbcsgroupprober.pyc
deleted file mode 100644
index 38d4afe..0000000
Binary files a/bundle/requests/packages/chardet/mbcsgroupprober.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/mbcssm.py b/bundle/requests/packages/chardet/mbcssm.py
deleted file mode 100644
index 3f93cfb..0000000
--- a/bundle/requests/packages/chardet/mbcssm.py
+++ /dev/null
@@ -1,575 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is mozilla.org code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-from .constants import eStart, eError, eItsMe
-
-# BIG5
-
-BIG5_cls = (
-    1,1,1,1,1,1,1,1,  # 00 - 07    #allow 0x00 as legal value
-    1,1,1,1,1,1,0,0,  # 08 - 0f
-    1,1,1,1,1,1,1,1,  # 10 - 17
-    1,1,1,0,1,1,1,1,  # 18 - 1f
-    1,1,1,1,1,1,1,1,  # 20 - 27
-    1,1,1,1,1,1,1,1,  # 28 - 2f
-    1,1,1,1,1,1,1,1,  # 30 - 37
-    1,1,1,1,1,1,1,1,  # 38 - 3f
-    2,2,2,2,2,2,2,2,  # 40 - 47
-    2,2,2,2,2,2,2,2,  # 48 - 4f
-    2,2,2,2,2,2,2,2,  # 50 - 57
-    2,2,2,2,2,2,2,2,  # 58 - 5f
-    2,2,2,2,2,2,2,2,  # 60 - 67
-    2,2,2,2,2,2,2,2,  # 68 - 6f
-    2,2,2,2,2,2,2,2,  # 70 - 77
-    2,2,2,2,2,2,2,1,  # 78 - 7f
-    4,4,4,4,4,4,4,4,  # 80 - 87
-    4,4,4,4,4,4,4,4,  # 88 - 8f
-    4,4,4,4,4,4,4,4,  # 90 - 97
-    4,4,4,4,4,4,4,4,  # 98 - 9f
-    4,3,3,3,3,3,3,3,  # a0 - a7
-    3,3,3,3,3,3,3,3,  # a8 - af
-    3,3,3,3,3,3,3,3,  # b0 - b7
-    3,3,3,3,3,3,3,3,  # b8 - bf
-    3,3,3,3,3,3,3,3,  # c0 - c7
-    3,3,3,3,3,3,3,3,  # c8 - cf
-    3,3,3,3,3,3,3,3,  # d0 - d7
-    3,3,3,3,3,3,3,3,  # d8 - df
-    3,3,3,3,3,3,3,3,  # e0 - e7
-    3,3,3,3,3,3,3,3,  # e8 - ef
-    3,3,3,3,3,3,3,3,  # f0 - f7
-    3,3,3,3,3,3,3,0  # f8 - ff
-)
-
-BIG5_st = (
-    eError,eStart,eStart,     3,eError,eError,eError,eError,#00-07
-    eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eError,#08-0f
-    eError,eStart,eStart,eStart,eStart,eStart,eStart,eStart#10-17
-)
-
-Big5CharLenTable = (0, 1, 1, 2, 0)
-
-Big5SMModel = {'classTable': BIG5_cls,
-               'classFactor': 5,
-               'stateTable': BIG5_st,
-               'charLenTable': Big5CharLenTable,
-               'name': 'Big5'}
-
-# CP949
-
-CP949_cls  = (
-    1,1,1,1,1,1,1,1, 1,1,1,1,1,1,0,0,  # 00 - 0f
-    1,1,1,1,1,1,1,1, 1,1,1,0,1,1,1,1,  # 10 - 1f
-    1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,  # 20 - 2f
-    1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,  # 30 - 3f
-    1,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,4,  # 40 - 4f
-    4,4,5,5,5,5,5,5, 5,5,5,1,1,1,1,1,  # 50 - 5f
-    1,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,  # 60 - 6f
-    5,5,5,5,5,5,5,5, 5,5,5,1,1,1,1,1,  # 70 - 7f
-    0,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6,  # 80 - 8f
-    6,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6,  # 90 - 9f
-    6,7,7,7,7,7,7,7, 7,7,7,7,7,8,8,8,  # a0 - af
-    7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7,  # b0 - bf
-    7,7,7,7,7,7,9,2, 2,3,2,2,2,2,2,2,  # c0 - cf
-    2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,  # d0 - df
-    2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,  # e0 - ef
-    2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,0,  # f0 - ff
-)
-
-CP949_st = (
-#cls=    0      1      2      3      4      5      6      7      8      9  # previous state =
-    eError,eStart,     3,eError,eStart,eStart,     4,     5,eError,     6, # eStart
-    eError,eError,eError,eError,eError,eError,eError,eError,eError,eError, # eError
-    eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe, # eItsMe
-    eError,eError,eStart,eStart,eError,eError,eError,eStart,eStart,eStart, # 3
-    eError,eError,eStart,eStart,eStart,eStart,eStart,eStart,eStart,eStart, # 4
-    eError,eStart,eStart,eStart,eStart,eStart,eStart,eStart,eStart,eStart, # 5
-    eError,eStart,eStart,eStart,eStart,eError,eError,eStart,eStart,eStart, # 6
-)
-
-CP949CharLenTable = (0, 1, 2, 0, 1, 1, 2, 2, 0, 2)
-
-CP949SMModel = {'classTable': CP949_cls,
-                'classFactor': 10,
-                'stateTable': CP949_st,
-                'charLenTable': CP949CharLenTable,
-                'name': 'CP949'}
-
-# EUC-JP
-
-EUCJP_cls = (
-    4,4,4,4,4,4,4,4,  # 00 - 07
-    4,4,4,4,4,4,5,5,  # 08 - 0f
-    4,4,4,4,4,4,4,4,  # 10 - 17
-    4,4,4,5,4,4,4,4,  # 18 - 1f
-    4,4,4,4,4,4,4,4,  # 20 - 27
-    4,4,4,4,4,4,4,4,  # 28 - 2f
-    4,4,4,4,4,4,4,4,  # 30 - 37
-    4,4,4,4,4,4,4,4,  # 38 - 3f
-    4,4,4,4,4,4,4,4,  # 40 - 47
-    4,4,4,4,4,4,4,4,  # 48 - 4f
-    4,4,4,4,4,4,4,4,  # 50 - 57
-    4,4,4,4,4,4,4,4,  # 58 - 5f
-    4,4,4,4,4,4,4,4,  # 60 - 67
-    4,4,4,4,4,4,4,4,  # 68 - 6f
-    4,4,4,4,4,4,4,4,  # 70 - 77
-    4,4,4,4,4,4,4,4,  # 78 - 7f
-    5,5,5,5,5,5,5,5,  # 80 - 87
-    5,5,5,5,5,5,1,3,  # 88 - 8f
-    5,5,5,5,5,5,5,5,  # 90 - 97
-    5,5,5,5,5,5,5,5,  # 98 - 9f
-    5,2,2,2,2,2,2,2,  # a0 - a7
-    2,2,2,2,2,2,2,2,  # a8 - af
-    2,2,2,2,2,2,2,2,  # b0 - b7
-    2,2,2,2,2,2,2,2,  # b8 - bf
-    2,2,2,2,2,2,2,2,  # c0 - c7
-    2,2,2,2,2,2,2,2,  # c8 - cf
-    2,2,2,2,2,2,2,2,  # d0 - d7
-    2,2,2,2,2,2,2,2,  # d8 - df
-    0,0,0,0,0,0,0,0,  # e0 - e7
-    0,0,0,0,0,0,0,0,  # e8 - ef
-    0,0,0,0,0,0,0,0,  # f0 - f7
-    0,0,0,0,0,0,0,5  # f8 - ff
-)
-
-EUCJP_st = (
-          3,     4,     3,     5,eStart,eError,eError,eError,#00-07
-     eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,#08-0f
-     eItsMe,eItsMe,eStart,eError,eStart,eError,eError,eError,#10-17
-     eError,eError,eStart,eError,eError,eError,     3,eError,#18-1f
-          3,eError,eError,eError,eStart,eStart,eStart,eStart#20-27
-)
-
-EUCJPCharLenTable = (2, 2, 2, 3, 1, 0)
-
-EUCJPSMModel = {'classTable': EUCJP_cls,
-                'classFactor': 6,
-                'stateTable': EUCJP_st,
-                'charLenTable': EUCJPCharLenTable,
-                'name': 'EUC-JP'}
-
-# EUC-KR
-
-EUCKR_cls  = (
-    1,1,1,1,1,1,1,1,  # 00 - 07
-    1,1,1,1,1,1,0,0,  # 08 - 0f
-    1,1,1,1,1,1,1,1,  # 10 - 17
-    1,1,1,0,1,1,1,1,  # 18 - 1f
-    1,1,1,1,1,1,1,1,  # 20 - 27
-    1,1,1,1,1,1,1,1,  # 28 - 2f
-    1,1,1,1,1,1,1,1,  # 30 - 37
-    1,1,1,1,1,1,1,1,  # 38 - 3f
-    1,1,1,1,1,1,1,1,  # 40 - 47
-    1,1,1,1,1,1,1,1,  # 48 - 4f
-    1,1,1,1,1,1,1,1,  # 50 - 57
-    1,1,1,1,1,1,1,1,  # 58 - 5f
-    1,1,1,1,1,1,1,1,  # 60 - 67
-    1,1,1,1,1,1,1,1,  # 68 - 6f
-    1,1,1,1,1,1,1,1,  # 70 - 77
-    1,1,1,1,1,1,1,1,  # 78 - 7f
-    0,0,0,0,0,0,0,0,  # 80 - 87
-    0,0,0,0,0,0,0,0,  # 88 - 8f
-    0,0,0,0,0,0,0,0,  # 90 - 97
-    0,0,0,0,0,0,0,0,  # 98 - 9f
-    0,2,2,2,2,2,2,2,  # a0 - a7
-    2,2,2,2,2,3,3,3,  # a8 - af
-    2,2,2,2,2,2,2,2,  # b0 - b7
-    2,2,2,2,2,2,2,2,  # b8 - bf
-    2,2,2,2,2,2,2,2,  # c0 - c7
-    2,3,2,2,2,2,2,2,  # c8 - cf
-    2,2,2,2,2,2,2,2,  # d0 - d7
-    2,2,2,2,2,2,2,2,  # d8 - df
-    2,2,2,2,2,2,2,2,  # e0 - e7
-    2,2,2,2,2,2,2,2,  # e8 - ef
-    2,2,2,2,2,2,2,2,  # f0 - f7
-    2,2,2,2,2,2,2,0   # f8 - ff
-)
-
-EUCKR_st = (
-    eError,eStart,     3,eError,eError,eError,eError,eError,#00-07
-    eItsMe,eItsMe,eItsMe,eItsMe,eError,eError,eStart,eStart #08-0f
-)
-
-EUCKRCharLenTable = (0, 1, 2, 0)
-
-EUCKRSMModel = {'classTable': EUCKR_cls,
-                'classFactor': 4,
-                'stateTable': EUCKR_st,
-                'charLenTable': EUCKRCharLenTable,
-                'name': 'EUC-KR'}
-
-# EUC-TW
-
-EUCTW_cls = (
-    2,2,2,2,2,2,2,2,  # 00 - 07
-    2,2,2,2,2,2,0,0,  # 08 - 0f
-    2,2,2,2,2,2,2,2,  # 10 - 17
-    2,2,2,0,2,2,2,2,  # 18 - 1f
-    2,2,2,2,2,2,2,2,  # 20 - 27
-    2,2,2,2,2,2,2,2,  # 28 - 2f
-    2,2,2,2,2,2,2,2,  # 30 - 37
-    2,2,2,2,2,2,2,2,  # 38 - 3f
-    2,2,2,2,2,2,2,2,  # 40 - 47
-    2,2,2,2,2,2,2,2,  # 48 - 4f
-    2,2,2,2,2,2,2,2,  # 50 - 57
-    2,2,2,2,2,2,2,2,  # 58 - 5f
-    2,2,2,2,2,2,2,2,  # 60 - 67
-    2,2,2,2,2,2,2,2,  # 68 - 6f
-    2,2,2,2,2,2,2,2,  # 70 - 77
-    2,2,2,2,2,2,2,2,  # 78 - 7f
-    0,0,0,0,0,0,0,0,  # 80 - 87
-    0,0,0,0,0,0,6,0,  # 88 - 8f
-    0,0,0,0,0,0,0,0,  # 90 - 97
-    0,0,0,0,0,0,0,0,  # 98 - 9f
-    0,3,4,4,4,4,4,4,  # a0 - a7
-    5,5,1,1,1,1,1,1,  # a8 - af
-    1,1,1,1,1,1,1,1,  # b0 - b7
-    1,1,1,1,1,1,1,1,  # b8 - bf
-    1,1,3,1,3,3,3,3,  # c0 - c7
-    3,3,3,3,3,3,3,3,  # c8 - cf
-    3,3,3,3,3,3,3,3,  # d0 - d7
-    3,3,3,3,3,3,3,3,  # d8 - df
-    3,3,3,3,3,3,3,3,  # e0 - e7
-    3,3,3,3,3,3,3,3,  # e8 - ef
-    3,3,3,3,3,3,3,3,  # f0 - f7
-    3,3,3,3,3,3,3,0   # f8 - ff
-)
-
-EUCTW_st = (
-    eError,eError,eStart,     3,     3,     3,     4,eError,#00-07
-    eError,eError,eError,eError,eError,eError,eItsMe,eItsMe,#08-0f
-    eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eError,eStart,eError,#10-17
-    eStart,eStart,eStart,eError,eError,eError,eError,eError,#18-1f
-         5,eError,eError,eError,eStart,eError,eStart,eStart,#20-27
-    eStart,eError,eStart,eStart,eStart,eStart,eStart,eStart #28-2f
-)
-
-EUCTWCharLenTable = (0, 0, 1, 2, 2, 2, 3)
-
-EUCTWSMModel = {'classTable': EUCTW_cls,
-                'classFactor': 7,
-                'stateTable': EUCTW_st,
-                'charLenTable': EUCTWCharLenTable,
-                'name': 'x-euc-tw'}
-
-# GB2312
-
-GB2312_cls = (
-    1,1,1,1,1,1,1,1,  # 00 - 07
-    1,1,1,1,1,1,0,0,  # 08 - 0f
-    1,1,1,1,1,1,1,1,  # 10 - 17
-    1,1,1,0,1,1,1,1,  # 18 - 1f
-    1,1,1,1,1,1,1,1,  # 20 - 27
-    1,1,1,1,1,1,1,1,  # 28 - 2f
-    3,3,3,3,3,3,3,3,  # 30 - 37
-    3,3,1,1,1,1,1,1,  # 38 - 3f
-    2,2,2,2,2,2,2,2,  # 40 - 47
-    2,2,2,2,2,2,2,2,  # 48 - 4f
-    2,2,2,2,2,2,2,2,  # 50 - 57
-    2,2,2,2,2,2,2,2,  # 58 - 5f
-    2,2,2,2,2,2,2,2,  # 60 - 67
-    2,2,2,2,2,2,2,2,  # 68 - 6f
-    2,2,2,2,2,2,2,2,  # 70 - 77
-    2,2,2,2,2,2,2,4,  # 78 - 7f
-    5,6,6,6,6,6,6,6,  # 80 - 87
-    6,6,6,6,6,6,6,6,  # 88 - 8f
-    6,6,6,6,6,6,6,6,  # 90 - 97
-    6,6,6,6,6,6,6,6,  # 98 - 9f
-    6,6,6,6,6,6,6,6,  # a0 - a7
-    6,6,6,6,6,6,6,6,  # a8 - af
-    6,6,6,6,6,6,6,6,  # b0 - b7
-    6,6,6,6,6,6,6,6,  # b8 - bf
-    6,6,6,6,6,6,6,6,  # c0 - c7
-    6,6,6,6,6,6,6,6,  # c8 - cf
-    6,6,6,6,6,6,6,6,  # d0 - d7
-    6,6,6,6,6,6,6,6,  # d8 - df
-    6,6,6,6,6,6,6,6,  # e0 - e7
-    6,6,6,6,6,6,6,6,  # e8 - ef
-    6,6,6,6,6,6,6,6,  # f0 - f7
-    6,6,6,6,6,6,6,0   # f8 - ff
-)
-
-GB2312_st = (
-    eError,eStart,eStart,eStart,eStart,eStart,     3,eError,#00-07
-    eError,eError,eError,eError,eError,eError,eItsMe,eItsMe,#08-0f
-    eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eError,eError,eStart,#10-17
-         4,eError,eStart,eStart,eError,eError,eError,eError,#18-1f
-    eError,eError,     5,eError,eError,eError,eItsMe,eError,#20-27
-    eError,eError,eStart,eStart,eStart,eStart,eStart,eStart #28-2f
-)
-
-# To be accurate, the length of class 6 can be either 2 or 4.
-# But it is not necessary to discriminate between the two since
-# it is used for frequency analysis only, and we are validing
-# each code range there as well. So it is safe to set it to be
-# 2 here.
-GB2312CharLenTable = (0, 1, 1, 1, 1, 1, 2)
-
-GB2312SMModel = {'classTable': GB2312_cls,
-                  'classFactor': 7,
-                  'stateTable': GB2312_st,
-                  'charLenTable': GB2312CharLenTable,
-                  'name': 'GB2312'}
-
-# Shift_JIS
-
-SJIS_cls = (
-    1,1,1,1,1,1,1,1,  # 00 - 07
-    1,1,1,1,1,1,0,0,  # 08 - 0f
-    1,1,1,1,1,1,1,1,  # 10 - 17
-    1,1,1,0,1,1,1,1,  # 18 - 1f
-    1,1,1,1,1,1,1,1,  # 20 - 27
-    1,1,1,1,1,1,1,1,  # 28 - 2f
-    1,1,1,1,1,1,1,1,  # 30 - 37
-    1,1,1,1,1,1,1,1,  # 38 - 3f
-    2,2,2,2,2,2,2,2,  # 40 - 47
-    2,2,2,2,2,2,2,2,  # 48 - 4f
-    2,2,2,2,2,2,2,2,  # 50 - 57
-    2,2,2,2,2,2,2,2,  # 58 - 5f
-    2,2,2,2,2,2,2,2,  # 60 - 67
-    2,2,2,2,2,2,2,2,  # 68 - 6f
-    2,2,2,2,2,2,2,2,  # 70 - 77
-    2,2,2,2,2,2,2,1,  # 78 - 7f
-    3,3,3,3,3,3,3,3,  # 80 - 87
-    3,3,3,3,3,3,3,3,  # 88 - 8f
-    3,3,3,3,3,3,3,3,  # 90 - 97
-    3,3,3,3,3,3,3,3,  # 98 - 9f
-    #0xa0 is illegal in sjis encoding, but some pages does
-    #contain such byte. We need to be more error forgiven.
-    2,2,2,2,2,2,2,2,  # a0 - a7
-    2,2,2,2,2,2,2,2,  # a8 - af
-    2,2,2,2,2,2,2,2,  # b0 - b7
-    2,2,2,2,2,2,2,2,  # b8 - bf
-    2,2,2,2,2,2,2,2,  # c0 - c7
-    2,2,2,2,2,2,2,2,  # c8 - cf
-    2,2,2,2,2,2,2,2,  # d0 - d7
-    2,2,2,2,2,2,2,2,  # d8 - df
-    3,3,3,3,3,3,3,3,  # e0 - e7
-    3,3,3,3,3,4,4,4,  # e8 - ef
-    4,4,4,4,4,4,4,4,  # f0 - f7
-    4,4,4,4,4,0,0,0   # f8 - ff
-)
-
-
-SJIS_st = (
-    eError,eStart,eStart,     3,eError,eError,eError,eError,#00-07
-    eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,#08-0f
-    eItsMe,eItsMe,eError,eError,eStart,eStart,eStart,eStart #10-17
-)
-
-SJISCharLenTable = (0, 1, 1, 2, 0, 0)
-
-SJISSMModel = {'classTable': SJIS_cls,
-               'classFactor': 6,
-               'stateTable': SJIS_st,
-               'charLenTable': SJISCharLenTable,
-               'name': 'Shift_JIS'}
-
-# UCS2-BE
-
-UCS2BE_cls = (
-    0,0,0,0,0,0,0,0,  # 00 - 07
-    0,0,1,0,0,2,0,0,  # 08 - 0f
-    0,0,0,0,0,0,0,0,  # 10 - 17
-    0,0,0,3,0,0,0,0,  # 18 - 1f
-    0,0,0,0,0,0,0,0,  # 20 - 27
-    0,3,3,3,3,3,0,0,  # 28 - 2f
-    0,0,0,0,0,0,0,0,  # 30 - 37
-    0,0,0,0,0,0,0,0,  # 38 - 3f
-    0,0,0,0,0,0,0,0,  # 40 - 47
-    0,0,0,0,0,0,0,0,  # 48 - 4f
-    0,0,0,0,0,0,0,0,  # 50 - 57
-    0,0,0,0,0,0,0,0,  # 58 - 5f
-    0,0,0,0,0,0,0,0,  # 60 - 67
-    0,0,0,0,0,0,0,0,  # 68 - 6f
-    0,0,0,0,0,0,0,0,  # 70 - 77
-    0,0,0,0,0,0,0,0,  # 78 - 7f
-    0,0,0,0,0,0,0,0,  # 80 - 87
-    0,0,0,0,0,0,0,0,  # 88 - 8f
-    0,0,0,0,0,0,0,0,  # 90 - 97
-    0,0,0,0,0,0,0,0,  # 98 - 9f
-    0,0,0,0,0,0,0,0,  # a0 - a7
-    0,0,0,0,0,0,0,0,  # a8 - af
-    0,0,0,0,0,0,0,0,  # b0 - b7
-    0,0,0,0,0,0,0,0,  # b8 - bf
-    0,0,0,0,0,0,0,0,  # c0 - c7
-    0,0,0,0,0,0,0,0,  # c8 - cf
-    0,0,0,0,0,0,0,0,  # d0 - d7
-    0,0,0,0,0,0,0,0,  # d8 - df
-    0,0,0,0,0,0,0,0,  # e0 - e7
-    0,0,0,0,0,0,0,0,  # e8 - ef
-    0,0,0,0,0,0,0,0,  # f0 - f7
-    0,0,0,0,0,0,4,5   # f8 - ff
-)
-
-UCS2BE_st  = (
-          5,     7,     7,eError,     4,     3,eError,eError,#00-07
-     eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,#08-0f
-     eItsMe,eItsMe,     6,     6,     6,     6,eError,eError,#10-17
-          6,     6,     6,     6,     6,eItsMe,     6,     6,#18-1f
-          6,     6,     6,     6,     5,     7,     7,eError,#20-27
-          5,     8,     6,     6,eError,     6,     6,     6,#28-2f
-          6,     6,     6,     6,eError,eError,eStart,eStart #30-37
-)
-
-UCS2BECharLenTable = (2, 2, 2, 0, 2, 2)
-
-UCS2BESMModel = {'classTable': UCS2BE_cls,
-                 'classFactor': 6,
-                 'stateTable': UCS2BE_st,
-                 'charLenTable': UCS2BECharLenTable,
-                 'name': 'UTF-16BE'}
-
-# UCS2-LE
-
-UCS2LE_cls = (
-    0,0,0,0,0,0,0,0,  # 00 - 07
-    0,0,1,0,0,2,0,0,  # 08 - 0f
-    0,0,0,0,0,0,0,0,  # 10 - 17
-    0,0,0,3,0,0,0,0,  # 18 - 1f
-    0,0,0,0,0,0,0,0,  # 20 - 27
-    0,3,3,3,3,3,0,0,  # 28 - 2f
-    0,0,0,0,0,0,0,0,  # 30 - 37
-    0,0,0,0,0,0,0,0,  # 38 - 3f
-    0,0,0,0,0,0,0,0,  # 40 - 47
-    0,0,0,0,0,0,0,0,  # 48 - 4f
-    0,0,0,0,0,0,0,0,  # 50 - 57
-    0,0,0,0,0,0,0,0,  # 58 - 5f
-    0,0,0,0,0,0,0,0,  # 60 - 67
-    0,0,0,0,0,0,0,0,  # 68 - 6f
-    0,0,0,0,0,0,0,0,  # 70 - 77
-    0,0,0,0,0,0,0,0,  # 78 - 7f
-    0,0,0,0,0,0,0,0,  # 80 - 87
-    0,0,0,0,0,0,0,0,  # 88 - 8f
-    0,0,0,0,0,0,0,0,  # 90 - 97
-    0,0,0,0,0,0,0,0,  # 98 - 9f
-    0,0,0,0,0,0,0,0,  # a0 - a7
-    0,0,0,0,0,0,0,0,  # a8 - af
-    0,0,0,0,0,0,0,0,  # b0 - b7
-    0,0,0,0,0,0,0,0,  # b8 - bf
-    0,0,0,0,0,0,0,0,  # c0 - c7
-    0,0,0,0,0,0,0,0,  # c8 - cf
-    0,0,0,0,0,0,0,0,  # d0 - d7
-    0,0,0,0,0,0,0,0,  # d8 - df
-    0,0,0,0,0,0,0,0,  # e0 - e7
-    0,0,0,0,0,0,0,0,  # e8 - ef
-    0,0,0,0,0,0,0,0,  # f0 - f7
-    0,0,0,0,0,0,4,5   # f8 - ff
-)
-
-UCS2LE_st = (
-          6,     6,     7,     6,     4,     3,eError,eError,#00-07
-     eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,#08-0f
-     eItsMe,eItsMe,     5,     5,     5,eError,eItsMe,eError,#10-17
-          5,     5,     5,eError,     5,eError,     6,     6,#18-1f
-          7,     6,     8,     8,     5,     5,     5,eError,#20-27
-          5,     5,     5,eError,eError,eError,     5,     5,#28-2f
-          5,     5,     5,eError,     5,eError,eStart,eStart #30-37
-)
-
-UCS2LECharLenTable = (2, 2, 2, 2, 2, 2)
-
-UCS2LESMModel = {'classTable': UCS2LE_cls,
-                 'classFactor': 6,
-                 'stateTable': UCS2LE_st,
-                 'charLenTable': UCS2LECharLenTable,
-                 'name': 'UTF-16LE'}
-
-# UTF-8
-
-UTF8_cls = (
-    1,1,1,1,1,1,1,1,  # 00 - 07  #allow 0x00 as a legal value
-    1,1,1,1,1,1,0,0,  # 08 - 0f
-    1,1,1,1,1,1,1,1,  # 10 - 17
-    1,1,1,0,1,1,1,1,  # 18 - 1f
-    1,1,1,1,1,1,1,1,  # 20 - 27
-    1,1,1,1,1,1,1,1,  # 28 - 2f
-    1,1,1,1,1,1,1,1,  # 30 - 37
-    1,1,1,1,1,1,1,1,  # 38 - 3f
-    1,1,1,1,1,1,1,1,  # 40 - 47
-    1,1,1,1,1,1,1,1,  # 48 - 4f
-    1,1,1,1,1,1,1,1,  # 50 - 57
-    1,1,1,1,1,1,1,1,  # 58 - 5f
-    1,1,1,1,1,1,1,1,  # 60 - 67
-    1,1,1,1,1,1,1,1,  # 68 - 6f
-    1,1,1,1,1,1,1,1,  # 70 - 77
-    1,1,1,1,1,1,1,1,  # 78 - 7f
-    2,2,2,2,3,3,3,3,  # 80 - 87
-    4,4,4,4,4,4,4,4,  # 88 - 8f
-    4,4,4,4,4,4,4,4,  # 90 - 97
-    4,4,4,4,4,4,4,4,  # 98 - 9f
-    5,5,5,5,5,5,5,5,  # a0 - a7
-    5,5,5,5,5,5,5,5,  # a8 - af
-    5,5,5,5,5,5,5,5,  # b0 - b7
-    5,5,5,5,5,5,5,5,  # b8 - bf
-    0,0,6,6,6,6,6,6,  # c0 - c7
-    6,6,6,6,6,6,6,6,  # c8 - cf
-    6,6,6,6,6,6,6,6,  # d0 - d7
-    6,6,6,6,6,6,6,6,  # d8 - df
-    7,8,8,8,8,8,8,8,  # e0 - e7
-    8,8,8,8,8,9,8,8,  # e8 - ef
-    10,11,11,11,11,11,11,11,  # f0 - f7
-    12,13,13,13,14,15,0,0    # f8 - ff
-)
-
-UTF8_st = (
-    eError,eStart,eError,eError,eError,eError,     12,   10,#00-07
-         9,     11,     8,     7,     6,     5,     4,    3,#08-0f
-    eError,eError,eError,eError,eError,eError,eError,eError,#10-17
-    eError,eError,eError,eError,eError,eError,eError,eError,#18-1f
-    eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,#20-27
-    eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,#28-2f
-    eError,eError,     5,     5,     5,     5,eError,eError,#30-37
-    eError,eError,eError,eError,eError,eError,eError,eError,#38-3f
-    eError,eError,eError,     5,     5,     5,eError,eError,#40-47
-    eError,eError,eError,eError,eError,eError,eError,eError,#48-4f
-    eError,eError,     7,     7,     7,     7,eError,eError,#50-57
-    eError,eError,eError,eError,eError,eError,eError,eError,#58-5f
-    eError,eError,eError,eError,     7,     7,eError,eError,#60-67
-    eError,eError,eError,eError,eError,eError,eError,eError,#68-6f
-    eError,eError,     9,     9,     9,     9,eError,eError,#70-77
-    eError,eError,eError,eError,eError,eError,eError,eError,#78-7f
-    eError,eError,eError,eError,eError,     9,eError,eError,#80-87
-    eError,eError,eError,eError,eError,eError,eError,eError,#88-8f
-    eError,eError,    12,    12,    12,    12,eError,eError,#90-97
-    eError,eError,eError,eError,eError,eError,eError,eError,#98-9f
-    eError,eError,eError,eError,eError,    12,eError,eError,#a0-a7
-    eError,eError,eError,eError,eError,eError,eError,eError,#a8-af
-    eError,eError,    12,    12,    12,eError,eError,eError,#b0-b7
-    eError,eError,eError,eError,eError,eError,eError,eError,#b8-bf
-    eError,eError,eStart,eStart,eStart,eStart,eError,eError,#c0-c7
-    eError,eError,eError,eError,eError,eError,eError,eError #c8-cf
-)
-
-UTF8CharLenTable = (0, 1, 0, 0, 0, 0, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6)
-
-UTF8SMModel = {'classTable': UTF8_cls,
-               'classFactor': 16,
-               'stateTable': UTF8_st,
-               'charLenTable': UTF8CharLenTable,
-               'name': 'UTF-8'}
-
-# flake8: noqa
diff --git a/bundle/requests/packages/chardet/mbcssm.pyc b/bundle/requests/packages/chardet/mbcssm.pyc
deleted file mode 100644
index f6f3d23..0000000
Binary files a/bundle/requests/packages/chardet/mbcssm.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/sbcharsetprober.py b/bundle/requests/packages/chardet/sbcharsetprober.py
deleted file mode 100644
index 37291bd..0000000
--- a/bundle/requests/packages/chardet/sbcharsetprober.py
+++ /dev/null
@@ -1,120 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Universal charset detector code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 2001
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#   Shy Shalom - original C code
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-import sys
-from . import constants
-from .charsetprober import CharSetProber
-from .compat import wrap_ord
-
-SAMPLE_SIZE = 64
-SB_ENOUGH_REL_THRESHOLD = 1024
-POSITIVE_SHORTCUT_THRESHOLD = 0.95
-NEGATIVE_SHORTCUT_THRESHOLD = 0.05
-SYMBOL_CAT_ORDER = 250
-NUMBER_OF_SEQ_CAT = 4
-POSITIVE_CAT = NUMBER_OF_SEQ_CAT - 1
-#NEGATIVE_CAT = 0
-
-
-class SingleByteCharSetProber(CharSetProber):
-    def __init__(self, model, reversed=False, nameProber=None):
-        CharSetProber.__init__(self)
-        self._mModel = model
-        # TRUE if we need to reverse every pair in the model lookup
-        self._mReversed = reversed
-        # Optional auxiliary prober for name decision
-        self._mNameProber = nameProber
-        self.reset()
-
-    def reset(self):
-        CharSetProber.reset(self)
-        # char order of last character
-        self._mLastOrder = 255
-        self._mSeqCounters = [0] * NUMBER_OF_SEQ_CAT
-        self._mTotalSeqs = 0
-        self._mTotalChar = 0
-        # characters that fall in our sampling range
-        self._mFreqChar = 0
-
-    def get_charset_name(self):
-        if self._mNameProber:
-            return self._mNameProber.get_charset_name()
-        else:
-            return self._mModel['charsetName']
-
-    def feed(self, aBuf):
-        if not self._mModel['keepEnglishLetter']:
-            aBuf = self.filter_without_english_letters(aBuf)
-        aLen = len(aBuf)
-        if not aLen:
-            return self.get_state()
-        for c in aBuf:
-            order = self._mModel['charToOrderMap'][wrap_ord(c)]
-            if order < SYMBOL_CAT_ORDER:
-                self._mTotalChar += 1
-            if order < SAMPLE_SIZE:
-                self._mFreqChar += 1
-                if self._mLastOrder < SAMPLE_SIZE:
-                    self._mTotalSeqs += 1
-                    if not self._mReversed:
-                        i = (self._mLastOrder * SAMPLE_SIZE) + order
-                        model = self._mModel['precedenceMatrix'][i]
-                    else:  # reverse the order of the letters in the lookup
-                        i = (order * SAMPLE_SIZE) + self._mLastOrder
-                        model = self._mModel['precedenceMatrix'][i]
-                    self._mSeqCounters[model] += 1
-            self._mLastOrder = order
-
-        if self.get_state() == constants.eDetecting:
-            if self._mTotalSeqs > SB_ENOUGH_REL_THRESHOLD:
-                cf = self.get_confidence()
-                if cf > POSITIVE_SHORTCUT_THRESHOLD:
-                    if constants._debug:
-                        sys.stderr.write('%s confidence = %s, we have a'
-                                         'winner\n' %
-                                         (self._mModel['charsetName'], cf))
-                    self._mState = constants.eFoundIt
-                elif cf < NEGATIVE_SHORTCUT_THRESHOLD:
-                    if constants._debug:
-                        sys.stderr.write('%s confidence = %s, below negative'
-                                         'shortcut threshhold %s\n' %
-                                         (self._mModel['charsetName'], cf,
-                                          NEGATIVE_SHORTCUT_THRESHOLD))
-                    self._mState = constants.eNotMe
-
-        return self.get_state()
-
-    def get_confidence(self):
-        r = 0.01
-        if self._mTotalSeqs > 0:
-            r = ((1.0 * self._mSeqCounters[POSITIVE_CAT]) / self._mTotalSeqs
-                 / self._mModel['mTypicalPositiveRatio'])
-            r = r * self._mFreqChar / self._mTotalChar
-            if r >= 1.0:
-                r = 0.99
-        return r
diff --git a/bundle/requests/packages/chardet/sbcharsetprober.pyc b/bundle/requests/packages/chardet/sbcharsetprober.pyc
deleted file mode 100644
index fe4b149..0000000
Binary files a/bundle/requests/packages/chardet/sbcharsetprober.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/sbcsgroupprober.py b/bundle/requests/packages/chardet/sbcsgroupprober.py
deleted file mode 100644
index 1b6196c..0000000
--- a/bundle/requests/packages/chardet/sbcsgroupprober.py
+++ /dev/null
@@ -1,69 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Universal charset detector code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 2001
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#   Shy Shalom - original C code
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-from .charsetgroupprober import CharSetGroupProber
-from .sbcharsetprober import SingleByteCharSetProber
-from .langcyrillicmodel import (Win1251CyrillicModel, Koi8rModel,
-                                Latin5CyrillicModel, MacCyrillicModel,
-                                Ibm866Model, Ibm855Model)
-from .langgreekmodel import Latin7GreekModel, Win1253GreekModel
-from .langbulgarianmodel import Latin5BulgarianModel, Win1251BulgarianModel
-from .langhungarianmodel import Latin2HungarianModel, Win1250HungarianModel
-from .langthaimodel import TIS620ThaiModel
-from .langhebrewmodel import Win1255HebrewModel
-from .hebrewprober import HebrewProber
-
-
-class SBCSGroupProber(CharSetGroupProber):
-    def __init__(self):
-        CharSetGroupProber.__init__(self)
-        self._mProbers = [
-            SingleByteCharSetProber(Win1251CyrillicModel),
-            SingleByteCharSetProber(Koi8rModel),
-            SingleByteCharSetProber(Latin5CyrillicModel),
-            SingleByteCharSetProber(MacCyrillicModel),
-            SingleByteCharSetProber(Ibm866Model),
-            SingleByteCharSetProber(Ibm855Model),
-            SingleByteCharSetProber(Latin7GreekModel),
-            SingleByteCharSetProber(Win1253GreekModel),
-            SingleByteCharSetProber(Latin5BulgarianModel),
-            SingleByteCharSetProber(Win1251BulgarianModel),
-            SingleByteCharSetProber(Latin2HungarianModel),
-            SingleByteCharSetProber(Win1250HungarianModel),
-            SingleByteCharSetProber(TIS620ThaiModel),
-        ]
-        hebrewProber = HebrewProber()
-        logicalHebrewProber = SingleByteCharSetProber(Win1255HebrewModel,
-                                                      False, hebrewProber)
-        visualHebrewProber = SingleByteCharSetProber(Win1255HebrewModel, True,
-                                                     hebrewProber)
-        hebrewProber.set_model_probers(logicalHebrewProber, visualHebrewProber)
-        self._mProbers.extend([hebrewProber, logicalHebrewProber,
-                               visualHebrewProber])
-
-        self.reset()
diff --git a/bundle/requests/packages/chardet/sbcsgroupprober.pyc b/bundle/requests/packages/chardet/sbcsgroupprober.pyc
deleted file mode 100644
index 4172456..0000000
Binary files a/bundle/requests/packages/chardet/sbcsgroupprober.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/sjisprober.py b/bundle/requests/packages/chardet/sjisprober.py
deleted file mode 100644
index b173614..0000000
--- a/bundle/requests/packages/chardet/sjisprober.py
+++ /dev/null
@@ -1,91 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is mozilla.org code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-import sys
-from .mbcharsetprober import MultiByteCharSetProber
-from .codingstatemachine import CodingStateMachine
-from .chardistribution import SJISDistributionAnalysis
-from .jpcntx import SJISContextAnalysis
-from .mbcssm import SJISSMModel
-from . import constants
-
-
-class SJISProber(MultiByteCharSetProber):
-    def __init__(self):
-        MultiByteCharSetProber.__init__(self)
-        self._mCodingSM = CodingStateMachine(SJISSMModel)
-        self._mDistributionAnalyzer = SJISDistributionAnalysis()
-        self._mContextAnalyzer = SJISContextAnalysis()
-        self.reset()
-
-    def reset(self):
-        MultiByteCharSetProber.reset(self)
-        self._mContextAnalyzer.reset()
-
-    def get_charset_name(self):
-        return "SHIFT_JIS"
-
-    def feed(self, aBuf):
-        aLen = len(aBuf)
-        for i in range(0, aLen):
-            codingState = self._mCodingSM.next_state(aBuf[i])
-            if codingState == constants.eError:
-                if constants._debug:
-                    sys.stderr.write(self.get_charset_name()
-                                     + ' prober hit error at byte ' + str(i)
-                                     + '\n')
-                self._mState = constants.eNotMe
-                break
-            elif codingState == constants.eItsMe:
-                self._mState = constants.eFoundIt
-                break
-            elif codingState == constants.eStart:
-                charLen = self._mCodingSM.get_current_charlen()
-                if i == 0:
-                    self._mLastChar[1] = aBuf[0]
-                    self._mContextAnalyzer.feed(self._mLastChar[2 - charLen:],
-                                                charLen)
-                    self._mDistributionAnalyzer.feed(self._mLastChar, charLen)
-                else:
-                    self._mContextAnalyzer.feed(aBuf[i + 1 - charLen:i + 3
-                                                     - charLen], charLen)
-                    self._mDistributionAnalyzer.feed(aBuf[i - 1:i + 1],
-                                                     charLen)
-
-        self._mLastChar[0] = aBuf[aLen - 1]
-
-        if self.get_state() == constants.eDetecting:
-            if (self._mContextAnalyzer.got_enough_data() and
-               (self.get_confidence() > constants.SHORTCUT_THRESHOLD)):
-                self._mState = constants.eFoundIt
-
-        return self.get_state()
-
-    def get_confidence(self):
-        contxtCf = self._mContextAnalyzer.get_confidence()
-        distribCf = self._mDistributionAnalyzer.get_confidence()
-        return max(contxtCf, distribCf)
diff --git a/bundle/requests/packages/chardet/sjisprober.pyc b/bundle/requests/packages/chardet/sjisprober.pyc
deleted file mode 100644
index 729eb80..0000000
Binary files a/bundle/requests/packages/chardet/sjisprober.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/universaldetector.py b/bundle/requests/packages/chardet/universaldetector.py
deleted file mode 100644
index 9a03ad3..0000000
--- a/bundle/requests/packages/chardet/universaldetector.py
+++ /dev/null
@@ -1,170 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is Mozilla Universal charset detector code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 2001
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#   Shy Shalom - original C code
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-from . import constants
-import sys
-import codecs
-from .latin1prober import Latin1Prober  # windows-1252
-from .mbcsgroupprober import MBCSGroupProber  # multi-byte character sets
-from .sbcsgroupprober import SBCSGroupProber  # single-byte character sets
-from .escprober import EscCharSetProber  # ISO-2122, etc.
-import re
-
-MINIMUM_THRESHOLD = 0.20
-ePureAscii = 0
-eEscAscii = 1
-eHighbyte = 2
-
-
-class UniversalDetector:
-    def __init__(self):
-        self._highBitDetector = re.compile(b'[\x80-\xFF]')
-        self._escDetector = re.compile(b'(\033|~{)')
-        self._mEscCharSetProber = None
-        self._mCharSetProbers = []
-        self.reset()
-
-    def reset(self):
-        self.result = {'encoding': None, 'confidence': 0.0}
-        self.done = False
-        self._mStart = True
-        self._mGotData = False
-        self._mInputState = ePureAscii
-        self._mLastChar = b''
-        if self._mEscCharSetProber:
-            self._mEscCharSetProber.reset()
-        for prober in self._mCharSetProbers:
-            prober.reset()
-
-    def feed(self, aBuf):
-        if self.done:
-            return
-
-        aLen = len(aBuf)
-        if not aLen:
-            return
-
-        if not self._mGotData:
-            # If the data starts with BOM, we know it is UTF
-            if aBuf[:3] == codecs.BOM:
-                # EF BB BF  UTF-8 with BOM
-                self.result = {'encoding': "UTF-8", 'confidence': 1.0}
-            elif aBuf[:4] == codecs.BOM_UTF32_LE:
-                # FF FE 00 00  UTF-32, little-endian BOM
-                self.result = {'encoding': "UTF-32LE", 'confidence': 1.0}
-            elif aBuf[:4] == codecs.BOM_UTF32_BE:
-                # 00 00 FE FF  UTF-32, big-endian BOM
-                self.result = {'encoding': "UTF-32BE", 'confidence': 1.0}
-            elif aBuf[:4] == b'\xFE\xFF\x00\x00':
-                # FE FF 00 00  UCS-4, unusual octet order BOM (3412)
-                self.result = {
-                    'encoding': "X-ISO-10646-UCS-4-3412",
-                    'confidence': 1.0
-                }
-            elif aBuf[:4] == b'\x00\x00\xFF\xFE':
-                # 00 00 FF FE  UCS-4, unusual octet order BOM (2143)
-                self.result = {
-                    'encoding': "X-ISO-10646-UCS-4-2143",
-                    'confidence': 1.0
-                }
-            elif aBuf[:2] == codecs.BOM_LE:
-                # FF FE  UTF-16, little endian BOM
-                self.result = {'encoding': "UTF-16LE", 'confidence': 1.0}
-            elif aBuf[:2] == codecs.BOM_BE:
-                # FE FF  UTF-16, big endian BOM
-                self.result = {'encoding': "UTF-16BE", 'confidence': 1.0}
-
-        self._mGotData = True
-        if self.result['encoding'] and (self.result['confidence'] > 0.0):
-            self.done = True
-            return
-
-        if self._mInputState == ePureAscii:
-            if self._highBitDetector.search(aBuf):
-                self._mInputState = eHighbyte
-            elif ((self._mInputState == ePureAscii) and
-                    self._escDetector.search(self._mLastChar + aBuf)):
-                self._mInputState = eEscAscii
-
-        self._mLastChar = aBuf[-1:]
-
-        if self._mInputState == eEscAscii:
-            if not self._mEscCharSetProber:
-                self._mEscCharSetProber = EscCharSetProber()
-            if self._mEscCharSetProber.feed(aBuf) == constants.eFoundIt:
-                self.result = {'encoding': self._mEscCharSetProber.get_charset_name(),
-                               'confidence': self._mEscCharSetProber.get_confidence()}
-                self.done = True
-        elif self._mInputState == eHighbyte:
-            if not self._mCharSetProbers:
-                self._mCharSetProbers = [MBCSGroupProber(), SBCSGroupProber(),
-                                         Latin1Prober()]
-            for prober in self._mCharSetProbers:
-                if prober.feed(aBuf) == constants.eFoundIt:
-                    self.result = {'encoding': prober.get_charset_name(),
-                                   'confidence': prober.get_confidence()}
-                    self.done = True
-                    break
-
-    def close(self):
-        if self.done:
-            return
-        if not self._mGotData:
-            if constants._debug:
-                sys.stderr.write('no data received!\n')
-            return
-        self.done = True
-
-        if self._mInputState == ePureAscii:
-            self.result = {'encoding': 'ascii', 'confidence': 1.0}
-            return self.result
-
-        if self._mInputState == eHighbyte:
-            proberConfidence = None
-            maxProberConfidence = 0.0
-            maxProber = None
-            for prober in self._mCharSetProbers:
-                if not prober:
-                    continue
-                proberConfidence = prober.get_confidence()
-                if proberConfidence > maxProberConfidence:
-                    maxProberConfidence = proberConfidence
-                    maxProber = prober
-            if maxProber and (maxProberConfidence > MINIMUM_THRESHOLD):
-                self.result = {'encoding': maxProber.get_charset_name(),
-                               'confidence': maxProber.get_confidence()}
-                return self.result
-
-        if constants._debug:
-            sys.stderr.write('no probers hit minimum threshhold\n')
-            for prober in self._mCharSetProbers[0].mProbers:
-                if not prober:
-                    continue
-                sys.stderr.write('%s confidence = %s\n' %
-                                 (prober.get_charset_name(),
-                                  prober.get_confidence()))
diff --git a/bundle/requests/packages/chardet/universaldetector.pyc b/bundle/requests/packages/chardet/universaldetector.pyc
deleted file mode 100644
index c567407..0000000
Binary files a/bundle/requests/packages/chardet/universaldetector.pyc and /dev/null differ
diff --git a/bundle/requests/packages/chardet/utf8prober.py b/bundle/requests/packages/chardet/utf8prober.py
deleted file mode 100644
index 1c0bb5d..0000000
--- a/bundle/requests/packages/chardet/utf8prober.py
+++ /dev/null
@@ -1,76 +0,0 @@
-######################## BEGIN LICENSE BLOCK ########################
-# The Original Code is mozilla.org code.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Mark Pilgrim - port to Python
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301  USA
-######################### END LICENSE BLOCK #########################
-
-from . import constants
-from .charsetprober import CharSetProber
-from .codingstatemachine import CodingStateMachine
-from .mbcssm import UTF8SMModel
-
-ONE_CHAR_PROB = 0.5
-
-
-class UTF8Prober(CharSetProber):
-    def __init__(self):
-        CharSetProber.__init__(self)
-        self._mCodingSM = CodingStateMachine(UTF8SMModel)
-        self.reset()
-
-    def reset(self):
-        CharSetProber.reset(self)
-        self._mCodingSM.reset()
-        self._mNumOfMBChar = 0
-
-    def get_charset_name(self):
-        return "utf-8"
-
-    def feed(self, aBuf):
-        for c in aBuf:
-            codingState = self._mCodingSM.next_state(c)
-            if codingState == constants.eError:
-                self._mState = constants.eNotMe
-                break
-            elif codingState == constants.eItsMe:
-                self._mState = constants.eFoundIt
-                break
-            elif codingState == constants.eStart:
-                if self._mCodingSM.get_current_charlen() >= 2:
-                    self._mNumOfMBChar += 1
-
-        if self.get_state() == constants.eDetecting:
-            if self.get_confidence() > constants.SHORTCUT_THRESHOLD:
-                self._mState = constants.eFoundIt
-
-        return self.get_state()
-
-    def get_confidence(self):
-        unlike = 0.99
-        if self._mNumOfMBChar < 6:
-            for i in range(0, self._mNumOfMBChar):
-                unlike = unlike * ONE_CHAR_PROB
-            return 1.0 - unlike
-        else:
-            return unlike
diff --git a/bundle/requests/packages/chardet/utf8prober.pyc b/bundle/requests/packages/chardet/utf8prober.pyc
deleted file mode 100644
index fb1098a..0000000
Binary files a/bundle/requests/packages/chardet/utf8prober.pyc and /dev/null differ
diff --git a/bundle/requests/packages/urllib3/__init__.py b/bundle/requests/packages/urllib3/__init__.py
deleted file mode 100644
index bd237a6..0000000
--- a/bundle/requests/packages/urllib3/__init__.py
+++ /dev/null
@@ -1,58 +0,0 @@
-# urllib3/__init__.py
-# Copyright 2008-2013 Andrey Petrov and contributors (see CONTRIBUTORS.txt)
-#
-# This module is part of urllib3 and is released under
-# the MIT License: http://www.opensource.org/licenses/mit-license.php
-
-"""
-urllib3 - Thread-safe connection pooling and re-using.
-"""
-
-__author__ = 'Andrey Petrov (andrey.petrov at shazow.net)'
-__license__ = 'MIT'
-__version__ = '1.8.2'
-
-
-from .connectionpool import (
-    HTTPConnectionPool,
-    HTTPSConnectionPool,
-    connection_from_url
-)
-
-from . import exceptions
-from .filepost import encode_multipart_formdata
-from .poolmanager import PoolManager, ProxyManager, proxy_from_url
-from .response import HTTPResponse
-from .util import make_headers, get_host, Timeout
-
-
-# Set default logging handler to avoid "No handler found" warnings.
-import logging
-try:  # Python 2.7+
-    from logging import NullHandler
-except ImportError:
-    class NullHandler(logging.Handler):
-        def emit(self, record):
-            pass
-
-logging.getLogger(__name__).addHandler(NullHandler())
-
-def add_stderr_logger(level=logging.DEBUG):
-    """
-    Helper for quickly adding a StreamHandler to the logger. Useful for
-    debugging.
-
-    Returns the handler after adding it.
-    """
-    # This method needs to be in this __init__.py to get the __name__ correct
-    # even if urllib3 is vendored within another package.
-    logger = logging.getLogger(__name__)
-    handler = logging.StreamHandler()
-    handler.setFormatter(logging.Formatter('%(asctime)s %(levelname)s %(message)s'))
-    logger.addHandler(handler)
-    logger.setLevel(level)
-    logger.debug('Added an stderr logging handler to logger: %s' % __name__)
-    return handler
-
-# ... Clean up.
-del NullHandler
diff --git a/bundle/requests/packages/urllib3/__init__.pyc b/bundle/requests/packages/urllib3/__init__.pyc
deleted file mode 100644
index 3e06bb2..0000000
Binary files a/bundle/requests/packages/urllib3/__init__.pyc and /dev/null differ
diff --git a/bundle/requests/packages/urllib3/_collections.py b/bundle/requests/packages/urllib3/_collections.py
deleted file mode 100644
index 9cea3a4..0000000
--- a/bundle/requests/packages/urllib3/_collections.py
+++ /dev/null
@@ -1,205 +0,0 @@
-# urllib3/_collections.py
-# Copyright 2008-2013 Andrey Petrov and contributors (see CONTRIBUTORS.txt)
-#
-# This module is part of urllib3 and is released under
-# the MIT License: http://www.opensource.org/licenses/mit-license.php
-
-from collections import Mapping, MutableMapping
-try:
-    from threading import RLock
-except ImportError: # Platform-specific: No threads available
-    class RLock:
-        def __enter__(self):
-            pass
-
-        def __exit__(self, exc_type, exc_value, traceback):
-            pass
-
-
-try: # Python 2.7+
-    from collections import OrderedDict
-except ImportError:
-    from .packages.ordered_dict import OrderedDict
-from .packages.six import itervalues
-
-
-__all__ = ['RecentlyUsedContainer', 'HTTPHeaderDict']
-
-
-_Null = object()
-
-
-class RecentlyUsedContainer(MutableMapping):
-    """
-    Provides a thread-safe dict-like container which maintains up to
-    ``maxsize`` keys while throwing away the least-recently-used keys beyond
-    ``maxsize``.
-
-    :param maxsize:
-        Maximum number of recent elements to retain.
-
-    :param dispose_func:
-        Every time an item is evicted from the container,
-        ``dispose_func(value)`` is called.  Callback which will get called
-    """
-
-    ContainerCls = OrderedDict
-
-    def __init__(self, maxsize=10, dispose_func=None):
-        self._maxsize = maxsize
-        self.dispose_func = dispose_func
-
-        self._container = self.ContainerCls()
-        self.lock = RLock()
-
-    def __getitem__(self, key):
-        # Re-insert the item, moving it to the end of the eviction line.
-        with self.lock:
-            item = self._container.pop(key)
-            self._container[key] = item
-            return item
-
-    def __setitem__(self, key, value):
-        evicted_value = _Null
-        with self.lock:
-            # Possibly evict the existing value of 'key'
-            evicted_value = self._container.get(key, _Null)
-            self._container[key] = value
-
-            # If we didn't evict an existing value, we might have to evict the
-            # least recently used item from the beginning of the container.
-            if len(self._container) > self._maxsize:
-                _key, evicted_value = self._container.popitem(last=False)
-
-        if self.dispose_func and evicted_value is not _Null:
-            self.dispose_func(evicted_value)
-
-    def __delitem__(self, key):
-        with self.lock:
-            value = self._container.pop(key)
-
-        if self.dispose_func:
-            self.dispose_func(value)
-
-    def __len__(self):
-        with self.lock:
-            return len(self._container)
-
-    def __iter__(self):
-        raise NotImplementedError('Iteration over this class is unlikely to be threadsafe.')
-
-    def clear(self):
-        with self.lock:
-            # Copy pointers to all values, then wipe the mapping
-            # under Python 2, this copies the list of values twice :-|
-            values = list(self._container.values())
-            self._container.clear()
-
-        if self.dispose_func:
-            for value in values:
-                self.dispose_func(value)
-
-    def keys(self):
-        with self.lock:
-            return self._container.keys()
-
-
-class HTTPHeaderDict(MutableMapping):
-    """
-    :param headers:
-        An iterable of field-value pairs. Must not contain multiple field names
-        when compared case-insensitively.
-
-    :param kwargs:
-        Additional field-value pairs to pass in to ``dict.update``.
-
-    A ``dict`` like container for storing HTTP Headers.
-
-    Field names are stored and compared case-insensitively in compliance with
-    RFC 2616. Iteration provides the first case-sensitive key seen for each
-    case-insensitive pair.
-
-    Using ``__setitem__`` syntax overwrites fields that compare equal
-    case-insensitively in order to maintain ``dict``'s api. For fields that
-    compare equal, instead create a new ``HTTPHeaderDict`` and use ``.add``
-    in a loop.
-
-    If multiple fields that are equal case-insensitively are passed to the
-    constructor or ``.update``, the behavior is undefined and some will be
-    lost.
-
-    >>> headers = HTTPHeaderDict()
-    >>> headers.add('Set-Cookie', 'foo=bar')
-    >>> headers.add('set-cookie', 'baz=quxx')
-    >>> headers['content-length'] = '7'
-    >>> headers['SET-cookie']
-    'foo=bar, baz=quxx'
-    >>> headers['Content-Length']
-    '7'
-
-    If you want to access the raw headers with their original casing
-    for debugging purposes you can access the private ``._data`` attribute
-    which is a normal python ``dict`` that maps the case-insensitive key to a
-    list of tuples stored as (case-sensitive-original-name, value). Using the
-    structure from above as our example:
-
-    >>> headers._data
-    {'set-cookie': [('Set-Cookie', 'foo=bar'), ('set-cookie', 'baz=quxx')],
-    'content-length': [('content-length', '7')]}
-    """
-
-    def __init__(self, headers=None, **kwargs):
-        self._data = {}
-        if headers is None:
-            headers = {}
-        self.update(headers, **kwargs)
-
-    def add(self, key, value):
-        """Adds a (name, value) pair, doesn't overwrite the value if it already
-        exists.
-
-        >>> headers = HTTPHeaderDict(foo='bar')
-        >>> headers.add('Foo', 'baz')
-        >>> headers['foo']
-        'bar, baz'
-        """
-        self._data.setdefault(key.lower(), []).append((key, value))
-
-    def getlist(self, key):
-        """Returns a list of all the values for the named field. Returns an
-        empty list if the key doesn't exist."""
-        return self[key].split(', ') if key in self else []
-
-    def copy(self):
-        h = HTTPHeaderDict()
-        for key in self._data:
-            for rawkey, value in self._data[key]:
-                h.add(rawkey, value)
-        return h
-
-    def __eq__(self, other):
-        if not isinstance(other, Mapping):
-            return False
-        other = HTTPHeaderDict(other)
-        return dict((k1, self[k1]) for k1 in self._data) == \
-                dict((k2, other[k2]) for k2 in other._data)
-
-    def __getitem__(self, key):
-        values = self._data[key.lower()]
-        return ', '.join(value[1] for value in values)
-
-    def __setitem__(self, key, value):
-        self._data[key.lower()] = [(key, value)]
-
-    def __delitem__(self, key):
-        del self._data[key.lower()]
-
-    def __len__(self):
-        return len(self._data)
-
-    def __iter__(self):
-        for headers in itervalues(self._data):
-            yield headers[0][0]
-
-    def __repr__(self):
-        return '%s(%r)' % (self.__class__.__name__, dict(self.items()))
diff --git a/bundle/requests/packages/urllib3/_collections.pyc b/bundle/requests/packages/urllib3/_collections.pyc
deleted file mode 100644
index 3be9f66..0000000
Binary files a/bundle/requests/packages/urllib3/_collections.pyc and /dev/null differ
diff --git a/bundle/requests/packages/urllib3/connection.py b/bundle/requests/packages/urllib3/connection.py
deleted file mode 100644
index de7b925..0000000
--- a/bundle/requests/packages/urllib3/connection.py
+++ /dev/null
@@ -1,197 +0,0 @@
-# urllib3/connection.py
-# Copyright 2008-2013 Andrey Petrov and contributors (see CONTRIBUTORS.txt)
-#
-# This module is part of urllib3 and is released under
-# the MIT License: http://www.opensource.org/licenses/mit-license.php
-
-import sys
-import socket
-from socket import timeout as SocketTimeout
-
-try: # Python 3
-    from http.client import HTTPConnection as _HTTPConnection, HTTPException
-except ImportError:
-    from httplib import HTTPConnection as _HTTPConnection, HTTPException
-
-class DummyConnection(object):
-    "Used to detect a failed ConnectionCls import."
-    pass
-
-try: # Compiled with SSL?
-    ssl = None
-    HTTPSConnection = DummyConnection
-
-    class BaseSSLError(BaseException):
-        pass
-
-    try: # Python 3
-        from http.client import HTTPSConnection as _HTTPSConnection
-    except ImportError:
-        from httplib import HTTPSConnection as _HTTPSConnection
-
-    import ssl
-    BaseSSLError = ssl.SSLError
-
-except (ImportError, AttributeError): # Platform-specific: No SSL.
-    pass
-
-from .exceptions import (
-    ConnectTimeoutError,
-)
-from .packages.ssl_match_hostname import match_hostname
-from .packages import six
-from .util import (
-    assert_fingerprint,
-    resolve_cert_reqs,
-    resolve_ssl_version,
-    ssl_wrap_socket,
-)
-
-
-port_by_scheme = {
-    'http': 80,
-    'https': 443,
-}
-
-
-class HTTPConnection(_HTTPConnection, object):
-    """
-    Based on httplib.HTTPConnection but provides an extra constructor
-    backwards-compatibility layer between older and newer Pythons.
-    """
-
-    default_port = port_by_scheme['http']
-
-    # By default, disable Nagle's Algorithm.
-    tcp_nodelay = 1
-
-    def __init__(self, *args, **kw):
-        if six.PY3:  # Python 3
-            kw.pop('strict', None)
-        if sys.version_info < (2, 7):  # Python 2.6 and older
-            kw.pop('source_address', None)
-
-        # Pre-set source_address in case we have an older Python like 2.6.
-        self.source_address = kw.get('source_address')
-
-        # Superclass also sets self.source_address in Python 2.7+.
-        _HTTPConnection.__init__(self, *args, **kw)  
-
-    def _new_conn(self):
-        """ Establish a socket connection and set nodelay settings on it.
-
-        :return: a new socket connection
-        """
-        extra_args = []
-        if self.source_address:  # Python 2.7+
-            extra_args.append(self.source_address)
-
-        conn = socket.create_connection(
-            (self.host, self.port), self.timeout, *extra_args)
-        conn.setsockopt(
-            socket.IPPROTO_TCP, socket.TCP_NODELAY, self.tcp_nodelay)
-
-        return conn
-
-    def _prepare_conn(self, conn):
-        self.sock = conn
-        if self._tunnel_host:
-            # TODO: Fix tunnel so it doesn't depend on self.sock state.
-            self._tunnel()
-
-    def connect(self):
-        conn = self._new_conn()
-        self._prepare_conn(conn)
-
-
-class HTTPSConnection(HTTPConnection):
-    default_port = port_by_scheme['https']
-
-    def __init__(self, host, port=None, key_file=None, cert_file=None,
-                 strict=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, **kw):
-
-        HTTPConnection.__init__(self, host, port, strict=strict,
-                                timeout=timeout, **kw)
-
-        self.key_file = key_file
-        self.cert_file = cert_file
-
-        # Required property for Google AppEngine 1.9.0 which otherwise causes
-        # HTTPS requests to go out as HTTP. (See Issue #356)
-        self._protocol = 'https'
-
-    def connect(self):
-        conn = self._new_conn()
-        self._prepare_conn(conn)
-        self.sock = ssl.wrap_socket(conn, self.key_file, self.cert_file)
-
-
-class VerifiedHTTPSConnection(HTTPSConnection):
-    """
-    Based on httplib.HTTPSConnection but wraps the socket with
-    SSL certification.
-    """
-    cert_reqs = None
-    ca_certs = None
-    ssl_version = None
-    conn_kw = {}
-
-    def set_cert(self, key_file=None, cert_file=None,
-                 cert_reqs=None, ca_certs=None,
-                 assert_hostname=None, assert_fingerprint=None):
-
-        self.key_file = key_file
-        self.cert_file = cert_file
-        self.cert_reqs = cert_reqs
-        self.ca_certs = ca_certs
-        self.assert_hostname = assert_hostname
-        self.assert_fingerprint = assert_fingerprint
-
-    def connect(self):
-        # Add certificate verification
-
-        try:
-            sock = socket.create_connection(
-                address=(self.host, self.port), timeout=self.timeout,
-                **self.conn_kw)
-        except SocketTimeout:
-            raise ConnectTimeoutError(
-                self, "Connection to %s timed out. (connect timeout=%s)" %
-                (self.host, self.timeout))
-
-        sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY,
-                        self.tcp_nodelay)
-
-        resolved_cert_reqs = resolve_cert_reqs(self.cert_reqs)
-        resolved_ssl_version = resolve_ssl_version(self.ssl_version)
-
-        # the _tunnel_host attribute was added in python 2.6.3 (via
-        # http://hg.python.org/cpython/rev/0f57b30a152f) so pythons 2.6(0-2) do
-        # not have them.
-        if getattr(self, '_tunnel_host', None):
-            self.sock = sock
-            # Calls self._set_hostport(), so self.host is
-            # self._tunnel_host below.
-            self._tunnel()
-
-        # Wrap socket using verification with the root certs in
-        # trusted_root_certs
-        self.sock = ssl_wrap_socket(sock, self.key_file, self.cert_file,
-                                    cert_reqs=resolved_cert_reqs,
-                                    ca_certs=self.ca_certs,
-                                    server_hostname=self.host,
-                                    ssl_version=resolved_ssl_version)
-
-        if resolved_cert_reqs != ssl.CERT_NONE:
-            if self.assert_fingerprint:
-                assert_fingerprint(self.sock.getpeercert(binary_form=True),
-                                   self.assert_fingerprint)
-            elif self.assert_hostname is not False:
-                match_hostname(self.sock.getpeercert(),
-                               self.assert_hostname or self.host)
-
-
-if ssl:
-    # Make a copy for testing.
-    UnverifiedHTTPSConnection = HTTPSConnection
-    HTTPSConnection = VerifiedHTTPSConnection
diff --git a/bundle/requests/packages/urllib3/connection.pyc b/bundle/requests/packages/urllib3/connection.pyc
deleted file mode 100644
index aedc1b5..0000000
Binary files a/bundle/requests/packages/urllib3/connection.pyc and /dev/null differ
diff --git a/bundle/requests/packages/urllib3/connectionpool.py b/bundle/requests/packages/urllib3/connectionpool.py
deleted file mode 100644
index 95a53a7..0000000
--- a/bundle/requests/packages/urllib3/connectionpool.py
+++ /dev/null
@@ -1,710 +0,0 @@
-# urllib3/connectionpool.py
-# Copyright 2008-2013 Andrey Petrov and contributors (see CONTRIBUTORS.txt)
-#
-# This module is part of urllib3 and is released under
-# the MIT License: http://www.opensource.org/licenses/mit-license.php
-
-import sys
-import errno
-import logging
-
-from socket import error as SocketError, timeout as SocketTimeout
-import socket
-
-try: # Python 3
-    from queue import LifoQueue, Empty, Full
-except ImportError:
-    from Queue import LifoQueue, Empty, Full
-    import Queue as _  # Platform-specific: Windows
-
-
-from .exceptions import (
-    ClosedPoolError,
-    ConnectionError,
-    ConnectTimeoutError,
-    EmptyPoolError,
-    HostChangedError,
-    LocationParseError,
-    MaxRetryError,
-    SSLError,
-    TimeoutError,
-    ReadTimeoutError,
-    ProxyError,
-)
-from .packages.ssl_match_hostname import CertificateError
-from .packages import six
-from .connection import (
-    port_by_scheme,
-    DummyConnection,
-    HTTPConnection, HTTPSConnection, VerifiedHTTPSConnection,
-    HTTPException, BaseSSLError,
-)
-from .request import RequestMethods
-from .response import HTTPResponse
-from .util import (
-    get_host,
-    is_connection_dropped,
-    Timeout,
-)
-
-
-xrange = six.moves.xrange
-
-log = logging.getLogger(__name__)
-
-_Default = object()
-
-## Pool objects
-
-class ConnectionPool(object):
-    """
-    Base class for all connection pools, such as
-    :class:`.HTTPConnectionPool` and :class:`.HTTPSConnectionPool`.
-    """
-
-    scheme = None
-    QueueCls = LifoQueue
-
-    def __init__(self, host, port=None):
-        if host is None:
-            raise LocationParseError(host)
-
-        # httplib doesn't like it when we include brackets in ipv6 addresses
-        host = host.strip('[]')
-
-        self.host = host
-        self.port = port
-
-    def __str__(self):
-        return '%s(host=%r, port=%r)' % (type(self).__name__,
-                                         self.host, self.port)
-
-# This is taken from http://hg.python.org/cpython/file/7aaba721ebc0/Lib/socket.py#l252
-_blocking_errnos = set([errno.EAGAIN, errno.EWOULDBLOCK])
-
-class HTTPConnectionPool(ConnectionPool, RequestMethods):
-    """
-    Thread-safe connection pool for one host.
-
-    :param host:
-        Host used for this HTTP Connection (e.g. "localhost"), passed into
-        :class:`httplib.HTTPConnection`.
-
-    :param port:
-        Port used for this HTTP Connection (None is equivalent to 80), passed
-        into :class:`httplib.HTTPConnection`.
-
-    :param strict:
-        Causes BadStatusLine to be raised if the status line can't be parsed
-        as a valid HTTP/1.0 or 1.1 status line, passed into
-        :class:`httplib.HTTPConnection`.
-
-        .. note::
-           Only works in Python 2. This parameter is ignored in Python 3.
-
-    :param timeout:
-        Socket timeout in seconds for each individual connection. This can
-        be a float or integer, which sets the timeout for the HTTP request,
-        or an instance of :class:`urllib3.util.Timeout` which gives you more
-        fine-grained control over request timeouts. After the constructor has
-        been parsed, this is always a `urllib3.util.Timeout` object.
-
-    :param maxsize:
-        Number of connections to save that can be reused. More than 1 is useful
-        in multithreaded situations. If ``block`` is set to false, more
-        connections will be created but they will not be saved once they've
-        been used.
-
-    :param block:
-        If set to True, no more than ``maxsize`` connections will be used at
-        a time. When no free connections are available, the call will block
-        until a connection has been released. This is a useful side effect for
-        particular multithreaded situations where one does not want to use more
-        than maxsize connections per host to prevent flooding.
-
-    :param headers:
-        Headers to include with all requests, unless other headers are given
-        explicitly.
-
-    :param _proxy:
-        Parsed proxy URL, should not be used directly, instead, see
-        :class:`urllib3.connectionpool.ProxyManager`"
-
-    :param _proxy_headers:
-        A dictionary with proxy headers, should not be used directly,
-        instead, see :class:`urllib3.connectionpool.ProxyManager`"
-    """
-
-    scheme = 'http'
-    ConnectionCls = HTTPConnection
-
-    def __init__(self, host, port=None, strict=False,
-                 timeout=Timeout.DEFAULT_TIMEOUT, maxsize=1, block=False,
-                 headers=None, _proxy=None, _proxy_headers=None, **conn_kw):
-        ConnectionPool.__init__(self, host, port)
-        RequestMethods.__init__(self, headers)
-
-        self.strict = strict
-
-        # This is for backwards compatibility and can be removed once a timeout
-        # can only be set to a Timeout object
-        if not isinstance(timeout, Timeout):
-            timeout = Timeout.from_float(timeout)
-
-        self.timeout = timeout
-
-        self.pool = self.QueueCls(maxsize)
-        self.block = block
-
-        self.proxy = _proxy
-        self.proxy_headers = _proxy_headers or {}
-
-        # Fill the queue up so that doing get() on it will block properly
-        for _ in xrange(maxsize):
-            self.pool.put(None)
-
-        # These are mostly for testing and debugging purposes.
-        self.num_connections = 0
-        self.num_requests = 0
-
-        if sys.version_info < (2, 7):  # Python 2.6 and older
-            conn_kw.pop('source_address', None)
-        self.conn_kw = conn_kw
-
-    def _new_conn(self):
-        """
-        Return a fresh :class:`HTTPConnection`.
-        """
-        self.num_connections += 1
-        log.info("Starting new HTTP connection (%d): %s" %
-                 (self.num_connections, self.host))
-
-        conn = self.ConnectionCls(host=self.host, port=self.port,
-                                  timeout=self.timeout.connect_timeout,
-                                  strict=self.strict, **self.conn_kw)
-        if self.proxy is not None:
-            # Enable Nagle's algorithm for proxies, to avoid packet
-            # fragmentation.
-            conn.tcp_nodelay = 0
-        return conn
-
-    def _get_conn(self, timeout=None):
-        """
-        Get a connection. Will return a pooled connection if one is available.
-
-        If no connections are available and :prop:`.block` is ``False``, then a
-        fresh connection is returned.
-
-        :param timeout:
-            Seconds to wait before giving up and raising
-            :class:`urllib3.exceptions.EmptyPoolError` if the pool is empty and
-            :prop:`.block` is ``True``.
-        """
-        conn = None
-        try:
-            conn = self.pool.get(block=self.block, timeout=timeout)
-
-        except AttributeError: # self.pool is None
-            raise ClosedPoolError(self, "Pool is closed.")
-
-        except Empty:
-            if self.block:
-                raise EmptyPoolError(self,
-                                     "Pool reached maximum size and no more "
-                                     "connections are allowed.")
-            pass  # Oh well, we'll create a new connection then
-
-        # If this is a persistent connection, check if it got disconnected
-        if conn and is_connection_dropped(conn):
-            log.info("Resetting dropped connection: %s" % self.host)
-            conn.close()
-
-        return conn or self._new_conn()
-
-    def _put_conn(self, conn):
-        """
-        Put a connection back into the pool.
-
-        :param conn:
-            Connection object for the current host and port as returned by
-            :meth:`._new_conn` or :meth:`._get_conn`.
-
-        If the pool is already full, the connection is closed and discarded
-        because we exceeded maxsize. If connections are discarded frequently,
-        then maxsize should be increased.
-
-        If the pool is closed, then the connection will be closed and discarded.
-        """
-        try:
-            self.pool.put(conn, block=False)
-            return # Everything is dandy, done.
-        except AttributeError:
-            # self.pool is None.
-            pass
-        except Full:
-            # This should never happen if self.block == True
-            log.warning(
-                "Connection pool is full, discarding connection: %s" %
-                self.host)
-
-        # Connection never got put back into the pool, close it.
-        if conn:
-            conn.close()
-
-    def _get_timeout(self, timeout):
-        """ Helper that always returns a :class:`urllib3.util.Timeout` """
-        if timeout is _Default:
-            return self.timeout.clone()
-
-        if isinstance(timeout, Timeout):
-            return timeout.clone()
-        else:
-            # User passed us an int/float. This is for backwards compatibility,
-            # can be removed later
-            return Timeout.from_float(timeout)
-
-    def _make_request(self, conn, method, url, timeout=_Default,
-                      **httplib_request_kw):
-        """
-        Perform a request on a given urllib connection object taken from our
-        pool.
-
-        :param conn:
-            a connection from one of our connection pools
-
-        :param timeout:
-            Socket timeout in seconds for the request. This can be a
-            float or integer, which will set the same timeout value for
-            the socket connect and the socket read, or an instance of
-            :class:`urllib3.util.Timeout`, which gives you more fine-grained
-            control over your timeouts.
-        """
-        self.num_requests += 1
-
-        timeout_obj = self._get_timeout(timeout)
-
-        try:
-            timeout_obj.start_connect()
-            conn.timeout = timeout_obj.connect_timeout
-            # conn.request() calls httplib.*.request, not the method in
-            # urllib3.request. It also calls makefile (recv) on the socket.
-            conn.request(method, url, **httplib_request_kw)
-        except SocketTimeout:
-            raise ConnectTimeoutError(
-                self, "Connection to %s timed out. (connect timeout=%s)" %
-                (self.host, timeout_obj.connect_timeout))
-
-        # Reset the timeout for the recv() on the socket
-        read_timeout = timeout_obj.read_timeout
-
-        # App Engine doesn't have a sock attr
-        if hasattr(conn, 'sock'):
-            # In Python 3 socket.py will catch EAGAIN and return None when you
-            # try and read into the file pointer created by http.client, which
-            # instead raises a BadStatusLine exception. Instead of catching
-            # the exception and assuming all BadStatusLine exceptions are read
-            # timeouts, check for a zero timeout before making the request.
-            if read_timeout == 0:
-                raise ReadTimeoutError(
-                    self, url,
-                    "Read timed out. (read timeout=%s)" % read_timeout)
-            if read_timeout is Timeout.DEFAULT_TIMEOUT:
-                conn.sock.settimeout(socket.getdefaulttimeout())
-            else: # None or a value
-                conn.sock.settimeout(read_timeout)
-
-        # Receive the response from the server
-        try:
-            try: # Python 2.7+, use buffering of HTTP responses
-                httplib_response = conn.getresponse(buffering=True)
-            except TypeError: # Python 2.6 and older
-                httplib_response = conn.getresponse()
-        except SocketTimeout:
-            raise ReadTimeoutError(
-                self, url, "Read timed out. (read timeout=%s)" % read_timeout)
-
-        except BaseSSLError as e:
-            # Catch possible read timeouts thrown as SSL errors. If not the
-            # case, rethrow the original. We need to do this because of:
-            # http://bugs.python.org/issue10272
-            if 'timed out' in str(e) or \
-               'did not complete (read)' in str(e):  # Python 2.6
-                raise ReadTimeoutError(self, url, "Read timed out.")
-
-            raise
-
-        except SocketError as e: # Platform-specific: Python 2
-            # See the above comment about EAGAIN in Python 3. In Python 2 we
-            # have to specifically catch it and throw the timeout error
-            if e.errno in _blocking_errnos:
-                raise ReadTimeoutError(
-                    self, url,
-                    "Read timed out. (read timeout=%s)" % read_timeout)
-
-            raise
-
-        # AppEngine doesn't have a version attr.
-        http_version = getattr(conn, '_http_vsn_str', 'HTTP/?')
-        log.debug("\"%s %s %s\" %s %s" % (method, url, http_version,
-                                          httplib_response.status,
-                                          httplib_response.length))
-        return httplib_response
-
-    def close(self):
-        """
-        Close all pooled connections and disable the pool.
-        """
-        # Disable access to the pool
-        old_pool, self.pool = self.pool, None
-
-        try:
-            while True:
-                conn = old_pool.get(block=False)
-                if conn:
-                    conn.close()
-
-        except Empty:
-            pass # Done.
-
-    def is_same_host(self, url):
-        """
-        Check if the given ``url`` is a member of the same host as this
-        connection pool.
-        """
-        if url.startswith('/'):
-            return True
-
-        # TODO: Add optional support for socket.gethostbyname checking.
-        scheme, host, port = get_host(url)
-
-        # Use explicit default port for comparison when none is given
-        if self.port and not port:
-            port = port_by_scheme.get(scheme)
-        elif not self.port and port == port_by_scheme.get(scheme):
-            port = None
-
-        return (scheme, host, port) == (self.scheme, self.host, self.port)
-
-    def urlopen(self, method, url, body=None, headers=None, retries=3,
-                redirect=True, assert_same_host=True, timeout=_Default,
-                pool_timeout=None, release_conn=None, **response_kw):
-        """
-        Get a connection from the pool and perform an HTTP request. This is the
-        lowest level call for making a request, so you'll need to specify all
-        the raw details.
-
-        .. note::
-
-           More commonly, it's appropriate to use a convenience method provided
-           by :class:`.RequestMethods`, such as :meth:`request`.
-
-        .. note::
-
-           `release_conn` will only behave as expected if
-           `preload_content=False` because we want to make
-           `preload_content=False` the default behaviour someday soon without
-           breaking backwards compatibility.
-
-        :param method:
-            HTTP request method (such as GET, POST, PUT, etc.)
-
-        :param body:
-            Data to send in the request body (useful for creating
-            POST requests, see HTTPConnectionPool.post_url for
-            more convenience).
-
-        :param headers:
-            Dictionary of custom headers to send, such as User-Agent,
-            If-None-Match, etc. If None, pool headers are used. If provided,
-            these headers completely replace any pool-specific headers.
-
-        :param retries:
-            Number of retries to allow before raising a MaxRetryError exception.
-            If `False`, then retries are disabled and any exception is raised
-            immediately.
-
-        :param redirect:
-            If True, automatically handle redirects (status codes 301, 302,
-            303, 307, 308). Each redirect counts as a retry. Disabling retries
-            will disable redirect, too.
-
-        :param assert_same_host:
-            If ``True``, will make sure that the host of the pool requests is
-            consistent else will raise HostChangedError. When False, you can
-            use the pool on an HTTP proxy and request foreign hosts.
-
-        :param timeout:
-            If specified, overrides the default timeout for this one
-            request. It may be a float (in seconds) or an instance of
-            :class:`urllib3.util.Timeout`.
-
-        :param pool_timeout:
-            If set and the pool is set to block=True, then this method will
-            block for ``pool_timeout`` seconds and raise EmptyPoolError if no
-            connection is available within the time period.
-
-        :param release_conn:
-            If False, then the urlopen call will not release the connection
-            back into the pool once a response is received (but will release if
-            you read the entire contents of the response such as when
-            `preload_content=True`). This is useful if you're not preloading
-            the response's content immediately. You will need to call
-            ``r.release_conn()`` on the response ``r`` to return the connection
-            back into the pool. If None, it takes the value of
-            ``response_kw.get('preload_content', True)``.
-
-        :param \**response_kw:
-            Additional parameters are passed to
-            :meth:`urllib3.response.HTTPResponse.from_httplib`
-        """
-        if headers is None:
-            headers = self.headers
-
-        if retries < 0 and retries is not False:
-            raise MaxRetryError(self, url)
-
-        if release_conn is None:
-            release_conn = response_kw.get('preload_content', True)
-
-        # Check host
-        if assert_same_host and not self.is_same_host(url):
-            raise HostChangedError(self, url, retries - 1)
-
-        conn = None
-
-        # Merge the proxy headers. Only do this in HTTP. We have to copy the
-        # headers dict so we can safely change it without those changes being
-        # reflected in anyone else's copy.
-        if self.scheme == 'http':
-            headers = headers.copy()
-            headers.update(self.proxy_headers)
-
-        # Must keep the exception bound to a separate variable or else Python 3
-        # complains about UnboundLocalError.
-        err = None
-
-        try:
-            # Request a connection from the queue
-            conn = self._get_conn(timeout=pool_timeout)
-
-            # Make the request on the httplib connection object
-            httplib_response = self._make_request(conn, method, url,
-                                                  timeout=timeout,
-                                                  body=body, headers=headers)
-
-            # If we're going to release the connection in ``finally:``, then
-            # the request doesn't need to know about the connection. Otherwise
-            # it will also try to release it and we'll have a double-release
-            # mess.
-            response_conn = not release_conn and conn
-
-            # Import httplib's response into our own wrapper object
-            response = HTTPResponse.from_httplib(httplib_response,
-                                                 pool=self,
-                                                 connection=response_conn,
-                                                 **response_kw)
-
-            # else:
-            #     The connection will be put back into the pool when
-            #     ``response.release_conn()`` is called (implicitly by
-            #     ``response.read()``)
-
-        except Empty:
-            # Timed out by queue.
-            raise EmptyPoolError(self, "No pool connections are available.")
-
-        except (BaseSSLError, CertificateError) as e:
-            # Release connection unconditionally because there is no way to
-            # close it externally in case of exception.
-            release_conn = True
-            raise SSLError(e)
-
-        except (TimeoutError, HTTPException, SocketError) as e:
-            if conn:
-                # Discard the connection for these exceptions. It will be
-                # be replaced during the next _get_conn() call.
-                conn.close()
-                conn = None
-
-            if not retries:
-                if isinstance(e, TimeoutError):
-                    # TimeoutError is exempt from MaxRetryError-wrapping.
-                    # FIXME: ... Not sure why. Add a reason here.
-                    raise
-
-                # Wrap unexpected exceptions with the most appropriate
-                # module-level exception and re-raise.
-                if isinstance(e, SocketError) and self.proxy:
-                    raise ProxyError('Cannot connect to proxy.', e)
-
-                if retries is False:
-                    raise ConnectionError('Connection failed.', e)
-
-                raise MaxRetryError(self, url, e)
-
-            # Keep track of the error for the retry warning.
-            err = e
-
-        finally:
-            if release_conn:
-                # Put the connection back to be reused. If the connection is
-                # expired then it will be None, which will get replaced with a
-                # fresh connection during _get_conn.
-                self._put_conn(conn)
-
-        if not conn:
-            # Try again
-            log.warning("Retrying (%d attempts remain) after connection "
-                        "broken by '%r': %s" % (retries, err, url))
-            return self.urlopen(method, url, body, headers, retries - 1,
-                                redirect, assert_same_host,
-                                timeout=timeout, pool_timeout=pool_timeout,
-                                release_conn=release_conn, **response_kw)
-
-        # Handle redirect?
-        redirect_location = redirect and response.get_redirect_location()
-        if redirect_location and retries is not False:
-            if response.status == 303:
-                method = 'GET'
-            log.info("Redirecting %s -> %s" % (url, redirect_location))
-            return self.urlopen(method, redirect_location, body, headers,
-                                retries - 1, redirect, assert_same_host,
-                                timeout=timeout, pool_timeout=pool_timeout,
-                                release_conn=release_conn, **response_kw)
-
-        return response
-
-
-class HTTPSConnectionPool(HTTPConnectionPool):
-    """
-    Same as :class:`.HTTPConnectionPool`, but HTTPS.
-
-    When Python is compiled with the :mod:`ssl` module, then
-    :class:`.VerifiedHTTPSConnection` is used, which *can* verify certificates,
-    instead of :class:`.HTTPSConnection`.
-
-    :class:`.VerifiedHTTPSConnection` uses one of ``assert_fingerprint``,
-    ``assert_hostname`` and ``host`` in this order to verify connections.
-    If ``assert_hostname`` is False, no verification is done.
-
-    The ``key_file``, ``cert_file``, ``cert_reqs``, ``ca_certs`` and
-    ``ssl_version`` are only used if :mod:`ssl` is available and are fed into
-    :meth:`urllib3.util.ssl_wrap_socket` to upgrade the connection socket
-    into an SSL socket.
-    """
-
-    scheme = 'https'
-    ConnectionCls = HTTPSConnection
-
-    def __init__(self, host, port=None,
-                 strict=False, timeout=None, maxsize=1,
-                 block=False, headers=None,
-                 _proxy=None, _proxy_headers=None,
-                 key_file=None, cert_file=None, cert_reqs=None,
-                 ca_certs=None, ssl_version=None,
-                 assert_hostname=None, assert_fingerprint=None,
-                 **conn_kw):
-
-        if sys.version_info < (2, 7):  # Python 2.6 or older
-            conn_kw.pop('source_address', None)
-
-        HTTPConnectionPool.__init__(self, host, port, strict, timeout, maxsize,
-                                    block, headers, _proxy, _proxy_headers, **conn_kw)
-        self.key_file = key_file
-        self.cert_file = cert_file
-        self.cert_reqs = cert_reqs
-        self.ca_certs = ca_certs
-        self.ssl_version = ssl_version
-        self.assert_hostname = assert_hostname
-        self.assert_fingerprint = assert_fingerprint
-        self.conn_kw = conn_kw
-
-    def _prepare_conn(self, conn):
-        """
-        Prepare the ``connection`` for :meth:`urllib3.util.ssl_wrap_socket`
-        and establish the tunnel if proxy is used.
-        """
-
-        if isinstance(conn, VerifiedHTTPSConnection):
-            conn.set_cert(key_file=self.key_file,
-                          cert_file=self.cert_file,
-                          cert_reqs=self.cert_reqs,
-                          ca_certs=self.ca_certs,
-                          assert_hostname=self.assert_hostname,
-                          assert_fingerprint=self.assert_fingerprint)
-            conn.ssl_version = self.ssl_version
-            conn.conn_kw = self.conn_kw
-
-        if self.proxy is not None:
-            # Python 2.7+
-            try:
-                set_tunnel = conn.set_tunnel
-            except AttributeError:  # Platform-specific: Python 2.6
-                set_tunnel = conn._set_tunnel
-            set_tunnel(self.host, self.port, self.proxy_headers)
-            # Establish tunnel connection early, because otherwise httplib
-            # would improperly set Host: header to proxy's IP:port.
-            conn.connect()
-
-        return conn
-
-    def _new_conn(self):
-        """
-        Return a fresh :class:`httplib.HTTPSConnection`.
-        """
-        self.num_connections += 1
-        log.info("Starting new HTTPS connection (%d): %s"
-                 % (self.num_connections, self.host))
-
-        if not self.ConnectionCls or self.ConnectionCls is DummyConnection:
-            # Platform-specific: Python without ssl
-            raise SSLError("Can't connect to HTTPS URL because the SSL "
-                           "module is not available.")
-
-        actual_host = self.host
-        actual_port = self.port
-        if self.proxy is not None:
-            actual_host = self.proxy.host
-            actual_port = self.proxy.port
-
-        extra_params = {}
-        if not six.PY3:  # Python 2
-            extra_params['strict'] = self.strict
-        extra_params.update(self.conn_kw)
-
-        conn = self.ConnectionCls(host=actual_host, port=actual_port,
-                                  timeout=self.timeout.connect_timeout,
-                                  **extra_params)
-        if self.proxy is not None:
-            # Enable Nagle's algorithm for proxies, to avoid packet
-            # fragmentation.
-            conn.tcp_nodelay = 0
-
-        return self._prepare_conn(conn)
-
-
-def connection_from_url(url, **kw):
-    """
-    Given a url, return an :class:`.ConnectionPool` instance of its host.
-
-    This is a shortcut for not having to parse out the scheme, host, and port
-    of the url before creating an :class:`.ConnectionPool` instance.
-
-    :param url:
-        Absolute URL string that must include the scheme. Port is optional.
-
-    :param \**kw:
-        Passes additional parameters to the constructor of the appropriate
-        :class:`.ConnectionPool`. Useful for specifying things like
-        timeout, maxsize, headers, etc.
-
-    Example: ::
-
-        >>> conn = connection_from_url('http://google.com/')
-        >>> r = conn.request('GET', '/')
-    """
-    scheme, host, port = get_host(url)
-    if scheme == 'https':
-        return HTTPSConnectionPool(host, port=port, **kw)
-    else:
-        return HTTPConnectionPool(host, port=port, **kw)
diff --git a/bundle/requests/packages/urllib3/connectionpool.pyc b/bundle/requests/packages/urllib3/connectionpool.pyc
deleted file mode 100644
index 387f85b..0000000
Binary files a/bundle/requests/packages/urllib3/connectionpool.pyc and /dev/null differ
diff --git a/bundle/requests/packages/urllib3/contrib/__init__.pyc b/bundle/requests/packages/urllib3/contrib/__init__.pyc
deleted file mode 100644
index ff0f4a3..0000000
Binary files a/bundle/requests/packages/urllib3/contrib/__init__.pyc and /dev/null differ
diff --git a/bundle/requests/packages/urllib3/contrib/ntlmpool.py b/bundle/requests/packages/urllib3/contrib/ntlmpool.py
deleted file mode 100644
index b8cd933..0000000
--- a/bundle/requests/packages/urllib3/contrib/ntlmpool.py
+++ /dev/null
@@ -1,120 +0,0 @@
-# urllib3/contrib/ntlmpool.py
-# Copyright 2008-2013 Andrey Petrov and contributors (see CONTRIBUTORS.txt)
-#
-# This module is part of urllib3 and is released under
-# the MIT License: http://www.opensource.org/licenses/mit-license.php
-
-"""
-NTLM authenticating pool, contributed by erikcederstran
-
-Issue #10, see: http://code.google.com/p/urllib3/issues/detail?id=10
-"""
-
-try:
-    from http.client import HTTPSConnection
-except ImportError:
-    from httplib import HTTPSConnection
-from logging import getLogger
-from ntlm import ntlm
-
-from urllib3 import HTTPSConnectionPool
-
-
-log = getLogger(__name__)
-
-
-class NTLMConnectionPool(HTTPSConnectionPool):
-    """
-    Implements an NTLM authentication version of an urllib3 connection pool
-    """
-
-    scheme = 'https'
-
-    def __init__(self, user, pw, authurl, *args, **kwargs):
-        """
-        authurl is a random URL on the server that is protected by NTLM.
-        user is the Windows user, probably in the DOMAIN\\username format.
-        pw is the password for the user.
-        """
-        super(NTLMConnectionPool, self).__init__(*args, **kwargs)
-        self.authurl = authurl
-        self.rawuser = user
-        user_parts = user.split('\\', 1)
-        self.domain = user_parts[0].upper()
-        self.user = user_parts[1]
-        self.pw = pw
-
-    def _new_conn(self):
-        # Performs the NTLM handshake that secures the connection. The socket
-        # must be kept open while requests are performed.
-        self.num_connections += 1
-        log.debug('Starting NTLM HTTPS connection no. %d: https://%s%s' %
-                  (self.num_connections, self.host, self.authurl))
-
-        headers = {}
-        headers['Connection'] = 'Keep-Alive'
-        req_header = 'Authorization'
-        resp_header = 'www-authenticate'
-
-        conn = HTTPSConnection(host=self.host, port=self.port)
-
-        # Send negotiation message
-        headers[req_header] = (
-            'NTLM %s' % ntlm.create_NTLM_NEGOTIATE_MESSAGE(self.rawuser))
-        log.debug('Request headers: %s' % headers)
-        conn.request('GET', self.authurl, None, headers)
-        res = conn.getresponse()
-        reshdr = dict(res.getheaders())
-        log.debug('Response status: %s %s' % (res.status, res.reason))
-        log.debug('Response headers: %s' % reshdr)
-        log.debug('Response data: %s [...]' % res.read(100))
-
-        # Remove the reference to the socket, so that it can not be closed by
-        # the response object (we want to keep the socket open)
-        res.fp = None
-
-        # Server should respond with a challenge message
-        auth_header_values = reshdr[resp_header].split(', ')
-        auth_header_value = None
-        for s in auth_header_values:
-            if s[:5] == 'NTLM ':
-                auth_header_value = s[5:]
-        if auth_header_value is None:
-            raise Exception('Unexpected %s response header: %s' %
-                            (resp_header, reshdr[resp_header]))
-
-        # Send authentication message
-        ServerChallenge, NegotiateFlags = \
-            ntlm.parse_NTLM_CHALLENGE_MESSAGE(auth_header_value)
-        auth_msg = ntlm.create_NTLM_AUTHENTICATE_MESSAGE(ServerChallenge,
-                                                         self.user,
-                                                         self.domain,
-                                                         self.pw,
-                                                         NegotiateFlags)
-        headers[req_header] = 'NTLM %s' % auth_msg
-        log.debug('Request headers: %s' % headers)
-        conn.request('GET', self.authurl, None, headers)
-        res = conn.getresponse()
-        log.debug('Response status: %s %s' % (res.status, res.reason))
-        log.debug('Response headers: %s' % dict(res.getheaders()))
-        log.debug('Response data: %s [...]' % res.read()[:100])
-        if res.status != 200:
-            if res.status == 401:
-                raise Exception('Server rejected request: wrong '
-                                'username or password')
-            raise Exception('Wrong server response: %s %s' %
-                            (res.status, res.reason))
-
-        res.fp = None
-        log.debug('Connection established')
-        return conn
-
-    def urlopen(self, method, url, body=None, headers=None, retries=3,
-                redirect=True, assert_same_host=True):
-        if headers is None:
-            headers = {}
-        headers['Connection'] = 'Keep-Alive'
-        return super(NTLMConnectionPool, self).urlopen(method, url, body,
-                                                       headers, retries,
-                                                       redirect,
-                                                       assert_same_host)
diff --git a/bundle/requests/packages/urllib3/contrib/pyopenssl.py b/bundle/requests/packages/urllib3/contrib/pyopenssl.py
deleted file mode 100644
index 21a12c6..0000000
--- a/bundle/requests/packages/urllib3/contrib/pyopenssl.py
+++ /dev/null
@@ -1,422 +0,0 @@
-'''SSL with SNI_-support for Python 2. Follow these instructions if you would
-like to verify SSL certificates in Python 2. Note, the default libraries do
-*not* do certificate checking; you need to do additional work to validate
-certificates yourself.
-
-This needs the following packages installed:
-
-* pyOpenSSL (tested with 0.13)
-* ndg-httpsclient (tested with 0.3.2)
-* pyasn1 (tested with 0.1.6)
-
-You can install them with the following command:
-
-    pip install pyopenssl ndg-httpsclient pyasn1
-
-To activate certificate checking, call
-:func:`~urllib3.contrib.pyopenssl.inject_into_urllib3` from your Python code
-before you begin making HTTP requests. This can be done in a ``sitecustomize``
-module, or at any other time before your application begins using ``urllib3``,
-like this::
-
-    try:
-        import urllib3.contrib.pyopenssl
-        urllib3.contrib.pyopenssl.inject_into_urllib3()
-    except ImportError:
-        pass
-
-Now you can use :mod:`urllib3` as you normally would, and it will support SNI
-when the required modules are installed.
-
-Activating this module also has the positive side effect of disabling SSL/TLS
-encryption in Python 2 (see `CRIME attack`_).
-
-If you want to configure the default list of supported cipher suites, you can
-set the ``urllib3.contrib.pyopenssl.DEFAULT_SSL_CIPHER_LIST`` variable.
-
-Module Variables
-----------------
-
-:var DEFAULT_SSL_CIPHER_LIST: The list of supported SSL/TLS cipher suites.
-    Default: ``ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:
-    ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS``
-
-.. _sni: https://en.wikipedia.org/wiki/Server_Name_Indication
-.. _crime attack: https://en.wikipedia.org/wiki/CRIME_(security_exploit)
-
-'''
-
-from ndg.httpsclient.ssl_peer_verification import SUBJ_ALT_NAME_SUPPORT
-from ndg.httpsclient.subj_alt_name import SubjectAltName as BaseSubjectAltName
-import OpenSSL.SSL
-from pyasn1.codec.der import decoder as der_decoder
-from pyasn1.type import univ, constraint
-from socket import _fileobject, timeout
-import ssl
-import select
-from cStringIO import StringIO
-
-from .. import connection
-from .. import util
-
-__all__ = ['inject_into_urllib3', 'extract_from_urllib3']
-
-# SNI only *really* works if we can read the subjectAltName of certificates.
-HAS_SNI = SUBJ_ALT_NAME_SUPPORT
-
-# Map from urllib3 to PyOpenSSL compatible parameter-values.
-_openssl_versions = {
-    ssl.PROTOCOL_SSLv23: OpenSSL.SSL.SSLv23_METHOD,
-    ssl.PROTOCOL_SSLv3: OpenSSL.SSL.SSLv3_METHOD,
-    ssl.PROTOCOL_TLSv1: OpenSSL.SSL.TLSv1_METHOD,
-}
-_openssl_verify = {
-    ssl.CERT_NONE: OpenSSL.SSL.VERIFY_NONE,
-    ssl.CERT_OPTIONAL: OpenSSL.SSL.VERIFY_PEER,
-    ssl.CERT_REQUIRED: OpenSSL.SSL.VERIFY_PEER
-                       + OpenSSL.SSL.VERIFY_FAIL_IF_NO_PEER_CERT,
-}
-
-# A secure default.
-# Sources for more information on TLS ciphers:
-#
-# - https://wiki.mozilla.org/Security/Server_Side_TLS
-# - https://www.ssllabs.com/projects/best-practices/index.html
-# - https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
-#
-# The general intent is:
-# - Prefer cipher suites that offer perfect forward secrecy (DHE/ECDHE),
-# - prefer ECDHE over DHE for better performance,
-# - prefer any AES-GCM over any AES-CBC for better performance and security,
-# - use 3DES as fallback which is secure but slow,
-# - disable NULL authentication, MD5 MACs and DSS for security reasons.
-DEFAULT_SSL_CIPHER_LIST = "ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:" + \
-    "ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:" + \
-    "!aNULL:!MD5:!DSS"
-
-
-orig_util_HAS_SNI = util.HAS_SNI
-orig_connection_ssl_wrap_socket = connection.ssl_wrap_socket
-
-
-def inject_into_urllib3():
-    'Monkey-patch urllib3 with PyOpenSSL-backed SSL-support.'
-
-    connection.ssl_wrap_socket = ssl_wrap_socket
-    util.HAS_SNI = HAS_SNI
-
-
-def extract_from_urllib3():
-    'Undo monkey-patching by :func:`inject_into_urllib3`.'
-
-    connection.ssl_wrap_socket = orig_connection_ssl_wrap_socket
-    util.HAS_SNI = orig_util_HAS_SNI
-
-
-### Note: This is a slightly bug-fixed version of same from ndg-httpsclient.
-class SubjectAltName(BaseSubjectAltName):
-    '''ASN.1 implementation for subjectAltNames support'''
-
-    # There is no limit to how many SAN certificates a certificate may have,
-    #   however this needs to have some limit so we'll set an arbitrarily high
-    #   limit.
-    sizeSpec = univ.SequenceOf.sizeSpec + \
-        constraint.ValueSizeConstraint(1, 1024)
-
-
-### Note: This is a slightly bug-fixed version of same from ndg-httpsclient.
-def get_subj_alt_name(peer_cert):
-    # Search through extensions
-    dns_name = []
-    if not SUBJ_ALT_NAME_SUPPORT:
-        return dns_name
-
-    general_names = SubjectAltName()
-    for i in range(peer_cert.get_extension_count()):
-        ext = peer_cert.get_extension(i)
-        ext_name = ext.get_short_name()
-        if ext_name != 'subjectAltName':
-            continue
-
-        # PyOpenSSL returns extension data in ASN.1 encoded form
-        ext_dat = ext.get_data()
-        decoded_dat = der_decoder.decode(ext_dat,
-                                         asn1Spec=general_names)
-
-        for name in decoded_dat:
-            if not isinstance(name, SubjectAltName):
-                continue
-            for entry in range(len(name)):
-                component = name.getComponentByPosition(entry)
-                if component.getName() != 'dNSName':
-                    continue
-                dns_name.append(str(component.getComponent()))
-
-    return dns_name
-
-
-class fileobject(_fileobject):
-
-    def _wait_for_sock(self):
-        rd, wd, ed = select.select([self._sock], [], [],
-                                   self._sock.gettimeout())
-        if not rd:
-            raise timeout()
-
-
-    def read(self, size=-1):
-        # Use max, disallow tiny reads in a loop as they are very inefficient.
-        # We never leave read() with any leftover data from a new recv() call
-        # in our internal buffer.
-        rbufsize = max(self._rbufsize, self.default_bufsize)
-        # Our use of StringIO rather than lists of string objects returned by
-        # recv() minimizes memory usage and fragmentation that occurs when
-        # rbufsize is large compared to the typical return value of recv().
-        buf = self._rbuf
-        buf.seek(0, 2)  # seek end
-        if size < 0:
-            # Read until EOF
-            self._rbuf = StringIO()  # reset _rbuf.  we consume it via buf.
-            while True:
-                try:
-                    data = self._sock.recv(rbufsize)
-                except OpenSSL.SSL.WantReadError:
-                    self._wait_for_sock()
-                    continue
-                if not data:
-                    break
-                buf.write(data)
-            return buf.getvalue()
-        else:
-            # Read until size bytes or EOF seen, whichever comes first
-            buf_len = buf.tell()
-            if buf_len >= size:
-                # Already have size bytes in our buffer?  Extract and return.
-                buf.seek(0)
-                rv = buf.read(size)
-                self._rbuf = StringIO()
-                self._rbuf.write(buf.read())
-                return rv
-
-            self._rbuf = StringIO()  # reset _rbuf.  we consume it via buf.
-            while True:
-                left = size - buf_len
-                # recv() will malloc the amount of memory given as its
-                # parameter even though it often returns much less data
-                # than that.  The returned data string is short lived
-                # as we copy it into a StringIO and free it.  This avoids
-                # fragmentation issues on many platforms.
-                try:
-                    data = self._sock.recv(left)
-                except OpenSSL.SSL.WantReadError:
-                    self._wait_for_sock()
-                    continue
-                if not data:
-                    break
-                n = len(data)
-                if n == size and not buf_len:
-                    # Shortcut.  Avoid buffer data copies when:
-                    # - We have no data in our buffer.
-                    # AND
-                    # - Our call to recv returned exactly the
-                    #   number of bytes we were asked to read.
-                    return data
-                if n == left:
-                    buf.write(data)
-                    del data  # explicit free
-                    break
-                assert n <= left, "recv(%d) returned %d bytes" % (left, n)
-                buf.write(data)
-                buf_len += n
-                del data  # explicit free
-                #assert buf_len == buf.tell()
-            return buf.getvalue()
-
-    def readline(self, size=-1):
-        buf = self._rbuf
-        buf.seek(0, 2)  # seek end
-        if buf.tell() > 0:
-            # check if we already have it in our buffer
-            buf.seek(0)
-            bline = buf.readline(size)
-            if bline.endswith('\n') or len(bline) == size:
-                self._rbuf = StringIO()
-                self._rbuf.write(buf.read())
-                return bline
-            del bline
-        if size < 0:
-            # Read until \n or EOF, whichever comes first
-            if self._rbufsize <= 1:
-                # Speed up unbuffered case
-                buf.seek(0)
-                buffers = [buf.read()]
-                self._rbuf = StringIO()  # reset _rbuf.  we consume it via buf.
-                data = None
-                recv = self._sock.recv
-                while True:
-                    try:
-                        while data != "\n":
-                            data = recv(1)
-                            if not data:
-                                break
-                            buffers.append(data)
-                    except OpenSSL.SSL.WantReadError:
-                        self._wait_for_sock()
-                        continue
-                    break
-                return "".join(buffers)
-
-            buf.seek(0, 2)  # seek end
-            self._rbuf = StringIO()  # reset _rbuf.  we consume it via buf.
-            while True:
-                try:
-                    data = self._sock.recv(self._rbufsize)
-                except OpenSSL.SSL.WantReadError:
-                    self._wait_for_sock()
-                    continue
-                if not data:
-                    break
-                nl = data.find('\n')
-                if nl >= 0:
-                    nl += 1
-                    buf.write(data[:nl])
-                    self._rbuf.write(data[nl:])
-                    del data
-                    break
-                buf.write(data)
-            return buf.getvalue()
-        else:
-            # Read until size bytes or \n or EOF seen, whichever comes first
-            buf.seek(0, 2)  # seek end
-            buf_len = buf.tell()
-            if buf_len >= size:
-                buf.seek(0)
-                rv = buf.read(size)
-                self._rbuf = StringIO()
-                self._rbuf.write(buf.read())
-                return rv
-            self._rbuf = StringIO()  # reset _rbuf.  we consume it via buf.
-            while True:
-                try:
-                    data = self._sock.recv(self._rbufsize)
-                except OpenSSL.SSL.WantReadError:
-                    self._wait_for_sock()
-                    continue
-                if not data:
-                    break
-                left = size - buf_len
-                # did we just receive a newline?
-                nl = data.find('\n', 0, left)
-                if nl >= 0:
-                    nl += 1
-                    # save the excess data to _rbuf
-                    self._rbuf.write(data[nl:])
-                    if buf_len:
-                        buf.write(data[:nl])
-                        break
-                    else:
-                        # Shortcut.  Avoid data copy through buf when returning
-                        # a substring of our first recv().
-                        return data[:nl]
-                n = len(data)
-                if n == size and not buf_len:
-                    # Shortcut.  Avoid data copy through buf when
-                    # returning exactly all of our first recv().
-                    return data
-                if n >= left:
-                    buf.write(data[:left])
-                    self._rbuf.write(data[left:])
-                    break
-                buf.write(data)
-                buf_len += n
-                #assert buf_len == buf.tell()
-            return buf.getvalue()
-
-
-class WrappedSocket(object):
-    '''API-compatibility wrapper for Python OpenSSL's Connection-class.'''
-
-    def __init__(self, connection, socket):
-        self.connection = connection
-        self.socket = socket
-
-    def fileno(self):
-        return self.socket.fileno()
-
-    def makefile(self, mode, bufsize=-1):
-        return fileobject(self.connection, mode, bufsize)
-
-    def settimeout(self, timeout):
-        return self.socket.settimeout(timeout)
-
-    def sendall(self, data):
-        return self.connection.sendall(data)
-
-    def close(self):
-        return self.connection.shutdown()
-
-    def getpeercert(self, binary_form=False):
-        x509 = self.connection.get_peer_certificate()
-
-        if not x509:
-            return x509
-
-        if binary_form:
-            return OpenSSL.crypto.dump_certificate(
-                OpenSSL.crypto.FILETYPE_ASN1,
-                x509)
-
-        return {
-            'subject': (
-                (('commonName', x509.get_subject().CN),),
-            ),
-            'subjectAltName': [
-                ('DNS', value)
-                for value in get_subj_alt_name(x509)
-            ]
-        }
-
-
-def _verify_callback(cnx, x509, err_no, err_depth, return_code):
-    return err_no == 0
-
-
-def ssl_wrap_socket(sock, keyfile=None, certfile=None, cert_reqs=None,
-                    ca_certs=None, server_hostname=None,
-                    ssl_version=None):
-    ctx = OpenSSL.SSL.Context(_openssl_versions[ssl_version])
-    if certfile:
-        ctx.use_certificate_file(certfile)
-    if keyfile:
-        ctx.use_privatekey_file(keyfile)
-    if cert_reqs != ssl.CERT_NONE:
-        ctx.set_verify(_openssl_verify[cert_reqs], _verify_callback)
-    if ca_certs:
-        try:
-            ctx.load_verify_locations(ca_certs, None)
-        except OpenSSL.SSL.Error as e:
-            raise ssl.SSLError('bad ca_certs: %r' % ca_certs, e)
-    else:
-        ctx.set_default_verify_paths()
-
-    # Disable TLS compression to migitate CRIME attack (issue #309)
-    OP_NO_COMPRESSION = 0x20000
-    ctx.set_options(OP_NO_COMPRESSION)
-
-    # Set list of supported ciphersuites.
-    ctx.set_cipher_list(DEFAULT_SSL_CIPHER_LIST)
-
-    cnx = OpenSSL.SSL.Connection(ctx, sock)
-    cnx.set_tlsext_host_name(server_hostname)
-    cnx.set_connect_state()
-    while True:
-        try:
-            cnx.do_handshake()
-        except OpenSSL.SSL.WantReadError:
-            select.select([sock], [], [])
-            continue
-        except OpenSSL.SSL.Error as e:
-            raise ssl.SSLError('bad handshake', e)
-        break
-
-    return WrappedSocket(cnx, sock)
diff --git a/bundle/requests/packages/urllib3/contrib/pyopenssl.pyc b/bundle/requests/packages/urllib3/contrib/pyopenssl.pyc
deleted file mode 100644
index e820c40..0000000
Binary files a/bundle/requests/packages/urllib3/contrib/pyopenssl.pyc and /dev/null differ
diff --git a/bundle/requests/packages/urllib3/exceptions.py b/bundle/requests/packages/urllib3/exceptions.py
deleted file mode 100644
index b4df831..0000000
--- a/bundle/requests/packages/urllib3/exceptions.py
+++ /dev/null
@@ -1,126 +0,0 @@
-# urllib3/exceptions.py
-# Copyright 2008-2013 Andrey Petrov and contributors (see CONTRIBUTORS.txt)
-#
-# This module is part of urllib3 and is released under
-# the MIT License: http://www.opensource.org/licenses/mit-license.php
-
-
-## Base Exceptions
-
-class HTTPError(Exception):
-    "Base exception used by this module."
-    pass
-
-
-class PoolError(HTTPError):
-    "Base exception for errors caused within a pool."
-    def __init__(self, pool, message):
-        self.pool = pool
-        HTTPError.__init__(self, "%s: %s" % (pool, message))
-
-    def __reduce__(self):
-        # For pickling purposes.
-        return self.__class__, (None, None)
-
-
-class RequestError(PoolError):
-    "Base exception for PoolErrors that have associated URLs."
-    def __init__(self, pool, url, message):
-        self.url = url
-        PoolError.__init__(self, pool, message)
-
-    def __reduce__(self):
-        # For pickling purposes.
-        return self.__class__, (None, self.url, None)
-
-
-class SSLError(HTTPError):
-    "Raised when SSL certificate fails in an HTTPS connection."
-    pass
-
-
-class ProxyError(HTTPError):
-    "Raised when the connection to a proxy fails."
-    pass
-
-
-class ConnectionError(HTTPError):
-    "Raised when a normal connection fails."
-    pass
-
-
-class DecodeError(HTTPError):
-    "Raised when automatic decoding based on Content-Type fails."
-    pass
-
-
-## Leaf Exceptions
-
-class MaxRetryError(RequestError):
-    "Raised when the maximum number of retries is exceeded."
-
-    def __init__(self, pool, url, reason=None):
-        self.reason = reason
-
-        message = "Max retries exceeded with url: %s" % url
-        if reason:
-            message += " (Caused by %s: %s)" % (type(reason), reason)
-        else:
-            message += " (Caused by redirect)"
-
-        RequestError.__init__(self, pool, url, message)
-
-
-class HostChangedError(RequestError):
-    "Raised when an existing pool gets a request for a foreign host."
-
-    def __init__(self, pool, url, retries=3):
-        message = "Tried to open a foreign host with url: %s" % url
-        RequestError.__init__(self, pool, url, message)
-        self.retries = retries
-
-
-class TimeoutStateError(HTTPError):
-    """ Raised when passing an invalid state to a timeout """
-    pass
-
-
-class TimeoutError(HTTPError):
-    """ Raised when a socket timeout error occurs.
-
-    Catching this error will catch both :exc:`ReadTimeoutErrors
-    <ReadTimeoutError>` and :exc:`ConnectTimeoutErrors <ConnectTimeoutError>`.
-    """
-    pass
-
-
-class ReadTimeoutError(TimeoutError, RequestError):
-    "Raised when a socket timeout occurs while receiving data from a server"
-    pass
-
-
-# This timeout error does not have a URL attached and needs to inherit from the
-# base HTTPError
-class ConnectTimeoutError(TimeoutError):
-    "Raised when a socket timeout occurs while connecting to a server"
-    pass
-
-
-class EmptyPoolError(PoolError):
-    "Raised when a pool runs out of connections and no more are allowed."
-    pass
-
-
-class ClosedPoolError(PoolError):
-    "Raised when a request enters a pool after the pool has been closed."
-    pass
-
-
-class LocationParseError(ValueError, HTTPError):
-    "Raised when get_host or similar fails to parse the URL input."
-
-    def __init__(self, location):
-        message = "Failed to parse: %s" % location
-        HTTPError.__init__(self, message)
-
-        self.location = location
diff --git a/bundle/requests/packages/urllib3/exceptions.pyc b/bundle/requests/packages/urllib3/exceptions.pyc
deleted file mode 100644
index 78274cd..0000000
Binary files a/bundle/requests/packages/urllib3/exceptions.pyc and /dev/null differ
diff --git a/bundle/requests/packages/urllib3/fields.py b/bundle/requests/packages/urllib3/fields.py
deleted file mode 100644
index ed01765..0000000
--- a/bundle/requests/packages/urllib3/fields.py
+++ /dev/null
@@ -1,177 +0,0 @@
-# urllib3/fields.py
-# Copyright 2008-2013 Andrey Petrov and contributors (see CONTRIBUTORS.txt)
-#
-# This module is part of urllib3 and is released under
-# the MIT License: http://www.opensource.org/licenses/mit-license.php
-
-import email.utils
-import mimetypes
-
-from .packages import six
-
-
-def guess_content_type(filename, default='application/octet-stream'):
-    """
-    Guess the "Content-Type" of a file.
-
-    :param filename:
-        The filename to guess the "Content-Type" of using :mod:`mimetimes`.
-    :param default:
-        If no "Content-Type" can be guessed, default to `default`.
-    """
-    if filename:
-        return mimetypes.guess_type(filename)[0] or default
-    return default
-
-
-def format_header_param(name, value):
-    """
-    Helper function to format and quote a single header parameter.
-
-    Particularly useful for header parameters which might contain
-    non-ASCII values, like file names. This follows RFC 2231, as
-    suggested by RFC 2388 Section 4.4.
-
-    :param name:
-        The name of the parameter, a string expected to be ASCII only.
-    :param value:
-        The value of the parameter, provided as a unicode string.
-    """
-    if not any(ch in value for ch in '"\\\r\n'):
-        result = '%s="%s"' % (name, value)
-        try:
-            result.encode('ascii')
-        except UnicodeEncodeError:
-            pass
-        else:
-            return result
-    if not six.PY3:  # Python 2:
-        value = value.encode('utf-8')
-    value = email.utils.encode_rfc2231(value, 'utf-8')
-    value = '%s*=%s' % (name, value)
-    return value
-
-
-class RequestField(object):
-    """
-    A data container for request body parameters.
-
-    :param name:
-        The name of this request field.
-    :param data:
-        The data/value body.
-    :param filename:
-        An optional filename of the request field.
-    :param headers:
-        An optional dict-like object of headers to initially use for the field.
-    """
-    def __init__(self, name, data, filename=None, headers=None):
-        self._name = name
-        self._filename = filename
-        self.data = data
-        self.headers = {}
-        if headers:
-            self.headers = dict(headers)
-
-    @classmethod
-    def from_tuples(cls, fieldname, value):
-        """
-        A :class:`~urllib3.fields.RequestField` factory from old-style tuple parameters.
-
-        Supports constructing :class:`~urllib3.fields.RequestField` from parameter
-        of key/value strings AND key/filetuple. A filetuple is a (filename, data, MIME type)
-        tuple where the MIME type is optional. For example: ::
-
-            'foo': 'bar',
-            'fakefile': ('foofile.txt', 'contents of foofile'),
-            'realfile': ('barfile.txt', open('realfile').read()),
-            'typedfile': ('bazfile.bin', open('bazfile').read(), 'image/jpeg'),
-            'nonamefile': 'contents of nonamefile field',
-
-        Field names and filenames must be unicode.
-        """
-        if isinstance(value, tuple):
-            if len(value) == 3:
-                filename, data, content_type = value
-            else:
-                filename, data = value
-                content_type = guess_content_type(filename)
-        else:
-            filename = None
-            content_type = None
-            data = value
-
-        request_param = cls(fieldname, data, filename=filename)
-        request_param.make_multipart(content_type=content_type)
-
-        return request_param
-
-    def _render_part(self, name, value):
-        """
-        Overridable helper function to format a single header parameter.
-
-        :param name:
-            The name of the parameter, a string expected to be ASCII only.
-        :param value:
-            The value of the parameter, provided as a unicode string.
-        """
-        return format_header_param(name, value)
-
-    def _render_parts(self, header_parts):
-        """
-        Helper function to format and quote a single header.
-
-        Useful for single headers that are composed of multiple items. E.g.,
-        'Content-Disposition' fields.
-
-        :param header_parts:
-            A sequence of (k, v) typles or a :class:`dict` of (k, v) to format as
-            `k1="v1"; k2="v2"; ...`.
-        """
-        parts = []
-        iterable = header_parts
-        if isinstance(header_parts, dict):
-            iterable = header_parts.items()
-
-        for name, value in iterable:
-            if value:
-                parts.append(self._render_part(name, value))
-
-        return '; '.join(parts)
-
-    def render_headers(self):
-        """
-        Renders the headers for this request field.
-        """
-        lines = []
-
-        sort_keys = ['Content-Disposition', 'Content-Type', 'Content-Location']
-        for sort_key in sort_keys:
-            if self.headers.get(sort_key, False):
-                lines.append('%s: %s' % (sort_key, self.headers[sort_key]))
-
-        for header_name, header_value in self.headers.items():
-            if header_name not in sort_keys:
-                if header_value:
-                    lines.append('%s: %s' % (header_name, header_value))
-
-        lines.append('\r\n')
-        return '\r\n'.join(lines)
-
-    def make_multipart(self, content_disposition=None, content_type=None, content_location=None):
-        """
-        Makes this request field into a multipart request field.
-
-        This method overrides "Content-Disposition", "Content-Type" and
-        "Content-Location" headers to the request parameter.
-
-        :param content_type:
-            The 'Content-Type' of the request body.
-        :param content_location:
-            The 'Content-Location' of the request body.
-
-        """
-        self.headers['Content-Disposition'] = content_disposition or 'form-data'
-        self.headers['Content-Disposition'] += '; '.join(['', self._render_parts((('name', self._name), ('filename', self._filename)))])
-        self.headers['Content-Type'] = content_type
-        self.headers['Content-Location'] = content_location
diff --git a/bundle/requests/packages/urllib3/fields.pyc b/bundle/requests/packages/urllib3/fields.pyc
deleted file mode 100644
index 39b85ae..0000000
Binary files a/bundle/requests/packages/urllib3/fields.pyc and /dev/null differ
diff --git a/bundle/requests/packages/urllib3/filepost.py b/bundle/requests/packages/urllib3/filepost.py
deleted file mode 100644
index e8b30bd..0000000
--- a/bundle/requests/packages/urllib3/filepost.py
+++ /dev/null
@@ -1,100 +0,0 @@
-# urllib3/filepost.py
-# Copyright 2008-2013 Andrey Petrov and contributors (see CONTRIBUTORS.txt)
-#
-# This module is part of urllib3 and is released under
-# the MIT License: http://www.opensource.org/licenses/mit-license.php
-
-import codecs
-import mimetypes
-
-from uuid import uuid4
-from io import BytesIO
-
-from .packages import six
-from .packages.six import b
-from .fields import RequestField
-
-writer = codecs.lookup('utf-8')[3]
-
-
-def choose_boundary():
-    """
-    Our embarassingly-simple replacement for mimetools.choose_boundary.
-    """
-    return uuid4().hex
-
-
-def iter_field_objects(fields):
-    """
-    Iterate over fields.
-
-    Supports list of (k, v) tuples and dicts, and lists of
-    :class:`~urllib3.fields.RequestField`.
-
-    """
-    if isinstance(fields, dict):
-        i = six.iteritems(fields)
-    else:
-        i = iter(fields)
-
-    for field in i:
-      if isinstance(field, RequestField):
-        yield field
-      else:
-        yield RequestField.from_tuples(*field)
-
-
-def iter_fields(fields):
-    """
-    .. deprecated:: 1.6
-
-    Iterate over fields.
-
-    The addition of :class:`~urllib3.fields.RequestField` makes this function
-    obsolete. Instead, use :func:`iter_field_objects`, which returns
-    :class:`~urllib3.fields.RequestField` objects.
-
-    Supports list of (k, v) tuples and dicts.
-    """
-    if isinstance(fields, dict):
-        return ((k, v) for k, v in six.iteritems(fields))
-
-    return ((k, v) for k, v in fields)
-
-
-def encode_multipart_formdata(fields, boundary=None):
-    """
-    Encode a dictionary of ``fields`` using the multipart/form-data MIME format.
-
-    :param fields:
-        Dictionary of fields or list of (key, :class:`~urllib3.fields.RequestField`).
-
-    :param boundary:
-        If not specified, then a random boundary will be generated using
-        :func:`mimetools.choose_boundary`.
-    """
-    body = BytesIO()
-    if boundary is None:
-        boundary = choose_boundary()
-
-    for field in iter_field_objects(fields):
-        body.write(b('--%s\r\n' % (boundary)))
-
-        writer(body).write(field.render_headers())
-        data = field.data
-
-        if isinstance(data, int):
-            data = str(data)  # Backwards compatibility
-
-        if isinstance(data, six.text_type):
-            writer(body).write(data)
-        else:
-            body.write(data)
-
-        body.write(b'\r\n')
-
-    body.write(b('--%s--\r\n' % (boundary)))
-
-    content_type = str('multipart/form-data; boundary=%s' % boundary)
-
-    return body.getvalue(), content_type
diff --git a/bundle/requests/packages/urllib3/filepost.pyc b/bundle/requests/packages/urllib3/filepost.pyc
deleted file mode 100644
index e97ea7a..0000000
Binary files a/bundle/requests/packages/urllib3/filepost.pyc and /dev/null differ
diff --git a/bundle/requests/packages/urllib3/packages/__init__.py b/bundle/requests/packages/urllib3/packages/__init__.py
deleted file mode 100644
index 37e8351..0000000
--- a/bundle/requests/packages/urllib3/packages/__init__.py
+++ /dev/null
@@ -1,4 +0,0 @@
-from __future__ import absolute_import
-
-from . import ssl_match_hostname
-
diff --git a/bundle/requests/packages/urllib3/packages/__init__.pyc b/bundle/requests/packages/urllib3/packages/__init__.pyc
deleted file mode 100644
index 1d3a89e..0000000
Binary files a/bundle/requests/packages/urllib3/packages/__init__.pyc and /dev/null differ
diff --git a/bundle/requests/packages/urllib3/packages/ordered_dict.py b/bundle/requests/packages/urllib3/packages/ordered_dict.py
deleted file mode 100644
index 7f8ee15..0000000
--- a/bundle/requests/packages/urllib3/packages/ordered_dict.py
+++ /dev/null
@@ -1,260 +0,0 @@
-# Backport of OrderedDict() class that runs on Python 2.4, 2.5, 2.6, 2.7 and pypy.
-# Passes Python2.7's test suite and incorporates all the latest updates.
-# Copyright 2009 Raymond Hettinger, released under the MIT License.
-# http://code.activestate.com/recipes/576693/
-
-try:
-    from thread import get_ident as _get_ident
-except ImportError:
-    from dummy_thread import get_ident as _get_ident
-
-try:
-    from _abcoll import KeysView, ValuesView, ItemsView
-except ImportError:
-    pass
-
-
-class OrderedDict(dict):
-    'Dictionary that remembers insertion order'
-    # An inherited dict maps keys to values.
-    # The inherited dict provides __getitem__, __len__, __contains__, and get.
-    # The remaining methods are order-aware.
-    # Big-O running times for all methods are the same as for regular dictionaries.
-
-    # The internal self.__map dictionary maps keys to links in a doubly linked list.
-    # The circular doubly linked list starts and ends with a sentinel element.
-    # The sentinel element never gets deleted (this simplifies the algorithm).
-    # Each link is stored as a list of length three:  [PREV, NEXT, KEY].
-
-    def __init__(self, *args, **kwds):
-        '''Initialize an ordered dictionary.  Signature is the same as for
-        regular dictionaries, but keyword arguments are not recommended
-        because their insertion order is arbitrary.
-
-        '''
-        if len(args) > 1:
-            raise TypeError('expected at most 1 arguments, got %d' % len(args))
-        try:
-            self.__root
-        except AttributeError:
-            self.__root = root = []                     # sentinel node
-            root[:] = [root, root, None]
-            self.__map = {}
-        self.__update(*args, **kwds)
-
-    def __setitem__(self, key, value, dict_setitem=dict.__setitem__):
-        'od.__setitem__(i, y) <==> od[i]=y'
-        # Setting a new item creates a new link which goes at the end of the linked
-        # list, and the inherited dictionary is updated with the new key/value pair.
-        if key not in self:
-            root = self.__root
-            last = root[0]
-            last[1] = root[0] = self.__map[key] = [last, root, key]
-        dict_setitem(self, key, value)
-
-    def __delitem__(self, key, dict_delitem=dict.__delitem__):
-        'od.__delitem__(y) <==> del od[y]'
-        # Deleting an existing item uses self.__map to find the link which is
-        # then removed by updating the links in the predecessor and successor nodes.
-        dict_delitem(self, key)
-        link_prev, link_next, key = self.__map.pop(key)
-        link_prev[1] = link_next
-        link_next[0] = link_prev
-
-    def __iter__(self):
-        'od.__iter__() <==> iter(od)'
-        root = self.__root
-        curr = root[1]
-        while curr is not root:
-            yield curr[2]
-            curr = curr[1]
-
-    def __reversed__(self):
-        'od.__reversed__() <==> reversed(od)'
-        root = self.__root
-        curr = root[0]
-        while curr is not root:
-            yield curr[2]
-            curr = curr[0]
-
-    def clear(self):
-        'od.clear() -> None.  Remove all items from od.'
-        try:
-            for node in self.__map.itervalues():
-                del node[:]
-            root = self.__root
-            root[:] = [root, root, None]
-            self.__map.clear()
-        except AttributeError:
-            pass
-        dict.clear(self)
-
-    def popitem(self, last=True):
-        '''od.popitem() -> (k, v), return and remove a (key, value) pair.
-        Pairs are returned in LIFO order if last is true or FIFO order if false.
-
-        '''
-        if not self:
-            raise KeyError('dictionary is empty')
-        root = self.__root
-        if last:
-            link = root[0]
-            link_prev = link[0]
-            link_prev[1] = root
-            root[0] = link_prev
-        else:
-            link = root[1]
-            link_next = link[1]
-            root[1] = link_next
-            link_next[0] = root
-        key = link[2]
-        del self.__map[key]
-        value = dict.pop(self, key)
-        return key, value
-
-    # -- the following methods do not depend on the internal structure --
-
-    def keys(self):
-        'od.keys() -> list of keys in od'
-        return list(self)
-
-    def values(self):
-        'od.values() -> list of values in od'
-        return [self[key] for key in self]
-
-    def items(self):
-        'od.items() -> list of (key, value) pairs in od'
-        return [(key, self[key]) for key in self]
-
-    def iterkeys(self):
-        'od.iterkeys() -> an iterator over the keys in od'
-        return iter(self)
-
-    def itervalues(self):
-        'od.itervalues -> an iterator over the values in od'
-        for k in self:
-            yield self[k]
-
-    def iteritems(self):
-        'od.iteritems -> an iterator over the (key, value) items in od'
-        for k in self:
-            yield (k, self[k])
-
-    def update(*args, **kwds):
-        '''od.update(E, **F) -> None.  Update od from dict/iterable E and F.
-
-        If E is a dict instance, does:           for k in E: od[k] = E[k]
-        If E has a .keys() method, does:         for k in E.keys(): od[k] = E[k]
-        Or if E is an iterable of items, does:   for k, v in E: od[k] = v
-        In either case, this is followed by:     for k, v in F.items(): od[k] = v
-
-        '''
-        if len(args) > 2:
-            raise TypeError('update() takes at most 2 positional '
-                            'arguments (%d given)' % (len(args),))
-        elif not args:
-            raise TypeError('update() takes at least 1 argument (0 given)')
-        self = args[0]
-        # Make progressively weaker assumptions about "other"
-        other = ()
-        if len(args) == 2:
-            other = args[1]
-        if isinstance(other, dict):
-            for key in other:
-                self[key] = other[key]
-        elif hasattr(other, 'keys'):
-            for key in other.keys():
-                self[key] = other[key]
-        else:
-            for key, value in other:
-                self[key] = value
-        for key, value in kwds.items():
-            self[key] = value
-
-    __update = update  # let subclasses override update without breaking __init__
-
-    __marker = object()
-
-    def pop(self, key, default=__marker):
-        '''od.pop(k[,d]) -> v, remove specified key and return the corresponding value.
-        If key is not found, d is returned if given, otherwise KeyError is raised.
-
-        '''
-        if key in self:
-            result = self[key]
-            del self[key]
-            return result
-        if default is self.__marker:
-            raise KeyError(key)
-        return default
-
-    def setdefault(self, key, default=None):
-        'od.setdefault(k[,d]) -> od.get(k,d), also set od[k]=d if k not in od'
-        if key in self:
-            return self[key]
-        self[key] = default
-        return default
-
-    def __repr__(self, _repr_running={}):
-        'od.__repr__() <==> repr(od)'
-        call_key = id(self), _get_ident()
-        if call_key in _repr_running:
-            return '...'
-        _repr_running[call_key] = 1
-        try:
-            if not self:
-                return '%s()' % (self.__class__.__name__,)
-            return '%s(%r)' % (self.__class__.__name__, self.items())
-        finally:
-            del _repr_running[call_key]
-
-    def __reduce__(self):
-        'Return state information for pickling'
-        items = [[k, self[k]] for k in self]
-        inst_dict = vars(self).copy()
-        for k in vars(OrderedDict()):
-            inst_dict.pop(k, None)
-        if inst_dict:
-            return (self.__class__, (items,), inst_dict)
-        return self.__class__, (items,)
-
-    def copy(self):
-        'od.copy() -> a shallow copy of od'
-        return self.__class__(self)
-
-    @classmethod
-    def fromkeys(cls, iterable, value=None):
-        '''OD.fromkeys(S[, v]) -> New ordered dictionary with keys from S
-        and values equal to v (which defaults to None).
-
-        '''
-        d = cls()
-        for key in iterable:
-            d[key] = value
-        return d
-
-    def __eq__(self, other):
-        '''od.__eq__(y) <==> od==y.  Comparison to another OD is order-sensitive
-        while comparison to a regular mapping is order-insensitive.
-
-        '''
-        if isinstance(other, OrderedDict):
-            return len(self)==len(other) and self.items() == other.items()
-        return dict.__eq__(self, other)
-
-    def __ne__(self, other):
-        return not self == other
-
-    # -- the following methods are only used in Python 2.7 --
-
-    def viewkeys(self):
-        "od.viewkeys() -> a set-like object providing a view on od's keys"
-        return KeysView(self)
-
-    def viewvalues(self):
-        "od.viewvalues() -> an object providing a view on od's values"
-        return ValuesView(self)
-
-    def viewitems(self):
-        "od.viewitems() -> a set-like object providing a view on od's items"
-        return ItemsView(self)
diff --git a/bundle/requests/packages/urllib3/packages/ordered_dict.pyc b/bundle/requests/packages/urllib3/packages/ordered_dict.pyc
deleted file mode 100644
index cf509f1..0000000
Binary files a/bundle/requests/packages/urllib3/packages/ordered_dict.pyc and /dev/null differ
diff --git a/bundle/requests/packages/urllib3/packages/six.py b/bundle/requests/packages/urllib3/packages/six.py
deleted file mode 100644
index 27d8011..0000000
--- a/bundle/requests/packages/urllib3/packages/six.py
+++ /dev/null
@@ -1,385 +0,0 @@
-"""Utilities for writing code that runs on Python 2 and 3"""
-
-#Copyright (c) 2010-2011 Benjamin Peterson
-
-#Permission is hereby granted, free of charge, to any person obtaining a copy of
-#this software and associated documentation files (the "Software"), to deal in
-#the Software without restriction, including without limitation the rights to
-#use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-#the Software, and to permit persons to whom the Software is furnished to do so,
-#subject to the following conditions:
-
-#The above copyright notice and this permission notice shall be included in all
-#copies or substantial portions of the Software.
-
-#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-#FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-#COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-#IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-#CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-import operator
-import sys
-import types
-
-__author__ = "Benjamin Peterson <benjamin at python.org>"
-__version__ = "1.2.0"  # Revision 41c74fef2ded
-
-
-# True if we are running on Python 3.
-PY3 = sys.version_info[0] == 3
-
-if PY3:
-    string_types = str,
-    integer_types = int,
-    class_types = type,
-    text_type = str
-    binary_type = bytes
-
-    MAXSIZE = sys.maxsize
-else:
-    string_types = basestring,
-    integer_types = (int, long)
-    class_types = (type, types.ClassType)
-    text_type = unicode
-    binary_type = str
-
-    if sys.platform.startswith("java"):
-        # Jython always uses 32 bits.
-        MAXSIZE = int((1 << 31) - 1)
-    else:
-        # It's possible to have sizeof(long) != sizeof(Py_ssize_t).
-        class X(object):
-            def __len__(self):
-                return 1 << 31
-        try:
-            len(X())
-        except OverflowError:
-            # 32-bit
-            MAXSIZE = int((1 << 31) - 1)
-        else:
-            # 64-bit
-            MAXSIZE = int((1 << 63) - 1)
-            del X
-
-
-def _add_doc(func, doc):
-    """Add documentation to a function."""
-    func.__doc__ = doc
-
-
-def _import_module(name):
-    """Import module, returning the module after the last dot."""
-    __import__(name)
-    return sys.modules[name]
-
-
-class _LazyDescr(object):
-
-    def __init__(self, name):
-        self.name = name
-
-    def __get__(self, obj, tp):
-        result = self._resolve()
-        setattr(obj, self.name, result)
-        # This is a bit ugly, but it avoids running this again.
-        delattr(tp, self.name)
-        return result
-
-
-class MovedModule(_LazyDescr):
-
-    def __init__(self, name, old, new=None):
-        super(MovedModule, self).__init__(name)
-        if PY3:
-            if new is None:
-                new = name
-            self.mod = new
-        else:
-            self.mod = old
-
-    def _resolve(self):
-        return _import_module(self.mod)
-
-
-class MovedAttribute(_LazyDescr):
-
-    def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None):
-        super(MovedAttribute, self).__init__(name)
-        if PY3:
-            if new_mod is None:
-                new_mod = name
-            self.mod = new_mod
-            if new_attr is None:
-                if old_attr is None:
-                    new_attr = name
-                else:
-                    new_attr = old_attr
-            self.attr = new_attr
-        else:
-            self.mod = old_mod
-            if old_attr is None:
-                old_attr = name
-            self.attr = old_attr
-
-    def _resolve(self):
-        module = _import_module(self.mod)
-        return getattr(module, self.attr)
-
-
-
-class _MovedItems(types.ModuleType):
-    """Lazy loading of moved objects"""
-
-
-_moved_attributes = [
-    MovedAttribute("cStringIO", "cStringIO", "io", "StringIO"),
-    MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"),
-    MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"),
-    MovedAttribute("map", "itertools", "builtins", "imap", "map"),
-    MovedAttribute("reload_module", "__builtin__", "imp", "reload"),
-    MovedAttribute("reduce", "__builtin__", "functools"),
-    MovedAttribute("StringIO", "StringIO", "io"),
-    MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"),
-    MovedAttribute("zip", "itertools", "builtins", "izip", "zip"),
-
-    MovedModule("builtins", "__builtin__"),
-    MovedModule("configparser", "ConfigParser"),
-    MovedModule("copyreg", "copy_reg"),
-    MovedModule("http_cookiejar", "cookielib", "http.cookiejar"),
-    MovedModule("http_cookies", "Cookie", "http.cookies"),
-    MovedModule("html_entities", "htmlentitydefs", "html.entities"),
-    MovedModule("html_parser", "HTMLParser", "html.parser"),
-    MovedModule("http_client", "httplib", "http.client"),
-    MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"),
-    MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"),
-    MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"),
-    MovedModule("cPickle", "cPickle", "pickle"),
-    MovedModule("queue", "Queue"),
-    MovedModule("reprlib", "repr"),
-    MovedModule("socketserver", "SocketServer"),
-    MovedModule("tkinter", "Tkinter"),
-    MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"),
-    MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"),
-    MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"),
-    MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"),
-    MovedModule("tkinter_tix", "Tix", "tkinter.tix"),
-    MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"),
-    MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"),
-    MovedModule("tkinter_colorchooser", "tkColorChooser",
-                "tkinter.colorchooser"),
-    MovedModule("tkinter_commondialog", "tkCommonDialog",
-                "tkinter.commondialog"),
-    MovedModule("tkinter_tkfiledialog", "tkFileDialog", "tkinter.filedialog"),
-    MovedModule("tkinter_font", "tkFont", "tkinter.font"),
-    MovedModule("tkinter_messagebox", "tkMessageBox", "tkinter.messagebox"),
-    MovedModule("tkinter_tksimpledialog", "tkSimpleDialog",
-                "tkinter.simpledialog"),
-    MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"),
-    MovedModule("winreg", "_winreg"),
-]
-for attr in _moved_attributes:
-    setattr(_MovedItems, attr.name, attr)
-del attr
-
-moves = sys.modules[__name__ + ".moves"] = _MovedItems("moves")
-
-
-def add_move(move):
-    """Add an item to six.moves."""
-    setattr(_MovedItems, move.name, move)
-
-
-def remove_move(name):
-    """Remove item from six.moves."""
-    try:
-        delattr(_MovedItems, name)
-    except AttributeError:
-        try:
-            del moves.__dict__[name]
-        except KeyError:
-            raise AttributeError("no such move, %r" % (name,))
-
-
-if PY3:
-    _meth_func = "__func__"
-    _meth_self = "__self__"
-
-    _func_code = "__code__"
-    _func_defaults = "__defaults__"
-
-    _iterkeys = "keys"
-    _itervalues = "values"
-    _iteritems = "items"
-else:
-    _meth_func = "im_func"
-    _meth_self = "im_self"
-
-    _func_code = "func_code"
-    _func_defaults = "func_defaults"
-
-    _iterkeys = "iterkeys"
-    _itervalues = "itervalues"
-    _iteritems = "iteritems"
-
-
-try:
-    advance_iterator = next
-except NameError:
-    def advance_iterator(it):
-        return it.next()
-next = advance_iterator
-
-
-if PY3:
-    def get_unbound_function(unbound):
-        return unbound
-
-    Iterator = object
-
-    def callable(obj):
-        return any("__call__" in klass.__dict__ for klass in type(obj).__mro__)
-else:
-    def get_unbound_function(unbound):
-        return unbound.im_func
-
-    class Iterator(object):
-
-        def next(self):
-            return type(self).__next__(self)
-
-    callable = callable
-_add_doc(get_unbound_function,
-         """Get the function out of a possibly unbound function""")
-
-
-get_method_function = operator.attrgetter(_meth_func)
-get_method_self = operator.attrgetter(_meth_self)
-get_function_code = operator.attrgetter(_func_code)
-get_function_defaults = operator.attrgetter(_func_defaults)
-
-
-def iterkeys(d):
-    """Return an iterator over the keys of a dictionary."""
-    return iter(getattr(d, _iterkeys)())
-
-def itervalues(d):
-    """Return an iterator over the values of a dictionary."""
-    return iter(getattr(d, _itervalues)())
-
-def iteritems(d):
-    """Return an iterator over the (key, value) pairs of a dictionary."""
-    return iter(getattr(d, _iteritems)())
-
-
-if PY3:
-    def b(s):
-        return s.encode("latin-1")
-    def u(s):
-        return s
-    if sys.version_info[1] <= 1:
-        def int2byte(i):
-            return bytes((i,))
-    else:
-        # This is about 2x faster than the implementation above on 3.2+
-        int2byte = operator.methodcaller("to_bytes", 1, "big")
-    import io
-    StringIO = io.StringIO
-    BytesIO = io.BytesIO
-else:
-    def b(s):
-        return s
-    def u(s):
-        return unicode(s, "unicode_escape")
-    int2byte = chr
-    import StringIO
-    StringIO = BytesIO = StringIO.StringIO
-_add_doc(b, """Byte literal""")
-_add_doc(u, """Text literal""")
-
-
-if PY3:
-    import builtins
-    exec_ = getattr(builtins, "exec")
-
-
-    def reraise(tp, value, tb=None):
-        if value.__traceback__ is not tb:
-            raise value.with_traceback(tb)
-        raise value
-
-
-    print_ = getattr(builtins, "print")
-    del builtins
-
-else:
-    def exec_(code, globs=None, locs=None):
-        """Execute code in a namespace."""
-        if globs is None:
-            frame = sys._getframe(1)
-            globs = frame.f_globals
-            if locs is None:
-                locs = frame.f_locals
-            del frame
-        elif locs is None:
-            locs = globs
-        exec("""exec code in globs, locs""")
-
-
-    exec_("""def reraise(tp, value, tb=None):
-    raise tp, value, tb
-""")
-
-
-    def print_(*args, **kwargs):
-        """The new-style print function."""
-        fp = kwargs.pop("file", sys.stdout)
-        if fp is None:
-            return
-        def write(data):
-            if not isinstance(data, basestring):
-                data = str(data)
-            fp.write(data)
-        want_unicode = False
-        sep = kwargs.pop("sep", None)
-        if sep is not None:
-            if isinstance(sep, unicode):
-                want_unicode = True
-            elif not isinstance(sep, str):
-                raise TypeError("sep must be None or a string")
-        end = kwargs.pop("end", None)
-        if end is not None:
-            if isinstance(end, unicode):
-                want_unicode = True
-            elif not isinstance(end, str):
-                raise TypeError("end must be None or a string")
-        if kwargs:
-            raise TypeError("invalid keyword arguments to print()")
-        if not want_unicode:
-            for arg in args:
-                if isinstance(arg, unicode):
-                    want_unicode = True
-                    break
-        if want_unicode:
-            newline = unicode("\n")
-            space = unicode(" ")
-        else:
-            newline = "\n"
-            space = " "
-        if sep is None:
-            sep = space
-        if end is None:
-            end = newline
-        for i, arg in enumerate(args):
-            if i:
-                write(sep)
-            write(arg)
-        write(end)
-
-_add_doc(reraise, """Reraise an exception.""")
-
-
-def with_metaclass(meta, base=object):
-    """Create a base class with a metaclass."""
-    return meta("NewBase", (base,), {})
diff --git a/bundle/requests/packages/urllib3/packages/six.pyc b/bundle/requests/packages/urllib3/packages/six.pyc
deleted file mode 100644
index 9696a88..0000000
Binary files a/bundle/requests/packages/urllib3/packages/six.pyc and /dev/null differ
diff --git a/bundle/requests/packages/urllib3/packages/ssl_match_hostname/__init__.py b/bundle/requests/packages/urllib3/packages/ssl_match_hostname/__init__.py
deleted file mode 100644
index dd59a75..0000000
--- a/bundle/requests/packages/urllib3/packages/ssl_match_hostname/__init__.py
+++ /dev/null
@@ -1,13 +0,0 @@
-try:
-    # Python 3.2+
-    from ssl import CertificateError, match_hostname
-except ImportError:
-    try:
-        # Backport of the function from a pypi module
-        from backports.ssl_match_hostname import CertificateError, match_hostname
-    except ImportError:
-        # Our vendored copy
-        from ._implementation import CertificateError, match_hostname
-
-# Not needed, but documenting what we provide.
-__all__ = ('CertificateError', 'match_hostname')
diff --git a/bundle/requests/packages/urllib3/packages/ssl_match_hostname/__init__.pyc b/bundle/requests/packages/urllib3/packages/ssl_match_hostname/__init__.pyc
deleted file mode 100644
index c6efa2e..0000000
Binary files a/bundle/requests/packages/urllib3/packages/ssl_match_hostname/__init__.pyc and /dev/null differ
diff --git a/bundle/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.py b/bundle/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.py
deleted file mode 100644
index 52f4287..0000000
--- a/bundle/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.py
+++ /dev/null
@@ -1,105 +0,0 @@
-"""The match_hostname() function from Python 3.3.3, essential when using SSL."""
-
-# Note: This file is under the PSF license as the code comes from the python
-# stdlib.   http://docs.python.org/3/license.html
-
-import re
-
-__version__ = '3.4.0.2'
-
-class CertificateError(ValueError):
-    pass
-
-
-def _dnsname_match(dn, hostname, max_wildcards=1):
-    """Matching according to RFC 6125, section 6.4.3
-
-    http://tools.ietf.org/html/rfc6125#section-6.4.3
-    """
-    pats = []
-    if not dn:
-        return False
-
-    # Ported from python3-syntax:
-    # leftmost, *remainder = dn.split(r'.')
-    parts = dn.split(r'.')
-    leftmost = parts[0]
-    remainder = parts[1:]
-
-    wildcards = leftmost.count('*')
-    if wildcards > max_wildcards:
-        # Issue #17980: avoid denials of service by refusing more
-        # than one wildcard per fragment.  A survey of established
-        # policy among SSL implementations showed it to be a
-        # reasonable choice.
-        raise CertificateError(
-            "too many wildcards in certificate DNS name: " + repr(dn))
-
-    # speed up common case w/o wildcards
-    if not wildcards:
-        return dn.lower() == hostname.lower()
-
-    # RFC 6125, section 6.4.3, subitem 1.
-    # The client SHOULD NOT attempt to match a presented identifier in which
-    # the wildcard character comprises a label other than the left-most label.
-    if leftmost == '*':
-        # When '*' is a fragment by itself, it matches a non-empty dotless
-        # fragment.
-        pats.append('[^.]+')
-    elif leftmost.startswith('xn--') or hostname.startswith('xn--'):
-        # RFC 6125, section 6.4.3, subitem 3.
-        # The client SHOULD NOT attempt to match a presented identifier
-        # where the wildcard character is embedded within an A-label or
-        # U-label of an internationalized domain name.
-        pats.append(re.escape(leftmost))
-    else:
-        # Otherwise, '*' matches any dotless string, e.g. www*
-        pats.append(re.escape(leftmost).replace(r'\*', '[^.]*'))
-
-    # add the remaining fragments, ignore any wildcards
-    for frag in remainder:
-        pats.append(re.escape(frag))
-
-    pat = re.compile(r'\A' + r'\.'.join(pats) + r'\Z', re.IGNORECASE)
-    return pat.match(hostname)
-
-
-def match_hostname(cert, hostname):
-    """Verify that *cert* (in decoded format as returned by
-    SSLSocket.getpeercert()) matches the *hostname*.  RFC 2818 and RFC 6125
-    rules are followed, but IP addresses are not accepted for *hostname*.
-
-    CertificateError is raised on failure. On success, the function
-    returns nothing.
-    """
-    if not cert:
-        raise ValueError("empty or no certificate")
-    dnsnames = []
-    san = cert.get('subjectAltName', ())
-    for key, value in san:
-        if key == 'DNS':
-            if _dnsname_match(value, hostname):
-                return
-            dnsnames.append(value)
-    if not dnsnames:
-        # The subject is only checked when there is no dNSName entry
-        # in subjectAltName
-        for sub in cert.get('subject', ()):
-            for key, value in sub:
-                # XXX according to RFC 2818, the most specific Common Name
-                # must be used.
-                if key == 'commonName':
-                    if _dnsname_match(value, hostname):
-                        return
-                    dnsnames.append(value)
-    if len(dnsnames) > 1:
-        raise CertificateError("hostname %r "
-            "doesn't match either of %s"
-            % (hostname, ', '.join(map(repr, dnsnames))))
-    elif len(dnsnames) == 1:
-        raise CertificateError("hostname %r "
-            "doesn't match %r"
-            % (hostname, dnsnames[0]))
-    else:
-        raise CertificateError("no appropriate commonName or "
-            "subjectAltName fields were found")
diff --git a/bundle/requests/packages/urllib3/poolmanager.py b/bundle/requests/packages/urllib3/poolmanager.py
deleted file mode 100644
index f18ff2b..0000000
--- a/bundle/requests/packages/urllib3/poolmanager.py
+++ /dev/null
@@ -1,258 +0,0 @@
-# urllib3/poolmanager.py
-# Copyright 2008-2014 Andrey Petrov and contributors (see CONTRIBUTORS.txt)
-#
-# This module is part of urllib3 and is released under
-# the MIT License: http://www.opensource.org/licenses/mit-license.php
-
-import logging
-
-try:  # Python 3
-    from urllib.parse import urljoin
-except ImportError:
-    from urlparse import urljoin
-
-from ._collections import RecentlyUsedContainer
-from .connectionpool import HTTPConnectionPool, HTTPSConnectionPool
-from .connectionpool import port_by_scheme
-from .request import RequestMethods
-from .util import parse_url
-
-
-__all__ = ['PoolManager', 'ProxyManager', 'proxy_from_url']
-
-
-pool_classes_by_scheme = {
-    'http': HTTPConnectionPool,
-    'https': HTTPSConnectionPool,
-}
-
-log = logging.getLogger(__name__)
-
-SSL_KEYWORDS = ('key_file', 'cert_file', 'cert_reqs', 'ca_certs',
-                'ssl_version')
-
-
-class PoolManager(RequestMethods):
-    """
-    Allows for arbitrary requests while transparently keeping track of
-    necessary connection pools for you.
-
-    :param num_pools:
-        Number of connection pools to cache before discarding the least
-        recently used pool.
-
-    :param headers:
-        Headers to include with all requests, unless other headers are given
-        explicitly.
-
-    :param \**connection_pool_kw:
-        Additional parameters are used to create fresh
-        :class:`urllib3.connectionpool.ConnectionPool` instances.
-
-    Example: ::
-
-        >>> manager = PoolManager(num_pools=2)
-        >>> r = manager.request('GET', 'http://google.com/')
-        >>> r = manager.request('GET', 'http://google.com/mail')
-        >>> r = manager.request('GET', 'http://yahoo.com/')
-        >>> len(manager.pools)
-        2
-
-    """
-
-    proxy = None
-
-    def __init__(self, num_pools=10, headers=None, **connection_pool_kw):
-        RequestMethods.__init__(self, headers)
-        self.connection_pool_kw = connection_pool_kw
-        self.pools = RecentlyUsedContainer(num_pools,
-                                           dispose_func=lambda p: p.close())
-
-    def _new_pool(self, scheme, host, port):
-        """
-        Create a new :class:`ConnectionPool` based on host, port and scheme.
-
-        This method is used to actually create the connection pools handed out
-        by :meth:`connection_from_url` and companion methods. It is intended
-        to be overridden for customization.
-        """
-        pool_cls = pool_classes_by_scheme[scheme]
-        kwargs = self.connection_pool_kw
-        if scheme == 'http':
-            kwargs = self.connection_pool_kw.copy()
-            for kw in SSL_KEYWORDS:
-                kwargs.pop(kw, None)
-
-        return pool_cls(host, port, **kwargs)
-
-    def clear(self):
-        """
-        Empty our store of pools and direct them all to close.
-
-        This will not affect in-flight connections, but they will not be
-        re-used after completion.
-        """
-        self.pools.clear()
-
-    def connection_from_host(self, host, port=None, scheme='http'):
-        """
-        Get a :class:`ConnectionPool` based on the host, port, and scheme.
-
-        If ``port`` isn't given, it will be derived from the ``scheme`` using
-        ``urllib3.connectionpool.port_by_scheme``.
-        """
-
-        scheme = scheme or 'http'
-
-        port = port or port_by_scheme.get(scheme, 80)
-
-        pool_key = (scheme, host, port)
-
-        with self.pools.lock:
-            # If the scheme, host, or port doesn't match existing open
-            # connections, open a new ConnectionPool.
-            pool = self.pools.get(pool_key)
-            if pool:
-                return pool
-
-            # Make a fresh ConnectionPool of the desired type
-            pool = self._new_pool(scheme, host, port)
-            self.pools[pool_key] = pool
-        return pool
-
-    def connection_from_url(self, url):
-        """
-        Similar to :func:`urllib3.connectionpool.connection_from_url` but
-        doesn't pass any additional parameters to the
-        :class:`urllib3.connectionpool.ConnectionPool` constructor.
-
-        Additional parameters are taken from the :class:`.PoolManager`
-        constructor.
-        """
-        u = parse_url(url)
-        return self.connection_from_host(u.host, port=u.port, scheme=u.scheme)
-
-    def urlopen(self, method, url, redirect=True, **kw):
-        """
-        Same as :meth:`urllib3.connectionpool.HTTPConnectionPool.urlopen`
-        with custom cross-host redirect logic and only sends the request-uri
-        portion of the ``url``.
-
-        The given ``url`` parameter must be absolute, such that an appropriate
-        :class:`urllib3.connectionpool.ConnectionPool` can be chosen for it.
-        """
-        u = parse_url(url)
-        conn = self.connection_from_host(u.host, port=u.port, scheme=u.scheme)
-
-        kw['assert_same_host'] = False
-        kw['redirect'] = False
-        if 'headers' not in kw:
-            kw['headers'] = self.headers
-
-        if self.proxy is not None and u.scheme == "http":
-            response = conn.urlopen(method, url, **kw)
-        else:
-            response = conn.urlopen(method, u.request_uri, **kw)
-
-        redirect_location = redirect and response.get_redirect_location()
-        if not redirect_location:
-            return response
-
-        # Support relative URLs for redirecting.
-        redirect_location = urljoin(url, redirect_location)
-
-        # RFC 2616, Section 10.3.4
-        if response.status == 303:
-            method = 'GET'
-
-        log.info("Redirecting %s -> %s" % (url, redirect_location))
-        kw['retries'] = kw.get('retries', 3) - 1  # Persist retries countdown
-        kw['redirect'] = redirect
-        return self.urlopen(method, redirect_location, **kw)
-
-
-class ProxyManager(PoolManager):
-    """
-    Behaves just like :class:`PoolManager`, but sends all requests through
-    the defined proxy, using the CONNECT method for HTTPS URLs.
-
-    :param proxy_url:
-        The URL of the proxy to be used.
-
-    :param proxy_headers:
-        A dictionary contaning headers that will be sent to the proxy. In case
-        of HTTP they are being sent with each request, while in the
-        HTTPS/CONNECT case they are sent only once. Could be used for proxy
-        authentication.
-
-    Example:
-        >>> proxy = urllib3.ProxyManager('http://localhost:3128/')
-        >>> r1 = proxy.request('GET', 'http://google.com/')
-        >>> r2 = proxy.request('GET', 'http://httpbin.org/')
-        >>> len(proxy.pools)
-        1
-        >>> r3 = proxy.request('GET', 'https://httpbin.org/')
-        >>> r4 = proxy.request('GET', 'https://twitter.com/')
-        >>> len(proxy.pools)
-        3
-
-    """
-
-    def __init__(self, proxy_url, num_pools=10, headers=None,
-                 proxy_headers=None, **connection_pool_kw):
-
-        if isinstance(proxy_url, HTTPConnectionPool):
-            proxy_url = '%s://%s:%i' % (proxy_url.scheme, proxy_url.host,
-                                        proxy_url.port)
-        proxy = parse_url(proxy_url)
-        if not proxy.port:
-            port = port_by_scheme.get(proxy.scheme, 80)
-            proxy = proxy._replace(port=port)
-        self.proxy = proxy
-        self.proxy_headers = proxy_headers or {}
-        assert self.proxy.scheme in ("http", "https"), \
-            'Not supported proxy scheme %s' % self.proxy.scheme
-        connection_pool_kw['_proxy'] = self.proxy
-        connection_pool_kw['_proxy_headers'] = self.proxy_headers
-        super(ProxyManager, self).__init__(
-            num_pools, headers, **connection_pool_kw)
-
-    def connection_from_host(self, host, port=None, scheme='http'):
-        if scheme == "https":
-            return super(ProxyManager, self).connection_from_host(
-                host, port, scheme)
-
-        return super(ProxyManager, self).connection_from_host(
-            self.proxy.host, self.proxy.port, self.proxy.scheme)
-
-    def _set_proxy_headers(self, url, headers=None):
-        """
-        Sets headers needed by proxies: specifically, the Accept and Host
-        headers. Only sets headers not provided by the user.
-        """
-        headers_ = {'Accept': '*/*'}
-
-        netloc = parse_url(url).netloc
-        if netloc:
-            headers_['Host'] = netloc
-
-        if headers:
-            headers_.update(headers)
-        return headers_
-
-    def urlopen(self, method, url, redirect=True, **kw):
-        "Same as HTTP(S)ConnectionPool.urlopen, ``url`` must be absolute."
-        u = parse_url(url)
-
-        if u.scheme == "http":
-            # For proxied HTTPS requests, httplib sets the necessary headers
-            # on the CONNECT to the proxy. For HTTP, we'll definitely
-            # need to set 'Host' at the very least.
-            kw['headers'] = self._set_proxy_headers(url, kw.get('headers',
-                                                                self.headers))
-
-        return super(ProxyManager, self).urlopen(method, url, redirect, **kw)
-
-
-def proxy_from_url(url, **kw):
-    return ProxyManager(proxy_url=url, **kw)
diff --git a/bundle/requests/packages/urllib3/poolmanager.pyc b/bundle/requests/packages/urllib3/poolmanager.pyc
deleted file mode 100644
index 37305f4..0000000
Binary files a/bundle/requests/packages/urllib3/poolmanager.pyc and /dev/null differ
diff --git a/bundle/requests/packages/urllib3/request.py b/bundle/requests/packages/urllib3/request.py
deleted file mode 100644
index 2a92cc2..0000000
--- a/bundle/requests/packages/urllib3/request.py
+++ /dev/null
@@ -1,141 +0,0 @@
-# urllib3/request.py
-# Copyright 2008-2013 Andrey Petrov and contributors (see CONTRIBUTORS.txt)
-#
-# This module is part of urllib3 and is released under
-# the MIT License: http://www.opensource.org/licenses/mit-license.php
-
-try:
-    from urllib.parse import urlencode
-except ImportError:
-    from urllib import urlencode
-
-from .filepost import encode_multipart_formdata
-
-
-__all__ = ['RequestMethods']
-
-
-class RequestMethods(object):
-    """
-    Convenience mixin for classes who implement a :meth:`urlopen` method, such
-    as :class:`~urllib3.connectionpool.HTTPConnectionPool` and
-    :class:`~urllib3.poolmanager.PoolManager`.
-
-    Provides behavior for making common types of HTTP request methods and
-    decides which type of request field encoding to use.
-
-    Specifically,
-
-    :meth:`.request_encode_url` is for sending requests whose fields are encoded
-    in the URL (such as GET, HEAD, DELETE).
-
-    :meth:`.request_encode_body` is for sending requests whose fields are
-    encoded in the *body* of the request using multipart or www-form-urlencoded
-    (such as for POST, PUT, PATCH).
-
-    :meth:`.request` is for making any kind of request, it will look up the
-    appropriate encoding format and use one of the above two methods to make
-    the request.
-
-    Initializer parameters:
-
-    :param headers:
-        Headers to include with all requests, unless other headers are given
-        explicitly.
-    """
-
-    _encode_url_methods = set(['DELETE', 'GET', 'HEAD', 'OPTIONS'])
-
-    def __init__(self, headers=None):
-        self.headers = headers or {}
-
-    def urlopen(self, method, url, body=None, headers=None,
-                encode_multipart=True, multipart_boundary=None,
-                **kw): # Abstract
-        raise NotImplemented("Classes extending RequestMethods must implement "
-                             "their own ``urlopen`` method.")
-
-    def request(self, method, url, fields=None, headers=None, **urlopen_kw):
-        """
-        Make a request using :meth:`urlopen` with the appropriate encoding of
-        ``fields`` based on the ``method`` used.
-
-        This is a convenience method that requires the least amount of manual
-        effort. It can be used in most situations, while still having the option
-        to drop down to more specific methods when necessary, such as
-        :meth:`request_encode_url`, :meth:`request_encode_body`,
-        or even the lowest level :meth:`urlopen`.
-        """
-        method = method.upper()
-
-        if method in self._encode_url_methods:
-            return self.request_encode_url(method, url, fields=fields,
-                                            headers=headers,
-                                            **urlopen_kw)
-        else:
-            return self.request_encode_body(method, url, fields=fields,
-                                             headers=headers,
-                                             **urlopen_kw)
-
-    def request_encode_url(self, method, url, fields=None, **urlopen_kw):
-        """
-        Make a request using :meth:`urlopen` with the ``fields`` encoded in
-        the url. This is useful for request methods like GET, HEAD, DELETE, etc.
-        """
-        if fields:
-            url += '?' + urlencode(fields)
-        return self.urlopen(method, url, **urlopen_kw)
-
-    def request_encode_body(self, method, url, fields=None, headers=None,
-                            encode_multipart=True, multipart_boundary=None,
-                            **urlopen_kw):
-        """
-        Make a request using :meth:`urlopen` with the ``fields`` encoded in
-        the body. This is useful for request methods like POST, PUT, PATCH, etc.
-
-        When ``encode_multipart=True`` (default), then
-        :meth:`urllib3.filepost.encode_multipart_formdata` is used to encode the
-        payload with the appropriate content type. Otherwise
-        :meth:`urllib.urlencode` is used with the
-        'application/x-www-form-urlencoded' content type.
-
-        Multipart encoding must be used when posting files, and it's reasonably
-        safe to use it in other times too. However, it may break request signing,
-        such as with OAuth.
-
-        Supports an optional ``fields`` parameter of key/value strings AND
-        key/filetuple. A filetuple is a (filename, data, MIME type) tuple where
-        the MIME type is optional. For example: ::
-
-            fields = {
-                'foo': 'bar',
-                'fakefile': ('foofile.txt', 'contents of foofile'),
-                'realfile': ('barfile.txt', open('realfile').read()),
-                'typedfile': ('bazfile.bin', open('bazfile').read(),
-                              'image/jpeg'),
-                'nonamefile': 'contents of nonamefile field',
-            }
-
-        When uploading a file, providing a filename (the first parameter of the
-        tuple) is optional but recommended to best mimick behavior of browsers.
-
-        Note that if ``headers`` are supplied, the 'Content-Type' header will be
-        overwritten because it depends on the dynamic random boundary string
-        which is used to compose the body of the request. The random boundary
-        string can be explicitly set with the ``multipart_boundary`` parameter.
-        """
-        if encode_multipart:
-            body, content_type = encode_multipart_formdata(fields or {},
-                                    boundary=multipart_boundary)
-        else:
-            body, content_type = (urlencode(fields or {}),
-                                    'application/x-www-form-urlencoded')
-
-        if headers is None:
-            headers = self.headers
-
-        headers_ = {'Content-Type': content_type}
-        headers_.update(headers)
-
-        return self.urlopen(method, url, body=body, headers=headers_,
-                            **urlopen_kw)
diff --git a/bundle/requests/packages/urllib3/request.pyc b/bundle/requests/packages/urllib3/request.pyc
deleted file mode 100644
index d36026f..0000000
Binary files a/bundle/requests/packages/urllib3/request.pyc and /dev/null differ
diff --git a/bundle/requests/packages/urllib3/response.py b/bundle/requests/packages/urllib3/response.py
deleted file mode 100644
index db44182..0000000
--- a/bundle/requests/packages/urllib3/response.py
+++ /dev/null
@@ -1,308 +0,0 @@
-# urllib3/response.py
-# Copyright 2008-2013 Andrey Petrov and contributors (see CONTRIBUTORS.txt)
-#
-# This module is part of urllib3 and is released under
-# the MIT License: http://www.opensource.org/licenses/mit-license.php
-
-
-import logging
-import zlib
-import io
-
-from ._collections import HTTPHeaderDict
-from .exceptions import DecodeError
-from .packages.six import string_types as basestring, binary_type
-from .util import is_fp_closed
-
-
-log = logging.getLogger(__name__)
-
-
-class DeflateDecoder(object):
-
-    def __init__(self):
-        self._first_try = True
-        self._data = binary_type()
-        self._obj = zlib.decompressobj()
-
-    def __getattr__(self, name):
-        return getattr(self._obj, name)
-
-    def decompress(self, data):
-        if not self._first_try:
-            return self._obj.decompress(data)
-
-        self._data += data
-        try:
-            return self._obj.decompress(data)
-        except zlib.error:
-            self._first_try = False
-            self._obj = zlib.decompressobj(-zlib.MAX_WBITS)
-            try:
-                return self.decompress(self._data)
-            finally:
-                self._data = None
-
-
-def _get_decoder(mode):
-    if mode == 'gzip':
-        return zlib.decompressobj(16 + zlib.MAX_WBITS)
-
-    return DeflateDecoder()
-
-
-class HTTPResponse(io.IOBase):
-    """
-    HTTP Response container.
-
-    Backwards-compatible to httplib's HTTPResponse but the response ``body`` is
-    loaded and decoded on-demand when the ``data`` property is accessed.
-
-    Extra parameters for behaviour not present in httplib.HTTPResponse:
-
-    :param preload_content:
-        If True, the response's body will be preloaded during construction.
-
-    :param decode_content:
-        If True, attempts to decode specific content-encoding's based on headers
-        (like 'gzip' and 'deflate') will be skipped and raw data will be used
-        instead.
-
-    :param original_response:
-        When this HTTPResponse wrapper is generated from an httplib.HTTPResponse
-        object, it's convenient to include the original for debug purposes. It's
-        otherwise unused.
-    """
-
-    CONTENT_DECODERS = ['gzip', 'deflate']
-    REDIRECT_STATUSES = [301, 302, 303, 307, 308]
-
-    def __init__(self, body='', headers=None, status=0, version=0, reason=None,
-                 strict=0, preload_content=True, decode_content=True,
-                 original_response=None, pool=None, connection=None):
-
-        self.headers = HTTPHeaderDict()
-        if headers:
-            self.headers.update(headers)
-        self.status = status
-        self.version = version
-        self.reason = reason
-        self.strict = strict
-        self.decode_content = decode_content
-
-        self._decoder = None
-        self._body = body if body and isinstance(body, basestring) else None
-        self._fp = None
-        self._original_response = original_response
-        self._fp_bytes_read = 0
-
-        self._pool = pool
-        self._connection = connection
-
-        if hasattr(body, 'read'):
-            self._fp = body
-
-        if preload_content and not self._body:
-            self._body = self.read(decode_content=decode_content)
-
-    def get_redirect_location(self):
-        """
-        Should we redirect and where to?
-
-        :returns: Truthy redirect location string if we got a redirect status
-            code and valid location. ``None`` if redirect status and no
-            location. ``False`` if not a redirect status code.
-        """
-        if self.status in self.REDIRECT_STATUSES:
-            return self.headers.get('location')
-
-        return False
-
-    def release_conn(self):
-        if not self._pool or not self._connection:
-            return
-
-        self._pool._put_conn(self._connection)
-        self._connection = None
-
-    @property
-    def data(self):
-        # For backwords-compat with earlier urllib3 0.4 and earlier.
-        if self._body:
-            return self._body
-
-        if self._fp:
-            return self.read(cache_content=True)
-
-    def tell(self):
-        """
-        Obtain the number of bytes pulled over the wire so far. May differ from
-        the amount of content returned by :meth:``HTTPResponse.read`` if bytes
-        are encoded on the wire (e.g, compressed).
-        """
-        return self._fp_bytes_read
-
-    def read(self, amt=None, decode_content=None, cache_content=False):
-        """
-        Similar to :meth:`httplib.HTTPResponse.read`, but with two additional
-        parameters: ``decode_content`` and ``cache_content``.
-
-        :param amt:
-            How much of the content to read. If specified, caching is skipped
-            because it doesn't make sense to cache partial content as the full
-            response.
-
-        :param decode_content:
-            If True, will attempt to decode the body based on the
-            'content-encoding' header.
-
-        :param cache_content:
-            If True, will save the returned data such that the same result is
-            returned despite of the state of the underlying file object. This
-            is useful if you want the ``.data`` property to continue working
-            after having ``.read()`` the file object. (Overridden if ``amt`` is
-            set.)
-        """
-        # Note: content-encoding value should be case-insensitive, per RFC 2616
-        # Section 3.5
-        content_encoding = self.headers.get('content-encoding', '').lower()
-        if self._decoder is None:
-            if content_encoding in self.CONTENT_DECODERS:
-                self._decoder = _get_decoder(content_encoding)
-        if decode_content is None:
-            decode_content = self.decode_content
-
-        if self._fp is None:
-            return
-
-        flush_decoder = False
-
-        try:
-            if amt is None:
-                # cStringIO doesn't like amt=None
-                data = self._fp.read()
-                flush_decoder = True
-            else:
-                cache_content = False
-                data = self._fp.read(amt)
-                if amt != 0 and not data:  # Platform-specific: Buggy versions of Python.
-                    # Close the connection when no data is returned
-                    #
-                    # This is redundant to what httplib/http.client _should_
-                    # already do.  However, versions of python released before
-                    # December 15, 2012 (http://bugs.python.org/issue16298) do not
-                    # properly close the connection in all cases. There is no harm
-                    # in redundantly calling close.
-                    self._fp.close()
-                    flush_decoder = True
-
-            self._fp_bytes_read += len(data)
-
-            try:
-                if decode_content and self._decoder:
-                    data = self._decoder.decompress(data)
-            except (IOError, zlib.error) as e:
-                raise DecodeError(
-                    "Received response with content-encoding: %s, but "
-                    "failed to decode it." % content_encoding,
-                    e)
-
-            if flush_decoder and decode_content and self._decoder:
-                buf = self._decoder.decompress(binary_type())
-                data += buf + self._decoder.flush()
-
-            if cache_content:
-                self._body = data
-
-            return data
-
-        finally:
-            if self._original_response and self._original_response.isclosed():
-                self.release_conn()
-
-    def stream(self, amt=2**16, decode_content=None):
-        """
-        A generator wrapper for the read() method. A call will block until
-        ``amt`` bytes have been read from the connection or until the
-        connection is closed.
-
-        :param amt:
-            How much of the content to read. The generator will return up to
-            much data per iteration, but may return less. This is particularly
-            likely when using compressed data. However, the empty string will
-            never be returned.
-
-        :param decode_content:
-            If True, will attempt to decode the body based on the
-            'content-encoding' header.
-        """
-        while not is_fp_closed(self._fp):
-            data = self.read(amt=amt, decode_content=decode_content)
-
-            if data:
-                yield data
-
-
-    @classmethod
-    def from_httplib(ResponseCls, r, **response_kw):
-        """
-        Given an :class:`httplib.HTTPResponse` instance ``r``, return a
-        corresponding :class:`urllib3.response.HTTPResponse` object.
-
-        Remaining parameters are passed to the HTTPResponse constructor, along
-        with ``original_response=r``.
-        """
-
-        headers = HTTPHeaderDict()
-        for k, v in r.getheaders():
-            headers.add(k, v)
-
-        # HTTPResponse objects in Python 3 don't have a .strict attribute
-        strict = getattr(r, 'strict', 0)
-        return ResponseCls(body=r,
-                           headers=headers,
-                           status=r.status,
-                           version=r.version,
-                           reason=r.reason,
-                           strict=strict,
-                           original_response=r,
-                           **response_kw)
-
-    # Backwards-compatibility methods for httplib.HTTPResponse
-    def getheaders(self):
-        return self.headers
-
-    def getheader(self, name, default=None):
-        return self.headers.get(name, default)
-
-    # Overrides from io.IOBase
-    def close(self):
-        if not self.closed:
-            self._fp.close()
-
-    @property
-    def closed(self):
-        if self._fp is None:
-            return True
-        elif hasattr(self._fp, 'closed'):
-            return self._fp.closed
-        elif hasattr(self._fp, 'isclosed'):  # Python 2
-            return self._fp.isclosed()
-        else:
-            return True
-
-    def fileno(self):
-        if self._fp is None:
-            raise IOError("HTTPResponse has no file to get a fileno from")
-        elif hasattr(self._fp, "fileno"):
-            return self._fp.fileno()
-        else:
-            raise IOError("The file-like object  this HTTPResponse is wrapped "
-                          "around has no file descriptor")
-
-    def flush(self):
-        if self._fp is not None and hasattr(self._fp, 'flush'):
-            return self._fp.flush()
-
-    def readable(self):
-        return True
diff --git a/bundle/requests/packages/urllib3/response.pyc b/bundle/requests/packages/urllib3/response.pyc
deleted file mode 100644
index 597a106..0000000
Binary files a/bundle/requests/packages/urllib3/response.pyc and /dev/null differ
diff --git a/bundle/requests/packages/urllib3/util/__init__.py b/bundle/requests/packages/urllib3/util/__init__.py
deleted file mode 100644
index a40185e..0000000
--- a/bundle/requests/packages/urllib3/util/__init__.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# urllib3/util/__init__.py
-# Copyright 2008-2014 Andrey Petrov and contributors (see CONTRIBUTORS.txt)
-#
-# This module is part of urllib3 and is released under
-# the MIT License: http://www.opensource.org/licenses/mit-license.php
-
-from .connection import is_connection_dropped
-from .request import make_headers
-from .response import is_fp_closed
-from .ssl_ import (
-    SSLContext,
-    HAS_SNI,
-    assert_fingerprint,
-    resolve_cert_reqs,
-    resolve_ssl_version,
-    ssl_wrap_socket,
-)
-from .timeout import (
-    current_time,
-    Timeout,
-)
-from .url import (
-    get_host,
-    parse_url,
-    split_first,
-    Url,
-)
diff --git a/bundle/requests/packages/urllib3/util/__init__.pyc b/bundle/requests/packages/urllib3/util/__init__.pyc
deleted file mode 100644
index ac103d8..0000000
Binary files a/bundle/requests/packages/urllib3/util/__init__.pyc and /dev/null differ
diff --git a/bundle/requests/packages/urllib3/util/connection.py b/bundle/requests/packages/urllib3/util/connection.py
deleted file mode 100644
index 8deeab5..0000000
--- a/bundle/requests/packages/urllib3/util/connection.py
+++ /dev/null
@@ -1,45 +0,0 @@
-from socket import error as SocketError
-try:
-    from select import poll, POLLIN
-except ImportError:  # `poll` doesn't exist on OSX and other platforms
-    poll = False
-    try:
-        from select import select
-    except ImportError:  # `select` doesn't exist on AppEngine.
-        select = False
-
-def is_connection_dropped(conn):  # Platform-specific
-    """
-    Returns True if the connection is dropped and should be closed.
-
-    :param conn:
-        :class:`httplib.HTTPConnection` object.
-
-    Note: For platforms like AppEngine, this will always return ``False`` to
-    let the platform handle connection recycling transparently for us.
-    """
-    sock = getattr(conn, 'sock', False)
-    if sock is False:  # Platform-specific: AppEngine
-        return False
-    if sock is None:  # Connection already closed (such as by httplib).
-        return False
-
-    if not poll:
-        if not select:  # Platform-specific: AppEngine
-            return False
-
-        try:
-            return select([sock], [], [], 0.0)[0]
-        except SocketError:
-            return True
-
-    # This version is better on platforms that support it.
-    p = poll()
-    p.register(sock, POLLIN)
-    for (fno, ev) in p.poll(0.0):
-        if fno == sock.fileno():
-            # Either data is buffered (bad), or the connection is dropped.
-            return True
-
-
-
diff --git a/bundle/requests/packages/urllib3/util/connection.pyc b/bundle/requests/packages/urllib3/util/connection.pyc
deleted file mode 100644
index 2af7164..0000000
Binary files a/bundle/requests/packages/urllib3/util/connection.pyc and /dev/null differ
diff --git a/bundle/requests/packages/urllib3/util/request.py b/bundle/requests/packages/urllib3/util/request.py
deleted file mode 100644
index d48d651..0000000
--- a/bundle/requests/packages/urllib3/util/request.py
+++ /dev/null
@@ -1,68 +0,0 @@
-from base64 import b64encode
-
-from ..packages import six
-
-
-ACCEPT_ENCODING = 'gzip,deflate'
-
-
-def make_headers(keep_alive=None, accept_encoding=None, user_agent=None,
-                 basic_auth=None, proxy_basic_auth=None):
-    """
-    Shortcuts for generating request headers.
-
-    :param keep_alive:
-        If ``True``, adds 'connection: keep-alive' header.
-
-    :param accept_encoding:
-        Can be a boolean, list, or string.
-        ``True`` translates to 'gzip,deflate'.
-        List will get joined by comma.
-        String will be used as provided.
-
-    :param user_agent:
-        String representing the user-agent you want, such as
-        "python-urllib3/0.6"
-
-    :param basic_auth:
-        Colon-separated username:password string for 'authorization: basic ...'
-        auth header.
-
-    :param proxy_basic_auth:
-        Colon-separated username:password string for 'proxy-authorization: basic ...'
-        auth header.
-
-    Example: ::
-
-        >>> make_headers(keep_alive=True, user_agent="Batman/1.0")
-        {'connection': 'keep-alive', 'user-agent': 'Batman/1.0'}
-        >>> make_headers(accept_encoding=True)
-        {'accept-encoding': 'gzip,deflate'}
-    """
-    headers = {}
-    if accept_encoding:
-        if isinstance(accept_encoding, str):
-            pass
-        elif isinstance(accept_encoding, list):
-            accept_encoding = ','.join(accept_encoding)
-        else:
-            accept_encoding = ACCEPT_ENCODING
-        headers['accept-encoding'] = accept_encoding
-
-    if user_agent:
-        headers['user-agent'] = user_agent
-
-    if keep_alive:
-        headers['connection'] = 'keep-alive'
-
-    if basic_auth:
-        headers['authorization'] = 'Basic ' + \
-            b64encode(six.b(basic_auth)).decode('utf-8')
-
-    if proxy_basic_auth:
-        headers['proxy-authorization'] = 'Basic ' + \
-            b64encode(six.b(proxy_basic_auth)).decode('utf-8')
-
-    return headers
-
-
diff --git a/bundle/requests/packages/urllib3/util/request.pyc b/bundle/requests/packages/urllib3/util/request.pyc
deleted file mode 100644
index ef40864..0000000
Binary files a/bundle/requests/packages/urllib3/util/request.pyc and /dev/null differ
diff --git a/bundle/requests/packages/urllib3/util/response.py b/bundle/requests/packages/urllib3/util/response.py
deleted file mode 100644
index d0325bc..0000000
--- a/bundle/requests/packages/urllib3/util/response.py
+++ /dev/null
@@ -1,13 +0,0 @@
-def is_fp_closed(obj):
-    """
-    Checks whether a given file-like object is closed.
-
-    :param obj:
-        The file-like object to check.
-    """
-    if hasattr(obj, 'fp'):
-        # Object is a container for another file-like object that gets released
-        # on exhaustion (e.g. HTTPResponse)
-        return obj.fp is None
-
-    return obj.closed
diff --git a/bundle/requests/packages/urllib3/util/response.pyc b/bundle/requests/packages/urllib3/util/response.pyc
deleted file mode 100644
index 24eb9d0..0000000
Binary files a/bundle/requests/packages/urllib3/util/response.pyc and /dev/null differ
diff --git a/bundle/requests/packages/urllib3/util/ssl_.py b/bundle/requests/packages/urllib3/util/ssl_.py
deleted file mode 100644
index dee4b87..0000000
--- a/bundle/requests/packages/urllib3/util/ssl_.py
+++ /dev/null
@@ -1,133 +0,0 @@
-from binascii import hexlify, unhexlify
-from hashlib import md5, sha1
-
-from ..exceptions import SSLError
-
-
-try:  # Test for SSL features
-    SSLContext = None
-    HAS_SNI = False
-
-    import ssl
-    from ssl import wrap_socket, CERT_NONE, PROTOCOL_SSLv23
-    from ssl import SSLContext  # Modern SSL?
-    from ssl import HAS_SNI  # Has SNI?
-except ImportError:
-    pass
-
-
-def assert_fingerprint(cert, fingerprint):
-    """
-    Checks if given fingerprint matches the supplied certificate.
-
-    :param cert:
-        Certificate as bytes object.
-    :param fingerprint:
-        Fingerprint as string of hexdigits, can be interspersed by colons.
-    """
-
-    # Maps the length of a digest to a possible hash function producing
-    # this digest.
-    hashfunc_map = {
-        16: md5,
-        20: sha1
-    }
-
-    fingerprint = fingerprint.replace(':', '').lower()
-
-    digest_length, rest = divmod(len(fingerprint), 2)
-
-    if rest or digest_length not in hashfunc_map:
-        raise SSLError('Fingerprint is of invalid length.')
-
-    # We need encode() here for py32; works on py2 and p33.
-    fingerprint_bytes = unhexlify(fingerprint.encode())
-
-    hashfunc = hashfunc_map[digest_length]
-
-    cert_digest = hashfunc(cert).digest()
-
-    if not cert_digest == fingerprint_bytes:
-        raise SSLError('Fingerprints did not match. Expected "{0}", got "{1}".'
-                       .format(hexlify(fingerprint_bytes),
-                               hexlify(cert_digest)))
-
-
-def resolve_cert_reqs(candidate):
-    """
-    Resolves the argument to a numeric constant, which can be passed to
-    the wrap_socket function/method from the ssl module.
-    Defaults to :data:`ssl.CERT_NONE`.
-    If given a string it is assumed to be the name of the constant in the
-    :mod:`ssl` module or its abbrevation.
-    (So you can specify `REQUIRED` instead of `CERT_REQUIRED`.
-    If it's neither `None` nor a string we assume it is already the numeric
-    constant which can directly be passed to wrap_socket.
-    """
-    if candidate is None:
-        return CERT_NONE
-
-    if isinstance(candidate, str):
-        res = getattr(ssl, candidate, None)
-        if res is None:
-            res = getattr(ssl, 'CERT_' + candidate)
-        return res
-
-    return candidate
-
-
-def resolve_ssl_version(candidate):
-    """
-    like resolve_cert_reqs
-    """
-    if candidate is None:
-        return PROTOCOL_SSLv23
-
-    if isinstance(candidate, str):
-        res = getattr(ssl, candidate, None)
-        if res is None:
-            res = getattr(ssl, 'PROTOCOL_' + candidate)
-        return res
-
-    return candidate
-
-
-if SSLContext is not None:  # Python 3.2+
-    def ssl_wrap_socket(sock, keyfile=None, certfile=None, cert_reqs=None,
-                        ca_certs=None, server_hostname=None,
-                        ssl_version=None):
-        """
-        All arguments except `server_hostname` have the same meaning as for
-        :func:`ssl.wrap_socket`
-
-        :param server_hostname:
-            Hostname of the expected certificate
-        """
-        context = SSLContext(ssl_version)
-        context.verify_mode = cert_reqs
-
-        # Disable TLS compression to migitate CRIME attack (issue #309)
-        OP_NO_COMPRESSION = 0x20000
-        context.options |= OP_NO_COMPRESSION
-
-        if ca_certs:
-            try:
-                context.load_verify_locations(ca_certs)
-            # Py32 raises IOError
-            # Py33 raises FileNotFoundError
-            except Exception as e:  # Reraise as SSLError
-                raise SSLError(e)
-        if certfile:
-            # FIXME: This block needs a test.
-            context.load_cert_chain(certfile, keyfile)
-        if HAS_SNI:  # Platform-specific: OpenSSL with enabled SNI
-            return context.wrap_socket(sock, server_hostname=server_hostname)
-        return context.wrap_socket(sock)
-
-else:  # Python 3.1 and earlier
-    def ssl_wrap_socket(sock, keyfile=None, certfile=None, cert_reqs=None,
-                        ca_certs=None, server_hostname=None,
-                        ssl_version=None):
-        return wrap_socket(sock, keyfile=keyfile, certfile=certfile,
-                           ca_certs=ca_certs, cert_reqs=cert_reqs,
-                           ssl_version=ssl_version)
diff --git a/bundle/requests/packages/urllib3/util/ssl_.pyc b/bundle/requests/packages/urllib3/util/ssl_.pyc
deleted file mode 100644
index e84ca3a..0000000
Binary files a/bundle/requests/packages/urllib3/util/ssl_.pyc and /dev/null differ
diff --git a/bundle/requests/packages/urllib3/util/timeout.py b/bundle/requests/packages/urllib3/util/timeout.py
deleted file mode 100644
index 4f947cb..0000000
--- a/bundle/requests/packages/urllib3/util/timeout.py
+++ /dev/null
@@ -1,234 +0,0 @@
-from socket import _GLOBAL_DEFAULT_TIMEOUT
-import time
-
-from ..exceptions import TimeoutStateError
-
-
-def current_time():
-    """
-    Retrieve the current time, this function is mocked out in unit testing.
-    """
-    return time.time()
-
-
-_Default = object()
-# The default timeout to use for socket connections. This is the attribute used
-# by httplib to define the default timeout
-
-
-class Timeout(object):
-    """
-    Utility object for storing timeout values.
-
-    Example usage:
-
-    .. code-block:: python
-
-        timeout = urllib3.util.Timeout(connect=2.0, read=7.0)
-        pool = HTTPConnectionPool('www.google.com', 80, timeout=timeout)
-        pool.request(...) # Etc, etc
-
-    :param connect:
-        The maximum amount of time to wait for a connection attempt to a server
-        to succeed. Omitting the parameter will default the connect timeout to
-        the system default, probably `the global default timeout in socket.py
-        <http://hg.python.org/cpython/file/603b4d593758/Lib/socket.py#l535>`_.
-        None will set an infinite timeout for connection attempts.
-
-    :type connect: integer, float, or None
-
-    :param read:
-        The maximum amount of time to wait between consecutive
-        read operations for a response from the server. Omitting
-        the parameter will default the read timeout to the system
-        default, probably `the global default timeout in socket.py
-        <http://hg.python.org/cpython/file/603b4d593758/Lib/socket.py#l535>`_.
-        None will set an infinite timeout.
-
-    :type read: integer, float, or None
-
-    :param total:
-        This combines the connect and read timeouts into one; the read timeout
-        will be set to the time leftover from the connect attempt. In the
-        event that both a connect timeout and a total are specified, or a read
-        timeout and a total are specified, the shorter timeout will be applied.
-
-        Defaults to None.
-
-    :type total: integer, float, or None
-
-    .. note::
-
-        Many factors can affect the total amount of time for urllib3 to return
-        an HTTP response. Specifically, Python's DNS resolver does not obey the
-        timeout specified on the socket. Other factors that can affect total
-        request time include high CPU load, high swap, the program running at a
-        low priority level, or other behaviors. The observed running time for
-        urllib3 to return a response may be greater than the value passed to
-        `total`.
-
-        In addition, the read and total timeouts only measure the time between
-        read operations on the socket connecting the client and the server,
-        not the total amount of time for the request to return a complete
-        response. For most requests, the timeout is raised because the server
-        has not sent the first byte in the specified time. This is not always
-        the case; if a server streams one byte every fifteen seconds, a timeout
-        of 20 seconds will not ever trigger, even though the request will
-        take several minutes to complete.
-
-        If your goal is to cut off any request after a set amount of wall clock
-        time, consider having a second "watcher" thread to cut off a slow
-        request.
-    """
-
-    #: A sentinel object representing the default timeout value
-    DEFAULT_TIMEOUT = _GLOBAL_DEFAULT_TIMEOUT
-
-    def __init__(self, total=None, connect=_Default, read=_Default):
-        self._connect = self._validate_timeout(connect, 'connect')
-        self._read = self._validate_timeout(read, 'read')
-        self.total = self._validate_timeout(total, 'total')
-        self._start_connect = None
-
-    def __str__(self):
-        return '%s(connect=%r, read=%r, total=%r)' % (
-            type(self).__name__, self._connect, self._read, self.total)
-
-
-    @classmethod
-    def _validate_timeout(cls, value, name):
-        """ Check that a timeout attribute is valid
-
-        :param value: The timeout value to validate
-        :param name: The name of the timeout attribute to validate. This is used
-            for clear error messages
-        :return: the value
-        :raises ValueError: if the type is not an integer or a float, or if it
-            is a numeric value less than zero
-        """
-        if value is _Default:
-            return cls.DEFAULT_TIMEOUT
-
-        if value is None or value is cls.DEFAULT_TIMEOUT:
-            return value
-
-        try:
-            float(value)
-        except (TypeError, ValueError):
-            raise ValueError("Timeout value %s was %s, but it must be an "
-                             "int or float." % (name, value))
-
-        try:
-            if value < 0:
-                raise ValueError("Attempted to set %s timeout to %s, but the "
-                                 "timeout cannot be set to a value less "
-                                 "than 0." % (name, value))
-        except TypeError: # Python 3
-            raise ValueError("Timeout value %s was %s, but it must be an "
-                             "int or float." % (name, value))
-
-        return value
-
-    @classmethod
-    def from_float(cls, timeout):
-        """ Create a new Timeout from a legacy timeout value.
-
-        The timeout value used by httplib.py sets the same timeout on the
-        connect(), and recv() socket requests. This creates a :class:`Timeout`
-        object that sets the individual timeouts to the ``timeout`` value passed
-        to this function.
-
-        :param timeout: The legacy timeout value
-        :type timeout: integer, float, sentinel default object, or None
-        :return: a Timeout object
-        :rtype: :class:`Timeout`
-        """
-        return Timeout(read=timeout, connect=timeout)
-
-    def clone(self):
-        """ Create a copy of the timeout object
-
-        Timeout properties are stored per-pool but each request needs a fresh
-        Timeout object to ensure each one has its own start/stop configured.
-
-        :return: a copy of the timeout object
-        :rtype: :class:`Timeout`
-        """
-        # We can't use copy.deepcopy because that will also create a new object
-        # for _GLOBAL_DEFAULT_TIMEOUT, which socket.py uses as a sentinel to
-        # detect the user default.
-        return Timeout(connect=self._connect, read=self._read,
-                       total=self.total)
-
-    def start_connect(self):
-        """ Start the timeout clock, used during a connect() attempt
-
-        :raises urllib3.exceptions.TimeoutStateError: if you attempt
-            to start a timer that has been started already.
-        """
-        if self._start_connect is not None:
-            raise TimeoutStateError("Timeout timer has already been started.")
-        self._start_connect = current_time()
-        return self._start_connect
-
-    def get_connect_duration(self):
-        """ Gets the time elapsed since the call to :meth:`start_connect`.
-
-        :return: the elapsed time
-        :rtype: float
-        :raises urllib3.exceptions.TimeoutStateError: if you attempt
-            to get duration for a timer that hasn't been started.
-        """
-        if self._start_connect is None:
-            raise TimeoutStateError("Can't get connect duration for timer "
-                                    "that has not started.")
-        return current_time() - self._start_connect
-
-    @property
-    def connect_timeout(self):
-        """ Get the value to use when setting a connection timeout.
-
-        This will be a positive float or integer, the value None
-        (never timeout), or the default system timeout.
-
-        :return: the connect timeout
-        :rtype: int, float, :attr:`Timeout.DEFAULT_TIMEOUT` or None
-        """
-        if self.total is None:
-            return self._connect
-
-        if self._connect is None or self._connect is self.DEFAULT_TIMEOUT:
-            return self.total
-
-        return min(self._connect, self.total)
-
-    @property
-    def read_timeout(self):
-        """ Get the value for the read timeout.
-
-        This assumes some time has elapsed in the connection timeout and
-        computes the read timeout appropriately.
-
-        If self.total is set, the read timeout is dependent on the amount of
-        time taken by the connect timeout. If the connection time has not been
-        established, a :exc:`~urllib3.exceptions.TimeoutStateError` will be
-        raised.
-
-        :return: the value to use for the read timeout
-        :rtype: int, float, :attr:`Timeout.DEFAULT_TIMEOUT` or None
-        :raises urllib3.exceptions.TimeoutStateError: If :meth:`start_connect`
-            has not yet been called on this object.
-        """
-        if (self.total is not None and
-            self.total is not self.DEFAULT_TIMEOUT and
-            self._read is not None and
-            self._read is not self.DEFAULT_TIMEOUT):
-            # in case the connect timeout has not yet been established.
-            if self._start_connect is None:
-                return self._read
-            return max(0, min(self.total - self.get_connect_duration(),
-                              self._read))
-        elif self.total is not None and self.total is not self.DEFAULT_TIMEOUT:
-            return max(0, self.total - self.get_connect_duration())
-        else:
-            return self._read
diff --git a/bundle/requests/packages/urllib3/util/timeout.pyc b/bundle/requests/packages/urllib3/util/timeout.pyc
deleted file mode 100644
index de06126..0000000
Binary files a/bundle/requests/packages/urllib3/util/timeout.pyc and /dev/null differ
diff --git a/bundle/requests/packages/urllib3/util/url.py b/bundle/requests/packages/urllib3/util/url.py
deleted file mode 100644
index 362d216..0000000
--- a/bundle/requests/packages/urllib3/util/url.py
+++ /dev/null
@@ -1,162 +0,0 @@
-from collections import namedtuple
-
-from ..exceptions import LocationParseError
-
-
-class Url(namedtuple('Url', ['scheme', 'auth', 'host', 'port', 'path', 'query', 'fragment'])):
-    """
-    Datastructure for representing an HTTP URL. Used as a return value for
-    :func:`parse_url`.
-    """
-    slots = ()
-
-    def __new__(cls, scheme=None, auth=None, host=None, port=None, path=None, query=None, fragment=None):
-        return super(Url, cls).__new__(cls, scheme, auth, host, port, path, query, fragment)
-
-    @property
-    def hostname(self):
-        """For backwards-compatibility with urlparse. We're nice like that."""
-        return self.host
-
-    @property
-    def request_uri(self):
-        """Absolute path including the query string."""
-        uri = self.path or '/'
-
-        if self.query is not None:
-            uri += '?' + self.query
-
-        return uri
-
-    @property
-    def netloc(self):
-        """Network location including host and port"""
-        if self.port:
-            return '%s:%d' % (self.host, self.port)
-        return self.host
-
-
-def split_first(s, delims):
-    """
-    Given a string and an iterable of delimiters, split on the first found
-    delimiter. Return two split parts and the matched delimiter.
-
-    If not found, then the first part is the full input string.
-
-    Example: ::
-
-        >>> split_first('foo/bar?baz', '?/=')
-        ('foo', 'bar?baz', '/')
-        >>> split_first('foo/bar?baz', '123')
-        ('foo/bar?baz', '', None)
-
-    Scales linearly with number of delims. Not ideal for large number of delims.
-    """
-    min_idx = None
-    min_delim = None
-    for d in delims:
-        idx = s.find(d)
-        if idx < 0:
-            continue
-
-        if min_idx is None or idx < min_idx:
-            min_idx = idx
-            min_delim = d
-
-    if min_idx is None or min_idx < 0:
-        return s, '', None
-
-    return s[:min_idx], s[min_idx+1:], min_delim
-
-
-def parse_url(url):
-    """
-    Given a url, return a parsed :class:`.Url` namedtuple. Best-effort is
-    performed to parse incomplete urls. Fields not provided will be None.
-
-    Partly backwards-compatible with :mod:`urlparse`.
-
-    Example: ::
-
-        >>> parse_url('http://google.com/mail/')
-        Url(scheme='http', host='google.com', port=None, path='/', ...)
-        >>> parse_url('google.com:80')
-        Url(scheme=None, host='google.com', port=80, path=None, ...)
-        >>> parse_url('/foo?bar')
-        Url(scheme=None, host=None, port=None, path='/foo', query='bar', ...)
-    """
-
-    # While this code has overlap with stdlib's urlparse, it is much
-    # simplified for our needs and less annoying.
-    # Additionally, this implementations does silly things to be optimal
-    # on CPython.
-
-    scheme = None
-    auth = None
-    host = None
-    port = None
-    path = None
-    fragment = None
-    query = None
-
-    # Scheme
-    if '://' in url:
-        scheme, url = url.split('://', 1)
-
-    # Find the earliest Authority Terminator
-    # (http://tools.ietf.org/html/rfc3986#section-3.2)
-    url, path_, delim = split_first(url, ['/', '?', '#'])
-
-    if delim:
-        # Reassemble the path
-        path = delim + path_
-
-    # Auth
-    if '@' in url:
-        # Last '@' denotes end of auth part
-        auth, url = url.rsplit('@', 1)
-
-    # IPv6
-    if url and url[0] == '[':
-        host, url = url.split(']', 1)
-        host += ']'
-
-    # Port
-    if ':' in url:
-        _host, port = url.split(':', 1)
-
-        if not host:
-            host = _host
-
-        if port:
-            # If given, ports must be integers.
-            if not port.isdigit():
-                raise LocationParseError(url)
-            port = int(port)
-        else:
-            # Blank ports are cool, too. (rfc3986#section-3.2.3)
-            port = None
-
-    elif not host and url:
-        host = url
-
-    if not path:
-        return Url(scheme, auth, host, port, path, query, fragment)
-
-    # Fragment
-    if '#' in path:
-        path, fragment = path.split('#', 1)
-
-    # Query
-    if '?' in path:
-        path, query = path.split('?', 1)
-
-    return Url(scheme, auth, host, port, path, query, fragment)
-
-
-def get_host(url):
-    """
-    Deprecated. Use :func:`.parse_url` instead.
-    """
-    p = parse_url(url)
-    return p.scheme or 'http', p.hostname, p.port
diff --git a/bundle/requests/packages/urllib3/util/url.pyc b/bundle/requests/packages/urllib3/util/url.pyc
deleted file mode 100644
index ffb9f4b..0000000
Binary files a/bundle/requests/packages/urllib3/util/url.pyc and /dev/null differ
diff --git a/bundle/requests/sessions.py b/bundle/requests/sessions.py
deleted file mode 100644
index 28b5da9..0000000
--- a/bundle/requests/sessions.py
+++ /dev/null
@@ -1,630 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
-requests.session
-~~~~~~~~~~~~~~~~
-
-This module provides a Session object to manage and persist settings across
-requests (cookies, auth, proxies).
-
-"""
-import os
-from collections import Mapping
-from datetime import datetime
-
-from .auth import _basic_auth_str
-from .compat import cookielib, OrderedDict, urljoin, urlparse, builtin_str
-from .cookies import (
-    cookiejar_from_dict, extract_cookies_to_jar, RequestsCookieJar, merge_cookies)
-from .models import Request, PreparedRequest, DEFAULT_REDIRECT_LIMIT
-from .hooks import default_hooks, dispatch_hook
-from .utils import to_key_val_list, default_headers, to_native_string
-from .exceptions import TooManyRedirects, InvalidSchema
-from .structures import CaseInsensitiveDict
-
-from .adapters import HTTPAdapter
-
-from .utils import (
-    requote_uri, get_environ_proxies, get_netrc_auth, should_bypass_proxies,
-    get_auth_from_url
-)
-
-from .status_codes import codes
-
-# formerly defined here, reexposed here for backward compatibility
-from .models import REDIRECT_STATI
-
-
-def merge_setting(request_setting, session_setting, dict_class=OrderedDict):
-    """
-    Determines appropriate setting for a given request, taking into account the
-    explicit setting on that request, and the setting in the session. If a
-    setting is a dictionary, they will be merged together using `dict_class`
-    """
-
-    if session_setting is None:
-        return request_setting
-
-    if request_setting is None:
-        return session_setting
-
-    # Bypass if not a dictionary (e.g. verify)
-    if not (
-            isinstance(session_setting, Mapping) and
-            isinstance(request_setting, Mapping)
-    ):
-        return request_setting
-
-    merged_setting = dict_class(to_key_val_list(session_setting))
-    merged_setting.update(to_key_val_list(request_setting))
-
-    # Remove keys that are set to None.
-    for (k, v) in request_setting.items():
-        if v is None:
-            del merged_setting[k]
-
-    merged_setting = dict((k, v) for (k, v) in merged_setting.items() if v is not None)
-
-    return merged_setting
-
-
-def merge_hooks(request_hooks, session_hooks, dict_class=OrderedDict):
-    """
-    Properly merges both requests and session hooks.
-
-    This is necessary because when request_hooks == {'response': []}, the
-    merge breaks Session hooks entirely.
-    """
-    if session_hooks is None or session_hooks.get('response') == []:
-        return request_hooks
-
-    if request_hooks is None or request_hooks.get('response') == []:
-        return session_hooks
-
-    return merge_setting(request_hooks, session_hooks, dict_class)
-
-
-class SessionRedirectMixin(object):
-    def resolve_redirects(self, resp, req, stream=False, timeout=None,
-                          verify=True, cert=None, proxies=None):
-        """Receives a Response. Returns a generator of Responses."""
-
-        i = 0
-
-        while resp.is_redirect:
-            prepared_request = req.copy()
-
-            resp.content  # Consume socket so it can be released
-
-            if i >= self.max_redirects:
-                raise TooManyRedirects('Exceeded %s redirects.' % self.max_redirects)
-
-            # Release the connection back into the pool.
-            resp.close()
-
-            url = resp.headers['location']
-            method = req.method
-
-            # Handle redirection without scheme (see: RFC 1808 Section 4)
-            if url.startswith('//'):
-                parsed_rurl = urlparse(resp.url)
-                url = '%s:%s' % (parsed_rurl.scheme, url)
-
-            # The scheme should be lower case...
-            parsed = urlparse(url)
-            url = parsed.geturl()
-
-            # Facilitate non-RFC2616-compliant 'location' headers
-            # (e.g. '/path/to/resource' instead of 'http://domain.tld/path/to/resource')
-            # Compliant with RFC3986, we percent encode the url.
-            if not urlparse(url).netloc:
-                url = urljoin(resp.url, requote_uri(url))
-            else:
-                url = requote_uri(url)
-
-            prepared_request.url = to_native_string(url)
-
-            # http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.4
-            if (resp.status_code == codes.see_other and
-                    method != 'HEAD'):
-                method = 'GET'
-
-            # Do what the browsers do, despite standards...
-            # First, turn 302s into GETs.
-            if resp.status_code == codes.found and method != 'HEAD':
-                method = 'GET'
-
-            # Second, if a POST is responded to with a 301, turn it into a GET.
-            # This bizarre behaviour is explained in Issue 1704.
-            if resp.status_code == codes.moved and method == 'POST':
-                method = 'GET'
-
-            prepared_request.method = method
-
-            # https://github.com/kennethreitz/requests/issues/1084
-            if resp.status_code not in (codes.temporary, codes.resume):
-                if 'Content-Length' in prepared_request.headers:
-                    del prepared_request.headers['Content-Length']
-
-                prepared_request.body = None
-
-            headers = prepared_request.headers
-            try:
-                del headers['Cookie']
-            except KeyError:
-                pass
-
-            extract_cookies_to_jar(prepared_request._cookies, prepared_request, resp.raw)
-            prepared_request._cookies.update(self.cookies)
-            prepared_request.prepare_cookies(prepared_request._cookies)
-
-            # Rebuild auth and proxy information.
-            proxies = self.rebuild_proxies(prepared_request, proxies)
-            self.rebuild_auth(prepared_request, resp)
-
-            # Override the original request.
-            req = prepared_request
-
-            resp = self.send(
-                req,
-                stream=stream,
-                timeout=timeout,
-                verify=verify,
-                cert=cert,
-                proxies=proxies,
-                allow_redirects=False,
-            )
-
-            extract_cookies_to_jar(self.cookies, prepared_request, resp.raw)
-
-            i += 1
-            yield resp
-
-    def rebuild_auth(self, prepared_request, response):
-        """
-        When being redirected we may want to strip authentication from the
-        request to avoid leaking credentials. This method intelligently removes
-        and reapplies authentication where possible to avoid credential loss.
-        """
-        headers = prepared_request.headers
-        url = prepared_request.url
-
-        if 'Authorization' in headers:
-            # If we get redirected to a new host, we should strip out any
-            # authentication headers.
-            original_parsed = urlparse(response.request.url)
-            redirect_parsed = urlparse(url)
-
-            if (original_parsed.hostname != redirect_parsed.hostname):
-                del headers['Authorization']
-
-        # .netrc might have more auth for us on our new host.
-        new_auth = get_netrc_auth(url) if self.trust_env else None
-        if new_auth is not None:
-            prepared_request.prepare_auth(new_auth)
-
-        return
-
-    def rebuild_proxies(self, prepared_request, proxies):
-        """
-        This method re-evaluates the proxy configuration by considering the
-        environment variables. If we are redirected to a URL covered by
-        NO_PROXY, we strip the proxy configuration. Otherwise, we set missing
-        proxy keys for this URL (in case they were stripped by a previous
-        redirect).
-
-        This method also replaces the Proxy-Authorization header where
-        necessary.
-        """
-        headers = prepared_request.headers
-        url = prepared_request.url
-        new_proxies = {}
-
-        if not should_bypass_proxies(url):
-            environ_proxies = get_environ_proxies(url)
-            scheme = urlparse(url).scheme
-
-            proxy = environ_proxies.get(scheme)
-
-            if proxy:
-                new_proxies.setdefault(scheme, environ_proxies[scheme])
-
-        if 'Proxy-Authorization' in headers:
-            del headers['Proxy-Authorization']
-
-        try:
-            username, password = get_auth_from_url(new_proxies[scheme])
-        except KeyError:
-            username, password = None, None
-
-        if username and password:
-            headers['Proxy-Authorization'] = _basic_auth_str(username, password)
-
-        return new_proxies
-
-
-class Session(SessionRedirectMixin):
-    """A Requests session.
-
-    Provides cookie persistence, connection-pooling, and configuration.
-
-    Basic Usage::
-
-      >>> import requests
-      >>> s = requests.Session()
-      >>> s.get('http://httpbin.org/get')
-      200
-    """
-
-    __attrs__ = [
-        'headers', 'cookies', 'auth', 'timeout', 'proxies', 'hooks',
-        'params', 'verify', 'cert', 'prefetch', 'adapters', 'stream',
-        'trust_env', 'max_redirects']
-
-    def __init__(self):
-
-        #: A case-insensitive dictionary of headers to be sent on each
-        #: :class:`Request <Request>` sent from this
-        #: :class:`Session <Session>`.
-        self.headers = default_headers()
-
-        #: Default Authentication tuple or object to attach to
-        #: :class:`Request <Request>`.
-        self.auth = None
-
-        #: Dictionary mapping protocol to the URL of the proxy (e.g.
-        #: {'http': 'foo.bar:3128'}) to be used on each
-        #: :class:`Request <Request>`.
-        self.proxies = {}
-
-        #: Event-handling hooks.
-        self.hooks = default_hooks()
-
-        #: Dictionary of querystring data to attach to each
-        #: :class:`Request <Request>`. The dictionary values may be lists for
-        #: representing multivalued query parameters.
-        self.params = {}
-
-        #: Stream response content default.
-        self.stream = False
-
-        #: SSL Verification default.
-        self.verify = True
-
-        #: SSL certificate default.
-        self.cert = None
-
-        #: Maximum number of redirects allowed. If the request exceeds this
-        #: limit, a :class:`TooManyRedirects` exception is raised.
-        self.max_redirects = DEFAULT_REDIRECT_LIMIT
-
-        #: Should we trust the environment?
-        self.trust_env = True
-
-        #: A CookieJar containing all currently outstanding cookies set on this
-        #: session. By default it is a
-        #: :class:`RequestsCookieJar <requests.cookies.RequestsCookieJar>`, but
-        #: may be any other ``cookielib.CookieJar`` compatible object.
-        self.cookies = cookiejar_from_dict({})
-
-        # Default connection adapters.
-        self.adapters = OrderedDict()
-        self.mount('https://', HTTPAdapter())
-        self.mount('http://', HTTPAdapter())
-
-    def __enter__(self):
-        return self
-
-    def __exit__(self, *args):
-        self.close()
-
-    def prepare_request(self, request):
-        """Constructs a :class:`PreparedRequest <PreparedRequest>` for
-        transmission and returns it. The :class:`PreparedRequest` has settings
-        merged from the :class:`Request <Request>` instance and those of the
-        :class:`Session`.
-
-        :param request: :class:`Request` instance to prepare with this
-            session's settings.
-        """
-        cookies = request.cookies or {}
-
-        # Bootstrap CookieJar.
-        if not isinstance(cookies, cookielib.CookieJar):
-            cookies = cookiejar_from_dict(cookies)
-
-        # Merge with session cookies
-        merged_cookies = merge_cookies(
-            merge_cookies(RequestsCookieJar(), self.cookies), cookies)
-
-
-        # Set environment's basic authentication if not explicitly set.
-        auth = request.auth
-        if self.trust_env and not auth and not self.auth:
-            auth = get_netrc_auth(request.url)
-
-        p = PreparedRequest()
-        p.prepare(
-            method=request.method.upper(),
-            url=request.url,
-            files=request.files,
-            data=request.data,
-            headers=merge_setting(request.headers, self.headers, dict_class=CaseInsensitiveDict),
-            params=merge_setting(request.params, self.params),
-            auth=merge_setting(auth, self.auth),
-            cookies=merged_cookies,
-            hooks=merge_hooks(request.hooks, self.hooks),
-        )
-        return p
-
-    def request(self, method, url,
-        params=None,
-        data=None,
-        headers=None,
-        cookies=None,
-        files=None,
-        auth=None,
-        timeout=None,
-        allow_redirects=True,
-        proxies=None,
-        hooks=None,
-        stream=None,
-        verify=None,
-        cert=None):
-        """Constructs a :class:`Request <Request>`, prepares it and sends it.
-        Returns :class:`Response <Response>` object.
-
-        :param method: method for the new :class:`Request` object.
-        :param url: URL for the new :class:`Request` object.
-        :param params: (optional) Dictionary or bytes to be sent in the query
-            string for the :class:`Request`.
-        :param data: (optional) Dictionary or bytes to send in the body of the
-            :class:`Request`.
-        :param headers: (optional) Dictionary of HTTP Headers to send with the
-            :class:`Request`.
-        :param cookies: (optional) Dict or CookieJar object to send with the
-            :class:`Request`.
-        :param files: (optional) Dictionary of 'filename': file-like-objects
-            for multipart encoding upload.
-        :param auth: (optional) Auth tuple or callable to enable
-            Basic/Digest/Custom HTTP Auth.
-        :param timeout: (optional) Float describing the timeout of the
-            request in seconds.
-        :param allow_redirects: (optional) Boolean. Set to True by default.
-        :param proxies: (optional) Dictionary mapping protocol to the URL of
-            the proxy.
-        :param stream: (optional) whether to immediately download the response
-            content. Defaults to ``False``.
-        :param verify: (optional) if ``True``, the SSL cert will be verified.
-            A CA_BUNDLE path can also be provided.
-        :param cert: (optional) if String, path to ssl client cert file (.pem).
-            If Tuple, ('cert', 'key') pair.
-        """
-
-        method = builtin_str(method)
-
-        # Create the Request.
-        req = Request(
-            method = method.upper(),
-            url = url,
-            headers = headers,
-            files = files,
-            data = data or {},
-            params = params or {},
-            auth = auth,
-            cookies = cookies,
-            hooks = hooks,
-        )
-        prep = self.prepare_request(req)
-
-        proxies = proxies or {}
-
-        # Gather clues from the surrounding environment.
-        if self.trust_env:
-            # Set environment's proxies.
-            env_proxies = get_environ_proxies(url) or {}
-            for (k, v) in env_proxies.items():
-                proxies.setdefault(k, v)
-
-            # Look for configuration.
-            if not verify and verify is not False:
-                verify = os.environ.get('REQUESTS_CA_BUNDLE')
-
-            # Curl compatibility.
-            if not verify and verify is not False:
-                verify = os.environ.get('CURL_CA_BUNDLE')
-
-        # Merge all the kwargs.
-        proxies = merge_setting(proxies, self.proxies)
-        stream = merge_setting(stream, self.stream)
-        verify = merge_setting(verify, self.verify)
-        cert = merge_setting(cert, self.cert)
-
-        # Send the request.
-        send_kwargs = {
-            'stream': stream,
-            'timeout': timeout,
-            'verify': verify,
-            'cert': cert,
-            'proxies': proxies,
-            'allow_redirects': allow_redirects,
-        }
-        resp = self.send(prep, **send_kwargs)
-
-        return resp
-
-    def get(self, url, **kwargs):
-        """Sends a GET request. Returns :class:`Response` object.
-
-        :param url: URL for the new :class:`Request` object.
-        :param \*\*kwargs: Optional arguments that ``request`` takes.
-        """
-
-        kwargs.setdefault('allow_redirects', True)
-        return self.request('GET', url, **kwargs)
-
-    def options(self, url, **kwargs):
-        """Sends a OPTIONS request. Returns :class:`Response` object.
-
-        :param url: URL for the new :class:`Request` object.
-        :param \*\*kwargs: Optional arguments that ``request`` takes.
-        """
-
-        kwargs.setdefault('allow_redirects', True)
-        return self.request('OPTIONS', url, **kwargs)
-
-    def head(self, url, **kwargs):
-        """Sends a HEAD request. Returns :class:`Response` object.
-
-        :param url: URL for the new :class:`Request` object.
-        :param \*\*kwargs: Optional arguments that ``request`` takes.
-        """
-
-        kwargs.setdefault('allow_redirects', False)
-        return self.request('HEAD', url, **kwargs)
-
-    def post(self, url, data=None, **kwargs):
-        """Sends a POST request. Returns :class:`Response` object.
-
-        :param url: URL for the new :class:`Request` object.
-        :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`.
-        :param \*\*kwargs: Optional arguments that ``request`` takes.
-        """
-
-        return self.request('POST', url, data=data, **kwargs)
-
-    def put(self, url, data=None, **kwargs):
-        """Sends a PUT request. Returns :class:`Response` object.
-
-        :param url: URL for the new :class:`Request` object.
-        :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`.
-        :param \*\*kwargs: Optional arguments that ``request`` takes.
-        """
-
-        return self.request('PUT', url, data=data, **kwargs)
-
-    def patch(self, url, data=None, **kwargs):
-        """Sends a PATCH request. Returns :class:`Response` object.
-
-        :param url: URL for the new :class:`Request` object.
-        :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`.
-        :param \*\*kwargs: Optional arguments that ``request`` takes.
-        """
-
-        return self.request('PATCH', url,  data=data, **kwargs)
-
-    def delete(self, url, **kwargs):
-        """Sends a DELETE request. Returns :class:`Response` object.
-
-        :param url: URL for the new :class:`Request` object.
-        :param \*\*kwargs: Optional arguments that ``request`` takes.
-        """
-
-        return self.request('DELETE', url, **kwargs)
-
-    def send(self, request, **kwargs):
-        """Send a given PreparedRequest."""
-        # Set defaults that the hooks can utilize to ensure they always have
-        # the correct parameters to reproduce the previous request.
-        kwargs.setdefault('stream', self.stream)
-        kwargs.setdefault('verify', self.verify)
-        kwargs.setdefault('cert', self.cert)
-        kwargs.setdefault('proxies', self.proxies)
-
-        # It's possible that users might accidentally send a Request object.
-        # Guard against that specific failure case.
-        if not isinstance(request, PreparedRequest):
-            raise ValueError('You can only send PreparedRequests.')
-
-        # Set up variables needed for resolve_redirects and dispatching of hooks
-        allow_redirects = kwargs.pop('allow_redirects', True)
-        stream = kwargs.get('stream')
-        timeout = kwargs.get('timeout')
-        verify = kwargs.get('verify')
-        cert = kwargs.get('cert')
-        proxies = kwargs.get('proxies')
-        hooks = request.hooks
-
-        # Get the appropriate adapter to use
-        adapter = self.get_adapter(url=request.url)
-
-        # Start time (approximately) of the request
-        start = datetime.utcnow()
-
-        # Send the request
-        r = adapter.send(request, **kwargs)
-
-        # Total elapsed time of the request (approximately)
-        r.elapsed = datetime.utcnow() - start
-
-        # Response manipulation hooks
-        r = dispatch_hook('response', hooks, r, **kwargs)
-
-        # Persist cookies
-        if r.history:
-
-            # If the hooks create history then we want those cookies too
-            for resp in r.history:
-                extract_cookies_to_jar(self.cookies, resp.request, resp.raw)
-
-        extract_cookies_to_jar(self.cookies, request, r.raw)
-
-        # Redirect resolving generator.
-        gen = self.resolve_redirects(r, request,
-            stream=stream,
-            timeout=timeout,
-            verify=verify,
-            cert=cert,
-            proxies=proxies)
-
-        # Resolve redirects if allowed.
-        history = [resp for resp in gen] if allow_redirects else []
-
-        # Shuffle things around if there's history.
-        if history:
-            # Insert the first (original) request at the start
-            history.insert(0, r)
-            # Get the last request made
-            r = history.pop()
-            r.history = history
-
-        return r
-
-    def get_adapter(self, url):
-        """Returns the appropriate connnection adapter for the given URL."""
-        for (prefix, adapter) in self.adapters.items():
-
-            if url.lower().startswith(prefix):
-                return adapter
-
-        # Nothing matches :-/
-        raise InvalidSchema("No connection adapters were found for '%s'" % url)
-
-    def close(self):
-        """Closes all adapters and as such the session"""
-        for v in self.adapters.values():
-            v.close()
-
-    def mount(self, prefix, adapter):
-        """Registers a connection adapter to a prefix.
-
-        Adapters are sorted in descending order by key length."""
-
-        self.adapters[prefix] = adapter
-        keys_to_move = [k for k in self.adapters if len(k) < len(prefix)]
-
-        for key in keys_to_move:
-            self.adapters[key] = self.adapters.pop(key)
-
-    def __getstate__(self):
-        return dict((attr, getattr(self, attr, None)) for attr in self.__attrs__)
-
-    def __setstate__(self, state):
-        for attr, value in state.items():
-            setattr(self, attr, value)
-
-
-def session():
-    """Returns a :class:`Session` for context-management."""
-
-    return Session()
diff --git a/bundle/requests/sessions.pyc b/bundle/requests/sessions.pyc
deleted file mode 100644
index aa182ed..0000000
Binary files a/bundle/requests/sessions.pyc and /dev/null differ
diff --git a/bundle/requests/status_codes.py b/bundle/requests/status_codes.py
deleted file mode 100644
index ed7a866..0000000
--- a/bundle/requests/status_codes.py
+++ /dev/null
@@ -1,88 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from .structures import LookupDict
-
-_codes = {
-
-    # Informational.
-    100: ('continue',),
-    101: ('switching_protocols',),
-    102: ('processing',),
-    103: ('checkpoint',),
-    122: ('uri_too_long', 'request_uri_too_long'),
-    200: ('ok', 'okay', 'all_ok', 'all_okay', 'all_good', '\\o/', '✓'),
-    201: ('created',),
-    202: ('accepted',),
-    203: ('non_authoritative_info', 'non_authoritative_information'),
-    204: ('no_content',),
-    205: ('reset_content', 'reset'),
-    206: ('partial_content', 'partial'),
-    207: ('multi_status', 'multiple_status', 'multi_stati', 'multiple_stati'),
-    208: ('already_reported',),
-    226: ('im_used',),
-
-    # Redirection.
-    300: ('multiple_choices',),
-    301: ('moved_permanently', 'moved', '\\o-'),
-    302: ('found',),
-    303: ('see_other', 'other'),
-    304: ('not_modified',),
-    305: ('use_proxy',),
-    306: ('switch_proxy',),
-    307: ('temporary_redirect', 'temporary_moved', 'temporary'),
-    308: ('resume_incomplete', 'resume'),
-
-    # Client Error.
-    400: ('bad_request', 'bad'),
-    401: ('unauthorized',),
-    402: ('payment_required', 'payment'),
-    403: ('forbidden',),
-    404: ('not_found', '-o-'),
-    405: ('method_not_allowed', 'not_allowed'),
-    406: ('not_acceptable',),
-    407: ('proxy_authentication_required', 'proxy_auth', 'proxy_authentication'),
-    408: ('request_timeout', 'timeout'),
-    409: ('conflict',),
-    410: ('gone',),
-    411: ('length_required',),
-    412: ('precondition_failed', 'precondition'),
-    413: ('request_entity_too_large',),
-    414: ('request_uri_too_large',),
-    415: ('unsupported_media_type', 'unsupported_media', 'media_type'),
-    416: ('requested_range_not_satisfiable', 'requested_range', 'range_not_satisfiable'),
-    417: ('expectation_failed',),
-    418: ('im_a_teapot', 'teapot', 'i_am_a_teapot'),
-    422: ('unprocessable_entity', 'unprocessable'),
-    423: ('locked',),
-    424: ('failed_dependency', 'dependency'),
-    425: ('unordered_collection', 'unordered'),
-    426: ('upgrade_required', 'upgrade'),
-    428: ('precondition_required', 'precondition'),
-    429: ('too_many_requests', 'too_many'),
-    431: ('header_fields_too_large', 'fields_too_large'),
-    444: ('no_response', 'none'),
-    449: ('retry_with', 'retry'),
-    450: ('blocked_by_windows_parental_controls', 'parental_controls'),
-    451: ('unavailable_for_legal_reasons', 'legal_reasons'),
-    499: ('client_closed_request',),
-
-    # Server Error.
-    500: ('internal_server_error', 'server_error', '/o\\', '✗'),
-    501: ('not_implemented',),
-    502: ('bad_gateway',),
-    503: ('service_unavailable', 'unavailable'),
-    504: ('gateway_timeout',),
-    505: ('http_version_not_supported', 'http_version'),
-    506: ('variant_also_negotiates',),
-    507: ('insufficient_storage',),
-    509: ('bandwidth_limit_exceeded', 'bandwidth'),
-    510: ('not_extended',),
-}
-
-codes = LookupDict(name='status_codes')
-
-for (code, titles) in list(_codes.items()):
-    for title in titles:
-        setattr(codes, title, code)
-        if not title.startswith('\\'):
-            setattr(codes, title.upper(), code)
diff --git a/bundle/requests/status_codes.pyc b/bundle/requests/status_codes.pyc
deleted file mode 100644
index a0298b7..0000000
Binary files a/bundle/requests/status_codes.pyc and /dev/null differ
diff --git a/bundle/requests/structures.py b/bundle/requests/structures.py
deleted file mode 100644
index a175913..0000000
--- a/bundle/requests/structures.py
+++ /dev/null
@@ -1,128 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
-requests.structures
-~~~~~~~~~~~~~~~~~~~
-
-Data structures that power Requests.
-
-"""
-
-import os
-import collections
-from itertools import islice
-
-
-class IteratorProxy(object):
-    """docstring for IteratorProxy"""
-    def __init__(self, i):
-        self.i = i
-        # self.i = chain.from_iterable(i)
-
-    def __iter__(self):
-        return self.i
-
-    def __len__(self):
-        if hasattr(self.i, '__len__'):
-            return len(self.i)
-        if hasattr(self.i, 'len'):
-            return self.i.len
-        if hasattr(self.i, 'fileno'):
-            return os.fstat(self.i.fileno()).st_size
-
-    def read(self, n):
-        return "".join(islice(self.i, None, n))
-
-
-class CaseInsensitiveDict(collections.MutableMapping):
-    """
-    A case-insensitive ``dict``-like object.
-
-    Implements all methods and operations of
-    ``collections.MutableMapping`` as well as dict's ``copy``. Also
-    provides ``lower_items``.
-
-    All keys are expected to be strings. The structure remembers the
-    case of the last key to be set, and ``iter(instance)``,
-    ``keys()``, ``items()``, ``iterkeys()``, and ``iteritems()``
-    will contain case-sensitive keys. However, querying and contains
-    testing is case insensitive:
-
-        cid = CaseInsensitiveDict()
-        cid['Accept'] = 'application/json'
-        cid['aCCEPT'] == 'application/json'  # True
-        list(cid) == ['Accept']  # True
-
-    For example, ``headers['content-encoding']`` will return the
-    value of a ``'Content-Encoding'`` response header, regardless
-    of how the header name was originally stored.
-
-    If the constructor, ``.update``, or equality comparison
-    operations are given keys that have equal ``.lower()``s, the
-    behavior is undefined.
-
-    """
-    def __init__(self, data=None, **kwargs):
-        self._store = dict()
-        if data is None:
-            data = {}
-        self.update(data, **kwargs)
-
-    def __setitem__(self, key, value):
-        # Use the lowercased key for lookups, but store the actual
-        # key alongside the value.
-        self._store[key.lower()] = (key, value)
-
-    def __getitem__(self, key):
-        return self._store[key.lower()][1]
-
-    def __delitem__(self, key):
-        del self._store[key.lower()]
-
-    def __iter__(self):
-        return (casedkey for casedkey, mappedvalue in self._store.values())
-
-    def __len__(self):
-        return len(self._store)
-
-    def lower_items(self):
-        """Like iteritems(), but with all lowercase keys."""
-        return (
-            (lowerkey, keyval[1])
-            for (lowerkey, keyval)
-            in self._store.items()
-        )
-
-    def __eq__(self, other):
-        if isinstance(other, collections.Mapping):
-            other = CaseInsensitiveDict(other)
-        else:
-            return NotImplemented
-        # Compare insensitively
-        return dict(self.lower_items()) == dict(other.lower_items())
-
-    # Copy is required
-    def copy(self):
-        return CaseInsensitiveDict(self._store.values())
-
-    def __repr__(self):
-        return '%s(%r)' % (self.__class__.__name__, dict(self.items()))
-
-
-class LookupDict(dict):
-    """Dictionary lookup object."""
-
-    def __init__(self, name=None):
-        self.name = name
-        super(LookupDict, self).__init__()
-
-    def __repr__(self):
-        return '<lookup \'%s\'>' % (self.name)
-
-    def __getitem__(self, key):
-        # We allow fall-through here, so values default to None
-
-        return self.__dict__.get(key, None)
-
-    def get(self, key, default=None):
-        return self.__dict__.get(key, default)
diff --git a/bundle/requests/structures.pyc b/bundle/requests/structures.pyc
deleted file mode 100644
index b24a7a3..0000000
Binary files a/bundle/requests/structures.pyc and /dev/null differ
diff --git a/bundle/requests/utils.py b/bundle/requests/utils.py
deleted file mode 100644
index b703ac4..0000000
--- a/bundle/requests/utils.py
+++ /dev/null
@@ -1,668 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
-requests.utils
-~~~~~~~~~~~~~~
-
-This module provides utility functions that are used within Requests
-that are also useful for external consumption.
-
-"""
-
-import cgi
-import codecs
-import collections
-import io
-import os
-import platform
-import re
-import sys
-import socket
-import struct
-
-from . import __version__
-from . import certs
-from .compat import parse_http_list as _parse_list_header
-from .compat import (quote, urlparse, bytes, str, OrderedDict, unquote, is_py2,
-                     builtin_str, getproxies, proxy_bypass)
-from .cookies import RequestsCookieJar, cookiejar_from_dict
-from .structures import CaseInsensitiveDict
-from .exceptions import MissingSchema, InvalidURL
-
-_hush_pyflakes = (RequestsCookieJar,)
-
-NETRC_FILES = ('.netrc', '_netrc')
-
-DEFAULT_CA_BUNDLE_PATH = certs.where()
-
-
-def dict_to_sequence(d):
-    """Returns an internal sequence dictionary update."""
-
-    if hasattr(d, 'items'):
-        d = d.items()
-
-    return d
-
-
-def super_len(o):
-    if hasattr(o, '__len__'):
-        return len(o)
-
-    if hasattr(o, 'len'):
-        return o.len
-
-    if hasattr(o, 'fileno'):
-        try:
-            fileno = o.fileno()
-        except io.UnsupportedOperation:
-            pass
-        else:
-            return os.fstat(fileno).st_size
-
-    if hasattr(o, 'getvalue'):
-        # e.g. BytesIO, cStringIO.StringIO
-        return len(o.getvalue())
-
-
-def get_netrc_auth(url):
-    """Returns the Requests tuple auth for a given url from netrc."""
-
-    try:
-        from netrc import netrc, NetrcParseError
-
-        netrc_path = None
-
-        for f in NETRC_FILES:
-            try:
-                loc = os.path.expanduser('~/{0}'.format(f))
-            except KeyError:
-                # os.path.expanduser can fail when $HOME is undefined and
-                # getpwuid fails. See http://bugs.python.org/issue20164 &
-                # https://github.com/kennethreitz/requests/issues/1846
-                return
-
-            if os.path.exists(loc):
-                netrc_path = loc
-                break
-
-        # Abort early if there isn't one.
-        if netrc_path is None:
-            return
-
-        ri = urlparse(url)
-
-        # Strip port numbers from netloc
-        host = ri.netloc.split(':')[0]
-
-        try:
-            _netrc = netrc(netrc_path).authenticators(host)
-            if _netrc:
-                # Return with login / password
-                login_i = (0 if _netrc[0] else 1)
-                return (_netrc[login_i], _netrc[2])
-        except (NetrcParseError, IOError):
-            # If there was a parsing error or a permissions issue reading the file,
-            # we'll just skip netrc auth
-            pass
-
-    # AppEngine hackiness.
-    except (ImportError, AttributeError):
-        pass
-
-
-def guess_filename(obj):
-    """Tries to guess the filename of the given object."""
-    name = getattr(obj, 'name', None)
-    if name and name[0] != '<' and name[-1] != '>':
-        return os.path.basename(name)
-
-
-def from_key_val_list(value):
-    """Take an object and test to see if it can be represented as a
-    dictionary. Unless it can not be represented as such, return an
-    OrderedDict, e.g.,
-
-    ::
-
-        >>> from_key_val_list([('key', 'val')])
-        OrderedDict([('key', 'val')])
-        >>> from_key_val_list('string')
-        ValueError: need more than 1 value to unpack
-        >>> from_key_val_list({'key': 'val'})
-        OrderedDict([('key', 'val')])
-    """
-    if value is None:
-        return None
-
-    if isinstance(value, (str, bytes, bool, int)):
-        raise ValueError('cannot encode objects that are not 2-tuples')
-
-    return OrderedDict(value)
-
-
-def to_key_val_list(value):
-    """Take an object and test to see if it can be represented as a
-    dictionary. If it can be, return a list of tuples, e.g.,
-
-    ::
-
-        >>> to_key_val_list([('key', 'val')])
-        [('key', 'val')]
-        >>> to_key_val_list({'key': 'val'})
-        [('key', 'val')]
-        >>> to_key_val_list('string')
-        ValueError: cannot encode objects that are not 2-tuples.
-    """
-    if value is None:
-        return None
-
-    if isinstance(value, (str, bytes, bool, int)):
-        raise ValueError('cannot encode objects that are not 2-tuples')
-
-    if isinstance(value, collections.Mapping):
-        value = value.items()
-
-    return list(value)
-
-
-# From mitsuhiko/werkzeug (used with permission).
-def parse_list_header(value):
-    """Parse lists as described by RFC 2068 Section 2.
-
-    In particular, parse comma-separated lists where the elements of
-    the list may include quoted-strings.  A quoted-string could
-    contain a comma.  A non-quoted string could have quotes in the
-    middle.  Quotes are removed automatically after parsing.
-
-    It basically works like :func:`parse_set_header` just that items
-    may appear multiple times and case sensitivity is preserved.
-
-    The return value is a standard :class:`list`:
-
-    >>> parse_list_header('token, "quoted value"')
-    ['token', 'quoted value']
-
-    To create a header from the :class:`list` again, use the
-    :func:`dump_header` function.
-
-    :param value: a string with a list header.
-    :return: :class:`list`
-    """
-    result = []
-    for item in _parse_list_header(value):
-        if item[:1] == item[-1:] == '"':
-            item = unquote_header_value(item[1:-1])
-        result.append(item)
-    return result
-
-
-# From mitsuhiko/werkzeug (used with permission).
-def parse_dict_header(value):
-    """Parse lists of key, value pairs as described by RFC 2068 Section 2 and
-    convert them into a python dict:
-
-    >>> d = parse_dict_header('foo="is a fish", bar="as well"')
-    >>> type(d) is dict
-    True
-    >>> sorted(d.items())
-    [('bar', 'as well'), ('foo', 'is a fish')]
-
-    If there is no value for a key it will be `None`:
-
-    >>> parse_dict_header('key_without_value')
-    {'key_without_value': None}
-
-    To create a header from the :class:`dict` again, use the
-    :func:`dump_header` function.
-
-    :param value: a string with a dict header.
-    :return: :class:`dict`
-    """
-    result = {}
-    for item in _parse_list_header(value):
-        if '=' not in item:
-            result[item] = None
-            continue
-        name, value = item.split('=', 1)
-        if value[:1] == value[-1:] == '"':
-            value = unquote_header_value(value[1:-1])
-        result[name] = value
-    return result
-
-
-# From mitsuhiko/werkzeug (used with permission).
-def unquote_header_value(value, is_filename=False):
-    r"""Unquotes a header value.  (Reversal of :func:`quote_header_value`).
-    This does not use the real unquoting but what browsers are actually
-    using for quoting.
-
-    :param value: the header value to unquote.
-    """
-    if value and value[0] == value[-1] == '"':
-        # this is not the real unquoting, but fixing this so that the
-        # RFC is met will result in bugs with internet explorer and
-        # probably some other browsers as well.  IE for example is
-        # uploading files with "C:\foo\bar.txt" as filename
-        value = value[1:-1]
-
-        # if this is a filename and the starting characters look like
-        # a UNC path, then just return the value without quotes.  Using the
-        # replace sequence below on a UNC path has the effect of turning
-        # the leading double slash into a single slash and then
-        # _fix_ie_filename() doesn't work correctly.  See #458.
-        if not is_filename or value[:2] != '\\\\':
-            return value.replace('\\\\', '\\').replace('\\"', '"')
-    return value
-
-
-def dict_from_cookiejar(cj):
-    """Returns a key/value dictionary from a CookieJar.
-
-    :param cj: CookieJar object to extract cookies from.
-    """
-
-    cookie_dict = {}
-
-    for cookie in cj:
-        cookie_dict[cookie.name] = cookie.value
-
-    return cookie_dict
-
-
-def add_dict_to_cookiejar(cj, cookie_dict):
-    """Returns a CookieJar from a key/value dictionary.
-
-    :param cj: CookieJar to insert cookies into.
-    :param cookie_dict: Dict of key/values to insert into CookieJar.
-    """
-
-    cj2 = cookiejar_from_dict(cookie_dict)
-    cj.update(cj2)
-    return cj
-
-
-def get_encodings_from_content(content):
-    """Returns encodings from given content string.
-
-    :param content: bytestring to extract encodings from.
-    """
-
-    charset_re = re.compile(r'<meta.*?charset=["\']*(.+?)["\'>]', flags=re.I)
-    pragma_re = re.compile(r'<meta.*?content=["\']*;?charset=(.+?)["\'>]', flags=re.I)
-    xml_re = re.compile(r'^<\?xml.*?encoding=["\']*(.+?)["\'>]')
-
-    return (charset_re.findall(content) +
-            pragma_re.findall(content) +
-            xml_re.findall(content))
-
-
-def get_encoding_from_headers(headers):
-    """Returns encodings from given HTTP Header Dict.
-
-    :param headers: dictionary to extract encoding from.
-    """
-
-    content_type = headers.get('content-type')
-
-    if not content_type:
-        return None
-
-    content_type, params = cgi.parse_header(content_type)
-
-    if 'charset' in params:
-        return params['charset'].strip("'\"")
-
-    if 'text' in content_type:
-        return 'ISO-8859-1'
-
-
-def stream_decode_response_unicode(iterator, r):
-    """Stream decodes a iterator."""
-
-    if r.encoding is None:
-        for item in iterator:
-            yield item
-        return
-
-    decoder = codecs.getincrementaldecoder(r.encoding)(errors='replace')
-    for chunk in iterator:
-        rv = decoder.decode(chunk)
-        if rv:
-            yield rv
-    rv = decoder.decode(b'', final=True)
-    if rv:
-        yield rv
-
-
-def iter_slices(string, slice_length):
-    """Iterate over slices of a string."""
-    pos = 0
-    while pos < len(string):
-        yield string[pos:pos + slice_length]
-        pos += slice_length
-
-
-def get_unicode_from_response(r):
-    """Returns the requested content back in unicode.
-
-    :param r: Response object to get unicode content from.
-
-    Tried:
-
-    1. charset from content-type
-
-    2. every encodings from ``<meta ... charset=XXX>``
-
-    3. fall back and replace all unicode characters
-
-    """
-
-    tried_encodings = []
-
-    # Try charset from content-type
-    encoding = get_encoding_from_headers(r.headers)
-
-    if encoding:
-        try:
-            return str(r.content, encoding)
-        except UnicodeError:
-            tried_encodings.append(encoding)
-
-    # Fall back:
-    try:
-        return str(r.content, encoding, errors='replace')
-    except TypeError:
-        return r.content
-
-
-# The unreserved URI characters (RFC 3986)
-UNRESERVED_SET = frozenset(
-    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
-    + "0123456789-._~")
-
-
-def unquote_unreserved(uri):
-    """Un-escape any percent-escape sequences in a URI that are unreserved
-    characters. This leaves all reserved, illegal and non-ASCII bytes encoded.
-    """
-    parts = uri.split('%')
-    for i in range(1, len(parts)):
-        h = parts[i][0:2]
-        if len(h) == 2 and h.isalnum():
-            try:
-                c = chr(int(h, 16))
-            except ValueError:
-                raise InvalidURL("Invalid percent-escape sequence: '%s'" % h)
-
-            if c in UNRESERVED_SET:
-                parts[i] = c + parts[i][2:]
-            else:
-                parts[i] = '%' + parts[i]
-        else:
-            parts[i] = '%' + parts[i]
-    return ''.join(parts)
-
-
-def requote_uri(uri):
-    """Re-quote the given URI.
-
-    This function passes the given URI through an unquote/quote cycle to
-    ensure that it is fully and consistently quoted.
-    """
-    # Unquote only the unreserved characters
-    # Then quote only illegal characters (do not quote reserved, unreserved,
-    # or '%')
-    return quote(unquote_unreserved(uri), safe="!#$%&'()*+,/:;=?@[]~")
-
-
-def address_in_network(ip, net):
-    """
-    This function allows you to check if on IP belongs to a network subnet
-    Example: returns True if ip = 192.168.1.1 and net = 192.168.1.0/24
-             returns False if ip = 192.168.1.1 and net = 192.168.100.0/24
-    """
-    ipaddr = struct.unpack('=L', socket.inet_aton(ip))[0]
-    netaddr, bits = net.split('/')
-    netmask = struct.unpack('=L', socket.inet_aton(dotted_netmask(int(bits))))[0]
-    network = struct.unpack('=L', socket.inet_aton(netaddr))[0] & netmask
-    return (ipaddr & netmask) == (network & netmask)
-
-
-def dotted_netmask(mask):
-    """
-    Converts mask from /xx format to xxx.xxx.xxx.xxx
-    Example: if mask is 24 function returns 255.255.255.0
-    """
-    bits = 0xffffffff ^ (1 << 32 - mask) - 1
-    return socket.inet_ntoa(struct.pack('>I', bits))
-
-
-def is_ipv4_address(string_ip):
-    try:
-        socket.inet_aton(string_ip)
-    except socket.error:
-        return False
-    return True
-
-
-def is_valid_cidr(string_network):
-    """Very simple check of the cidr format in no_proxy variable"""
-    if string_network.count('/') == 1:
-        try:
-            mask = int(string_network.split('/')[1])
-        except ValueError:
-            return False
-
-        if mask < 1 or mask > 32:
-            return False
-
-        try:
-            socket.inet_aton(string_network.split('/')[0])
-        except socket.error:
-            return False
-    else:
-        return False
-    return True
-
-
-def should_bypass_proxies(url):
-    """
-    Returns whether we should bypass proxies or not.
-    """
-    get_proxy = lambda k: os.environ.get(k) or os.environ.get(k.upper())
-
-    # First check whether no_proxy is defined. If it is, check that the URL
-    # we're getting isn't in the no_proxy list.
-    no_proxy = get_proxy('no_proxy')
-    netloc = urlparse(url).netloc
-
-    if no_proxy:
-        # We need to check whether we match here. We need to see if we match
-        # the end of the netloc, both with and without the port.
-        no_proxy = no_proxy.replace(' ', '').split(',')
-
-        ip = netloc.split(':')[0]
-        if is_ipv4_address(ip):
-            for proxy_ip in no_proxy:
-                if is_valid_cidr(proxy_ip):
-                    if address_in_network(ip, proxy_ip):
-                        return True
-        else:
-            for host in no_proxy:
-                if netloc.endswith(host) or netloc.split(':')[0].endswith(host):
-                    # The URL does match something in no_proxy, so we don't want
-                    # to apply the proxies on this URL.
-                    return True
-
-    # If the system proxy settings indicate that this URL should be bypassed,
-    # don't proxy.
-    # The proxy_bypass function is incredibly buggy on OS X in early versions
-    # of Python 2.6, so allow this call to fail. Only catch the specific
-    # exceptions we've seen, though: this call failing in other ways can reveal
-    # legitimate problems.
-    try:
-        bypass = proxy_bypass(netloc)
-    except (TypeError, socket.gaierror):
-        bypass = False
-
-    if bypass:
-        return True
-
-    return False
-
-def get_environ_proxies(url):
-    """Return a dict of environment proxies."""
-    if should_bypass_proxies(url):
-        return {}
-    else:
-        return getproxies()
-
-
-def default_user_agent(name="python-requests"):
-    """Return a string representing the default user agent."""
-    _implementation = platform.python_implementation()
-
-    if _implementation == 'CPython':
-        _implementation_version = platform.python_version()
-    elif _implementation == 'PyPy':
-        _implementation_version = '%s.%s.%s' % (sys.pypy_version_info.major,
-                                                sys.pypy_version_info.minor,
-                                                sys.pypy_version_info.micro)
-        if sys.pypy_version_info.releaselevel != 'final':
-            _implementation_version = ''.join([_implementation_version, sys.pypy_version_info.releaselevel])
-    elif _implementation == 'Jython':
-        _implementation_version = platform.python_version()  # Complete Guess
-    elif _implementation == 'IronPython':
-        _implementation_version = platform.python_version()  # Complete Guess
-    else:
-        _implementation_version = 'Unknown'
-
-    try:
-        p_system = platform.system()
-        p_release = platform.release()
-    except IOError:
-        p_system = 'Unknown'
-        p_release = 'Unknown'
-
-    return " ".join(['%s/%s' % (name, __version__),
-                     '%s/%s' % (_implementation, _implementation_version),
-                     '%s/%s' % (p_system, p_release)])
-
-
-def default_headers():
-    return CaseInsensitiveDict({
-        'User-Agent': default_user_agent(),
-        'Accept-Encoding': ', '.join(('gzip', 'deflate')),
-        'Accept': '*/*'
-    })
-
-
-def parse_header_links(value):
-    """Return a dict of parsed link headers proxies.
-
-    i.e. Link: <http:/.../front.jpeg>; rel=front; type="image/jpeg",<http://.../back.jpeg>; rel=back;type="image/jpeg"
-
-    """
-
-    links = []
-
-    replace_chars = " '\""
-
-    for val in value.split(","):
-        try:
-            url, params = val.split(";", 1)
-        except ValueError:
-            url, params = val, ''
-
-        link = {}
-
-        link["url"] = url.strip("<> '\"")
-
-        for param in params.split(";"):
-            try:
-                key, value = param.split("=")
-            except ValueError:
-                break
-
-            link[key.strip(replace_chars)] = value.strip(replace_chars)
-
-        links.append(link)
-
-    return links
-
-
-# Null bytes; no need to recreate these on each call to guess_json_utf
-_null = '\x00'.encode('ascii')  # encoding to ASCII for Python 3
-_null2 = _null * 2
-_null3 = _null * 3
-
-
-def guess_json_utf(data):
-    # JSON always starts with two ASCII characters, so detection is as
-    # easy as counting the nulls and from their location and count
-    # determine the encoding. Also detect a BOM, if present.
-    sample = data[:4]
-    if sample in (codecs.BOM_UTF32_LE, codecs.BOM32_BE):
-        return 'utf-32'     # BOM included
-    if sample[:3] == codecs.BOM_UTF8:
-        return 'utf-8-sig'  # BOM included, MS style (discouraged)
-    if sample[:2] in (codecs.BOM_UTF16_LE, codecs.BOM_UTF16_BE):
-        return 'utf-16'     # BOM included
-    nullcount = sample.count(_null)
-    if nullcount == 0:
-        return 'utf-8'
-    if nullcount == 2:
-        if sample[::2] == _null2:   # 1st and 3rd are null
-            return 'utf-16-be'
-        if sample[1::2] == _null2:  # 2nd and 4th are null
-            return 'utf-16-le'
-        # Did not detect 2 valid UTF-16 ascii-range characters
-    if nullcount == 3:
-        if sample[:3] == _null3:
-            return 'utf-32-be'
-        if sample[1:] == _null3:
-            return 'utf-32-le'
-        # Did not detect a valid UTF-32 ascii-range character
-    return None
-
-
-def except_on_missing_scheme(url):
-    """Given a URL, raise a MissingSchema exception if the scheme is missing.
-    """
-    scheme, netloc, path, params, query, fragment = urlparse(url)
-
-    if not scheme:
-        raise MissingSchema('Proxy URLs must have explicit schemes.')
-
-
-def get_auth_from_url(url):
-    """Given a url with authentication components, extract them into a tuple of
-    username,password."""
-    parsed = urlparse(url)
-
-    try:
-        auth = (unquote(parsed.username), unquote(parsed.password))
-    except (AttributeError, TypeError):
-        auth = ('', '')
-
-    return auth
-
-
-def to_native_string(string, encoding='ascii'):
-    """
-    Given a string object, regardless of type, returns a representation of that
-    string in the native string type, encoding and decoding where necessary.
-    This assumes ASCII unless told otherwise.
-    """
-    out = None
-
-    if isinstance(string, builtin_str):
-        out = string
-    else:
-        if is_py2:
-            out = string.encode(encoding)
-        else:
-            out = string.decode(encoding)
-
-    return out
diff --git a/bundle/requests/utils.pyc b/bundle/requests/utils.pyc
deleted file mode 100644
index 84e19c7..0000000
Binary files a/bundle/requests/utils.pyc and /dev/null differ
diff --git a/channels/NOTE.png b/channels/NOTE.png
new file mode 100644
index 0000000..02c93f4
--- /dev/null
+++ b/channels/NOTE.png
@@ -0,0 +1,2 @@
+PNG files are embedded into .py plugins now,
+into the #png: lines, encoded per `base64`.
diff --git a/channels/__init__.py b/channels/__init__.py
index 39791e2..28d7907 100644
--- a/channels/__init__.py
+++ b/channels/__init__.py
@@ -1,63 +1,784 @@
-#
 # encoding: UTF-8
 # api: streamtuner2
-# title: Plugin handling
-# description: Channels and feature plugins reside in channels/
-# api: python
-# type: R
-# category: core
+# type: class
+# category: ui
+# title: Channel plugins
+# description: Base implementation for channels and feature plugins
+# version: 1.6
+# license: public domain
+# author: mario
+# url: http://fossil.include-once.org/streamtuner2/
+# pack:
+#    bookmarks.py, configwin.py, dirble.py, dnd.py, exportcat.py,
+#    filtermusic.py, global_key.py, history.py, internet_radio.py,
+#    itunes.py, jamendo.py, links.py, live365.py, modarchive.py,
+#    myoggradio.py, pluginmanager2.py, radiobrowser.py, radionomy.py,
+#    radiotray.py, search.py, shoutcast.py, somafm.py, streamedit.py,
+#    surfmusik.py, timer.py, tunein.py, ubuntuusers.py, youtube.py,
+#    useragentswitcher.py, xiph.py, favicon.py, filter_bitrate.py,
+#    ui_cht.py
+# config: -
 # priority: core
 #
+# GenericChannel implements the basic GUI functions and defines
+# the default channel data structure. It implements fallback logic
+# for all other channel implementations. Only `bookmarks` uses it
+# directly.
 #
-#
-#
-#
-#
+# All other plugins don't have a pre-defined Notebook tab in the
+# GtkBuilder description. They derive from ChannelPlugins therefore,
+# which constructs and registers the required gtk widgets manually.
+
 
+import gtk
+from uikit import uikit, ver as gtk_ver
+from config import *
+import ahttp
+import action
+import os.path
+import xml.sax.saxutils
+import re
+import copy
+import inspect
 
-from channels._generic import *
 
-# Only reexport plugin classes
+# Only export plugin classes and a few utility functions
 __all__ = [
-    "GenericChannel", "ChannelPlugin"
+    "GenericChannel", "ChannelPlugin", "use_rx", "mime_fmt",
+    "entity_decode", "strip_tags", "nl", "unhtml", "to_int"
 ]
+__path__.insert(0, conf.dir + "/plugins")
 
 
 
-# Search through ./channels/ and get module basenames.
-# Also order them by conf.channel_order
-#
-def module_list():
+# Generic channel module
+class GenericChannel(object):
+
+    # control attributes
+    meta = { "config": [] }
+    base_url = ""
+    listformat = "pls"
+    audioformat = "audio/mpeg" # fallback value
+    has_search = False
 
-    # find plugin files
-    ls = os.listdir(conf.share + "/channels/")
-    ls = [fn[:-3] for fn in ls if re.match("^[a-z][\w\d_]+\.py$", fn)]
+    # Categories
+    categories = []   # Category names or subcategory groups in [] lists
+    catmap = {}       # Map category names to channel/service-internal ids
+    shown = None      # Just a state flag for .first_show() now
+
+    # Stream list
+    streams = {}      # Station list dict, associates each genre to a list of stream rows
+    
+    # Gtk widgets
+    gtk_list = None   # Gtk widget for station treeview
+    gtk_cat = None    # Gtk widget for category columns
+    ls = None         # ListStore for station treeview
+    rowmap = None     # Preserve streams-datamap
+    pix_entry = None  # ListStore entry that contains favicon
+    img_resize = None  # Rescale `img` references to icon size
+    fixed_size = [24,24]  # Default height+width for favicons
+
+    # mapping of stream{} data into gtk treeview/treestore representation
+    datamap = [
+       # coltitle   width	[ datasrc key, type, renderer, attrs ]	[cellrenderer2], ...
+       ["",		20,	["state",	str,  "pixbuf",	{}],	],
+       ["Genre",	65,	['genre',	str,	"t",	{}],	],
+       ["Station Title",275,	["title",	str,    "text",	{"strikethrough":11, "cell-background":12, "cell-background-set":13}],  ["favicon", gtk.gdk.Pixbuf, "pixbuf", {}], ],
+       ["Now Playing",	185,	["playing",	str,	"text",	{"strikethrough":11}],	],                                                                             #{"width":20, "expand":False}
+       ["Listeners", 	45,	["listeners",	int,	"t",	{"strikethrough":11}],	],
+      #["Max",		45,	["max",		int,	"t",	{}],	],
+       ["Bitrate",	35,	["bitrate",	int,	"t",	{}],	],
+       ["Homepage",	160,	["homepage",	str,	"t",	{"underline":10}],	],
+       [False,		25,	["url",		str,	"t",	{"strikethrough":11}],	],
+       [False,		20,	["format",	str,	None,	{}],	],
+       [False,		0,	["favourite",	bool,	None,	{}],	],
+       [False,		0,	["deleted",	bool,	None,	{}],	],
+       [False,		0,	["search_col",	str,	None,	{}],	],
+       [False,		0,	["search_set",	bool,	None,	{}],	],
+    ]
+    rowmap = []   # [state,genre,title,...] field enumeration still needed separately
+    titles = {}   # For easier adapting of column titles in datamap
+
+    # For empty grouping / categories
+    placeholder = [dict(state="gtk-info", genre="./.", title="Subcategory placeholder", playing="./.", url="none:", listeners=0, bitrate=0, homepage="")]
+    empty_stub = [dict(state="gtk-dialog-error", genre="./.", title="No categories found (website error)", playing="Try Channel→Reload Categories later..", url="none:", listeners=0, bitrate=0, homepage="")]
+    nothing_found = [dict(state="gtk-no", genre="./.", title="No contents found on directory server", playing="Notice", listeners=0, bitrate=0)]
     
-    # resort with tab order
-    order = [module.strip() for module in conf.channel_order.lower().replace(".","_").replace("-","_").split(",")]
-    ls = [module for module in (order) if (module in ls)] + [module for module in (ls) if (module not in order)]
+    # Title to homepage regex
+    rx_www_url = re.compile("""(www(\.\w+[\w-]+){2,}|(\w+[\w-]+[ ]?\.)+(com|FM|net|org|de|PL|fr|uk))""", re.I)
+
+    # Hooks for station list updating 
+    prepare_filters = []      # run prior columns() display
+    postprocess_filters = []  # called after update_streams()
+
+
+    # Keep track of currently selected genre/category
+    __current = None
+    @property
+    def current(self):
+        return self.__current
+    @current.setter
+    def current(self, newcat):
+        log.PROC("{}.current:={} ← from {}".format(self.module, newcat, [inspect.stack()[x][3] for x in range(1,4)]))
+        self.__current = newcat
+        return self.__current
+
+
+    #--------------------------- initialization --------------------------------
+
+
+    # constructor
+    def __init__(self, parent=None):
+    
+        #self.streams = {}
+        self.gtk_list = None
+        self.gtk_cat = None
+        self.module = self.__class__.__name__
+        self.meta = plugin_meta(src = inspect.getcomments(inspect.getmodule(self)))
+        self.config = self.meta.get("config", [])
+        self.title = self.meta.get("title", self.module)
+
+        # add default options values to config.conf.* dict
+        conf.add_plugin_defaults(self.meta, self.module)
+        
+        # Only if streamtuner2 is run in graphical mode        
+        if (parent):
+            # Update/display stream processors
+            if not self.prepare_filters:
+                self.prepare_filters += [
+                    self.prepare_filter_icons,
+                ]
+            if not self.postprocess_filters:
+                self.postprocess_filters += [
+                    self.postprocess_filter_required_fields,
+                    self.postprocess_filter_homepage,
+                ]
+            # Load cache, instantiate Gtk widgets
+            self.cache()
+            self.gui(parent)
+
+        # Stub for ST2 main window / dispatcher
+        else:
+            self.parent = stub_parent(None)
+
+        
+    # initialize Gtk widgets / data objects
+    def gui(self, parent):
+
+        # save reference to main window/glade API
+        self.parent = parent
+        self.gtk_list = parent.get_widget(self.module+"_list")
+        self.gtk_cat = parent.get_widget(self.module+"_cat")
+        
+        # last category, and prepare genre tree
+        self.current = conf.state(self.module).get("current")
+        self.display_categories()
+
+        # update column names
+        for field,title in list(self.titles.items()):
+            self.update_datamap(field, title=title)
+        
+        # Initialize stations TreeView
+        self.columns([])
+        
+        # add to main menu
+        uikit.add_menu([parent.channelmenuitems], self.meta["title"], lambda w: parent.channel_switch_by_name(self.module) or 1)
+
+
+    # Just wraps uikit.columns() to retain liststore, rowmap and pix_entry
+    def columns(self, entries=None):
+        self.ls, self.rowmap, self.pix_entry = uikit.columns(
+            self.gtk_list, self.datamap, entries,
+            show_favicons=True, fixed_size=self.fixed_size
+        )
+        # no longer using `conf.show_favicons`
+
+
+    # Statusbar stub (defers to parent/main window, if in GUI mode)
+    def status(self, *args, **kw):
+        if self.parent: self.parent.status(*args, **kw)
+        else: log.INFO("status():", *v)
+
+
+        
+    #--------------------- streams/model data accesss ---------------------------
+
+
+    # Traverse category TreeModel to set current, expand parent nodes
+    def select_current(self, name):
+        log.UI("reselect .current category in treelist:", name)
+        model = self.gtk_cat.get_model()
+           # [Gtk3] Warning: g_object_ref_sink: assertion 'object->ref_count >= 1' failed
+           # ERROR:../../gi/pygobject.c:688:pygobject_register_wrapper: assertion failed: (gself->obj->ref_count >= 1)
+        iter = model.get_iter_first()
+        self.iter_cats(name, model, iter)
+
+    # Iterate over children to find current category
+    def iter_cats(self, name, model, iter):
+        while iter:
+            val = model.get_value(iter, 0)
+            if val == name:
+                #log.UI("FOUND CATEGORY", name, "→select")
+                self.gtk_cat.get_selection().select_iter(iter)
+                self.gtk_cat.set_cursor(model.get_path(iter))
+                self.gtk_cat.scroll_to_cell(model.get_path(iter), None)
+                return True
+            if model.iter_has_child(iter):
+                found = self.iter_cats(name, model, model.iter_children(iter))
+                if found:
+                    self.gtk_cat.expand_row(model.get_path(iter), 0)
+                    return True
+            iter = model.iter_next(iter)
+        
+    # Selected category (current state from Gtk TreeModel)
+    def currentcat(self):
+        (model, iter) = self.gtk_cat.get_selection().get_selected()
+        if (type(iter) == gtk.TreeIter):
+            self.current = model.get_value(iter, 0)
+        return self.current
+        
+    # Get list of stations in current category
+    def stations(self):
+        return self.streams.get(self.current, [])
+
+    # Convert ListStore iter to row number
+    def rowno(self):
+        (model, iter) = self.model_iter()
+        return model.get_path(iter)[0]
+
+    # Return ListStore object and Iterator for currently selected row in gtk.TreeView station list
+    def model_iter(self):
+        return self.gtk_list.get_selection().get_selected()
+
+    # Currently selected entry in stations list, return complete data dict
+    def row(self):
+        return self.stations() [self.rowno()]
+        
+    # Fetches a single varname from currently selected station entry
+    def selected(self, name="url"):
+        return self.row().get(name)
+    
+    # Inject status icon into currently selected row (used by main.bookmark() call)
+    def row_icon(self, gtkIcon = gtk.STOCK_ABOUT):
+        try:
+            # Updates gtk_list store, set icon in current display.
+            # Since it is used by bookmarks, would be reshown with next display() anyhow,
+            # and there's no need to invalidate the ls cache, because that's referenced by model anyhow.
+            (model,iter) = self.model_iter()
+            model.set_value(iter, 0, gtkIcon)
+        except Exception as e:
+            log.ERR_UIKIT("Couldn't set row_icon()", e)
+
+    
+
+    #------------------------ base implementations -----------------------------
+
+
+    # Read previous channel/stream data, if there's any
+    def cache(self):
+        # stream list
+        cache = conf.load("cache/" + self.module)
+        if (cache):
+            self.streams = cache
+        # categories
+        cache = conf.load("cache/categories_" + self.module)
+        if (cache):
+            self.categories = cache
+        # catmap (optional)
+        cache = conf.load("cache/catmap_" + self.module)
+        if (cache):
+            self.catmap = cache
+        pass
+
+    # Store current streams data
+    def save(self):
+        conf.save("cache/" + self.module, self.streams, gz=1)
+
+        
+    # Create private copy of .datamap and modify entries (title= rewrites)
+    def update_datamap(self, search="name", title=None):
+        if self.datamap == GenericChannel.datamap:
+            self.datamap = copy.deepcopy(self.datamap)
+        for i,row in enumerate(self.datamap):
+            if row[2][0] == search:
+                row[0] = title
+
+
+    # Reload current station list
+    def reload(self):
+        self.load(self.current, force=1)
+    def switch(self):
+        self.load(self.current, force=0)
+    
+    # Update streams pane if currently selected (used by bookmarks.links channel)
+    def reload_if_current(self, category):
+        if self.current == category:
+            self.reload()
+
+
+    # Called on switching genre/category, or loading a genre for the first time.
+    # Either fetches new stream data, or displays list from cache.
+    def load(self, category, force=False, y=None):
+
+        # called to early
+        if not category:
+            log.ERR("load(None)")
+            return
+        self.current = category
+        do_save = False
+
+        # get data from cache or download
+        if force or not category in self.streams:
+            log.PROC("load", "update_streams")
+            self.status("Updating streams...")
+            self.status(-0.1)
+            if category == "empty":
+                new_streams = self.empty_stub
+            else:
+                new_streams = self.update_streams(category)
+  
+            # Postprocess new list of streams (e.g. assert existing title and url)
+            if new_streams:
+                try:
+                    new_streams = self.postprocess(new_streams)
+                    do_save = True
+                except Exception as e:
+                    log.ERR("Updating new streams, postprocessing failed:", e)
+  
+                # don't lose forgotten streams
+                if conf.retain_deleted:
+                   self.streams[category] = new_streams + self.deleted_streams(new_streams, self.streams.get(category,[]))
+                else:
+                   self.streams[category] = new_streams
+  
+            else:
+                # parse error
+                self.status("Category parsed empty.")
+                self.streams[category] = self.nothing_found
+                log.INFO("Oooops, parser returned nothing for category " + category)
+                
+        # Update treeview/model (if category is still selected)
+        if self.current == category:
+            log.UI("load() → uikit.columns({}.streams[{}])".format(self.module, category), [inspect.stack()[x][3] for x in range(1,5)])
+            uikit.do(self.columns, self.prepare(self.streams[category]))
+            if y:
+                uikit.do(self.gtk_list.scroll_to_point, 0, y + 1)   # scroll to previous position, +1 px, because
+                # somehow Gtk.TreeView else stumbles over itself when scrolling to the same position the 2nd time
+  
+        # save in cache
+        if do_save:
+            self.save()
+
+        # unset statusbar
+        self.status()
+
+        
+    # Called occasionally (by some plugins) while updating station list
+    def update_streams_partially_done(self, entries):
+        if gtk_ver == 3 and not conf.nothreads:
+            pass
+        else:  # kills Gtk3 too easily
+            uikit.do(self.columns, entries)
+    # Prepare stream list for display (called immediataly before .columns() refreshing)
+    def prepare(self, streams):
+        for f in self.prepare_filters:
+            map(f, streams)
+        return streams
+
+    # state icon: bookmark star, or deleted mark
+    def prepare_filter_icons(self, row):
+        if conf.show_bookmarks:
+            # and "bookmarks" in self.parent.channels:
+            row["favourite"] = self.parent.bookmarks.is_in(row.get("url", "file:///tmp/none"))
+            # this should really go into bookmarks plugin itself,
+            # disadvantage: would decelerate processing loop further
+        if not row.get("state"):
+            if row.get("favourite"):
+                row["state"] = gtk.STOCK_ABOUT
+            if row.get("deleted"):
+                row["state"] = gtk.STOCK_DELETE
+
+
+    # Stream list cleanup - invoked directly after reload(),
+    # callbacks can remove entries, or just update fields.
+    def postprocess(self, streams):
+        for f in self.postprocess_filters:
+            streams = [row for row in streams if f(row, self)]
+        return streams
+
+    # Filter entries without title or url
+    def postprocess_filter_required_fields(self, row, channel):
+        return not len(set(["", None]) & set([row.get("title"), row.get("url")]))
+
+    # Deduce homepage URLs from title
+    # by looking for www.xyz.com domain names
+    def postprocess_filter_homepage(self, row, channel):
+        if not row.get("homepage"):
+            url = self.rx_www_url.search(row.get("title", ""))
+            if url:
+                url = url.group(0).lower().replace(" ", "")
+                url = (url if url.find("www.") == 0 else "www."+url)
+                row["homepage"] = ahttp.fix_url(url)
+        return True
+
+
+    # Finds differences in new/old streamlist, marks deleted with flag
+    def deleted_streams(self, new, old):
+        diff = []
+        new = [row.get("url","http://example.com/") for row in new]
+        for row in old:
+            if ("url" in row and (row.get("url") not in new)):
+                row["deleted"] = 1
+                diff.append(row)
+        return diff
 
-    return ls
 
+        
+    # Display .current category, once notebook/channel tab is first opened
+    def first_show(self):
 
-# Parse plugin comment blocks.
+        # Already processed
+        if (self.shown == 55555):
+            return
+        log.PROC(self.module, "→ first_show()", ", current=", self.current, ", categories=", len(self.categories))
+    
+        # if category tree is empty, initialize it
+        if not self.categories:
+            log.PROC(self.module, "→ first_show() → reload_categories()");
+            try:
+                self.reload_categories()
+            except:
+                log.ERR("HTTP error or extraction failure.")
+                self.categories = ["empty"]
+            self.display_categories()
+
+        # Select first category
+        if not self.current:
+            log.STAT(self.module, "→ first_show(); use first category as current =", self.current)
+            self.current = self.str_from_struct(self.categories) or None
+
+        # put selection/cursor on last position
+        if True:
+            uikit.do(self.select_current, self.current)
+
+        # Show current category in any case
+        log.UI(self.module, "→ first_show(); station list → load(", self.current, ")")
+        self.load(self.current)
+            
+        # Invoke only once
+        self.shown = 55555
+
+
+    # Retrieve first list value, or key from dict (-- used to get first category on init)
+    def str_from_struct(self, d):
+        if isinstance(d, (str)):
+            return d
+        elif isinstance(d, (dict)):
+            return self.str_from_struct(d.keys()) or self.str_from_struct(d.values())
+        elif isinstance(d, (list, tuple)):
+            return d[0] if len(d) else None
+
+
+    # Update categories, save, and display                
+    def reload_categories(self):
+    
+        # get data and save
+        self.update_categories()
+        if self.categories:
+            conf.save("cache/categories_"+self.module, self.categories)
+        if self.catmap:
+            conf.save("cache/catmap_" + self.module, self.catmap);
+
+        # display outside of this non-main thread
+        uikit.do(self.display_categories)
+
+
+    # Refresh category treeview
+    def display_categories(self):
+        log.UI("{}.display_categories(), uikit.tree(#{}), expand_all(#<20), select_current(={})".format(self.module, len(self.categories), self.current))
+    
+        # rebuild gtk.TreeView
+        uikit.tree(self.gtk_cat, self.categories, title="Category", icon=gtk.STOCK_OPEN)
+
+        # if it's a short list of categories, there's probably subfolders
+        if len(self.categories) < 20:
+            self.gtk_cat.expand_all()
+            
+        # Select last .current or any first element
+        if self.current:
+            uikit.do(self.select_current, self.current)
+            #self.currentcat()
+        #else: self.gtk_cat.get_selection().select_path("0") #set_cursor
+
+            
+
+    
+    # Insert/append new station rows - used by importing/drag'n'drop plugins
+    def insert_rows(self, rows, y=None):
+        streams = self.streams[self.current]
+        tv = self.gtk_list
+        
+        # Inserting at correct row requires deducing index from dnd `y` position
+        if y is not None:
+            i_pos = (tv.get_path_at_pos(10, y) or [[len(streams) + 1]])[0][0]
+            for row in rows:
+                streams.insert(i_pos - 1, row)
+                i_pos = i_pos + 1
+        else:
+            streams += rows
+
+        # Now appending to the liststore directly would be even nicer
+        y = int(tv.get_vadjustment().get_value())
+        self.load(self.current, y=y)
+
+
+
+
+
+    #--------------------------- actions ---------------------------------
+
+    # Invoke action.play() for current station.
+    # Can be overridden to provide channel-specific "play" alternative
+    def play(self):
+        row = self.row()
+        if row and "url" in row:
+            # playlist and audio type
+            audioformat = row.get("format", self.audioformat)
+            listformat = row.get("listformat", self.listformat)
+            # invoke audio player
+            action.play(row, audioformat, listformat)
+        else:
+            self.status("No station selected for playing.")
+        return row
+
+    # Start streamripper/youtube-dl/etc
+    def record(self):
+        row = self.row()
+        if row and "url" in row:
+            audioformat = row.get("format", self.audioformat)
+            listformat = row.get("listformat", self.listformat)
+            action.record(row, audioformat, listformat)
+        return row
+
+
+
+    
+
+        
+    
+
+
+
+
+
+
+
+
+# channel plugin without glade-pre-defined notebook tab
 #
-def module_meta():
-    meta = {}
+class ChannelPlugin(GenericChannel):
+
+    module = "abstract"
+
+    def gui(self, parent):
+
+        if not parent:
+            return
+
+        module = self.__class__.__name__
+        # two panes
+        vbox = gtk.HPaned()
+        vbox.show()
+        # category treeview
+        sw1 = gtk.ScrolledWindow()
+        sw1.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+        sw1.set_property("width_request", 150)
+        sw1.show()
+        tv1 = gtk.TreeView()
+        tv1.set_property("width_request", 75)
+        tv1.set_property("enable_tree_lines", True)
+        uikit.tree_column(tv1, "Category")
+        tv1.connect("button_release_event", parent.on_category_clicked)
+        tv1.show()
+        sw1.add(tv1)
+        vbox.pack1(sw1, resize=False, shrink=True)
+        # stream list
+        sw2 = gtk.ScrolledWindow()
+        sw2.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+        sw2.show()
+        tv2 = gtk.TreeView()
+        tv2.set_property("width_request", 200)
+        tv2.set_property("enable_tree_lines", True)
+        tv2.connect("row_activated", parent.on_play_clicked)
+        tv2.show()
+        sw2.add(tv2)
+        vbox.pack2(sw2, resize=True, shrink=True)
+
+        # prepare label
+        pixbuf = None
+        if "png" in self.meta:
+            pixbuf = uikit.pixbuf(self.meta["png"])
+        else:
+            png = get_data("channels/" + self.module + ".png")
+            pixbuf = uikit.pixbuf(png)
+        if pixbuf:
+            icon = gtk.image_new_from_pixbuf(pixbuf)
+        else:
+            icon = gtk.image_new_from_stock(gtk.STOCK_DIRECTORY, size=1)
+        label = gtk.HBox()
+        label.pack_start(icon, expand=False, fill=True)
+        l = gtk.Label(self.meta.get("title", self.module))
+        if self.meta.get("color"):
+            l = uikit.bg(l, self.meta["color"])
+        label.pack_start(l, expand=True, fill=True)
+            
+        # pack it into an event container to catch double-clicks
+        ev_label = gtk.EventBox()
+        ev_label.add(label)
+        ev_label.connect('event', parent.on_homepage_channel_clicked)
+        plain_label = gtk.Label(self.module)
+
+        # to widgets
+        self.gtk_cat = tv1
+        parent.widgets[module + "_cat"] = tv1
+        self.gtk_list = tv2
+        parent.widgets[module + "_list"] = tv2
+        ev_label.show_all()
+        vbox.show_all()
+        parent.widgets["v_" + module] = vbox
+        parent.widgets["c_" + module] = ev_label
+        tv2.connect('button-press-event', parent.station_context_menu)
+
+
+        # try to initialize superclass now, before adding to channel tabs
+        GenericChannel.gui(self, parent)
+
+        # add notebook tab
+        tab = parent.notebook_channels.insert_page_menu(vbox, ev_label, plain_label, -1)
+        parent.notebook_channels.set_tab_reorderable(vbox, True)
+
+
+
+# WORKAROUND for direct channel module imports,
+# eases instantiations without GUI a little,
+# reducing module dependencies (conf. / ahttp. / channels. / parent.) would be better
+def stub_parent(object):
+    def __setattr__(self, name, value):
+        pass
+    def __getattr__(self, name):
+        return lambda *x: None
+    def status(self, *x):
+        pass
+
+
+# Decorator
+def use_rx(func):
+    def try_both(*args, **kwargs):
+        for method, use_rx in [("RX", not conf.pyquery), ("PQ", conf.pyquery)]:
+            try:
+                log.STAT(method)
+                return func(*args, use_rx=not conf.pyquery, **kwargs)
+            except Exception as e:
+                log.ERR("{} extraction failed:".format(method), e)
+                continue
+        return []
+    return try_both
+
+
+
+#---------------- utility functions -------------------
+# Used by raw page extraction in channel modules
+
+
+# Strip html <tags> from string
+def strip_tags(s):
+    return re.sub("<.+?>", "", s)
+
+# remove SGML/XML entities
+def entity_decode(str):
+    return re.sub('&(#?(x?))(\w+);', _entity, str)
+def _entity(sym):
+    num, hex, name = sym.groups()
+    if hex:
+        return unichr(int(name, base=16))
+    elif num:
+        return unichr(int(name))
+    else:
+        return unichr(htmlentitydefs_n2cp[name])
+
+# Nay for the Py3 raft
+htmlentitydefs_n2cp = {'aring': 229, 'gt': 62, 'sup': 8835, 'Ntilde': 209, 'upsih': 978, 'Yacute': 221,
+'Atilde': 195, 'radic': 8730, 'otimes': 8855, 'aelig': 230, 'Psi': 936, 'Uuml': 220, 'Epsilon': 917, 'Icirc':
+206, 'Eacute': 201, 'Lambda': 923, 'Prime': 8243, 'Kappa': 922, 'sigmaf': 962, 'lrm': 8206, 'cedil': 184,
+'kappa': 954, 'AElig': 198, 'prime': 8242, 'Tau': 932, 'lceil': 8968, 'dArr': 8659, 'ge': 8805, 'sdot': 8901,
+'lfloor': 8970, 'lArr': 8656, 'Auml': 196, 'brvbar': 166, 'Otilde': 213, 'Theta': 920, 'Pi': 928, 'OElig': 338,
+'Scaron': 352, 'egrave': 232, 'sub': 8834, 'iexcl': 161, 'ordf': 170, 'sum': 8721, 'ntilde': 241, 'atilde':
+227, 'theta': 952, 'nsub': 8836, 'hArr': 8660, 'Oslash': 216, 'THORN': 222, 'yuml': 255, 'Mu': 924, 'thinsp':
+8201, 'ecirc': 234, 'bdquo': 8222, 'Aring': 197, 'nabla': 8711, 'permil': 8240, 'Ugrave': 217, 'eta': 951,
+'Agrave': 192, 'forall': 8704, 'eth': 240, 'rceil': 8969, 'iuml': 239, 'Egrave': 200, 'divide': 247, 'igrave':
+236, 'otilde': 245, 'pound': 163, 'frasl': 8260, 'ETH': 208, 'lowast': 8727, 'chi': 967, 'Aacute': 193, 'cent':
+162, 'Beta': 914, 'perp': 8869, 'there4': 8756, 'pi': 960, 'empty': 8709, 'euml': 235, 'notin': 8713, 'uuml':
+252, 'icirc': 238, 'bull': 8226, 'upsilon': 965, 'Oacute': 211, 'ensp': 8194, 'ccedil': 231, 'cap': 8745, 'mu':
+956, 'deg': 176, 'tau': 964, 'emsp': 8195, 'hellip': 8230, 'ucirc': 251, 'ugrave': 249, 'cong': 8773, 'Iota':
+921, 'quot': 34, 'rarr': 8594, 'Rho': 929, 'uacute': 250, 'acirc': 226, 'sim': 8764, 'phi': 966, 'diams': 9830,
+'Euml': 203, 'Ccedil': 199, 'Eta': 919, 'Gamma': 915, 'euro': 8364, 'thetasym': 977, 'sect': 167, 'ldquo':
+8220, 'hearts': 9829, 'oacute': 243, 'zwnj': 8204, 'yen': 165, 'ograve': 242, 'Chi': 935, 'trade': 8482, 'xi':
+958, 'nbsp': 160, 'tilde': 732, 'lsaquo': 8249, 'oelig': 339, 'equiv': 8801, 'le': 8804, 'auml': 228, 'cup':
+8746, 'Yuml': 376, 'lt': 60, 'Upsilon': 933, 'ndash': 8211, 'yacute': 253, 'real': 8476, 'psi': 968, 'rsaquo':
+8250, 'darr': 8595, 'Alpha': 913, 'not': 172, 'amp': 38, 'oslash': 248, 'acute': 180, 'zwj': 8205, 'laquo':
+171, 'rdquo': 8221, 'Igrave': 204, 'micro': 181, 'shy': 173, 'supe': 8839, 'szlig': 223, 'clubs': 9827,
+'agrave': 224, 'Ocirc': 212, 'harr': 8596, 'larr': 8592, 'frac12': 189, 'prop': 8733, 'circ': 710, 'ocirc':
+244, 'asymp': 8776, 'uml': 168, 'prod': 8719, 'reg': 174, 'rlm': 8207, 'infin': 8734, 'Sigma': 931, 'mdash':
+8212, 'uarr': 8593, 'times': 215, 'rArr': 8658, 'or': 8744, 'gamma': 947, 'lambda': 955, 'rang': 9002, 'sup3':
+179, 'dagger': 8224, 'Ouml': 214, 'image': 8465, 'alefsym': 8501, 'sube': 8838, 'alpha': 945, 'Nu': 925,
+'plusmn': 177, 'sup1': 185, 'sup2': 178, 'frac34': 190, 'oline': 8254, 'Delta': 916, 'loz': 9674, 'iota': 953,
+'iacute': 237, 'para': 182, 'ordm': 186, 'epsilon': 949, 'weierp': 8472, 'part': 8706, 'delta': 948, 'omicron':
+959, 'copy': 169, 'Iuml': 207, 'Xi': 926, 'Dagger': 8225, 'Ograve': 210, 'Ucirc': 219, 'scaron': 353, 'lsquo':
+8216, 'isin': 8712, 'Zeta': 918, 'minus': 8722, 'and': 8743, 'ang': 8736, 'curren': 164, 'int': 8747, 'rfloor':
+8971, 'crarr': 8629, 'exist': 8707, 'oplus': 8853, 'Acirc': 194, 'piv': 982, 'ni': 8715, 'Phi': 934, 'Iacute':
+205, 'Uacute': 218, 'Omicron': 927, 'ne': 8800, 'iquest': 191, 'sbquo': 8218, 'Ecirc': 202, 'zeta': 950,
+'Omega': 937, 'nu': 957, 'macr': 175, 'frac14': 188, 'aacute': 225, 'uArr': 8657, 'beta': 946, 'fnof': 402,
+'rho': 961, 'eacute': 233, 'omega': 969, 'middot': 183, 'lang': 9001, 'spades': 9824, 'rsquo': 8217, 'thorn':
+254, 'ouml': 246, 'raquo': 187, 'sigma': 963, 'apos': 39}
 
-    rx_meta = re.compile(r"""^#\s*(\w+):\s*(.+)$""", re.M)
 
-    # Loop through all existing module.py scripts
-    for name in module_list():
-       meta[name] = dict(title="", type="", description="")
+# Extracts integer from string
+def to_int(s):
+    i = re.findall("\d+", s) or [0]
+    return int(i[0])
 
-       # Read and regex-extract into dict
-       with open("%s/channels/%s.py" % (conf.share, name)) as f:
-           for field in re.findall(rx_meta, f.read(1024)):
-               meta[name][field[0]] = field[1]
+# Strip newlines
+rx_spc = re.compile("\s+")
+def nl(str):
+    return rx_spc.sub(" ", str).strip()
 
-    return meta
+# Combine html tag, escapes and whitespace cleanup
+def unhtml(str):
+    return nl(entity_decode(strip_tags(str)))
 
 
+# Convert audio format nick/shortnames to mime types, e.g. "OGG" to "audio/ogg"
+# (only used by few plugin meanwhile, could be merged with action. module now)
+def mime_fmt(s):
+    # clean string
+    s = s.lower().strip()
+    # rename
+    map = {
+        "audio/mp3":"audio/mpeg",  # Note the real mime type is /mpeg, but /mp3 is more understandable in the GUI
+        "ogg":"ogg", "ogm":"ogg", "xiph":"ogg", "vorbis":"ogg", "vnd.xiph.vorbis":"ogg",
+        "mp3":"mpeg", "mp":"mpeg", "mp2":"mpeg", "mpc":"mpeg", "mps":"mpeg",
+        "aac+":"aac", "aacp":"aac",
+        "realaudio":"x-pn-realaudio", "real":"x-pn-realaudio", "ra":"x-pn-realaudio", "ram":"x-pn-realaudio", "rm":"x-pn-realaudio",
+        # yes, we do video
+        "flv":"video/flv", "mp4":"video/mp4",
+    }
+    #map.update(action.listfmt_t)   # list type formats (.m3u .pls and .xspf)
+    if map.get(s):
+        s = map[s]
+    # add prefix:
+    if s.find("/") < 1:
+        s = "audio/" + s
+    #
+    return s
 
 
diff --git a/channels/_generic.py b/channels/_generic.py
deleted file mode 100644
index 1335b34..0000000
--- a/channels/_generic.py
+++ /dev/null
@@ -1,583 +0,0 @@
-#
-# encoding: UTF-8
-# api: streamtuner2
-# type: internal
-# category: ui
-# title: channel objects
-# description: base functionality for channel modules
-# version: 1.1
-# author: mario
-# license: public domain
-# priority: core
-#
-#
-#  GenericChannel implements the basic GUI functions and defines
-#  the default channel data structure. It implements base and
-#  fallback logic for all other channel implementations.
-#
-#  Built-in channels derive directly from generic. Additional
-#  channels don't have a pre-defined Notebook tab in the glade
-#  file. They derive from the ChannelPlugins class instead, which
-#  adds the required gtk Widgets manually.
-#
-
-
-import gtk
-from mygtk import mygtk
-from config import conf, __print__, dbg
-import ahttp as http
-import action
-import favicon
-import os.path
-import xml.sax.saxutils
-import re
-import copy
-
-
-# dict==object
-class struct(dict):
-        def __init__(self, *xargs, **kwargs):
-                self.__dict__ = self
-                self.update(kwargs)
-                [self.update(x) for x in xargs]
-        pass
-
-
-# generic channel module                            ---------------------------------------
-class GenericChannel(object):
-
-        # desc
-        module = "generic"
-        title = "GenericChannel"
-        homepage = "http://fossil.include-once.org/streamtuner2/"
-        base_url = ""
-        listformat = "audio/x-scpls"
-        audioformat = "audio/mpeg" # fallback value
-        config = []
-        has_search = False
-
-        # categories
-        categories = ["empty", ]
-        catmap = {}
-        current = ""
-        default = "empty"
-        shown = None     # last selected entry in stream list, also indicator if notebook tab has been selected once / stream list of current category been displayed yet
-
-        # gui + data
-        streams = {}      #meta information dicts
-        liststore = {}    #gtk data structure
-        gtk_list = None   #gtk widget
-        gtk_cat = None    #gtk widget
-
-        # mapping of stream{} data into gtk treeview/treestore representation
-        datamap = [
-           # coltitle   width	[ datasrc key, type, renderer, attrs ]	[cellrenderer2], ...
-           ["",		20,	["state",	str,  "pixbuf",	{}],	],
-           ["Genre",	65,	['genre',	str,	"t",	{}],	],
-           ["Station Title",275,["title",	str,    "text",	{"strikethrough":11, "cell-background":12, "cell-background-set":13}],  ["favicon", gtk.gdk.Pixbuf, "pixbuf", {}], ],
-           ["Now Playing",185,	["playing",	str,	"text",	{"strikethrough":11}],	],                                                                             #{"width":20}
-           ["Listeners", 45,	["listeners",	int,	"t",	{"strikethrough":11}],	],
-          #["Max",	45,	["max",		int,	"t",	{}],	],
-           ["Bitrate",	35,	["bitrate",	int,	"t",	{}],	],
-           ["Homepage",	160,	["homepage",	str,	"t",	{"underline":10}],	],
-           [False,	25,	["url",		str,	"t",	{"strikethrough":11}],	],
-           [False,	0,	["format",	str,	None,	{}],	],
-           [False,	0,	["favourite",	bool,	None,	{}],	],
-           [False,	0,	["deleted",	bool,	None,	{}],	],
-           [False,	0,	["search_col",	str,	None,	{}],	],
-           [False,	0,	["search_set",	bool,	None,	{}],	],
-        ]
-        rowmap = []   # [state,genre,title,...] field enumeration still needed separately
-        titles = {}   # for easier adapting of column titles in datamap
-        
-        # regex            
-        rx_www_url = re.compile("""(www(\.\w+[\w-]+){2,}|(\w+[\w-]+[ ]?\.)+(com|FM|net|org|de|PL|fr|uk))""", re.I)
-
-
-        # constructor
-        def __init__(self, parent=None):
-        
-            #self.streams = {}
-            self.gtk_list = None
-            self.gtk_cat = None
-
-            # only if streamtuner2 is run in graphical mode        
-            if (parent):
-                self.cache()
-                self.gui(parent)
-            pass
-            
-            
-        # called before application shutdown
-        # some plugins might override this, to save their current streams[] data
-        def shutdown(self):
-            pass
-        #__del__ = shutdown
-            
-            
-        # returns station entries from streams[] for .current category
-        def stations(self):
-            return self.streams.get(self.current, [])
-        def rowno(self):
-            pass
-        def row(self):
-            pass
-        
-
-        # read previous channel/stream data, if there is any
-        def cache(self):
-            # stream list
-            cache = conf.load("cache/" + self.module)
-            if (cache):
-                self.streams = cache
-            # categories
-            cache = conf.load("cache/categories_" + self.module)
-            if (cache):
-                self.categories = cache
-            # catmap (optional)
-            cache = conf.load("cache/catmap_" + self.module)
-            if (cache):
-                self.catmap = cache
-            pass
-
-            
-        # initialize Gtk widgets / data objects
-        def gui(self, parent):
-            #print(self.module + ".gui()")
-
-            # save reference to main window/glade API
-            self.parent = parent
-            self.gtk_list = parent.get_widget(self.module+"_list")
-            self.gtk_cat = parent.get_widget(self.module+"_cat")
-            
-            # category tree
-            self.display_categories()
-            #mygtk.tree(self.gtk_cat, self.categories, title="Category", icon=gtk.STOCK_OPEN);
-            
-            # update column names
-            for field,title in list(self.titles.items()):
-                self.update_datamap(field, title=title)
-            
-            # prepare stream list
-            if (not self.rowmap):
-                for row in self.datamap:
-                    for x in range(2, len(row)):
-                        self.rowmap.append(row[x][0])
-
-            # load default category
-            if (self.current):
-                self.load(self.current)
-            else:
-                mygtk.columns(self.gtk_list, self.datamap, [])
-                
-            # add to main menu
-            mygtk.add_menu(parent.channelmenuitems, self.title, lambda w: parent.channel_switch(w, self.module) or 1)
-            
-            
-        # make private copy of .datamap and modify field (title= only ATM)
-        def update_datamap(self, search="name", title=None):
-            if self.datamap == GenericChannel.datamap:
-                self.datamap = copy.deepcopy(self.datamap)
-            for i,row in enumerate(self.datamap):
-                if row[2][0] == search:
-                    row[0] = title
-
-
-        # switch stream category,
-        # load data,
-        # update treeview content
-        def load(self, category, force=False):
-        
-            # get data from cache or download
-            if (force or not category in self.streams):
-                __print__(dbg.PROC, "load", "update_streams")
-                self.parent.status("Updating streams...")
-                self.parent.status(-0.1)
-                new_streams = self.update_streams(category)
-      
-                if new_streams:
-
-                    # check and modify entry;
-                    # assert that title and url are present
-                    modified = []
-                    for row in new_streams:
-                        if len(set(["", None]) & set([row.get("title"), row.get("url")])):
-                            continue
-                        try:
-                            modified.append( self.postprocess(row) )
-                        except Exception as e:
-                            __print__(e, dbg.ERR, row)
-                    new_streams = modified
-      
-                    # don't lose forgotten streams
-                    if conf.retain_deleted:
-                       self.streams[category] = new_streams + self.deleted_streams(new_streams, self.streams.get(category,[]))
-                    else:
-                       self.streams[category] = new_streams
-      
-                    # save in cache
-                    self.save()
-      
-                    # invalidate gtk list cache
-                    #if (self.liststore.has_key(category)):
-                    #    del self.liststore[category]
-      
-                else:
-                    # parse error
-                    self.parent.status("category parsed empty.")
-                    self.streams[category] = [{"title":"no contents found on directory server","bitrate":0,"max":0,"listeners":0,"playing":"error","favourite":0,"deleted":0}]
-                    __print__(dbg.ERR, "Oooops, parser returned nothing for category " + category)
-                    
-            # assign to treeview model
-            #self.streams[self.default] = []
-            #if (self.liststore.has_key(category)):  # was already loded before
-            #    self.gtk_list.set_model(self.liststore[category])
-            #else:   # currently list is new, had not been converted to gtk array before
-            #    self.liststore[category] = \
-            mygtk.do(lambda:mygtk.columns(self.gtk_list, self.datamap, self.prepare(self.streams[category])))
-
-            # set pointer
-            self.current = category
-            self.parent.status("")
-            self.parent.status(1.0)
-            pass
-            
-        # store current streams data
-        def save(self):
-            conf.save("cache/" + self.module, self.streams, gz=1)
-
-
-        # called occasionally while retrieving and parsing
-        def update_streams_partially_done(self, entries):
-            mygtk.do(lambda: mygtk.columns(self.gtk_list, self.datamap, entries))
-
-            
-        # finds differences in new/old streamlist, marks deleted with flag
-        def deleted_streams(self, new, old):
-            diff = []
-            new = [row.get("url","http://example.com/") for row in new]
-            for row in old:
-                if ("url" in row and (row.get("url") not in new)):
-                    row["deleted"] = 1
-                    diff.append(row)
-            return diff
-
-        
-        # prepare data for display
-        #
-        #  - favourite icon
-        #  - or deleted icon
-        #
-        def prepare(self, streams):
-            #__print__(dbg.PROC, "prepare", streams)
-
-            for i,row in enumerate(streams):
-                                            # oh my, at least it's working
-                                            # at start the bookmarks module isn't fully registered at instantiation in parent.channels{} - might want to do that step by step rather
-                                            # then display() is called too early to take effect - load() & co should actually be postponed to when a notebook tab gets selected first
-                                            # => might be fixed now, 1.9.8
-                # state icon: bookmark star
-                if (conf.show_bookmarks and "bookmarks" in self.parent.channels and self.parent.bookmarks.is_in(streams[i].get("url", "file:///tmp/none"))):
-                    streams[i]["favourite"] = 1
-                
-                # state icon: INFO or DELETE
-                if (not row.get("state")):
-                    if row.get("favourite"):
-                        streams[i]["state"] = gtk.STOCK_ABOUT
-                    if conf.retain_deleted and row.get("deleted"):
-                        streams[i]["state"] = gtk.STOCK_DELETE
-                      
-                # guess homepage url  
-                #self.postprocess(row)
-                
-                # favicons?
-                if conf.show_favicons:
-                
-                    # entry provides its own image
-                    if "img" in row:
-                        favicon_url = row["img"]
-                        streams[i]["favicon"] = favicon.localcopy(favicon_url)
-                    
-                    # get actual homepage favicon.png
-                    elif "homepage" in row:
-                        homepage_url = row.get("homepage")
-                        # check for availability of PNG file, inject local icons/ filename
-                        if homepage_url and favicon.available(homepage_url):
-                            streams[i]["favicon"] = favicon.file(homepage_url)
-                
-            return streams
-
-    
-        # data preparations directly after reload
-        #
-        # - drop shoutcast homepage links
-        # - or find homepage name in title
-        #
-        def postprocess(self, row):
-
-            # remove non-homepages from shoutcast
-            if row.get("homepage") and row["homepage"].find("//yp.shoutcast.")>0:
-                row["homepage"] = ""
-                
-            # deduce homepage URLs from title
-            # by looking for www.xyz.com domain names
-            if not row.get("homepage"):
-                url = self.rx_www_url.search(row.get("title", ""))
-                if url:
-                    url = url.group(0).lower().replace(" ", "")
-                    url = (url if url.find("www.") == 0 else "www."+url)
-                    row["homepage"] = http.fix_url(url)
-            
-            return row
-
-            
-
-        # reload current stream from web directory
-        def reload(self):
-            self.load(self.current, force=1)
-        def switch(self):
-            self.load(self.current, force=0)
-        
-        # update streams pane if currently selected (used by bookmarks.links channel)
-        def reload_if_current(self, category):
-            if self.current == category:
-                self.reload()
-        
-            
-        # display .current category, once notebook/channel tab is first opened
-        def first_show(self):
-            __print__(dbg.PROC, "first_show ", self.module, self.shown)
-
-            if (self.shown != 55555):
-            
-                # if category tree is empty, initialize it
-                if not self.categories:
-                    __print__(dbg.PROC, "first_show: reload_categories");
-                    #self.parent.thread(self.reload_categories)
-                    self.reload_categories()
-                    self.display_categories()
-                    self.current = self.categories.keys()[0]
-                    __print__(dbg.STAT, self.current)
-                    self.load(self.current)
-            
-                # load current category
-                else:
-                    __print__(dbg.STAT, "first_show: load current category");
-                    self.load(self.current)
-                
-                # put selection/cursor on last position
-                try:
-                    __print__(dbg.STAT, "first_show: select last known category treelist position")
-                    self.gtk_list.get_selection().select_path(self.shown)
-                except:
-                    pass
-                    
-                # this method will only be invoked once
-                self.shown = 55555
-
-
-        # update categories, save, and display                
-        def reload_categories(self):
-        
-            # get data and save
-            self.update_categories()
-            if self.categories:
-                conf.save("cache/categories_"+self.module, self.categories)
-            if self.catmap:
-                conf.save("cache/catmap_" + self.module, self.catmap);
-
-            # display outside of this non-main thread            
-            mygtk.do(self.display_categories)
-
-        # insert content into gtk category list
-        def display_categories(self):
-        
-            # remove any existing columns
-            if self.gtk_cat:
-                [self.gtk_cat.remove_column(c) for c in self.gtk_cat.get_columns()]
-            # rebuild gtk.TreeView
-            mygtk.tree(self.gtk_cat, self.categories, title="Category", icon=gtk.STOCK_OPEN);
-
-            # if it's a short list of categories, there's probably subfolders
-            if len(self.categories) < 20:
-                self.gtk_cat.expand_all()
-                
-            # select any first element
-            self.gtk_cat.get_selection().select_path("0") #set_cursor
-            self.currentcat()
-
-                
-        # selected category
-        def currentcat(self):
-            (model, iter) = self.gtk_cat.get_selection().get_selected()
-            if (type(iter) == gtk.TreeIter):
-                self.current = model.get_value(iter, 0)
-            return self.current
-
-
-
-
-        #--------------------------- actions ---------------------------------
-
-        # invoke action.play,
-        # can be overridden to provide channel-specific "play" alternative
-        def play(self, row):
-            if row.get("url"):
-
-                # parameters
-                audioformat = row.get("format", self.audioformat)
-                listformat = row.get("listformat", self.listformat)
-
-                # invoke audio player
-                action.action.play(row["url"], audioformat, listformat)
-
-
-
-
-        #--------------------------- utility functions -----------------------
-
-        
-
-        # remove html <tags> from string        
-        def strip_tags(self, s):
-            return re.sub("<.+?>", "", s)
-            
-        # convert audio format nick/shortnames to mime types, e.g. "OGG" to "audio/ogg"
-        def mime_fmt(self, s):
-            # clean string
-            s = s.lower().strip()
-            # rename
-            map = {
-                "audio/mp3":"audio/mpeg",  # Note the real mime type is /mpeg, but /mp3 is more understandable in the GUI
-                "ogg":"ogg", "ogm":"ogg", "xiph":"ogg", "vorbis":"ogg", "vnd.xiph.vorbis":"ogg",
-                "mp3":"mpeg", "mp":"mpeg", "mp2":"mpeg", "mpc":"mpeg", "mps":"mpeg",
-                "aac+":"aac", "aacp":"aac",
-                "realaudio":"x-pn-realaudio", "real":"x-pn-realaudio", "ra":"x-pn-realaudio", "ram":"x-pn-realaudio", "rm":"x-pn-realaudio",
-                # yes, we do video
-                "flv":"video/flv", "mp4":"video/mp4",
-            }
-            map.update(action.action.lt)   # list type formats (.m3u .pls and .xspf)
-            if map.get(s):
-                s = map[s]
-            # add prefix:
-            if s.find("/") < 1:
-                s = "audio/" + s
-            #
-            return s
-        
-        # remove SGML/XML entities
-        def entity_decode(self, s):
-            return xml.sax.saxutils.unescape(s)
-        
-        # convert special characters to &xx; escapes
-        def xmlentities(self, s):
-            return xml.sax.saxutils.escape(s)
-        
-        # Extracts integer from string
-        def to_int(self, s):
-            i = re.findall("\d+", s) or [0]
-            return int(i[0])
-
-
-
-
-
-
-
-
-
-# channel plugin without glade-pre-defined notebook tab
-#
-class ChannelPlugin(GenericChannel):
-
-        module = "abstract"
-        title = "New Tab"
-        version = 0.1
-
-
-        def gui(self, parent):
-        
-            # name id
-            module = self.module
-
-            if parent:
-                # two panes
-                vbox = gtk.HPaned()
-                vbox.show()
-                # category treeview
-                sw1 = gtk.ScrolledWindow()
-                sw1.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
-                sw1.set_property("width_request", 150)
-                sw1.show()
-                tv1 = gtk.TreeView()
-                tv1.set_property("width_request", 75)
-                tv1.set_property("enable_tree_lines", True)
-                tv1.connect("button_release_event", parent.on_category_clicked)
-                tv1.show()
-                sw1.add(tv1)
-                vbox.pack1(sw1, resize=False, shrink=True)
-                # stream list
-                sw2 = gtk.ScrolledWindow()
-                sw2.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
-                sw2.show()
-                tv2 = gtk.TreeView()
-                tv2.set_property("width_request", 200)
-                tv2.set_property("enable_tree_lines", True)
-                tv2.connect("row_activated", parent.on_play_clicked)
-                tv2.show()
-                sw2.add(tv2)
-                vbox.pack2(sw2, resize=True, shrink=True)
-
-                # prepare label
-                label = gtk.HBox()
-                label.set_property("visible", True)
-                fn = "/usr/share/streamtuner2/channels/" + self.module + ".png"
-                if os.path.exists(fn):
-                    icon = gtk.Image()
-                    icon.set_property("pixbuf", gtk.gdk.pixbuf_new_from_file(fn))
-                    icon.set_property("icon-size", 1)
-                    icon.set_property("visible", True)
-                    label.pack_start(icon, expand=False, fill=True)
-                if self.title:
-                    text = gtk.Label(self.title)
-                    text.set_property("visible", True)
-                    label.pack_start(text, expand=True, fill=True)
-                    
-                # pack it into an event container to catch double-clicks
-                ev_label = gtk.EventBox()
-                ev_label.add(label)
-                ev_label.connect('event', parent.on_homepage_channel_clicked)
-
-
-
-                # to widgets
-                self.gtk_cat = tv1
-                parent.widgets[module + "_cat"] = tv1
-                self.gtk_list = tv2
-                parent.widgets[module + "_list"] = tv2
-                parent.widgets["v_" + module] = vbox
-                parent.widgets["c_" + module] = ev_label
-                tv2.connect('button-press-event', parent.station_context_menu)
-
-
-                # try to initialize superclass now, before adding to channel tabs
-                GenericChannel.gui(self, parent)
-
-
-                # add notebook tab
-                tab = parent.notebook_channels.append_page(vbox, ev_label)
-                
-                
-                
-                # double-click catch
-
-
-                # add module to list            
-                #parent.channels[module] = None
-                #parent.channel_names.append(module)
-                """ -> already taken care of in main.load_plugins() """
-
-
-
-
-
diff --git a/channels/bookmarks.py b/channels/bookmarks.py
new file mode 100644
index 0000000..4471153
--- /dev/null
+++ b/channels/bookmarks.py
@@ -0,0 +1,203 @@
+# encoding: UTF-8
+# api: streamtuner2
+# title: Bookmarks
+# description: For collecting favourites. And provides some feature/category plugins.
+# type: channel
+# version: 1.5
+# category: builtin
+# priority: core
+# config: { name: like_my_bookmarks,  type: boolean, value: 0, description: "I like my bookmarks" }
+# url: http://freshcode.club/projects/streamtuner2
+# 
+# Favourite lists.
+#
+# This module lists static content from ~/.config/streamtuner2/bookmarks.json.
+# Any bookmarked station will appear with a star ★ icon in other channels.
+#
+# Some feature extensions inject custom subcategories here. For example the
+# "search" feature adds its own result list here, as does the "timer" plugin.
+
+
+from config import *
+from uikit import *
+from channels import *
+
+
+
+# The bookmarks tab is a core feature and built into the GtkBuilder
+# layout. Which is why it derives from GenericChannel, and requires
+# less setup.
+#
+# Furthermore it pretty much only handles a static streams{} list.
+# Sub-plugins simply append a new category, and populate the streams
+# list themselves.
+#
+# It's accessible as `parent.bookmarks` in the ST2 window and elsewhere.
+#
+class bookmarks(GenericChannel):
+
+    # content
+    listformat = "any"
+    categories = ["favourite", ]  # timer, links, search, and links show up as needed
+    finder_song = { "genre": "Youtube ", "format": "video/youtube", "playing": "current_", "title": "The Finder song", "url": "http://youtube.com/v/omyZy4H8y9M", "homepage": "http://youtu.be/omyZy4H8y9M" }
+    streams = {"favourite":[finder_song], "search":[], "scripts":[], "timer":[], "history":[], }
+    default = "favourite"
+
+
+    # cache list, to determine if a PLS url is bookmarked
+    urls = []
+
+    def gui(self, parent):
+        parent.notebook_channels.set_menu_label_text(parent.v_bookmarks, "bookmarks")
+        GenericChannel.gui(self, parent)
+        uikit.tree_column(self.gtk_cat, "Group")
+
+    # this channel does not actually retrieve/parse data from anywhere
+    def update_categories(self):
+        pass
+        
+    # but category sub-plugins might provide a hook
+    category_plugins = {}
+    def update_streams(self, cat):
+
+        if cat in self.category_plugins:
+            return self.category_plugins[cat].update_streams(cat) or []
+        else:
+            return self.streams.get(cat, [])
+
+        
+    # streams are already loaded at instantiation
+    #def first_show(self):
+    #    print "first_show", len(self.streams["favourite"])
+    #    GenericChannel.first_show(self)
+
+
+    # all entries just come from "bookmarks.json"
+    def cache(self):
+        # stream list
+        cache = conf.load(self.module)
+        if (cache):
+            log.PROC("load bookmarks.json")
+            self.streams = cache
+        
+
+
+    # save to cache file
+    def save(self):
+        conf.save(self.module, self.streams, nice=1)
+
+
+    # checks for existence of an URL in bookmarks store,
+    # this method is called by other channel modules' display() method
+    def is_in(self, url, once=1):
+        if (not self.urls):
+            self.urls = [str(row.get("url","urn:x-streamtuner2:no")) for row in self.streams["favourite"]]
+        return str(url) in self.urls
+
+
+    # called from main window / menu / context menu,
+    # when bookmark is to be added for a selected stream entry
+    def add(self, row):
+
+        # normalize data (this row originated in a gtk+ widget)
+        row["favourite"] = 1
+        #if row.get("favicon"):
+        #   row["favicon"] = favicon.file(row.get("homepage"))
+        if not row.get("listformat"):
+            row["listformat"] = self.parent.channel().listformat
+           
+        # append to storage
+        self.streams["favourite"].append(row)
+        self.save()
+        self.load(self.default)
+        self.urls.append(row["url"])
+
+
+    # simplified gtk TreeStore display logic (just one category for the moment, always rebuilt)
+    def load(self, category, force=False, y=None):
+        self.streams[category] = self.update_streams(category)
+        GenericChannel.load(self, category, force=False, y=y)
+
+
+    # add a categories[]/streams{} subcategory, update treeview
+    def add_category(self, cat, plugin=None):
+        if cat not in self.categories: # add category if missing
+            self.categories.append(cat)
+            self.display_categories()
+        if cat not in self.streams:
+            self.streams[cat] = []
+        if plugin:
+            self.category_plugins[cat] = plugin
+
+
+    # change cursor
+    def set_category(self, cat):
+        self.add_category(cat)
+        self.gtk_cat.get_selection().select_path(str(self.categories.index(cat)))
+        return self.currentcat()
+        
+        
+    # update bookmarks from freshly loaded streams data
+    def heuristic_update(self, updated_channel, updated_category):
+
+        if not conf.heuristic_bookmark_update: return
+        log.PROC("heuristic bookmark update")
+        save = 0
+        fav = self.streams["favourite"]
+
+        # First we'll generate a list of current bookmark stream urls, and then
+        # remove all but those from the currently UPDATED_channel + category.
+        # This step is most likely redundant, but prevents accidently re-rewriting
+        # stations that are in two channels (=duplicates with different PLS urls).
+        check = {"http//": "[row]"}
+        check = dict((row.get("url", "http//"),row) for row in fav)
+        # walk through all channels/streams
+        for chname,channel in self.parent.channels.items():
+            for cat,streams in channel.streams.items():
+
+                # keep the potentially changed rows
+                if (chname == updated_channel) and (cat == updated_category):
+                    freshened_streams = streams
+
+                # remove unchanged urls/rows
+                else:
+                    unchanged_urls = (row.get("url") for row in streams)
+                    for url in unchanged_urls:
+                        if url in check:
+                            del check[url]
+                            # directory duplicates could unset the check list here,
+                            # so we later end up doing a deep comparison
+
+
+        # now the real comparison,
+        # where we compare station titles and homepage url to detect if a bookmark is an old entry
+        for row in freshened_streams:
+            url = row.get("url")
+            
+            # empty entry (google stations), or stream still in current favourites
+            if not url or url in check:
+                pass
+
+            # need to search
+            else:
+                title = row.get("title")
+                homepage = row.get("homepage")
+                for i,old in enumerate(fav):
+
+                    # skip if new url already in streams
+                    if url == old.get("url"):
+                        pass   # This is caused by channel duplicates with identical PLS links.
+                    
+                    # on exact matches (but skip if url is identical anyway)
+                    elif title == old["title"] and homepage == old.get("homepage",homepage):
+                        # update stream url
+                        fav[i]["url"] = url
+                        save = 1
+                        
+                    # more text similarity heuristics might go here
+                    else:
+                        pass
+        
+        # if there were changes
+        if save: self.save()
+
diff --git a/channels/configwin.py b/channels/configwin.py
new file mode 100644
index 0000000..7a701fa
--- /dev/null
+++ b/channels/configwin.py
@@ -0,0 +1,206 @@
+# api: streamtuner2
+# title: Config dialog
+# description: Allows to configure players, options, and plugins
+# version: 2.5
+# type: feature
+# category: ui
+# config: -
+# priority: core
+# 
+# Configuration dialog for audio applications,
+# general settings, and plugin activaiton and
+# their options.
+
+
+from uikit import *
+import channels
+from config import *
+from pluginconf import all_plugin_meta
+import re
+
+
+# Settings window
+#
+# Interacts with main.* window (gtkBuilder widgets)
+# and conf.* dictionary.
+#
+class configwin (AuxiliaryWindow):
+
+    # control flags
+    meta = plugin_meta()
+
+
+    # Display win_config, pre-fill text fields from global conf. object
+    def open(self, widget):
+        if self.first_open:
+            self.add_plugins()
+            self.first_open = 0
+            self.win_config.resize(565, 625)
+        self.load_config(conf.__dict__, "config_")
+        self.load_config(conf.plugins, "config_plugins_")
+        [callback() for callback in self.hooks["config_load"]]
+        self.win_config.show_all()
+    first_open = 1
+
+    # Hide window
+    def hide(self, *args):
+        self.win_config.hide()
+        return True
+
+    
+    # Load values from conf. store into gtk widgets
+    def load_config(self, config, prefix="config_"):
+        for key,val in config.items():
+            w = self.main.get_widget(prefix + key)
+            if w:
+                # input field
+                if isinstance(w, gtk.Entry):
+                    w.set_text(str(val))
+                # checkmark
+                elif isinstance(w, gtk.CheckButton):
+                    w.set_active(bool(val))
+                # dropdown
+                elif isinstance(w, ComboBoxText):
+                    w.set_default(val)
+                # number
+                elif isinstance(w, gtk.SpinButton):
+                    w.set_value(int(val))
+                # list
+                elif isinstance(w, gtk.ListStore):
+                    w.clear()
+                    for k,v in val.items():
+                        w.append([k, v, True, self.app_bin_check(v)])
+                    w.append(["", "", True, gtk.STOCK_NEW])
+            #log.CONF("config load", prefix+key, val, type(w))
+
+    # Store gtk widget valus back into conf. dict
+    def save_config(self, config, prefix="config_", save=0):
+        for key,val in config.items():
+            w = self.main.get_widget(prefix + key)
+            if w:
+                # text
+                if isinstance(w, gtk.Entry):
+                    config[key] = w.get_text()
+                # pre-defined text
+                elif isinstance(w, ComboBoxText):
+                    config[key] = w.get_active_text()
+                # boolean
+                elif isinstance(w, gtk.CheckButton):
+                    config[key] = w.get_active()
+                # int
+                elif isinstance(w, gtk.SpinButton):
+                    config[key] = int(w.get_value(val))
+                # dict
+                elif isinstance(w, gtk.ListStore):
+                    config[key] = {}
+                    for row in w:
+                        if row[0] and row[1]:
+                            config[key][row[0]] = row[1]
+            log.CONF("config save", prefix+key, val)
+    
+    
+    # Generic Gtk callback to update ListStore when entries get edited.
+    # (The main signal_connect() dict prepares individual lambda funcs
+    # for each ListStore column id.)
+    def list_edit(self, liststore, path, column, new_text):
+        liststore[path][column] = new_text
+        liststore[path][3] = self.app_bin_check(new_text)
+
+    # return OK or CANCEL depending on availability of app
+    def app_bin_check(self, v):
+        bin = re.findall(r"(?<![$(`%-])\b(\w+(?:-\w+)*)", v)
+        if bin:
+            bin = [find_executable(bin) for bin in bin]
+            if not None in bin:
+                return gtk.STOCK_MEDIA_PLAY
+            else:
+                return gtk.STOCK_CANCEL
+        else:
+            return gtk.STOCK_NEW
+        
+
+
+    # iterate over channel and feature plugins
+    def add_plugins(self):
+        ls = all_plugin_meta()
+        for name,meta in sorted(ls.items(), key=lambda e: e[1]["type"]+e[1]["title"].lower(), reverse=False):
+            if not name in conf.plugins:
+                conf.plugins[name] = False
+            add_ = self.add_channels if meta.get("type") == "channel" else self.add_features
+            self.add_plg(name, meta, add_)
+        pass
+
+    # Description text
+    plugin_text = "<span size='larger' weight='heavy'>{title}</span> "\
+                + "<span style='italic' foreground='slate blue'>({type}/{category})</span> "\
+                + "<span weight='bold' foreground='#777777'>{version}</span>\n"\
+                + "<span size='smaller' stretch='ultraexpanded'>{description}</span>"
+
+    # Add [x] plugin setting, and its configuration definitions, set defaults from conf.*
+    def add_plg(self, name, meta, add_):
+
+        # Plugin enable button
+        cb = gtk.CheckButton(name)
+        cb.set_sensitive(not meta.get("priority") in ("core", "required", "builtin"))
+        cb.get_children()[0].set_markup(self.plugin_text.format(**meta))
+        cb.set_tooltip_text(self._tooltip(meta))
+        add_( "config_plugins_"+name, cb, color=meta.get("color"), image=meta.get("png"), align=0)
+
+        # Default values are already in conf[] dict
+        # (now done in conf.add_plugin_defaults)
+        for opt in meta["config"]:
+            color = opt.get("color", None)
+            type = opt.get("type", "str")
+            description = opt.get("description", "./.")
+            
+            # hidden
+            if opt.get("hidden"):
+                continue 
+
+            # display checkbox
+            elif opt["type"] in ("bool", "boolean"):
+                cb = gtk.CheckButton(opt["description"])
+                description = None
+
+            # drop down list
+            elif opt["type"] in ("select", "choose", "options"):
+                cb = ComboBoxText(ComboBoxText.parse_options(opt["select"])) # custom uikit widget
+
+            # numeric
+            elif opt["type"] in ("int", "integer", "numeric"):
+                adj = gtk.Adjustment(0, 0, 5000, 1, 10, 0)
+                cb = gtk.SpinButton(adj, 1.0, 0)
+
+            # text field
+            else:
+                cb = gtk.Entry()
+           
+            add_( "config_"+opt["name"], cb, description, color )
+
+        # Spacer between plugins
+        add_( None, gtk.HSeparator() )
+
+    # Reformat `doc` linebreaks for gtk.tooltip
+    def _tooltip(self, meta):
+        doc = meta.get("doc", "").strip()
+        if ver < 3:
+            doc = re.sub("(?<=\S) *\n(?! *\n)", " ", doc)
+        return doc
+
+    # Put config widgets into channels/features configwin notebooks
+    def add_channels(self, id=None, w=None, label=None, color=None, image=None, align=20):
+        self.plugin_options.pack_start(uikit.wrap(self.widgets, id, w, label, color, image, align))
+
+    # Separate tab for non-channel plugins
+    def add_features(self, id=None, w=None, label=None, color=None, image=None, align=20):
+        self.feature_options.pack_start(uikit.wrap(self.widgets, id, w, label, color, image, align))
+
+
+    # save config
+    def save(self, widget):
+        self.save_config(conf.__dict__, "config_")
+        self.save_config(conf.plugins, "config_plugins_")
+        [callback() for callback in self.hooks["config_save"]]
+        conf.save(nice=1)
+        self.hide()
+
diff --git a/channels/dev_faulthandler.py b/channels/dev_faulthandler.py
new file mode 100644
index 0000000..fc1db4e
--- /dev/null
+++ b/channels/dev_faulthandler.py
@@ -0,0 +1,23 @@
+# api: python
+# title: faulthandler
+# description: capture fatal errors / memory fauls / Gtk and threading bugs
+# version: -1
+# type: io
+# category: debug
+# priority: development
+#
+# Debug Gtk/glibs/python/threading crashes.
+#
+# * Gdk:ERROR:/build/buildd/gtk+2.0-2.24.23/gdk/gdkregion-generic.c:1110:miUnionNonO:
+#   assertion failed: (y1 < y2)
+# * foobar: double free or corruption (fasttop): 0x...
+
+
+import faulthandler
+faulthandler.enable()
+   # file=open("/tmp/st2.log", "a+"), all_threads=True
+
+class dev_faulthandler(object):
+    def __init__(sefl, *x, **kw):
+        pass
+
diff --git a/channels/dirble.png b/channels/dirble.png
deleted file mode 100644
index ee6337e..0000000
Binary files a/channels/dirble.png and /dev/null differ
diff --git a/channels/dirble.py b/channels/dirble.py
index 9d01df5..f7b6555 100644
--- a/channels/dirble.py
+++ b/channels/dirble.py
@@ -1,126 +1,159 @@
 # encoding: UTF-8
 # api: streamtuner2
 # title: Dirble
-# description: Open radio station directory.
-# version: 0.2
+# description: Song history tracker for Internet radio stations.
+# url: http://dirble.com/
+# version: 2.1
 # type: channel
 # category: radio
+# config:
+#    { name: dirble_api_key,  value: "",  type: text,  description: Alternative API access key., hidden: 1 }
+# png:
+#    iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAA3NCSVQICAjb4U/gAAACP0lE
+#    QVQokVVSO0+UURA9M/d+jyWbBVcQFSQhPqJSYBRFA5pVoFGURApjYYWtvYUNP8FKOwsttDFq
+#    jMTEWEiDD0wETNSIxJC46yqEsCz7ve4di28hOO2cMzNnzqH+azcBACAiAgQg1EsAQESwCYBA
+#    pwCxNowjI1v7YGLH0Y5iSQFhJEprYjZxtG13+/lCb2dOWxBBABiTrJSLkx8+z/xa0yRutml4
+#    sC9X+qqJyFqTzTcPDfTup2p5NSTFSintOFmvZ7iv687Dl8/ezufaGgcHT2enKjpdbxMbRcnr
+#    x09uT36JfJ9FWLtnCoWxkRM3Ris/F//Mlpce3LtvSsW6BhAxs5VgtVqtxUaJQCqPnr4ItXfr
+#    Uve5fVM/PpbZzXgNniYCEaUs1spxdKIdBUvEsr4282nu29nuowdbmov2ytXRxukJBhGwwRCI
+#    1F9pRbSjlytheTnY3t6iHCcMo9BYxtai1AymjSlRbII4YUcRAQQiMKWO0Vbahk2An3H9jJvU
+#    IhEQCKD/TiJiZsXEzMxMYSy78rnOVvf34lISJ8R1pwGqpyCJkvUgCiyziFjJ5Fv7Tx5r07WJ
+#    udJajRVDAI30TUQilG1qPry3I/Y9BThubmigb+R4x8L0m1fz5Ti3h0QE0ClcQCA+dflCz0VD
+#    RKwUE5mgOvtu8u7z9wsVsyPPrBxfayqMjVtrMrmmI4f27swqkVS+GGMqy39nvy+W1uGxKL+h
+#    u+uAt1KkwvVxAGJsEEWxEWzGm4iV8l1HM9K0BmEkrP8BlhoAUfmOxecAAAAASUVORK5CYII=
 # priority: optional
 # documentation: http://dirble.com/developer/api
 #
-# Provides a nice JSON API, so is easy to support.
 #
-# However useful station information (homepage, etc.) only
-# with extraneous requests. So just for testing as of now.
+# Dirble is a user-contributed list of radio stations,
+# auot-updating song titles and station information.
+# Homepages are there now, and thus favicons readily
+# available. Extra station banners aren't fetched.
 #
-# Uh, and API is appearently becoming for-pay (two days
-# after writing this plugin;). So ST2 users may have to
-# request their own Dirble.com key probably.
+# It provides a JSON API. Which in this newer version
+# is actually speedier, as it doesn't strictly impose
+# pagination roundtrips anymore.
 #
+# Response times are fixed now by overriding the HTTP
+# encoding. (A python-requests issue mostly).
 
 
-import re
 import json
-from config import conf, dbg, __print__
+from config import *
 from channels import *
-import ahttp as http
+import ahttp
 
 
-# Surfmusik sharing site
+# Dirble
+#
+# Hmm ok, the new v2 API isn't so bad after all.
+# It actually contains streaming urls, and even
+# station homepages now.
+#
+#  · No idea what status: or timedout: mean,
+#    just mapped to `deleted` and `status`
+#  · Stream alternatives are meanwhile scanned
+#    for "best" format+bitrate combinations.
+#  · Leave favicons to regular behaviour,
+#    station banners are not accessible per CDN.
+#
 class dirble (ChannelPlugin):
 
-    # description
-    title = "Dirble"
-    module = "dirble"
-    homepage = "http://dirble.com/"
-    has_search = True
-    listformat = "audio/x-scpls"
+    # control flags
+    has_search = False
+    listformat = "srv"
     titles = dict(listeners=False, playing="Location")
-
-    categories = []
-    config = [
-        {"name": "dirble_api_key",
-         "value": "",
-         "type": "text",
-         "description": "Custom API access key."
-        },
-        {"name": "dirble_fetch_homepage",
-         "value": 0,
-         "type": "boolean",
-         "description": "Also fetch homepages when updating stations. (This is slow, as it requires one extra request for each.)"
-        }
-    ]    
-    catmap = {}
-    
-    base = "http://api.dirble.com/v1/%s/apikey/%s/"
-    cid = "84be582567ff418c9ba94d90d075d7fee178ad60"
+    base = "http://api.dirble.com/v2/{}"
+    key = "a0bdd7b8efc2f5d1ebdf1728b65a07ece4c73de5"
 
 
     # Retrieve cat list and map
     def update_categories(self):
-        self.categories = []
-        # Main categories
-        for row in self.api("primaryCategories"):
-            self.categories.append(row["name"])
-            self.catmap[row["name"]] = row["id"]
-            # Request subcats
-            sub = []
-            self.categories.append(sub)
-            for subrow in self.api("childCategories", "primaryid", row["id"]):
-                sub.append(subrow["name"])
-                self.catmap[subrow["name"]] = subrow["id"]
-
-
-    # Just copy over stream URLs and station titles
+        cats = []
+        for row in self.api("categories/tree"):
+            cats += [row["title"]]
+            self.catmap[row["title"]] = row["id"]
+            if row.get("children"):
+                cats += [[c["title"] for c in row["children"]]]
+                for c in row["children"]:
+                    self.catmap[c["title"]] = c["id"]
+        self.categories = cats
+
+
+    # Fetch entries
     def update_streams(self, cat, search=None):
-    
-        if cat:
-            id = self.catmap.get(cat, 0);
-            data = self.api("stations", "id", id)
-        elif search:
-            data = self.api("search", "search", search)
-        else:
-            pass
-
-        r = []
-        for e in data:
-            # skip musicgoal (resolve to just a blocking teaser)
-            if e["streamurl"].find("musicgoal") > 0:
-                continue
-            # append dict after renaming fields
-            r.append(dict(
-                id = e["id"],
-                genre = str(cat),
-                status = e["status"],
-                title = e["name"],
-                playing = e["country"],
-                bitrate = self.to_int(e["bitrate"]),
-                url = e["streamurl"],
-                homepage = e.get("homepage") or self.get_homepage(e["id"], e["name"]),
-                format = "audio/mpeg"
-            ))
-        return r
-
-
-    # Request homepage for stations, else try to deduce Dirble page
-    def get_homepage(self, id, name):
-        if conf.dirble_fetch_homepage:
-            try:
-                return self.api("station", "id", id)["website"]
-            except:
-                None
-        name = re.sub("[^\w\s]+", "", name)
-        name = re.sub("\s", "-", name)
-        return "http://dirble.com/station/" + name.lower();
+        return [
+            self.unpack(r)
+               for r in
+            self.api("category/{}/stations".format(self.catmap.get(cat, 0)), all=1)# per_page=200 won't work
+        ]
 
+    
+    # Extract rows
+    def unpack(self, r):
+    
+        # find stream
+        if len(r.get("streams", [])):
+            s = r["streams"][0]
+
+            # select "best" stream if there are alternatives
+            if len(r["streams"]) > 1:
+                for alt in r["streams"]:
+                
+                    # weight format with bitrate
+                    cur_q = self.format_q.get(  s["content_type"].strip(), "0.9") \
+                            * s.get("bitrate", 32)
+                    alt_q = self.format_q.get(alt["content_type"].strip(), "0.9") \
+                            * alt.get("bitrate", 32)
+
+                    # swap out for overall better score
+                    if alt_q > cur_q:
+                        s = alt
+                        #log.DATA_BETTER_STREAM(s, "←FROM←", r)
+
+            # fix absent audio type
+            if s["content_type"] == "?":
+                s["content_type"] == "audio/mpeg"
 
-    # Patch API url together, send request, decode JSON and whathaveyou
-    def api(self, *params):
-        method = params[0]
+        else:
+            return {}
+
+        # rename fields
+        return dict(
+            genre = " ".join(c["slug"] for c in r["categories"]),
+            title = r["name"],
+            playing = "{} {}".format(r.get("country"), r.get("description", "")),
+            homepage = ahttp.fix_url(r["website"]),
+            url = s["stream"],
+            format = s["content_type"].strip(),  # There's a "\r\n" in nearly every entry :?
+            bitrate = s["bitrate"],
+           # img = r["image"]["image"]["thumb"]["url"], # CDN HTTPS trip up requests.get
+            state = self.state_map.get(int(s["status"]), ""),
+            deleted = s.get("timedout", False),
+        )
+
+    # Streams contain a `status`, here mapped onto arbitrary Gtk icons        
+    state_map = {0:"gtk-media-pause", 1:"gtk-media-next", 2:"gtk-media-rewind"}
+
+    # Weighting bitrate and audio format for alternative stream URLs
+    format_q = {"?":0.75, "audio/mpeg":1.0, "audio/aac":1.25, "audio/aacp":1.35, "audio/ogg":1.50}
+
+
+    # Patch API url together, send request, decode JSON list
+    def api(self, method, **params):
+        params["token"] = conf.dirble_api_key or self.key
         try:
-            j = http.get((self.base % (method, conf.dirble_api_key or self.cid)) + "/".join([str(e) for e in params[1:]]))
-            r = json.loads(j);
-        except:
+            # HTTP request and JSON decoding take a while
+            r = ahttp.get(self.base.format(method), params, encoding="utf-8")
+            r = json.loads(r)
+            if isinstance(r, dict) and "error" in r:
+                log.ERR(r["error"])
+                raise Exception
+            # cut down stream list
+            if len(r) > int(conf.max_streams):
+                del r[int(conf.max_streams):]
+        except Exception as e:
+            log.ERR("Dirble API retrieval failure:", e)
             r = []
         return r
 
diff --git a/channels/dnd.py b/channels/dnd.py
new file mode 100644
index 0000000..9c91b2d
--- /dev/null
+++ b/channels/dnd.py
@@ -0,0 +1,327 @@
+# encoding: UTF-8
+# api: streamtuner2
+# title: Drag and Drop
+# description: Copy streams/stations from and to other applications.
+# depends: uikit >= 1.8, action >= 1.0
+# version: 0.7
+# type: feature
+# config:
+#   { name: dnd_format, type: select, value: xspf, select: "pls|m3u|xspf|jspf|asx|smil|desktop|srv", description: "Default temporary file format for copying a station." }
+# category: io
+# priority: default
+# support: experimental
+#
+# Implements Gtk/X11 drag and drop support for station lists.
+# Should allow to export either just stream URLs, or complete
+# PLS, XSPF collections.
+#
+# Also used by the bookmarks channel to copy favourites around.
+# Which perhaps should even be constrained to just the bookmarks
+# tab.
+
+
+import copy
+from config import conf, json, log
+from uikit import *
+import action
+import compat2and3
+
+
+# Welcome to my new blog.
+#
+# Now it's perhaps not even Gtks fault, but all the gory implementation
+# details of XDND are pretty gory. And not much documentatiion lives up
+# to reality anymore.
+#
+# Almost only the ridiculous `TEXT/URI-LIST` is used in practice. Without
+# host names, of course, despite the spec saying otherwise. (It perhaps
+# leaked into the Gnome UI, and they decreed it banished). And needless
+# to say, there's no actual IRI (or "URI" if you've been living under a
+# rock for two decades) support in any file manager or pairing clients
+# beyond local paths.
+#
+# Supporting PLS, XSPF, M3U as direct payload was a pointless exercise.
+# It's not gonna get requested by anyone. Instead there's another config
+# option now, which predefines the exchange format for temporary file:///
+# dumps. Because, you know, there was never any point in type negotiation
+# due to all the API overhead. There's no way to indicate any actually
+# supported content types per text/uri-list.
+#
+# What works, and what's widely used in practice instead, is declaring
+# yet another custom type per application. Our row format is transferred
+# unfiltered over the selection buffer as JSON. However, it's decidedly
+# never exposed to other apps as x-special/x-custom whatever. (It's also
+# not using the MIME 1.0 application/* trash bin for that very reason.)
+
+
+# Drag and Drop support
+class dnd(object):
+
+    module = "dnd"
+    meta = plugin_meta()
+
+    # Keeps selected row on starting DND event
+    row = None
+    # Buffer converted types
+    buf = {}
+
+    # Supported type map
+    drag_types = [
+      # internal
+      ("json/vnd.streamtuner2.station", gtk.TARGET_SAME_APP, 51),
+      # literal exports
+      ("application/xspf+xml", 0, 22),
+      ("application/jspf+json", 0, 25),
+      ("application/x-scpls", 0, 21),
+      ("audio/x-mpegurl", 0, 20),
+      ("application/smil", 0, 23),
+      ("text/html", 0, 23),
+      ("text/richtext", 0, 23),
+      ("application/x-desktop", 0, 26),
+      ("text/url", 0, 27),
+      ("message/external-body", 0, 27),
+      # direct srv urls
+      ("url/direct", 0, 15),
+      ("text/iri-list", 0, 15),
+      # filename, file:// IRL
+      ("FILE_NAME", 0, 3),
+#     ("text/uri-list;x-format=xspf,pls,m3u,jspf,smil,http", 0, 4),
+      ("text/uri-list", 0, 4),
+      # url+comments
+      ("TEXT", 0, 5),
+      ("STRING", 0, 5),
+      ("UTF8_STRING", 0, 5),
+      ("text/plain", 0, 5),
+    ]
+    
+    # Map target/`info` integers to action. module identifiers
+    cnv_types = {
+       20: "m3u",
+       21: "pls",
+       22: "xspf",
+       23: "smil",
+       25: "jspf",
+       26: "desktop",
+       27: "url",
+       15: "srv",
+        4: "temp",
+        5: "srv",
+       51: "json",
+    }
+
+
+    # Hook to main, and extend channel tabs
+    def __init__(self, parent):
+        self.parent = parent
+        parent.hooks["init"].append(self.add_dnd)
+        conf.add_plugin_defaults(self.meta, self.module)
+
+
+    # Attach drag and drop handlers to each channels´ station TreeView
+    def add_dnd(self, parent):
+
+        # visit each module
+        for cn,module in parent.channels.items():
+            w = module.gtk_list
+            # bind SOURCE events
+            w.enable_model_drag_source(gtk.gdk.BUTTON1_MASK, self.drag_types, gtk.gdk.ACTION_DEFAULT|gtk.gdk.ACTION_COPY)
+            w.connect('drag-begin', self.begin)
+            w.connect('drag-data-get', self.data_get)
+            # bind DESTINATION events
+            w.enable_model_drag_dest(self.drag_types, gtk.gdk.ACTION_DEFAULT|gtk.gdk.ACTION_COPY)
+            w.connect('drag-drop', self.drop)
+            w.connect('drag-data-received', self.data_received)
+            
+        # register bookmarks category as destination too
+        w = parent.bookmarks.gtk_cat
+        w.enable_model_drag_dest([self.drag_types[0]], gtk.gdk.ACTION_DEFAULT|gtk.gdk.ACTION_MOVE)
+        w.connect('drag-data-received', self.data_received)
+        
+
+
+
+    # -- SOURCE, drag'n'drop from ST2 to elsewhere --
+
+    # Starting to drag a row
+    def begin(self, widget, context):
+        log.DND("source→out: begin-drag, store current row")
+        self.row = self.treelist_row()
+        self.buf = {}
+        if "set_icon_stock" in dir(context):
+            uikit.do(context.set_icon_stock, gtk.STOCK_ADD, 16, 16)
+        return "url" in self.row
+
+    # Keep currently selected row when source dragging starts
+    def treelist_row(self):
+        cn = self.parent.channel()
+        row = copy.copy(cn.row())
+        row.setdefault("format", cn.audioformat)
+        row.setdefault("listformat", cn.listformat)
+        row.setdefault("url", row.get("homepage"))
+        row.update({"_origin": [cn.module, cn.current, cn.rowno()]}) # internal: origin channel+genre+rowid
+        return row
+    
+    # Target window/app requests data for offered drop
+    def data_get(self, widget, context, selection, info, time):
+        log.DND("source→out: data-get, send and convert to requested target type:", info, selection.get_target())
+        # Return prepared data
+        func, data = self.export_row(info, self.row)
+        log.DND("data==", func, data)
+        if func.find("text") >= 0:
+            try:
+                # Yay for trial and error. Nay for docs. PyGtks selection.set_text() doesn't
+                # actually work unless the requested target type is an Atom. Therefore "STRING".
+                selection.set("STRING", 8, data)
+            except:
+                # Except of course Gtk3, where an Atom is required, but neither
+                # gtk.gdk.TARGET_STRING nor selection.get_target() actually do
+                selection.set_text(data, len(data))
+        if func.find("uris") >= 0:
+            selection.set_uris(data)
+        return True
+
+    # Handles the conversion from the stored .row to the desired selection data
+    def export_row(self, info, r):
+
+        # Needs buffering because `data_get` gets called mercilessly along the dragging path
+        if info in self.buf:
+            return self.buf[info]
+        
+        # Prepare new converter
+        cnv = action.save_playlist(source=r["listformat"], multiply=False)
+
+        # internal JSON row
+        if info >= 51:
+            buf = 'text', json.dumps(r)
+
+        # Pass M3U/PLS/XSPF as literal payload
+        elif info >= 20:
+            buf = 'text', cnv.export(urls=[r["url"]], row=r, dest=self.cnv_types[info])
+
+        # Direct server URL
+        elif info >= 10:
+            urls = action.convert_playlist(r["url"], r["listformat"], "srv", False, r)
+            #buf = 'uris', urls
+            buf = 'text', urls[0]
+
+        # Text sources are assumed to understand the literal URL or expect a description block
+        elif info >= 5:
+            buf = 'text', "{url}\n# Title: {title}\n# Homepage: {homepage}\n\n".format(**r)
+
+        # Direct URL as text/uri-list
+        elif conf.dnd_format == "srv":
+            buf = 'uris', [self.row.get("url")]
+
+        # Create temporary PLS file, because "text/uri-list" is widely misunderstood
+        # and just used for file:// IRLs in drag and drops
+        else:
+            title = re.sub("[^\w-]+", "_", r["title"]).strip()
+            tmpfn = "{}/{}.{}".format(conf.tmp, title, conf.dnd_format)
+            log.DND("tmpfn", tmpfn)
+            cnv.file(rows=[r], dest=conf.dnd_format, fn=tmpfn)
+            if info == 4:
+                buf = 'uris', ["file://{}".format(tmpfn)]
+            else:
+                buf = 'text', tmpfn
+
+        # Keep in type request buffer
+        self.buf[info] = buf
+        return buf
+
+
+
+    # -- DESTINATION, when playlist/file gets dragged into ST2 from other app --
+
+    # Just a notification for incoming drop
+    def drop(self, widget, context, x, y, time):
+        log.DND("dest←in: drop-probing, possible targets:", context.targets)
+        # find a matching target
+        targets = [t.split(";")[0] for t in context.targets]
+        accept = [type[0] for type in self.drag_types if type[0] in targets]
+        context.drop_reply(len(accept) > 0, time)
+        if accept:
+                widget.drag_get_data(context, accept[0], time) or True
+        return True
+
+    # Actual data is being passed,
+    def data_received(self, widget, context, x, y, selection, info, time):
+        log.DND("dest←in: data-receival", info, selection.get_target(), selection.get_text(), selection.get_uris())
+
+        # incoming data
+        data = selection.get_text()
+        urls = selection.get_uris()
+        any = (data or urls) and True
+
+        # Convert/Add
+        if any: self.import_row(info, urls, data, y)
+        else: log.DND("Abort, no urls/text.")
+        
+        # Respond
+        context.drop_finish(any, time)
+        context.finish(any, False, time)
+        return True
+
+    # Received files or payload has to be converted, copied into streams
+    def import_row(self, info, urls, data, y=5000):
+        # Internal target dicts
+        cn = self.parent.channel()
+        rows = []
+                
+        # Direct/internal row import
+        if data and info >= 51:
+            log.DND("Received row in internal format, append+reload")
+            rows += [ json.loads(data) ]
+
+        # Convertible formats as direct payload
+        elif data and info >= 5:
+            log.DND("Converting direct payload playlist")
+            cnv = action.extract_playlist(data)
+            
+            # known DND info format
+            if info >= 20:
+                fmt = self.cnv_types[info]
+
+            # else probe content (which also works for URLs in plain text)
+            else:
+                fmt = cnv.probe_fmt()
+                if fmt == "href": fmt = "raw"
+
+            add = cnv.rows(fmt)
+            rows += [ cnv.mkrow(row) for row in add ]
+
+        # Extract from playlist files, either passed as text/uri-list or single FILE_NAME
+        elif urls:
+            log.DND("Importing from playlist file")
+            for fn in urls or [data]:
+
+                # Plain file urls
+                if re.match("^(scp|file)://(localhost)?/|/", fn):
+
+                    # read and convert playlist files
+                    fn = compat2and3.urldecode(re.sub("^\w+://[^/]*", "", fn))
+                    cnv = action.extract_playlist(fn=fn)
+                    if cnv.src:
+                        rows += [ cnv.mkrow(row) for row in cnv.rows() ]
+
+                # Real resource links, http://server:8090/.mp3 etc
+                else:
+                    # Action module can't query streaming servers yet,
+                    # so append a stub entry of just the target url,
+                    # which will bring up the streamedit dialog
+                    rows += [ dict(url=fn, title="", playing="", genre="url") ]
+                    
+        
+        # Insert and update view
+        if rows:
+            cn.insert_rows(rows, y)
+            if conf.auto_save_stations or cn.module == "bookmarks":
+                cn.save()
+            # Show streamedit window if title is empty
+            if not len(rows[0].get("title", "")):
+                self.parent.configwin.load_config(rows[0], "streamedit_")
+                self.parent.win_streamedit.show()
+        else:
+            self.parent.status("Unsupported station format. Not imported.")
+
+
+        
\ No newline at end of file
diff --git a/channels/exportcat.py b/channels/exportcat.py
new file mode 100644
index 0000000..be784e6
--- /dev/null
+++ b/channels/exportcat.py
@@ -0,0 +1,63 @@
+# encoding: UTF-8
+# api: streamtuner2
+# title: Export Category
+# description: Exports a complete channel category (all stations into one file).
+# version: 0.2
+# type: feature
+# category: file
+# priority: optional
+# -disabled-config:
+#   { name: export_format, value: xspf, type: select, select: "pls|xspf|m3u|jspf|smil|asx|json", description: Default export format. }
+# hooks: config_save
+#
+# Adds a context menu "Extensions > Export all", which can be used
+# in any channel and category to save all stations into one playlist.
+# Defaults to exporting as .PLS file, but meanwhile can be used for
+# XSPF or old M3U files as well.
+# Note that a .desktop link can only hold the very first entry.
+#
+# It won't convert the internal stream URLs though. Such that the
+# combined playlist file may reference further playlists from servers
+# of a directory provider.
+#
+# This is a workaround until the main GUI supports selecting multiple
+# rows at once. You can already save as
+
+
+from config import *
+from channels import *
+import ahttp
+from uikit import uikit
+import action
+import re
+
+
+# provides another export window, and custom file generation - does not use action.save()
+class exportcat():
+
+    meta = plugin_meta()
+    module = "exportcat"
+
+    # Register callback
+    def __init__(self, parent):
+        conf.add_plugin_defaults(self.meta, self.module)
+        if parent:
+            self.parent = parent
+            uikit.add_menu([parent.extensions, parent.extensions_context], "Export all stations", self.savewindow)
+
+    # Fetch streams from category, show "Save as" dialog, then convert URLs and export as playlist file
+    def savewindow(self, *w):
+        cn = self.parent.channel()
+        source = cn.listformat
+        streams = cn.streams[cn.current]
+        fn = uikit.save_file("Export category", None, "%s.%s.%s" % (cn.module, cn.current, "xspf"))
+        log.PROC("Exporting category to", fn)
+        if fn:
+            dest = re.findall("\.(m3u|pls|xspf|jspf|json|smil|asx|desktop|url)8?$", fn.lower())
+            if dest:
+                dest = dest[0]
+            else:
+                self.parent.status("Unsupported export playlist type (file extension).")
+                return
+            action.save_playlist(source="asis", multiply=False).file(rows=streams, fn=fn, dest=dest)
+        pass            
diff --git a/channels/favicon.py b/channels/favicon.py
new file mode 100644
index 0000000..9b141d5
--- /dev/null
+++ b/channels/favicon.py
@@ -0,0 +1,406 @@
+# encoding: utf-8
+# api: streamtuner2
+# title: Favicons
+# description: Load and display station favicons/logos.
+# config:
+#    { name: load_favicon, type: bool, value: 1, description: "Load favicon instantly when ▸playing a station.", color: "#fff7cc" }
+#    { name: favicon_google_first, type: bool, value: 1, description: "Prefer faster Google favicon to PNG conversion service." }
+#    { name: favicon_delete_stub , type: bool, value: 1, description: "Don't accept any placeholder favicons." }
+#    { name: google_homepage, type: bool, value: 0, description: "Google missing station homepages right away." }
+# type: feature
+# category: ui
+# version: 2.0
+# depends: streamtuner2 >= 2.1.9, python:pil
+# priority: standard
+# png:
+#   iVBORw0KGgoAAAANSUhEUgAAABYAAAAWBAMAAAA2mnEIAAAAJ1BMVEUAAACwDw5oKh1RRU5OTSCOTxp0Um9zcyFUhSXsbwChdp/lgCNbrA7VFTQPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHU
+#   gAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQffBQ4ENQJMtfdfAAAAmUlEQVQY02NgcAECYxBgYODeOXPmTKtVQLCAwXsmjL2YQRPINDNGsFclI7GXQdmzZ87MSoOyI0pnpgHVLAOy1c+c
+#   mTkzeFWioBSUbQZkiy1mcPFpCXUxTksTFEtm8Ojp6OhQVDJWVFJi8DkDBIIgIARhKyKx3c8g2GfOBCKxFeHspg6EmiZFJDbEHB44W4CBwQNor5MSEDAAAGcoaQmD1t8TAAAAAElFTkSuQmCC
+#
+# This module fetches a favicon for each station. Some channels
+# provide small logos/banners even. It sanitizes and converts
+# any .ico/.png/.jpeg file prior display.
+# 
+# Cache files are kept in ~/.config/streamtuner2/icons/ where
+# the station column display picks them up form.
+#
+# While it can often discover favicons directly from station
+# homepages, it's mostly speedier to use the PNG conversion
+# service from Google.
+# Both methods depend on a recent Pillow2 python module (that
+# superseded the PIL module). Else icon display may have some
+# transparency fragments.
+
+
+import os, os.path
+from io import BytesIO
+import re
+import channels
+from config import *
+import ahttp
+from PIL import Image
+from uikit import gtk
+#import traceback
+
+
+# Ensure that we don't try to download a single favicon twice per session.
+# If it's not available the first time, we won't get it after switching
+# stations back and forth either. So URLs are skipped simply.
+tried_urls = []
+
+
+
+# Has recently been rewritten, is somewhat less entangled with other
+# modules now:
+#
+#  · GenericChannel presets row["favicon"] with cache image filenames
+#    in any case. It calls row_to_fn() per prepare_filters hook after
+#    station list updates.
+#
+#  · uikit.columns() merely checks row["favicon"] for file existence
+#    when redrawing a station list.
+#
+#  · The main window calls .update_playing() on hooks["play"].
+#    (Which passes the current row{} and row_i index, and its channel
+#    object for updating the ListStore→pixbuf right away.)
+#
+#  · Main also calls .update_all() wrapper per menu command "Channel ›
+#    Update Favicons..."
+
+
+
+# Hook up as feature plugin
+#
+class favicon(object):
+
+    # plugin attributes
+    module = "favicon"
+    meta = plugin_meta()
+    
+    
+    # Register with main
+    def __init__(self, parent):
+
+        # Prepare favicon cache directory
+        conf.icon_dir = conf.dir + "/icons"
+        if not os.path.exists(conf.icon_dir):
+            os.mkdir(conf.icon_dir)
+            open(conf.icon_dir+"/.nobackup", "a").close()
+
+        # Reference main, and register station .play() hook
+        self.parent, self.main = parent, parent
+        parent.hooks["play"].append(self.update_playing)
+
+        # Register in channel/streams updating pipeline (to predefine row["favicon"] filename from `homepage` or `img`)
+        channels.GenericChannel.prepare_filters.append(self.prepare_filter_favicon)
+
+
+
+    # Main menu "Update favicons": update favicon cache for complete list
+    # of station rows. Just a wrapper now around update_rows(). Expects
+    # both entries=[] and channel={} argument still.
+    def update_all(self, *args, **kwargs):
+        self.parent.thread(self.update_rows, *args, **kwargs)
+
+
+    # Main [▸play] event for a single station
+    def update_playing(self, row, channel=None, **x):
+
+        # Homepage search
+        if conf.google_homepage and not len(row.get("homepage", "")):
+            found = google_find_homepage(row)
+            # Save channel list right away to preserve found homepage URL
+            if found and conf.auto_save_stations:
+                channel.save()
+        else:
+            found = False
+
+        # Favicon only for currently playing station
+        if conf.load_favicon:
+            if row.get("homepage") or row.get("img"):
+                self.parent.thread(
+                    self.update_rows,
+                    entries=[row], channel=channel, row_i=channel.rowno(),
+                    fresh_homepage=found
+                )
+
+      
+    # Run through rows[] to update "favicon" cachefile from "homepage" or "img",
+    # optionally display new image right away in ListStore
+    #
+    #  · The entries[] list can be a single row. In which case it is accompanied
+    #    by its row_i index.
+    #  · If it's a complete streams list, then the row index will be manually
+    #    counted up.
+    #  · This is needed to update the pixstore. The `channel` reference is used
+    #    for accessing the displayed ListStore, and its `pix_entry` column for
+    #    updates.
+    #
+    def update_rows(self, entries, channel=None, row_i=None, fresh_homepage=False, **x):
+
+        # Preserve current ListStore object - in case the channel/notebook
+        # tab gets switched for longer .update_all() invocations.
+        ch_ls = channel.ls if channel else None
+
+        for i,row in enumerate(entries):
+            ok = False
+
+            # Try just once
+            if row.get("homepage") in tried_urls:
+                continue
+            # Ignore existing ["favicon"] filename
+            if row.get("favicon") and False:
+                pass
+
+            # Cache image filename: have or can't have
+            favicon_fn = row_to_fn(row)
+            if not favicon_fn:
+                continue
+
+            try:
+                # Image already exists
+                if os.path.exists(favicon_fn):
+                    if not fresh_homepage:
+                        continue
+                    else:  # For freshly added ["homepage"] when favicon already
+                        ok = True  # exists in cache. Then just update pix store.
+
+                # Download custom "img" banner/logo as favicon
+                elif row.get("img"):
+                    tried_urls.append(row["img"])
+                    resize = row.get("img_resize", channel.img_resize)
+                    ok = banner_localcopy(row["img"], favicon_fn, resize)
+
+                # Fetch homepage favicon into local png
+                elif row.get("homepage"):
+                    tried_urls.append(row["homepage"])
+                    if conf.favicon_google_first:
+                        ok = fav_google_ico2png(row["homepage"], favicon_fn)
+                    else:
+                        ok = fav_from_homepage(row["homepage"], favicon_fn)
+
+                # Update TreeView (single `row_i`, or counted up `i` index)
+                if ok:
+                    if row_i is not None:  # single row update
+                        i = row_i
+                    self.update_pixstore(row, ch_ls, channel, i)
+                    row["favicon"] = favicon_fn
+
+            # catch HTTP Timeouts etc., so update_all() row processing just continues..
+            except Exception as e:
+                log.WARN("favicon.update_rows():", e)
+        pass
+
+
+    # Update favicon pixbuf in treeview/liststore
+    def update_pixstore(self, row, ls, channel=None, row_i=None):
+        log.FAVICON_UPDATE_PIXSTORE(channel, ls, row_i)
+        if not channel or not ls or row_i is None:
+            return
+
+        # Existing "favicon" cache filename
+        if row.get("favicon"):
+            fn = row["favicon"]
+        else:
+            fn = row_to_fn(row)
+
+        # Update pixbuf in active station liststore
+        if fn and os.path.exists(fn):
+            try:
+                p = gtk.gdk.pixbuf_new_from_file(fn)
+                ls[row_i][channel.pix_entry] = p
+            except Exception as e:
+                log.ERR("Update_pixstore image", fn, "error:", e)
+
+
+    # Run after any channel .update_streams() to populate row["favicon"]
+    # from `homepage` or `img` url.
+    def prepare_filter_favicon(self, row):
+        # if conf.show_favicons:  (do we still need that?)
+        row["favicon"] = row_to_fn(row)
+
+
+
+
+#--- somewhat unrelated ---
+#
+# Should become a distinct feature plugin. - It just depends on correct
+# invocation order for both plugins to interact.
+# Googling is often blocked anyway, because this is clearly a bot request.
+# And requests are tagged with ?client=streamtuner2 still purposefully.
+# 
+def google_find_homepage(row):
+    """ Searches for missing homepage URL via Google. """
+    if row.get("url") not in tried_urls:
+        tried_urls.append(row.get("url"))
+
+    if row.get("title"):
+        rx_t = re.compile('^(([^-:]+.?){1,2})')
+        rx_u = re.compile(r'/url\?q=(https?://[^"&/]+)')
+
+        # Use literal station title now
+        title = row["title"]
+        #title = title.group(0).replace(" ", "%20")
+        
+        # Do 'le google search
+        html = ahttp.get("http://www.google.com/search", params=dict(hl="en", q=title, client="streamtuner2"), ajax=1, timeout=3.5)
+                  
+        # Find first URL hit
+        url = rx_u.findall(html)
+        if url:
+            row["homepage"] = ahttp.fix_url(url[0])
+            return True
+    pass
+#-----------------
+
+
+
+
+# Convert row["img"] or row["homepage"] into local favicon cache filename
+# Use just domain for homepages, but most of the url for banner/logo imgs.
+rx_strip_proto = re.compile("^\w+://|/$|\.(png|gif|ico|jpe?g)$")
+rx_just_domain = re.compile("^\w+://|[/#?].*$")
+rx_non_wordchr = re.compile("[^\w._-]")
+def row_to_fn(row):
+    url = row.get("img")
+    if url:
+        url = rx_strip_proto.sub("", url)     # strip proto:// and trailing /
+    else:
+        url = row.get("homepage")
+        if url:
+            url = rx_just_domain.sub("", url) # remove proto:// and any /path
+    if url:
+        url = url.lower()
+        url = rx_non_wordchr.sub("_", url)    # remove any non-word characters
+        url = "{}/{}.png".format(conf.icon_dir, url)  # prefix cache directory
+    return url
+
+
+    
+# Copy banner row["img"] into icons/ directory
+def banner_localcopy(url, fn, resize=None):
+
+    # Check URL and target filename
+    if not re.match("^https?://[\w.-]{10}", url):
+        return False
+
+    # Fetch and save
+    imgdata = ahttp.get(url, binary=1, verify=False)
+    if imgdata:
+        return store_image(imgdata, fn, resize)
+    
+
+    
+# Check for valid image binary, possibly convert or resize, then save to cache filename
+def store_image(imgdata, fn, resize=None):
+
+    # Convert accepted formats -- even PNG for filtering now
+    if re.match(br'^(.PNG|GIF\d+|.{0,15}(Exif|JFIF)|\x00\x00\x01\x00|.{0,255}<svg[^>]+svg)', imgdata):
+        try:
+            # Read from byte/str
+            image = Image.open(BytesIO(imgdata))
+            log.FAVICON_IMAGE_TO_PNG(image, image.size, resize)
+
+            # Resize
+            if resize and image.size[0] > resize:
+                try:
+                    image.thumbnail((resize, resize), Image.ANTIALIAS)
+                except:
+                    image = image.resize((resize,resize), Image.ANTIALIAS)
+
+            # Convert to PNG via string buffer
+            out = BytesIO()
+            image.save(out, "PNG", quality=98)
+            imgdata = out.getvalue()
+
+        except Exception as e:
+            #traceback.print_exc()
+            return log.ERR("favicon/logo conversion error:", e) and False
+    else:
+        log.WARN("Couldn't detect valig image type from its raw content")
+
+    # PNG already?
+    if re.match(b"^.(PNG)", imgdata):
+        try:
+            with open(fn, "wb") as f:
+                f.write(imgdata)
+                return True
+        except Exception as e:
+            log.ERR("favicon.store_image() failure:", e)
+
+
+
+# PNG via Google ico2png
+def fav_google_ico2png(url, fn):
+
+    # Download from service
+    domain = re.sub("^\w+://|/.*$", "", url).lower()
+    geturl = "http://www.google.com/s2/favicons?domain={}".format(domain)
+    imgdata = ahttp.get(geturl, binary=1, timeout=3.5, quieter=1)
+    
+    # Check for stub sizes
+    if conf.favicon_delete_stub and len(imgdata) in (726,896): # google_placeholder_filesizes
+        log.FAVICON("placeholder size, skipping")
+        return False
+    # Save
+    else:
+        return store_image(imgdata, fn)
+    
+
+  
+# Peek at homepage URL, download favicon.ico <link rel>, convert to PNG file, resize to 16x16
+def fav_from_homepage(url, fn):
+
+    # Check for <link rel=icon>
+    img = html_link_icon(url)
+    if not img:
+        return False
+        
+    # Fetch image, verify MIME type
+    r = ahttp.get(img, binary=1, content=0, timeout=4.25, quieter=1)
+    if not re.match('image/(png|jpe?g|png|ico|x-ico|vnd.microsoft.ico)', r.headers["content-type"], re.I):
+        log.WARN("content-type wrong", r.headers)
+        return False
+        
+    # Convert, resize and save
+    return store_image(r.content, fn, resize=16)
+
+
+
+# Download HTML, look for favicon name in <link rel=shortcut icon>.
+#
+# Very rough: doesn't respect any <base href=> and manually patches
+# icon path to homepage url; doesn't do much HTML entity decoding.
+#
+def html_link_icon(url, href="/favicon.png"):
+    html = ahttp.get(url, encoding="iso-8859-1", timeout=4.5, quieter=1)
+    # Extract
+    for link in re.findall(r"""  <link ([^<>]+) >  """, html, re.X):
+        pair = re.findall(r"""  \b(rel|href) \s*=\s* ["']? ([^<>"']+) ["']? """, link, re.X)
+        pair = { name: val for name, val in pair }
+        for name in ("shortcut icon", "favicon", "icon", "icon shortcut"):
+            if name == pair.get("rel", "ignore").lower() and pair.get("href"):
+                href = pair["href"].replace("&", "&") # unhtml()
+                break
+    # Patch URL together
+    log.DATA(url, href)
+    if re.match("^https?://", href): # absolute URL
+        return href
+    elif href.startswith("//"): # proto-absolute
+        return "http:" + href
+    elif href.startswith("/"): # root path
+        return re.sub("(https?://[^/]+).*$", "\g<1>", url) + href
+    else: # relative path references xyz/../
+        href = re.sub("[^/]+$", "", url) + href
+        return re.sub("[^/]+/../", "/", href)
+    
+
+
+
+
+#-- test
+if __name__ == "__main__":
+    import sys
+    favicon(None).download(sys.argv[1])
+
+
diff --git a/channels/filter_bitrate.py b/channels/filter_bitrate.py
new file mode 100644
index 0000000..a9735e0
--- /dev/null
+++ b/channels/filter_bitrate.py
@@ -0,0 +1,47 @@
+# encoding: UTF-8
+# api: streamtuner2
+# title: Filter Bitrate
+# description: Cleans out low-quality entries from all station lists.
+# version: 0.2
+# type: filter
+# category: audio
+# config:
+#   { name: min_bitrate_mp3, value: 32, type: select, select: "32=32kbit/s|48=48kbit/s|64=64kbit/s|80=80kbit/s|96=96kbit/s|112=112kbit/s|128=128kbit/s|144=144kbit/s|160=160kbit/s", description: Filter MP3 streams with lesser audio quality. }
+#   { name: min_bitrate_ogg, value: 48, type: select, select: "32=32kbit/s|48=48kbit/s|64=64kbit/s|80=80kbit/s|96=96kbit/s|112=112kbit/s|128=128kbit/s|144=144kbit/s|160=160kbit/s", description: Minimum bitrate for Ogg Vorbis and AAC. }
+# priority: optional
+# hooks: postprocess_filters
+#
+# Plugin that filters radio stations on bitrate (audio quality).
+# Anything below 64 kbit/s often sounds awful for MP3 streams.
+# While AAC or Ogg Vorbis might still be acceptable sometimes.
+#
+# This functionality was previously just implemented for the Xiph
+# plugin. It's now available as generic filter for all channels.
+# Beware that some channels provide more entries with low bitrates,
+# thus might appear completely empty.
+
+
+from config import *
+from channels import GenericChannel
+
+
+# Filter streams by bitrate
+class filter_bitrate(object):
+
+    meta = plugin_meta()
+    module = "filter_bitrate"
+
+    # Hijack postprocessing filters in stream_update handler 
+    def __init__(self, parent):
+        GenericChannel.postprocess_filters.append(self.filter_rows)
+
+    # Filter row on bitrate
+    def filter_rows(self, row, channel):
+        bits = int(row.get("bitrate", 0))
+        if bits <= 10:
+            return True
+        elif row.get("format", channel.audioformat) in ("audio/ogg", "audio/aac", "audio/aacp"):
+            return bits >= int(conf.min_bitrate_ogg)
+        else:
+            return bits >= int(conf.min_bitrate_mp3)
+
diff --git a/channels/filtermusic.py b/channels/filtermusic.py
new file mode 100644
index 0000000..5dd9f4d
--- /dev/null
+++ b/channels/filtermusic.py
@@ -0,0 +1,89 @@
+# encoding: UTF-8
+# api: streamtuner2
+# title: filtermusic
+# description: Daily refreshed list of electronic+dance music streams.
+# version: 0.1
+# type: channel
+# url: http://filtermusic.net/
+# category: radio
+# config:
+#   { name: filtermusic_src, type: select, value: web, select: "web=Website|xml=XML Data|buf=Buffered", description: "Which data source to read from. (Both HTML and XML extraction are speedy.)" }
+# png:
+#   iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH3wQeBA4mIX2CmQAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAAGISURBVCjPnVI9SyNRFD333slMMhrNjBJU0FSLIlovy6IWbmelhRJ/gI2lkMXfIOwv2K38qizstFCs3B+wLFhoIfiR1cggkXzMvHnPIiG6
+#   GkE8zYXLPfe8c94F2oAkk7CHHLIIb4AAEIlkcuJmARr8OTxW+pKe9l6PSqN0jOe9hd3014J09tdP96SHSLh8GKirsM1+TvnZ5RN/buO5ItvcUH4BCwC7vex0Vf5stroGMKFu+3omKymdfUTMrs9uDyczAHzfz+VyIpwgu1u8NGccSjbFUyOz/vyOUVVoDZbq3+1gd6lQWMnn85PTEzPR4mdnKjLhrS6uBasArNrZ3t36N29u6/7ge/1038QRECul
+#   arWaNrqLvV/lHx2U/pQYbXowUTUuXwJGV0rxQ/H/sKkU/yuqC4dSfdZA0wMAELd+4wUhNFUABro52Spvg54l9y7Cq1g/RiBwAvTkQURs2waBwQARiGE93RKJzW5v/fxIl68bXdd1gyA4Pv6tlLqLbyJEoamX4iI+gEdAknsz9gP1pgAAAABJRU5ErkJggg==
+# x-doc:
+#   http://code.google.com/p/filtermusic-dot-net/source/browse/
+# priority: extra
+#
+#
+# Filtermusic.net is a radio collection with primarily electronic
+# and dance music stations.
+#
+#  · All entries come with direct server stream URLs.
+#  · No homepage listings, or further genre details etc.
+
+
+from config import *
+from channels import *
+import ahttp
+import re
+import xml.etree.ElementTree as ET
+
+
+# filtermusic.net
+class filtermusic (ChannelPlugin):
+
+    # control attributes
+    has_search = False
+    listformat = "srv"
+    audioformat = "audio/mpeg"
+    titles = dict(listeners=False, bitrate=False, playing=False)
+    categories = ["House / Dance", "Lounge Grooves", "Rock / Metal", "Breaks / Drum'n'Bass", "Various / Independent", "Downtempo / Ambient", "60's / 70's / 80's / 90's", "Hits / Mainstream", "Electronica / Industrial", "Techno / Trance", "HipHop / RnB", "Classical", "Eclectic", "Funk / Soul / Disco", "Reggae / Dub / Dancehall", "International / Ethnic", "Jazz", "Latin / Salsa / Tango"]
+
+
+    # static
+    def update_categories(self):
+        pass
+
+
+    # Refresh station list
+    def update_streams(self, cat, search=None):
+        if conf.filtermusic_src == "web":
+            return self.from_web(cat)
+        else:
+            return self.from_xml(cat)
+
+
+    # Extract directly from filtermusic.net html
+    def from_web(self, cat):
+        ucat = re.sub("\W+", "-", cat.lower().replace("'", ""))
+        html = ahttp.get("http://filtermusic.net/{}".format(ucat))
+
+        ls = re.findall("""<h4>(.*?)</h4><p>(.*?)</p>.*?href='(.*?)'""", html)
+        r = [
+            dict(genre=cat, title=title, playing=descr, url=url)
+            for title,descr,url in ls
+        ]
+        return r
+
+
+    # Parse and cache XML,
+    # Stucture is: <z> <g> id="Genre"> <t id="Title"> <u>URL</u> </t> ... </g> ... </z>
+    def from_xml(self, cat):
+        buf = {}
+        z = ET.fromstring(ahttp.get("http://www.filtermusic.net/xml/list.2.0.xml"))
+        for g in z:
+            try:
+                genre = g.attrib["id"]
+                buf[genre] = []
+            except:
+                # no group "id" for trailing <r>..</r> tag
+                continue
+            for t in g:
+                buf[genre].append(dict(genre=genre, title=t.attrib.get("id"), url="http://"+t[0].text))
+        if conf.filtermusic_src == "buf":
+            self.streams = buf
+        return buf[cat]
+
+
diff --git a/channels/global_key.py b/channels/global_key.py
index 5f509ed..82552f2 100644
--- a/channels/global_key.py
+++ b/channels/global_key.py
@@ -1,24 +1,26 @@
-#
 # api: streamtuner2
 # title: Global keyboard shortcut
 # description: Allows switching between bookmarked radios via key press.
 # type: feature
 # category: ui
-# version: 0.2
+# version: 0.3
+# config:
+#    { name="switch_key", type="text", value="XF86Forward", description="Global key shortcut for switching radio." },
+#    { name="switch_channel", type="text", value="bookmarks:favourite", description="Station list and channels to alternate in." },
+#    { name="switch_random", type="boolean", value=0, description="Pick random channel, instead of next." },
 # priority: extra
-# depends: python-keybinder
-#
+# depends: python:keybinder, uikit >= 1.5
 #
-# Binds a key to global desktop (F13 = left windows key). On keypress
-# it switches the currently playing radio station to another one in
-# bookmarks list.
 #
-# Valid key names are for example F9, <Ctrl>G, <Alt>R, <Super>N
+# Binds a key to global desktop (F13 = left windows key).
+# On keypress switches the currently playing radio station
+# to another one from the bookmarks list.
 #
+# Valid key names are `F9`, `<Ctrl>G`, `<Alt>R` for example.
 
 
 import keybinder
-from config import conf
+from config import *
 import action
 import random
 
@@ -27,25 +29,21 @@ import random
 # register a key
 class global_key(object):
 
+    # control attributes
     module = "global_key"
-    title = "keyboard shortcut"
-    
-    config = [
-        dict(name="switch_key", type="text", value="XF86Forward", description="global key for switching radio"),
-        dict(name="switch_channel", type="text", value="bookmarks:favourite", description="station list to alternate in"),
-        dict(name="switch_random", type="boolean", value=0, description="pick random channel, instead of next"),
-    ]
+    meta = plugin_meta()
     last = 0
 
 
     # register
     def __init__(self, parent):
         self.parent = parent
+        conf.add_plugin_defaults(self.meta, self.module)
         try:
             for i,keyname in enumerate(conf.switch_key.split(",")):    # allow multiple keys
                 keybinder.bind(keyname, self.switch, ((-1 if i else +1)))   # forward +1 or backward -1
         except:
-            print("Key could not be registered")
+            log.ERR("plugin global_key: Key `%s` could not be registered" % conf.switch_key)
     
         
     # key event
@@ -71,7 +69,7 @@ class global_key(object):
             
         # play
         i = self.last
-        action.action.play(streams[i]["url"], streams[i]["format"])
+        action.play(streams[i]["url"], streams[i]["format"])
 
         # set pointer in gtk.TreeView
         if self.parent.channels[channel].current == cat:
diff --git a/channels/history.py b/channels/history.py
index 4237e32..a0d6dfc 100644
--- a/channels/history.py
+++ b/channels/history.py
@@ -3,40 +3,25 @@
 # title: History
 # description: List recently played stations under favourites > history.
 # version: 1.0
-# type: category
+# type: group
 # category: ui
+# config:
+#     { name: history,  type: int,  value: 20,  description: Number of last played streams to keep in history list.,  category: limit }
 # priority: optional
-# 
-# Lists last activated streams in a new [history] tab in the favourites
-# channel.
 #
-#
-#
-
+# Lists recently played streams in a new [history] tab in the
+# bookmarks channel.
 
 
-from config import conf, __print__, dbg
+from config import *
 from channels import *
 
 
-
 class history:
 
-    # plugin info
+    # plugin attributes
     module = "history"
-    title = "History"
-    
-    
-    # configuration settings
-    config = [
-        {
-            "name": "history",
-            "type": "int",
-            "value": "20",
-            "description": "Number of last played streams to keep in history list.",
-            "category": "limit"
-        }
-    ]
+    meta = plugin_meta()
     
     # store
     bm = None
@@ -44,6 +29,7 @@ class history:
 
     # hook up to main tab
     def __init__(self, parent):
+        self.config = self.meta["config"]
 
         # keep reference to main window    
         self.bm = parent.channels["bookmarks"]
@@ -57,7 +43,7 @@ class history:
 
         
     # add to favourites/history stream list
-    def queue(self, row):
+    def queue(self, row, *x, **y):
     
         # assert a present store
         streams = self.bm.streams
diff --git a/channels/icast.png b/channels/icast.png
deleted file mode 100644
index 6f65bed..0000000
Binary files a/channels/icast.png and /dev/null differ
diff --git a/channels/icast.py b/channels/icast.py
deleted file mode 100644
index af01719..0000000
--- a/channels/icast.py
+++ /dev/null
@@ -1,88 +0,0 @@
-# encoding: UTF-8
-# api: streamtuner2
-# title: iCast
-# description: Open collaborative stream directory
-# version: 0.1
-# type: channel
-# category: radio
-# priority: optional
-# documentation: http://api.icast.io/
-#
-# A modern alternative to ShoutCast/ICEcast.
-# Streams are user-contributed, but often lack meta data (homepage) and
-# there's no ordering by listeneres/popularity.
-#
-# OTOH it's every easy to interface with. Though the repeated API queries
-# due to 10-entries-per-query results make fetching slow.
-#
-#
-#
-
-import re
-import json
-from config import conf, dbg, __print__
-from channels import *
-import ahttp as http
-
-
-# Surfmusik sharing site
-class icast (ChannelPlugin):
-
-    # description
-    title = "iCast"
-    module = "icast"
-    homepage = "http://www.icast.io/"
-    has_search = True
-    listformat = "audio/x-scpls"
-    titles = dict(listeners=False, bitrate=False, playing=False)
-
-    categories = []
-    config = [
-    ]    
-    
-    base = "http://api.icast.io/1/"
-    
-
-    # Categories require little post-processing, just dict into list conversion
-    def update_categories(self):
-        self.categories = []
-        for genre,cats in json.loads(http.get(self.base + "genres"))["genres"].items():
-            self.categories.append(genre.title())
-            self.categories.append([c.title() for c in cats])
-
-    # Just copy over stream URLs and station titles
-    def update_streams(self, cat, search=None):
-    
-        if cat:
-            data = self.api("stations/genre/", cat.lower(), {})
-        elif search:
-            data = self.api("stations/search", "", {"q": search})
-        else:
-            pass
-
-        r = []
-        for e in data:
-            r.append(dict(
-                genre = " ".join(e["genre_list"]),
-                url = e["streams"][0]["uri"],
-                format = e["streams"][0]["mime"],
-                title = e["name"],
-                #playing = " ".join(e["current"].items()),
-            ))
-
-        return r
-
-    # fetch multiple pages
-    def api(self, method, path, params):
-        r = []
-        while len(r) < int(conf.max_streams):
-            data = json.loads(http.get( self.base + method + path, params))
-            r += data["stations"]
-            if len(r) >= data["meta"]["total_count"] or len(data["stations"]) < 10:
-                break
-            else:
-                params["page"] = int(data["meta"]["current_page"]) + 1
-                self.parent.status(params["page"] * 9.5 / float(conf.max_streams))
-            #__print__(dbg.DATA, data)
-        return r
-
diff --git a/channels/internet_radio.png b/channels/internet_radio.png
deleted file mode 100644
index c770020..0000000
Binary files a/channels/internet_radio.png and /dev/null differ
diff --git a/channels/internet_radio.py b/channels/internet_radio.py
index 524b9ee..c8fecd3 100644
--- a/channels/internet_radio.py
+++ b/channels/internet_radio.py
@@ -1,13 +1,22 @@
-#
 # api: streamtuner2
-# title: Internet-Radio.com
+# title: Internet-Radio
 # description: Broad list of webradios from all genres.
 # type: channel
 # category: radio
-# version: 1.1
+# version: 1.2
+# url: http://www.internet-radio.org.uk/
+# config:
+#    { name: internetradio_max_pages,  type: int,  value: 5,  category: limit,  description: How many pages to fetch and read. }
 # priority: standard
+# png:
+#   iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAaZJREFUOI2N0j1PlEEUBeBnlsVoRJcCPwINxIJGAoWVFbVK4g8w
+#   oUUTFRNbG3+FhVErK36BhcYCrTR8FS4mRGUXFEKCUizRwLXgnfV1Awk3mUzmnHPvPXNnUkSE40RKFYxhHKMYxFb1GIlnMLVN/etBUjuGWDm6wEHHyQbLW/Qd
+#   JTu8QEq9mJlnogz3sHOJV3iHz2iKzuDiH+bm+J3XD74EU5Gc7pSn/4aYUi14s8BIhkZ5puKhvdgpNFVccaA5oaP7TO66SCuYKnG9weMmjaz5yadqqfvkPE/z
+#   8TLTIp4U3I01ljY5f/gQu1LPGvWS7Rel5NtLzOzRlfk+Ngd4i48Ke9PZVpNGUCvwawvsZm6db8GtoLt9s4iIFotZFEwXybU1VjO+z4egv/MVKlIaqTMMJ2nh
+#   eeH0wQYX4BwbiQkRTSmdktJ1KY3lGYznuw3zWsS2lLo2WMl4P49ycjCbn3k0pfuVg5m1432e4zr9UGMbLwv8avmP/OJOBQOlAsvF3hYNMititzg2Kuxn7iyr
+#   VbSG/tltFHt3CVvATRBRH0lpEvfwXXL3L9zE/NEe0EfHAAAAAElFTkSuQmCC
 #
-# Internet-Radio.co.uk/.com is one of the largest directories of streams.
+# Internet-Radio.co.uk/.com is one of the largest stream directories.
 # Available music genre classifications are mirrored verbatim and flatly.
 #
 # The new version of this plugin alternates between PyQuery and Regex
@@ -15,17 +24,12 @@
 # HTTP retrieval happens in one batch, determined by the number of pages
 # setting, rather than the global max_streams option.
 #
-#
-#
-#
-#
-
 
 
 from channels import *
 import re
-from config import conf, __print__, dbg
-import ahttp as http
+from config import *
+import ahttp
 from pq import pq
 
 
@@ -34,38 +38,21 @@ from pq import pq
 # streams and gui
 class internet_radio (ChannelPlugin):
 
-
-    # description
-    title = "InternetRadio"
-    module = "internet_radio"
-    homepage = "http://www.internet-radio.org.uk/"
-    listformat = "audio/x-scpls"
-    
-    # settings
-    config = [
-        {
-            "name": "internetradio_max_pages",
-            "type": "int",
-            "value": 5,
-            "category": "limit",
-            "description": "How many pages to fetch and read.",
-        },
-    ]
-    
-
-    # category map
+    # control data
+    listformat = "pls"
     categories = []
-    current = ""
-    default = ""
+    base_url = "https://www.internet-radio.com/"
 
 
     # load genres
     def update_categories(self):
     
-        html = http.get(self.homepage)
-        rx = re.compile("""<option[^>]+value="/stations/[-+&.\w\s%]+/">([^<]+)</option>""")
-        
-        self.categories = rx.findall(html)
+        html = ahttp.get(self.base_url)
+        rx = re.compile("""="/stations/[-+&.\w\s%]+/">([^<]+)<""")
+        cats = rx.findall(html)
+        cats = list(set(cats))
+        cats = [s.capitalize() for s in cats]
+        self.categories = sorted(list(set(cats)))
 
 
     # fetch station lists
@@ -84,186 +71,111 @@ class internet_radio (ChannelPlugin):
         
             # Append HTML source
             html.append(
-                http.get(
-                    self.homepage + "stations/" +
+                ahttp.get(
+                    self.base_url + "stations/" +
                     cat.lower().replace(" ", "%20") +
                     "/" + ("page"+str(page) if page>1 else "")
                 )
             )
-            
+
             # Is there a next page?
             if str(page+1) not in rx_pages.findall(html[-1]):
                 break
-            self.parent.status(float(page)/float(max_pages+1))
+            self.parent.status(float(page)/float(max_pages+1), timeout=1)
 
         # Alternatively try regex or pyquery parsing
-        #__print__(dbg.HTTP, html)
-        for use_rx in [not conf.pyquery, conf.pyquery]:
-            try:
-                entries = (self.with_regex(html) if use_rx else self.with_dom(html))
-                if len(entries):
-                    break
-            except Exception as e:
-                __print__(dbg.ERR, e)
-                continue
+        #log.HTTP(html)
+        entries = self.from_html(html)
             
         # fin
+        log.FINISHED("internet_radio.update_streams")
         return entries
 
-    # Advertised 
-    """
-    <tr valign="top" class="stream">
-    <td class="listing1" width="120" align="center">
-    <a onClick="return popitup('/player/?mount=http://uk2.internet-radio.com:31076/listen.pls&title=Box Uk Radio Danceradiouk&website=http://danceradiouk.com ')"
-       href="/player/?mount=http://uk2.internet-radio.com:31076/listen.pls&title=Box Uk Radio Danceradiouk&website=http://danceradiouk.com ">
-       <img style="margin-right: 6px;" src="/images/blank.gif" class="sprite sprite-flash" alt="Flash Player"></a>
-       <a onClick="_gaq.push(['_trackEvent', 'TuneIn', 'Play - M3U', 'http://uk2.internet-radio.com:31076/listen.pls']);"
-       href="http://servers.internet-radio.com/tools/playlistgenerator/?u=http://uk2.internet-radio.com:31076/listen.pls&t=.m3u">
-       <img style="margin-right: 6px;" src="/images/blank.gif" class="sprite sprite-wmp" alt="Windows Media Player"></a>
-       <a onClick="_gaq.push(['_trackEvent', 'TuneIn', 'Play - PLS', 'http://uk2.internet-radio.com:31076/listen.pls']);"
-       href="http://servers.internet-radio.com/tools/playlistgenerator/?u=http://uk2.internet-radio.com:31076/listen.pls&t=.pls">
-       <img style="margin-right: 6px;" src="/images/blank.gif" class="sprite sprite-winamp" alt="Winamp">
-       <img style="margin-right: 6px;" src="/images/blank.gif" class="sprite sprite-itunes" alt="iTunes"></a>
-       <a onClick="_gaq.push(['_trackEvent', 'TuneIn', 'Play - RAM', 'http://uk2.internet-radio.com:31076/listen.pls']);"
-       href="http://servers.internet-radio.com/tools/playlistgenerator/?u=http://uk2.internet-radio.com:31076/listen.pls&t=.ram">
-       <img src="/images/blank.gif" class="sprite sprite-realplayer" alt="Realplayer"></a><br>
-       <div style="margin-top: 10px;"><a href="/stations/80s/">80s</a> <a href="/stations/90s/">90s</a> 00s <a href="/stations/rock/">Rock</a> <a href="/stations/disco/">Disco</a> <a href="/stations/pop/">Pop</a> </div></td>
-    <td class="listing2" ><img src="/images/icons/award_star_silver_1.png" alt="Featured" width="16" height="16">
-       <a href="/station/danceradioukchatbox/" style="font-weight:bold;">Box Uk Radio Danceradiouk</a>
-    <br>Bow Wow Wow - I Want Candy
-    <br><a onClick="_gaq.push(['_trackEvent','Link', 'Station Link', 'http://danceradiouk.com ']);"
-       class="url" href="http://danceradiouk.com " title="Box Uk Radio Danceradiouk" target="_blank">http://danceradiouk.com </a>
-    </td><td class="listing1" align="right" width="100">
-    128 Kbps<br>22 Listeners<br>
-    <img src="/images/blank.gif" class="sprite sprite-de" alt="Germany"><img src="/images/blank.gif" class="sprite sprite-cy" alt="Cyprus">
-    <img src="/images/blank.gif" class="sprite sprite-se" alt="Sweden"><img src="/images/blank.gif" class="sprite sprite-gb" alt="United Kingdom">
-    <img src="/images/blank.gif" class="sprite sprite-rw" alt="Rwanda"><img src="/images/blank.gif" class="sprite sprite-mx" alt="Mexico">
-    <img src="/images/blank.gif" class="sprite sprite-ru" alt="Russian Federation"><img src="/images/blank.gif" class="sprite sprite-si" alt="Slovenia">
-    <img src="/images/blank.gif" class="sprite sprite-ca" alt="Canada"><img src="/images/blank.gif" class="sprite sprite-tt" alt="Trinidad and Tobago">
-    <img src="/images/blank.gif" class="sprite sprite-ch" alt="Switzerland"><img src="/images/blank.gif" class="sprite sprite-hu" alt="Hungary">
-    <img src="/images/blank.gif" class="sprite sprite-lt" alt="Lithuania">
-    </td></tr>
-    """
-    # Normal
-    """
-    <tr valign="top" class="stream">
-    <td class="listing1" width="120" align="center">
-    <img style="margin-right: 6px;" src="/images/icons/blank.png" alt="Blank">
-    <a onClick="_gaq.push(['_trackEvent', 'TuneIn', 'Play - M3U', 'http://80.86.106.136:80/listen.pls']);"
-       href="http://servers.internet-radio.com/tools/playlistgenerator/?u=http://80.86.106.136:80/listen.pls&t=.m3u">
-       <img style="margin-right: 6px;" src="/images/blank.gif" class="sprite sprite-wmp" alt="Windows Media Player"></a>
-       <a onClick="_gaq.push(['_trackEvent', 'TuneIn', 'Play - PLS', 'http://80.86.106.136:80/listen.pls']);"
-       href="http://servers.internet-radio.com/tools/playlistgenerator/?u=http://80.86.106.136:80/listen.pls&t=.pls">
-       <img style="margin-right: 6px;" src="/images/blank.gif" class="sprite sprite-winamp" alt="Winamp">
-       <img style="margin-right: 6px;" src="/images/blank.gif" class="sprite sprite-itunes" alt="iTunes"></a>
-       <a onClick="_gaq.push(['_trackEvent', 'TuneIn', 'Play - RAM', 'http://80.86.106.136:80/listen.pls']);"
-       href="http://servers.internet-radio.com/tools/playlistgenerator/?u=http://80.86.106.136:80/listen.pls&t=.ram">
-       <img src="/images/blank.gif" class="sprite sprite-realplayer" alt="Realplayer"></a>
-       <br><div style="margin-top: 10px;">Top 40 </div></td>
-    <td class="listing2" ><img src="/images/icons/award_star_bronze_1.png" alt="Recommended" width="16" height="16">
-       <a href="/station/kissfmromania/" style="font-weight:bold;">KissFM Romania - www.kissfm.ro</a>
-    ---ALTERNATIVELY--- <span style="color: #c00;"><b> TDI Radio MP3 48kbps</b></span>
-    <br><a onClick="_gaq.push(['_trackEvent','Link', 'Station Link', 'http://www.kissfm.ro']);"
-       class="url" href="http://www.kissfm.ro" title="KissFM Romania - www.kissfm.ro" target="_blank">http://www.kissfm.ro</a>
-    </td><td class="listing1" align="right" width="100">
-    32 Kbps<br>5716 Listeners<br>
-    </td></tr>
-    """
-    # Variation
-    """
-    <td class="listing1" width="120" align="center">
-    <img style="margin-right: 6px;" src="/images/icons/blank.png" alt="Blank">
-      <a onClick="_gaq.push(['_trackEvent', 'TuneIn', 'Play - M3U', 'http://colostreaming.com:8092/listen.pls']);"
-       href="http://servers.internet-radio.com/tools/playlistgenerator/?u=http://colostreaming.com:8092/listen.pls&t=.m3u">
-      <img style="margin-right: 6px;" src="/images/blank.gif" class="sprite sprite-wmp" alt="Windows Media Player"></a>
-      <a onClick="_gaq.push(['_trackEvent', 'TuneIn', 'Play - PLS', 'http://colostreaming.com:8092/listen.pls']);" 
-      href="http://servers.internet-radio.com/tools/playlistgenerator/?u=http://colostreaming.com:8092/listen.pls&t=.pls">
-      <img style="margin-right: 6px;" src="/images/blank.gif" class="sprite sprite-winamp" alt="Winamp"><img style="margin-right: 6px;" src="/images/blank.gif" class="sprite sprite-itunes" alt="iTunes"></a>
-      <a onClick="_gaq.push(['_trackEvent', 'TuneIn', 'Play - RAM', 'http://colostreaming.com:8092/listen.pls']);" href="http://servers.internet-radio.com/tools/playlistgenerator/?u=http://colostreaming.com:8092/listen.pls&t=.ram"><img src="/images/blank.gif" class="sprite sprite-realplayer" alt="Realplayer"></a>
-    <br><div style="margin-top: 10px;">Poprock <a href="/stations/dance/">Dance</a> 50s Various </div></td>
-    <td class="listing2" ><img src="/images/icons/award_star_bronze_1.png" alt="Recommended" width="16" height="16">
-      <span style="color: #c00;"><b> Jack and Jill Radio Pop Rock Dance 50s Big Band Classical Country Folk Jazz Blue</b></span>
-    <br>Vince Gill - When Love Finds You - (Album)When Love Finds You - 1994 Countr
-    <br><a onClick="_gaq.push(['_trackEvent','Link', 'Station Link', 'http://www.jackandjillradio.com']);"
-     class="url" href="http://www.jackandjillradio.com" title="Jack and Jill Radio Pop Rock Dance 50s Big Band Classical Country Folk Jazz Blues Its All Here!" target="_blank">http://www.jackandjillradio.com</a>
-    </td><td class="listing1" align="right" width="100">
-    24 Kbps<br></td>
-    """
+
+    # Switch update method
+    @use_rx
+    def from_html(self, html, use_rx):
+        if use_rx:
+            return self.with_regex(html)
+        else:
+            return self.with_dom(html)
+
 
     # Regex extraction
     def with_regex(self, html):
-        __print__(dbg.PROC, "internet-radio, regex")
+        log.PROC("internet-radio, regex")
         r = []
         html = "\n".join(html)
         
         # Break up into <tr> blocks before extracting bits
         rx_tr = re.compile("""<tr[^>]*>(.+?)</tr>""", re.S)
         rx_data = re.compile(r"""
-               \?u=(https?://[^'">]+/listen\.pls)       
-               .*?
-               <div[^>]+10px[^>]+>(.+?)</div>           
-               .*?
-               listing2
-               .*?
-               (?:href="/station/[^>]+> | <b>) ([^<>]+) </[ab]>
-               (?:\s*</span>\s*)*
-               (?:<br>\s*([^<>]+)\s*<br>)?                
-               .*?
-               (?:<a[^>]+class="url"[^>]+href="([^<">]+)")?  
-               .+
-               listing1
-               .*?
-               (?:(\d+)\s+Kbps \s*<br>\s*)?                  
-               (?:(\d+)\s+Listeners)?
-               (?:\s*<br>\s*)?
-               \s*</td>             
+               playjp',\s*'(https?://[^'">]+)
+               .*?   <h4.*?>([^<>]+)</
+               .*?   <b>([^<>]*)</b>
+         (?:   .*?   href="(.*?)"        )?
+         (?:   .*?   Genres:((?:</?a[^>]+>|\w+|\s+)+)    )?
+               .*?   (\d+)\s*Listeners
+               .*?   (\d+)\s*Kbps
         """, re.S|re.X)
 
         for div in rx_tr.findall(html):
             if div.find('id="pagination"') < 0:
-                #__print__(dbg.DATA, len(div))
+                #log.DATA(len(div))
                 uu = rx_data.search(div)
                 if uu:
-                    (url, genres, title, playing, homepage, bitrate, listeners) = uu.groups()
+                    (url, title, playing, homepage, genres, listeners, bitrate) = uu.groups()
                     
                     # transform data
                     r.append({
                         "url": url,
-                        "genre": self.strip_tags(genres or ""),
-                        "homepage": http.fix_url(homepage or ""),
-                        "title": (title or "").strip().replace("\n", " "),
-                        "playing": (playing or "").strip().replace("\n", " "),
+                        "genre": strip_tags(genres or ""),
+                        "homepage": ahttp.fix_url(homepage or ""),
+                        "title": nl(title or ""),
+                        "playing": nl(playing or ""),
                         "bitrate": int(bitrate or 0),
                         "listeners": int(listeners or 0),
                         "format": "audio/mpeg", # there is no stream info on that, but internet-radio.org.uk doesn't seem very ogg-friendly anyway, so we assume the default here
                     })
                 else:
-                    __print__(dbg.ERR, "rx missed", div)
+                    log.DATA("Regex couldn't decipher entry:", div)
         return r
 
 
     # DOM traversing
     def with_dom(self, html_list):
-        __print__(dbg.PROC, "internet-radio, dom")
+        log.PROC("internet-radio, dom")
         rx_numbers = re.compile("(\d+)")
         r = []
         for html in html_list:
             # the streams are arranged in table rows
             doc = pq(html)
-            for dir in (pq(e) for e in doc("tr.stream")):
+            for dir in (pq(e) for e in doc("tr")):
                 
-                bl = dir.find("td[align=right]").text()
+                # bitrate/listeners
+                bl = dir.find("p").text()
                 bl = rx_numbers.findall(str(bl) + " 0 0")
                 
+                # stream url
+                url = dir.find("i").eq(0).attr("onclick")
+                if url:
+                    url = re.search("(http://[^\'\"\>]+)", url)
+                    if url:
+                        url = url.group(0)
+                    else:
+                        url = ""
+                else:
+                    url = ""
+                
                 r.append({
-                    "title": dir.find("b").text(),
-                    "homepage": http.fix_url(dir.find("a.url").attr("href")),
-                    "url": dir.find("a").eq(2).attr("href"),
-                    "genre": dir.find("td").eq(0).text(),
-                    "bitrate": int(bl[0]),
-                    "listeners": int(bl[1]),
+                    "title": dir.find("h4").text(),
+                    "homepage": ahttp.fix_url(dir.find("a.small").attr("href")),
+                    "url": url,
+                    "genre": dir.find("a[href^='/stations/']").text(),
+                    "listeners": int(bl[0]),
+                    "bitrate": int(bl[1]),
                     "format": "audio/mpeg",
-                    "playing": dir.find("td").eq(1).children().remove().end().text()[13:].strip(),
+                    "playing": dir.find("b").text(),
                 })
         return r
             
diff --git a/channels/itunes.png b/channels/itunes.png
deleted file mode 100644
index b12c292..0000000
Binary files a/channels/itunes.png and /dev/null differ
diff --git a/channels/jamendo.png b/channels/jamendo.png
deleted file mode 100644
index 9c428ae..0000000
Binary files a/channels/jamendo.png and /dev/null differ
diff --git a/channels/jamendo.py b/channels/jamendo.py
index f6a9f27..07f8b11 100644
--- a/channels/jamendo.py
+++ b/channels/jamendo.py
@@ -1,88 +1,73 @@
-
+# encoding: UTF-8
 # api: streamtuner2
 # title: Jamendo
 # description: A license-free music collection and artist hub.
 # type: channel
 # version: 2.2
 # category: radio
+# url: http://jamendo.com/
 # depends: json
+# config: 
+#    { name: jamendo_stream_format, value: ogg,  type: select,  select: "ogg=Vorbis, 112kbit/s|mp32=MP3, 192kbit/s|mp31=MP3, 96kbit/s|flac=FLAC, ≳600kbit/s",  description: "Audio format for tracks, albums, playlists." }
+#    { name: jamendo_image_size,    value: 35,   type: select,  select: "25=25px|35=35px|50=50px|55=55px|60=60px|65=65px|70=70px|75=75px|85=85px|100=100px|130=130px|150=150px|200=200px|300=300px",  description: "Preview images size (height and width) for albums or tracks." }
+#    { name: jamendo_count,         value: 1,    type: int,     description: "How many result sets (200 entries each) to retrieve." }
 # priority: default
+# png:
+#   iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAwNJREFUOI1lk0toXGUYhp/v/8+ZzDQzmdZMZ8YSkxIQCWTTYsALLsQsUsWFQgJeEJQqIigUvBK0FBQULIJKMEKrFjdOW9xoW1AbRdRCEYtd2GCxxUQbk8bMrTNnzpn//1xMLYLv6l2877N7oBcB0GMY
+#   IAUY/p9w/glCrVzby3+LVqaxM4dx+inQV7KIHcKYAbzG4FYgqcmudYBAF+jKnT2QAExPYysVHCdKRQgewwRT0B1FfQboYsLLeE7hk4Oo/iD3rFit4GQGRCsYwJMt7yQVfrS6Go3HUQtvskiwCWM82qlijGdbaUsbTV5G/X65+y+rCzgBRI+VbsSmvvltqVkuX78t6rvpKWtvuMsgOfHtJia66OPz
+#   86564UtDkA2Lm/VJYF6mLgXo50X0xNAHy4cK2jk+diVe+1FVVX/57oIuL66qqmriVF23rZ1TjyTLH2YT/WJ4TY+XRgAMKqNgJ41vebbvTgeFneo6Tb567zPmHn+LxdPnCIxHTFrt2CtB/8BWqtVOAewDWgGDmHG0u1VtztjC7SLqRSUkM5Clsd5ibs/7nDzyLd51xfQPq82PKS5SsHfQAEMsIZG3
+#   khgvJqUqBhFBnSeTS1O/XOPou0eoVxuIsfgkRDsqxBIQgaEVXyIyTVdvGFdbQlD1LibpJDTWG9w8NcHsgRfIb8ni4qbIxhISGU87+Z00BMTuDPhfg47b4X4+oHZ4VxiksxRHi9x3y71M7p5EjAWE6OxBkj/OaSqTgyvJUUIQncuDDx6qRsHHLqpHuR0PW3vbbCj5EYyAAq7dgMVPfHRytt2Kkv7i
+#   5vAw0n1wZuFvFcDq/kGP5/X1tnm+2aiTLQy59MiE00wZ49okK2fNxsWfgnRfmvJA8D3E98tztTWdBtG9IPuw+tqgI+RRTLin1miNJ3EkRhQFxIRcl8+tgj9EN35VXqrV9G2MPIPvWfgv5I1Bh/pNBOGtYCeALEKM6nlc52uUP+XFDfRpRN7psa/ZeBWSAmJ99qrQGaANeJA3AUjpXhLZ1zsD+g+5
+#   Cnd9pANrngAAAABJRU5ErkJggg==
 #
-# Now utilizes the Jamendo /v3.0/ API.
+# Utilizes the Jamendo /v3.0/ API now completely. That means all tracks will
+# be available as Ogg Vorbis per default.
 #
-# Radio station lists are fixed for now. Querying the API twice per station
-# doesn't seem overly sensible.
+# Radio stations are a fixed internal list. There's not much point in querying
+# the API for them. (They're really just automated playlists, and MP3-only.)
 #
-# Tracks are queried by genre, where currently there's just a small built-in
-# tag list in ST2
+# Genre lists for tracks are built-in, but give a good enough overview. There's
+# no "related" lookup possibility yet in our station lists. (Might be feasible
+# as plugin though, via [load more] button etc...)
 #
-# Per default Ogg Vorbis is used as streaming format. Playlists and albums
-# return as XSPF playlists.
+# Per default Ogg Vorbis is used as streaming format. Track URLs can be played
+# back directly. Playlists and albums now require a roundtrip over the action
+# module to extract the JAMJson format into pls/m3u/xspf. (The previous v2 API
+# retrieval is going to become inaccessible soon.)
+
+
+import re
+import ahttp
+from config import *
+from channels import *
+import json
+
+
+# jamendo CC music sharing site
 #
 #
-# The v3.0 streaming URLs don't seem to work. Therefore some /get2 URLs will
-# be used.
+# For the newer v3.0 streaming URLs there's a custom action.extract_playlist
+# format now (JAMJSON), so that albums/feeds can be extracted into standard
+# playlists as well.
 #
-#  [x]  http://api.jamendo.com/v3.0/playlists/file?client_id=&id=
+#  [+]  http://api.jamendo.com/v3.0/playlists/file?client_id=&id=
 #  [+]  http://storage-new.newjamendo.com/?trackid=792843&format=ogg2&u=0
 #  [+]  http://api.jamendo.com/get2/stream/track/xspf/?playlist_id=171574&n=all&order=random
 #  [+]  http://api.jamendo.com/get2/stream/track/xspf/?album_id=%s&streamencoding=ogg2&n=all
 #
 # Seem to resolve to OGG Vorbis each.
 #
-
-
-
-import re
-import ahttp as http
-from config import conf, __print__, dbg
-from channels import *
-import json
-
-
-
-
-
-
-# jamendo CC music sharing site
 class jamendo (ChannelPlugin):
 
-    # description
-    title = "Jamendo"
-    module = "jamendo"
-    homepage = "http://www.jamendo.com/"
-    version = 0.3
+    # control flags
     has_search = True
-
     base = "http://www.jamendo.com/en/"
-    listformat = "url/http"
+    audioformat = "audio/ogg"
+    listformat = "srv"
     api_base = "http://api.jamendo.com/v3.0/"
     cid = "49daa4f5"
-
     categories = []
-
     titles = dict( title="Title", playing="Album/Artist/User", bitrate=False, listeners=False )
- 
-    config = [
-        {"name":"jamendo_stream_format",
-         "value":"ogg",
-         "type": "select",
-         "select": "ogg=Ogg Vorbis|mp32=MP3, 192vbr|mp31=MP3, 96kbps|flac=Xiph FLAC",
-         "description": "Default streaming audio format. Albums and playlists still return Vorbis mostly for best quality."
-        },
-        {"name": "jamendo_image_size",
-         "value": "50",
-         "type": "select",
-         "select": "25=25px|35=35px|50=50px|55=55px|60=60px|65=65px|70=70px|75=75px|85=85px|100=100px|130=130px|150=150px|200=200px|300=300px",
-         "description": "Preview images size (height and width) for albums or tracks."
-        },
-        {"name": "jamendo_count",
-         "value": "1",
-         "type":"text",
-         "description": "How many result sets (200 entries each) to retrieve."
-        }
-    ]    
-    
 
 
     # refresh category list
@@ -91,6 +76,7 @@ class jamendo (ChannelPlugin):
         self.categories = [
             "radios",
             "playlists",
+                ["feeds"],  # should go below `albums`, but looks nicer here
             "albums",
                 ["newest"],
             "tracks",
@@ -280,15 +266,16 @@ class jamendo (ChannelPlugin):
     def update_streams(self, cat, search=None):
 
         entries = []
-        fmt = self.stream_mime(conf.jamendo_stream_format)
-        
+        fmt = conf.jamendo_stream_format
+        fmt_mime = self.stream_mime(fmt)
+                
         # Static list of Radios
         if cat == "radios":
             for radio in ["BestOf", "Pop", "Rock", "Lounge", "Electro", "HipHop", "World", "Jazz", "Metal", "Soundtrack", "Relaxation", "Classical"]:
                 entries.append({
                     "genre": radio,
                     "title": radio,
-                    "url": "http://streaming.radionomy.com/Jam" + radio,
+                    "url": "http://streaming.radionomy.com/Jam" + radio,  # optional +".m3u"
                     "playing": "various artists",
                     "format": "audio/mpeg",
                     "homepage": "http://www.jamendo.com/en/radios",
@@ -297,14 +284,21 @@ class jamendo (ChannelPlugin):
         
         # Playlist
         elif cat == "playlists":
-            for e in self.api(method = cat, order = "creationdate_desc"):
+            for e in self.api(method="playlists", order="creationdate_desc"):
                 entries.append({
                     "title": e["name"],
                     "playing": e["user_name"],
                     "homepage": e["shareurl"],
-                    #"url": "http://api.jamendo.com/v3.0/playlists/file?client_id=%s&id=%s" % (self.cid, e["id"]),
-                    "url": "http://api.jamendo.com/get2/stream/track/xspf/?playlist_id=%s&n=all&order=random&from=app-%s" % (e["id"], self.cid),
-                    "format": "application/xspf+xml",
+                    "extra": e["creationdate"],
+                    "format": fmt_mime,
+                    #"listformat": "xspf", # deprecated
+                    #"url": "http://api.jamendo.com/get2/stream/track/xspf/?playlist_id=%s&n=all&order=random&from=app-%s" % (e["id"], self.cid),
+                    #"listformat": "href", # raw ZIP redirect
+                    #"url": "http://api.jamendo.com/v3.0/playlists/file?client_id={}&audioformat=mp32&id={}".format(self.cid, e["id"]),
+                    #"listformat": "href", # raw ZIP direct
+                    #"url": e["zip"],
+                    "listformat": "jamj",
+                    "url": "http://api.jamendo.com/v3.0/playlists/tracks?client_id={}&audioformat={}&id={}".format(self.cid, fmt, e["id"]),
                 })
 
         # Albums
@@ -321,18 +315,35 @@ class jamendo (ChannelPlugin):
                     "img": e["image"],
                     "homepage": e["shareurl"],
                     #"url": "http://api.jamendo.com/v3.0/playlists/file?client_id=%s&id=%s" % (self.cid, e["id"]),
-                    "url": "http://api.jamendo.com/get2/stream/track/xspf/?album_id=%s&streamencoding=ogg2&n=all&from=app-%s" % (e["id"], self.cid),
-                    "format": "application/xspf+xml",
+                    #"url": "http://api.jamendo.com/get2/stream/track/xspf/?album_id=%s&streamencoding=ogg2&n=all&from=app-%s" % (e["id"], self.cid),
+                    #"format": "audio/ogg",
+                    #"listformat": "xspf",
+                    "url": "http://api.jamendo.com/v3.0/tracks?client_id={}&audioformat={}&album_id={}".format(self.cid, fmt, e["id"]),
+                    "listformat": "jamj",
+                    "format": fmt_mime,
                 })
 		
+        # Feeds (News)
+        elif cat == "feeds":
+            for e in self.api(method="feeds", order="date_start_desc", target="notlogged"):
+              if e.get("joinid") and e.get("subtitle"):
+                entries.append({
+                    "genre": e["type"],
+                    "title": e["title"]["en"],
+                    "playing": e["subtitle"]["en"],
+                    "extra": e["text"]["en"],
+                    "homepage": e["link"],
+                    "format": fmt_mime,
+                    "listformat": "jamj",
+                    "url": "http://api.jamendo.com/v3.0/tracks?client_id={}&audioformat={}&album_id={}".format(self.cid, fmt, e["joinid"]),
+                })
+
         # Genre list, or Search
         else:
             if cat:
-                data = self.api(method = "tracks", order = "popularity_week", include = "musicinfo",
-                                fuzzytags = cat, audioformat = conf.jamendo_stream_format)
+                data = self.api(method="tracks", order="popularity_week", include="musicinfo", fuzzytags=cat, audioformat=fmt)
             elif search:
-                data = self.api(method = "tracks", order = "popularity_week", include = "musicinfo",
-                                search = search, audioformat = conf.jamendo_stream_format)
+                data = self.api(method="tracks", order="popularity_week", include="musicinfo", search=search, audioformat=fmt)
             else:
                 data = []
             for e in data:
@@ -344,9 +355,10 @@ class jamendo (ChannelPlugin):
                     "playing": e["album_name"] + " / " + e["artist_name"],
                     "img": e["album_image"],
                     "homepage": e["shareurl"],
-                    #"url": e["audio"],
-                    "url": "http://storage-new.newjamendo.com/?trackid=%s&format=ogg2&u=0&from=app-%s" % (e["id"], self.cid),
-                    "format": self.stream_mime(fmt),
+                    "url": e["audio"],
+                    #"url": "http://storage-new.newjamendo.com/?trackid=%s&format=ogg2&u=0&from=app-%s" % (e["id"], self.cid),
+                    "format": fmt_mime,
+                    "listformat": "srv",
                 })
  
         # done    
@@ -368,7 +380,7 @@ class jamendo (ChannelPlugin):
             }.items()) + list(params.items())
         )
         while (params["offset"] < max) and (len(r) % 200 == 0):
-            data = http.get(self.api_base + method, params)
+            data = ahttp.get(self.api_base + method, params, encoding="utf-8")
             data = json.loads(data)
             if data:
                 r += data["results"]
@@ -386,8 +398,5 @@ class jamendo (ChannelPlugin):
             "mp3": "audio/mpeg", "mp31": "audio/mpeg", "mp32": "audio/mpeg",
             "flac": "audio/flac"
         }
-        if name in map:
-            return map[name]
-        else:
-            return map["mp3"]
+        return map.get(name) or map["mp3"]
 
diff --git a/channels/links.py b/channels/links.py
index 9ec1d46..588debb 100644
--- a/channels/links.py
+++ b/channels/links.py
@@ -1,19 +1,19 @@
-#
 # api: streamtuner2
 # title: Links to directory services
 # description: Static list of various music directory websites.
-# type: category
+# type: group
 # category: web
 # version: 0.2
-# priority: default
-#
-#
-# Simply adds a "links" entry in bookmarks tab, where known channels
-# and some others are listed with homepage links.
+# priority: standard
+# config: -
 #
+# Simply adds a "links" entry in bookmarks tab, where known services
+# are listed with homepage links. Registered plugins automatically
+# end up on top of that list.
 #
 
 
+from config import *
 from channels import *
 import copy
 
@@ -24,12 +24,7 @@ class links (object):
 
     # plugin info
     module = "links"
-    title = "Links"
-    version = 0.1
-    
-    
-    # configuration settings
-    config = [    ]
+    meta = plugin_meta()
     
     # list
     streams = [    ]
@@ -45,6 +40,7 @@ class links (object):
         ("stream", "Pirateradio Network", "http://www.pirateradionetwork.com/"),
         ("stream", "radio-locator", "http://www.radio-locator.com/"),
         ("stream", "Radio Station World", "http://radiostationworld.com/"),
+        ("stream", "MusicGOAL", "http://www.musicgoal.com/"),
         ("download", "Live Music Archive(.org)", "https://archive.org/details/etree"),
         ("download", "FMA, free music archive", "http://freemusicarchive.org/"),
         ("download", "Audiofarm", "http://audiofarm.org/"),
@@ -61,7 +57,6 @@ class links (object):
         ("commercial", "Google Play Music", "https://play.google.com/about/music/"),
         ("commercial", "Deezer", "http://www.deezer.com/features/music.html"),
        #("stream", "SurfMusik.de", "http://www.surfmusic.de/"),
-       #("stream", "MusicGOAL", "http://www.musicgoal.com/"),
     ]
     
     
@@ -83,17 +78,20 @@ class links (object):
 
     def populate(self, parent):
     
-        # collect links from channel plugins
+        # Collect links from channel plugins
         for name,channel in parent.channels.items():
-          try:
-            self.streams.append({
-                "favourite": 1,
-                "genre": "channel",
-                "title": channel.title,
-                "homepage": channel.homepage,
-                "type": "text/html",
-            })
-          except: pass
+            try:
+                self.streams.append({
+                    "favourite": 1,
+                    "genre": "channel",
+                    "title": channel.meta.get("title", channel.module),
+                    "homepage": channel.meta.get("url", ""),
+                    "type": "text/html",
+                })
+            except Exception as e:
+                log.ERR("links: adding entry failed:", e)
+
+        # Add built-in link list
         for row in self.default:
             (genre, title, homepage) = row
             self.streams.append({
@@ -107,4 +105,4 @@ class links (object):
         parent.bookmarks.streams[self.module] = self.streams
 
         # redraw category
-        parent.bookmarks.reload_if_current(self.module)
+#        parent.bookmarks.reload_if_current(self.module)
diff --git a/channels/live365.png b/channels/live365.png
deleted file mode 100644
index 7bb1942..0000000
Binary files a/channels/live365.png and /dev/null differ
diff --git a/channels/live365.py b/channels/live365.py
index f2100c5..e6ef4d4 100644
--- a/channels/live365.py
+++ b/channels/live365.py
@@ -2,63 +2,70 @@
 # api: streamtunter2
 # title: Live365
 # description: Around 5000 categorized internet radio streams, some paid ad-free ones.
+# version: 0.4
 # type: channel
 # category: radio
-# version: 0.3
+# url: http://www.live365.com/
+# config: -
 # priority: optional
-#
+# png:
+#   iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAzlJREFUOI1lk0tMXGUUx3/fvTP3zgyPGR5SKIQODdDGEtoCJdFopA9SJTFMjInGaJDEulWTGg2JApqoO+PShaAmdVEXQAxoCtgKNjYFWrQgMD6KDAylkde8Lnfunfu5IJii
+#   Z3POSc7//M/i/AT/ichrbUE1NyckfN5WV0kpUjpYS4s4sdhAZnOrP9jTv/jgvHiw+ftSb5f2UEGnfuQYCIG9fg8pJa5AIdJIEf9hhNTkze5gz9ddexrXXrE1+E2v7/TZl9lcx/hxBCu5DUikzCDTFjiSrMYnyGp8vPOuaR+quNTXDqACRLve7cp5suV1YaSwpyewYts4
+#   dgbhcuGprkFoOnZ0BTM8j9A85J576sQr96Pik4Xfr6l/nj8b9D7yaJ8rz8/O2FWctEXGTKP6/eQ924ZeUY21sowViSDTaaylJbSKSrCsplfNnS9cMiNC3ppayEhyX2wHAdt9l8k+cx6h68SGhzCmJ9CP1hAIPYdjGGQ21lF82cSHR0MuxzBbFU0js7FOOhzGU1tL9ulm
+#   3IUHAMhtbsFbc5yd2TsAJEavIC0b78k6sGWrohUfxJybJzE8gpoXAMBeWwPAWAqTvD6Ou6QULXgYgOwzzRi3bpMcv47n4WMo6B4yWzHM+TDGz7suyN2k5x9Er6zCSSSIDQ6x+tabKD4f7tIynHgcK3oPZf3mDfSqStSCQnZmf91V2hmiFy9iLixgLa+wMTmIOTeHq6gY
+#   AOuvCHp1NcmFMK6ERx0wEvGmou5OtLJSrJUV7n/wEWY4TOLKCHsnlfV8hq+hgc3eL4l9O4y7sYGErgyIofqaYEHdqbvljzWx+v6HaI5ERSCE2Pen0pE4Wh22NUXxOx1Exq+yOTVRobRMzSxGZqa6zUI/3uefYcOrsq0JEqokhcRAkhSSuBti+gw5F9qxSw+wuRrpbp6e
+#   XVQBLi+vXatfngseeuGlE/5TjUQX7pCSNoZbkNIUUrqCWRCg8u0OKC9h/L2Oz0OjP73xP5g+PXeyq+R4Q+eR5qfJ8maz/ds8AIGqoySNBMs3xvhjbKT7wvfT/8K0bwHAxy31QcWRIaA1v/ww3kA+0V8mAQb8+UX9bV99tw/nfwAe2WTAAcikxQAAAABJRU5ErkJggg==
 # 
+# Live365 lists around 5000 radio stations. Some are paid
+# entries and require a logon. This plugins tries to filter
+# those out.
+
+
+# Non-tracking cookies:
 #
-# We're currently extracting from the JavaScript;
-#
-#    stn.set("param", "value");
-#
-# And using a HTML5 player direct URL now:
-#
-#    /cgi-bin/play.pls?stationid=%s&direct=1&file=%s.pls
-#
-#
-#
+# box_mc |bitrate=256|ls=3|hasFlash=Y|ab=viphp:G3|POC=8|mvd=2|SUPMsg=| (desktop player off)
+#        |ab=viphp:G3|POC=10|bitrate=256|mvd=2|ls=3|hasFlash=Y|SUPMsg=| (desktop player on)
+# pg_mc  |hp=A|darg=|curl=|curlt=Live365 - My Live365 - Listen Settings|
+# session_mc |plr=N|site=web|
+# player_mc |Vol=50|
 
 
 # streamtuner2 modules
-from config import conf
-from mygtk import mygtk
-import ahttp as http
+from config import *
+from uikit import *
+import ahttp
 from channels import *
-from config import __print__, dbg
 import action
 
 # python modules
 import re
-import xml.dom.minidom
-from xml.sax.saxutils import unescape as entity_decode, escape as xmlentities
-import gtk
 import copy
 import urllib
 from itertools import groupby
 from time import time
-from xml.dom.minidom import parseString
 
 
 # channel live365
+#
+# We're currently extracting from the JavaScript;
+#
+#    stn.set("param", "value");
+#
+# And using a HTML5 player direct URL now:
+#
+#    /cgi-bin/play.pls?stationid=%s&direct=1&file=%s.pls
+#
 class live365(ChannelPlugin):
 
-    # desc
-    module = "live365"
-    title = "Live365"
-    homepage = "http://www.live365.com/"
+    # control attributes
     base_url = "http://www.live365.com/"
     has_search = True
-    listformat = "url/http"
+    listformat = "pls"
     mediatype = "audio/mpeg"
     has_search = False
 
     # content
     categories = ['Alternative', 'Blues', 'Classical', 'Country', 'Easy Listening', 'Electronic/Dance', 'Folk', 'Freeform', 'Hip-Hop/Rap', 'Inspirational', 'International', 'Jazz', 'Latin', 'Metal', 'New Age', 'Oldies', 'Pop', 'R&B/Urban', 'Reggae', 'Rock', 'Seasonal/Holiday', 'Soundtracks', 'Talk']
-    current = "Alternative"
-    default = "Pop"
-    empty = None
     
     # redefine
     streams = {}
@@ -83,11 +90,11 @@ class live365(ChannelPlugin):
     # extract stream infos
     def update_streams(self, cat):
 
-        # Retrieve genere index pages    
+        # Retrieve genre index pages    
         html = ""
         for i in [1, 17, 33, 49]:
             url = "http://www.live365.com/cgi-bin/directory.cgi?first=%i&site=web&mode=3&genre=%s&charset=UTF-8&target=content" % (i, cat.lower())
-            html += http.get(url, feedback=self.parent.status)
+            html += ahttp.get(url)
         
         # Extract from JavaScript       
         rx = re.compile(r"""
@@ -126,32 +133,4 @@ class live365(ChannelPlugin):
         return self.gi
 
 
-    # inject session id etc. into direct audio url
-    def UNUSED_play(self, row):
-        if row.get("url"):
-
-            # params
-            id = row["id"]
-            name = row["name"]
-
-            # get mini.cgi station resource
-            mini_url = "http://www.live365.com/cgi-bin/mini.cgi?version=3&templateid=xml&from=web&site=web" \
-                 + "&caller=&tag=web&station_name=%s&_=%i111" % (name, time())
-            mini_r = http.get(mini_url, content=False)
-            mini_xml = parseString(mini_r.text).getElementsByTagName("LIVE365_PLAYER_WINDOW")[0]
-            mini = lambda name: mini_xml.getElementsByTagName(name)[0].childNodes[0].data
-            
-            # authorize with play.cgi
-            play_url = ""
-
-            # mk audio url
-            play =  "http://%s/play" % mini("STREAM_URL") \
-                 + "?now=0&" \
-                 + mini("NANOCASTER_PARAMS") \
-                 + "&token=" + mini("TOKEN") \
-                 + "&AuthType=NORMAL&lid=276006-deu&SaneID=178.24.130.71-1406763621701"
-            
-            # let's see what happens
-            action.action.play(play, self.mediatype, self.listformat)
-
 
diff --git a/channels/modarchive.png b/channels/modarchive.png
deleted file mode 100644
index 7ae7b5b..0000000
Binary files a/channels/modarchive.png and /dev/null differ
diff --git a/channels/modarchive.py b/channels/modarchive.py
index 67b8431..f29d49a 100644
--- a/channels/modarchive.py
+++ b/channels/modarchive.py
@@ -4,62 +4,59 @@
 # description: Collection of module / tracker audio files (MOD, S3M, XM, etc.)
 # type: channel
 # version: 0.2
+# url: http://www.modarchive.org/
 # priority: extra
-# category: music
+# config: -
+# category: collection
+# png:
+#   iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAy1JREFUOI01k0trXGUAQM/33W/unblz55VJk0wekzSdaTtJ2oh0YRBEUCtUWoug4MKl4EoEQf+FoAvxDxhwo4uIoiBSH8GABElL0zQPnbyaRzMzSSadua/vc1FdnOXZHDii
+#   dvsjg5BISzJWsJgaLYKwWLi/ye6pAAyFbJpnL5cRAta3D9nYOUIKAFChBuKAmUqWl65dolar0d9X5NXNXd7/5BuCKGbi/AApJ0EYxUxdGEJZFiv1PRKWhcrLJ8xMlrj1yvNMTF5BSEng+7R9gx+G9BUL9OQy+EGAlJIgihkf6qX+6IggjFCvz1R4+603yOYLRIFPfWuX
+#   2W/voGUCN5UiiU8UdBDSJo5jHDvB0XGbMIqRUqL+WD/m6mod295jZWOTi6P9JIIWXu8QKUcxPWwzPuCxtNUmn3Fpnpxxd20HrQ1Sghh/7UNjy5gghvI5j/duXsNzHUQyzxezc3zwzg2Gh8t8Nvs9ey2f5Y0d/DBCWRZCgFSWhZ1MU8jn6fgRzdYxynG5dGGMmy88Q6k0
+#   SMZzaZ52WFrdxk3a5DwXKQRxbFBXKkP09WRQlsRozc5Bk3J5hHTK4cb1F1HKJmkrJqujWMqmmM8QRTFBGLG+fYgaLRWJtUbrmISTZL/RwnOTfPXdr0xXB8nlciSUxI1aVIqSZvcMIxw816E2XkKFUYQRAokgDCO8dArfD/npz4fUd/c564acz2qmJqqkvDySmLnflwli
+#   SRxrpDGgpAQhSNoWh6chc3cWKWRcrFSWMPCpjJX4+d4+n389D1JxtTqC0ZqTsw7ywT+PCMIIP4h4WN9j4f4Wvy0fkM+l6XZ9elKSSvUiipjmwQ7NZoNSfy+NVpvVzQNUfa/B49YZWms6fog2mr7eAo5t0zo5pVz06Osf4N03X+b6czVGR4aZv7vB/NI6aTeJVFLypBvQ
+#   8UMSCQsQZFwHEAijGRk8h207fPrlj2wdthkq9dNotQkjjZISpY1BSoExoLXBmKcoSxBr8ENYvLfKDwsPWPt7k8nxAX5ZXMFOWERaIy7f/tj8L0n5tGzWSzJdHcZNOihpOGic8tfaI4TRZNM2j4+7yP9+/hd7YWLXivTEWgAAAABJRU5ErkJggg==
 #
-#
-# Just a genre browser.
+# A genre browser for tracker music files from the MOD Archive.
 #
 # MOD files dodn't work with all audio players. And with the default
 # download method, it'll receive a .zip archive with embeded .mod file.
-# VLC in */* seems to work fine however.
-#
-# Modarchive actually provides an API
-# http://modarchive.org/index.php?xml-api
-# (If only it wasn't XML based..)
 #
+# Configuring VLC for `audio/mod+zip` or just a generic `*/*` works
+# most reliably. See the help on how to define wget/curl to download
+# them as well.
 
 
 import re
-import ahttp as http
+import ahttp
 from config import conf
 from channels import *
-from config import __print__, dbg
-
-
-
-
-
-
-
-
-
+from config import *
 
 
-
-
-
-# MODs
+# The MOD Archive
+#
+# Modarchive actually provides an API
+# http://modarchive.org/index.php?xml-api
+# (If only it wasn't XML based..)
+#
 class modarchive (ChannelPlugin):
 
-    # description
-    title = "modarchive"
-    module = "modarchive"
-    homepage = "http://www.modarchive.org/"
+    # control attributes
+    has_search = False
     base = "http://modarchive.org/"
+    audioformat = "audio/mod+zip"
+    listformat = "href"
     titles = dict(genre="Genre", title="Song", playing="File", listeners="Rating", bitrate=0)
 
     # keeps category titles->urls    
     catmap = {"Chiptune": "54", "Electronic - Ambient": "2", "Electronic - Other": "100", "Rock (general)": "13", "Trance - Hard": "64", "Swing": "75", "Rock - Soft": "15", "R & B": "26", "Big Band": "74", "Ska": "24", "Electronic - Rave": "65", "Electronic - Progressive": "11", "Piano": "59", "Comedy": "45", "Christmas": "72", "Chillout": "106", "Reggae": "27", "Electronic - Industrial": "34", "Grunge": "103", "Medieval": "28", "Demo Style": "55", "Orchestral": "50", "Soundtrack": "43", "Electronic - Jungle": "60", "Fusion": "102", "Electronic - IDM": "99", "Ballad": "56", "Country": "18", "World": "42", "Jazz - Modern": "31", "Video Game": "8", "Funk": "32", "Electronic - Drum & Bass": "6", "Alternative": "48", "Electronic - Minimal": "101", "Electronic - Gabber": "40", "Vocal Montage": "76", "Metal (general)": "36", "Electronic - Breakbeat": "9", "Soul": "25", "Electronic (general)": "1", "Punk": "35", "Pop - Synth": "61", "Electronic - Dance": "3", "Pop (general)": "12", "Trance - Progressive": "85", "Trance (general)": "71", "Disco": "58", "Electronic - House": "10", "Experimental": "46", "Trance - Goa": "66", "Rock - Hard": "14", "Trance - Dream": "67", "Spiritual": "47", "Metal - Extreme": "37", "Jazz (general)": "29", "Trance - Tribal": "70", "Classical": "20", "Hip-Hop": "22", "Bluegrass": "105", "Halloween": "82", "Jazz - Acid": "30", "Easy Listening": "107", "New Age": "44", "Fantasy": "52", "Blues": "19", "Other": "41", "Trance - Acid": "63", "Gothic": "38", "Electronic - Hardcore": "39", "One Hour Compo": "53", "Pop - Soft": "62", "Electronic - Techno": "7", "Religious": "49", "Folk": "21"}
     categories = []
- 
-    
     
 
     # refresh category list
     def update_categories(self):
 
-        html = http.get("http://modarchive.org/index.php?request=view_genres")
+        html = ahttp.get("http://modarchive.org/index.php?request=view_genres")
 
         rx_current = re.compile(r"""
             >\s+(\w[^<>]+)\s+</h1>  |
@@ -80,35 +77,18 @@ class modarchive (ChannelPlugin):
             else:
                 sub.append(subname)
                 self.catmap[subname] = id
-        #
-        
-        #-- keep catmap as cache-file, it's essential for redisplaying        
-        self.save()
-        return
-
 
-    # saves .streams and .catmap
-    def save(self):
-        ChannelPlugin.save(self)
-        conf.save("cache/catmap_" + self.module, self.catmap)
-
-
-    # read previous channel/stream data, if there is any
-    def cache(self):
-        ChannelPlugin.cache(self)
-        # catmap
-        cache = conf.load("cache/catmap_" + self.module)
-        if (cache):
-            self.catmap = cache
+        # .categories and .catmap are saved by reload_categories()
         pass
 
 
+
     # download links from dmoz listing
     def update_streams(self, cat):
 
         url = "http://modarchive.org/index.php"
         params = dict(query=self.catmap[cat], request="search", search_type="genre")
-        html = http.get(url, params)
+        html = ahttp.get(url, params)
         entries = []
         
         rx_mod = re.compile("""
@@ -120,12 +100,12 @@ class modarchive (ChannelPlugin):
         
         for uu in rx_mod.findall(html):
             (url, id, fmt, title, file, rating) = uu
-            #__print__( dbg.DATA, uu )
+            #log.DATA( uu )
             entries.append({
                 "genre": cat,
                 "url": url,
                 "id": id,
-                "format": self.mime_fmt(fmt) + "+zip",
+                "format": "audio/mod+zip",
                 "title": title,
                 "playing": file,
                 "listeners": int(rating if rating else 0),
diff --git a/channels/musicgoal.png b/channels/musicgoal.png
deleted file mode 100644
index a3a3c75..0000000
Binary files a/channels/musicgoal.png and /dev/null differ
diff --git a/channels/musicgoal.py b/channels/musicgoal.py
deleted file mode 100644
index 48a0c2e..0000000
--- a/channels/musicgoal.py
+++ /dev/null
@@ -1,103 +0,0 @@
-#
-# api: streamtuner2
-# title: MUSICGOAL
-# description: Broad list of radio stations and podcasts. Provides a sane API, but only 5 results each.
-# type: channel
-# category: radio
-# version: 0.1
-# priority: optional
-# status: experimental
-#
-# Musicgoal.com is a radio and podcast directory. This plugin tries to use
-# the new API for accessing listing data.
-#
-#
-
-
-
-# st2 modules
-from config import conf
-from mygtk import mygtk
-import ahttp as http
-from channels import *
-
-# python modules
-import re
-import json
-
-
-
-          
-# I wonder what that is for                                             ---------------------------------------
-class musicgoal (ChannelPlugin):
-
-        # desc
-        module = "musicgoal"
-        title = "MUSICGOAL"
-        homepage = "http://www.musicgoal.com/"
-        base_url = homepage
-        listformat = "url/direct"
-
-        # settings
-        config = [
-        ]
-        api_podcast = "http://www.musicgoal.com/api/?todo=export&todo2=%s&cat=%s&format=json&id=1000259223&user=streamtuner&pass=tralilala"
-        api_radio = "http://www.musicgoal.com/api/?todo=playlist&format=json&genre=%s&id=1000259223&user=streamtuner&pass=tralilala"
-
-        # categories are hardcoded
-        podcast = ["Arts", "Management", "Recreation", "Knowledge", "Nutrition", "Books", "Movies & TV", "Music", "News", "Business", "Poetry", "Politic", "Radio", "Science", "Science Fiction", "Religion", "Sport", "Technic", "Travel", "Health", "New"]
-        radio = ["Top radios", "Newcomer", "Alternative", "House", "Jazz", "Classic", "Metal", "Oldies", "Pop", "Rock", "Techno", "Country", "Funk", "Hip hop", "R&B", "Reggae", "Soul", "Indian", "Top40", "60s", "70s", "80s", "90s", "Sport", "Various", "Radio", "Party", "Christmas", "Firewall", "Auto DJ", "Audio-aacp", "Audio-ogg", "Video", "MyTop", "New", "World", "Full"]
-        categories = ["podcasts/", podcast, "radios/", radio]
-        #catmap = {"podcast": dict((i+1,v) for enumerate(self.podcast)), "radio": dict((i+1,v) for enumerate(self.radio))}
-        
-
-
-        # nop
-        def update_categories(self):
-            pass
-
-
-        # request json API
-        def update_streams(self, cat):
-
-            # category type: podcast or radio
-            if cat in self.podcast:
-                grp = "podcast"
-                url = self.api_podcast % (grp, self.podcast.index(cat)+1)
-            elif cat in self.radio:
-                grp = "radio"
-                url = self.api_radio % cat.lower().replace(" ","").replace("&","")
-            else:
-                return []
-                
-            # retrieve API data
-            data = http.get(url, params=None, ajax=1)
-            data = json.loads(data)
-                
-            # tranform datasets            
-            if grp == "podcast":
-                return [{
-                    "genre": cat,
-                    "title": row["titel"],
-                    "homepage": row["url"],
-                    "playing": str(row["typ"]),
-                    #"id": row["id"],
-                    #"listeners": int(row["2"]),
-                    #"listformat": "text/html",
-                    "url": "",
-                } for row in data]
-            else:
-                return [{
-                    "format": self.mime_fmt(row["ctype"]),
-                    "genre": row["genre"] or cat,
-                    "url": "http://%s:%s/%s" % (row["host"], row["port"], row["pfad"]),
-                    "listformat": "url/direct",
-                    "id": row["id"],
-                    "title": row["name"],
-                    "playing": row["song"],
-                    "homepage": row.get("homepage") or row.get("url"),
-                } for row in data]
-
-
-
-
diff --git a/channels/myoggradio.png b/channels/myoggradio.png
deleted file mode 100644
index 6b66bd0..0000000
Binary files a/channels/myoggradio.png and /dev/null differ
diff --git a/channels/myoggradio.py b/channels/myoggradio.py
index 6f13a4c..1a7fb68 100644
--- a/channels/myoggradio.py
+++ b/channels/myoggradio.py
@@ -1,12 +1,21 @@
-#
+
 # api: streamtuner2
 # title: MyOggRadio
 # description: Open source internet radio directory.
 # type: channel
 # category: radio
-# version: 0.5
+# version: 0.7
+# url: http://www.myoggradio.org/
+# depends: json, ahttp >= 1.5
+# config:
+#    { name: myoggradio_login,  type: text,  value: "user:password", description: "Account for storing personal favourites." }
+#    { name: myoggradio_morph,  type: boolean, value: 0,  description: "Convert pls/m3u into direct shoutcast url." }
 # priority: standard
-# depends: json, StringIO
+# png:
+#   iVBORw0KGgoAAAANSUhEUgAAAAsAAAAQCAYAAADAvYV+AAAABHNCSVQICAgIfAhkiAAAARdJREFUKJGt0U8rhFEUx/HP3AfjT9QQJo80CyzGG1A2UspL8k4s
+#   7G2lvAlLC0skEWliMJTHM2Nx72iSjfJb3Xv6/n7ndA5/UIWz/jtDGZ9rqXQGAT30+vAE6njA80DYCObQxe1QTFdPhlFc4D0lzmMGn3gJGEtQhipFg80a53Uq
+#   syksoBYiIMRiNeMw5+GA3S0m+50rqIY0T1LZY6kga5N34v9b3ZDmK6Op7JI/Eu6ZvqMsEthDJ+ADTxEeLth/o5jheIjJdgr6QCsk531cWeOWo0W06KwycYcX
+#   3KAI6QAlzSvWX/ncwDWaTNVoXiaDyo+LbmMHp2jEDvb6S8gGwBVs4SRBN1jAOC5/hMrF0w5qHMu/TPDP+gI3M01h2io9UwAAAABJRU5ErkJggg==
 #
 # MyOggRadio is an open source radio station directory. Because this matches
 # well with streamtuner2, there's now a project partnership. Shared streams can easily
@@ -18,44 +27,31 @@
 #
 
 
-
 from channels import *
-from config import conf
-from action import action
-from mygtk import mygtk
-import ahttp as http
+from config import *
+import action
+from uikit import uikit
+import ahttp
 
 import re
 import json
-from compat2and3 import StringIO
 import copy
-
+from uikit import gtk
 
 
 # open source radio sharing stie
 class myoggradio(ChannelPlugin):
 
-    # description
-    title = "MyOggRadio"
-    module = "myoggradio"
-    homepage = "http://www.myoggradio.org/"
+    # control flags
+    listformat = "pls,m3u,srv"
+    has_search = False
     api = "http://www.myoggradio.org/"
-    listformat = "url/direct"
-    
-    # config data
-    config = [
-        {"name":"myoggradio_login", "type":"text", "value":"user:password", "description":"Account for storing personal favourites."},
-        {"name":"myoggradio_morph", "type":"boolean", "value":0, "description":"Convert pls/m3u into direct shoutcast url."},
-    ]
     
     # hide unused columns
     titles = dict(playing=False, listeners=False, bitrate=False)
     
-
     # category map
     categories = ['common', 'personal']
-    default = 'common'
-    current = 'common'
     
     
     
@@ -63,7 +59,8 @@ class myoggradio(ChannelPlugin):
     def __init__(self, parent):
         ChannelPlugin.__init__(self, parent)
         if parent:
-            mygtk.add_menu(parent.extensions, "Share in MyOggRadio", self.share)
+            #uikit.add_menu([parent.extensions, parent.extensions_context], "Share in MyOggRadio", self.share)
+            uikit.add_menu([parent.streammenu, parent.streamactions], "Share in MyOggRadio", self.share, insert=4)
 
 
 
@@ -82,13 +79,13 @@ class myoggradio(ChannelPlugin):
         # common
         if (cat == "common"):
             # fetch
-            data = http.get(self.api + "common.json")
-            entries = json.load(StringIO(data))
+            data = ahttp.get(self.api + "common.json", encoding="utf-8")
+            entries = json.loads(data)
             
         # bookmarks
         elif (cat == "personal") and self.user_pw():
-            data = http.get(self.api + "favoriten.json?user=" + self.user_pw()[0])
-            entries = json.load(StringIO(data))
+            data = ahttp.get(self.api + "favoriten.json?user=" + self.user_pw()[0], encoding="utf-8")
+            entries = json.loads(data)
         
         # unknown
         else:
@@ -99,6 +96,7 @@ class myoggradio(ChannelPlugin):
         for i,e in enumerate(entries):
             entries[i]["homepage"] = self.api + "c_common_details.jsp?url="  + e["url"]
             entries[i]["genre"] = cat
+            entries[i]["format"] = "audio/mpeg"
         # send back
         return entries
         
@@ -114,7 +112,11 @@ class myoggradio(ChannelPlugin):
             
             # convert PLS/M3U link to direct ICY stream url
             if conf.myoggradio_morph and self.parent.channel().listformat != "url/direct":
-                row["url"] = http.fix_url(action.srv(row["url"]))
+                
+                urls = action.convert_playlist(row["url"], row.get("listformat", "any"), "srv", local_file=False, row=row)
+                if not urls:
+                    urls = [row["url"]]
+                row["url"] = ahttp.fix_url(urls[0])
                 
             # prevent double check-ins
             if row["title"] in (r.get("title") for r in self.streams["common"]):
@@ -157,11 +159,11 @@ class myoggradio(ChannelPlugin):
             # just push data in, like the form does
             if form:
                 self.login()
-                http.get(self.api + "c_neu.jsp", params=submit, ajax=1, post=1)
+                ahttp.get(self.api + "c_neu.jsp", params=submit, ajax=1, post=1)
 
             # use JSON interface
             else:
-                http.get(self.api + "commonadd.json", params=submit, ajax=1)
+                ahttp.get(self.api + "commonadd.json", params=submit, ajax=1)
     
             
     # authenticate against MyOggRadio
@@ -169,17 +171,21 @@ class myoggradio(ChannelPlugin):
         login = self.user_pw()    
         if login:
             data = dict(zip(["benutzer", "passwort"], login))
-            http.get(self.api + "c_login.jsp", params=data, ajax=1)
+            ahttp.get(self.api + "c_login.jsp", params=data, ajax=1)
             # let's hope the JSESSIONID cookie is kept
 
 
     # returns login (user,pw)
     def user_pw(self):
-        if conf.myoggradio_login != "user:password":
+        if len(conf.myoggradio_login) and conf.myoggradio_login != "user:password":
             return conf.myoggradio_login.split(":")
-        else: pass
-        
-
+        else:
+            lap =  conf.netrc(["myoggradio", "myoggradio.org", "www.myoggradio.org"])
+            if lap:
+                return [lap[0] or lap[1], lap[2]]
+            else:
+                self.parent.status("No login data for MyOggRadio configured. See F12 for setup, or F1 for help.");
+        pass        
 
 
 
diff --git a/channels/pluginmanager2.py b/channels/pluginmanager2.py
new file mode 100644
index 0000000..ce8875d
--- /dev/null
+++ b/channels/pluginmanager2.py
@@ -0,0 +1,216 @@
+# encoding: UTF-8
+# api: streamtuner2
+# title: User Plugin Manager Ⅱ
+# description: Downloads new plugins, or updates them.
+# version: 0.5
+# type: hook
+# category: config
+# depends: uikit >= 1.9, config >= 2.7, streamtuner2 >= 2.1.8, pluginconf < 1.0
+# config:
+#   { name: plugin_repos, type: text, value: "http://fossil.include-once.org/repo.json/streamtuner2/contrib/*.py, http://fossil.include-once.org/repo.json/streamtuner2/channels/*.py", description: "Plugin repository JSON source references.", hidden: 1 }
+#   { name: plugin_auto, type: boolean, value: 1, description: Apply plugin activation/disabling without restart., color: "#ffcc99" }
+# priority: extra
+# png:
+#   iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAJ1BMVEUAAABNYQVcdAx1iTB6mQ6KsQGUsTCUuxGmyDKvzEK51FnB13LP3pnSUwRYAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsT
+#   AQCanBgAAAAHdElNRQffBQ4EMidI8LXfAAABGUlEQVQoz32NPU7DQBCFx4aOxosIIOzGlkWRiogGkBssRfQoK/cxRBwAaw6AhJcLoAwtlTdlKtiSMj4U++PIBiReM/O+mXkD0ImdMxhqp23bsyHINkp9/Qu8TLXBj5BMrfsp
+#   08rk2hT7KtIf2o1cmWJzIqU+pVVD9i6SW9Ev0BC9D0FDSzEExouyB0QkLGAQunMSL7IuwVNB+EZu/Bw/lLAnJ1fa6nOBT3CZQ0irDzsWiHo/gLFwqhFxbl6Me+/AiXhdmnUHfIBDMb+onccZnE7AXwTHncfH5CYHSGALeHGH
+#   tybGAr7gFS8KC464Vs7Se84dGGlvmvQPqAZgFoM/7QYwQqx0fIoFuo0DE3oNuzbbgP1EKwDPlPgb5NefnUHe3aAAAAAASUVORK5CYII=
+# support: experimental
+#
+# Scans for new plugins from the repository server, using
+# a common-repo.json list. Compares new against installed
+# plugins, and permits to update or download new ones.
+#
+# User plugins go into ~/.config/streamtuner2/channels/
+# and will be picked up in favour of system-installed ones.
+#
+# Further enables direct activation of existing channel
+# plugins, often without restarting streamtuner2.
+#
+# Actually rather trivial. The Gtk interface building just
+# makes this handler look complicated.
+
+
+import imp
+import config
+import pluginconf
+import pkgutil
+from channels import __path__ as channels__path__
+import os
+from config import *
+from uikit import *
+import ahttp
+import json
+import compat2and3
+from xml.sax.saxutils import escape as html_escape
+
+
+# Plugin manager
+class pluginmanager2(object):
+
+    module = "pluginmanager2"
+    meta = plugin_meta()
+    parent = None
+    vbox = None
+
+
+    # Hook up
+    def __init__(self, parent):
+
+        # main references
+        self.parent = parent
+        conf.add_plugin_defaults(self.meta, self.module)
+        
+        # config dialog
+        parent.hooks["config_load"].append(self.add_config_tab)
+        parent.hooks["config_save"].append(self.activate_plugins)
+        parent.hooks["config_save"].append(self.clean_config_vboxen)
+        
+        # prepare user plugin directory
+        conf.plugin_dir = conf.dir + "/plugins"
+        plugin_dir_stub = "{}/__init__.py".format(conf.plugin_dir)
+        if not os.path.exists(conf.plugin_dir):
+            os.mkdir(conf.plugin_dir)
+        if not os.path.exists(plugin_dir_stub):
+            open(plugin_dir_stub, "a").close()
+        
+        # Register user config dir "~/.config/streamtuner2/plugins" for module loading
+        sys.path.insert(0, conf.dir)
+        
+        # Let channels.* package load modules from two directories
+        channels__path__.insert(0, conf.plugin_dir)
+
+
+    # Craft new config dialog notebook tab
+    def add_config_tab(self, *w):
+        if self.vbox:
+            return
+
+        # Notebook tab = label, content = vbox in scrolledwindow
+        w = self.parent.config_notebook
+        self.vbox = gtk.VBox(True, 5)
+        vp = gtk.Viewport()
+        vp.add(self.vbox)
+        sw = gtk.ScrolledWindow()
+        sw.add(vp)  # ScrolledWindow → Viewport → VBox
+        # label
+        label = gtk.EventBox()
+        label.add(gtk.Label(" 📦 Add "))
+        label.show_all()
+        sw.show_all()
+        # add page
+        tab = w.insert_page_menu(sw, label, label, -1)
+        
+        # Prepare some text
+        self.add_(uikit.label("\n<b><big>Install or update plugins</big></b>", size=520, markup=1))
+        self.add_(uikit.label("You can update existing plugins, or install new contrib/ channels. User plugins reside in ~/.config/streamtuner2/plugins/ and can even be modified there (such as setting a custom # color: entry).\n", size=520, markup=1))
+        self.add_(self.button("Refresh", stock="gtk-refresh", cb=self.refresh), "Show available plugins from repository\nhttp://fossil.include-once.org/streamtuner2/")
+        self.add_(gtk.image_new_from_stock("gtk-info", gtk.ICON_SIZE_LARGE_TOOLBAR), "While plugins are generally compatible across releases, newer versions may also require to update the streamtuner2 core setup.")
+        for i in range(1,10):
+            self.add_(uikit.label(""))
+
+
+    # Append to vbox
+    def add_(self, w, label=None, markup=0):
+        w = uikit.wrap(w=w, label=label, align=10, label_size=400, label_markup=1)
+        self.vbox.add(w)
+
+    # Create button, connect click signal    
+    def button(self, label, stock=None, cb=None):
+        b = gtk.Button(label, stock=stock)
+        b.connect("clicked", cb)
+        return b
+
+    
+    # Add plugin list
+    def refresh(self, *w):
+
+        # Fetch repository JSON list
+        meta = []
+        for url in re.split("[\s,]+", conf.plugin_repos.strip()):
+            if re.match("https?://", url):
+                d = ahttp.get(url, encoding='utf-8') or []
+                meta += json.loads(d)
+                self.parent.status()
+        
+        # Clean up placeholders in vbox
+        _ = [self.vbox.remove(c) for c in self.vbox.get_children()[3:]]
+        
+        # Attach available downloads after checking dependencies
+        # e.g. newpl["depends"] = "streamtuner2 < 2.2.0, config >= 2.5"
+        dep = pluginconf.dependency()
+        for newpl in meta:
+            if dep.valid(newpl) and dep.depends(newpl):
+                self.add_plugin(newpl)
+
+        # Readd some filler labels
+        _ = [self.add_(uikit.label("")) for i in range(1,3)]
+
+
+    # Entry for plugin list
+    def add_plugin(self, p):
+        b = self.button("Install", stock="gtk-save", cb=lambda *w:self.install(p))
+        p = self.update_p(p)
+        text = "<b>$title</b>, "\
+               "<small>version:</small> <span weight='bold' color='orange'>$version</span>, "\
+               "<small>type: <i><span color='#559'>$type</span></i> "\
+               "category: <i><span color='blue'>$category</span></i></small>\n"\
+               "<span size='smaller' color='#364'>$description</span>\n"\
+               "<span size='small' color='#532' weight='ultralight'>$extras, <a href='$file'>view src</a></span>"
+        self.add_(b, safe_format(text, **p), markup=1)
+
+        
+    # Add placeholder fields
+    def update_p(self, p):
+        fields = ("status", "priority", "support", "author", "depends")
+        extras = ["{}: <b>{}</b>".format(n, html_escape(p[n])) for n in fields if p.get(n)]
+        p["extras"] = " ".join(["💁"] + extras)
+        p["file"] = p["$file"].replace("/cat/", "/doc/tip/")
+        for field in ("version", "title", "description", "type", "category"):
+            p.setdefault(field, "-")
+        return p
+    
+
+    # Download a plugin
+    def install(self, p):
+        src = ahttp.get(p["$file"], encoding="utf-8")
+        with open("{}/{$name}.py".format(conf.plugin_dir, **p), "w") as f:
+            f.write(src)
+        self.parent.status("Plugin '{$name}.py' installed.".format(**p))
+
+
+    # Empty out [channels] and [feature] tab in configdialog, so it rereads them
+    def clean_config_vboxen(self, *w):
+        self.parent.configwin.first_open = 1
+        for vbox in [self.parent.plugin_options, self.parent.feature_options]:
+            for c in vbox.get_children()[1:]:
+                vbox.remove(c)
+
+
+    # Activate/deactivate changed plugins
+    def activate_plugins(self, *w):
+        if not conf.plugin_auto:
+            return
+        p = self.parent
+        for name,act in conf.plugins.items():
+
+            # disable channel plugin
+            if not act and name in p.channels:
+                p.notebook_channels.remove_page(p.channel_names.index(name))
+                del p.channels[name]
+
+            # feature plugins usually have to many hooks
+            if not act and name in p.features:
+                log.WARN("Cannot disable feature plugin '{}'.".format(name))
+                p.status("Disabling feature plugins requires a restart.")
+
+        # just let main load any new plugins
+        p.load_plugin_channels()
+
+
+
+# Alternative to .format(), with keys possibly being absent
+from string import Template
+def safe_format(str, **kwargs):
+    return Template(str).safe_substitute(**kwargs)
+
diff --git a/channels/punkcast.png b/channels/punkcast.png
deleted file mode 100644
index a8134db..0000000
Binary files a/channels/punkcast.png and /dev/null differ
diff --git a/channels/punkcast.py b/channels/punkcast.py
deleted file mode 100644
index fb4a91f..0000000
--- a/channels/punkcast.py
+++ /dev/null
@@ -1,106 +0,0 @@
-
-# api: streamtuner2
-# title: PunkCast
-# description: Online video site that covered NYC artists. Not updated anymore.
-# type: channel
-# category: video
-# version: 0.1
-# priority: rare
-#
-#
-# Disables itself per default.
-# ST1 looked prettier with random images within.
-#
-
-
-import re
-import ahttp as http
-from config import conf
-import action
-from channels import *
-from config import __print__, dbg
-
-
-
-
-
-# disable plugin per default
-if "punkcast" not in vars(conf): 
-    conf.plugins["punkcast"] = 0
-
-
-
-
-
-
-
-
-
-# basic.ch broadcast archive
-class punkcast (ChannelPlugin):
-
-    # description
-    title = "punkcast"
-    module = "punkcast"
-    homepage = "http://www.punkcast.com/"
-
-    # keeps category titles->urls    
-    catmap = {}
-    categories = ["list"]
-    default = "list"
-    current = "list"
- 
-
-
-    # don't do anything
-    def update_categories(self):
-        pass
-
-
-    # get list
-    def update_streams(self, cat):
-
-        rx_link = re.compile("""
-            <a\shref="(http://punkcast.com/(\d+)/index.html)">
-            \s+<img[^>]+ALT="([^<">]+)"
-        """, re.S|re.X)
-
-        entries = []
- 
-        #-- all from frontpage
-        for uu in rx_link.findall(http.get(self.homepage)):
-            (homepage, id, title) = uu
-            entries.append({
-                    "genre": "?",
-                    "title": title,
-                    "playing": "PUNKCAST #"+id,
-                    "format": "audio/mpeg",
-                    "homepage": homepage,
-            })
-
-        # done    
-        return entries
-
-
-    # special handler for play
-    def play(self, row):
-    
-        rx_sound = re.compile("""(http://[^"<>]+[.](mp3|ogg|m3u|pls|ram))""")
-        html = http.get(row["homepage"])
-        
-        # look up ANY audio url
-        for uu in rx_sound.findall(html):
-            __print__( dbg.DATA, uu )
-            (url, fmt) = uu
-            action.action.play(url, self.mime_fmt(fmt), "url/direct")
-            return
-        
-        # or just open webpage
-        action.action.browser(row["homepage"])
-            
-        
-
-
-
-
-
diff --git a/channels/radiobrowser.py b/channels/radiobrowser.py
new file mode 100644
index 0000000..eccb491
--- /dev/null
+++ b/channels/radiobrowser.py
@@ -0,0 +1,120 @@
+# encoding: UTF-8
+# api: streamtuner2
+# title: RadioBrowser
+# description: Community collection of stations; votes, clicks, homepage links.
+# version: 0.1
+# type: channel
+# url: http://www.radio-browser.info/
+# category: radio
+# priority: optional
+# config:
+#   { type=select, name=radiobrowser_cat, value=tags, select="tags|countries|languages", description=Which category types to list. }
+# documentation: http://www.radio-browser.info/#ui-tabs-7
+# png:
+#   iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAMAAABcOc2zAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACQ1BMVEWNYNOIWNFyOsZtNcFx
+#   N8hxN8hxN8hxN8hxN8hxN8hxN8dtNcFuNcJ+Ss2NX9N6T7uNX9NxPL9jMLBtNcBkMbFqNLuCT89wRq6MXtOATc17Rsp8SMl6Rcl6RctrQqmpht1qQ6PUxex6WqnXye18XarYyu3QyNzp5u739/jh3Ojd
+#   2OX4+Pl7XKrYy+3i3eh8Y6Dg2+i2q8ecjrGqm8Krm8LTzN+ikbunl8D5+fl7W6rZy+7z8fTk4Or29fjAuM3Dv8rx7vTs6vHy8PTh3Ojy8PX5+fl6Wqraze75+fn5+vn6+vn6+vn6+vl6WqrMuOl1U6iR
+#   bMmNbb2NbryOb72PcL6Qcb+Rcr+SdMCTdcGUdsGVd8KWeMOXesSZfMWMa71cNpSLW9JxN8hxN8hxN8hxN8hxN8hrNL2NX9OMXdJ+Ss1/S85/S85/S85+Ss18SMqHV9GMXdK/p+W/p+W+peW+peS9pOS9
+#   o+S8ouS7oeO6oOO5nuO4neK3m+K3m+Kqidv5+fn5+vn5+fn5+fn5+fn5+fn5+fn4+fn4+Pn4+Pn4+Pn4+Pn5+fnl3vD5+fn5+fn7+/r6+vn5+fn5+vn5+vn5+vn5+fn6+/r6+vr5+fn6+/rp4/H6+vn0
+#   8/X08vbz8vX08/b29vf6+/ro4vH7+/r6+/ro4vH6+vn6+vrn4fH6+/n6+vr6+/r6+vn6+/r6+vn6+vn7+/ro4fHt6PXu6fXu6vXv6vXv6/Xw6/bw7Pbw7fbx7fbx7vby7vby7/fz8ffd0+7///+qD5Mw
+#   AAAAYHRSTlPJ4/Hz8/Lx7+3s6ufi08N9/fve8/bo//T8/vb6/fr67eL02vbc9/Tt//3v/N34/5aO/MWeoM7Rbene+f7E0PykaWqx3K333/v//Pv7/eD34Z/m7O3v8fL09vf5+vv8/9Pw7ECfAAAAAWJL
+#   R0TAE2Hf+AAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB98EARcyBebz0PQAAADXSURBVAjXAcwAM/8AAAECAwQFBgcICQoLDA0ODwAQYBESE2FiY2RlZhQVFmcXABhoGRobaWprbG1uHB1vcB4A
+#   H3Fyc3R1dnd4eXp7fH1+IAAhf4CBgoOEhYaHiImKi4wiACONjo+QkZKTlJWWl5iZmiQAJZucJiconZ6foCkqK6GiLAAtoy4vMDEyMzQ1Njc4pKU5ADqmOzw9Pj9AQUJDREWnqEYAR6mqq6xISUpLTK2u
+#   r7CxTQBOsrO0tba3uLm6u7y9vr9PAFBRUlNUVVZXWFlaW1xdXl9emUehk/NThwAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNS0wNC0wMlQwMTo0OTozOSswMjowMH98i/gAAAAldEVYdGRhdGU6bW9kaWZ5
+#   ADIwMTUtMDQtMDJUMDE6NDk6MTcrMDI6MDAcO09kAAAAAElFTkSuQmCC
+# x-icon-src: openclipart:tape.png
+# x-service-by: segler_alex
+#
+#
+# Radio-Browser is a community-collected list of internet radios.
+# Currently lists 4400 streaming stations, and tracks favourited
+# entries. Furthermore includes station homepage links!
+#
+# Also has a neat JSON API, so is quite easy to support.
+
+
+import re
+import json
+from config import *
+from channels import *
+import ahttp
+
+
+# API endpoints:
+# http://www.radio-browser.info/webservice/json/countries
+# http://www.radio-browser.info/webservice/json/languages
+# http://www.radio-browser.info/webservice/json/tags
+# http://www.radio-browser.info/webservice/json/stations/topclick
+# http://www.radio-browser.info/webservice/json/stations/topvote
+# http://www.radio-browser.info/webservice/json/stations
+# http://www.radio-browser.info/webservice/json/stations/searchterm
+# http://www.radio-browser.info/webservice/json/stations/bytag/searchterm
+#
+# ENTRY sets:
+# {"id":63,"name": "Energy Sachsen", "url":"http://www.energyradio.de/sachsen",
+#  "homepage":"http://www.energy.de", "favicon":"http://www.energy.de/favicon.ico",
+#  "tags":"Pop Dance RnB Techno","country":"Germany","subcountry":"","language":"German",
+# "votes":4,"negativevotes":10},
+#
+class radiobrowser (ChannelPlugin):
+
+    # control flags
+    has_search = True
+    listformat = "pls"
+    titles = dict(listeners="Votes+", bitrate="Votes-", playing="Country")
+    base = "http://www.radio-browser.info/webservice/json/"
+    categories = []
+    pricat = ("topvote", "topclick")
+    catmap = { "tags": "bytag", "countries": "bycountry", "languages": "bylanguage" }
+    
+
+    # votes, and tags, no countries or languages
+    def update_categories(self):
+        self.categories = list(self.pricat)
+        for sub in [conf.radiobrowser_cat]:
+            cats = []
+            for entry in self.api(sub):
+                if entry["value"] and len(entry["value"]) > 1:
+                    cats.append(entry["value"])
+            self.categories.append(sub)
+            self.categories.append(cats)
+            
+
+    # Direct mapping
+    def update_streams(self, cat, search=None):
+
+        if cat:
+            if cat in self.pricat:
+                data = self.api("stations/" + cat)
+            elif cat in ("tags", "countries", "languages"):
+                return [dict(genre="-", title="Placeholder category", url="offline:")]
+            else:
+                data = self.api("stations/" + self.catmap[conf.radiobrowser_cat] + "/" + cat)
+        elif search:
+            data = self.api("stations/" + search)
+        else:
+            return []
+
+        r = []
+        for e in data:
+            r.append(dict(
+                genre = e["tags"],
+                url = e["url"],
+                format = "audio/mpeg",
+                title = e["name"],
+                homepage = e["homepage"],
+                playing = e["country"],
+                listeners = int(e["votes"]),
+                bitrate = - int(e["negativevotes"]),
+            ))
+        return r
+
+
+    # fetch multiple pages
+    def api(self, method, params={}):
+        j = ahttp.get(self.base + method, params)
+        try:
+            return json.loads(j, strict=False)   # some entries contain invalid character encodings
+        except:
+            return []
+
diff --git a/channels/radionet.py b/channels/radionet.py
new file mode 100644
index 0000000..4196b2c
--- /dev/null
+++ b/channels/radionet.py
@@ -0,0 +1,124 @@
+# encoding: UTF-8
+# api: streamtuner2
+# title: radio.net
+# description: Europe's biggest radio platform
+# url: http://radio.net/
+# version: 0.4
+# type: channel
+# category: radio
+# png:
+#   iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAt0lEQVR42mNgYGD4r+Ar/F/BDwkD+SBxojBMs1mLPBArgGlFqEEENYMNQNLsukIDYkirAvGu
+#   ABsA1OC6XOP/5f8nwIaYAg0k2gBFsAsgTgcZkvnfDugFEeK9AFKsCPMG0CU6eZJgQ4R1eP8H7LLEivWyFJANQcQCLPBAmkGG4MJohmA6C6QA5gI5OxEUDNII
+#   MwSvASBFIA3ociCxkWQAKMDICkSQIpgh2LDnSmP80YhsCFEJiRIMADpmeUOpqgjRAAAAAElFTkSuQmCC
+# priority: optional
+#
+# Radio.net lists around 20.000 worldwide radio stations.
+# A maximum of three pages from each genre are fetched here,
+# some of the empty categories already omitted.
+#
+# The website heavily depends on JavaScript, a Flash player,
+# some social tracking cookies. But still feasible to access
+# per custom JSON extractor.
+#
+# May require refreshing the station lists once in a while,
+# because there's an API key in each JSON station info URL.
+
+
+import time
+import json
+import re
+from config import *
+from channels import *
+import ahttp
+import action
+
+
+# hook special JSON format in to avoid grepping images by generic handler
+action.playlist_fmt_prio.insert(5, "rnjs")
+action.playlist_content_map.insert(7, ("rnjs", r'"logo175x175rounded"'))
+action.extract_playlist.extr_urls["rnjs"] = dict(
+    url   = r" (?x) \"streamUrl\" \s*:\s* \"(\w+:\\?/\\?/[^\"]+)\" ",
+    title = r" (?x) \"(?:description|seoTitle)\" \s*:\s* \"([^\"]+)\" ",
+    unesc = "json",
+)
+
+
+# Radio.net extraction relies on HTML grepping, finding an api key required for station details,
+# and letting the action module extract the station/stream URL from that JSON format.
+#
+class radionet (ChannelPlugin):
+
+    # control flags
+    has_search = False
+    audioformat = "audio/mpeg"
+    listformat = "rnjs"
+    titles = dict(listeners=False, playing="Description")
+
+    # sources
+    apiPrefix = "https://api.radio.net/info/v2"
+    genre_url = "http://www.radio.net/genre/{}/"
+    apiKey = None
+    
+    
+    # Retrieve cat list and map
+    def update_categories(self):
+        html = ahttp.get("http://www.radio.net/")
+        self.set_key(html)
+        ls = re.findall("""<li><a class="language-info".*?>([\w\s']+)</a>""", html)
+        self.categories = [i for i in ls][0:-18]
+
+
+    # Fetch entries
+    def update_streams(self, cat, search=None):
+
+        # category page, get key
+        html = ahttp.get(self.genre_url.format(cat))
+        for p in range(2, 4):
+            if html.find('"?p={}">'.format(p)) >= 0:
+                html += ahttp.get(self.genre_url.format(cat) + "?p={}".format(p))
+        self.set_key(html)
+        r = []
+
+        # split station blocks
+        for row in re.split("""<div class="stationinfo""", html):
+        
+            # extract text fields
+            d = re.findall("""
+              <a\s+href="(//([\w-]+)\.radio.net)" .*?
+              <img\s+src="([^<">]+)" .*?
+              <strong>(.*?)</strong> .*?
+              <small>\s*(.*?)\s*</small> .*?
+            """, row, re.X|re.S)
+            
+            # refurbish extracted strings
+            if d and len(d) and len(d[0]) == 5:
+                href, name, img, title, desc = d[0]
+                r.append(dict(
+                    name = name,
+                    genre = cat,
+                    title = unhtml(title),
+                    playing = unhtml(desc),
+                    url = self._url(name),
+                    homepage = "http:{}".format(href),
+                    img = img,
+                ));
+        return r
+    
+
+    # Patch together JSON station info URL
+    def _url(self, name):
+        return \
+        "{}/search/station?apikey={}&pageindex=1&station={}".format(
+            self.apiPrefix, self.apiKey, name
+        )      # '?_={time}&' is omitted here, only relevant to jQuery/AJAX,
+               # and just made bookmarks.is_in() fail due to randomized URLs
+
+
+    # extract JavaScript key from any HTML blob (needed for station query)
+    def set_key(self, html):
+        ls = re.findall("""apiKey: '(\w+)'""", html)
+        if ls:
+            self.apiKey = ls[0]
+
+
+
diff --git a/channels/radionomy.py b/channels/radionomy.py
new file mode 100644
index 0000000..26ff638
--- /dev/null
+++ b/channels/radionomy.py
@@ -0,0 +1,138 @@
+# encoding: UTF-8
+# api: streamtuner2
+# title: Radionomy
+# description: Modern radio directory and streaming provider
+# url: http://radionomy.com/
+# version: 0.5
+# type: channel
+# category: radio
+# config: -
+#    { name: radionomy_pages,  type: int,  value: 3,  category: limit,  description: Number of pages per category to scan. }
+#    { name: radionomy_update,  type: boolean,  value: 1,  description: Also fetch OnAir updates about currently playing songs. }
+# png:
+#   iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAAsTAAALEwEAmpwYAAABIElEQVQ4y62Uv0rEQBCHv/yRQziJ1bYWV/gCaxrhGrtrg1f5GMc+xOKLeIetVjZXHRrwAewstxMWFDViM5EQcrk9yTRJZn+/j51h
+#   JhESypZnwAKYAWP6wwN3wLUz+gkgEsglsOR/MXdGryK5yaMk34ECWAPVFmMCTIFb4FByeSrl1JDMGf0VcIt7ZcsMeBPYIpaeABSBEABEW8jnLG00dt0WK1ueSikvwDnw4YzeNCS1Z5w2klULkgAb4Bh4AC7kKOrypDsq+JHnBDgBRtuE
+#   aWBLrpzRr32COBD0vEsQCvocCsQ+oKTj/Ehm5rtnyv9AXt6nrYGrgKyxBl1Re3ykbHkDzPdcEZQtDxorshxsaQf7jcTSjxWQC8wHmL1oc/HyC1/TWBfFRR9xAAAAAElFTkSuQmCC
+# priority: extra
+#
+# Over 6500 radio stations of mixed genres and from different
+# countries.
+#
+# Radionomy is a commercial radio hosting service. All listed
+# stations are actually hosted by itself. Public and free access.
+# And stream hosting is free as well, by adding advertisements,
+# and given a daily listener quota.
+#
+# With "RMO" it furthermore provides access to a reusable song
+# collection, and jingles etc.
+
+
+from config import *
+from channels import *
+import ahttp
+import re
+import json
+from pq import pq
+
+
+# radionomy
+class radionomy (ChannelPlugin):
+
+    # control attributes
+    has_search = False
+    listformat = "srv"
+    audioformat = "audio/mpeg"
+    titles = dict(listeners=False, bitrate=False)
+    categories = []
+    
+    base = "http://www.radionomy.com"
+
+    playing = {}  # OnAir/Update dict
+
+
+    # categories
+    def update_categories(self):
+
+        # get main categories
+        main = []
+        html = ahttp.get(self.base + "/en/style/")
+        for a in pq(html)("#browseMainGenre li a"):
+            main += [a.text]
+            self.catmap[a.text] = a.attrib["href"]
+        cats = [main[0], [main[1]]]
+
+        # append sub categories
+        for cat in main[2:]:
+            cats.append(cat)
+            subs = []
+            html = ahttp.get("http://www.radionomy.com" + self.catmap[cat])
+            for a in pq(html)("#browseSubGenre li a"):
+                subs += [a.text]
+                self.catmap[a.text] = a.attrib["href"]
+            cats.append(subs)
+
+        self.categories = cats
+
+
+    # stations
+    def update_streams(self, cat, search=None):
+        r = []
+        # category or search
+        if cat:
+            req = self.base + self.catmap[cat]
+
+        # assemble page input
+        html = ahttp.get(req)
+        self.onair_update(req)
+        for i in range(0, int(conf.radionomy_pages) - 1):
+            add = ahttp.get(req, { "scrollOffset": i }, post=1, ajax=1)
+            if add.find("browseRadio") < 0:
+                break
+            html += add
+            self.onair_update(req)
+        
+        # extractzz
+        for data in self.data_play_stream(html):
+            data = json.loads(data)
+            # combine
+            r.append(dict(
+                genre = cat,
+                title = data["title"],
+                url = data["mp3"],
+                playing = self.playing.get(data["radioUID"], data["song"]),
+                favourite = int(data.get("isFavorite", 0)),
+                homepage = "http://www.radionomy.com/en/radio/{}/index".format(data["url"]),
+                img = re.sub("\.s\d+\.", ".s32.", data["logo"]),
+                uid = data["radioUID"],
+            ))
+        return r
+
+
+    # Extracts the data- attribute JSON blob
+    @use_rx
+    def data_play_stream(self, html, use_rx):
+        if use_rx:
+            return [entity_decode(j) for j in re.findall('data-play-stream="({.*?})"', html)]
+        else:
+            # fix up for PyQuery, else ignores appended content
+            html = re.sub("</html>|</body>", "", html) + "</body></html>"
+            return [div.attrib["data-play-stream"] for div in pq(html)(".browseRadioWrap .radioPlayBtn")]
+
+
+    # Retrieve en/OnAir/Update for per-UID song titles
+    def onair_update(self, req):
+        if conf.radionomy_update:
+            try:
+                d = json.loads(
+                    ahttp.get("https://www.radionomy.com/en/OnAir/Update", post=1, referer=req)
+                )
+                if not d:
+                    return
+                print d
+                self.playing.update(
+                    {row["RadioUID"]: "{Title} - {Artist}".format(**row) for row in d}
+                )
+            except Exception as e:
+                log.ERR("Radionomy title update:", e)
+
+                
diff --git a/channels/radiotray.py b/channels/radiotray.py
new file mode 100644
index 0000000..e07684c
--- /dev/null
+++ b/channels/radiotray.py
@@ -0,0 +1,136 @@
+# api: dbus
+# title: RadioTray hook
+# description: Allows to bookmark stations to RadioTray
+# version: 0.3
+# type: feature
+# category: bookmarks
+# depends: deb:python-dbus, deb:streamtuner2, deb:python-xdg
+# config:
+#   { name: radiotray_map, type: select, value: "group", select: 'root|group|asis|play', description: 'Map genres to default RadioTray groups, or just "root".' }
+# url: http://radiotray.sourceforge.net/
+# priority: extra
+# id: streamtuner2-radiotray
+# pack: radiotray.py
+# fpm-prefix: /usr/share/streamtuner2/channels/
+#
+# Adds a context menu "Keep in RadioTray.." for bookmarking.
+# Until a newer version exposes addRadio(), this plugin
+# will fall back to just playUrl().
+#
+# The patch for radiotray/DbusFacade.py would be:
+#   +
+#   +    @dbus.service.method('net.sourceforge.radiotray')
+#   +    def addRadio(self, title, url, group="root"):
+#   +        self.dataProvider.addRadio(title, url, group)
+#
+# Displays existing radiotray stations in ST2 bookmarks
+# category as read from ~/.local/share/radiotray/bookmarks.xml.
+#
+# This plugin may be packaged up separately.
+#
+
+from config import *
+from channels import *
+from uikit import uikit
+import re
+import dbus
+from xdg.BaseDirectory import xdg_data_home
+from xml.etree import ElementTree
+
+
+# not a channel plugin, just a category in bookmarks, and a context menu
+class radiotray:
+
+    # plugin info
+    module = "radiotray"
+    meta = plugin_meta()
+    # bookmarks cat
+    parent = None
+    bm = None
+    # radiotray config file / bookmarks
+    rt_xml = "%s/%s/%s" % (xdg_data_home, "radiotray", "bookmarks.xml")
+
+
+    # DBUS connector
+    def radiotray(self):
+        return dbus.Interface(
+            dbus.SessionBus().get_object(
+                "net.sourceforge.radiotray",
+                "/net/sourceforge/radiotray"
+            ),
+            "net.sourceforge.radiotray"
+        )
+
+
+    # hook up to main tab
+    def __init__(self, parent):
+
+        # keep reference to main window    
+        self.parent = parent
+        self.bm = parent.channels["bookmarks"]
+        conf.add_plugin_defaults(self.meta, self.module)
+
+        # create category
+        self.bm.add_category("radiotray", plugin=self);
+        self.bm.streams["radiotray"] = self.update_streams(cat="radiotray")
+        self.bm.reload_if_current(self.module)
+
+        # add context menu
+        uikit.add_menu([parent.streammenu, parent.streamactions], "Keep in RadioTray", self.share, insert=4)
+        
+
+    # load RadioTray bookmarks
+    def update_streams(self, cat):
+        r = []
+        try:
+            for group in ElementTree.parse(self.rt_xml).findall(".//group"):
+                for bookmark in group.findall("bookmark"):
+                    r.append({
+                        "genre": group.attrib["name"],
+                        "title": bookmark.attrib["name"],
+                        "url": bookmark.attrib["url"],
+                        "playing": "",
+                    })
+        except Exception as e:
+            log.DATA("Extracting from radiotray bookmarks.xml failed:", e)
+        return r
+
+
+    # send to 
+    def share(self, *w):
+        row = self.parent.row()
+        if row:
+            # RadioTray doesn't have an addRadio method yet, so just fall back to play the stream URL
+            try:
+                group = self.map_group(row.get("genre"))
+                log.PROC("mapping genre '%s' to RT group '%s'" % (row["genre"], group))
+                self.radiotray().addRadio(row["title"], row["url"], group)
+            except:
+                self.radiotray().playUrl(row["url"])
+        pass
+
+    # match genre to RT groups
+    def map_group(self, genre):
+        if not genre or not len(genre) or conf.radiotray_map == "root":
+            return "root"
+        if conf.radiotray_map == "asis":
+            return genre  # if RadioTray itself can map arbitrary genres to its folders
+        if conf.radiotray_map == "play":
+            raise NotImplementedError("just call .playUrl()")
+        map = {
+            "Jazz": "jazz|fusion|swing",
+            "Pop / Rock": "top|pop|rock|metal",
+            "Latin": "latin|flamenco|tango|salsa|samba",
+            "Classical": "classic|baroque|opera|symphony|piano|violin",
+            "Oldies": "20s|50s|60s|70s|oldie",
+            "Chill": "chill|easy|listening",
+            "Techno / Electronic": "techno|electro|dance|house|beat|dubstep|progressive|trance",
+            "Country": "country|bluegrass|western",
+            "Community": "community|talk|sports|spoken|educational",
+        }
+        #for str in (genre,title):
+        for cat,rx in map.items():
+            if re.search(rx, genre, re.I):
+                return cat
+        return "root"
+
diff --git a/channels/reddit.py b/channels/reddit.py
new file mode 100644
index 0000000..a33409e
--- /dev/null
+++ b/channels/reddit.py
@@ -0,0 +1,335 @@
+# encoding: UTF-8
+# api: streamtuner2
+# title: reddit⛱
+# description: Music recommendations from reddit /r/music and associated subreddits.
+# version: 0.8
+# type: channel
+# url: http://reddit.com/r/Music
+# category: playlist
+# config:
+#   { name: reddit_pages, type: int, value: 2, description: Number of pages to fetch. }
+#   { name: filter_walledgardens, type: boolean, value: 1, description: Filter walled gardens (soundcloud/spotify/…) if there's no player. }
+#   { name: reddit_keep_all, type: boolean, value: 0, description: Keep all web links (starts a browser for websites/news). }
+# png:
+#   iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJ1BMVEUAAAAcICX/AABHSk1jZ299hYz/bmajq6//lY/d0M3C1+3T7P38+/iaLhuGAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgF
+#   HUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQffBRUXIyQbWArCAAAAh0lEQVQI12Pg3g0BDLtXrVq1eveq3Qy7gIxCU9dqEGO11/ZKbzBDenUIUM3u7cGi1UDFW0TE55wsdpZikAw/
+#   eebMnMmHGVxqDuUc0zzpynD4zIk5J3vOSDNsOQMG1gy7bI5HTq85Ws2wu/jM9PIzrkArdhmXlzuuXg00eVd5+epVqxmgrtgNAOWeS1KYtcY4AAAAAElFTkSuQmCC
+# priority: extra
+#
+# Just imports Youtube links from music-related subreddits.
+# Those are usually new bands or fresh releases, or favorite
+# user selections. The category/subreddit list is filtered
+# for a minimum quote of usable links (namely Youtube URLs).
+#
+# If you have a custom audio player available for Soundcloud,
+# Spotify or Bandcamp, you can enable to retain such links.
+# (For example configure `soundcli` for "audio/soundcloud".)
+#
+# This plugin currently uses the old reddit API, which might
+# be obsolete by August. It's thus a temporary channel, as
+# migrating to OAuth or regressing to plain HTML extraction
+# is not very enticing.
+
+
+import json
+import re
+from config import *
+from channels import *
+import action
+import ahttp
+
+
+# reddit.com
+#
+# Uses old API requests such as:
+#  → http://www.reddit.com/r/music/new.json?sort=new
+#
+class reddit (ChannelPlugin):
+
+    # control attributes
+    has_search = False
+    listformat = "srv"
+    audioformat = "video/youtube"
+    titles = dict(playing="submitter", listeners="votes", bitrate=False)
+
+    # favicon scaling (from reddit preview `img`)
+    img_resize = 32
+    fixed_size = [32,26]
+    
+    # just subreddit names to extract from
+    categories = [
+        # static radio list
+        "radioreddit 📟",
+
+        # major subreddits
+        "Music",
+        ["trueMusic", "futurebeats", "FutureFunkAirlines",
+        "Turntablists", "Catchysongs", "MusicForConcentration", "MusicToSleepTo"],
+
+        # cover bands/songs
+        "CoverSongs",
+        ["ICoveredASong", "MyMusic", "UserProduced", "RepublicOfMusic", "RoyaltyFreeMusic"],
+
+        # discover subreddits
+        "music_discovery",
+        ["ListenToThis", "ListenToUs", "WhatIListenTo", "ListenToConcerts",
+        "HeadBangToThis", "unheardof", "under10k", "lt10k"],
+        
+        # Classical
+        "ClassicalMusic",
+        ["composer", "baroque", "classicalmusic", "contemporary",
+        "choralmusic", "ChamberMusic", "EarlyMusic",
+        "ElitistClassical", "icm", "Opera", "pianocovers"],
+
+        # Electronic Music
+        "ElectronicMusic",
+        ["acidhouse", "ambientmusic",  "AtmosphericDnB", "BigBeat",
+        "boogiemusic", "breakbeat", "breakcore", #"brostep", "chicagohouse",
+        "chillout", "Chipbreak", "darkstep", "deephouse",
+        "DnB", "DubStep", "EDM", "electronicdancemusic", "ElectronicJazz",
+        "ElectronicBlues", "electrohouse", #"electronicmagic",
+        "ElectronicMusic", "electropop", "electroswing", #"ExperimentalMusic",
+        "fidget", "frenchelectro", "frenchhouse", "funkhouse",
+        "futurebeats", "FutureFunkAirlines", "FutureGarage",
+        "futuresynth", "gabber", "glitch", "Grime", "happyhardcore",
+        "hardhouse", "hardstyle", "house", "idm", "industrialmusic", "ItaloDisco",
+        "latinhouse", "LiquidDubstep", "mashups", "minimal", "moombahcore",
+        "nightstep", "OldskoolRave", "partymusic", "plunderphonics", "psybient",
+        "PsyBreaks", "psytrance", "purplemusic", "raggajungle", "RealDubstep",
+        "swinghouse", "tech_house", "Techno", "Trance", "tranceandbass",
+        "tribalbeats", "ukfunky", "witchhouse", "wuuB"],
+
+        # Rock / Metal
+        "Rock",
+        ["80sHardcorePunk", "90sAlternative", "90sPunk", "90sRock",
+        "AlternativeRock", "AltCountry", "AORMelodic", "ausmetal",
+        "BlackMetal", "bluegrass", "Blues", "bluesrock", "Boneyard",
+        "CanadianClassicRock", "CanadianMusic", "ClassicRock", "country",
+        "Christcore", "crunkcore", "deathcore", "deathmetal", "Djent", "DoomMetal",
+        "Emo", "EmoScreamo", "epicmetal", "flocked", "folk", "folkmetal",
+        "folkpunk", "folkrock", "folkunknown", "GaragePunk", "GothicMetal",
+        "Grunge", "hardcore", "HardRock", "horrorpunk", "indie_rock", "jrock",
+        "krautrock", "LadiesofMetal", "MathRock", "melodicdeathmetal",
+        "MelodicMetal", "Metalmusic", "metal", "metalcore",
+        "monsterfuzz", "neopsychedelia", "NewWave", "noiserock", "numetal",
+        "pianorock", "poppunkers", "PostHardcore", "PostRock", "powermetal",
+        "powerpop", "ProgMetal", "progrockmusic", "PsychedelicRock", "punk",
+        "Punkskahardcore", "Punk_Rock", "raprock","shoegaze", "stonerrock",
+        "symphonicblackmetal", "symphonicmetal", "synthrock", "truethrash",
+        "Truemetal", "OutlawCountry", "WomenRock"],
+
+        # hippety-hop
+        "HipHopHeads",
+        ["80sHipHop", "90sHipHop", "altrap", "asianrap", "backspin", "BayRap",
+        "ChapHop", "ChiefKeef", "DrillandBop", "Gfunk", "NYrap",
+        "Rap", "raprock", "rhymesandbeats", "trapmuzik"],
+
+        # decades
+        "Decades →", ["2010smusic", "2000smusic", "90sMusic", "80sMusic",
+        "70s", "70sMusic", "60sMusic", "50sMusic"],
+
+        # By country/region/culture
+        "WorldMusic",
+        ["AfricanMusic", "afrobeat", "balkanbrass", "balkanmusic", "britpop",
+        "Irishmusic", "ItalianMusic", "jpop", "kpop", "spop", "cpop"],
+
+        # Other
+        "Genres →",
+        ["Acappella", "AcousticCovers", "animemusic", "boomswing",
+        "bossanova", "carmusic", "chillmusic",
+        "dembow", "disco", "DreamPop", "Elephant6", "ETIMusic", "Exotica",
+        "FilmMusic", "FunkSouMusic", "gamemusic", "GamesMusicMixMash",
+        "GunslingerMusic", "GypsyJazz", "HomeworkMusic", "IndieFolk",
+        "Jazz", "JazzFusion", "JazzInfluence", "listentoconcerts", "klezmer",
+        "lt10k", "MedievalMusic", "MelancholyMusic", "minimalism_music", "motown",
+        "MovieMusic", "muzyka", "NuDisco", "oldiemusic", "OldiesMusic",
+        "pianocovers", "PopMusic", "PoptoRock", "rainymood", #"recordstorefinds",
+        "reggae", "remixxd", "RetroMusic", "rnb", "rootsmusic", "SalsaMusic", "Ska",
+        "Soca", "Soulies", "SoulDivas", "SoundsVintage", "SpaceMusic",
+        "swing", "Tango", "TheRealBookVideos", "TouhouMusic", "TraditionalMusic",
+        "treemusic", "triphop", "vaporwave", "VintageObscura", "vocaloid"],
+
+        # Redditor Made Music (removed some spotify/soundcloud-only subreddits)
+        "Redditor-Made →",
+        ["AcousticOriginals", "Composer", "ICoveredASong",
+        "independentmusic", "MusicCritique", "MyMusic",
+        "ratemyband", "Songwriters",
+        "ThisIsOurMusic", "UserProduced",],
+
+        # Multi-Genre & Community Subreddits (a third cleaned out for too few usable links)
+        "Community →",
+        ["audioinsurrection", "albumaday", "albumoftheday", #"Albums",
+        "albumlisteners", "BinauralMusic", "Catchysongs",
+        "CircleMusic", "CoverSongs", "cyberpunk_music", "DANCEPARTY", "danktunes",
+        "deepcuts", "EarlyMusic", "FemaleVocalists",
+        "FitTunes", "freemusic", "Frisson",
+        "GayMusic", "germusic", "gethightothis",
+        "GuiltyPleasureMusic", "HeadNodders", "heady", "HeyThatWasIn",
+        "indie", "IndieWok", "Instrumentals",
+        "ipm", "IsolatedVocals", "LetsTalkMusic", "listentoconcerts",
+        "listentomusic", "ListenToThis", "ListenToUs", "livemusic",
+        "llawenyddhebddiwedd", "Lyrics", "mainstreammusic",
+        "MiddleEasternMusic", "MLPtunes", "Music", "MusicAlbums",
+        "musicsuggestions", "MusicToSleepTo", "musicvideos", "NameThatSong",
+        "newmusic", "onealbumaweek", "partymusic", "RedditOriginals",
+        "RepublicOfMusic", "RoyaltyFreeMusic", "runningmusic",
+        "ScottishMusic", "ThemVoices",
+        "unheardof", "WhatIListenTo", "WTFMusicVideos"],
+        # Community
+        #["AlbumArtPorn", "albumreviews", "Audio", "Audiophile", "AustinMusicians",
+        #"bandmembers", "CarAV", "CassetteCulture", "Cd_collectors",
+        #"ConcertTickets", "germusic", "glastonbury_festival", "ICoveredASong",
+        #"ifyoulikeblank", "independentmusic", "ineedasong/", "japanesemusic",
+        #"Jazzguitar", "koreanmusic", "LubbockMusicians", "mixcd", "musiccritics",
+        #"MusicalComedy", "musicessentials", "MusicEventMeetUp", "musicfestivals",
+        #"musicnews", "MusiciansBlogs", "Musicians", "NeedVocals", "OSOM",
+        #"performer", "RecordClub", "recordstore", "redditmusicclub", "Rockband",
+        #"RockbandChallenges", "TheSongRemainsTheSame", "TipOfMyTongue",
+        #"TouringMusicians", "vinyl", "VinylReleases", "WeAreTheMusicMakers"],
+
+        # Single Artist/Band subreddits (unchecked list)
+        "Bands/Artists →",
+        ["311", "ADTR", "AliciaKeys", "ArcadeFire", "ArethaFranklin",
+        "APerfectCircle", "TheAvettBrothers", "BaysideIsACult", "TheBeachBoys",
+        "Beatles", "billytalent", "Blink182", "BMSR", "boniver", "brandnew",
+        "BruceSpringsteen", "Burial", "ChristinaAguilera", "cityandcolour",
+        "Coldplay", "CutCopy", "TheCure", "DaftPunk", "DavidBowie", "Deadmau5",
+        "DeathCabforCutie", "DeepPurple", "Deftones", "DieAntwoord", "DMB",
+        "elliegoulding", "empireofthesun", "EnterShikari", "Evanescence", "feedme",
+        "FirstAidKit", "flaminglips", "franzferdinand", "Gorillaz", "gratefuldead",
+        "Greenday", "GunsNRoses", "Incubus", "JackWhite", "JanetJackson",
+        "John_frusciante", "kings_of_leon", "Korn", "ladygaga", "lanadelrey",
+        "lennykravitz", "Led_Zeppelin", "lorde", "Macklemore", "Madonna", "Manowar",
+        "MariahCarey", "MattAndKim", "Megadeth", "Metallica", "MGMT",
+        "MichaelJackson", "MinusTheBear", "ModestMouse", "Morrissey",
+        "MyChemicalRomance", "Muse", "NeilYoung", "NIN", "Nirvana", "oasis",
+        "Opeth", "OFWGKTA(OddFuture)", "OutKast", "panicatthedisco", "PearlJam",
+        "phish", "Pinback", "PinkFloyd", "porcupinetree", "prettylights",
+        "Puscifer", "Queen", "Radiohead", "RATM", "RedHotChiliPeppers",
+        "The_Residents", "RiseAgainst", "Rush", "SigurRos", "Slayer", "slipknot",
+        "SmashingPumpkins", "SparksFTW", "TeganAndSara", "TheKillers",
+        "TheOffspring", "TheStrokes", "TheMagneticZeros", "tragicallyhip",
+        "ToolBand", "U2Band", "Umphreys", "UnicornsMusic", "velvetunderground",
+        "Ween", "weezer", "WeirdAl", "yesband", "Zappa"],
+    ]
+
+
+    # static
+    def update_categories(self):
+        pass
+
+
+    # Extract video/music news links
+    def update_streams(self, cat, search=None):
+        
+        # radioreddit
+        if cat == "radioreddit 📟":
+            return self.radioreddit()
+        elif cat.find("→") > 0:
+            return self.placeholder
+
+        # collect links
+        data = []
+        after = None
+        for i in range(1, int(conf.reddit_pages) + 1):
+            try:
+                j = ahttp.get(
+                    "http://www.reddit.com/r/{}/new.json".format(cat.lower()),
+                    { "sort": "new", "after": after }
+                )
+                j = json.loads(j)
+            except Exception as e:
+                log.ERR("Reddit down? -", e)
+                break
+            if j.get("data",{}).get("children"):
+                data += j["data"]["children"]
+            else:
+                break
+            if j.get("data",{}).get("after"):
+                after = j["data"]["after"]
+            else:
+                break
+
+        # convert
+        r = []
+        for row in (ls["data"] for ls in data):
+
+            # find links in text posts
+            text_urls = re.findall("\]\((https?://(?:www\.)?youtu[^\"\'\]\)]+)", row.get("selftext", ""))
+            url_ext = (re.findall("\.(\w+)$", row["url"]) or [None])[0]
+            listformat = "href"
+            state = "gtk-media-play"
+
+            # Youtube URLs
+            if re.search("youtu\.?be|vimeo|dailymotion", row["url"]):
+                format = "video/youtube"
+                listformat = "srv"
+            # direct MP3/Ogg
+            elif url_ext in ("mp3", "ogg", "flac", "aac", "aacp"):
+                format = "audio/" + url_ext
+                listformat = "srv"
+            # playlists?
+            elif url_ext in ("m3u", "pls", "xspf"):
+                listformat = url_ext
+                format = "audio/x-unknown"
+            # links from selftext
+            elif text_urls:
+                row["url"] = text_urls[0]
+                format = "video/youtube"
+            # check for specific web links (Soundcloud etc.)
+            else:
+                listformat = "srv"
+                format = None
+                # look for walled gardens
+                urltype = re.findall("([\w-]+)\.\w+/", row["url"] + "/x-unknown.com/")[0]
+                if urltype in ("soundcloud", "spotify", "bandcamp", "mixcloud"):
+                    # is a specific player configured?
+                    fmt = "audio/" + urltype
+                    if fmt in conf.play or fmt in action.handler:
+                        state = "gtk-media-forward"
+                        format = fmt
+                    # retain it as web link?
+                    elif not conf.filter_walledgardens:
+                        state = "gtk-media-pause"
+                        format = "url/http"
+                # else skip entry completely
+                if not format:
+                    if conf.reddit_keep_all:
+                        state = "gtk-page-setup"
+                        format = "url/http"
+                    else:
+                        log.DATA_SKIP(format, row["url"])
+                        continue
+
+            # repack into streams list
+            r.append(dict(
+                title = row["title"],
+                url = row["url"],
+                genre = re.findall("\[(.+?)\]", row["title"] + "[-]")[0],
+                playing = row["author"],
+                listeners = row["score"],
+                homepage = "http://reddit.com{}".format(row["permalink"]),
+                img = row.get("thumbnail", ""),
+                #img_resize = 24,
+                format = format,
+                listformat = listformat,
+                state = state,
+            ))
+        return r        
+
+
+    # static station list
+    def radioreddit(self):
+        return [
+            dict(
+                genre=id, title=id.title(),
+                url="http://cdn.audiopump.co/radioreddit/"+id+"_mp3_128k",
+                format="audio/mpeg", homepage="http://radioreddit.com/",
+                listformat="srv"
+            )
+            for id in [
+                "main", "random", "rock", "metal", "indie",
+                "electronic", "hiphop", "talk", "festival"
+            ]
+        ]
+    
diff --git a/channels/search.py b/channels/search.py
new file mode 100644
index 0000000..db29e95
--- /dev/null
+++ b/channels/search.py
@@ -0,0 +1,211 @@
+# encoding: utf-8
+# api: streamtuner2
+# title: Search feature
+# description: Provides the quick search box, and server/cache search window.
+# version: 1.0
+# type: feature
+# category: ui
+# config: -
+# priority: core
+#
+# The search dialog implementes a "cache" and a live
+# "server" search (only some plugins). It scans through
+# all available, or just the last active channel tab.
+# Found entries are displayed in „bookmarks›search“.
+#
+# With the little search box atop the main window, you
+# can alternatively highlight entries in the currently
+# selected category.
+
+
+from uikit import *
+import channels
+from config import *
+from copy import copy
+
+
+# Search window, and quicksearch box handler.
+#
+# Aux win: search dialog - keeps search text in self.q
+# Quick search textbox - uses main.q instead
+#
+class search (AuxiliaryWindow):
+
+    # either current channel, or last channel (avoid searching in bookmarks)
+    current = None
+
+    # show search dialog   
+    def menu_search(self, w):
+        self.search_dialog.show_all();
+        # Update (x) current_channel checkbox
+        if not self.current or self.main.current_channel != "bookmarks":
+            self.current = self.main.current_channel
+            self.search_dialog_current.set_label("just %s" % self.main.channels[self.current].meta["title"])
+        # Update icon
+        if "finder" in dir(self) and self.finder:
+            self.search_img.set_from_pixbuf(uikit.pixbuf(self.finder))
+            self.finder = None
+
+
+    # hide dialog box again
+    def cancel(self, *args):
+        self.search_dialog.hide()
+        return True  # stop any other gtk handlers
+        
+
+    # Prepare self.q and self.targets, empty streams{search} result store
+    def prepare_search(self):
+        self.cancel()
+        self.q = self.search_full.get_text().lower()
+        if not len(self.q):
+            self.main.status("No search terms given.")
+            return False
+        else:
+            self.main.status("Searching... Stand back.")
+        if self.search_dialog_all.get_active():
+            self.targets = self.main.channels.keys()
+        else:
+            self.targets = [self.current]
+        self.main.bookmarks.streams["search"] = []
+        return True
+        
+    # perform search
+    def cache_search(self, *w):
+        if not self.prepare_search():
+            return
+        entries = []
+        # which fields?
+        fields = ["title", "playing", "homepage"]
+        # traverse all channels modules
+        for c in self.targets:
+            cn = self.main.channels[c]
+            if cn.streams:  # skip disabled plugins
+                # categories
+                for cat in cn.streams.keys():
+                    # stations
+                    for row in cn.streams[cat]:
+                        # assemble text fields to compare
+                        text = " ".join([str(row.get(f, " ")) for f in fields])
+                        if text.lower().find(self.q) >= 0:
+                            row = copy(row)
+                            row["genre"] = "%s %s" % (c or "", row.get("genre")  or "")
+                            entries.append(row)
+        uikit.do(self.show_results, entries)
+        
+    # live search on directory server homepages
+    def server_search(self, w):
+        if not self.prepare_search():
+            return
+        entries = []
+        for i,cn in enumerate([self.main.channels[c] for c in self.targets]):
+            if cn.has_search:  # "search" in cn.update_streams.func_code.co_varnames:
+                self.main.status("Server searching: " + cn.module)
+                log.PROC("has_search:", cn.module)
+                try:
+                    add = cn.update_streams(cat=None, search=self.q)
+                    for row in add:
+                        row["genre"] = cn.meta["title"] + " " + row.get("genre", "")
+                    entries += add
+                except Exception as e:
+                    log.WARN("server_search: update_streams error in {}:".format(cn.module), e)
+                    continue
+            #main.status(main, 1.0 * i / 15)
+        uikit.do(self.show_results, entries)
+
+    # display "search" in "bookmarks"
+    def show_results(self, entries):
+        self.main.status(1.0)
+        self.main.status("")
+        # set contents right away
+        self.main.channels["bookmarks"].streams["search"] = entries
+        # switch to bookmarks›search tab
+        uikit.do(self.main.channel_switch_by_name, "bookmarks")
+        uikit.do(self.main.bookmarks.set_category, "search")
+        # insert data and show
+        self.main.bookmarks.load("search")
+
+
+    # search text edited in text entry box
+    def quicksearch_set(self, w, *eat, **up):
+        
+        # keep query string
+        self.main.q = self.search_quick.get_text().lower()
+
+        # get streams
+        c = self.main.channel()
+        rows = c.stations()
+        col = c.rowmap.index("search_col") # this is the gtk.ListStore index # which contains the highlighting color
+
+        # callback to compare (+highlight) rows
+        m = c.gtk_list.get_model()
+        m.foreach(self.quicksearch_treestore, (rows, self.main.q, col, col+1))
+    search_set = quicksearch_set
+        
+    # callback that iterates over whole gtk treelist,
+    # looks for search string and applies TreeList color and flag if found
+    def quicksearch_treestore(self, model, path, iter, extra_data):
+        i = path[0]
+        (rows, q, color, flag) = extra_data
+
+        # compare against interesting content fields:
+        text = rows[i].get("title", "") + " " + rows[i].get("homepage", "")
+        # config.quicksearch_fields
+        text = text.lower()
+
+        # simple string match (probably doesn't need full search expression support)
+        if len(q) and text.find(q) >= 0:
+           model.set_value(iter, color, "#fe9")  # highlighting color
+           model.set_value(iter, flag, True) # background-set flag
+        # color = 12 in liststore, flag = 13th position
+        else:
+           model.set_value(iter, color, "")   # for some reason the cellrenderer colors get applied to all rows, even if we specify an iter (=treelist position?, not?)
+           model.set_value(iter, flag, False)   # that's why we need the secondary -set option
+
+        #??
+        return False
+
+
+    # #ifdef PKG_ZIP
+    finder = """
+    iVBORw0KGgoAAAANSUhEUgAAAIQAAACCCAYAAACHHWC6AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADnQAAA50BvNxDqgAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACAASURBVHic7b15lF1Xfef72fvcoW6NUpVKqioNJVmeBcYD4AELOzwIUxgDgaRDoLtZq9NNhn55nWSx8ggQOgG6F5081iNp0nTSnZfuDB1oQsIQMMGAY9lMNpJlG8tSaS5ZNUs13Ons3/tj73POPueee6tKkm2Z5b3Wrbr7nnPP2Xf/fvs3fH+/3z5KRHiuNKWU8vvyXBr8c6Sp58KcOkbQQOBeAoRAKCLm2Rzbj1u77BnCMUMAlIEeoAIYYMm9Gs8zxaVr+tkeQKemlNJAAegFtgA/Cfw9cBuwFegHillV8ny78HbZMoQnGXqwzPBe4DPAC4CPAde6z7uBwvNMcWnaZcsQgAJKwCbgd4H3Y9UGwBXA
+    vwV2uuMVIHieKS6+Xe4MUQD+E/DTOcfvAN4J7AA2Ypnncv49z4l2uU+gAf470Ghz/B3A3Vh7YgBrT1zuv+mybpfz5BksIzwAfKLNOQXgl4EbgFGs8fm8PXER7bJlCAc6NYBzwH8Fvtjm1AHg32Htis1YI/N5e+IC22XLEK4ZoArMAP838KM25+0G3geMA0NAF5f/b3vam1JK/VHv5sLf9I2W17pAnivAVBHYANwE/KV7n9f+K/DnwGFgGqg9l0Ern4hf7Rvr71JqUKM2KhgUYUTDGIoRrGTcBAxiJWa/su56F1BswL6Xn5PXwalFEWl2vOflzhAQA1RlrDfxRuD/xWIU2VYHPgJ8DTgKzPMsIpnZVfm/ekdKwyoYDBQbxajRQLEVJWMKNQIMK9gk9jcOAH1At7JELWG9rgtqVWHu1bXwF+r1xoMwPd0pBlS40Js8k01EjFKqDiwA/wD8IdaYzLYSFp84jVU1DeC8UkouJBCWJ2bfW+5X7yj19iujR8ta
+    7VDKjGnUVixINiwwpCxR++/v39ZLQtQivhqL36Vv8TQZPn3GyKuLxeJEo8EsNg6U254TDOGaAWrALPApYA/wipzzhoBfxwJZNfe9JaVUiA2KAfAXpW0DoyW1U2uzNUBtA0YVbBYYdtfYcH//tn6S+ElZWaJayRTgLveMELRzU4DWEESvAKp1aFq6FxQBqBER1Q87CzxXGSJnhRpgBZgepvDbczSvbFpgKtuufVOp50/eV94wX1YUC6guZQlaIrVSLxOCuiYKBAEFohUohQTKErtgCa0KARQKqGIBKQaoYtG+tEYFgX1pjXn8GLKwCEDgQD4R6YalPFUbt6eVITpZtl/mqpL0zG/s0cUBlN5QVIyIyIgotogwrEQNfatv66BSaoOCfg09ID044gLBUyZU71l6ivkcE+EL9aWNdxS6Nr68UHk6f2JrUyBKIQpQYonsvVCCAUSJFVcBUCjExFbaEV4HKKVsX2vvfQBKgVZorVEqOq4dNwsiIAXtD4keRXlR
+    qEAjUE6H5g1/VYZoR9Sv8qJu3Xt2WylgFBOMaMUWFJs1MiRGD6Jk43392waU0IeyYtet0rK974pOQhNgF4ZKhLqCoGW9pvtbdMBHKkP86vIUWZYQ4MMrs3ymZzO7dHG1n5n90YnoDXT6pd2qDSwhJOorBYFywxcQQYyxLxEwBhETf46J3oeW0LhrKOW+bgANxqAA0QEYQWFQWmPXgIAWlDGIBoVGxNh5LKQFwZCivAgV6AmsrZ3fCt/r23F9Q/NmlNksooYUsgH0BpA+EXrv79/WDaoLpIzToQq0hQaCtNQVSzSlPOZ7mmXwiwtlfqlrgE9WF1qOLYvwmyuz/OnIFfR3lVHFIhQCVKEAxYITv8lLBQUoBFZciwFxBDViCRQT2IARdzxExB0PJfU9S2js97RCGTcZWttpM6FVB8bY/2JoGqEQKOwUGkRpEEGJAaXdvbHXNoJgv6uMAa3AKEQbVKDxRcA2Te8JoRKGjc4qo6nN+xXq5xHlaKeIlmkiGy4T
+    11RrJNCYIEACjbgV/NZgI49NneRr5+davnIibPAhWeKP9t5lf48jarJSHUGjz41NxhKjwGhsZETs5GubuKUMiDZgVEIMtPtM23lUbpUrbReIKEtc7IpHK0RsP2IK0QEfPD3JL24eZntXlz3PCKKthAHLCOIkkLIDcdIkADFWwIiTYF4bU6pHRCpQ6swQddRM6WKItEoTR0TRGhNopFCIiWm0RgpBfJxCgKSI7b0vaER7SsTNetR/3zU7Ofrtezm0eL5lDPedPsmnvv8dfvklt9r7gBXFWiGRWHafC46okQ0ggAqtjrbLGlEahSBKWTGtSVYoghjlSYcQ0Y5JjLH3w6DEGYsmMiSFz83Nc//iEqEIH9uxDcHeJ5IgYoz9zY5BBA3KoNCgjWVinPQoBKllvNl6ShUIO5oJhaZwppQR68YnoA7sf/eyRMwQNSacdkT0+k4v+rfwzRJLV+W9TxMalfSir2X7oOhC88HbXsYv3/t15pqtwdE/fuSH3Ll1GzeN
+    brWiV4mbSHtcjNiJtj6c1dHa6WPjVr+TDugQMe67xhJEnBSwxp1xjOQYw5iYEZU4wmmPEY3hSKPJf5mZBeDBpWUePL/IrX19CAblVIVSgbND3CwIoALESMwYEdO02BBaVZSiUi43g1qtHTtAIcQc9/GShW1bWBzZFFEmNekJwTySqfhM771t2ie89+XVCJ+6ZnYM3g2Ud0MFbOnu4QO33s5v3P9tmhkj2ojwm/d9k8+98W30dtnUCXGi3kqD0IpwhRXFyopmiYmKXYUolLEr0jIKEBuGeLaDsWoikjZOCohjGktgjWBoKvjdM09R98b8qbPT3NzdTTEIUhIiWkzibIiUkakt0yCmRWVsUJSAbigG+HZBpummcNr/IAgNWmm0VgRaufe2r3P7Kukr95l25/h95X1ntX6neyrv+jn9Fw1v5t9c94K838qpxfN89MH7LANpbQnnXDjbV4kbp0Epe44o5WwBZQmidNJHOeZR8fnRNVH2mrjP0veMmE/x6bPT
+    TNTqqbGeqNf5m7k5RIylnDgj1vNSfNtHiTh71nk1QVrs90ERTEUk7GhD6CLBVJohwpgIypv0oC0RdLqvNPONWqq/JkLrzoRO38OeH02w9dGT/luuu447Bjfl/uDPHz7EPxx+EkiIHL2PCKgigmmPyBp33Gccd8+YERKmsarDGaERI+GNGUBrvru0xOdmW41hgD+fmWOm3kiIHDEFuL7B4g72uMIZy2KcAZy0HqWKIlTAdGYIY/Rs6oPQxEQIcoigtbbM4fopRnET9FsP7uOeU8czqz+6ps4Qug1jrUb4VSTMb9x5JxuDfPvpw/vu4+zSoqNXsmrj1esImhDV7/uEt0wRA0OOadJAErHa8fEGpTXnQ8PHTp5u68MtG8Onp2Y8d1esoM9IB4TYPSZyicEZubZVIABdESl0NCr1j5ZLaYZoNi9M7CvLKD+cmeL44nn+YP/D3Hv6VIvqUd5qDzKqJk30tRG+ncQZ6qrw/ttuz/3RC/UaH/j2vfH9rDRwIjzD
+    INE4UJ7EiNSM0ignAfCkgvKZxl1D3H0iCdRUio+cOMFMs2M0mnvOn+e/TE9jJFn9jgOwHk0CeBFhJsZ9Hnk6QFdc2xJ2ROn0r3CoAcSj0s3wovT73x49AliR9h8e+h73nTndIvYTQiQrJ7lHRqJk+nn3bKfOXrZ9B2/dsTP3h993+iTfOHLEEo6sbeBWPCq92pVzMR2jLpuQ/33qpPVGnc2Q2AsqI10i61djUHz46DG+c67VRc5rfzE7z787cYrzzWZMeIujSMIIEjGGsS5xxo4oWRi4KKJKsKet2igACNSUe6+a1oZYzaJPuYquP7m0yINPnYm/Y0T43e8+SOFWzZ1j2/C+Fl1xHV5L+/HY62bHY//86u138P2psxxbWW758f/xew+wd3wXgVYoSbwEtPP/Y5cTizM4m2C+UeUvDz/JX04c4VyjTl+hwP+xZQsq9jzSWIQ4jEKhMWL4yOGjfHMu327oCTRLYWtsRkToigxKrVFGnNfTCm/jPA9fZRTt
+    bBZEdAXmAtokLkc43Er8QaORr99TRl++fv/C0SNkYyahCL/znQd44KnJtRmWWY9iVQ9DpWwa5UmZQCsqxQK/c9dP5ObTHT23wJ8/8nBaGjjVEakR34BEK37/kQO8/qtf4Y+feJxzDesZ/OmRJ9NqgkjC6Fg6KKUJFfze4SPcMzOTywy39vXx8fEddOn0aIcKAR/YMmwXvJMEEVqJe99iZJq0YaktYlGAsALVtnaExl42kV1G0MK69XtDhC8fnci9SdMYPrjvn/jOU0+tg9Dp/qOzM7z7H77Efz/4CCcWz3mMmVY1gU73tdbs2TzMG0e35Y7tD3/4A2arK87y92wBfFuAWI3M1KqshGm9/8S5c+ybmY7VYGJkqtjFfOjcOd7z8A/58tRU7jiu6a7wwR3beUFPL5+6YidjJavqC0rx26MjbCwWnWqwNEp5Hi1GpmUQyWARGxVdQDf06nZBSw1gbCZS8mEzXLd+v+fEMRYb7conoGEMv/VP3+JLRyfyCd8J
+    w9Cab5w4zqG5OT69/2He8Xdf4Oe++AX+5JH9mfG1lzi/tPdOenJKNhbrdT753QdSBl9iZKoWHOFfXrcnN1736UM/wuKaiaGqlOJsvc4HHnuM9+3fz5HlVrUFsLtS4RNXXkVvsYhSit2Vbj69+wpu7e3hX28e5oXd3c6+UbFEiINonueRRFgdo2RczxFUt3U9621tiEhlpBSaDkPnHrYalnlg1Uy1yp8//mhbZvCZ4qPfeYB//+A+asa0Er6DMfuNE8dT1zo8P8+3Tp6w48lTNRkJM9zby3uvuiZ3XJ994nGemJ5KDMpYOiQ4RGRUXrlhA3dvbZU2B+fn+cRjB0Frqka4b3qK33v8Md7x4APcc/Zs2znZWanwB9dcw0CxkFJTfYUCH905zluHBtPeEHgSQVKeR5Q6GhuYGXBqe0CP1roCzbYqIzIqp/0PgzB0+md1w26musKv3vuPnFlaavujs+3LE0d4bHaGj7/8bnYN2ATqVJwic49HZ6eZXFxsuc6r
+    du6yXov3WSpOkoHL333nHXz2yGFONtOoYCjCR/fdx397w1tSMYd28PZ7r9vDN06dbBnPXx87yldOn+JcB0npt21dXXzy+ussXmKcO+nB2zoKeWMDcYTKQdYmFQWN4iHoLLydZogttmalY8TTqgxRZ/wPraexNv3+Vz96nBPnz+Ve/D0veGEqnuG3owsLvOtLf8+H7r+PR6anO+IUn/1RfjnGq3btalU17dxlrSkHBf6vG2/OvdaDk6fY/9SZGDdohZoTTOEFQ8O8evt47nXWwgwaeOPICH/8ohsYKpXXBG/HgJezcxKVERmZtMLbGYbYpFUFpALt4WunMiQVz9DN5pr1+y/dfAuvGt/ZcuGf2r2b9910Cx+5cy+VNuBYPQz50pHD/IuvfJGf+cLn+esfPc5cterdQ/PY7Ax/e+iJlu9ePTjIzg0bVlVnaUNT8ZpbbuIlld7c8fx/j/wQSAzITvD2h196G1cODLSb17bt+r5+PnPzzbz/qqvYUCx1hreV
+    xygx8pkYqpHd0GJkRvB2q1FZVopKuVxsrzJERL7au+M4QeIuqmYSvVstCqlR/Pu9d1EMAr505DAAr965iw++bC9aKV57xW6uGdzEr9/7j0wstE/dOjw/x8cf2MfHH9hHV6HAaG8vgVJMLS/nQrs/deVVGXWRUWcZyeTjFL9x2228/Rv3tFzzKxOH+Y2lRYZ7+ojtTy+fIYpkihEqxSK/f+dd/NxXv8L5Rr3lWnltrFLhMy++Be1S5FQk5l1CTgq3iBjET6wRcUyZJN8k2VhOSkRSJON2AgygSkC3iHHc3jq1TmGqlIRQjWau2A1yVp/WmkKg+Z079/KGK6/iVTt38Xt33U3BwyyuHNzI/3zjm3jd7t1rmrhqs8nE/DxPzs2xkBO8397fzy/ccEMrTpKVar7q8dznm66/lptzpETTGP7i4IEEdYxEeBt4e0dfPx+7/WVt1WK2NYwhcEmya4G3YyNTeVLBVyuRtGjxPJyRqdP07lVSsF5G+yQZbf9Iyjm2
+    DNHqWraPQ2gKQcCH79zLx+6+m0IQtKiWnlKJj9/9Cj7wsjvpLq4z6TXTfnvvy6kUizk2je7cd2CV1pp/fnO+LfFXjx+k3gwt9qC9YFYbePvOsW382otu4vYtI/z0rt3s7u9vO+6Zet0m0PkubRt4W3mvVJzE+26r50HieZhWtLNbqQLQJVJYxajMRDxpNLyJVPHEB94kx4ig1nFUtBAElIJCe3dVa965Zw/3/vy7+NDel7Nn03Anuue2n7ziCu4eH18XhpH0VTye191yI6PF1uTB2ZUVvvjE46kYRrQaswafJQq865rr+aO7XsEHbnkJLxne0nbsRoTZZiMGrVJR0Izh6jNNEoVNA2YRo6J0Yjt44BTGlgFEzUY86eoUAtcALuKZyJdIQmRXW4oJshZ9dtJ1W4ygv1zmnXv28Nm3vY3Pve3tFCIuX6X1FEv89stfnk/4TgE5T8pF4ykGAe9+wQtz7/Nnj/zQ5U9GBEjQS2ICkgtvb+7uXAdytlbvCG9b
+    zyCKsqa9nRgJdZ5HUrNBYmQiifeBIN7Ull3E0wa4cvE1i0P8Coca+9gWRn3qNp5B9C33Z9VgFAme0IpZJAeTUxQv3LyZgXKZmZUV8tpQpcJbr7uOriDglrExxvr6OwfIkmHFg/Pv58/Cu26/lf/n4YdYyRT6PDYzxfdOneQl23dgQ8zaMzKNXdnKS4NTYCsFNVsqPbm/I2rTtSoM9MMq2dtx6p1nQLbN3ibBIaLsbeVS9H0JUbQ/vwB00aakLzYuRFFT4oCqegOtoynNIXxHsIpcwns0xCeLUoquDjkbGysVfuvOvZ0JnRmDf7/YP3f/be6I7feWSrxxZIy/mmwFmf7swMO8eMcOovzIKKnWZkGrttnbIz2dGWKu0UC5bGnRNmq5tuxt0z57O/I8HLCFuMxwSTOEK+kLRGhb0hdRQkRYVrawFanV0S6o481yW7du/UyQnKmgI0PUXMJOyzUzY/AJbwtn4k+J3kqkFeN/wr+49aX89edPtvhf3zg2wVK1
+    Rm9Xl1upNptZonkR5zJKOnt7W18/r9kxznBXF8NdFYbLXQx3ldlcKrOpVKKklc3wNgChXe2aNWRvqxQjtsveTpBM+95nCAV0Q2kJqUBT55X0JRICFrGVz/YGYojqCxPyceGE7yDmuwrtvY66i3nE4/QIbaLATkLqFsJ7LIF4J0Xvr9y2ldsqvexbSUPjDRPyrWMTvP66PfE1lCNAdBklCVwcwdujPT18/Pa9XqWXIBI63CFCENtlb3v1IReQvd0Kb6clBMAmTddSSAW6C5kQFhDzNRhJRzxVo9niv0eGXKDbWPSdDLsOeQ+V9sAZtWYTI4IxgjEGIyZ5n9c3UV/csTZ9Sb7zxl1X5N7760ePkDIqHejTHt7W8bGW7G2lY9ujffa2soyS8TwidLQFh1gV3hbIYBE7AtWntS36zfvNvg2RZpd6A93bTd4K9/u+jRH316nfuwoFtFKUg4ByoUBXoRC/HyiXMZFPnbv6bccXfL4UTKmS5ISUiviJG19I8Oj+
+    FgvrW8cnaDabFIoFp7tJVnIGMVTKJamoyNYwnog3ThqAEHolgkmGlUK72g9svYUSIlhbXMmerRdRVjpkbIsoa8pKMIkNVZOREFvBhcDzA1y+ykhnbjSaaPejYf0W/Hr0+5+9+S1JHMbT79HXjJHk/ByxH5/vmwirMIE/hv6+Pm7q7uV7y2m1ca5W43unT3KbkyAqvqLKeB4ZeDuyBZyxiMIRNbINJCq+wpblSaoyTLRlGmIj8yLg7UD7s8AmFQe4csVyrDJCo55KHYlS6TL+exoqTiOCvlxIiXljcsV+6PoKSYn10BPz4on5sIPYb+mLZO7p3SNH1dy9fUfe/HDPxJPYhZmAQyoS4WuAtxMRHwFMDuSKkEnlVMoFZm/HWEg7eLt1W4CKUqpSLudHPGOGEElHPCPXMw9YwhP6+fp9Df016vewDeFDj/BhG8YLs4QX75qZ8bxiz55chvjHicNEu7okqGUEJrEmeDvW7SphCj97O0m7UwmjeUhlBEgk8LZK
+    Xb8TvJ0t6RtoLelLtYJjBhvx9LVyzY/riwXBMm7c6ta9O+ci9Hvq/BxXMr5rRtV08jD88UWqZmygnyvKFY7U0gDZyXMLHJqZ4urNI9aij0Q2ghXxJo4nCJKfvW0EpDV7W5SzRQBU6KrK8TyPdtnbWDURV6676zlvh9jzoEVC9Mclfbm7+Hk7yCh12idjWKvFbl2e/94yyZn+pdLv6yJ8J0ZsMwa/f9fWbRw5cohs+/qRJ7lmy2jiYsarEevWiYklQ7yBByDRhiBERqZ2EUjlGZnW+EwBYEC094O9kDghYZlQtIFQo7TDRloALOUKgRXZOFZU0qdUfjwjlicFkVQaXVit54r5Z1a/X7iqye3nqBZf9bz86qvz5oivH3my1RaIXczEnojrPD2RHol6IhWTEfHWnfS+78csfJWiPLUSBcfwVEZ8TxXfPzI6WwNc7Uv6Ei9D1Ky/vky15qz7ta1wv5+tzcgT+2nhkqz+1JUkfY+2qiQ7hjWps1apdt2mIYYK
+    RWYy+0vsP3OaqcVFhvv67ER7MQwil7EF3pbVNycxkTsJbTcnieBtbaXKhcDbopxwIVXS19nLOLmsUxFPU6uvYYWv0bAz3mrMWf2ht9rFPz9e/Saz2tv1L07CiBFetmlzyyQJ8I0jh/AjjIl34RuQiVEZZ29rXxpEnkcSzUx5Hi1GZsQs2lvxusXIFCKQLON5xJIl+S1eSV85r6QvPvU9HK0jCTZj6vXOk36JiJDth949xWPEMFe1dFA1F6ha7tiR734+PHk6FudRfoRkPA8cQZJ+cr74jKLc1Pthb6VSnkekSqL3EfKZRSoTNZb1PBKm8VPpCla3FESCqKQv1VJiQ1RS4ym1BhFCmDIWoyVDGzF8qTwMX8zHp+YYr9nxpOzfbD+jznLucf3oCHntkacmifU0YQr8icCmKM6hwsjzyPMSnOcRG5nY6zljMvE8xDKJ8o1Mi0P4SKUYsfC0sUZmrlrSmijSrbElfU1MBeotasP/wEY87Z6Sng2xGhPwjOj3
+    tRB+LePx+3k20ECxzJZCiacytRs/mj5LrdmkXCw4W0ESJ168/acUzzC87TyPDvC2ZAp2Niq6piQp6fMjnmkJkYl4mmbDVhTnTLqkKLCW1b9GwqcW8IUTvqPr6g0sz4W+tq+fp+ZSThehMTx69gw3b9vhXMHIgEukgLB+eFs5TOLphLdbtihEdZ8VyS3pSzGEgQX/jLBah0o5TZQcwreb5Asm/KUCq+IxrG88V28a4psZhgA4cOY0N+/YCTjCG5fPEGMRUQwjSmvLeh7eJh5uozIBT8S71R5tIGYixpC05xEl1EQ7zyknbWIsAw8UU3brZBKJtz2gZ7/oijGdVQYmEyA31TqUS/HM505ypt8OrMoFt9Ifrarf2xL+AhmR7BjcwauHt8Ch1mqxA86wjO6lvNQ1S1hvNzpwKiQEl1iDwu1IG9kGEeDkxq7dPlGOKUSHsZpIpINYg9bfFlFbcKo1scYxZgac2qKiHf5bI55ZDkmDU7W6y/NbZZKTjy9KzPt9
+    //y434nw/j3WSPjcMQns7u+3i550++HkqdgWIMIhvNUZbXF8UfC2cgakY5hLAW9n0cpNSnWByd2ALC0hRE3GCAYg9bq1YnMm+dnS7/49snZMnjrzLtdRyvljqgQFtpUrnMjENY7MTLHcqNNdLKaiQmLEErUlNH0x8LZcOng7Iwi8kr6WTUxTDBFmajxNrQ7xzqlrmGTWT/j1ehgtqz07hgyh/f561NlV/QOcmEozhBHhkcnT3Dq+09oC4gy+WO9LYlSKb2S6q0ZGpoE4EVYJednbkZFp8zWtglp9723n/ZhM9nYmI63fPjekImJaNjGNzU8RERF1wv+ixSJyUMp24NR6wKpVgKR4WxyHIEYFKK3AUga1zOQ5hDnh72zsRXJiNbuHhshr+ydPJuBPFgyKUtf8GEYEWHkxD7/IJ8mhcOBSDvhEKmbhbBE/hyKOfxDfM9ntB7Jhi954z8pW+Dr1gVJqMqWJ6/UYnHJME/F/9EHSf4b0+/oNzZwx5Eg1FYYE
+    tQa6VsdUq2w9n18n8sNTJy3RMgYkkFj1vveA8xTitIb22duQBpzy997WLS5onL2NvX5L9rbG3tzNbbeiAFTySvpSDKElXeMpjUYanEpN9LOj3y8UNdWNOkG1QW15hbmlJWaWl5heWWG2XmO6XmcqbDIlIVMmZFbC1ND9tv/UicQWiFBK7cavIpUQeR7iCOszTqfsbXdcQdu9t1MA1dqzt0UrVGjv2NWhpC8NTGUintQbbsPM9ev3+OMWnGJ9hF/dXXX9MGR5/hxz588xO7fAVKPGdKPOdKPBdLPBWRMyJSFLmSqt9bZjs9Ms1KoMlLvs3Y1d8QkBcJ7HZQZvBxrcdodlK3ZyS/pSDHFyWc9e028SW6jRTCTEhYp5ElWTnLp2Me/3JX3R1D3+8skn+J8TT/JMtP2nTrJ399WegaeSsHM0PBdjuDTwduR5XDi87W8eUrTx+tySvhSm+R6O1sWv96s3YqPL3/bu0hmakjEsW6OQodcX8Y3F9D1ev/MK+oKO
+    +3pfsnZg8mRi8KUMSmcQevUXfhg6nVjjRSjjxBji436oO5tYExmsqSrwnNC5v/e2D051KulrTZIQaqhkV1sLtjy9+j27+lvjIqmrtEgVAbq05qe37+S/HT3cSsFL2AKtOTo7TZTHGA8Hko3Kor4B5NmCt12cJTIyPYZQtC/pyzKECEmNp6pnQ+BrIHyO2F+TKvEu3I4JVmPEV43v4u9PHGM67LyheLvWXS4ztnGI0Q0bGd0wyOiGjYxt2MhI/wCjAxsY7u1nU3ePJbkIkZdJlPHk2RLR6NcLb8eex0XD25KGtzMOxWZNZSKnpK9FQhhY1F7EFFajKgAAGO9JREFUU5pNjANhPBKsS79fMFiVPT9lsLbaMQUUb982zh8dy5cS45s2c+XIKGMbhyzhB4fYOrSJsaFhxjYO0V+pED+cxJgYC4n7xj2Fz30Wr14S3Z0q3W8Hb9Me3o6vd6nh7WL6oZc7AtV3TKTlKX15DJHaY1DqTYzbZnddcYg1GY85qoSL
+    k0B3bB/n704e52TYuj3gbVdezSd/4V/lZBwFycqOoObomVxxP5p/SRuFUQo8nrnuP3gtGpoPb8eM88zB21m0sl1JX8qodFPcsr3QWvIY/RQ38YzHvKIYIz6CuIYUuzbpbnnGrRJ4x1h+GtzffOd+njxzKln5kkZBAc/gcwacZwSm+lHam8oaeGmDEuVfL2tU+n0P+YzS6KIMLR/5dGpl3dnbmX29hpTKfUpfHkOkazzrjXWVxCVJs6aFsGEbwvvVWWEbQrdL4s3zYm7Yup2rCq37R4XG8Ikvfd6qAIn2dTTEW/C4VRt7DtoRxdtfKiFikhQrHjSdruzSMSM82/C2KmcZgq68kr5WhpBsjWezlfCS01+HK9kxmzsVh0j64l1ztextwfCzW/J3v/+7h77HzLlzFv41mYeauc+SzGpHlNilTBJY66FhfmWFueVlFmt1aqaZ3kRMO6J4TOLXZKaytz0Js1r2dpoREvd11eztjITIeUofkGNDZCOePjhlGSZm
+    nUvsYbS5ZnKp1mtmjVmvv2t0jBc9dYofNtPx3UbY5D995W+57cprWKzXWGk0WK7XWa7VWGnUWarVWK7b11K1ynKtylKtynKtxnL0v14j9GI8fiu6nfhKhQKlIKBUKFDUAaVCYPtBgaLW7n1ASQcUteaGkVF+/oU3ei6rXEJ4W6NKaYboa1PSl4GuRb7aO34c79HqqtmMXc+YSBdK+FxmWq+hmcdMQjUMmWvUma3VmG/UmK3XKRSL0Gzd+PQz37yHz3yzdSfbS9EaYUgjDFmqd3haak774hOP8Yqduxnr7SWuyjKXCt4WpFDED3C1K+lrkRBaMZn5ha7GM01ov++7htn+ha/+NOFrxjC5ssTkygqT1WXm6nXm6jX7atSphi0bqq2rlctlenp66Orqoru7m+7ubiqVSvzq7u6mq6uLcrlMV1dX/L5QKKCU3TEHaPte60QVRK/l5WX27dvHl7/8ZRphyO986x7+80+9NYG3PTDrksDbgYamnaeuuKRPp3ig
+    hSECMak0Ou1JiHaETo6lCe3320VFs2J/qdlgcmWF0yvLnK4uM7myzGR1mZlaLc2Qq7Ryuczw8DBDQ0Ns2rSJTZs2sWHDBjZu3MjAwAB9fX0MDAywYcMGNmzYQF9fHz09PXR3d9PmYTMX3SYnJ3nggQd48MEHeeCBBzh06FCK6e89cpiJ+Tl2bdh4AdnbFs/olL1NIcgwRGtJXw50nY546maYBLiiMcIaVnh7/S7AuXqdyeqyJbx7TVZXWFjDRuLDw8Ns376doaEhhoaGGBwcjIk7MDDA6Ogo4+PjbNq0CX/DsmeyLSwscPDgQR599FH279/Pgw8+yIkTJ3LP7evrY3FxESPCH+z7Np983ZufFnjbj2fklPQZyGGI48vBzDX9zRhn0WHYGgLvQPjV4OhPPfkYTywusLTK8yoLhQJjY2Ps2rWLnTt3sm3bNsbGxti5cyfXX3895XK54/efqSYiHD9+PCb+I488wqOPPsrJk617X4JVI8PDw2zZsoW+vj5K
+    pRLd3d0cPHiQY8eO8ZUnHufRlzzF9cO2xlS4dPC2KhZiuiUlfboCC/GqaWGI93C0fj/bQuWOWQlhMkywOuE9GeK+K0wsLfLQfPqJdJVKhR07drBr1y7Gx8fZunUro6OjXHPNNVxxxRXP2gqP2sLCAqdPn2ZycpLJyUnOnDkT98+cOcOpU6c4f7798zfL5TKDg4P09vbS09PD5s2bc5n56quv5sSJExhj+P37v8Ufv/ntlx7eLhZjmmhQARLYkr5mAahBnsoARKgpF/EMwkhlrMIErp9lAu8Q/zRtIY49e/bw1re+lfHxcW666SZGR0fbTujT1YwxTE9Px4T2XxHRz5w5w0qbLZfzWqS2urq6qFQqDA0N0d3dvabvdnV1MT4+zsTEBPdOHOYHk6e5eWQsSay5BPA2Gfh6g6JrWuiG7iCKeOYxhIh9jmcPQBBJCDqvfv/L0QFfldRNyHddNdTBgwc5ePBgfKxYLMbWfGTBR5Oa1wdoNpvU63WazSaNRiN+
+    X6/XaTQa8avdOUtLSzTW+GysqAVBQG9vb8rDKJVKDAwMsHHjRooX8diHM2fOpNTM5w4e4JaxrW6+/bjIhWdvZ7GIrUr1TGVK+vIlhH2O5ybAbnNnDKGfre3ZE2mPM52j4OuZh+ZnWQlDBgYGWFhI7ZEaE+/cufxndz0TrVQq0dPTQ7lcplQqUSwWKZfL9Pb2xoxYKrXC4RfbRITHHnuMw4eTCO0v3PxS3n/3Kx1u4IisAda6OUm0V2UmtzLDEOOa3v06XdKXyxCG1l1tTSFYl4fh90WEfbM2RNLf388dd9xB07mzYRjSbDYJwzD31Ww24+PRf2j164H4v4i0YABBEMQvrTWFQiElfQod9tt+ulq1WuX73/8+s7M2nthbLvPx17+F1159bQKrwwVkb3uJvV72tsow9GbV+pS+dhIi/RzPZmhzIi7Qw5hr1Hli0a7+UqlEoVB4VghwObWpqSl+8IMfUK9bN3vPyBh/+PafY0f/Biv6YZXs7QuAt8tphrAR
+    z3RJX76EEKb8YL5uhlZCuLZeD+OBuem4v3379tXm6se6hWHI448/zsTERDyPP/+S2/ngq99AMXDZVQYvsaZd9vb64W2d8W4GFaVsSV8uQyjUmRQ45SKTnoJIE76DKhHgu87VLBQKsci/XFsYhkxOTrKyskKjVqMe/W806B8cZMvo6AUDXlNTU+zfv59l98jnnlKZj7/lHbzphTfGmVi5iTU6SqOGluztdcDbKsMQfTklfbkMEZKOZwTNBJxq9TCSN3mqZK5RZ8kxQbPZ5Nvf/jajo6Nce+219PbmPz/zUrUwDKlWq1SrVUSEnp4eKpX8RyDVajWOTkxwfGKCIWDEGHqNoQf7ONwycGxpicdOn+b7xrB5aIiR7dsZGxtbFepuNBocPHgwhVTedc11/Me3/hxj/QPWZfRsAXFSIHEviVP6I9URI4fu3VrgbZ3JieiNA1xhe6NSROQrvTtSGGsQehJinTbEQFDg18ev5t65KfYtzNAUiX397du3c/XVV7cl
+    0nrbwsICE4cOsbiwwFKtRj0M6dKaPjc5c8Y+23JoYIAt27czOjpKvV5n4sknOXXqFFcqxbvCkK1trn+VCK9sNpkFfjQ1xfdnZzn25JO84Kab6G/zNL7JyUkOHDhAzcnkge5uPvSmt/Mzt9xG/OxOL3tbQSwFElsBbPa2y8u4mOxtL57Rk1PS10ZlZCSE8bGINGSZl+zqI5oIVJTmtYNbuKNvkK/PT/GDxXmMg3xPnjzJzp07ueqqqy7YrTt79iwTTzzBwsICLxHhShH6gT6g6JJfonYOODI3x4Hz57nnwAEAblGKNxnDxjXebxC4Hbg1DHng/Hnu/fa32TE+zlXXXhsby3Nzczz66KOxBwHwuhfdwkff9s8Y7u2zY4pEupe9bXM1EwPSTuHFZG87xnFGpioWkHSAq2tVo7KUeY6ndllJ0c3tmw4Jtx5Y5dsbfUHAmwZHeFnfIF9fmOLg0jmMMRw5coRjx46xY8cOrrjiijWje7Ozszzy0ENIrcYdYcjN
+    WKXYqfUDNwI3NpssA/cBZ0XyJ2KVpoE7RNgjwhePH+ebp06x+5prmJmZ4fTpJM9oU18/H33nu3njjS9OsrexcHRL9rZxauKSZW/bkcZGZrGIrFhpVaK1pC9/HjIRz0JoWve9JnIu1mtowmBQ4O2Do9zpJMah6hJhGDIxMcHRo0cZGRlh9+7dbNzYfs2eOH6cgwcO8BpjuImcXMA1tG7gJ4GjwFNYiXIhLQTKItQaDQ4+8oidK6CrVOIXX/k6fuU1b6S3VHYbiUThBXE5C1x09vZ64G0fnMor6ctliIeXZfb2/mRsBZFMTgSsxcPoaG8gbA6K/OzQGCfqVe4/P8uPqkuIszEmJycZHBxk9+7djIwke0eKCI8/+iinjh7lXcaQn1+9vrbzAr83B9yrNQddAlHofqBWip/d+wre/+Z3MDKwIQaZIiNQ4scyEhMxrrzyywAcPh0/eM1JgdbNSWCt8LYPTuWV9OUyxK9xsna/bDNK2Xy7Yux25tgMF2BoJt+1
+    /bFCibdtHGGm0eCB5TkOrCwSijA7O8vs7Cy9vb2Mj4+zZcsWHjtwgPrsLP/KGDZ0otbT1AxwCPi+1hx29onvSL/yhpv50M+8i+t37HKp/s5+Cd1D2/Ftg4jIygWjHCIZER5nGxCt/iTMbYmcMTLXAG/74JSitaSvk+qs4gJcBZFMToS98XryIFrd1cz5CBsLAa/p28Teno18b3mBh1bOUzWGxcXFOCDWFQTUw5C/CwJeEIZcC1waH6Vzewp4SCkexjJFw3ksAMVCgTe/+HZ+8ZWv5UU7d4MOkn0Zou0BnLEoKSMy0we7/6S32hMDMlEp4ES3j1SuEd7OwtdbNJUjXklfO4YQ8Wo8i6FZWwh8jYT3vpac76meCoq93Rt4aWWAA9XzPLRynjlXrxnlTh4OQ04HAX9vDNu0ZlcYsg3YBnS1+VHraQtY2+KI1hwWYSVSC945gz29vHvvK/jnd72SkY2DVmcbsXkIDraJMpjs0yt8T0FapYXLZUgTVWIjM7U5
+    iW693lrgbZ2Br8cD1XfUK+lrKyEElnA1ngGgjKHpHVwv4Vd3V/3v2i8WgJvKfdxU7mOqWeeJ+jKH6ivMuDK9Fcccx8KQySBAi1Azhg1asxXYaAwDELugve76gl3lBmgC81h7YFYpppRiWoQld39fEoC1D16660re9uLbedtLbqdcLjtJ4PaLVOKIZGkpcW4jrZ6Cu2ZsW0QMkvU8oikxdsWryKBcN7wNqiuNVo5lSvo6MUQq4hkYQz19nCzROxma8b80X7BaUk109qAucFu5n9vKfcyaJofqKzzZWGHKMUfdg8TnjGHOzhVFpQiUTShruoFGExypYw2EIjScFIha9HsDrbl915W8/oYbee0Lb2K4byAugIkwDks271GJUWkgKi7Xi2fFuNUdYQ8qMShjxsGpiejRTNEEtdmcZG3wtmqJZ2Sf0teWIQykct0KYqKfSy7hW1Z4mvBrwSnseclJ7ZhrgIAXl3p4cbGHBRNyuFll2jSYC5vMS5O6p8bqGSKv
+    pXWXSrxobBs3btvBTdvGuXXnbgZ7ex1hA3s9Y6wRJ4Ao++jlSPwIFi42YvW4carDMyqT4FPq13meiHUZE2kglwTe1hlUeFDRJaIqEGroxBDCtM+GBSMYtQrhV63OyjKBNxnxdSTDTO2NV4BeFC8qVJDItBRhRQzzEjJvQhZMk3kJOSchM6Y1sbe3VOadN9zElv5+Rvr6uXLTMFdtHiEICqnaSRsTsFIgtg1S0gFvuagk0dUWX1um0dqzDSCCo2PbgJh0jgg4zyOSYyREvkB4Oxvg2qAoa226C4VCoVajvZdhMhHPYiiY6EEcq1ZntTE0c1Z7W9WTFihpZsqOIWPTlESxmYDNOgBdQgSOmBpfN63JsG+45np+c+9PJFXYSlnd78HdcQaS87RUJHSUBhH3YPboZBVvB508cTfNSIltoJOYg4Hoab4pz+MSw9u6kmaIXigCFZFwVRsiFc8oGME3ry5Nddb6Cd8WKU1zR0vh0Ikwv95j7/hOO5kORRQVOCL6
+    V1PWc/DGZUuAxe0gG6GPyqkCEsZRQQsjJZ5H5D6axAD0xhYRWbJGZgu8TeyZrAZvq1LJoZz29/QoVRCvpK9N1nX0HM+kFREvRnSRhF9P9nb2/FxGdGNIqbP0GE6a1oTaQGtu27o9WVXGinm7bXFERBVPPGKc9ABiNaFdpNEzKuMxqIQ4KSMzB5VsszmJxCHtTvB2BvBaBd5WpRJSrQL+U/p0Z6NS4IzfLwqYyLn2Jj2t0i+C8Gtc/RfCiPOELHsFzFG7cfMIPYWCWy3KlsDhJjt65IBPZK2dqLZcERmRSmzhU8qojBjJ3VY5hos+iO0ThFTwKRr3JYK3CUOkViVcqWJWqki1anN33W/KlvS1ZQiNmfb4kJKIC9pcnH73CZ3tdyR8h9WfHZNF/exS0wpOS36W1p3bxy3RRBEbYVEikAR2dccSIVndyWq3fxNvIM8FJWGcaOhRXwdW5HtSIA/eptnELC8RLi8TLi1jlpcxKyuEKyuY6FWtulcNqdYwtRpS
+    qyGrZKgVMyV9bRkiNGrW3zmgCJ1D4Beh37OET8kVaXM/8DKVLOEj/Fd5fxTwZDPffrhj23YL/3rWkXJSIIoSWlEN4pgGwWMcx0gxSKTsPk+kwSwFmGaI1Gp2ldaqhNVaTMhwaYlwaQmzvEy4vES4vGLfryzb89dZP7Keli3pa8sQj60wc3sxUVclIXdbgEuh31tUj3cPS1dHaLeJZ7I2cUaU8k5O+krBcVNnLkdCDJTL7Nk0TLStUOw5GGVVQoRQRvcWkGaTsN6wzxGJ/tfqdpP4WrIyTa3mrdjq007Ui2nOqVbiSvraMsSvcbK2T7YZXMSzpCB3W4CL1O9RSxHaI3ystDKE9z1/pZwiVJqyUpQUlLD//7GaX3f5hu07MWfOEjaalljNJtJo2h1zGg1H8AzxVylQfraa00ASgjQEaYBUwVSFcFkkXFQ0F4XmvFCfE6nPCNWnhOppIyszsCzIDKgmbOgY7USgqlyAq4xqvy3ARej3aJkHQEnbR72Usfnh
+    ZXAEtp9FxC5GxyPCQ+6j7h8J6xzOcTcD4G1nzrF0dl/nmX4GmwAhSFOQOpiaJahZhnBJpLkIjQWhMQ+1GZHaWaNWTotZOSmyXEc1RWhiLdbQ+x8CDaAGUlWKGugqUBORqv2cFaX0dLNpjkGz0YkhRGAlYQgrIdrpdyVCUTmiaUWX0pSAsrJELStNSSUELsUEVpSxm45e6vY/6vnS4VXFbrboPBa6uGZAmm6VRgRdgeYSEi6JaiyINOahNitUzxqpnYHlMyIrs6GqiRJHQOUug7Gr1hITqFmCUhWhBsYRVFeVCmsiQRWkBlRB3LmmplTQBB0q1QxBGaUIoWFqNR1CEEJgIGxAYRmOdmQIDJzXrsazANxeLNkVqvyVTLyiL7xdemY4bpp8q5Ffuf3PSu2T5ZpYkVsXTA3CFZFwGStyzwv1eaQ+J6o2JVI9KyzPGGrzSHVeqBtSqzTErsA6UFVKvNVJTDylqIUiVRUTU9WUMjUIakqZOmhjCRqG9r82tVoj
+    jD6HmrGE1SEshVAwUA5hwMDBdi6GtHzQZq/rbEtV377gIqqbn47WFKSpYuKZKpglEbMkhH9SO9dlrHOUauNBOfyW0TOfD8Nz86LOnxNZXkDV5kSqC6LqJl6dNEDVrPRW1fTqFEdQXTXG1JTSbrVGYllqSkkddAO0Sa/OZlirRcQMDNQcEYshLBroakKfgSdDcgjX5rPkYDbYs862ioTIPFDlEjYDEgo0FaYmYqooUxUxy4I5jzTPoxvzRhrzSH1aqM8aVs4rGueE+jmoL4rUG0aFyopatyptfpJIbUsYLt+ed9/jJnjoT+q17ykVHINgyhgWlZIVPPHrVmcDVKiUCZNVGq3OwL3i1WkuZnXGBy6SmJeidWYI4WyeNBd7TEIlUkdJXezqXBEJlwSzKDTOQXPBitf6tEh1SqidE6mfs8eqNZue4BFTGWsoR4aQqYKp29VnxakYYh0JuipiYjFsPxMD1f4wPPefydVDakak8dkwlIdBT0DXPJTqUG7a1anD
+    Z3N1Xg6tI0McCeWTZ4089U9GbjhpVM8CYWMBVV8U6qFdnVliGlANkDo2J7OuVGTNqqpIokeVEid+EwInq1MagLGrk2h1hm51mtbVueiwxFoPrHwMGMn7PSBfg8bj0DgEnIGlKg5L/nEg5qVo7WMZIqLU1h8Ui3pRxNwO0g/KEVo8tyUisKqC1K1BpEMrbpuxqIVGWKsFISiPmL7uvKjV6fB4bgPe1eacQ8C9wGlsNlgdMM8zQrqtYlSerjcamw5D6SyEgV2dkWVbDKHgiFkMoWLgaKQC8trTojuVxa8DYAj4BPk1OzXgfwEnsJu7LwPh88zQ2joDUyJGKbWMncBO5z0rE+uYQWMTrX8TuKLNqV8DHgNOYnNq6zxd1vJzvK1a0vgcWEUBNvv+vW2OHwO+6v4/Lx1WaRdSEnm5NYV96MuvkMnywkqCv8aWWExiN1NrPs8M7duPA0MYrI2wD/g/ga+TPGrya8B+rO0w685rZ+M83wD1XF8syqYMlYABrLu5
+    A7gFuAv4U+AwMIFliLrIRT7a98e8/TgwRBQzdU+IYSPW4+jC2gtnsTUmVZE2qVPPt7g95xkiak5SBLiNtLAGcxO7K2+N5w3JNbUfG4aAlLSId1XDlXE+zwxraz9WDBE15W0L9zwjrK/9/5E+GwnNO/pSAAAAAElFTkSuQmCC
+    """
+    # #endif
+    
diff --git a/channels/shoutcast.png b/channels/shoutcast.png
deleted file mode 100644
index 8e9356a..0000000
Binary files a/channels/shoutcast.png and /dev/null differ
diff --git a/channels/shoutcast.py b/channels/shoutcast.py
index 67e6c57..0ef4181 100644
--- a/channels/shoutcast.py
+++ b/channels/shoutcast.py
@@ -1,22 +1,42 @@
-#
 # api: streamtuner2
 # title: Shoutcast.com
 # description: Primary list of shoutcast servers (now managed by radionomy).
 # type: channel
 # category: radio
-# priority: default
-# version: 1.5
-# depends: pq, re, http
 # author: Mario
 # original: Jean-Yves Lefort
+# version: 1.5
+# url: http://www.shoutcast.com/
+# config: -
+# priority: default
+# png:
+#   iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAelJREFUOI2NU0toE2EYnM12t2wLkhSXSIgEJMHFQ2naQ+kpoPYQoaXH3gRFsegloUhRQTyU2oOgggQUzzlEQomIBzU+EHooBIol0cOGLqFFFiJ5SB5skvFU6ebRduA7/DAz
+#   /PM9BJLoh3Q6zVQqBZfLhXq9jlAohHA4LHTzhvqJ2+02c7kcgsEgfD4fRFFEPp+HZVmUJEk41kAURcHv99Pj8cAwDGiaBkVR0C0GAJDsW7VajYVCgYlEguVymZZlsVKpcG1tlYd5fX8AAIqiCF6vF6VSibIsI5lMYvvDE1xymwDu/ec5BhkcIJPJIHJzFqf372P1cgMf
+#   f46cLIKu61yJXufr5VO0voyzEZ/k8sI4s9ns0RFarRZjL56inIshekWGenYS6IzhR9PCntRBIBCw8XsiFItFNLMxPJgfwVjDi4Y8g2b9DILaMKZGd2Ca5tEGiqJg2xjF200H6J+AvKtjeG8T3998xW5nAk6n08bviSBJEqhewLlpN4bMHfwxfuH5J8J98SGerS/B4XDY
+#   d+FwQ6rVKm8vXeP++6vku2lu3FEZubFIXdc5qNm2x93ILZobszRfaYwuaIzH4wOFfafwt7CFb59/Y0uYx8rLR1BVtXd1u2AzCMwsQg6cx+O5uWOFBxAGnfNJ8Q/z/DNTtgbnsgAAAABJRU5ErkJggg==
+# depends: re, ahttp
 #
 # Shoutcast is a server software for audio streaming. It automatically spools
-# station information on shoutcast.com
-# It has been aquired by Radionomy in 2014, since then significant changes
-# took place. The former YP got deprecated, now seemingly undeprecated.
+# station information on shoutcast.com, which today lists over 60000 radios.
 #
-#   http://wiki.winamp.com/wiki/SHOUTcast_Radio_Directory_API 
+# It has been aquired by Radionomy in 2014. Since then significant changes
+# took place. The former yellow pages API got deprecated. Streamtuner2 now
+# utilizes the AJAX interface for speedy playlist discovery
 #
+
+
+import ahttp
+from json import loads as json_decode
+import re
+from config import *
+from channels import *
+import channels
+
+
+
+# SHOUTcast data module
+#
+# Former API doc: http://wiki.winamp.com/wiki/SHOUTcast_Radio_Directory_API 
 # But neither their Wiki nor Bulletin Board provide concrete information on
 # the eligibility of open source desktop apps for an authhash.
 #
@@ -28,41 +48,16 @@
 # We do need a catmap now too, but that's easy to aquire and will be kept
 # within the cache dirs.
 #
-#
-#
-
-import ahttp as http
-from json import loads as json_decode
-import re
-from config import conf, __print__, dbg
-from pq import pq
-#from channels import *    # works everywhere but in this plugin(???!)
-import channels
-from compat2and3 import urllib
-
-
-
-# SHOUTcast data module                                          ----------------------------------------
 class shoutcast(channels.ChannelPlugin):
 
-    # desc
-    api = "streamtuner2"
-    module = "shoutcast"
-    title = "SHOUTcast"
-    homepage = "http://www.shoutcast.com/" 
+    # attrs
     base_url = "http://shoutcast.com/"
-    listformat = "audio/x-scpls"
-
-    # settings
-    config = [
-    ]
+    listformat = "pls"
+    has_search = False
     
     # categories
     categories = []
     catmap = {"Choral": 35, "Winter": 275, "JROCK": 306, "Motown": 237, "Political": 290, "Tango": 192, "Ska": 22, "Comedy": 283, "Decades": 212, "European": 143, "Reggaeton": 189, "Islamic": 307, "Freestyle": 114, "French": 145, "Western": 53, "Dancepunk": 6, "News": 287, "Xtreme": 23, "Bollywood": 138, "Celtic": 141, "Kids": 278, "Filipino": 144, "Hanukkah": 270, "Greek": 146, "Punk": 21, "Spiritual": 211, "Industrial": 14, "Baroque": 33, "Talk": 282, "JPOP": 227, "Scanner": 291, "Mediterranean": 154, "Swing": 174, "Themes": 89, "IDM": 75, "40s": 214, "Funk": 236, "Rap": 110, "House": 74, "Educational": 285, "Caribbean": 140, "Misc": 295, "30s": 213, "Anniversary": 266, "Sports": 293, "International": 134, "Tribute": 107, "Piano": 41, "Romantic": 42, "90s": 219, "Latin": 177, "Grunge": 10, "Dubstep": 312, "Government": 286, "Country": 44, "Salsa": 191, "Hardcore": 11, "Afrikaans": 309, "Downtempo": 69, "Merengue": 187, "Psychedelic": 260, "Female": 95, "Bop": 167, "Tribal": 80, "Metal": 195, "70s": 217, "Tejano": 193, "Exotica": 55, "Anime": 277, "BlogTalk": 296, "African": 135, "Patriotic": 101, "Blues": 24, "Turntablism": 119, "Chinese": 142, "Garage": 72, "Dance": 66, "Valentine": 273, "Barbershop": 222, "Alternative": 1, "Technology": 294, "Folk": 82, "Klezmer": 152, "Samba": 315, "Turkish": 305, "Trance": 79, "Dub": 245, "Rock": 250, "Polka": 59, "Modern": 39, "Lounge": 57, "Indian": 149, "Hindi": 148, "Brazilian": 139, "Eclectic": 93, "Korean": 153, "Creole": 316, "Dancehall": 244, "Surf": 264, "Reggae": 242, "Goth": 9, "Oldies": 226, "Zouk": 162, "Environmental": 207, "Techno": 78, "Adult": 90, "Rockabilly": 262, "Wedding": 274, "Russian": 157, "Sexy": 104, "Chill": 92, "Opera": 40, "Emo": 8, "Experimental": 94, "Showtunes": 280, "Breakbeat": 65, "Jungle": 76, "Soundtracks": 276, "LoFi": 15, "Metalcore": 202, "Bachata": 178, "Kwanzaa": 272, "Banda": 179, "Americana": 46, "Classical": 32, "German": 302, "Tamil": 160, "Bluegrass": 47, "Halloween": 269, "College": 300, "Ambient": 63, "Birthday": 267, "Meditation": 210, "Electronic": 61, "50s": 215, "Chamber": 34, "Heartache": 96, "Britpop": 3, "Soca": 158, "Grindcore": 199, "Reality": 103, "00s": 303, "Symphony": 43, "Pop": 220, "Ranchera": 188, "Electro": 71, "Christmas": 268, "Christian": 123, "Progressive": 77, "Jazz": 163, "Trippy": 108, "Instrumental": 97, "Tropicalia": 194, "Fusion": 170, "Healing": 209, "Glam": 255, "80s": 218, "KPOP": 308, "Worldbeat": 161, "Mixtapes": 117, "60s": 216, "Mariachi": 186, "Soul": 240, "Cumbia": 181, "Inspirational": 122, "Impressionist": 38, "Gospel": 129, "Disco": 68, "Arabic": 136, "Idols": 225, "Ragga": 247, "Demo": 67, "LGBT": 98, "Honeymoon": 271, "Japanese": 150, "Community": 284, "Weather": 317, "Asian": 137, "Hebrew": 151, "Flamenco": 314, "Shuffle": 105}
-    current = ""
-    default = "Alternative"
-    empty = ""
     
     # redefine
     streams = {}
@@ -71,8 +66,8 @@ class shoutcast(channels.ChannelPlugin):
     # Extracts the category list from www.shoutcast.com,
     # stores a catmap (title => id)
     def update_categories(self):
-        html = http.get(self.base_url)
-        #__print__( dbg.DATA, html )
+        html = ahttp.get(self.base_url)
+        #log.DATA( html )
         self.categories = []
         
         # Genre list in sidebar
@@ -90,14 +85,16 @@ class shoutcast(channels.ChannelPlugin):
                 self.categories.append(current)
             else:
                 current.append(title)
-        self.save()
 
+        # .categories/.catmap get saved by reload_categories()
+        pass
+        
 
     # downloads stream list from shoutcast for given category
     def update_streams(self, cat):
 
         if (cat not in self.catmap):
-            __print__( dbg.ERR, "nocat" )
+            log.ERR( "Category not in known map.", cat )
             return []
         id = self.catmap[cat]
 
@@ -105,12 +102,17 @@ class shoutcast(channels.ChannelPlugin):
         url = "http://www.shoutcast.com/Home/BrowseByGenre"
         params = { "genrename": cat }
         referer = None
-        json = http.get(url, params=params, referer=referer, post=1, ajax=1)
+        try:
+            json = ahttp.get(url, params=params, referer=referer, post=1, ajax=1)
+            json = json_decode(json)
+        except:
+            log.ERR("HTTP request or JSON decoding failed. Outdated python/requests perhaps.")
+            return []
         self.parent.status(0.75)
 
         # remap JSON
         entries = []
-        for e in json_decode(json):
+        for e in json:
             entries.append({
                 "id": int(e.get("ID", 0)),
                 "genre": str(e.get("Genre", "")),
@@ -123,17 +125,6 @@ class shoutcast(channels.ChannelPlugin):
                 "format": "audio/mpeg"
             })
 
-        #__print__(dbg.DATA, entries)
+        #log.DATA(entries)
         return entries
 
-
-    # saves .streams and .catmap
-    def save(self):
-        channels.ChannelPlugin.save(self)
-        conf.save("cache/catmap_" + self.module, self.catmap)
-
-    # read previous channel/stream data, if there is any
-    def cache(self):
-        channels.ChannelPlugin.cache(self)
-        self.catmap = conf.load("cache/catmap_" + self.module) or {}
-
diff --git a/channels/somafm.py b/channels/somafm.py
new file mode 100644
index 0000000..ac23fe3
--- /dev/null
+++ b/channels/somafm.py
@@ -0,0 +1,110 @@
+# encoding: UTF-8
+# api: streamtuner2
+# title: SomaFM
+# description: Alternative radio, entirely community sponsored and non-advertisey.
+# version: 0.9
+# type: channel
+# category: radio
+# url: http://somafm.com/
+# config:
+#   { name: somafm_bitrate, value: 64, type: select, select: "130=AAC → 128 kbit/s|64=AAC → 64 kbit/s|32=AAC → 32 kbit/s|0=MP3 → 128 kbit/s|56=MP3 → 56 kbit/s|24=MP3 → 24 kbit/s", description: "Most streams are accessible in different bitrates." }
+# priority: extra
+# png:
+#    iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAA3NCSVQICAjb4U/gAAACpUlEQVQokQXBS28bVRQA4HvOfcwd2xNP7caFtgiqkoglKyhCiFZiUSGxQcACdkis2SGx5lcgumFXhNoNGwpISGUZMKJSGtooStM4teOJXeOZufO4j8P3wZeff7r3z32tRaL7g/7Ikq/qXKEI4BZ5HnzYiJQn
+#    50IAxuIkFe9/+NXDP+9JVr++tX3jk2/I29lkV0fd0DY741+z7PC9dz7Ki9XZ8kSrDudKSIBExx3ulVJJL5UcvVkoob0zm8Nzoc0uXnq1Mcuko9NewnkkgvNaMQVCQWirugz4w88/nUyPPrh+M9a9SGAIbVXWPlSmEkIxUeanArnkrLbNepX9vffw2x+/Z2Rni7PP3n0rjuLkxf7R8b+tMVYwaKzIJvuc
+#    WkRE1j7dvX/77u0QcKOz8eDxnjk+2L6QDtLfpARXGssKEcVYtQwYcsCuiP74a7zzaB8Yy03DibXWjg+nv/9yz9fsP+NO182ybIRrV5aIA5ONOTw65oJrJQhCX8sYsSH+ZDopns8coyZU3Em8NNrUinMZT56vD+azWAkF1AUAS8vWrwKtnTuYZ97Zui7XdYkXh30GUqDczcPl0ebLg0HlnQZERkikOGFX
+#    GuCmbvOynq8KzMoakaNKFMY3r11LtbKOeQYKMCZ4+3xyNWbzower9Vyx0JOI+4/GRWvLgq4Mo1Haq6pcCXBAAtl5bj9+I7313ddfvHkuNpkpKxaskI1Z1rp4NqWtV2ZPT04sAeeFBy4Di8W4rLaeHe+sxJ395aqcXhiN4LXtq6fZGSAQV0gEzMed/mJxmiYi1mIyMz1WV6itZ8G1/TTlqHRZFGVpgrcI
+#    GIL3ntq2aRpXGAdEXkgOgMgiKTqdSLz0wqDo8UAEwIjIGF/VNun2iBEAU0pcHkYdBdaT9bA5TP8H6318x/9OSuUAAAAASUVORK5CYII=
+#
+# SomaFM is a non-commercial radio station project.
+#
+# Uses a static internal station list. Stream URLs are
+# only rewritten depending on bitrate configuration.
+#
+# Note that only 64bit AAC and 128bit MP3 are guaranteed
+# to be available. Most stations offer different bitrates,
+# but not all of them!
+
+
+from config import *
+from channels import *
+import re
+import ahttp
+
+# TuneIn radio directory
+class somafm (ChannelPlugin):
+
+    # description
+    has_search = False
+    listformat = "pls"
+    audioformat = "audio/aac"
+    titles = dict(listeners=False, playing="Description")
+
+    categories = ["listen", "support"]
+    streams = {
+    "listen": [
+        {'genre': 'ambient', 'listeners': 2187, 'title': 'Drone Zone', 'url': 'http://somafm.com/dronezone64.pls', 'bitrate': 64, 'homepage': 'http://somafm.com/dronezone/', 'playing': 'Served best chilled, safe with most medications. Atmospheric textures with minimal beats.'},
+        {'genre': 'alternative', 'listeners': 420, 'title': 'Indie Pop Rocks!', 'url': 'http://somafm.com/indiepop64.pls', 'bitrate': 64, 'homepage': 'http://somafm.com/indiepop/', 'playing': 'New and classic favorite indie pop tracks.'},
+        {'genre': 'electronica', 'listeners': 380, 'title': 'Lush', 'url': 'http://somafm.com/lush64.pls', 'bitrate': 64, 'homepage': 'http://somafm.com/lush/', 'playing': 'Sensuous and mellow vocals, mostly female, with an electronic influence.'},
+        {'genre': 'lounge', 'listeners': 377, 'title': 'Secret Agent', 'url': 'http://somafm.com/secretagent64.pls', 'bitrate': 64, 'homepage': 'http://somafm.com/secretagent/', 'playing': 'The soundtrack for your stylish, mysterious, dangerous life. For Spies and PIs too!'},
+        {'genre': 'electronica', 'listeners': 375, 'title': 'Space Station Soma', 'url': 'http://somafm.com/spacestation64.pls', 'bitrate': 64, 'homepage': 'http://somafm.com/spacestation/', 'playing': 'Tune in, turn on, space out. Spaced-out ambient and mid-tempo electronica.'},
+        {'genre': 'americana', 'listeners': 337, 'title': 'Boot Liquor', 'url': 'http://somafm.com/bootliquor64.pls', 'bitrate': 64, 'homepage': 'http://somafm.com/bootliquor/', 'playing': 'Americana Roots music for Cowhands, Cowpokes and Cowtippers'},
+        {'genre': 'ambient', 'listeners': 165, 'title': 'Deep Space One', 'url': 'http://somafm.com/deepspaceone64.pls', 'bitrate': 64, 'homepage': 'http://somafm.com/deepspaceone/', 'playing': 'Deep ambient electronic, experimental and space music. A soundtrack for inner and outer space exploration.'},
+        {'genre': 'electronica', 'listeners': 149, 'title': 'Beat Blender', 'url': 'http://somafm.com/beatblender64.pls', 'bitrate': 64, 'homepage': 'http://somafm.com/beatblender/', 'playing': 'A late night blend of deep-house and downtempo chill.'},
+        {'genre': 'alternative', 'listeners': 148, 'title': 'PopTron', 'url': 'http://somafm.com/poptron64.pls', 'bitrate': 64, 'homepage': 'http://somafm.com/poptron/', 'playing': 'Electropop and indie dance rock with sparkle and pop.'},
+        {'genre': 'world', 'listeners': 121, 'title': 'Suburbs of Goa', 'url': 'http://somafm.com/suburbsofgoa64.pls', 'bitrate': 64, 'homepage': 'http://somafm.com/suburbsofgoa/', 'playing': 'Desi-influenced Asian world beats and beyond.'},
+        {'genre': 'lounge', 'listeners': 112, 'title': 'Illinois Street Lounge', 'url': 'http://somafm.com/illstreet64.pls', 'bitrate': 64, 'homepage': 'http://somafm.com/illstreet/', 'playing': 'Classic bachelor pad, playful exotica and vintage music of tomorrow.'},
+        {'genre': 'jazz', 'listeners': 111, 'title': 'Sonic Universe', 'url': 'http://somafm.com/sonicuniverse64.pls', 'bitrate': 64, 'homepage': 'http://somafm.com/sonicuniverse/', 'playing': 'Transcending the world of jazz with eclectic, avant-garde takes on tradition.'},
+        {'genre': 'alternative', 'listeners': 92, 'title': 'BAGeL Radio', 'url': 'http://somafm.com/bagel64.pls', 'bitrate': 64, 'homepage': 'http://somafm.com/bagel/', 'playing': 'What alternative rock radio should sound like.'},
+        {'genre': 'electronica', 'listeners': 89, 'title': 'The Trip', 'url': 'http://somafm.com/thetrip64.pls', 'bitrate': 64, 'homepage': 'http://somafm.com/thetrip/', 'playing': 'Progressive house / trance. Tip top tunes.'},
+        {'genre': 'electronica', 'listeners': 87, 'title': 'Dub Step Beyond', 'url': 'http://somafm.com/dubstep64.pls', 'bitrate': 64, 'homepage': 'http://somafm.com/dubstep/', 'playing': 'Dubstep, Dub and Deep Bass. May damage speakers at high volume.'},
+        {'genre': 'electronica', 'listeners': 77, 'title': 'cliqhop idm', 'url': 'http://somafm.com/cliqhop64.pls', 'bitrate': 64, 'homepage': 'http://somafm.com/cliqhop/', 'playing': u"Blips'n'beeps backed mostly w/beats. Intelligent Dance Music."},
+        {'genre': 'alternative', 'listeners': 51, 'title': 'Seven Inch Soul', 'url': 'http://somafm.com/7soul64.pls', 'bitrate': 64, 'homepage': 'http://somafm.com/7soul/', 'playing': 'Vintage soul tracks from the original 45 RPM vinyl.'},
+        {'genre': 'eclectic', 'listeners': 38, 'title': 'Black Rock FM', 'url': 'http://somafm.com/brfm64.pls', 'bitrate': 64, 'homepage': 'http://somafm.com/brfm/', 'playing': 'From the Playa to the world, for the 2014 Burning Man festival.'},
+        {'genre': 'eclectic', 'listeners': 30, 'title': 'Covers', 'url': 'http://somafm.com/covers64.pls', 'bitrate': 64, 'homepage': 'http://somafm.com/covers/', 'playing': u"Just covers. Songs you know by artists you don't. We've got you covered."},
+        {'genre': 'experimental', 'listeners': 14, 'title': 'Earwaves', 'url': 'http://somafm.com/earwaves64.pls', 'bitrate': 64, 'homepage': 'http://somafm.com/earwaves/', 'playing': 'Spanning the history of electronic and experimental music from the early pioneers to the latest innovators.'}
+    ],
+    "support": [
+        {'genre': 'faq', 'listeners': 6398, 'title': 'Commercial-free, listener supported radio station.', 'url': 'https://youtube.com/v/DAjSPgRPhzw', 'format': 'video/youtube', 'bitrate': 256, 'homepage': 'http://somafm.com/support/', 'playing': 'Unique among music stations, SomaFM depends on community donations to operate. PS: SomaFM Loves You!!'}
+    ]}
+
+    # All static
+    def update_categories(self):
+        pass
+
+    # Just update entries with bitrate setting
+    def update_streams(self, cat, search=None):
+        if not cat in self.categories:
+            return
+        
+        # Just reuse
+        rows = self.streams[cat] # or self._real_parse()
+        
+        # Overwrite bitrate
+        bitreal = int(conf.somafm_bitrate) or 128
+        biturl = int(conf.somafm_bitrate) or ""
+        for i,row in enumerate(rows):
+            rows[i]["format"] = "audio/mp3" if bitreal in (128,56,24) else "audio/aac"
+            rows[i]["bitrate"] = int(bitreal)
+            rows[i]["url"] = re.sub("\d*\.pls$", "%s.pls" % biturl, row["url"])
+        
+        # Resend stream list
+        return rows
+
+    # Disabled at runtime.
+    def _real_parse(self):
+        html = ahttp.get("http://somafm.com/listen/")
+        ls = re.findall(r"""
+            Listeners:\s(\d+) .*?
+            <!-- .*? \((\w+)\)\s*--> .*?
+            <h3>(.+?)</h3> .*?
+            <p.*?>(.+?)</p> .*?
+            href="(http://somafm.com/.+?.pls)" .*?
+        """, html, re.X|re.S)
+        rows = [
+           dict(genre=g, title=t, playing=p, url=u, listeners=int(l), bitrate=128, homepage=re.sub("\d*\.pls$", "/", u))
+            for l,g,t,p,u in ls
+        ]
+        #log.DATA(rows)
+        return rows
+        
diff --git a/channels/streamedit.py b/channels/streamedit.py
new file mode 100644
index 0000000..19d0245
--- /dev/null
+++ b/channels/streamedit.py
@@ -0,0 +1,47 @@
+# api: streamtuner2
+# title: Stream entry editor
+# description: Allows to inspect and modify station/stream entries.
+# version: 0.5
+# type: feature
+# category: ui
+# config: -
+# priority: core
+# 
+# Editing dialog for stream entries. Available in
+# the context and main menu. Most useful for
+# changing bookmarks, or even creating new ones.
+#
+
+from uikit import *
+import channels
+from config import *
+from copy import copy
+
+
+# aux win: stream data editing dialog
+class streamedit (AuxiliaryWindow):
+
+    # show stream data editing dialog
+    def open(self, mw):
+        self.main.configwin.load_config(self.main.row(), "streamedit_")
+        self.win_streamedit.show_all()
+
+    # copy widget contents to stream
+    def save(self, w):
+        self.main.configwin.save_config(self.main.row(), "streamedit_")
+        self.main.channel().save()
+        self.cancel(w)
+
+    # add a new list entry, update window
+    def new(self, w):
+        s = self.main.channel().stations()
+        s.append({"title":"new", "url":"", "format":"audio/mpeg", "genre":"", "listeners":1});
+        self.main.channel().switch() # update display
+        selfmain.channel().gtk_list.get_selection().select_path(str(len(s)-1)); # set cursor to last row
+        self.open(w)
+
+    # hide window
+    def cancel(self, *w):
+        self.win_streamedit.hide()
+        return True
+
diff --git a/channels/surfmusik.png b/channels/surfmusik.png
deleted file mode 100644
index 18975a0..0000000
Binary files a/channels/surfmusik.png and /dev/null differ
diff --git a/channels/surfmusik.py b/channels/surfmusik.py
index 8414d6c..bbb4038 100644
--- a/channels/surfmusik.py
+++ b/channels/surfmusik.py
@@ -1,20 +1,30 @@
 # encoding: UTF-8
 # api: streamtuner2
-# title: SurfMusik
+# title: SurfMusic
 # description: User collection of streams categorized by region and genre.
+# author: gorgonz123
 # version: 0.5
 # type: channel
 # category: radio
-# author: gorgonz123
+# config:
+#   { name: surfmusik_lang,  value: EN,  type: select,  select: "DE=German|EN=English",  description: "Switching to a new category title language requires reloading the category tree.",  category: language  }
+# priority: default
 # source: http://forum.ubuntuusers.de/topic/streamtuner2-zwei-internet-radios-anhoeren-au/3/
+# png:
+#   iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAA3NCSVQICAjb4U/gAAACmklEQVQokWXSy0tUYRgG8Pe7zBnzWk06RFGhoNAmBJuBbFDcNEoK4k5cxUQbYQYZBtok2L7NuGrpIlSkQNI004g8Ss1GuqAILjSkmNKD45k53+XM97aQpOj3FzzPwwNKKfkv
+#   ISVKiYjT6+uJx48Lvl/WWgihlFJKgfyPL+UPKWefPPlaXz/JefbRI4kohZBSKqUoAJA/DKL0PMX52vh41ciIF48Xurtrx8ZezM5almWMAURKCDlJpbUGxGAg8FNKnJ7Ww8NkYqKyWLxLSGB5uQRAjQFCKAAwxjjnjDFKKTAW0nrm4sVgJvMplepdWfkFUBePVwAgIb7v
+#   c0SklBrEsu8HOWfB4BfHqXGcbwMD8Vwux5gaHb0djxutgTGKCEopz/PcQsFTal+ImZmZifb2XYBdgFex2OziYgHxdEetNUilpOdJxDXbnr5z5wPARij0oKXl1cuXRURELCvlFosnPYUQRHueDAZzT59eSyYLUr7u6fkYDr+37ZvXr19uaGhqbu7q6mptbdVaI6Lv+5Ra
+#   1tuFhWAqdcWYz/fuPa+qCjFWWy7Xnzv3bnU1nU53dnZms1lKqTEmEAjAMeJkOu0AfGxre7O/v72xoYTo6e7e2tpCxEwmAwA1NTV7e3vlclkIQSt9/0Yymevvt7a3ry4tVV66dCylYezw4GBnZ2dzc5NznslkwuGw1poQQoque6ai4oixQ9tumJr6VSjU1tU9XFo6ikaL
+#   +fzZ8+cTiURHR4fW2hhDKeUIIJRC191wnHwkEmtqutDY6H7/fn9oKBqNVldXA4AQglJKCAEAcBxHKTU3NwcAAHArFns2NdXb15fP540xpVKpVCqd/lIpRbTWAICI8/PzrutalmXb9uDgYCQS8TyPcw5/IYT8BpJoukMEtogaAAAAAElFTkSuQmCC
 # recognizes: max_streams
+# url: http://surfmusic.de/
 #
 # This plugin comes in German (SurfMusik) and English (SurfMusic) variations.
 # It provides a vast collection of international stations and genres.
 # While it's not an open source project, most entries are user contributed.
 #
 # They do have a Windows client, hencewhy it's even more important for
-# streamtuner2 to support it on other plattforms.
+# streamtuner2 to support it on other platforms.
 #
 # TV stations don't seem to work mostly. And loading the webtv/ pages would
 # be somewhat slow (for querying the actual mms:// streams).
@@ -23,8 +33,8 @@
 #
 
 import re
-import ahttp as http
-from config import conf, dbg, __print__
+import ahttp
+from config import *
 from channels import *
 
 
@@ -32,37 +42,25 @@ from channels import *
 # Surfmusik sharing site
 class surfmusik (ChannelPlugin):
 
-    # description
-    title = "SurfMusik"
+    # module attributes
     module = "surfmusik"
-    homepage = "http://www.surfmusik.de/"
-    listformat = "audio/x-scpls"
-
+    listformat = "m3u"
+    has_search = False
     lang = "DE"   # last configured categories
     base = {
        "DE": ("http://www.surfmusik.de/", "genre/", "land/"),
        "EN": ("http://www.surfmusic.de/", "format/", "country/"),
     }
-
     categories = []
     titles = dict( genre="Genre", title="Station", playing="Location", bitrate=False, listeners=False )
- 
-    config = [
-        {
-            "name": "surfmusik_lang",
-            "value": "EN",
-            "type": "select",
-            "select":"DE=German|EN=English",
-            "description": "Switching to a new category title language requires reloading the category tree.",
-            "category": "language",
-        }
-    ]    
-    
+
     
     # Set channel title
     def __init__(self, parent=None):
-        self.title = ("SurfMusik", "SurfMusic")[conf.get("surfmusik_lang", "EN") == "EN"]
         ChannelPlugin.__init__(self, parent)
+        # title updating is a workaround, because the fixed .meta attribute are read first
+        self.title = ("SurfMusik", "SurfMusic")[conf.get("surfmusik_lang", "EN") == "EN"]
+        self.meta["title"] = self.title
 
 
     # just a static list for now
@@ -98,7 +96,7 @@ class surfmusik (ChannelPlugin):
         for cat in cats[lang]:
             r.append(cat)
             if map.get(cat):
-                subcats = rx_links.findall( http.get(base_url + map[cat]) )
+                subcats = rx_links.findall( ahttp.get(base_url + map[cat]) )
                 subcats = [x.replace("+", " ").title() for x in subcats]
                 r.append(sorted(subcats))
 
@@ -116,7 +114,7 @@ class surfmusik (ChannelPlugin):
         
         # placeholder category
         if cat in ["Genres"]:
-            path = None
+            return self.placeholder
         # separate
         elif cat in ["Poli", "Flug"]:
             path = ""
@@ -133,7 +131,7 @@ class surfmusik (ChannelPlugin):
         
         if path is not None:
             ucat = cat.replace(" ", "+").lower()
-            html = http.get(base_url + path + ucat + ".html")
+            html = ahttp.get(base_url + path + ucat + ".html")
             html = re.sub("&#x?\d+;", "", html)
         
             rx_radio = re.compile(r"""
@@ -152,7 +150,7 @@ class surfmusik (ChannelPlugin):
                 
                 # find mms:// for webtv stations
                 if is_tv:
-                    m = rx_video.search(http.get(url))
+                    m = rx_video.search(ahttp.get(url))
                     if m:
                         url = m.group(1)
                 # just convert /radio/ into /m3u/ link
diff --git a/channels/timer.py b/channels/timer.py
index e93f558..6f96d36 100644
--- a/channels/timer.py
+++ b/channels/timer.py
@@ -3,28 +3,29 @@
 # title: Recording timer
 # description: Schedules play/record events for bookmarked radio stations.
 # type: feature
-# category: ui
+# category: hook
 # depends: kronos
-# version: 0.5
+# version: 0.6
+# config: -
 # priority: optional
 # support: unsupported
 #
-# Okay, while programming this, I missed the broadcast I wanted to hear. Again(!)
-# But still this is a useful extension, as it allows recording and playing specific
-# stations at a programmed time and interval. It accepts a natural language time
-# string when registering a stream. (Via streams menu > extension > add timer)
+# Provides an internal timer, to configure recording and playback times/intervals
+# for stations. It accepts a natural language time string when registering a stream.
+#
+# Context menu > Extension > Add timer
 #
 # Programmed events are visible in "timer" under the "bookmarks" channel. Times
 # are stored in the description field, and can thus be edited. However, after editing
-# times manually, streamtuner2 must be restarted for the changes to take effect.
+# times manually, streamtuner2 must be restarted for any changes to take effect.
 #
 
 
-from config import __print__, dbg
+from config import *
 from channels import *
-import kronos
-from mygtk import mygtk
-from action import action
+import bundle.kronos as kronos  # Doesn't work with Python3
+from uikit import uikit
+import action
 import copy
 import re
 
@@ -35,31 +36,27 @@ class timer:
 
     # plugin info
     module = "timer"
-    title = "Timer"
-    
+    meta = plugin_meta()
     
     # configuration settings
-    config = [
-    ]
     timefield = "playing"
     
-    
     # kronos scheduler list
     sched = None
     
     
     
-    
     # prepare gui
     def __init__(self, parent):
-      if parent:
+        if not parent:
+            return
           
         # keep reference to main window
         self.parent = parent
         self.bookmarks = parent.bookmarks
         
         # add menu
-        mygtk.add_menu(self.parent.extensions, "Add timer for station", self.edit_timer)
+        uikit.add_menu([parent.streammenu, parent.streamactions], "Add timer for station", self.edit_timer, insert=4)
         
         # target channel
         if not self.bookmarks.streams.get("timer"):
@@ -68,16 +65,18 @@ class timer:
         self.streams = self.bookmarks.streams["timer"]
         
         # widgets
-        parent.add_signals.update({
-            "timer_ok": self.add_timer,
-            "timer_cancel": lambda w,*a: self.parent.timer_dialog.hide() or 1,
+        uikit.add_signals(parent, {
+            ("timer_ok", "clicked"): self.add_timer,
+            ("timer_cancel", "clicked"): self.hide,
+            ("timer_dialog", "close"): self.hide,
+            ("timer_dialog", "delete-event"): self.hide,
         })
         
         # prepare spool
         self.sched = kronos.ThreadedScheduler()
         for row in self.streams:
             try: self.queue(row)
-            except Exception as e: __print__(dbg.ERR, "queuing error", e)
+            except Exception as e: log.ERR("queuing error", e)
         self.sched.start()
 
 
@@ -86,6 +85,10 @@ class timer:
         self.parent.timer_dialog.show()
         self.parent.timer_value.set_text("Fri,Sat 20:00-21:00 play")
 
+    # done        
+    def hide(self, *w):
+        return self.parent.timer_dialog.hide()
+
     # close dialog,get data
     def add_timer(self, *w):
         self.parent.timer_dialog.hide()
@@ -93,7 +96,7 @@ class timer:
         row = copy.copy(row)
         
         # add data
-        row["listformat"] = "url/direct" #self.parent.channel().listformat
+        row["listformat"] = "href" #self.parent.channel().listformat
         if row.get(self.timefield):
             row["title"] = row["title"] + " -- " + row[self.timefield]
         row[self.timefield] = self.parent.timer_value.get_text()
@@ -115,7 +118,7 @@ class timer:
     
         # chk
         if not row.get(self.timefield) or not row.get("url"):
-            #print("NO TIME DATA", row)
+            #log.DATA("NO TIME DATA", row)
             return
     
         # extract timing parameters
@@ -133,7 +136,7 @@ class timer:
         # add
         task = self.sched.add_daytime_task(action_method, activity, days, None, time, kronos.method.threaded, [row], {})
 
-        #__print__( "queue",  act, self.sched, (action_method, act, days, None, time, kronos.method.threaded, [row], {}), task.get_schedule_time(True) )
+        #log.QUEUE( act, self.sched, (action_method, act, days, None, time, kronos.method.threaded, [row], {}), task.get_schedule_time(True) )
     
     
     
@@ -168,12 +171,12 @@ class timer:
         action.play(
             url = row["url"],
             audioformat = row.get("format","audio/mpeg"), 
-            listformat = row.get("listformat","url/direct"),
+            listformat = row.get("listformat","href"),
         )
 
     # action wrapper
     def record(self, row, *args, **kwargs):
-        #print("TIMED RECORD")
+        #log.TIMER("TIMED RECORD", *args)
         
         # extra params
         duration = self.duration(row.get(self.timefield))
@@ -186,11 +189,11 @@ class timer:
         action.record(
             url = row["url"],
             audioformat = row.get("format","audio/mpeg"), 
-            listformat = row.get("listformat","url/direct"),
+            listformat = row.get("listformat","href"),
             append = append,
         )
     
     def test(self, row, *args, **kwargs):
-        print("TEST KRONOS", row)
+        log.TEST("KRONOS", row)
 
 
diff --git a/channels/tunein.py b/channels/tunein.py
new file mode 100644
index 0000000..a6c75c1
--- /dev/null
+++ b/channels/tunein.py
@@ -0,0 +1,95 @@
+# encoding: UTF-8
+# api: streamtuner2
+# title: TuneIn
+# description: Online Radio, Broadcasts, Podcasts per RadioTime API
+# version: 0.2
+# type: channel
+# category: radio
+# url: http://tunein.com/
+# config:
+#   { name: radiotime_group, value: music, type: select, select: music|genres, description: Catalogue type as categories. (→ Reload Category Tree) }
+# priority: default
+# png:
+#   iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAbpJREFUOI2Nkk9PE1EUxc+ZuTMIaP+KqClxx4dA0jRVgwFM/JPIRv0CunDnxsQ1G4NGvgD7LkiExG5IDHFhDDEmblwRQJG2AVuwMNOZd91QAuUR
+#   e1bvnnfeLzf3PsKioq6Dtf25xsq3Kdf3gkxh9OUis29tWcdm9iPxuvHl62MNQz/a+3uhVl56M647d7sGHOxU8hpFR7Uag9+l+UddAySdWuv0soWR710DXOj93mtDWxQBRTBwq7AcZfte2bK0mQCQ11X0I5lzEW2858BZMXBkZWkGqk8Atk7c
+#   mBhqVCWV2E0MDz9dYLo8ptWbwdrP2aC6nSYhIOck2PiVdDwvfXxox9WqVAcPVtc/jOkm68uf56M/9T4AoAhMq5V06NCc2d+hNAzhwBttPz5q36FxchOT0xT5HwMEvRO1CHITk9MEgHHdfED4z4La9nmQqiY2dNywHY6b++d6h65OhVvVElw3
+#   7rmY2VOE7xZ5pWTdwh2t52NEzwEeQtgTIXhR5uUfnVlr783m7vXGx0/32oOlCC7dLs4COAWwfiTH9+PTrrFnbWan6LkA/HLXAFckaJ+9bKYyeKP4cIEpK/wffVOh5FvT8j8AAAAASUVORK5CYII=
+# documentation: http://opml.radiotime.com/
+#
+# RadioTime API uses OPML for station/podcast entries.
+#
+# Only radio listings are queried for now. But there are
+# heaps more talk and local show entries, etc. (Would require
+# more deeply nested category tree.)
+#
+
+
+import re
+import json
+from config import *
+from channels import *
+import ahttp
+from xml.etree import ElementTree
+
+
+# TuneIn radio directory
+class tunein (ChannelPlugin):
+
+    # control flags
+    has_search = False
+    listformat = "pls"
+    titles = dict(listeners=False)
+    base = "http://opml.radiotime.com/"
+
+    categories = ["local", "60's", "70's", "80's", "90's", "Adult Contemporary", "Alternative Rock", "Ambient", "Bluegrass", "Blues", "Bollywood", "Children's Music", "Christmas", "Classic Hits", "Classic Rock", "Classical", "College Radio", "Country", "Decades", "Disco", "Easy Listening", "Eclectic", "Electronic", "Folk", "Hip Hop", "Indie", "Internet Only", "Jazz", "Live Music", "Oldies", "Polka", "Reggae", "Reggaeton", "Religious", "Rock", "Salsa", "Soul and R&B", "Spanish Music", "Specialty", "Tango", "Top 40/Pop", "World"]
+    catmap = {"60's": "g407", "Live Music": "g2778", "Children's Music": "c530749", "Polka": "g84", "Tango": "g3149", "Top 40/Pop": "c57943", "90's": "g2677", "Eclectic": "g78", "Decades": "c481372", "Christmas": "g375", "Reggae": "g85", "Reggaeton": "g2771", "Oldies": "c57947", "Jazz": "c57944", "Specialty": "c418831", "Hip Hop": "c57942", "College Radio": "c100000047", "Salsa": "g124", "Bollywood": "g2762", "70's": "g92", "Country": "c57940", "Classic Hits": "g2755", "Internet Only": "c417833", "Disco": "g385", "Rock": "c57951", "Soul and R&B": "c1367173", "Blues": "g106", "Classic Rock": "g54", "Alternative Rock": "c57936", "Adult Contemporary": "c57935", "Classical": "c57939", "World": "c57954", "Indie": "g2748", "Religious": "c57950", "Bluegrass": "g63", "Spanish Music": "c57945", "Easy Listening": "c10635888", "Ambient": "g2804", "80's": "g42", "Electronic": "c57941", "Folk": "g79"}
+    groupmap = {
+       "music":  "Browse.ashx?c=music",
+       "genres": "Describe.ashx?c=genres",
+    }
+
+
+    # Retrieve cat list and map
+    def update_categories(self):
+        self.categories = ["local"]
+        self.catmap = {}
+        # Only music for now
+        for row in self.api(self.groupmap[conf.radiotime_group]):
+            self.categories.append(row["text"])
+            self.catmap[row["text"]] = row["guide_id"]
+
+
+    # Just copy over stream URLs and station titles
+    def update_streams(self, cat, search=None):
+        r = []
+        # catmap only set for genres, not for category groups like "local"    
+        if search:
+            url = "Search.ashx?query=%s&formats=ogg,aac,mp3" % urlencode(search) 
+        elif cat in self.catmap and cat != "local":
+            url = "Browse.ashx?id=%s" % self.catmap[cat]
+        else:
+            url = "Browse.ashx?c=%s" % cat
+        # fetch
+        for row in self.api(url):
+          if "URL" in row and "bitrate" in row and "subtext" in row:
+            r.append({
+               "genre": "radio",
+               "title": row["text"],
+               "url": row["URL"],
+               "bitrate": int(row.get("bitrate", 0)),
+               "playing": row.get("subtext", ""),
+               "favicon": row.get("image", None),
+            })
+        return r
+
+
+    # Fetch OPML, convert outline elements to dicts
+    def api(self, method):
+        r = []
+        opml = ahttp.get(self.base + method)
+        x = ElementTree.fromstring(opml)
+        for outline in x.findall(".//outline"):
+            r.append(dict(outline.items()))
+        return r
+
+
diff --git a/channels/ubuntuusers.py b/channels/ubuntuusers.py
new file mode 100644
index 0000000..2866372
--- /dev/null
+++ b/channels/ubuntuusers.py
@@ -0,0 +1,90 @@
+# encoding: UTF-8
+# api: streamtuner2
+# title: UbuntuUsers
+# description: Static list of radio stations courtesy of the UbuntuUsers.de Wiki
+# version: 0.1
+# type: channel
+# category: radio
+# url: http://wiki.ubuntuusers.de/Internetradio/Stationen
+# png:
+#    iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACJVBMVEUAAACjeUWif2/CeiGhWTvUewuhQRjPeRCfRyK1hEeWYkynQkOJREW0Dw+TICC3DAyXRES3DAzXzMewhlOsahqtaxu3DAytaxu4DAytaxqtIiKqeTyaR0eokHKk
+#    h2SjayikZhmdbC+SdVaXVz2fQhufQxyhaVGjjYKsdjS2jmXBUSS2UimUXUaybBXCRA+MPx+vbR2+RhWLSCuhe0vBiEGrZUiDX0+TREWzP0CgQ0R1RUWcHByqFBSDKCifFxesMDGKUVGfFxfIsqng3tvBhz+khmDLdxCYYiDLdxGaYyKfFxfLdxGaYyKfFhbMdxCZYiCfNTW6gHzEjki+fCqdeEifZ2eWKSmVGhqTMTGXaWexkWWrbR+rbB2og1Oo
+#    mYbWfhDefwjQexHXRgnXRgrziAP/jQDvhAC7jV/YTBT3SAD3SADthAT5iADngAG8kmfRTBfxRADwRADEhjm4h0nGuay0fGW/YTnAZD21ODq6PT7BQ0S9QEG2OTq2PD3KBATSAADSAADRAADSAADSAADSAADNAwPUAADUAADPAwPPDA3QDg/QDxDNAwPVAADRAAC2SUmzjIWsf3CugXLVAADJAADBgH3Hm1/eiBveiBzVAADIAADAf3rMizb+iwD9
+#    iwDIAADAf3rMjDb8iwD7iwDNAwPVAADIAADAf3rMjDb7iwDOAwPXAADJAADBf3vMizb9iwD9jAC6EBC/CQm0ERLggArggAr///+cj9kUAAAAX3RSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAZGJiK1ZiYlkJps315xim5xim5xh0+rQNdPq0DabnGKbnGKbnGOcY5xjnGKbnGKbnGKbN9ecYQGRiYitWYmJZCevlG38AAAABYktH
+#    RLaqBwvxAAAAB3RJTUUH3wQMETciyGk1tQAAAHlJREFUGFd1jTESQUEQBbtnd+cXJxBwDiQSN3EwV5F+ZxC6hUAJlvIVJuya7ie48nWXOxVivtbRjaPRQWu6U4sBFaIMXSgGBEQ5Z2Zm1vr8qKaq9aXU/UT5avwCQG+E/gW0KWizheot39FUHT5Xjh5sBgjLbV9VT1ceE5sL4EiAe2YAAAAASUVORK5CYII=
+# config: -
+# priority: extra
+#
+# Short user-collected list of internet radio stations
+# on UbuntuUsers.de wiki. Only provides a single category,
+# but stations are grouped by country already.
+#
+
+
+import re
+from config import *
+from channels import *
+import ahttp
+import itertools
+
+
+# UU Wiki radio list
+class ubuntuusers (ChannelPlugin):
+
+    # description
+    has_search = False
+    listformat = "srv"
+    titles = dict(playing=False, listeners=False, bitrate=False)
+    base = {
+       "stations": "http://wiki.ubuntuusers.de/Internetradio/Stationen?action=export&format=raw",
+       "tv": "http://wiki.ubuntuusers.de/Internet-TV/Stationen?action=export&format=raw",
+    }
+    categories = ["stations", "tv"]
+
+
+    # Nope
+    def update_categories(self):
+        pass
+
+
+    # Fetches wiki page, extracts from raw markup.
+    # Which has a coherent formatting of entries like:
+    #
+    #   == Pi-Radio (Berlin) ==
+    #   [http://www.piradio.de] {de}
+    #   {{{
+    #   http://ice.rosebud-media.de:8000/88vier-ogg1.ogg
+    #   }}}
+    #
+    def update_streams(self, cat, search=None):
+
+        # fetch page
+        wiki = ahttp.get(self.base[cat])
+        f = "audio/mpeg" if cat == "stations" else "video/mp4"
+        
+        # split on headlines
+        r = []
+        for src in re.split("^==+", wiki, 0, re.M):
+            r += self.join(src, f)
+        return r
+
+
+    # Extract individual stations
+    def join(self, src, f):
+    
+        # regexp lists out, just one srv url per entry
+        ls = re.findall(r"""
+           ^\s*([\w\s.-]+)\s*==+\s+
+           (?: ^\[(http[^\s\]]+) .*? \{(\w+)\} )?
+           .*?
+           ^\{\{\{
+           .*?
+           (\w+://[^"'\s\}\)\]]+)
+        """, src, re.X|re.S|re.M)
+        
+        # pack into row list
+        return [
+           dict(genre=g, title=t, url=u, homepage=h, bitrate=0, listeners=0, format=f, listformat="href")
+           for t,h,g,u in ls
+        ]
+
diff --git a/channels/ui_cht.py b/channels/ui_cht.py
new file mode 100644
index 0000000..bfa576e
--- /dev/null
+++ b/channels/ui_cht.py
@@ -0,0 +1,31 @@
+# encoding: utf-8
+# title: Channel toolbar link
+# description: Shows current channel and a link to online service in toolbar.
+# version: 1.0
+# depends: streamtuner2 >= 2.1.9
+# type: feature
+# category: ui
+#
+# Reintroduces the channel/service link in the toolbar,
+# just like in streamtuner1.
+
+
+import re
+
+
+# Channel Homepage in Toolbar
+class ui_cht(object):
+    module = __name__
+
+    # Hook toolbar label
+    def __init__(self, parent):
+        self.label = parent.toolbar_link
+        parent.hooks["switch"].append(self.switchy)
+
+    # Update link label
+    def switchy(self, meta, *x, **y):
+        title = meta.get("title")
+        url = meta.get("url")
+        domain = re.sub("^.+?//|/.+$", "", url)
+        self.label.set_markup("<big><b>{}</b></big>\n<a href='{}'>{}</a>".format(title, url, domain))
+
diff --git a/channels/url_soundcloud.py b/channels/url_soundcloud.py
new file mode 100644
index 0000000..83d25ce
--- /dev/null
+++ b/channels/url_soundcloud.py
@@ -0,0 +1,80 @@
+# api: streamtuner2
+# title: Soundcloud streams
+# description: Convert soundcloud links from reddit to streamable tracks
+# version: 0.2
+# type: filter
+# category: audio
+# depends: python:soundcloud, action >= 1.1, reddit >= 0.8
+# priority: rare
+#
+# Overrides action.play() function to convert soundcloud URLs
+# to track/streaming address.  Disables the reddit filter for
+# walled gardens, and overrides any custom player configured
+# for "audio/soundcloud" in settings.
+
+
+import re
+import soundcloud
+from config import *
+import ahttp
+import action
+
+fmt = "audio/soundcloud"
+rx_url = re.compile("^https?://(www\.)?soundcloud\.com/[\w-]+/[\w-]+$")
+conn = None
+
+        
+# API connect
+def client():
+    global conn
+    if not conn:
+        conn = soundcloud.Client(client_id="f0aea6e0484043f6638cb5bf35d43312")
+    return conn
+
+# Capture play events for faux MIME type
+def sndcl_convert(row={}, audioformat="audio/mpeg", source="pls", assoc={}):
+    if audioformat==fmt or rx_url.match(url):
+
+        # find streaming address
+        try:
+            url = row["url"]
+            log.DATA_CONVERT_SOUNDCLOUD(url)
+            track = client().get('/resolve', url=url)
+            track_str = "/tracks/{}/stream".format(track.id)
+            url = client().get(track_str, allow_redirects=False).location
+
+            # override attributes
+            row["url"] = url
+            row["format"] = "audio/mpeg"
+            audioformat = "audio/mpeg"
+            source = "srv"
+
+        except Exception as e:
+            log.ERR_SOUNDCLOUD("URL resolving failed:", e)
+            
+            # let web browser run
+            audioformat = "url/http"
+    
+    # let primary handler take over
+    if audioformat != fmt:
+        return action.run_fmt_url(row, audioformat, source, assoc)
+
+
+# Hook up custom action.handler for soundcloud URLs
+#
+# Still somewhat hodgepodge. The action module just lets .play() params
+# rewrite by above handler. Should turn faux "audio/soundcloud" URL into
+# plain/longwinded MP3 streaming address.
+#
+# Would need more generalized processing of custom URL schemes. But so
+# far only the reddit module uses them anyway.
+#
+class url_soundcloud(object):
+    module = "url_soundcloud"
+
+    # override action.play() with wrapper
+    def __init__(self, parent, *a, **kw):
+        conf.play[fmt] = "false / convert"
+        #conf.filter_walledgardens = False
+        action.handler[fmt] = sndcl_convert
+
diff --git a/channels/useragentswitcher.py b/channels/useragentswitcher.py
new file mode 100644
index 0000000..726314b
--- /dev/null
+++ b/channels/useragentswitcher.py
@@ -0,0 +1,55 @@
+# encoding: UTF-8
+# api: streamtuner2
+# title: User Agent Switcher
+# description: Mask streamtuner2 as browser or different radio player.
+# version: 0.2
+# type: feature
+# category: session
+# priority: rare
+# config:
+#   { type=select, name=useragent, value=Streamtuner2, select="Streamtuner2|VLC|Firefox|Chrome|Android|MSIE|iTunes|WinAmp|NSPlayer", description=Which browser string to use for HTTP requests. }
+# hooks: config_save
+#
+# This is currently unneeded / only for privacy.
+# Allows to masquerade streamtuner2 as different
+# audio player or just as web browser for station
+# or playlist fetching.
+
+
+from config import *
+from channels import *
+import ahttp
+
+
+# override ahttp.session headers, hooks into config dialog
+class useragentswitcher():
+
+    module = "useragentswitcher"
+    meta = plugin_meta()
+    map = {
+       "default": "streamtuner2/2.1 (X11; Linux amd64; rv:33.0) like WinAmp/2.1",
+       "vlc": "vlc 1.1.0-git-20100330-0003",
+       "firefox": "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0",
+       "chrome": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36",
+       "android": "Mozilla/5.0 (Linux; U; Android 4.2; en-us; Nexus 10 Build/JVP15I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30",
+       "msie": "Mozilla/5.0 (compatible, MSIE 11, Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko",
+       "itunes": "iTunes/9.0.3 (Macintosh; U; Intel Mac OS X 10_6_2; en-ca)",
+       "googlebot": "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)",
+       "winamp": "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648) omBrowser/1.3 (Winamp 5.57 build 2596 Beta, JSAPI2)",
+       "nsplayer": "NSPlayer/11.0.5744.6324 WMFSDK/11.0",
+    }
+
+    # register
+    def __init__(self, parent):
+        conf.add_plugin_defaults(self.meta, self.module)
+        parent.hooks["config_save"].append(self.apply)
+        self.apply()    
+
+    # set new browser string in requests session
+    def apply(self):
+        ua = self.map.get(conf.useragent.lower(), self.map["default"])
+        if ua:
+            log.HTTP("UserAgentSwitcher:", ua)
+            ahttp.session.headers.update({ "User-Agent": ua })
+
+
diff --git a/channels/xiph.png b/channels/xiph.png
deleted file mode 100644
index 97f3a71..0000000
Binary files a/channels/xiph.png and /dev/null differ
diff --git a/channels/xiph.py b/channels/xiph.py
index 9ef9784..90b0272 100644
--- a/channels/xiph.py
+++ b/channels/xiph.py
@@ -1,503 +1,544 @@
-#
+# encoding: UTF-8
 # api: streamtuner2
 # title: Xiph.org
-# description: ICEcast radio directory. Now utilizes a cached JSON API.
+# description: ICEcast radios. Scans per JSON API, slow XML, or raw directory.
 # type: channel
+# url: http://dir.xiph.org/
+# version: 0.6
 # category: radio
-# version: 0.3
+# config: 
+#    { name: xiph_source, value: web, type: select, select: "cache=JSON cache srv|xml=Clunky XML blob|web=Forbidden fruits", description: "Source for station list extraction." }
 # priority: standard
+# png:
+#   iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAg5JREFUOI2lk1tIE2AUx3+7CG1tlmlG1rSEHrKgEUF7yO40taQiRj10I4qKkOaT4hIUItuTkC8hpJAQtJCICrFpzEKw
+#   h61eQorGNBOTzbEt16ZrnR5Wq3mZD/3heziX//983znngyyov+eSbHEA5WKBhs4BKVy9gsqajqwiCwo0dA5IQX5u2s4moliMPPV1nCeDzxgNBFDHE2wsKMPzsGVefobjcnO7RMfeMuL341ZBrNEGRmPqqjdvsbbf
+#   w7irO4Oj+rdywNNNucmERsLUVndR8uYRU13PCew6hpgP8W02xMpIsik++qk5oweW6y3yob8WnXacZDKJWh1Cp4OtRUHsh19TUlUGViv09RGqKAenU5QnLKm+rK88LjgcUnxmr/h8iNO5XYJBRAQZ/qiVeptGWjty
+#   5cClDWLwugQRIRiU5UdPCoD6S89jhV6pks9WG6fuwtBtF5v72vC1v+B86SsM+jD56hjnyiM0lRrAbofeXjQJLdE/78jbXSU5166I6f5VeeDdKdq6GtlSd0QkVU+8XsQhlt9W6izbZ5aMKWgtp2WT/yUHd0xSYU7i
+#   dsPQ+1WMKIsJD08wEV2HGLeRyNMjawqRxhuKBfdgz1m7fI/4mVX+ZGxmgniOoJv+QZHGAMC7p60ZnHkC8HfzZmLTBCd9af9ccnqMc9HTdmFe4kLkJbH/4h0xVtcu+SP/C78AL6btab6woPcAAAAASUVORK5CYII=
 #
+# Xiph.org maintains the Ogg streaming standard and Vorbis,
+# Opus, FLAC audio, and Theora video compression formats.
+# The ICEcast server is an open alternative to SHOUTcast.
 #
-# Xiph.org maintains the Ogg streaming standard and Vorbis audio compression
-# format, amongst others. The ICEcast server is an alternative to SHOUTcast.
+# It also provides a directory listing of known internet
+# radio stations; only a handful of them using Ogg though.
+# The category list is hardwired in this plugin. And there
+# are three station fetching modes now:
 #
-# It meanwhile provides a JSOL dump, which is faster to download and process.
-# So we'll use that over the older yp.xml. (Sadly it also doesn't output
-# homepage URLs, listeners, etc.)
+#  → "JSON cache" retrieves a refurbished JSON station list,
+#    both sliceable genres and searchable.
 #
+#  → "Clunky XML" fetches the olden YP.XML, which is really
+#    slow, then slices out genres. No search. With the secret
+#    "buffy" mode keeps all streams buffered.
 #
+#  → "Forbidden Fruits" extracts from dir.xiph.org HTML pages,
+#    with homepages and listener/max infos available. Also
+#    enables live server searching.
+#
+# The previous bitrate filter is now a separate plugin, but
+# available for all channels.
 
 
-
-# streamtuner2 modules
-from config import conf
-from mygtk import mygtk
-import ahttp as http
+from config import *
+from uikit import uikit
+import ahttp
 from channels import *
-from config import __print__, dbg
+import xml.dom.minidom
 import json
-
-# python modules
 import re
-#from xml.sax.saxutils import unescape as entity_decode, escape as xmlentities
-#import xml.dom.minidom
-
 
 
           
-# I wonder what that is for                                             ---------------------------------------
+# Xiph directory service
 class xiph (ChannelPlugin):
 
-        # desc
-        api = "streamtuner2"
-        module = "xiph"
-        title = "Xiph.org"
-        homepage = "http://dir.xiph.org/"
-        #base_url = "http://api.dir.xiph.org/"
-        json_url = "http://api.include-once.org/xiph/cache.php"
-        listformat = "url/http"
-        config = [
-           {"name":"xiph_min_bitrate", "value":64, "type":"int", "description":"minimum bitrate, filter anything below", "category":"filter"}
-        ]
-        has_search = True
-
-        # content
-        categories = [ "pop", "top40" ]
-        current = ""
-        default = "pop"
-        empty = None
-        
+  # attributes
+  listformat = "srv"
+  has_search = True
+  json_url = "http://api.include-once.org/xiph/cache.php"
+  xml_url = "http://dir.xiph.org/yp.xml"
+  web_url = "http://dir.xiph.org/"
+
+  # content
+  categories = []
+
+
+  # Categories are basically just the static .genre list
+  def update_categories(self):
+      self.categories = [
+         g.title() if isinstance(g, str) else [s.title() for s in g]
+         for g in self.genres
+      ]  # entries contain no "|" search patterns anymore
+
+
+  # Switch to JSON, XML or HTML extractor
+  def update_streams(self, cat=None, search=None):
+      if cat:
+          cat = cat.lower()
+
+      # retrieval module
+      if conf.xiph_source in ("cache", "json"):
+          log.PROC("Xiph mode: processing api.dir.xiph.org JSON (via api.include-once.org cache)")
+          r = self.from_json_cache(cat, search)
+      elif conf.xiph_source in ("xml", "buffy"):
+          log.PROC("Xiph mode: xml.dom.minidom to traverse yp.xml")
+          r = self.from_yp_xml(cat, search)
+      else:
+          log.PROC("Xiph mode: extract from dir.xiph.org HTML listings")
+          r = self.from_raw_html(cat, search)
+
+      return r
+      
+
+
+
+  # Retrieve partial stream list from api.include-once.org cache / JSON API wrapper
+  #
+  # The server interface is specifically designed for streamtuner2. It refurbishes
+  # Xiphs JSOL dump (which is impossible to fix in Python, but easier per PHP).
+  # It doesn't contain homepage links, etc either.
+  # While Xiph.org promised fixing their very own JSON API, it's delayed through
+  # summer of code again. <https://trac.xiph.org/ticket/1958>
+  #
+  def from_json_cache(self, cat, search=None):
+
+      # With the new JSON cache API on I-O, we can load categories individually:
+      params = dict(search=search) if search else dict(cat=cat)
+      data = ahttp.get(self.json_url, params=params)
+      #log.DATA(data)
+      
+      #-- extract
+      l = []
+      data = json.loads(data)
+      for e in data:
+          if not len(l) or l[-1]["title"] != e["stream_name"]:
+              l.append({
+                "title": e["stream_name"],
+                "url": e["listen_url"],
+                "format": e["type"],
+                "bitrate": int(e["bitrate"]),
+                "genre": e["genre"],
+                "playing": e["current_song"],
+                "listeners": 0,
+                "max": 0,
+                "homepage": (e["homepage"] if ("homepage" in e) else ""),
+              })
+          
+      # send back the list 
+      return l
+
+
+
+  # Extract complete YP.XML, but just filter for genre/cat
+  def from_yp_xml(self, cat, search=None, buffy=[]):
+
+      # Theoretically we could really buffer the extracted station lists.
+      # But it's a huge waste of memory to keep it around for unused
+      # categories.  Extracting all streams{} at once would be worse. Yet
+      # enabling this buffer method prevents partial reloading..
+      if conf.xiph_source != "buffy":
+          buffy = []
+
+      # Get XML blob
+      if not buffy:
+          yp = ahttp.get(self.xml_url, encoding="utf-8", statusmsg="Brace yourselves, still downloading the yp.xml blob.")
+      else:
+          yp = "<none/>"
+      self.status("Yes, XML parsing isn't much faster either.", timeout=20)
+      for entry in xml.dom.minidom.parseString(yp).getElementsByTagName("entry"):
+          buffy.append({
+              "title": x(entry, "server_name"),
+              "url": x(entry, "listen_url"),
+              "format": mime_fmt(x(entry, "server_type")[6:]),
+              "bitrate": bitrate(x(entry, "bitrate")),
+              "channels": x(entry, "channels"),
+              "samplerate": x(entry, "samplerate"),
+              "genre": x(entry, "genre"),
+              "playing": x(entry, "current_song"),
+              "listeners": 0,
+              "max": 0,
+              "homepage": "",
+          })
+      self.status("This. Is. Happening. Now.")
+
+      # Filter out a single subtree
+      l = []
+      if cat:
+          rx = re.compile(cat.lower())
+          l = [row for row in buffy if rx.search(row["genre"])]
+
+      # Search is actually no problem. Just don't want to. Nobody is using the YP.XML mode anyway..
+      elif search:
+          pass
         
-        # prepare category names
-        def __init__(self, parent=None):
-            
-            self.categories = []
-            self.filter = {}
-            for main in self.genres:
-                if (type(main) == str):
-                    id = main.split("|")
-                    self.categories.append(id[0].title())
-                    self.filter[id[0]] = main
-                else:
-                    l = []
-                    for sub in main:
-                        id = sub.split("|")
-                        l.append(id[0].title())
-                        self.filter[id[0]] = sub
-                    self.categories.append(l)
-            
-            # GUI
-            ChannelPlugin.__init__(self, parent)
-
-
-        # just counts genre tokens, does not automatically create a category tree from it
-        def update_categories(self):
-            pass
-
-
-        # downloads stream list from xiph.org for given category
-        def update_streams(self, cat, search=None):
-
-            # With the new JSON cache API on I-O, we can load categories individually:
-            params = {}
-            if cat:
-                params["cat"] = cat.lower()
-            if search:
-                params["search"] = search
-            
-            #-- get data
-            data = http.get(self.json_url, params=params)
-            #__print__(dbg.DATA, data)
-            
-            #-- extract
-            l = []
-            __print__( dbg.PROC, "processing api.dir.xiph.org JSON (via api.include-once.org cache)" )
-            data = json.loads(data)
-            for e in data:
-                #__print__(dbg.DATA, e)
-                bitrate = int(e["bitrate"])
-                if conf.xiph_min_bitrate and bitrate and bitrate >= int(conf.xiph_min_bitrate):
-                    if not len(l) or l[-1]["title"] != e["stream_name"]:
-                        l.append({
-                          "title": e["stream_name"],
-                          "url": e["listen_url"],
-                          "format": e["type"],
-                          "bitrate": bitrate,
-                          "genre": e["genre"],
-                          "playing": e["current_song"],
-                          "listeners": 0,
-                          "max": 0,
-                          "homepage": (e["homepage"] if ("homepage" in e) else ""),
-                        })
-                
-            # send back the list 
-            return l
-
-
-
-
-        genres = [
-              "pop",
-              [
-                  "top40",
-                  "90s",
-                  "80s",
-                  "britpop",
-                  "disco",
-                  "urban",
-                  "party",
-                  "mashup",
-                  "kpop",
-                  "jpop",
-                  "lounge",
-                  "softpop",
-                  "top",
-                  "popular",
-                  "schlager",
-              ],
-              "rock",
-              [
-                  "alternative",
-                  "electro",
-                  "country",
-                  "mixed",
-                  "metal",
-                  "eclectic",
-                  "folk",
-                  "anime",
-                  "hardcore",
-                  "pure"
-                  "jrock"
-              ],
-              "dance",
-              [
-                  "electronic",
-                  "deephouse",
-                  "dancefloor",
-                  "elektro"
-                  "eurodance"
-                  "b",
-                  "r",
-              ],
-              "hits",
-              [
-                  "russian"
-                  "hit",
-                  "star"
-              ],
-              "radio",
-              [
-                  "live",
-                  "community",
-                  "student",
-                  "internet",
-                  "webradio",
-              ],
-              "classic",
-              [
-                   "classical",
-                   "ebu",
-                   "vivaldi",
-                   "piano",
-                   "opera",
-                   "classix",
-                   "chopin",
-                   "renaissance",
-                   "classique",
-              ],
-              "talk",
-              [
-                  "news",
-                  "politics",
-                  "medicine",
-                  "health"
-                  "sport",
-                  "education",
-                  "entertainment",
-                  "podcast",
-              ],
-              "various",
-              [
-                  "hits",
-                  "ruhit",
-                  "mega"
-              ],
-              "house",
-              [
-                  "lounge",
-                  "trance",
-                  "techno",
-                  "handsup",
-                  "gay",
-                  "breaks",
-                  "dj",
-              "electronica",
-              ],
-              "trance",
-              [
-                  "clubbing",
-                  "electronical"
-              ],
-              "jazz",
-              [
-                  "contemporary"
-              ],
-              "oldies",
-              [
-                  "golden",
-                  "decades",
-                  "info",
-                  "70s",
-                  "60s"
-              ],
-              "religious",
-              [
-                  "spiritual",
-                  "inspirational",
-                  "christian",
-                  "catholic",
-                  "teaching",
-                  "christmas",
-                  "gospel",
-              ],
-              "music",
-              "unspecified",
-              "misc",
-              "adult",
-              "indie",
-              [
-                  "reggae",
-                  "blues",
-                  "college",
-                  "soundtrack"
-              ],
-              "mixed",
-              [
-                  "disco",
-                  "mainstream",
-                  "soulfull"
-              ],
-              "funk",
-              "hiphop",
-              [
-                  "rap",
-                  "dubstep",
-                  "hip",
-                  "hop"
-              ],
-              "top",
-              [
-                  "urban"
-              ],
-              "musica",
-              "ambient",
-              [
-                  "downtempo",
-                  "dub"
-              ],
-              "promodj",
-              "world",    # REGIONAL
-              [
-                  "france",
-                  "greek",
-                  "german",
-                  "westcoast",
-                  "bollywood",
-                  "indian",
-                  "nederlands",
-                  "europa",
-                  "italia",
-                  "brazilian",
-                  "tropical",
-                  "korea",
-                  "seychelles",
-                  "black",
-                  "japanese",
-                  "ethnic",
-                  "country",
-                  "americana",
-                  "western",
-                  "cuba",
-                  "afrique",
-                  "paris",
-                  "celtic",
-                  "ambiance",
-                  "francais",
-                  "liberte",
-                  "anglais",
-                  "arabic",
-                  "hungary",
-                  "folklore"
-                  "latin",
-                  "dutch"
-                  "italy"
-              ],
-              "artist",   # ARTIST NAMES
-              [
-                  "mozart",
-                  "beatles",
-                  "michael",
-                  "nirvana",
-                  "elvis",
-                  "britney",
-                  "abba",
-                  "madonna",
-                  "depeche",
-              ],
-              "salsa",
-              "love",
-              "la",
-              "soul",
-              "techno",
-              [
-                  "club",
-                  "progressive",
-                  "deep"
-              "electro",
-              ],
-              "best",
-              "100%",
-              "rnb",
-              "retro",
-              "new",
-              "smooth",
-              [
-                  "cool"
-              ],
-              "easy",
-              [
-                  "lovesongs",
-                  "relaxmusic"
-              ],
-              "chillout",
-              "slow",
-              [
-                  "soft"
-              ],
-              "mix",
-              [
-                  "modern"
-              ],
-              "punk",
-              [
-                  "ska"
-              ],
-              "international",
-              "bass",
-              "zouk",
-              "video",
-              [
-                  "game"
-              ],
-              "hardstyle",
-              "scanner",
-              "chill",
-              [
-                  "out",
-                  "trip"
-              ],
-              "drum",
-              "roots",
-              "ac",
-              [
-                  "chr",
-                  "dc"
-              ],
-              "public",
-              "contemporary",
-              [
-                  "instrumental"
-              ],
-              "minimal",
-              "hot",
-              [
-                  "based"
-              ],
-              "free",
-              [
-                  "format"
-              ],
-              "hard",
-              [
-                  "heavy",
-                  "classicrock"
-              ],
-              "reggaeton",
-              "southern",
-              "musica",
-              "old",
-              "emisora",
-              "img",
-              "rockabilly",
-              "charts",
-              [
-                  "best80",
-                  "70er",
-                  "80er",
-                  "60er"
-                  "chart",
-              ],
-              "other",
-              [
-                  "varios"
-              ],
-              "soulful",
-              "listening",
-              "vegyes",
-              "creative",
-              "variety",
-              "commons",
-              [
-                  "ccmusik"
-              ],
-              "tech",
-              [
-                  "edm",
-                  "prog"
-              ],
-              "minecraft",
-              "animes",
-              "goth",
-              "technologie",
-              "tout",
-              "musical",
-              [
-                  "broadway"
-              ],
-              "romantica",
-              "newage",
-              "nostalgia",
-              "oldschool",
-              [
-                  "00s"
-              ],
-              "wij",
-              "relax",
-              [
-                  "age"
-              ],
-              "theatre",
-              "gothic",
-              "dnb",
-              "disney",
-              "funky",
-              "young",
-              "psychedelic",
-              "habbo",
-              "experimental",
-              "exitos",
-              "digital",
-              "no",
-              "industrial",
-              "epic",
-              "soundtracks",
-              "cover",
-              "chd",
-              "games",
-              "libre",
-              "wave",
-              "vegas",
-              "comedy",
-              "alternate",
-              "instrumental",
-              [
-                  "swing"
-              ],
-              "ska",
-              [
-                  "punkrock",
-                  "oi"
-              ],
-              "darkwave",
-          ]
+      # Result category
+      return l
+
+
+
+  # Fetch directly from website. Which Xiph does not approve of; but
+  # hey, it's a fallback option here. And the only way to actually
+  # uncover station homepages.
+  #@use_rx
+  def from_raw_html(self, cat, search=None, use_rx=False):
+
+      # Build request URL
+      by_format = {t.lower(): t for t in self.categories[-1]}
+      if search:
+          url = "http://dir.xiph.org/search?search={}".format(search)
+          cat = "search"
+      elif by_format.get(cat):
+          url = "http://dir.xiph.org/by_format/{}".format(by_format[cat])
+      elif cat:
+          url = "http://dir.xiph.org/by_genre/{}".format(cat.title())
+
+      # Collect all result pages
+      html = ahttp.get(url)
+      for i in range(1,5):
+          if html.find('page={}">{}</a></li>'.format(i, i+1)) < 0:
+              break
+          self.status(i/5.1)
+          html += ahttp.get(url, {"search": cat.title(), "page": i})
+      try:
+          html = html.encode("raw_unicode_escape").decode("utf-8")
+      except:
+          pass
+
+      # Find streams
+      r = []
+      rows = re.findall("""<tr\s+class="row\d*">(.+?)</tr>""", html, re.S)
+      for html in rows:
+          ls = self.rx_all(
+               dict(
+                  homepage = """ class="name">  <a\s+href="(.*?)" """,
+                  title = """ class="name">  <a[^>]*> (.*?)</a> """,
+                  listeners = """ "listeners">\[(\d+) """,
+                  playing = """ "stream-description">(.*?)< """,
+                  tags = """ (?s) Tags: (.*?) </div> """,
+                  url = """ href="(/listen/\d+/listen.xspf)" """,
+                  bits = """ class="format"\s+title="([^"]+)" """,
+                  fmt = """ /by_format/([^"]+) """,
+              ),
+              html
+          )
+          r.append(dict(
+              genre = unhtml(ls["tags"]),
+              title = unhtml(ls["title"]),
+              homepage = ahttp.fix_url(ls["homepage"]),
+              playing = unhtml(ls["playing"]),
+              url = "http://dir.xiph.org{}".format(ls["url"]),
+              listformat = "xspf",
+              listeners = int(ls["listeners"]),
+              bitrate = bitrate(ls["bits"]),
+              format = mime_fmt(guess_format(ls["fmt"])),
+          ))
+      return r
+
+  # Regex dict
+  def rx_all(self, fields, src, flags=re.X):
+      row = {}
+      for k, v in fields.items():
+          m = re.search(v, src, flags)
+          if m:
+              row[k] = m.group(1)
+          else:
+              row[k] = ""
+      return row
+     
+
+
+  # Static list of categories
+  genres = [
+        "pop",
+        [
+            "top40", "90s", "80s", "britpop", "disco", "urban", "party",
+            "mashup", "kpop", "jpop", "lounge", "softpop", "top", "popular",
+            "schlager",
+        ],
+        "rock",
+        [
+            "alternative", "electro", "country", "mixed", "metal",
+            "eclectic", "folk", "anime", "hardcore", "pure", "jrock"
+        ],
+        "dance",
+        [
+            "electronic", "deephouse", "dancefloor", "elektro", "eurodance",
+            "rnb",
+        ],
+        "hits",
+        [
+            "russian", "hit", "star"
+        ],
+        "radio",
+        [
+            "live", "community", "student", "internet", "webradio",
+        ],
+        "classic",
+        [
+             "classical", "ebu", "vivaldi", "piano", "opera", "classix",
+             "chopin", "renaissance", "classique",
+        ],
+        "talk",
+        [
+            "news", "politics", "medicine", "health", "sport", "education",
+            "entertainment", "podcast",
+        ],
+        "various",
+        [
+            "hits", "ruhit", "mega"
+        ],
+        "house",
+        [
+            "lounge", "trance", "techno", "handsup", "gay", "breaks", "dj",
+            "electronica",
+        ],
+        "trance",
+        [
+            "clubbing", "electronical"
+        ],
+        "jazz",
+        [
+            "contemporary"
+        ],
+        "oldies",
+        [
+            "golden", "decades", "info", "70s", "60s"
+        ],
+        "religious",
+        [
+            "spiritual", "inspirational", "christian", "catholic",
+            "teaching", "christmas", "gospel",
+        ],
+        "music",
+        "unspecified",
+        "misc",
+        "adult",
+        "indie",
+        [
+            "reggae", "blues", "college", "soundtrack"
+        ],
+        "mixed",
+        [
+            "disco", "mainstream", "soulfull"
+        ],
+        "funk",
+        "hiphop",
+        [
+            "rap", "dubstep", "hip", "hop"
+        ],
+        "top",
+        [
+            "urban"
+        ],
+        "musica",
+        "ambient",
+        [
+            "downtempo", "dub"
+        ],
+        "promodj",
+        "world",    # REGIONAL
+        [
+            "france", "greek", "german", "westcoast", "bollywood", "indian",
+            "nederlands", "europa", "italia", "brazilian", "tropical",
+            "korea", "seychelles", "black", "japanese", "ethnic", "country",
+            "americana", "western", "cuba", "afrique", "paris", "celtic",
+            "ambiance", "francais", "liberte", "anglais", "arabic",
+            "hungary", "folklore", "latin", "dutch", "italy"
+        ],
+        "artist",   # ARTIST NAMES
+        [
+            "mozart", "beatles", "michael", "nirvana", "elvis", "britney",
+            "abba", "madonna", "depeche",
+        ],
+        "salsa",
+        "love",
+        "la",
+        "soul",
+        "techno",
+        [
+            "club", "progressive", "deep", "electro",
+        ],
+        "best",
+        "100%",
+        "rnb",
+        "retro",
+        "new",
+        "smooth",
+        [
+            "cool"
+        ],
+        "easy",
+        [
+            "lovesongs", "relaxmusic"
+        ],
+        "chillout",
+        "slow",
+        [
+            "soft"
+        ],
+        "mix",
+        [
+            "modern"
+        ],
+        "punk",
+        [
+            "ska"
+        ],
+        "international",
+        "bass",
+        "zouk",
+        "video",
+        [
+            "game"
+        ],
+        "hardstyle",
+        "scanner",
+        "chill",
+        [
+            "out",
+            "trip"
+        ],
+        "drum",
+        "roots",
+        "ac",
+        [
+            "chr",
+            "dc"
+        ],
+        "public",
+        "contemporary",
+        [
+            "instrumental"
+        ],
+        "minimal",
+        "hot",
+        [
+            "based"
+        ],
+        "free",
+        [
+            "format"
+        ],
+        "hard",
+        [
+            "heavy",
+            "classicrock"
+        ],
+        "reggaeton",
+        "southern",
+        "musica",
+        "old",
+        "emisora",
+        "img",
+        "rockabilly",
+        "charts",
+        [
+            "best80", "70er", "80er", "60er", "chart",
+        ],
+        "other",
+        [
+            "varios"
+        ],
+        "soulful",
+        "listening",
+        "vegyes",
+        "creative",
+        "variety",
+        "commons",
+        [
+            "ccmusik"
+        ],
+        "tech",
+        [
+            "edm",
+            "prog"
+        ],
+        "minecraft",
+        "animes",
+        "goth",
+        "technologie",
+        "tout",
+        "musical",
+        [
+            "broadway"
+        ],
+        "romantica",
+        "newage",
+        "nostalgia",
+        "oldschool",
+        [
+            "00s"
+        ],
+        "wij",
+        "relax",
+        [
+            "age"
+        ],
+        "theatre",
+        "gothic",
+        "dnb",
+        "disney",
+        "funky",
+        "young",
+        "psychedelic",
+        "habbo",
+        "experimental",
+        "exitos",
+        "digital",
+        "no",
+        "industrial",
+        "epic",
+        "soundtracks",
+        "cover",
+        "chd",
+        "games",
+        "libre",
+        "wave",
+        "vegas",
+        "comedy",
+        "alternate",
+        "instrumental",
+        [
+            "swing"
+        ],
+        "ska",
+        [
+            "punkrock",
+            "oi"
+        ],
+        "darkwave",
+        "/FORMAT",
+        ["Ogg_Vorbis", "Ogg_Theora", "Opus", "NSV", "WebM"],
+    ]
+
+
+
+# Helper functions for XML extraction mode
+
+# Shortcut to get text content from XML subnode by name
+def x(node, name):
+    e = node.getElementsByTagName(name)
+    if (e):
+        if (e[0].childNodes):
+            return str(e[0].childNodes[0].data)
+    return ""
+
+# Convert bitrate string or "Quality \d+" to integer
+def bitrate(str):
+    uu = re.findall("(\d+)", str)
+    if uu:
+        br = int(uu[0])
+        if br > 10:
+            return int(br)
+        else:
+            return int(br * 25.6)
+    else:
+        return 0
+
+
+# Extract mime type from text
+rx_fmt = re.compile("ogg|mp3|mp4|theora|nsv|webm|opus|mpeg")
+def guess_format(str):
+    return rx_fmt.findall(str.lower() + "mpeg")[0]
 
diff --git a/channels/youtube.png b/channels/youtube.png
deleted file mode 100644
index 170b350..0000000
Binary files a/channels/youtube.png and /dev/null differ
diff --git a/channels/youtube.py b/channels/youtube.py
index ad06cdc..aad63ab 100644
--- a/channels/youtube.py
+++ b/channels/youtube.py
@@ -4,10 +4,20 @@
 # description: Channel, playlist and video browsing for youtube.
 # type: channel
 # version: 0.2
+# url: http://www.youtube.com/
 # category: video
-# priority: optional
-# suggests: youtube-dl
-# 
+# config:
+#    { name: youtube_channels,  type: text,  value: "Key Of Awesome, Pentatonix",  description: "Preferred channels to list videos from.",  category: select }
+#    { name: youtube_region,  type: select,  select: "=No Region|AR=Argentina|AU=Australia|AT=Austria|BE=Belgium|BR=Brazil|CA=Canada|CL=Chile|CO=Colombia|CZ=Czech Republic|EG=Egypt|FR=France|DE=Germany|GB=Great Britain|HK=Hong Kong|HU=Hungary|IN=India|IE=Ireland|IL=Israel|IT=Italy|JP=Japan|JO=Jordan|MY=Malaysia|MX=Mexico|MA=Morocco|NL=Netherlands|NZ=New Zealand|PE=Peru|PH=Philippines|PL=Poland|RU=Russia|SA=Saudi Arabia|SG=Singapore|ZA=South Africa|KR=South Korea|ES=Spain|SE=Sweden|CH=Switzerland|TW=Taiwan|AE=United Arab Emirates|US=United States",  value: GB,  description: "Filter by region id.",  category: auth }
+#    { name: youtube_wadsworth,  type: boolean,  value: 0,  description: "Apply Wadsworth constant.",  category: filter }
+# priority: default
+# png:
+#   iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAYNJREFUOI3Fks9LVFEUxz/nzrPx+WN0xhAUgoT6A6y/wFb+C4IbIQhcBm36H1obVNtoGYS0TFoIQstazBgNBaELQdTx
+#   vea9uffbwufw3mTRzi8cLnzv955z7vccuG7YXmtyBlgBbgFTQB3Q3/RAHzgD9oHdyMNTg01gshD8DwScCJ7bx+bEN7Cl0Xt5D2aYc//Iq67LYDFHXEamgGZmmd94SHzvPoMoIguerKQZamExykS9kjQIN3eThcdP
+#   WAiBo/fbHLx5Te/LZzQYgFW6qbsMKEcf+CWRpCm+2aK5ts6drZfMP9okH4/pSxV91NeI4RLmA0mS4ns9JHGaJvzMc1Lpwo3Smyi7wl6FwHmScNzt8mPnA4fv3lLrtJkIHqt+AXvViFPB+JCQ0HQDrTyg127jvu4T
+#   D3Jqzg0LDLWQ2lYj7oDulmlJZCEwZuD+GGMlRae2eiNqeVgOUA9AAAuAmSEzCq4cKs5TwYvIwzPBJ+A2F2s8XZQcXedL7qwY1neDHa4dvwFfDLdx6YbozgAAAABJRU5ErkJggg==
+# depends: bin:youtube-dl
+#
 # 
 # Lists recently popular youtube videos by category or channels.
 #
@@ -17,6 +27,17 @@
 #
 # For now custom channel names must be configured in the settings dialog
 # text entry, and applied using Channel > Update categories..
+
+
+from config import *
+from channels import *
+
+import ahttp
+import json
+
+
+
+# Youtube
 #
 #
 # INTERNA
@@ -30,7 +51,6 @@
 # a lot of uneeded data. (Clever idea, but probably incurs more processing
 # effort on Googles servers than it actually saves bandwidth, but hey..)
 #
-#
 # EXAMPLES
 #
 #  api("videos", chart="mostPopular")
@@ -44,31 +64,18 @@
 #   guideCat  Music  id= GCTXVzaWM   channelid= UCBR8-60-B28hp2BmDPdntcQ
 #   topicId   Music  mid= /m/0kpv0g
 #
-#
-
-from config import *
-from channels import *
-
-import ahttp
-import json
-
-
-
-# Youtube
 class youtube (ChannelPlugin):
 
-    # description
-    title = "Youtube"
-    module = "youtube"
-    homepage = "http://www.youtube.com/"
+    # control attributes
     listformat = "url/youtube"
     has_search = True
-    fmt = "video/youtube"
+    audioformat = "video/youtube"
     titles = dict( genre="Channel", title="Title", playing="Playlist", bitrate=False, listeners=False )
 
     # API config
     service = {
-        2: [ "http://gdata.youtube.com/",
+        2: [ "http://gdata.youtube.com/", 
+            # deprecated on 2015-04-20, no /v3/ alternative, pertains "mostPopular" category only
             {
                 "v": 2,
                 "alt": "json",
@@ -94,33 +101,6 @@ class youtube (ChannelPlugin):
         "my channels",
         ["Key of Awesome", "Pentatonix"]
     ] 
-
-    # plugin settings 
-    config = [
-       {
-          "name": "youtube_channels",
-          "type": "text",
-          "value": "Key Of Awesome, Pentatonix",
-          "description": "Preferred channels to list videos from.",
-          "category": "select",
-       },
-       {
-          "name": "youtube_region",
-          "type": "select",
-          "select": "=No Region|AR=Argentina|AU=Australia|AT=Austria|BE=Belgium|BR=Brazil|CA=Canada|CL=Chile|CO=Colombia|CZ=Czech Republic|EG=Egypt|FR=France|DE=Germany|GB=Great Britain|HK=Hong Kong|HU=Hungary|IN=India|IE=Ireland|IL=Israel|IT=Italy|JP=Japan|JO=Jordan|MY=Malaysia|MX=Mexico|MA=Morocco|NL=Netherlands|NZ=New Zealand|PE=Peru|PH=Philippines|PL=Poland|RU=Russia|SA=Saudi Arabia|SG=Singapore|ZA=South Africa|KR=South Korea|ES=Spain|SE=Sweden|CH=Switzerland|TW=Taiwan|AE=United Arab Emirates|US=United States",
-          "value": "UK",
-          "description": "Filter by region id.",
-          "category": "auth",
-       },
-       {
-          "name": "youtube_wadsworth",
-          "type": "boolean",
-          "value": 0,
-          "description": "Apply Wadsworth constant.",
-          "category": "filter",
-       },
-    ]    
-
     # from GET https://www.googleapis.com/youtube/v3/videoCategories?part=id%2Csnippet&
     videocat_id = {
         "Film & Animation": 1,
@@ -232,7 +212,7 @@ class youtube (ChannelPlugin):
         
         # empty entries
         else:
-            entries = [dict(title="Placeholder for subcategories", genre="./.", playing="./.", url="http://youtube.com/")]
+            return self.placeholder
  
         # done    
         return entries
@@ -264,7 +244,7 @@ class youtube (ChannelPlugin):
         # Retrieve data set
         while pages > 0:
             j = ahttp.get(base_url + method, params=params)
-            #__print__(dbg.DATA, j)
+            #log.DATA(j)
             if j:
                 # json decode
                 data = json.loads(j)
@@ -310,7 +290,7 @@ class youtube (ChannelPlugin):
         data.update(dict(
             url = "http://youtube.com/v/" + id,
             homepage = "http://youtu.be/" + id + ("?wadsworth=1" if conf.youtube_wadsworth else ""),
-            format = self.fmt,
+            format = self.audioformat,
             title = row["snippet"]["title"],
         ))
         
@@ -325,12 +305,12 @@ class youtube (ChannelPlugin):
 
     # API version 2.0s jsonified XML needs different unpacking:
     def wrap2(self, row):
-        #__print__(dbg.DATA, row)
+        #log.DATA(row)
         return dict(
             genre = row["category"][1]["term"],
             title = row["title"]["$t"],
             playing = row["author"][0]["name"]["$t"],
-            format = self.fmt,
+            format = self.audioformat,
             url = row["content"]["src"].split("?")[0],
             homepage = row["media$group"]["media$player"]["url"],
             image = row["media$group"]["media$thumbnail"][0]["url"],
diff --git a/cli.py b/cli.py
index 40772c4..9d03822 100644
--- a/cli.py
+++ b/cli.py
@@ -1,25 +1,21 @@
-#
 # api: streamtuner2
 # title: CLI interface
 # description: allows to call streamtuner2 from the commandline
 # status: experimental
 # version: 0.3
 #
-#  Returns JSON data when queried. Usually returns cache data, but the
-#  "category" module always loads fresh info from the directory servers.
-#
-#  Not all channel plugins are gtk-free yet. And some workarounds are
-#  used here to not upset channel plugins about a missing parent window.
-#
-#
+# Returns JSON data when queried. Usually returns cache data, but the
+# "category" module always loads fresh info from the directory servers.
 #
+# Not all channel plugins are gtk-free yet. And some workarounds are
+# used here to not upset channel plugins about a missing parent window.
 
 
 import sys
 #from channels import *
 import ahttp
 import action
-from config import conf
+from config import *
 import json
 
 
@@ -35,28 +31,32 @@ class StreamTunerCLI (object):
 
     
     # channel plugins
-    channel_modules = ["shoutcast", "xiph", "internet_radio", "jamendo", "myoggradio", "live365"]
+    channel_modules = ["shoutcast", "xiph", "icast", "jamendo", "radiobrowser"]# module_list()
     current_channel = "cli"
     plugins = {} # only populated sparsely by .stream()
     
     
     # start
-    def __init__(self):
+    def __init__(self, actions):
 
         # fake init    
-        action.action.main = empty_parent()
-        action.action.main.current_channel = self.current_channel
+        action.main = empty_parent()
+        action.main.current_channel = self.current_channel
 
         # check if enough arguments, else  help
-        if len(sys.argv)<3:
+        if not actions:
             a = self.help
         # first cmdline arg == action
         else:
-            command = sys.argv[1]
-            a = self.__getattribute__(command)
+            command = actions[0]
+            if command in dir(self):
+                cmd = self.__getattribute__(command)
+            else:
+                log.ERR("No such command:", command)
+                return
 
         # run
-        result = a(*sys.argv[2:])
+        result = cmd(*actions[1:])
         if result:
             self.json(result)
         
@@ -152,7 +152,7 @@ syntax:  streamtuner2 action [channel] "stream title"
             channels = channels.split(",")
         else:
             channels = self.channel_modules
-        return (self.channel(module) for module in channels)
+        return channels#(self.channel(module) for module in channels)
     
     # pretty print json
     def json(self, dat):    
@@ -166,8 +166,8 @@ syntax:  streamtuner2 action [channel] "stream title"
 class empty_parent (object):    
     channel = {}
     null = lambda *a: None
-    status = null
-    thread = null
+    status = lambda *a: None
+    thread = lambda *a: None
 
 
     
\ No newline at end of file
diff --git a/compat2and3.py b/compat2and3.py
index 58e1b06..87c0236 100644
--- a/compat2and3.py
+++ b/compat2and3.py
@@ -1,13 +1,11 @@
-#
 # encoding: UTF-8
 # api: python 
 # type: functions
 # title: Python2 and Python3 compatibility
-# version: 0.1
-#
-#  Renames some Python3 modules into their Py2 equivalent.
-#  Slim local alternative to `six` module.
+# version: 0.2
 #
+# Renames some Python3 modules into their Py2 equivalent.
+# Slim local alternative to `six` module.
 
 
 import sys
@@ -28,12 +26,16 @@ if sys.version_info < (3,0):
     # urllib modules
     import urllib
     import urllib2
-    from urllib import urlencode
+    from urllib import quote_plus as urlencode, unquote as urldecode
     import urlparse
     import cookielib
     
     # filesys
     from StringIO import StringIO
+    from gzip import GzipFile
+    def gzip_decode(bytes):
+        return GzipFile(fileobj=StringIO(bytes)).read()
+        # return zlib.decompress(bytes, 16 + zlib.MAX_WBITS)    # not fully compatible
 
 
 # Python 3
@@ -50,11 +52,23 @@ else:
     # urllib modules
     import urllib.request as urllib
     import urllib.request as urllib2
-    from urllib.parse import urlencode
+    from urllib.parse import quote_plus as urlencode, unquote as urldecode
     import urllib.parse as urlparse
     from http import cookiejar as cookielib
     
     # filesys
     from io import StringIO
+    from gzip import decompress as gzip_decode
+
+
+# Both
+
+# find_executable() is only needed by channels/configwin
+try:
+    from distutils.spawn import find_executable
+except:
+    def find_executable(bin):
+        exists = [os.path.exists(dir+"/"+bin) for dir in os.environ.get("PATH").split(":")+["/"]]
+        return exists[0] if len(exists) else None
 
     
\ No newline at end of file
diff --git a/config.py b/config.py
index b5875ee..77ed480 100644
--- a/config.py
+++ b/config.py
@@ -1,237 +1,358 @@
-#
 # encoding: UTF-8
 # api: streamtuner2
 # type: class
 # title: global config object
 # description: reads ~/.config/streamtuner/*.json files
+# config:
+#    { arg: -d,     type: str,      name: disable[], description: Omit plugin from initialization.  }
+#    { arg: -e,     type: str,      name: enable[],  description: Add channel plugin.  }
+#    { arg: --gtk3, type: boolean,  name: gtk3,      description: Start with Gtk3 interface. }
+#    { arg: -D,     type: boolean,  name: debug,     description: Enable debug messages on console }
+#    { arg: action, type: str *,    name: action[],  description: CLI interface commands. }
+#    { arg: -x,     type: boolean,  name: exit,      hidden: 1 }
+#    { arg: --nt,   type: boolean,  name: nothreads, description: Disable threading/gtk_idle UI. }
+# version: 2.7
+# priority: core
+# depends: pluginconf >= 0.1, os, json, re, zlib, pkgutil
+#
+# Ties together the global conf.* object. It's typically used
+# in the main application and modules with:
+#
+#   from config import *
 #
-# In the main application or module files which need access
-# to a global conf object, just import this module as follows:
+# The underlying ConfigDict class is already instantiated and
+# imported as `conf` then.
 #
-#   from config import conf
+# With .save() or .load() it handles storage as JSON. Both
+# utility functions are also used for other cache files.
+# More specific config stores are available per .netrc(),
+# and .init_args().
 #
-# Here conf is already an instantiation of the underlying
-# Config class.
+# Whereas plugin utility code is available per plugin_meta(),
+# module_list(), and get_data(). There's a prepared function
+# for add_plugin_config() on initialization.
 #
+# Also provides a simple logging interface with log.TYPE(...),
+# which is also pre-instantiated.
 
 
+from __future__ import print_function
 import os
 import sys
 import json
 import gzip
 import platform
+import re
+from compat2and3 import gzip_decode, find_executable
+import zlib
+import zipfile
+import inspect
+import pkgutil
+import argparse
+from pluginconf import plugin_meta, module_list, get_data
+import pluginconf
 
 
 # export symbols
-__all__ = ["conf", "__print__", "dbg"]
+__all__ = ["conf", "log", "plugin_meta", "module_list", "get_data", "find_executable"]
 
 
-
-#-- create a single instance of config object
+#-- create a stub instance of config object
 conf = object()
 
+# separate instance of netrc, if needed
+netrc = None
+
+
 
-#-- global configuration data               ---------------------------------------------
+
+# Global configuration store
+#
+# Autointializes itself on startup, makes conf.vars available.
+# Also provides .load() and .save() for JSON data/cache files.
+#
 class ConfigDict(dict):
 
+    args = {}
 
-        # start
-        def __init__(self):
+    # start
+    def __init__(self):
+    
+        # object==dict means conf.var is conf["var"]
+        self.__dict__ = self
+
+        # prepare
+        self.defaults()
+        self.xdg()
         
-            # object==dict means conf.var is conf["var"]
-            self.__dict__ = self  # let's pray this won't leak memory due to recursion issues
-
-            # prepare
-            self.defaults()
-            self.xdg()
-            
-            # runtime
-            dirs = ["/usr/share/streamtuner2", "/usr/local/share/streamtuner2", sys.path[0], "."]
-            self.share = [d for d in dirs if os.path.exists(d)][0]
-            
-            # settings from last session
-            last = self.load("settings")
-            if (last):
-                self.update(last)
-                self.migrate()
-            # store defaults in file
-            else:
-                self.save("settings")
-                self.firstrun = 1
-
-
-        # some defaults
-        def defaults(self):
-            self.play = {
-               "audio/mpeg": "audacious ",	# %u for url to .pls, %g for downloaded .m3u
-               "audio/ogg": "audacious ",
-               "audio/*": "audacious ",
-               "video/youtube": "totem $(youtube-dl -g %srv)",
-               "video/*": "vlc --one-instance %srv",
-               "url/http": "sensible-browser",
-            }
-            self.record = {
-               "audio/*": "xterm -e streamripper %srv",   # -d /home/***USERNAME***/Musik
-               "video/youtube": "xterm -e \"youtube-dl %srv\"",
-            }
-            self.plugins = {
-                "bookmarks": 1, # built-in plugin, cannot be disabled
-                "shoutcast": 1,
-                "xiph": 1,
-                "modarchive": 0, # disable per default
-                "file": 0,      # disable per default
-                "punkcast": 0,  # disable per default
-                "history": 0,
-                "basicch": 0,   # ceased
-                "tv": 0,        # ceased
-            }
-            self.tmp = os.environ.get("TEMP", "/tmp")
-            self.max_streams = "500"
-            self.show_bookmarks = 1
-            self.show_favicons = 1
-            self.load_favicon = 1
-            self.heuristic_bookmark_update = 0
-            self.retain_deleted = 0
-            self.auto_save_appstate = 1
-            self.theme = "" #"MountainDew"
-            self.channel_order = "shoutcast, xiph, internet_radio, jamendo, myoggradio, .."
-            self.reuse_m3u = 1
-            self.google_homepage = 0
-            self.windows = platform.system()=="Windows"
-            self.pyquery = 1
-            self.debug = 0
-
-            
-        # each plugin has a .config dict list, we add defaults here
-        def add_plugin_defaults(self, config, module=""):
+        # runtime
+        self.share = os.path.dirname(os.path.abspath(__file__))
         
-            # options
-            for opt in config:
-                if ("name" in opt) and ("value" in opt) and (opt["name"] not in vars(self)):
-                    self.__dict__[opt["name"]] = opt["value"]
-
-            # plugin state
-            if module and module not in conf.plugins:
-                 conf.plugins[module] = 1
+        # settings from last session
+        last = self.load("settings")
+        if (last):
+            if "share" in last:
+                del last["share"]
+            self.update(last)
+            self.migrate()
+        # store defaults in file
+        else:
+            self.save("settings")
+            self.firstrun = 1
+
+        # temporary files
+        if not os.path.exists(self.tmp):
+            os.mkdir(self.tmp)
+        
+        # add argv
+        self.args = self.init_args(argparse.ArgumentParser())
+        self.apply_args(self.args)
+
+
+    # some defaults
+    def defaults(self):
+        self.play = {
+           "audio/mpeg": self.find_player(),
+           "audio/ogg": self.find_player(),
+           "audio/*": self.find_player(),
+           "video/youtube": self.find_player(typ="video") + " $(youtube-dl -g %srv)",
+           "video/*": self.find_player(typ="video", default="vlc"),
+           "url/http": self.find_player(typ="browser"),
+        }
+        self.record = {
+           "audio/*": self.find_player(typ="xterm") + " -e \"streamripper %srv\"",   # -d /home/***USERNAME***/Musik
+           "video/youtube": self.find_player(typ="xterm") + " -e \"youtube-dl %srv\"",
+        }
+        # Presets are redundant now. On first startup the `priority:` field of each plugin is checked.
+        self.plugins = {
+             # core plugins, cannot be disabled anyway
+            "bookmarks": 1,
+            "search": 1,
+            "streamedit": 1,
+            "configwin": 1,
+        }
+        self.tmp = os.environ.get("TEMP", "/tmp") + "/streamtuner2"
+        self.nothreads = 0
+        self.max_streams = "500"
+        self.show_bookmarks = 1
+        self.show_favicons = 1
+        self.load_favicon = 1
+        self.heuristic_bookmark_update = 0
+        self.retain_deleted = 0
+        self.auto_save_appstate = 1
+        self.auto_save_stations = 0
+        self.reuse_m3u = 1
+        self.playlist_asis = 0
+        self.window_title = 0
+        self.google_homepage = 0
+        self.windows = platform.system()=="Windows"
+        self.pyquery = 1
+        self.debug = 0
+
+    # update old setting names
+    def migrate(self):
+        # 2.1.1
+        if "audio/mp3" in self.play:
+            self.play["audio/mpeg"] = self.play["audio/mp3"]
+            del self.play["audio/mp3"]
+        # 2.1.7
+        if self.tmp == "/tmp":
+            self.tmp = "/tmp/streamtuner2"
+        
+    # Add plugin names and default config: options from each .meta
+    def add_plugin_defaults(self, meta, name):
+        pluginconf.add_plugin_defaults(self, self.plugins, meta, name)
+
+
+    # look at system binaries for standard audio players
+    def find_player(self, typ="audio", default="xdg-open"):
+        players = {
+           "audio": ["audacious %m3u", "audacious2", "exaile %pls", "xmms2", "banshee", "amarok %pls", "clementine", "qmmp", "quodlibet", "aqualung", "mp3blaster %m3u", "vlc --one-instance", "totem"],
+           "video": ["umplayer", "xnoise", "gxine", "totem", "vlc --one-instance", "parole", "smplayer", "gnome-media-player", "xine", "bangarang"],
+           "browser": ["opera", "midori", "sensible-browser"],
+           "xterm": ["xfce4-terminal", "x-termina-emulator", "gnome-terminal", "xterm", "rxvt"],
+        }
+        for bin in players[typ]:
+            if find_executable(bin.split()[0]):
+                return bin
+        return default
 
         
-            
-        # http://standards.freedesktop.org/basedir-spec/basedir-spec-0.6.html
-        def xdg(self):
-            home = os.environ.get("HOME", self.tmp)
-            config = os.environ.get("XDG_CONFIG_HOME", os.environ.get("APPDATA", home+"/.config"))
-            
-            # storage dir
-            self.dir = config + "/streamtuner2"
-            
-            # create if necessary
-            if (not os.path.exists(self.dir)):
-                os.makedirs(self.dir)
-           
-
-        # store some configuration list/dict into a file                
-        def save(self, name="settings", data=None, gz=0, nice=0):
-            name = name + ".json"
-            if (data is None):
-                data = dict(self.__dict__)  # ANOTHER WORKAROUND: typecast to plain dict(), else json filter_data sees it as object and str()s it
-                nice = 1
-            # check for subdir
-            if (name.find("/") > 0):
-                subdir = name[0:name.find("/")]
-                subdir = self.dir + "/" + subdir
-                if (not os.path.exists(subdir)):
-                    os.mkdir(subdir)
-                    open(subdir+"/.nobackup", "w").close()
-            # write                        
-            file = self.dir + "/" + name
+    # http://standards.freedesktop.org/basedir-spec/basedir-spec-0.6.html
+    def xdg(self, path="/streamtuner2"):
+        home = os.environ.get("HOME", self.tmp)
+        config = os.environ.get("XDG_CONFIG_HOME", os.environ.get("APPDATA", home+"/.config"))
+        
+        # storage dir
+        self.dir = config + path
+        
+        # create if necessary
+        if (not os.path.exists(self.dir)):
+            os.makedirs(self.dir)
+       
+
+    # store some configuration list/dict into a file                
+    def save(self, name="settings", data=None, gz=0, nice=0):
+        name = name + ".json"
+        if (data is None):
+            data = vars(self)
+            if "args" in data:
+                data.pop("args")
+            nice = 1
+        # check for subdir
+        if (name.find("/") > 0):
+            subdir = name[0:name.find("/")]
+            subdir = self.dir + "/" + subdir
+            if (not os.path.exists(subdir)):
+                os.mkdir(subdir)
+                open(subdir+"/.nobackup", "w").close()
+        # target filename
+        file = self.dir + "/" + name
+        # encode as JSON
+        try:
+            data = json.dumps(data, indent=(4 if nice else None), sort_keys=True)
+        except Exception as e:
+            log.ERR("JSON encoding failed", e)
+            return
+        # .gz or normal file
+        if gz:
+            f = gzip.open(file+".gz", "w")
+            if os.path.exists(file):
+                os.unlink(file)
+        else:
+            f = open(file, "w")
+        # write
+        try:
+            f.write(data.encode("utf-8"))
+        except TypeError as e:
+            f.write(data)  # Python3 sometimes wants to write strings rather than bytes
+        f.close()
+
+    # retrieve data from config file            
+    def load(self, name):
+        name = name + ".json"
+        file = self.dir + "/" + name
+        try:
             # .gz or normal file
-            if gz:
-                f = gzip.open(file+".gz", "w")
-                if os.path.exists(file):
-                    os.unlink(file)
+            if os.path.exists(file + ".gz"):
+                f = gzip.open(file + ".gz", "rt")
+            elif os.path.exists(file):
+                f = open(file, "rt")
             else:
-                f = open(file, "w")
-            # encode
-            data = json.dumps(data, indent=(4 if nice else None))
-            try:
-                f.write(data.encode("utf-8"))
-            except TypeError as e:
-                f.write(data)  # Python3 sometimes wants to write strings rather than bytes
+                return # file not found
+            # decode
+            r = json.load(f)
             f.close()
-
-
-        # retrieve data from config file            
-        def load(self, name):
-            name = name + ".json"
-            file = self.dir + "/" + name
+            return r
+        except Exception as e:
+            log.ERR("JSON parsing error (in "+name+")", e)
+        
+    # recursive dict update
+    def update(self, with_new_data):
+        for key,value in with_new_data.items():
+            if type(value) == dict:
+                self[key].update(value)
+            else:
+                self[key] = value
+        # descends into sub-dicts instead of wiping them with subkeys
+
+    # Shortcut to `state.json` loading (currently selected categories etc.)
+    def state(self, module=None, d={}):
+        if not d:
+            d.update(conf.load("state") or {})
+        if module:
+            return d.get(module, {})
+        return d
+
+    # standard user account storage in ~/.netrc or less standard but contemporarily in ~/.config/netrc
+    def netrc(self, varhosts=("shoutcast.com")):
+        global netrc
+        if not netrc:
+            netrc = {}
             try:
-                # .gz or normal file
-                if os.path.exists(file + ".gz"):
-                    f = gzip.open(file + ".gz", "rt")
-                elif os.path.exists(file):
-                    f = open(file, "rt")
-                else:
-                    return # file not found
-                # decode
-                r = json.load(f)
-                f.close()
-                return r
-            except Exception as e:
-                print(dbg.ERR, "PSON parsing error (in "+name+")", e)
-            
-
-        # recursive dict update
-        def update(self, with_new_data):
-            for key,value in with_new_data.items():
-                if type(value) == dict:
-                    self[key].update(value)
-                else:
-                    self[key] = value
-            # descends into sub-dicts instead of wiping them with subkeys
-
-        # update old setting names
-        def migrate(self):
-            # 2.1.1
-            if "audio/mp3" in self.play:
-                self.play["audio/mpeg"] = self.play["audio/mp3"]
-                del self.play["audio/mp3"]
-
-             
-        # check for existing filename in directory list
-        def find_in_dirs(self, dirs, file):
-            for d in dirs:
-                if os.path.exists(d+"/"+file):
-                    return d+"/"+file
-
-
-
-
-# wrapper for all print statements
-def __print__(*args):
-    if conf.debug:
-        print(" ".join([str(a) for a in args]))
-
-
-# error colorization
-dbg = type('obj', (object,), {
-    "ERR":  r"[ERR]",  # red    ERROR
-    "INIT": r"[INIT]", # red    INIT ERROR
-    "PROC": r"[PROC]", # green  PROCESS
-    "CONF": r"[CONF]", # brown  CONFIG DATA
-    "UI":   r"[UI]",   # blue   USER INTERFACE BEHAVIOUR
-    "HTTP": r"[HTTP]", # magenta HTTP REQUEST
-    "DATA": r"[DATA]", # cyan   DATA
-    "INFO": r"[INFO]", # gray   INFO
-    "STAT": r"[STATE]", # gray  CONFIG STATE
-})
-
-
-   
-#-- actually fill global conf instance
+                from netrc import netrc as parser
+                try:
+                     netrc = parser().hosts
+                except:
+                     netrc = parser(self.xdg() + "/netrc").hosts
+            except:
+                log.STAT("No .netrc")
+        for server in varhosts:
+            if server in netrc:
+                return netrc[server]
+
+    # Use config:-style definitions for argv extraction,
+    # such as: { arg: -D, name: debug, type: bool }
+    def init_args(self, ap):
+        for opt in plugin_meta(frame=1).get("config"):
+            kwargs = pluginconf.argparse_map(opt)
+            if kwargs:
+                #print(kwargs)
+                ap.add_argument(*kwargs.pop("args"), **kwargs)
+        return ap.parse_args()
+
+    # Copy args fields into conf. dict
+    def apply_args(self, args):
+        self.debug = args.debug
+        self.nothreads = args.nothreads
+        if args.exit:
+            sys.exit(1)
+        for p_id in (args.disable or []):
+            self.plugins[p_id] = 0
+        for p_id in (args.enable or []):
+            self.plugins[p_id] = 1
+
+
+# Simplified print wrapper: `log.err(...)`
+class log_printer(object):
+
+    # Wrapper
+    method = None
+    def __getattr__(self, name):
+        self.method = name
+        return self.log_print
+    
+    # Printer
+    def log_print(self, *args, **kwargs):
+        # debug level
+        method = self.method.upper()
+        if method != "ERR":
+            if "debug" in conf and not conf.debug:
+                return
+        # color/prefix
+        method = r"[{}[{}]".format(self.colors.get(method.split("_")[0], "47m"), method)
+        # output
+        print(method + " " + " ".join([str(a) for a in args]), file=sys.stderr)
+
+    # Colors
+    colors = {
+        "ERR":  "31m",          # red    ERROR
+        "INIT": "38;5;196m",    # red    INIT ERROR
+        "WARN": "38;5;208m",    # orange WARNING
+        "EXEC": "38;5;66m",     # green  EXEC
+        "PROC": "32m",          # green  PROCESS
+        "FAVICON":"38;5;119m",  # green  FAVICON
+        "CONF": "33m",          # brown  CONFIG DATA
+        "DND":  "1;33;41m",     # yl/red DRAG'N'DROP
+        "UI":   "34m",          # blue   USER INTERFACE BEHAVIOUR
+        "UIKIT":"38;5;222;48;5;235m", # THREAD/UIKIT/IDLE TASKS
+        "APPSTATE":"38;5;200m", # magenta APPSTATE RESTORE
+        "HTTP": "35m",          # magenta HTTP REQUEST
+        "DATA": "36m",          # cyan   DATA
+        "INFO": "38;5;238m",    # lgray  INFO
+        "STAT": "37m",          # gray   CONFIG STATE
+    }
+
+# instantiate right away
+log = log_printer()
+
+
+# populate global conf instance
 conf = ConfigDict()
-if conf:
-    __print__(dbg.PROC, "ConfigDict() initialized")
-
-
+log.PROC("ConfigDict() initialized")
 
+# tie in pluginconf.*
+pluginconf.log_ERR = log.ERR
+pluginconf.module_base = "config"
+pluginconf.plugin_base = ["channels", "plugins"]#, conf.share+"/channels", conf.dir+"/plugins"]
 
diff --git a/contrib/bieber.py b/contrib/bieber.py
new file mode 100644
index 0000000..e681903
--- /dev/null
+++ b/contrib/bieber.py
@@ -0,0 +1,80 @@
+# api: streamtuner2
+# title: Bieber
+# description: Bieber music
+# url: http://www.justinbiebermusic.com/
+# version: 5.2
+# type: channel
+# category: example
+# config: 
+#     { "name": "bieber_filter", "type": "text", "value": "BIEBERBLAST", "description": "So and so." }
+# priority: joke
+#
+# This was an entertaining test plugin for development. (Compound function
+# went into the search feature, and the compound channel plugin obviously.)
+#
+# It's however a very simple plugin, and hence a good basis for writing
+# your own extensions.
+
+
+from channels import *
+
+
+# Bieber music filter plugin
+class bieber(ChannelPlugin):
+
+
+    # config data
+    config = [
+    ]
+    
+
+    # category map
+    categories = ['the Biebs']
+    default = 'the Biebs'
+    current = 'the Biebs'
+
+
+
+
+    # static category list
+    def update_categories(self):
+        # nothing to do here
+        pass
+
+
+    # just runs over all channel plugins, and scans their streams{} for matching entries
+    def update_streams(self, cat, force=0):
+
+        # result list
+        entries = []
+        
+        # kill our current list, so we won't find our own entries
+        self.streams = {}
+        
+        # swamp through all plugins
+        for name,p in self.parent.channels.iteritems():
+            #print "bieberquest: channel", name
+
+            # subcategories in plugins        
+            for cat,stations in p.streams.iteritems():
+                #print "   bq cat", cat
+            
+                # station entries
+                for row in stations:
+
+                    # collect text fields, do some typecasting, lowercasing
+                    text = "|".join([str(e) for e in row.values()])
+                    text = text.lower()
+
+                    # compare
+                    if text.find("bieb") >= 0:
+                    
+                        # add to result list
+                        row["genre"] = name + ": " + row.get("genre", "")
+                        entries.append(row)
+
+        # return final rows list
+        return entries
+        
+
+
diff --git a/contrib/cfg_soundcloud.py b/contrib/cfg_soundcloud.py
new file mode 100644
index 0000000..17ff24b
--- /dev/null
+++ b/contrib/cfg_soundcloud.py
@@ -0,0 +1,26 @@
+# api: streamtuner2
+# title: Soundcloud player
+# description: Just sets a new configuration option for `soundcli`
+# version: -1
+# url: http://elephly.net/soundcli.html
+# priority: once
+# type: config
+# category: player
+# 
+# You only need to run this plugin once. It just adds an
+# entry for "audio/soundcloud" in the player config list.
+
+from config import *
+
+# just once
+class cfg_soundcloud(object):
+
+    module = "cfg_soundcloud"
+    fmt = "audio/soundcloud"
+    cmd = "xterm -e \"soundcli stream %srv\""
+
+    def __init__(self, *a, **kw):
+        conf.play.setdefault(self.fmt, self.cmd)
+        conf.plugins[self.module] = False
+
+
diff --git a/contrib/compound.py b/contrib/compound.py
new file mode 100644
index 0000000..43cbb51
--- /dev/null
+++ b/contrib/compound.py
@@ -0,0 +1,154 @@
+# encoding: UTF-8
+# api: streamtuner2
+# title: Compound★
+# description: combines station lists from multiple channels
+# version: 0.2
+# type: channel
+# category: virtual
+# url: http://fossil.include-once.org/streamtuner2/
+# config: -
+#    { name: compound_channels, type: text, value: "shoutcast, internet_radio, xiph, surfmusik", description: "Channels to merge station lists from." }
+#    { name: compound_genres, type: text, value: "Top 40", description: "Extract specific/favourite categories." }
+#    { name: compound_intersect, type: boolean, value: 1, description: "Intersect genres which exist in 2 or more channels." }
+# priority: unsupported
+# png:
+#   iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3wUFCigotf34ngAABGlJREFUOMttj++LVFUchz/f7znn3jtzZ+buzuzszv4SbbdVUTNp
+#   o8DqXUFsUEFBBEFSr/ov8h8JJOhNWlFQhggJYWKaGZrruGW26e44O7/nztx77jmnF5b2oufl58XD86HuG7uQGzTRzU1i6tQmjh8/vhxF0dtpmq612+2VZrOZ77Tb/f5gcGVnZ+dEvV7/9MyZM3GtVoPWGkopZFmG3bt3AwBkxrn9iSq9yiLX+PqLz0qrq6vH+v3+wfX1de50OvH09HS2uLhYjOP4aKVSebZQKDwfBEFda50YY7aJaNkYcw7AOQCQ
+#   rsgrEPigO7ekawuL1f4wLv5w/jyIOVtbW7vw+MpKJKWq9nvdX8MwfOn69evvJ0kSFwqFTQDXALwIwD4U2orSSRj09Auv747KU+GFi98gjuPOu8eOcSmQQ+/iR2CjPbf35R2bD52UEv9gATjnnAHg/h0Zk5yOapVRsHREpWmK+o3r8ZMHls9GExPG6LHzNk62/PonTU5aKYiclDITQmTOPXQQ/oO0kzJNaWLohxENW0PYdJAuzZeTNM2YWMJM5Xsu
+#   cwK+lwrmpFqt/hyGYRUA43+QZta3zlDiYKw1BuWZXaXK4sFXtu78qAvi/iCclSmsSuALx0KkURTdY+bIOScexDHwqBYyOazyznYrjfZVQ1jBvn37uTYzW+x3Lg/vbX1sa4cwJaSskLExnCDnDD24SyBuGhZZ5uDso8IiicHABidPfcmjQQ2HDuwHM6M8cyi/0ZybbJduyyCQYTq4ZATfHRpdSoQ5CoBgghNDk/ulY7J8/FDYYlBzKNX9plajfgM3
+#   byl0u10EfokSlL1te5sDCGn9s5q9Xkzj5SQazxqA0OUdOO6xpQyAA5OE3M6IxiWHoGyMjpWI4xiXfrqMPUsL6JrYNpmlchBwQsApAW6iUfiwD4KwGdyDnfmd196D9t+EbBiwDS1PPde7O/g8V56bnS212x1c/eqKa8m4MtxFXJyzSgIeFBQypyyPFADBJudDkrJjDoZ96cfjrpYNR6QtKToyvjlf3Qnmo+QpvzXq9aeuFc16YeWvb/cQLzWGKqI9
+#   ak7m9e+5FXQnayiOTW5PNidmOcg2c0tRDQd8O7EhGwAlICFSkcfUyPtenU65Gf1pn+7sFXMT2/bGRORuLVZ0T62yb32MvCcoU8LM9nrxzFbFWfKoL2pCoEqONmTDEY0cCS8RJRgoLYXIs5CxE8L3rDHPbCfuMI/Cq9OtpBrXvIF/V5dHkYkSI6ygEYjzEjpnXGMUj2LZ0OChYJXXnIMDj0EUOaKOIy44Ym2ZdaRNcW+301nozJS2SvEoGoeA43wr
+#   pJ4jjjzbX4ixXb9Rz+TOmMZ9QbeLDm0HYGSoZ9ndaloSCeFOCoTaUiED/tjJWGSgjdhS1wFUYLfVMuTSnKk/tuna84vzTnpXvXPlwHur2AoIAJJ8JoqdQPOmVPmBl2nPUiYN53uepr+UKnR9HeQD4eAQDFVGZanUgNu/bdfHpy9+h78Bc2RGfJQqXS8AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTUtMDUtMDVUMTI6NDA6MTIrMDI6MDDJlQYgAAAA
+#   JXRFWHRkYXRlOm1vZGlmeQAyMDE1LTA1LTA1VDEyOjQwOjEyKzAyOjAwuMi+nAAAAABJRU5ErkJggg==
+# png-orig: https://openclipart.org/detail/215936/audio
+# 
+# Use this plugin to mix categories and their station entries from two
+# or more different directory channels. It merges the lists, albeit in
+# a simplistic way.
+#
+# Per default it lists only selected categories. But can be configured to
+# merge just intersectioning categories/genres. Entry order is determined
+# from station occourence count in channels AND their individual listener
+# count (where available) using some guesswork to eliminate duplicates.
+
+
+from channels import *
+import action
+from config import conf
+
+
+# Merges categories from different channels
+class compound (ChannelPlugin):
+
+    # runtime options
+    has_search = False
+    listformat = "href"  # row entries will contain exact `listformat` classification
+    audioformat = "audio/*"   # same as for correct encoding mime type
+    
+    # references
+    parent = None
+    
+    # data
+    streams = {}
+    categories = []
+    
+    
+    
+    # Which categories
+    def update_categories(self):
+
+        # As-is category list
+        cats = self.split(conf.compound_genres)
+        self.categories = [c for c in cats if c != "x"]
+        
+        # Genre intersection requested
+        if conf.compound_intersect:
+            once = []
+            for chan in self.channels():
+                for add in self.flatten(self.parent.channels[chan].categories):
+                    # second occourence in two channels
+                    if add.lower() in once:
+                        if add not in self.categories:
+                            self.categories.append(add)
+                    else: #if add not in self.categories:
+                        once.append(add.lower())
+                        
+        
+    # flatten our two-level categories list
+    def flatten(self, a):
+        return [i for sub in a for i in (sub if type(sub)==list else [sub])]
+
+
+    # break up name lists        
+    def split(self, s):
+        return [s.strip() for s in s.split(",")]
+
+    # List of channels
+    def channels(self):
+
+        # get list
+        ls = self.split(conf.compound_channels)
+      
+        # resolve "*"
+        if "*" in ls:
+            ls = self.parent.channel_names  # includes bookmarks
+            if self.module in ls:
+                ls.remove(self.module)	    # but not compound
+
+        return ls
+          
+          
+    # Combine stream lists
+    def update_streams(self, cat):
+        r = []
+        have = []
+    
+        # Look through channels
+        if cat in self.categories:
+            for cn in self.channels():
+            
+                # Get channel, refresh list
+                c = self.parent.channels.get(cn)
+                if not cn:
+                    continue # skip misnamed pugins
+                
+                # 
+                for row in self.get_streams(c, cat):
+
+                    # copy
+                    row = dict(row)
+                    
+                    #row["listeners"] = 1000 + row.get("listeners", 0) / 10
+                    row["extra"] = cn  # or genre?
+                    row["listformat"] = c.listformat
+
+                    # duplicates                    
+                    if row["title"].lower() in have or row["url"] in have:
+                        for i,cmp in enumerate(r):
+                            if cmp["title"].lower()==row["title"].lower() or cmp["url"].find(row["url"])>=0:
+                                r[i]["listeners"] = row.get("listeners",0) + 5000
+                        pass
+                    else:
+                        r.append(row)
+                        have.append(row["title"].lower())  # we're comparing lowercase titles
+                        have.append(row["url"][:row["url"].find("http://")])  # save last http:// part (internet-radio redirects to shoutcast urls)
+                        
+        # sort by listeners
+        r = sorted(r, key=lambda x: -x.get("listeners", 0))
+        return r
+
+
+    # extract station list from other channel plugin    
+    def get_streams(self, c, cat):
+
+        # if empty?
+        #c.load(cat)
+
+        return c.streams.get(cat) \
+            or c.update_streams(cat.replace(" ","")) \
+            or []
+
+
+
+
+    
\ No newline at end of file
diff --git a/contrib/delicast.py b/contrib/delicast.py
new file mode 100644
index 0000000..bd06daf
--- /dev/null
+++ b/contrib/delicast.py
@@ -0,0 +1,92 @@
+# encoding: UTF-8
+# api: streamtuner2
+# title: Delicast
+# description: directory of streaming media
+# url: http://delicast.com/
+# version: 0.3
+# type: channel
+# category: radio
+# config: -
+# png:
+#    iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAA
+#    AmJLR0QA/4ePzL8AAAAHdElNRQffBB4UJAsX77G0AAAANUlEQVQY02OwQwMMdv/BAEUASCFEoAIIEZIEIGYjBCAUwpb/6O5ACEABGQJ2cFsQIlB3oAEA6iVo+vl+BbQA
+#    AAAldEVYdGRhdGU6Y3JlYXRlADIwMTUtMDQtMzBUMjI6MzY6MDMrMDI6MDAFLUvfAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE1LTA0LTMwVDIyOjM2OjAzKzAyOjAwdHDz
+#    YwAAAABJRU5ErkJggg==
+# priority: rare
+#
+# Just a standard genre/country radio directory. Not very
+# suitable for extraction actually, because it requires a
+# second page request for uncovering the streaming URLs.
+#
+# This is done in row(), so only happens on playback. Which
+# of course won't allow for exporting/bookmarking etc.
+# And the server is somewhat unresponsive at times. Only one
+# page (50 stations) is fetched.
+
+
+import re
+from config import *
+from channels import *
+import ahttp
+
+
+# Delayed streaming URL discovery
+class delicast (ChannelPlugin):
+
+    # control flags
+    has_search = False
+    listformat = "srv"
+    audioformat = "audio/mpeg"
+    titles = dict(listeners=False, bitrate=False, playing="Location")
+
+    categories = ["60s", "70s", "80s", "90s", "Alternative", "Blues",
+    "Chillout", "Christian", "Classical", "Community", "Country", "Culture",
+    "Dance", "Disco", "Easy listening", "Electronic", "Folk", "Funk",
+    "Gospel", "Hiphop", "House Indie", "Information", "Jazz", "Latin",
+    "Lounge", "Love", "Metal", "Oldies", "Pop", "R n b", "Reggae", "Rock",
+    "Romantic", "Soul", "Sports", "Student", "Talk", "Techno", "Trance",
+    "Urban", "World music"]
+
+
+    # static
+    def update_categories(self):
+        pass
+
+
+    # Fetch entries
+    def update_streams(self, cat, search=None):
+
+        ucat = re.sub("\W+", "-", cat.lower())
+        html = ahttp.get("http://delicast.com/radio/" + ucat)
+
+        r = []
+        for tr in html.split("<tr>")[1:]:
+            ls = re.findall("""
+                "pStop\(\)" \s href="(.*?)">
+                .*?
+                pics/((?!play_triangle)\w+)
+                .*?
+                120%'>([^<>]+)</span>
+            """, tr, re.X|re.S)
+            if len(ls):
+                homepage, country, title = ls[0]
+                r.append(dict(
+                    homepage = homepage,
+                    playing = country,
+                    title = unhtml(title),
+                    url = "urn:delicast",
+                    genre = cat,
+             #      genre = unhtml(tags),
+                ))
+        return r
+      
+
+    # Update `url` on station data access (incurs a delay for playing or recording)
+    def row(self):
+        r = ChannelPlugin.row(self)
+        if r.get("url") == "urn:delicast":
+            html = ahttp.get(r["homepage"])
+            ls = re.findall("^var url = \"(.+)\";", html, re.M)
+            r["url"] = ls[0]
+        return r
+
diff --git a/contrib/dev_console.py b/contrib/dev_console.py
new file mode 100644
index 0000000..af5793d
--- /dev/null
+++ b/contrib/dev_console.py
@@ -0,0 +1,23 @@
+# http://www.pythoncentral.io/embed-interactive-python-interpreter-console/
+
+from code import InteractiveConsole
+from imp import new_module
+ 
+class dev_console(InteractiveConsole):
+ 
+    def __init__(self, parent=None, names=None):
+        names = names or {}
+        names['main'] = parent
+        names['console'] = self
+        InteractiveConsole.__init__(self, names)
+        self.superspace = new_module('superspace')
+ 
+    def enter(self, source):
+        source = self.preprocess(source)
+        self.runcode(source)
+ 
+    @staticmethod
+    def preprocess(source):
+        return source
+ 
+#code.interact()
diff --git a/contrib/dev_faulthandler.py b/contrib/dev_faulthandler.py
new file mode 100644
index 0000000..fc1db4e
--- /dev/null
+++ b/contrib/dev_faulthandler.py
@@ -0,0 +1,23 @@
+# api: python
+# title: faulthandler
+# description: capture fatal errors / memory fauls / Gtk and threading bugs
+# version: -1
+# type: io
+# category: debug
+# priority: development
+#
+# Debug Gtk/glibs/python/threading crashes.
+#
+# * Gdk:ERROR:/build/buildd/gtk+2.0-2.24.23/gdk/gdkregion-generic.c:1110:miUnionNonO:
+#   assertion failed: (y1 < y2)
+# * foobar: double free or corruption (fasttop): 0x...
+
+
+import faulthandler
+faulthandler.enable()
+   # file=open("/tmp/st2.log", "a+"), all_threads=True
+
+class dev_faulthandler(object):
+    def __init__(sefl, *x, **kw):
+        pass
+
diff --git a/contrib/di.py b/contrib/di.py
new file mode 100644
index 0000000..c59f99a
--- /dev/null
+++ b/contrib/di.py
@@ -0,0 +1,56 @@
+# encoding: UTF-8
+# api: streamtuner2
+# title: di.fm
+# description: "Digitally Imported", electronic music stations, + sky.fm and jazzradio
+# url: http://di.fm/
+# version: 0.2
+# type: channel
+# category: radio
+# config: -
+# png:
+#   iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAPhJREFUOI3Fkj9OAkEYxX87uyyDgSxDYUyMV/AgNtzAkngC7Ci4AB1rTbyADYml8QY2tiZQmC34o4Qs
+#   CDMUZAnRIQMmhNfNfN9733vJg1PDK7RMG6gB/j/4sVdomYVIh743n+w4ITBhEZ2PEOmQbM+ERbRUywDwvfmE78aVlT9ONffPIx7f1+Rsr9TsgVS+cHmMpOChWqEsptZ5kNkpNXtWcr9+CcD1RY7X
+#   j5ldYNvaTSfhJYkwQZ7x11/R33BGcCGwqk4TYG37YIHu7bl18e3zx/q/V4S7pwEjfWaduYvEpjQ7ixRrqWpIFbqcaKlAquy5BOJ9EhwXK0vYVWJw1aEpAAAAAElFTkSuQmCC
+# priority: extra
+#
+# Just prints the public list of RadioTunes stations.
+# Premium entries are available, but not fetched here.
+# Public stations use a 64kbit/s AACP audio encoding.
+#
+# Alternative JSON list: http://listen.di.fm/public3
+# Required unpacking a complex category association,
+# and only adds a few more descriptions.
+
+
+from config import *
+from channels import *
+import ahttp
+import json
+
+
+# di.fm
+class di (ChannelPlugin):
+
+    # control flags
+    has_search = False
+    listformat = "pls"
+    audioformat = "audio/aac"
+    titles = dict(listeners=False, bitrate=False, playing=False)
+
+    categories = ["di.fm", "sky.fm", "jazzradio.com"]
+               # sky.fm is an alias of "radiotunes.com"
+
+    # static
+    def update_categories(self):
+        pass
+
+    # ignore category, because there is just but one
+    def update_streams(self, cat, search=None):
+        ls = json.loads(ahttp.get("http://listen.{}/public1".format(cat)))
+        rows = [
+           dict(genre=row["key"], title=row["name"], url=row["playlist"], id=row["key"],
+                homepage="http://www.{}/{}".format(cat, row["key"]), bitrate=64)
+           for row in ls
+        ]
+        return rows    
+
diff --git a/contrib/eighttracks.py b/contrib/eighttracks.py
new file mode 100644
index 0000000..bac9bb3
--- /dev/null
+++ b/contrib/eighttracks.py
@@ -0,0 +1,96 @@
+# encoding: UTF-8
+# api: streamtuner2
+# title: 8tracks
+# description: radio created by people, not algorithms
+# version: 0.1
+# type: channel
+# category: collection
+# config:
+#   { name: eighttracks_apikey,  value: "",  type: text,  description: Custom API access key. }
+#   { name: eighttracks_safe,  value: 1,  type: bool,  description: Filter explicit/NSFW tracks. }
+# priority: optional
+# url: http://8tracks.com/
+# documentation: https://8tracks.com/developers
+#
+# Requires a pingback on playing a track
+#  → which is near impossible without player control.
+#  → Automatic/implied notifications could work.
+#  → Or checking via dbus/mpris even (less assertable).
+#  → Else a customized playlist export with the reporting URL as
+#    faux first entry even.
+#  → Or an external URL redirector just (api.i-o/cache service).
+#
+
+import json
+import re
+from config import *
+from channels import *
+import ahttp
+
+
+# 8tracks mix tapes
+class eighttracks (ChannelPlugin):
+
+    # description
+    has_search = False
+    listformat = "pls"
+    titles = dict(listeners=False, playing="Location")
+
+    categories = ["none"]
+    catmap = {}
+    
+    base = "http://8tracks.com/mixes/1?format=json&api_key=%s" # or X-Api-Key: header
+    cid = ""
+
+
+    # Mix types, genres, etc?
+    def update_categories(self):
+        self.categories = []
+
+
+    # Excerpt newest or most popular
+    def update_streams(self, cat, search=None):
+        row = {
+           "url": "urn:8tracks",
+           "id": "$mix_id-12345",
+        }
+        return []
+
+    
+    # Craft a stream URL with play token
+    def row(self):
+        self.status("Retrieving playback token...")
+        r = ChannelPlugin.row(self)
+        token = self.api("sets/new")["play_token"]
+        track = self.api("sets/{}/play".format(r["id"]))
+        r["url"] = track["set"]["track"]["track_file_stream_url"]
+
+    # Call after .play()    
+    def report(self, mixid)
+        self.api("sets/{}/report".format(mixid), {"track_id": mixid, "mix_id": mixid})
+    
+    #def play(self):
+    #    ChannelPlugin.play(self)
+    #    self.report()
+
+
+    # Patch API url together, send request, decode JSON and whathaveyou
+    def api(self, method="mix_sets/all", *params):
+        params.update({
+            "api_version": 3,
+            "api_key": conf.eighttracks_apikey or self.cid,
+           #"include": "mixes",
+        })
+        try:
+            j = ahttp.get("http://8tracks.com/{}.json".format(method), params)
+            r = json.loads(j)
+            # test for mishaps
+            if "errors" in r and r["errors"]:
+                self.status(r["errors"])
+                raise Exception(r)
+            return r
+        except Exception as e:
+            log.ERR("8tracks API request failed:", e)
+        return []
+
+
diff --git a/channels/file.py b/contrib/file.py
similarity index 50%
rename from channels/file.py
rename to contrib/file.py
index 4cfd9ae..de567ff 100644
--- a/channels/file.py
+++ b/contrib/file.py
@@ -1,18 +1,32 @@
-#
 # api: streamtuner2
 # title: File browser
 # description: Displays mp3/oggs or m3u/pls files from local media file directories.
 # type: channel
-# category: media
-# version: 0.0
+# category: local
+# version: 0.2
 # priority: optional
-# depends: mutagen
-#
-#
-# Local file browser.
+# status: unsupported
+# depends: python:mutagen, python:id3
+# config:  
+#   { name: file_browser_dir, type: text, value: "$XDG_MUSIC_DIR, ~/MP3", description: "List of directories to scan for audio files." },
+#   { name: file_browser_ext, type: text, value: "mp3,ogg, m3u,pls,xspf, avi,flv,mpg,mp4", description: "File type/extension filter." },
+# png:
+#   iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3wUFDQsK23vYngAAA6lJREFUOMtFz8tu1FYAxvH/sc+xxx7bM8lkElAgISoV4qIgpEaomwg2bMqiQmo3lfowPElVVbQr3gBVqGJRGi6VEERFDROS0Ewmc/N47Bkf+7gLevke4Kfv
+#   L374/vufxm/ffjnudJQoisoVonLDcN+sr39z7uXLXzfOn6cRhmSTCf3TUwa9HoN+H601ynXxwhA7ivhdCH48PkZOut0vdh48cKtej9C2iSyLsF7/xLpx4/5eu/1LZzSiaQx1z8O5cIHapUvVmpRkaUqcJMRpSjydmnEcP/2zKH6WOs/7mdZBVVXIqsKuKk4nE4qdnTueUncCpZh5HoHj4AqBVRQIrUFrLGPwlaLhOLiWtX93OPxKIuX+0HHWJ5ZF03VxpaRfFLRmM1rTKUGrRX1piUYQEIUhfhRRC0OqOMZxHIIwJIgiHFj77OnT+7KEd0Wt
+#   tl0Kgev7NHyf5apCTSaoLEMlCZdu3uT85ib1hQWi1VWcMCTb3cXxPJxmExlF2LWaMFpvS4TYcx2nmpalsKoKJQSNMCQ6cwZPCMxgwKTbpfPoETWlWDx3jtblyyghEFpjSYmwbYQx6DyPJUJ0bKUKU5Yqn83QSqGVolQKGQSEGxssrK3RffyY6Zs3zK9epb6wgBWGCCFQjkOlFFVRoIfDkTRwYIRIDTR0nqPnc7RSFP/AhW2jfJ/WlSvQ7zPe3SU9OECdPYuwbUrXxSiFsW2KOB7IaZYdp3keV9DQ8znacSj+RaWkqtVACExR0NrcZPriBflw
+#   SJqmWO32R9BxMEAxnfatJE37cZb1jWVRaP3x4XxOkecIy0J6HibPmY1GqHqdpa0tbNdlvLNDfnJCOR5jJhPMYECZpj2JlPEwSbqBEFTG/Jd85fZtNm/dIjk6Itnbw19e5tN79yiHQ5JnzxgfHDBrNvGjCOM4lElCkWWn1ufb2/M4TQ9LIQAoiwJTlrQ3NrCVQjoOw04Hf2UF5ftI3wchsOt1Zu/eoTsd9KtX5E+eYCaTnux2u1VRVe8N/y/PMn57+JBka4v04IDs8JDD+RxGI8RoxPz1a6yyJJ/PGT9/rivXzZRSp3m9/kYAtFdWvm3PZt+1
+#   kkQEtk1g2wRSEihV+badR7Va2vS8ceR5A9uYrimKv/LZ7MhU1VF7efnD2sWL3cb6+slzrT9IgKXFxT8W07S33GpZywsLHxzLep/Gcac3Gu0H9fp7Z3X1KLp27WT9+vXh8epq8vXdu7N+FPG61UIXBXZZAmCVJX8DADze5LjPkMQAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTUtMDUtMDVUMTU6MTA6NTkrMDI6MDBD/PY6AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE1LTA1LTA1VDE1OjEwOjU5KzAyOjAwMqFOhgAAAABJRU5ErkJggg==
+# png-orig:
+#   https://openclipart.org/detail/168001/folder-icon-red-music
 #
+# Local file browser. Presents files from configured directories.
+# This is not what streamtuner2 is meant for. Therefore this is
+# an optional plugin, and not overly well integrated.
 #
-
+# Bugs:
+# Only loads directories on startup. Doesn't work when post-activated
+# per pluginmanager2 for instance. And LANG=C breaks it on startup,
+# if media directories contain anything but ASCII filenames.
 
 
 # modules
@@ -20,18 +34,18 @@ import os
 import re
 
 from channels import *
-from config import conf
+from config import *
 
 # ID3 libraries
 try:
     from mutagen import File as get_meta
 except:
     try:
-        print("just basic ID3 support")
         from ID3 import ID3
+        log.INFO("Just basic ID3 support")
         get_meta = lambda fn: dict([(k.lower(),v) for k,v in ID3(fn).iteritems()])
     except:
-        print("you are out of luck in regards to mp3 browsing")
+        log.INIT("You are out of luck in regards to mp3 browsing. No ID3 support.")
         get_meta = lambda *x: {}
 
 
@@ -55,19 +69,8 @@ def mutagen_postprocess(d):
 # file browser / mp3 directory listings
 class file (ChannelPlugin):
 
-    # info
-    api = "streamtuner2"
-    module = "file"
-    title = "file browser"
-    version = -0.5
-    listtype = "url/file"
-    
-    
     # data
-    config = [
-        {"name":"file_browser_dir", "type":"text", "value":os.environ["HOME"]+"/Music, /media/music", "description":"list of directories to scan for audio files"},
-        {"name":"file_browser_ext", "type":"text", "value":"mp3,ogg, m3u,pls,xspf, avi,flv,mpg,mp4", "description":"file type filter"},
-    ]
+    listtype = "href"
     streams = {}
     categories = []
     dir = []
@@ -77,7 +80,7 @@ class file (ChannelPlugin):
     datamap = [ # coltitle   width	[ datasrc key, type, renderer, attrs ]	[cellrenderer2], ...
            ["",		20,	["state",	str,  "pixbuf",	{}],	],
            ["Genre",	65,	['genre',	str,	"t",	{"editable":8}],	],
-           ["File",	160,	["filename",	str,	"t",	{"strikethrough":11, "cell-background":12, "cell-background-set":13}],	],
+           ["File",	160,	["filename",	str,	"t",	{"strikethrough":10, "cell-background":11, "cell-background-set":12}],	],
            ["Title",	205,	["title",	str,    "t",	{"editable":8}], ],
            ["Artist",	125,	["artist",	str,	"t",	{"editable":8}],	],
            ["Album", 	125,	["album",	str,	"t",	{"editable":8}],	],
@@ -97,7 +100,7 @@ class file (ChannelPlugin):
     def __init__(self, parent):
     
         # data dirs
-        self.dir = [s.strip() for s in conf.file_browser_dir.split(",")]
+        self.dir = [self.env_dir(s) for s in conf.file_browser_dir.split(",")]
         self.ext = [s.strip() for s in conf.file_browser_ext.split(",")]
         # first run
         if not self.categories or not self.streams:
@@ -112,16 +115,27 @@ class file (ChannelPlugin):
         # add custom context menu
         #self.gtk_list.connect('button-press-event', self.context_menu)
 
-        
-        
-    # save list?
-    #save = lambda *x: None
-    # yeah, give it a try
+
+    # Interpolate $VARS and XDG_SPECIAL_DIRS
+    def env_dir(self, path):
+        path = path.strip()
+        env = self.fvars()
+        # Replace $XDG_ ourselfes and normal $ENV vars per expandvars (because os.environ.update() doesn't do)
+        path = re.sub("\$(XDG\w+)", lambda m: env.get(m.group(1), m.group(0)), path)
+        path = os.path.expandvars(path)
+        return os.path.expanduser(path)
+
+    # Read user-dirs config
+    def fvars(self, fn="$HOME/.config/user-dirs.dirs"):
+        fn = os.path.expandvars(fn)
+        src = open(fn, "r").read() if os.path.exists(fn) else ""
+        env = re.findall('^(\w+)=[\"\']?(.+?)[\"\']?', src, re.M)  # pyxdg: Your move.
+        return dict(env)
+
     
     # don't load cache file
     cache = lambda *x: None
 
-        
 
     # read dirs
     def scan_dirs(self):
@@ -139,8 +153,10 @@ class file (ChannelPlugin):
             # look through            
             for dir, subdirs, files in os.walk(main):
                 name = os.path.basename(dir)
-                while name in self.categories:
-                    name = name + "2"
+                sfx = ""
+                while name+sfx in self.categories:
+                    sfx = str(int(sfx)+1) if sfx else "2"
+                name += sfx
         
                 # files in subdir
                 if files:
@@ -148,7 +164,9 @@ class file (ChannelPlugin):
                     self.streams[name] = [self.file_entry(fn, dir) for fn in files if self.we_like_that_extension(fn)]
                 
             # plant a maindir reference to shortname
-            self.streams[main] = self.streams[os.path.basename(main)]
+            main_base = os.path.basename(main)
+            if self.streams.get(main_base):
+                self.streams[main] = self.streams[main_base]
 
 
     # extract meta data
@@ -157,9 +175,9 @@ class file (ChannelPlugin):
         meta = {
             "title": fn,
             "filename": fn,
-            "url": dir + "/" + fn,
+            "url": "file://" + dir + "/" + fn,
             "genre": "",
-            "format": self.mime_fmt(fn[-3:]),
+            "format": mime_fmt(fn[-3:]),
             "editable": True,
         }
         # add ID3
@@ -180,8 +198,6 @@ class file (ChannelPlugin):
     # same as init
     def update_streams(self, cat, x=0):
         self.scan_dirs()
-        print(self.streams)
-        print(self.categories)
         return self.streams.get(os.path.basename(cat))
 
 
diff --git a/contrib/glrp.csv.gz b/contrib/glrp.csv.gz
new file mode 100644
index 0000000..426cc4f
Binary files /dev/null and b/contrib/glrp.csv.gz differ
diff --git a/contrib/glrp.py b/contrib/glrp.py
new file mode 100644
index 0000000..030ecf8
--- /dev/null
+++ b/contrib/glrp.py
@@ -0,0 +1,62 @@
+# encoding: UTF-8
+# api: streamtuner2
+# title: GrLittleRadio
+# description: Static list from Great Little Radio Player
+# url: http://sourceforge.net/projects/glrp/
+# version: 0.2
+# type: channel
+# category: playlist
+# config: -
+# png:
+#   iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3wUFEQge/7AFNAAAAgpJ
+#   REFUOMuFk7trVFEQxn9zz9nc3Tw0CstGkCBoUHfhRgyIoF3wkRAUxEUrK7ESSWehFgpqI8TCTtQ/QCsLSSFisFFUSClBQzCJaPBBYkx2c+89Y3GyeW2iA6c4Z4Zvvvm+
+#   OUJZ4bHwYUrtpae0B0JGQVk/RB3p6U4mLhyQSuGGIgCqmokGeA3sEsHwr1Bc7Ph2rIMjd0/KmKiqRAO8SpVDqmANtIQwPQ+xAyPr0ABU+Nh/mEh6H2j7+DTDiWMLgA1g
+#   ayOUCtBg4MUnmK1CaFeDGKG6Ocd+GztCgUwtEQikDt5NgAmgby9kLQx/gckZ+DXvWTkIZxfIWGSRExCn8KgMzaG/5yyoQCWGc10wtwDXn3swI75ZsKSNQqkNOvKLGlTg
+#   9ku4OgijP0AEchk4UYR0hUe2ThyFhRTOP/GFArwdhzt90LXd51dGsFbhQODNZ5iPl2k2WBgc8ZrU1dfb7EepJMtvczFEbeD0PwA1evkmuNYNrVnYlIXju6EcQeLqASzq
+#   24rAyHffOTRwphN69oBz0Jrz3fONMDS6vFyqYEWIFZKaiEfvQ7Gw5Owqhb/O+F1oMBBAksuQyu+q2oP3eK9KpGtGWW+Ha2vjYPJUiWLQEkrSvZNehDEjpCIQBBsc74pT
+#   mNrXxtlbPTIjTVeUPzeFy8+0eWiUHdUEg2z8GY3gom1MPizLTy4qfwFNC7cqp8RdxgAAAABJRU5ErkJggg==
+# priority: extra
+#
+# Imports the playlist CSV from Great Little Radio Player.
+
+
+import csv
+from config import *
+from channels import *
+import ahttp
+from compat2and3 import gzip_decode
+
+
+# CSV list from GLRP
+class glrp (ChannelPlugin):
+
+    # control flags
+    has_search = False
+    listformat = "srv"
+    audioformat = "audio/mpeg"
+    titles = dict(listeners=False, bitrate=False, playing="Location")
+
+
+    # Imports the CSV once and populates streams
+    def update_categories(self):
+
+        dat = ahttp.get("http://fossil.include-once.org/streamtuner2/cat/contrib/glrp.csv.gz", binary=1)
+        dat = gzip_decode(dat).decode("utf-8")
+
+        self.streams = {}
+        if dat:
+            ls = csv.reader(dat.split("\n"))
+            for title, url, genre, location, fav in [x for x in ls if len(x)==5]:
+                if not self.streams.get(genre):
+                    self.streams[genre] = []
+                self.streams[genre].append(dict(
+                    title=title, url=url, genre=genre, playing=location, favorite=len(fav)
+                ))
+            self.save()
+        self.categories = sorted(self.streams.keys())
+
+
+    # Just returns existing entries
+    def update_streams(self, cat, search=None):
+        return self.streams.get(cat, [])
+      
diff --git a/contrib/icast.py b/contrib/icast.py
new file mode 100644
index 0000000..86d0da6
--- /dev/null
+++ b/contrib/icast.py
@@ -0,0 +1,101 @@
+# encoding: UTF-8
+# api: streamtuner2
+# title: iCast.io
+# description: Open collaborative stream directory
+# version: 0.2
+# type: channel
+# url: http://www.icast.io/
+# category: radio
+# priority: obsolete
+# config: -
+# png:
+#   iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAcVQTFRF
+#   ////8PDw5OTk9/f3z9fYW3qnKFmLC0N9K1qVYYay2N7hl6zAHU6BYIqaqdDN4vvt9fzstuPeV42+JVmWn7TKi6XBFE+Og62t+/6f7/2MoMmMs+OPpdPDns/7ir/YGlehjqjE0tnfGFGTQXWuncmX6/tt
+#   4vlvvfBv6vtsreGNbaXhdrTyXJXCY4m2JWStM2aZ4PhjtOhjy/FpeKioZaDoRYTAOXSpLGGgMXK/GlONlcxG1fZZfqyEX5XRY6TqPobZI2zCWJKqGVWbMHTHH12hT4BMt+0tgrFTfKt3XpG4WZfYR4vY
+#   NHrTK3TMRYTCIlmdM3bNKmy8KGGWgrs3UYRXSHp0TISKS4WaPXq4OXrENHrNO3zRPnitXpZ/aqJrRnd5Y5VPWYVXNGeTNnO1M2OiLmy+PYPdSo3eUZHaU5DLg7cxtOwNntIaYpVrMGittLvEKV+lQofd
+#   UZXoXp7rY6HfVoutsOUMQnOHdIurM2q2Y6TvbarqZJvFYpBlp9sSs+gMboag3t/dfZCqPWysSoLNYJvgYZSxfq5NNmF6MlmCcoab19nXqKyyZoSwTnawN2OfRGqXXXqanKKjzMzMt7e3o6SjsLKvtVfy
+#   AwAAAAFiS0dEBxZhiOsAAAAJcEhZcwAAAEgAAABIAEbJaz4AAADxSURBVBjTY2AAAUYmIGBkZoACRhZWNnZ2Dk4uqAgjNw8vH7+AoJCwCCOIzywqJi4hKSUtIysnrwBSo6ikrKKqpq6hqaWto6QIVKCr
+#   p69uYGBoZGxiYmrGyczAaG5haWVtbW1ja2fv4GjOyMDo5Ozi6ubu4enl7ePr5w8U8A8IDAoOCQ0Lj4iMigYJmDtHRcbExsUnJCYlR6YwMjCzpqalZ2SGZ2Vn5+TmsTIzMOcXFBYVl5TmZGeXlXPkgxxa
+#   UZleVV1TW1efyNYAdmpjU3NLq1Zbe0dnVzfEM0w9vX3N/RMmTmqEeZd58pSpU6dNBnsWAEP5Nco3FJZfAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE0LTA2LTAxVDAxOjI4OjA3KzAyOjAw7O+A+AAAACV0
+#   RVh0ZGF0ZTptb2RpZnkAMjAxNC0wNi0wMVQwMToyODowNyswMjowMJ2yOEQAAAAASUVORK5CYII=
+# documentation: http://api.icast.io/
+#
+#
+# A modern alternative to ShoutCast/ICEcast.
+# Streams are user-contributed, but often lack
+# meta data (homepage) and there's no ordering
+# by listeneres/popularity.
+#
+# However it's every easy and stable to interface
+# with over JSON. However it's also somewhat slow,
+# because each query result has only 10 entries.
+# Which is why reloading takes a few seconds to
+# collect 200 station entries (see main options).
+
+
+import re
+import json
+from config import *
+from channels import *
+import ahttp
+
+
+# iCast.io API
+class icast (ChannelPlugin):
+
+    # control attributes
+    has_search = True
+    listformat = "pls"
+    titles = dict(listeners=False, bitrate=False, playing=False)
+    categories = []
+    base = "http://api.icast.io/1/"
+    
+
+    # Categories require little post-processing, just dict into list conversion
+    def update_categories(self):
+        self.categories = []
+        for genre,cats in json.loads(ahttp.get(self.base + "genres"))["genres"].items():
+            self.categories.append(genre.title())
+            self.categories.append([c.title() for c in cats])
+
+    # Just copy over stream URLs and station titles
+    def update_streams(self, cat, search=None):
+    
+        if cat:
+            data = self.api("stations/genre/", cat.lower(), {})
+        elif search:
+            data = self.api("stations/search", "", {"q": search})
+        else:
+            pass
+
+        r = []
+        for e in data:
+            r.append(dict(
+                genre = " ".join(e["genre_list"]),
+                url = e["streams"][0]["uri"],
+                format = e["streams"][0]["mime"],
+                title = e["name"],
+                #playing = " ".join(e["current"].items()),
+            ))
+
+        return r
+
+    # fetch multiple pages
+    def api(self, method, path, params):
+        r = []
+        while len(r) < int(conf.max_streams):
+            try:
+                data = ahttp.get(self.base + method + path, params)
+                data = json.loads(data)
+            except Exception as e:
+                log.ERR("No data/json received.", e)
+                return r
+            r += data["stations"]
+            if len(r) >= data["meta"]["total_count"] or len(data["stations"]) < 10:
+                break
+            else:
+                params["page"] = int(data["meta"]["current_page"]) + 1
+                self.parent.status(params["page"] * 9.5 / float(conf.max_streams))
+            #log.DATA(data)
+        return r
+
diff --git a/channels/itunes.py b/contrib/itunes.py
similarity index 51%
rename from channels/itunes.py
rename to contrib/itunes.py
index 482840f..abe1441 100644
--- a/channels/itunes.py
+++ b/contrib/itunes.py
@@ -1,14 +1,25 @@
 # encoding: UTF-8
 # api: streamtuner2
-# title: iTunes Radio (via RS)
+# title: iTunes Radio
 # description: iTunes unsorted station list via RoliSoft Radio Playlist caching webservice.
 # version: 0.1
 # type: channel
 # category: radio
+# url: http://www.itunes.com?
+# status: broken
 # priority: optional
+# config: -
+# png:
+#   iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAA3lJREFUOI1Fk01MHGUAht9vZnZml53dhcJSYIEVt8Tu1qbQRNI0wKGxiUk1HBpjbzUmatWUCzHe1Kjx0KQH5WA08aAXYzTRpKnSFG2kpB4ILEstP1skwC50f1nmf3Zmvvk8aOtzf05PHoL/YIyhWtpD
+#   JBKRlpZzp3YK+6OqpqcAIBaN/N2f6L57evhUTtM0p7O797EGAgC6puCNtyYx+c6b6YXsX1M75cMXHSLFebGFI4TAdy1fZM1qf2fsxnNDJ65/9fW369OfXUNLOAoy88tNFEpVDPQnRn+bX/qiZErPdiTTCMltgBAAYwClLpqGAmV/A52idf/c2aErxf3yvc72VpC5ubuQRC714425H+4/wnBfZgQk
+#   FAYlHIIBICoBMREQGMXmIw2F/AoyHe7SxQvjLzddusWNjY2Sheza23eWy8N+LIWKG0DNojjTS/DqmVa8Pt6N184lMTHSA9MBHHkAf+Sqpxdza1fGx8aIcG/+91R2tfjSniaD90PQPQFhniHdJaFNYlA1DaUDBgEEikugUAlFLYzsanHiz/k7Xwr7pdrwdsno1WkbKiaD6HHwgxx2azq+yevYhQxd
+#   dXG5x4HhARWTQfNC2C41+vbKtSFB0Yxe3WYSJSI0h0FiHMKcgEOPYjGcgCVHQKHCovuwXAbV8uFBgG4zSdPMhOBT6gUCHCM8AQQOPs/BA2BaJrggQ9ixkOEP0cq7oNR/0j7AE0apRwUCfyveKplczYkQz0Ofp2IkREENDdS1McbtYCJuw3QA13VBqAvOtxFvkwwCusVpykE2lZDzEcEErx5gIl7F
+#   +aMNUEsDMxwUKwaWHpbwa66GAwuAqSMqmHi6R95QGvVlfubWrLaSXZAdp/n8bs3jRGbDdmwsqjLUcBcaXBS5egBrShC2aoBWCxhJUu9EMnJ9aurdWf5QUdGol/KDT3U/Yzet9FIliDW7A0rLUXAEYE0HjumiWT+EVy7gZLuGs+noT3s7+U9v3Z61CAB8Pj2NzfzGwJGu5LX1Mp1YrQcCOhcDxBAY
+#   Y4BtQPYayMSpk+4Rf25UCu+ljg1uT169+u9MAPDhB+9jdfXBkeOZk6+4JHSpbrK03oQMALIIvT2MNYHZ360/WPk+nc40Pvr4k/9vfExQEmE3HXLhhfMdqWODx4Mt4QQAWKZR3Np8uH5z5nZdEgOs6bhPnH8APR+/sJEZQ8oAAAAASUVORK5CYII=
 # documentation: http://lab.rolisoft.net/playlists.html
 #
-# Provides pre-parsed radio station playlists for various services
+# API provides pre-parsed radio station playlists for various services
+#
 #  → Shoutcast
 #  → Xiph/ICEcast
 #  → Tunein
@@ -20,25 +31,23 @@
 #
 # In this module only iTunes will be queried for now.
 #
-#
 
 import re
-from config import conf, dbg, __print__
+from config import *
 from channels import *
-import ahttp as http
+import ahttp
 
 
 # Surfmusik sharing site
 class itunes (ChannelPlugin):
 
-    # description
-    title = "iTunes RS"
-    module = "itunes"
-    #module = "rs_playlist"
-    homepage = "http://www.itunes.com?"
+    # control attribues
     has_search = False
-    listformat = "audio/x-scpls"
+    listformat = "pls"
     titles = dict(listeners=False, bitrate=False, playing=False)
+    #base = "http://lab.rolisoft.net/playlists/itunes.php"
+    base = "http://aws-eu.rolisoft.net/playlists/itunes.php"
+    #base = "http://aws-us.rolisoft.net/playlists/itunes.php"
 
     categories = [
         "Adult Contemporary",
@@ -67,12 +76,6 @@ class itunes (ChannelPlugin):
         "'80s Flashback",
         "'90s Hits",
     ]
-    config = [
-    ]    
-    
-    base = "http://lab.rolisoft.net/playlists/itunes.php"
-    #base = "http://aws-eu.rolisoft.net/playlists/itunes.php"
-    #base = "http://aws-us.rolisoft.net/playlists/itunes.php"
     
 
     # static list for iTunes
@@ -82,9 +85,9 @@ class itunes (ChannelPlugin):
     # Just copy over stream URLs and station titles
     def update_streams(self, cat):
     
-        m3u = http.get(self.base, {"category": cat.lower()})
+        m3u = ahttp.get(self.base, {"category": cat.lower()})
         if len(m3u) < 256:
-            __print__(dbg.ERR, m3u)
+            log.ERR(m3u)
         
         rx_m3u = re.compile(r"""
             ^File(\d+)\s*=\s*(http://[^\s]+)\s*$\s*
diff --git a/contrib/listenlive.py b/contrib/listenlive.py
new file mode 100644
index 0000000..7d20eb2
--- /dev/null
+++ b/contrib/listenlive.py
@@ -0,0 +1,86 @@
+# encoding: UTF-8
+# api: streamtuner2
+# title: ListenLive
+# description: European radio stations streaming live on the internet
+# url: http://listenlive.eu/
+# version: 0.0
+# type: channel
+# category: radio
+# config: -
+# png:
+#   iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAARVBMVEWdHBWSg1Cbj1mnmF6jn5GuomajpaCrqYu3qmy0roi6
+#   r3rAsW25tae2t7HCvKfPv3rOw4zKxrfJyMDTzaXUz7LW1s7g4t727CdZAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJ
+#   cEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQffBQcAMynMUk7PAAAAkElEQVQY01VP2xbDIAizUq0WGS1e/v9TB9qdbXlLICE4
+#   Z9g8gN/cB1tAVmB4JI98tdbqlZJ/eBWS3u8jTCVx7RRNKEdKzgFffVBUfpdyItjCGJG6iCqZk0Nuo6tDiIp6cAqiDokx7hZi
+#   Fo3QBSp7xmChOhSxjNfJsM5OaKadncWWkL9V/6rrc7Ceg59/vWLRN2yqCjHMvARcAAAAAElFTkSuQmCC
+# png-orig: https://openclipart.org/detail/148465/1-euro
+# priority: extra
+#
+# And another radio directory, primarily collecting euro
+# stations, mixed genres, and grouping by country.
+#
+# Also available:
+#  http://www.australianliveradio.com/
+#  http://www.nzradioguide.co.nz/
+
+
+import re
+from config import *
+from channels import *
+import ahttp
+
+
+# listenlive.eu
+class listenlive (ChannelPlugin):
+
+    # control flags
+    has_search = False
+    listformat = "srv"
+    audioformat = "mp3"
+    titles = dict(listeners=False, playing="Location")
+    categories = []
+    base = "http://listenlive.eu/{}.html"
+
+
+    # short list of categories
+    def update_categories(self):
+        html = ahttp.get("http://listenlive.eu/")
+        ls = re.findall(r"""b.gif"[\s/]*>\s+<a\s+href="(\w+).html">([^<>]+)</a>""", html)
+        self.catmap = {title: link for link, title in ls}
+        self.categories = [title for link, title in ls]
+
+
+    # Fetch entries
+    def update_streams(self, cat, search=None):
+        r = []
+
+        # split into table rows
+        html = ahttp.get(self.base.format(self.catmap[cat]), encoding="utf-8")
+        for tr in html.split("<tr>"):
+        
+            # extract fields
+            ls = re.findall("""
+                <a\s+href="([^<">]+)">    # homepage
+                <b>([^<>]+)</b>           # title
+                .*? <td>([^<>]+)</td>     # location
+                .+  alt="(\w+)"           # format
+                .+ <a\s+href="([^<">]+)"> # url
+                (\d+)                     # bitrate
+            """, tr, re.X|re.S)
+            
+            # assemble into rows
+            if len(ls) and len(ls[0]) == 6:
+                homepage, title, location, format, url, bitrate = ls[0]
+                genre = re.findall("<td>([^<>]+)</td>\s</tr>", tr)
+                r.append(dict(
+                    homepage = homepage,
+                    playing = location,
+                    title = unhtml(title),
+                    url = url,
+                    genre = genre[0] if genre else cat,
+                    bitrate = int(bitrate),
+                    format = mime_fmt(format),
+                ))
+        return r
+      
+
diff --git a/contrib/magnatune.py b/contrib/magnatune.py
new file mode 100644
index 0000000..b785980
--- /dev/null
+++ b/contrib/magnatune.py
@@ -0,0 +1,98 @@
+# encoding: UTF-8
+# api: streamtuner2
+# title: Magnatune
+# description: Independent and user-friendly radio label
+# url: http://magnatune.com/
+# version: 0.1
+# docs: https://magnatune.com/info/api
+# type: channel
+# category: collection
+# config: -
+# png:
+#   iVBORw0KGgoAAAANSUhEUgAAABIAAAASBAMAAACk4JNkAAAAMFBMVEUAW5kAY6ACa6MVd6sWgLE2irdHmcBdpslvrsuEudWY
+#   xdmiy9+21+fO4u7z+fz9//wtPja+AAAAAWJLR0QAiAUdSAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB98FBhQ2G9ph
+#   h8MAAACySURBVAjXY/j//22rccS9//8Z/v9NVAl1ErsPZB0W2/vudqLPf4a/Ruv+lf9/qXyf4ZnU+79O//9Pime4mPf/j9H/
+#   /1+tGYr2//tj9O/dH3EGl/vHzhr9yf1nyqD6vqjW6AfXu2AgKwnIkvoXDJSFsMyAOkCyUkAdF/MTaw1/cAFNeSZ1/d6sv3VN
+#   cQx/neb///f/BdC2/0dEz717E2QLclWycKihGchV/99Mc8k89/8/AD9dZbS2m1Y9AAAAAElFTkSuQmCC
+# priority: extra
+# 
+# Magnatune is a label for independent music. It provides
+# free access to a partial section of its reportoire as MP3.
+# Using paid subscriptions, all albums are available in
+# higher quality Ogg Vorbis or FLAC encodings however.
+#
+# You can listen to all albums and tracks freely. They're
+# just interspersed with short "magnatune" voiceunders.
+#
+# For now this plugin just fetches the small highested
+# ranked album list. Just an excerpt. The huge album list
+# is a 70 MiB download.
+#
+# src:
+#   http://magnatune.com/info/shoutcast/
+#   http://magnatune.com/genres/m3u/ranked_all.xspf (current)
+#   http://he3.magnatune.com/info/song_info_csv.gz
+#   http://he3.magnatune.com/info/album_info.xml
+
+
+import re
+from config import *
+from channels import *
+import ahttp
+import action
+from compat2and3 import urlencode
+
+
+# Magnatune
+class magnatune (ChannelPlugin):
+
+    # control flags
+    has_search = False
+    listformat = "srv"
+    audioformat = "audio/mpeg"
+    titles = dict(listeners=False, bitrate=False, playing=False)
+    categories = ["radios", "albums"]
+
+
+    # static
+    def update_categories(self):
+        pass
+
+
+    # Just one list to fetch
+    def update_streams(self, cat, search=None):
+
+        # Radios are just rotating playlists
+        if cat == "radios":
+            return [
+                { "genre": "classical", "title": "Classical: renaissance and baroque", "url": "http://sc2.magnatune.com:8000/listen.pls", "listformat": "pls" },
+                { "genre": "electronic", "title": "Electronica: downtempo, techno & trance", "url": "http://sc2.magnatune.com:8002/listen.pls", "listformat": "pls" },
+                { "genre": "metal", "title": "Metal and Punk", "url": "http://sc2.magnatune.com:8004/listen.pls", "listformat": "pls" },
+                { "genre": "new age", "title": "New Age", "url": "http://sc2.magnatune.com:8006/listen.pls", "listformat": "pls" },
+                { "genre": "rock", "title": "Rock", "url": "http://sc2.magnatune.com:8008/listen.pls", "listformat": "pls" },
+                { "genre": "world", "title": "World Music: Indian, Celtic, Arabic, Baltic...", "url": "http://sc2.magnatune.com:8010/listen.pls", "listformat": "pls" },
+                { "genre": "./.", "title": "Free song download of the day", "url": "none:", "homepage": "http://magnatune.com/today/", "listformat": "href" },
+            ]
+
+        # Short album list
+        return self.fetch_ranked_xspf()            
+
+    
+    # Broken playlist file
+    def fetch_ranked_xspf(self):
+        xspf = ahttp.get("http://magnatune.com/genres/m3u/ranked_all.xspf")
+        xspf = re.sub("/([^</>]+)\.mp3</location>", self.urlenc, xspf)
+        cnv = action.extract_playlist(text=xspf)
+        rows = [
+           dict(title=unhtml(r["playing"]), url=r["url"], homepage=r["homepage"], genre="album")
+           for r in cnv.rows("xspf")
+        ]
+        return rows
+
+    # Custom URL patching
+    def urlenc(self, m):
+        u = str(m.group(1))
+        u = u.replace(" ", "%20")
+        return "/" + u + ".mp3</location>"
+
+
diff --git a/contrib/podspider.py b/contrib/podspider.py
new file mode 100644
index 0000000..c1bae2a
--- /dev/null
+++ b/contrib/podspider.py
@@ -0,0 +1,202 @@
+# encoding: UTF-8
+# api: streamtuner2
+# title: PODspider
+# description: lists Podcasts RSS from proprietary podspider xml database
+# version: 0.0
+# type: channel
+# category: talk
+# depends: lxml.etree, pyquery
+# url: http://www.radiograbber.de/
+# status: unsupported
+# priority: never
+#
+# Podspider is one part of the commercial Windows "Radiograbber" software.
+# A demo version is available from http://www.surfmusik.net/downloads/download.php?pid=13
+# and runs under Wine.
+# It downloads a "Podspiderpdb.xml.tmp_", which this plugin can display as
+# streamtuner2 channel. The contents are a pre-classified list of PODcasts
+# via RSS feeds. It needs some rework to strip out excessive duplicates, but
+# it's nevertheless the largest overview.
+#
+# You can move the Podspiderpdb.xml.* into your ~/.config/streamtuner2/ dir
+# after you have it.
+#
+# The current implementation is very inefficient. It reads the XML on every
+# start. Caching it as JSON wouldn't be very wise, as it'd still be 20 MB.
+#
+# Untested.
+
+
+import action
+import http
+from config import conf
+from channels import *
+import os, os.path
+from pq import pq
+import lxml.etree
+import mygtk
+
+
+
+# return text entry from etree list
+def get(item, tag, hint=None):
+    if hint != None:
+        if len(item) > hint:  # hint tells us the usual position of the element
+            if item[hint].tag == tag and item[hint].text:
+                return item[hint].text
+    for e in item:  # else we look at each
+        if e.tag==tag:
+            try:
+                if e.text:
+                    return e.text
+            except:
+                pass
+    return ""  # empty string if nothing found
+
+
+# PODlist from Radiograbber
+class podspider (ChannelPlugin):
+
+    # pi info
+    module = "podspider"
+    homepage = "http://www.radiograbber.de/"
+    listformat = "rss"
+
+    # data
+    config = [
+    ]
+    xml = None
+    all = []
+    streams = {}
+    categories = []
+    
+    
+    # set up
+    def __init__(self, parent):
+        self.xml = self.find_podspider_xml()
+        if self.xml:
+            print self.xml
+            self.all = self.fetch()
+            #self.save()
+        else:
+            self.warn()
+        ChannelPlugin.__init__(self,parent)
+
+
+    # gtk.messagebox
+    def warn(self):
+        mygtk.msg("Podspiderpdb.xml.tmp_ couldn't be found anywhere.\nInstall Radiograbber via Wine to create it.")
+
+
+    # prevent cache file creation, as it would contain sublists and ends up being unreadable by json module
+    def save(self, *a):
+        pass
+
+    
+    # get podspider.xml filename
+    def find_podspider_xml(self):
+        wine_dir = "%s/.wine/drive_c/windows/profiles/%s/Temp/RapidSolution/" % (os.environ["HOME"], os.environ["USER"])
+        fn_vari = ("Podspiderpdb.xml.tmp_", "Podspiderpdb.xml.tmp", "Podspiderpdb.xml", "podspider.xml")
+        for dir in (conf.dir, wine_dir):
+            if os.path.exists(dir):
+                for fn in fn_vari:
+                    if os.path.exists(dir +"/"+ fn):
+                        return dir+fn
+        pass
+        
+
+    # extract XML
+    def fetch(self, f=lambda row:1):
+        r = []
+
+        # read Podspider*.xml.*
+        doc = open(self.xml).read()
+        doc = doc.replace(' xmlns=', ' x-ign=')
+
+        # parse to object tree
+        doc = lxml.etree.fromstring(doc)
+        # step down to <channel>
+        doc = doc[0]
+        # skip <title> or other meta tags
+        while doc[0].tag != "item":
+            del doc[0]
+
+        # each <item>
+        last_url = ""
+        for item in doc:
+
+            row = {
+                "title": get(item, "title", hint=0),
+                "homepage": get(item, "link", hint=1),
+                "playing": str(str(get(item, "description", hint=2)).replace("\n", " "))[:512],
+                "favicon": get(item, "artwork", hint=4),
+             #   "format": "application/rss+xml",
+                "language": get(item, "language", hint=5) or "English",
+             #   "lang": get(item, "iso3166", hint=6),
+                "category": [e.get("category") for e in item if e.tag=="classification"],
+                "listeners": int(1000.0 * float(item.get("relevance") or 0)),
+            }
+                
+            if row["homepage"] != last_url and f(row):
+                r.append(row)
+                last_url = row["homepage"]
+            
+        return r
+        
+
+    # loads RSS and gets first entry url
+    def play(self, row):
+        audio = "audio/mp3"
+        r = []
+        for e in pq(http.get(row["homepage"])).find("enclosure"):
+            r.append(e.get("url"))
+            audio = e.get("type")
+        if r:
+            action.action.play(r[0], audioformat=audio, listformat="url/direct")
+        
+        
+        
+    
+    # look for categories
+    def update_categories(self):
+    
+        # collect
+        cat = {}
+        for row in self.streams["all"]:
+
+            lang = row["language"]
+            if lang not in cat:
+                cat[lang] = []
+                
+            for c in row["category"]:
+                if c and c not in cat[lang]:
+                    cat[lang].append(c)
+                    
+        # populate as two-level list
+        self.categories = []
+        for c,sub in cat.iteritems():
+            self.categories.append(c)
+            self.categories.append(sorted(sub))
+
+
+    # extract     
+    def update_streams(self, cat):
+        r = []
+    
+        # ignore lang-only entries:
+        if cat in self.categories:
+            pass
+            
+        # scan through list
+        else:
+            for row in self.all:
+                if cat in row["category"]:
+                    row = dict(row) #copy
+                    row["genre"] = ", ".join(row["category"])
+                    del row["category"]
+                    r.append(row)
+
+        return r
+
+
+
diff --git a/contrib/publicradiofan.py b/contrib/publicradiofan.py
new file mode 100644
index 0000000..27456ba
--- /dev/null
+++ b/contrib/publicradiofan.py
@@ -0,0 +1,82 @@
+# encoding: UTF-8
+# api: streamtuner2
+# title: PublicRadioFan
+# description: Scheduled broadcasts, radio stations and genres, sorted by locations
+# version: 0.1
+# type: channel
+# url: http://www.publicradiofan.com/
+# category: radio
+# priority: extra
+# config: -
+# png:
+#   iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAMAAAD+iNU2AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACbVBMVEUAAAD//wDR0QDd3QD//wAfHwAhKQALDgAICAYAAADo6ADd3QD8/ADb2wDm5gD//wD//wD//wCxsQClpQDt7QCjowCurgD//wD//wD//wD//wD//wD//wD//wCdnQClowCioACYmAD//wD//wD//wD//wD//wD//wD//wD//w
+#   CurgCbmwCEgQCWlgCiogD//wD//wD//wD//wD//wDt7QDHxwDV1QD5+QDq6gCysgBYWQCkpADQ0AD//wD//wD//wD//wDm5gDDwwCOjgCoqADLywD+/gDJyQAgIAB2dgD//wD//wD//wD//wDY2ACnpwA6OgBfXwCzswD29gDOzgAgIAAdHQD//wD9/QDq6gDQ0ABtbQAHBwCEhAD8/ADh4QA/PwCamgD//wD//wD//wD//wDu7gDMzADExACamgAJCQCHhwDl5QDr6wCLiwDh4QD9/QD//wD//wD//wDv7wC6
+#   ugCurgBMTAAWFQB9fAB1cADb2gDBwQDe3gDm5gD6+gD//wD//wDk5ADExAB6egKjqBZbZSpSXTp3cSVlJgXCsgG9vgDKygDU1AD39wD//wCXmQBjawBCSwFibzBQWlEuIhw+OxlmZgCOjgCkpADw8AD//wAiKwA9TQE9SkcgICETEwIcHBIfHw6DgwD//wAEBQAVGgAlJycMDAweHh4GBgQAAAABAQEAAAAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAADHswAPDwA2NgBdXQB0iHd7joxRYRJQYDBabmpdcm4jIy
+#   IiJw0rLyA7Pj4+QUEJCQkDAwMfHyAAAAABAQEDAwMDAwMBAQEEBAT////bfgUcAAAAtnRSTlMAAAAAAAAAAAAADDVGMgoAAAM8pb+hNwIAAgUHBgxq5+NiBgAEDRcdHBxg1PXOUQQABBAkO1JOOT51tWcaAAELIkh9p6B4RDiNGQAEFDl3uOngtW9FlhIGKnW57v/lrXitLBMGAAtTx/P7//ntvtCJcDMHDmXk/P78/P/h7e/gdhoGRrXy9vv39fjF7/3zhx8eqO799vjo8dzCUw4S0PL6/PjJHQA23e752SSQ
+#   /v/8V5P////+WUJFFrYAAAABYktHRM702fL/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3wQdFiYdwDwd5wAAAQdJREFUCNdjYAADRiYubh5ePmZGEJuRX4BFUEhYRFRMHMhnlJCUkpaRlZPfpqCoxMjAqKyiqqauoamlraOrp8/IYGBoZGxiamZuYWllbWPLyGBn7+Do5Ozi6ubu4enFyMjg7ePr5x8QGBQcEhrGCjQuPCIyKnp7TGxcfEJiUnIKQ2paekbmjqzsnNy8/ILCIobiktKdZeUVlVXVNb
+#   V19Q0MjU3NLa1t7R2dXd09vX39DAwTJk6avGv3lKnTps+YOWs2A9ucuXv27ts/b/6BBQsXLV7CwL502cFDh48sX3H02PGVqzgYGFafOHHy1Ok1a0+cObtuPScDw4YTG4Fg0+aNG09s2coAANV6WR2+KyzWAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE1LTA0LTMwVDAwOjM4OjA5KzAyOjAwPqZVxAAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNS0wNC0zMFQwMDozODowOSswMjowME/77XgAAAAASUVORK5CYII=
+# x-png-src: https://openclipart.org/detail/101737/vacuum-tubes
+#
+# PRF is a privately maintained directory of international
+# radio stations, scheduled broadcasting programs, and
+# internet streams grouped by location/genre/format/topics.
+#
+# This plugin is just browsing the format categories, uses a
+# static genre list. Podcasts, scheduled programs aren't fetched.
+
+
+import re
+from config import *
+from channels import *
+import ahttp
+import action
+
+
+# Basic HTML scraping
+class publicradiofan (ChannelPlugin):
+
+    # control attributes
+    has_search = False
+    format = "mp3"
+    listformat = "href"
+    titles = dict(listeners=False, bitrate=False, playing="Description")
+
+    categories = ["adult alternative", "adult contemporary", "blues", "business", "classical",
+    "community", "contemporary", "country", "easy", "education", "ethnic", "folk", "free-form",
+    "full service", "government", "international", "jazz", "military", "news", "nostalgia",
+    "oldies", "reading", "regional", "religious", "rock", "seasonal", "sports", "student",
+    "talk", "traffic", "urban", "variety", "world", "youth"]
+    
+
+    # static
+    def update_categories(self):
+        pass
+        
+
+    # Extract from listing tables
+    def update_streams(self, cat, search=None):
+
+        html = ahttp.get("http://www.publicradiofan.com/cgibin/statsearch.pl?format={}&lang=".format(cat))
+        html = re.split("<H2>", html, 2, re.S)[1]
+        probe = action.extract_playlist()
+
+        r = []
+        for html in re.split("<TR VALIGN=TOP>", html, 0):
+            m = re.search(r"""
+                <A .*? HREF=" (?P<url> .+?) ">
+                <B> (?P<title> .*?) </B>
+                .*? stt> (?P<descr> .*?) [<&]
+                .*? stt> (?P<genre> .*?) [<&]
+                .*? <I> .*? HREF="(?P<homepage> .*?)"
+            """, html, re.X|re.S)
+            if m:
+                r.append(dict(
+                    genre = m.group("genre"),
+                    url = m.group("url"),
+                    title = m.group("title"),
+                    playing = m.group("descr"),
+                    homepage = m.group("homepage"),
+                    listformat = probe.probe_ext(m.group("url")) or "srv",
+                ))
+        return r
+
diff --git a/contrib/punkcast.py b/contrib/punkcast.py
new file mode 100644
index 0000000..2262c3a
--- /dev/null
+++ b/contrib/punkcast.py
@@ -0,0 +1,95 @@
+
+# api: streamtuner2
+# title: PunkCast
+# description: Online video site that covered NYC artists. Not updated anymore.
+# type: channel
+# category: video
+# version: 0.3
+# url: http://www.punkcast.com/
+# png:
+#   iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAyxJREFUOI0FwUlvG2UAgOH3++abxfsy2dtmcRsnghpBKyKhQA7lgsShPwEk/gVcKn4HN+6AynKIkEgFUkFF
+#   okrlpEkap2nqxHFsx/bYHs/m4XmE0s1Yyhjf8/niy6/49utv+PPf57x4sk3083cUzZgwZWElE9hL60yyc1zU39A8PsRxhijLMBFahO/5dFotwvGIeDxkOHJwNYvCwgyRYeElslTPu7ivTnFaTU6dkG4E
+#   ytANoskYgMb5W64b51jEuJ6Lq3Rmy2tEUcz1WR1pGGiyiIhMDOlQGHZRQRAQRR4CqJ2eUNvbJcAiEYz45NMtKrdvkc8a1G5M81e1RuiGjDpt1CTASKeQytDxowmmZdLpdDl8+QJLBqTxKSYkc0afbOyz
+#   OD/F/fIynhA0wwChazhIpOuNYCJI6hpxPOHiqk1K8+ldthDumFhXnLUHjEZj9DggKyWfbWywPpXHVqBEOKayXubDyl1qx0f0eh1E6GLaRX7aO8NLJjG9PvNLt0kpuJWeMHPTxnan6V81UWmpYacTVN57
+#   H9uewu01+OPJDle9AY//O+Dj++9yr3wHUnl8PyCTyzL2PE5aPUgYaFlNPDKigGe7VW6U1iDwcXuXzBbz+K5PThMEvQ6xjJjEAi2Z4Wn1mP03FyR1DaU0jUbnGj81IZXLkckoSpUV7JTB0HF4urvH3IMN
+#   jG6XbGGWemeAkc+hNEE0DtCSmngUCkFSixn321iWyVzGImEIVssllAh5e9kkCDV2T05pD4dMTeWpv6ohwghp6opCOOHh1kfcXZzm8S/bPNs/ZOC4mELj4eYGWiT54Z896qMJ9vws4XBE3lRIBeqmDmk/
+#   Qmnw+YNNlsur/PrbDqv5NFm7SHMwpNbuMggClmYL5JWkqytErKGPPVQmilhLSpbtBE1nxMFhjedHrymkNUrv3KHTuqLvjWl7MQevL+gNXaqNLlGzSyUvUVuEzMzkWVhZYqd6xPc//o6MBfWrAZcdBxnH
+#   zOcy/F1rsf3yFFmtEcWwOZ2h1R8hP5jATGmRQE+wXz0gjiMWihnO2z1qjS6ZQoF76yuU7DSxFFhJC10phmHIhVT8D1yefHn5PzXrAAAAAElFTkSuQmCC
+# priority: obsolete
+# config: { name: punkcast_img, type: boolean, value: 0, description: Load banners. (Channel - Update favicons) }
+#
+# Punkcast is no longer updated. This plugin is kept for
+# historic reasons. It was one of the default streamtuner1
+# channels.
+
+
+import re
+import ahttp
+from config import conf
+import action
+from channels import *
+from config import *
+
+
+# basic.ch broadcast archive
+class punkcast (ChannelPlugin):
+
+    # keeps category titles->urls    
+    catmap = {}
+    categories = ["list"]
+    titles = dict(playing=False, listeners=False, bitrate=False, homepage=False)
+    
+    img_resize = 196
+    fixed_size = [128,32]
+
+
+    # don't do anything
+    def update_categories(self):
+        pass
+
+
+    # get list
+    def update_streams(self, cat):
+
+        rx_link = re.compile("""
+            <a\shref="(http://punkcast.com/(\d+)/index.html)">
+            .*? ALT="([^<">]+)"
+        """, re.S|re.X)
+
+        entries = []
+        
+        #-- all from frontpage
+        html = ahttp.get("http://www.punkcast.com/")
+        for uu in rx_link.findall(html):
+            (homepage, id, title) = uu
+            entries.append({
+                    "genre": "%s" % id,
+                    "title": title,
+                    "playing": "PUNKCAST #%s" % id,
+                    "format": "audio/mpeg",
+                    "url": "none:",
+                    "homepage": homepage,
+                    "img": "http://punkcast.com/%s/PUNK%s.jpg" % (id, id) if conf.punkcast_img else None,
+            })
+
+        # done    
+        return entries
+
+
+    # special handler for play
+    def play(self):
+        row = self.row()
+        rx_sound = re.compile("""(http://[^"<>]+[.](mp3|ogg|m3u|pls|ram))""")
+        html = ahttp.get(row["homepage"])
+        
+        # look up ANY audio url
+        for uu in rx_sound.findall(html):
+            log.DATA( uu )
+            (url, fmt) = uu
+            row["url"] = url
+            action.play(row, mime_fmt(fmt), "srv")
+            return
+        
+        # or just open webpage
+        action.browser(row["homepage"])
+
diff --git a/contrib/radionet.py b/contrib/radionet.py
new file mode 100644
index 0000000..4196b2c
--- /dev/null
+++ b/contrib/radionet.py
@@ -0,0 +1,124 @@
+# encoding: UTF-8
+# api: streamtuner2
+# title: radio.net
+# description: Europe's biggest radio platform
+# url: http://radio.net/
+# version: 0.4
+# type: channel
+# category: radio
+# png:
+#   iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAt0lEQVR42mNgYGD4r+Ar/F/BDwkD+SBxojBMs1mLPBArgGlFqEEENYMNQNLsukIDYkirAvGu
+#   ABsA1OC6XOP/5f8nwIaYAg0k2gBFsAsgTgcZkvnfDugFEeK9AFKsCPMG0CU6eZJgQ4R1eP8H7LLEivWyFJANQcQCLPBAmkGG4MJohmA6C6QA5gI5OxEUDNII
+#   MwSvASBFIA3ociCxkWQAKMDICkSQIpgh2LDnSmP80YhsCFEJiRIMADpmeUOpqgjRAAAAAElFTkSuQmCC
+# priority: optional
+#
+# Radio.net lists around 20.000 worldwide radio stations.
+# A maximum of three pages from each genre are fetched here,
+# some of the empty categories already omitted.
+#
+# The website heavily depends on JavaScript, a Flash player,
+# some social tracking cookies. But still feasible to access
+# per custom JSON extractor.
+#
+# May require refreshing the station lists once in a while,
+# because there's an API key in each JSON station info URL.
+
+
+import time
+import json
+import re
+from config import *
+from channels import *
+import ahttp
+import action
+
+
+# hook special JSON format in to avoid grepping images by generic handler
+action.playlist_fmt_prio.insert(5, "rnjs")
+action.playlist_content_map.insert(7, ("rnjs", r'"logo175x175rounded"'))
+action.extract_playlist.extr_urls["rnjs"] = dict(
+    url   = r" (?x) \"streamUrl\" \s*:\s* \"(\w+:\\?/\\?/[^\"]+)\" ",
+    title = r" (?x) \"(?:description|seoTitle)\" \s*:\s* \"([^\"]+)\" ",
+    unesc = "json",
+)
+
+
+# Radio.net extraction relies on HTML grepping, finding an api key required for station details,
+# and letting the action module extract the station/stream URL from that JSON format.
+#
+class radionet (ChannelPlugin):
+
+    # control flags
+    has_search = False
+    audioformat = "audio/mpeg"
+    listformat = "rnjs"
+    titles = dict(listeners=False, playing="Description")
+
+    # sources
+    apiPrefix = "https://api.radio.net/info/v2"
+    genre_url = "http://www.radio.net/genre/{}/"
+    apiKey = None
+    
+    
+    # Retrieve cat list and map
+    def update_categories(self):
+        html = ahttp.get("http://www.radio.net/")
+        self.set_key(html)
+        ls = re.findall("""<li><a class="language-info".*?>([\w\s']+)</a>""", html)
+        self.categories = [i for i in ls][0:-18]
+
+
+    # Fetch entries
+    def update_streams(self, cat, search=None):
+
+        # category page, get key
+        html = ahttp.get(self.genre_url.format(cat))
+        for p in range(2, 4):
+            if html.find('"?p={}">'.format(p)) >= 0:
+                html += ahttp.get(self.genre_url.format(cat) + "?p={}".format(p))
+        self.set_key(html)
+        r = []
+
+        # split station blocks
+        for row in re.split("""<div class="stationinfo""", html):
+        
+            # extract text fields
+            d = re.findall("""
+              <a\s+href="(//([\w-]+)\.radio.net)" .*?
+              <img\s+src="([^<">]+)" .*?
+              <strong>(.*?)</strong> .*?
+              <small>\s*(.*?)\s*</small> .*?
+            """, row, re.X|re.S)
+            
+            # refurbish extracted strings
+            if d and len(d) and len(d[0]) == 5:
+                href, name, img, title, desc = d[0]
+                r.append(dict(
+                    name = name,
+                    genre = cat,
+                    title = unhtml(title),
+                    playing = unhtml(desc),
+                    url = self._url(name),
+                    homepage = "http:{}".format(href),
+                    img = img,
+                ));
+        return r
+    
+
+    # Patch together JSON station info URL
+    def _url(self, name):
+        return \
+        "{}/search/station?apikey={}&pageindex=1&station={}".format(
+            self.apiPrefix, self.apiKey, name
+        )      # '?_={time}&' is omitted here, only relevant to jQuery/AJAX,
+               # and just made bookmarks.is_in() fail due to randomized URLs
+
+
+    # extract JavaScript key from any HTML blob (needed for station query)
+    def set_key(self, html):
+        ls = re.findall("""apiKey: '(\w+)'""", html)
+        if ls:
+            self.apiKey = ls[0]
+
+
+
diff --git a/contrib/reddit.py b/contrib/reddit.py
new file mode 100644
index 0000000..a33409e
--- /dev/null
+++ b/contrib/reddit.py
@@ -0,0 +1,335 @@
+# encoding: UTF-8
+# api: streamtuner2
+# title: reddit⛱
+# description: Music recommendations from reddit /r/music and associated subreddits.
+# version: 0.8
+# type: channel
+# url: http://reddit.com/r/Music
+# category: playlist
+# config:
+#   { name: reddit_pages, type: int, value: 2, description: Number of pages to fetch. }
+#   { name: filter_walledgardens, type: boolean, value: 1, description: Filter walled gardens (soundcloud/spotify/…) if there's no player. }
+#   { name: reddit_keep_all, type: boolean, value: 0, description: Keep all web links (starts a browser for websites/news). }
+# png:
+#   iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJ1BMVEUAAAAcICX/AABHSk1jZ299hYz/bmajq6//lY/d0M3C1+3T7P38+/iaLhuGAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgF
+#   HUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQffBRUXIyQbWArCAAAAh0lEQVQI12Pg3g0BDLtXrVq1eveq3Qy7gIxCU9dqEGO11/ZKbzBDenUIUM3u7cGi1UDFW0TE55wsdpZikAw/
+#   eebMnMmHGVxqDuUc0zzpynD4zIk5J3vOSDNsOQMG1gy7bI5HTq85Ws2wu/jM9PIzrkArdhmXlzuuXg00eVd5+epVqxmgrtgNAOWeS1KYtcY4AAAAAElFTkSuQmCC
+# priority: extra
+#
+# Just imports Youtube links from music-related subreddits.
+# Those are usually new bands or fresh releases, or favorite
+# user selections. The category/subreddit list is filtered
+# for a minimum quote of usable links (namely Youtube URLs).
+#
+# If you have a custom audio player available for Soundcloud,
+# Spotify or Bandcamp, you can enable to retain such links.
+# (For example configure `soundcli` for "audio/soundcloud".)
+#
+# This plugin currently uses the old reddit API, which might
+# be obsolete by August. It's thus a temporary channel, as
+# migrating to OAuth or regressing to plain HTML extraction
+# is not very enticing.
+
+
+import json
+import re
+from config import *
+from channels import *
+import action
+import ahttp
+
+
+# reddit.com
+#
+# Uses old API requests such as:
+#  → http://www.reddit.com/r/music/new.json?sort=new
+#
+class reddit (ChannelPlugin):
+
+    # control attributes
+    has_search = False
+    listformat = "srv"
+    audioformat = "video/youtube"
+    titles = dict(playing="submitter", listeners="votes", bitrate=False)
+
+    # favicon scaling (from reddit preview `img`)
+    img_resize = 32
+    fixed_size = [32,26]
+    
+    # just subreddit names to extract from
+    categories = [
+        # static radio list
+        "radioreddit 📟",
+
+        # major subreddits
+        "Music",
+        ["trueMusic", "futurebeats", "FutureFunkAirlines",
+        "Turntablists", "Catchysongs", "MusicForConcentration", "MusicToSleepTo"],
+
+        # cover bands/songs
+        "CoverSongs",
+        ["ICoveredASong", "MyMusic", "UserProduced", "RepublicOfMusic", "RoyaltyFreeMusic"],
+
+        # discover subreddits
+        "music_discovery",
+        ["ListenToThis", "ListenToUs", "WhatIListenTo", "ListenToConcerts",
+        "HeadBangToThis", "unheardof", "under10k", "lt10k"],
+        
+        # Classical
+        "ClassicalMusic",
+        ["composer", "baroque", "classicalmusic", "contemporary",
+        "choralmusic", "ChamberMusic", "EarlyMusic",
+        "ElitistClassical", "icm", "Opera", "pianocovers"],
+
+        # Electronic Music
+        "ElectronicMusic",
+        ["acidhouse", "ambientmusic",  "AtmosphericDnB", "BigBeat",
+        "boogiemusic", "breakbeat", "breakcore", #"brostep", "chicagohouse",
+        "chillout", "Chipbreak", "darkstep", "deephouse",
+        "DnB", "DubStep", "EDM", "electronicdancemusic", "ElectronicJazz",
+        "ElectronicBlues", "electrohouse", #"electronicmagic",
+        "ElectronicMusic", "electropop", "electroswing", #"ExperimentalMusic",
+        "fidget", "frenchelectro", "frenchhouse", "funkhouse",
+        "futurebeats", "FutureFunkAirlines", "FutureGarage",
+        "futuresynth", "gabber", "glitch", "Grime", "happyhardcore",
+        "hardhouse", "hardstyle", "house", "idm", "industrialmusic", "ItaloDisco",
+        "latinhouse", "LiquidDubstep", "mashups", "minimal", "moombahcore",
+        "nightstep", "OldskoolRave", "partymusic", "plunderphonics", "psybient",
+        "PsyBreaks", "psytrance", "purplemusic", "raggajungle", "RealDubstep",
+        "swinghouse", "tech_house", "Techno", "Trance", "tranceandbass",
+        "tribalbeats", "ukfunky", "witchhouse", "wuuB"],
+
+        # Rock / Metal
+        "Rock",
+        ["80sHardcorePunk", "90sAlternative", "90sPunk", "90sRock",
+        "AlternativeRock", "AltCountry", "AORMelodic", "ausmetal",
+        "BlackMetal", "bluegrass", "Blues", "bluesrock", "Boneyard",
+        "CanadianClassicRock", "CanadianMusic", "ClassicRock", "country",
+        "Christcore", "crunkcore", "deathcore", "deathmetal", "Djent", "DoomMetal",
+        "Emo", "EmoScreamo", "epicmetal", "flocked", "folk", "folkmetal",
+        "folkpunk", "folkrock", "folkunknown", "GaragePunk", "GothicMetal",
+        "Grunge", "hardcore", "HardRock", "horrorpunk", "indie_rock", "jrock",
+        "krautrock", "LadiesofMetal", "MathRock", "melodicdeathmetal",
+        "MelodicMetal", "Metalmusic", "metal", "metalcore",
+        "monsterfuzz", "neopsychedelia", "NewWave", "noiserock", "numetal",
+        "pianorock", "poppunkers", "PostHardcore", "PostRock", "powermetal",
+        "powerpop", "ProgMetal", "progrockmusic", "PsychedelicRock", "punk",
+        "Punkskahardcore", "Punk_Rock", "raprock","shoegaze", "stonerrock",
+        "symphonicblackmetal", "symphonicmetal", "synthrock", "truethrash",
+        "Truemetal", "OutlawCountry", "WomenRock"],
+
+        # hippety-hop
+        "HipHopHeads",
+        ["80sHipHop", "90sHipHop", "altrap", "asianrap", "backspin", "BayRap",
+        "ChapHop", "ChiefKeef", "DrillandBop", "Gfunk", "NYrap",
+        "Rap", "raprock", "rhymesandbeats", "trapmuzik"],
+
+        # decades
+        "Decades →", ["2010smusic", "2000smusic", "90sMusic", "80sMusic",
+        "70s", "70sMusic", "60sMusic", "50sMusic"],
+
+        # By country/region/culture
+        "WorldMusic",
+        ["AfricanMusic", "afrobeat", "balkanbrass", "balkanmusic", "britpop",
+        "Irishmusic", "ItalianMusic", "jpop", "kpop", "spop", "cpop"],
+
+        # Other
+        "Genres →",
+        ["Acappella", "AcousticCovers", "animemusic", "boomswing",
+        "bossanova", "carmusic", "chillmusic",
+        "dembow", "disco", "DreamPop", "Elephant6", "ETIMusic", "Exotica",
+        "FilmMusic", "FunkSouMusic", "gamemusic", "GamesMusicMixMash",
+        "GunslingerMusic", "GypsyJazz", "HomeworkMusic", "IndieFolk",
+        "Jazz", "JazzFusion", "JazzInfluence", "listentoconcerts", "klezmer",
+        "lt10k", "MedievalMusic", "MelancholyMusic", "minimalism_music", "motown",
+        "MovieMusic", "muzyka", "NuDisco", "oldiemusic", "OldiesMusic",
+        "pianocovers", "PopMusic", "PoptoRock", "rainymood", #"recordstorefinds",
+        "reggae", "remixxd", "RetroMusic", "rnb", "rootsmusic", "SalsaMusic", "Ska",
+        "Soca", "Soulies", "SoulDivas", "SoundsVintage", "SpaceMusic",
+        "swing", "Tango", "TheRealBookVideos", "TouhouMusic", "TraditionalMusic",
+        "treemusic", "triphop", "vaporwave", "VintageObscura", "vocaloid"],
+
+        # Redditor Made Music (removed some spotify/soundcloud-only subreddits)
+        "Redditor-Made →",
+        ["AcousticOriginals", "Composer", "ICoveredASong",
+        "independentmusic", "MusicCritique", "MyMusic",
+        "ratemyband", "Songwriters",
+        "ThisIsOurMusic", "UserProduced",],
+
+        # Multi-Genre & Community Subreddits (a third cleaned out for too few usable links)
+        "Community →",
+        ["audioinsurrection", "albumaday", "albumoftheday", #"Albums",
+        "albumlisteners", "BinauralMusic", "Catchysongs",
+        "CircleMusic", "CoverSongs", "cyberpunk_music", "DANCEPARTY", "danktunes",
+        "deepcuts", "EarlyMusic", "FemaleVocalists",
+        "FitTunes", "freemusic", "Frisson",
+        "GayMusic", "germusic", "gethightothis",
+        "GuiltyPleasureMusic", "HeadNodders", "heady", "HeyThatWasIn",
+        "indie", "IndieWok", "Instrumentals",
+        "ipm", "IsolatedVocals", "LetsTalkMusic", "listentoconcerts",
+        "listentomusic", "ListenToThis", "ListenToUs", "livemusic",
+        "llawenyddhebddiwedd", "Lyrics", "mainstreammusic",
+        "MiddleEasternMusic", "MLPtunes", "Music", "MusicAlbums",
+        "musicsuggestions", "MusicToSleepTo", "musicvideos", "NameThatSong",
+        "newmusic", "onealbumaweek", "partymusic", "RedditOriginals",
+        "RepublicOfMusic", "RoyaltyFreeMusic", "runningmusic",
+        "ScottishMusic", "ThemVoices",
+        "unheardof", "WhatIListenTo", "WTFMusicVideos"],
+        # Community
+        #["AlbumArtPorn", "albumreviews", "Audio", "Audiophile", "AustinMusicians",
+        #"bandmembers", "CarAV", "CassetteCulture", "Cd_collectors",
+        #"ConcertTickets", "germusic", "glastonbury_festival", "ICoveredASong",
+        #"ifyoulikeblank", "independentmusic", "ineedasong/", "japanesemusic",
+        #"Jazzguitar", "koreanmusic", "LubbockMusicians", "mixcd", "musiccritics",
+        #"MusicalComedy", "musicessentials", "MusicEventMeetUp", "musicfestivals",
+        #"musicnews", "MusiciansBlogs", "Musicians", "NeedVocals", "OSOM",
+        #"performer", "RecordClub", "recordstore", "redditmusicclub", "Rockband",
+        #"RockbandChallenges", "TheSongRemainsTheSame", "TipOfMyTongue",
+        #"TouringMusicians", "vinyl", "VinylReleases", "WeAreTheMusicMakers"],
+
+        # Single Artist/Band subreddits (unchecked list)
+        "Bands/Artists →",
+        ["311", "ADTR", "AliciaKeys", "ArcadeFire", "ArethaFranklin",
+        "APerfectCircle", "TheAvettBrothers", "BaysideIsACult", "TheBeachBoys",
+        "Beatles", "billytalent", "Blink182", "BMSR", "boniver", "brandnew",
+        "BruceSpringsteen", "Burial", "ChristinaAguilera", "cityandcolour",
+        "Coldplay", "CutCopy", "TheCure", "DaftPunk", "DavidBowie", "Deadmau5",
+        "DeathCabforCutie", "DeepPurple", "Deftones", "DieAntwoord", "DMB",
+        "elliegoulding", "empireofthesun", "EnterShikari", "Evanescence", "feedme",
+        "FirstAidKit", "flaminglips", "franzferdinand", "Gorillaz", "gratefuldead",
+        "Greenday", "GunsNRoses", "Incubus", "JackWhite", "JanetJackson",
+        "John_frusciante", "kings_of_leon", "Korn", "ladygaga", "lanadelrey",
+        "lennykravitz", "Led_Zeppelin", "lorde", "Macklemore", "Madonna", "Manowar",
+        "MariahCarey", "MattAndKim", "Megadeth", "Metallica", "MGMT",
+        "MichaelJackson", "MinusTheBear", "ModestMouse", "Morrissey",
+        "MyChemicalRomance", "Muse", "NeilYoung", "NIN", "Nirvana", "oasis",
+        "Opeth", "OFWGKTA(OddFuture)", "OutKast", "panicatthedisco", "PearlJam",
+        "phish", "Pinback", "PinkFloyd", "porcupinetree", "prettylights",
+        "Puscifer", "Queen", "Radiohead", "RATM", "RedHotChiliPeppers",
+        "The_Residents", "RiseAgainst", "Rush", "SigurRos", "Slayer", "slipknot",
+        "SmashingPumpkins", "SparksFTW", "TeganAndSara", "TheKillers",
+        "TheOffspring", "TheStrokes", "TheMagneticZeros", "tragicallyhip",
+        "ToolBand", "U2Band", "Umphreys", "UnicornsMusic", "velvetunderground",
+        "Ween", "weezer", "WeirdAl", "yesband", "Zappa"],
+    ]
+
+
+    # static
+    def update_categories(self):
+        pass
+
+
+    # Extract video/music news links
+    def update_streams(self, cat, search=None):
+        
+        # radioreddit
+        if cat == "radioreddit 📟":
+            return self.radioreddit()
+        elif cat.find("→") > 0:
+            return self.placeholder
+
+        # collect links
+        data = []
+        after = None
+        for i in range(1, int(conf.reddit_pages) + 1):
+            try:
+                j = ahttp.get(
+                    "http://www.reddit.com/r/{}/new.json".format(cat.lower()),
+                    { "sort": "new", "after": after }
+                )
+                j = json.loads(j)
+            except Exception as e:
+                log.ERR("Reddit down? -", e)
+                break
+            if j.get("data",{}).get("children"):
+                data += j["data"]["children"]
+            else:
+                break
+            if j.get("data",{}).get("after"):
+                after = j["data"]["after"]
+            else:
+                break
+
+        # convert
+        r = []
+        for row in (ls["data"] for ls in data):
+
+            # find links in text posts
+            text_urls = re.findall("\]\((https?://(?:www\.)?youtu[^\"\'\]\)]+)", row.get("selftext", ""))
+            url_ext = (re.findall("\.(\w+)$", row["url"]) or [None])[0]
+            listformat = "href"
+            state = "gtk-media-play"
+
+            # Youtube URLs
+            if re.search("youtu\.?be|vimeo|dailymotion", row["url"]):
+                format = "video/youtube"
+                listformat = "srv"
+            # direct MP3/Ogg
+            elif url_ext in ("mp3", "ogg", "flac", "aac", "aacp"):
+                format = "audio/" + url_ext
+                listformat = "srv"
+            # playlists?
+            elif url_ext in ("m3u", "pls", "xspf"):
+                listformat = url_ext
+                format = "audio/x-unknown"
+            # links from selftext
+            elif text_urls:
+                row["url"] = text_urls[0]
+                format = "video/youtube"
+            # check for specific web links (Soundcloud etc.)
+            else:
+                listformat = "srv"
+                format = None
+                # look for walled gardens
+                urltype = re.findall("([\w-]+)\.\w+/", row["url"] + "/x-unknown.com/")[0]
+                if urltype in ("soundcloud", "spotify", "bandcamp", "mixcloud"):
+                    # is a specific player configured?
+                    fmt = "audio/" + urltype
+                    if fmt in conf.play or fmt in action.handler:
+                        state = "gtk-media-forward"
+                        format = fmt
+                    # retain it as web link?
+                    elif not conf.filter_walledgardens:
+                        state = "gtk-media-pause"
+                        format = "url/http"
+                # else skip entry completely
+                if not format:
+                    if conf.reddit_keep_all:
+                        state = "gtk-page-setup"
+                        format = "url/http"
+                    else:
+                        log.DATA_SKIP(format, row["url"])
+                        continue
+
+            # repack into streams list
+            r.append(dict(
+                title = row["title"],
+                url = row["url"],
+                genre = re.findall("\[(.+?)\]", row["title"] + "[-]")[0],
+                playing = row["author"],
+                listeners = row["score"],
+                homepage = "http://reddit.com{}".format(row["permalink"]),
+                img = row.get("thumbnail", ""),
+                #img_resize = 24,
+                format = format,
+                listformat = listformat,
+                state = state,
+            ))
+        return r        
+
+
+    # static station list
+    def radioreddit(self):
+        return [
+            dict(
+                genre=id, title=id.title(),
+                url="http://cdn.audiopump.co/radioreddit/"+id+"_mp3_128k",
+                format="audio/mpeg", homepage="http://radioreddit.com/",
+                listformat="srv"
+            )
+            for id in [
+                "main", "random", "rock", "metal", "indie",
+                "electronic", "hiphop", "talk", "festival"
+            ]
+        ]
+    
diff --git a/contrib/st1proxy/.htaccess b/contrib/st1proxy/.htaccess
new file mode 100644
index 0000000..9410115
--- /dev/null
+++ b/contrib/st1proxy/.htaccess
@@ -0,0 +1,4 @@
+
+<Files *.pls>
+	SetHandler application/x-httpd-php
+</Files>
diff --git a/contrib/directory b/contrib/st1proxy/directory
similarity index 100%
rename from contrib/directory
rename to contrib/st1proxy/directory
diff --git a/contrib/index.php b/contrib/st1proxy/index.php
similarity index 100%
rename from contrib/index.php
rename to contrib/st1proxy/index.php
diff --git a/contrib/sbin b/contrib/st1proxy/sbin
similarity index 100%
rename from contrib/sbin
rename to contrib/st1proxy/sbin
diff --git a/contrib/shoutcast-playlist.pls b/contrib/st1proxy/shoutcast-playlist.pls
similarity index 100%
rename from contrib/shoutcast-playlist.pls
rename to contrib/st1proxy/shoutcast-playlist.pls
diff --git a/contrib/tunein-station.pls b/contrib/st1proxy/tunein-station.pls
similarity index 100%
rename from contrib/tunein-station.pls
rename to contrib/st1proxy/tunein-station.pls
diff --git a/contrib/ypshoutcast.php b/contrib/st1proxy/ypshoutcast.php
similarity index 100%
rename from contrib/ypshoutcast.php
rename to contrib/st1proxy/ypshoutcast.php
diff --git a/contrib/url_soundcloud.py b/contrib/url_soundcloud.py
new file mode 100644
index 0000000..83d25ce
--- /dev/null
+++ b/contrib/url_soundcloud.py
@@ -0,0 +1,80 @@
+# api: streamtuner2
+# title: Soundcloud streams
+# description: Convert soundcloud links from reddit to streamable tracks
+# version: 0.2
+# type: filter
+# category: audio
+# depends: python:soundcloud, action >= 1.1, reddit >= 0.8
+# priority: rare
+#
+# Overrides action.play() function to convert soundcloud URLs
+# to track/streaming address.  Disables the reddit filter for
+# walled gardens, and overrides any custom player configured
+# for "audio/soundcloud" in settings.
+
+
+import re
+import soundcloud
+from config import *
+import ahttp
+import action
+
+fmt = "audio/soundcloud"
+rx_url = re.compile("^https?://(www\.)?soundcloud\.com/[\w-]+/[\w-]+$")
+conn = None
+
+        
+# API connect
+def client():
+    global conn
+    if not conn:
+        conn = soundcloud.Client(client_id="f0aea6e0484043f6638cb5bf35d43312")
+    return conn
+
+# Capture play events for faux MIME type
+def sndcl_convert(row={}, audioformat="audio/mpeg", source="pls", assoc={}):
+    if audioformat==fmt or rx_url.match(url):
+
+        # find streaming address
+        try:
+            url = row["url"]
+            log.DATA_CONVERT_SOUNDCLOUD(url)
+            track = client().get('/resolve', url=url)
+            track_str = "/tracks/{}/stream".format(track.id)
+            url = client().get(track_str, allow_redirects=False).location
+
+            # override attributes
+            row["url"] = url
+            row["format"] = "audio/mpeg"
+            audioformat = "audio/mpeg"
+            source = "srv"
+
+        except Exception as e:
+            log.ERR_SOUNDCLOUD("URL resolving failed:", e)
+            
+            # let web browser run
+            audioformat = "url/http"
+    
+    # let primary handler take over
+    if audioformat != fmt:
+        return action.run_fmt_url(row, audioformat, source, assoc)
+
+
+# Hook up custom action.handler for soundcloud URLs
+#
+# Still somewhat hodgepodge. The action module just lets .play() params
+# rewrite by above handler. Should turn faux "audio/soundcloud" URL into
+# plain/longwinded MP3 streaming address.
+#
+# Would need more generalized processing of custom URL schemes. But so
+# far only the reddit module uses them anyway.
+#
+class url_soundcloud(object):
+    module = "url_soundcloud"
+
+    # override action.play() with wrapper
+    def __init__(self, parent, *a, **kw):
+        conf.play[fmt] = "false / convert"
+        #conf.filter_walledgardens = False
+        action.handler[fmt] = sndcl_convert
+
diff --git a/contrib/windowsmedia.py b/contrib/windowsmedia.py
new file mode 100644
index 0000000..5cd23b5
--- /dev/null
+++ b/contrib/windowsmedia.py
@@ -0,0 +1,90 @@
+# encoding: UTF-8
+# api: streamtuner2
+# title: WindowsMedia
+# description: ASX-Playlist radio stations, common genres
+# url: http://windowsmedia.com/
+# version: 0.4
+# depends: streamtuner2 >= 2.1.8-dev
+# type: channel
+# category: radio
+# config:
+#   { name: windowsmedia_culture, type: select, value: en-gb, select: "en-gb|de-de|da-dk|cs-cz|es-es|fr-fr|it-it|nl-nl|pl-pl|tr-tr|pt-pt|pt-br|en-us", description: "Country/language preference (for localized ads:?)" }
+# png:
+#   iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAk1BMVEWwMjIAAQACAAoSAwQ2CQcAH5VqERZsESgNK489KFwA
+#   MrMAN6UQQwAXNpEAPakAQJ8AQ44RO7S2JQ8ASr6vLwqPOgoZYgCCSgvPPgVCbAF9XwzMTRrqUAHNY0VemADjbTiShjOYhiJR
+#   oApJqgRerwlUtgBjwgDAsQDdqQB02AnowgP+soDfywDs2RL25Qr4727/8rdsT1F2AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgF
+#   HUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQffBQcANDDneHDIAAAAlUlEQVQY02VPWxKCMAzcKmIF5GGrVkVAKA+x
+#   Ve9/OhUK0xmTj2Q3yU4WAPnmL6Y69rDQwJB/bDOLpYNDEFgc352betYh4EIcK5lVgVHnIk/3kCdp5g7PHykv742sp43LFS4y
+#   lMMNgbvebJl3U6ptjSxFFDPop+7NF5RFcVK8X6qfPIS+n0BrNf9FQ98retXZDlfoxuYDwYsJfXHQg0AAAAAASUVORK5CYII=
+# png-orig: https://openclipart.org/detail/176727/windows-bug
+# priority: extra
+# status: unsupported
+#
+# Well, this one is Windows-specific, so naturally uses
+# horrible formats "WAX" (ASX) for playlists. Still can
+# be parsed by action module, but possibly falling back
+# onto raw extraction etc. VLC does quadruple redirects.
+#
+# Only fetches the first page for each category anyway.
+# Most entries are lower bitrates, 32 to 64 kbit/s MP3.
+
+
+import re
+from config import *
+from channels import *
+import ahttp
+
+
+# Yay, windows playlists.
+class windowsmedia (ChannelPlugin):
+
+
+    # control flags
+    has_search = False
+    listformat = "asx"
+    audioformat = "audio/mpeg"
+    titles = dict(listeners=False, bitrate=False, playing="Location")
+
+    _web = "http://www.windowsmedia.com/RadioUI/Home.aspx?g={}&culture=en-gb"
+    base = "http://www.windowsmedia.com/RadioUI/getstationsforgenre.aspx?g={}&offset=0&culture={}"
+    _url = "http://www.windowsmedia.com/RadioTunerAPI/Service.asmx/playStation?"\
+         + "stationID={}&dialupDetected=false&useHighBandwidth=true&locale={}"
+           # reversed default true and false for connection speed
+
+    categories = ["80s", "Adult Hits", "Adult Rock", "Alternative Rock",
+    "Americana + Roots", "Big Band", "Blues", "Christian Hits", "Classic R&B",
+    "Classic Rock", "Classical", "Comedy", "Country", "Dance + Electronica",
+    "Holiday", "Indie", "International", "Jazz", "Latin", "Metal", "Miscellaneous",
+    "New Age", "News + Talk", "Oldies", "Public Radio", "Rap + Hip Hop", "Reggae",
+    "Religious", "Rock", "Smooth Jazz", "Soft Rock", "Soundtracks + Musicals",
+    "Sports", "Top 40", "Urban/Modern R&B"]
+
+
+    # static
+    def update_categories(self):
+        pass
+
+
+    # Fetch entries
+    def update_streams(self, cat, search=None):
+
+        ucat = re.sub("\W+", "", cat.lower())
+        html = ahttp.get(self.base.format(ucat, conf.windowsmedia_culture))
+        # onclick="Listen('31e11281-cf43-4d39-9164-77721604380b', 'DJ Perry Radio', 'http://www.djperryradio.com/', 'More Stations', '20', true);">
+
+        r = []
+        ls = re.findall(r"""
+            onclick="Listen\('([\w\-]+)',\s*'(.+?)',\s*'(.+?)',
+        """, html, re.X|re.S)
+        for id, title, homepage in ls:
+            r.append(dict(
+                id = id,
+                title = unhtml(title),
+                homepage = ahttp.fix_url(homepage),
+                url = self._url.format(id, conf.windowsmedia_culture),
+                bitrate = 0,
+            ))
+            print r
+        return r
+      
+
diff --git a/favicon.py b/favicon.py
deleted file mode 100644
index d4bbc42..0000000
--- a/favicon.py
+++ /dev/null
@@ -1,402 +0,0 @@
-#
-# encoding: utf-8
-# api: python
-# title: favicon download
-# description: retrieves favicons for station homepages, plus utility code for display preparation
-# config:
-#    <var name="always_google" value="1" description="always use google favicon to png conversion service" />
-#    <var name="only_google" value="1" description="don't try other favicon retrieval methods, if google service fails" />
-#    <var name="delete_google_stub" value="1" description="delete placeholder favicons" />
-# type: module
-#
-#
-#  This module fetches favicon.ico files and prepares .png images for each domain
-#  in the stations list. Homepage URLs are used for this.
-#
-#  Files end up in:
-#     /home/user/.config/streamtuner2/icons/www.example.org.png
-#
-#  Currently relies on Google conversion service, because urllib+PIL conversion
-#  method is still flaky, and a bit slower. Future version might use imagemagick.
-#
-
-
-always_google = 1      # use favicon service for speed
-only_google = 1        # if that fails, try our other/slower methods?
-delete_google_stub = 1   # don't keep placeholder images
-google_placeholder_filesizes = (726,896)
-
-
-import os, os.path
-from compat2and3 import xrange, urllib
-import re
-from config import conf
-try: from processing import Process as Thread
-except: from threading import Thread
-import ahttp
-
-
-
-# ensure that we don't try to download a single favicon twice per session,
-# if it's not available the first time, we won't get it after switching stations back and forth
-tried_urls = []
-
-
-
-
-# walk through entries
-def download_all(entries):
-  t = Thread(target= download_thread, args= ([entries]))
-  t.start()
-def download_thread(entries):
-    for e in entries:
-        # try just once
-        if e.get("homepage") in tried_urls:
-            continue
-        # retrieve specific img url as favicon
-        elif e.get("img"):
-            localcopy(e["img"], True)
-            continue
-        # favicon from homepage URL
-        elif e.get("homepage"):
-            download(e["homepage"])
-        # remember
-        tried_urls.append(e.get("homepage"))
-    pass
-
-# download a single favicon for currently playing station
-def download_playing(row):
-    if conf.google_homepage and not row.get("homepage"):
-        google_find_homepage(row)
-    if conf.load_favicon and row.get("homepage"):
-        download_all([row])
-    pass
-
-
-
-#--- unrelated ---
-def google_find_homepage(row):
-    """ Searches for missing homepage URL via Google. """
-    if row.get("url") not in tried_urls:
-        tried_urls.append(row.get("url"))
-
-        rx_t = re.compile('^(([^-:]+.?){1,2})')
-        rx_u = re.compile('"(http://[^"]+)" class=l')
-
-        # extract first title parts
-        title = rx_t.search(row["title"])
-        if title:
-            title = title.group(0).replace(" ", "%20")
-            
-            # do a google search
-            html = ahttp.get("http://www.google.de/search?hl=de&q="+title, params={}, ajax=1)
-            
-            # find first URL hit
-            url = rx_u.search(html)
-            if url:
-                row["homepage"] = ahttp.fix_url(url.group(1))
-    pass
-#-----------------
-
-
-
-# extract domain name
-def domain(url):
-    if url.startswith("http://"):
-        return url[7:url.find("/", 8)]  # we assume our URLs are fixed already (http://example.org/ WITH trailing slash!)
-    else:
-        return "null"
-
-# local filename
-def name(url):
-    return domain(url) + ".png"
-  
-# local filename
-def file(url):
-    icon_dir = conf.dir + "/icons"
-    if not os.path.exists(icon_dir):
-        os.mkdir(icon_dir)
-        open(icon_dir+"/.nobackup", "w").close()
-    return icon_dir + "/" + name(url)
-
-# does the favicon exist
-def available(url):
-    return os.path.exists(file(url))
-    
-    
-# copy image from url into icons/ directory
-def localcopy(url, download=False):
-    if url.startswith("http"):
-        fn = re.sub("[:/]", "_", url)
-        fn = conf.dir + "/icons/" + fn
-        if os.path.exists(fn):
-            return fn
-        elif download:
-            imgdata = ahttp.get(url, binary=1)
-            with open(fn, "wb") as f:
-                f.write(imgdata)
-                f.close()
-        if os.path.exists(fn):    
-            return fn
-    else:
-        return url
-
-
-
-
-# download favicon for given URL
-def download(url):
-
-  # skip if .png for domain already exists
-  if available(url):
-    return
-
-
-  # fastest method, so default to google for now
-  if always_google:
-      google_ico2png(url)
-      if available(url) or only_google:
-         return
-
-  try:    # look for /favicon.ico first
-    #print("favicon.ico")
-    direct_download("http://"+domain(url)+"/favicon.ico", file(url))
-
-  except:
-    try:    # extract facicon filename from website <link rel>
-      #print("html <rel favicon>")
-      html_download(url)
-
-    except:    # fallback
-      #print("google ico2png")
-      google_ico2png(url)
-
-
-
-
-# retrieve PNG via Google ico2png
-def google_ico2png(url):
-
-  #try:
-     GOOGLE = "http://www.google.com/s2/favicons?domain="
-     (fn, headers) = urllib.urlretrieve(GOOGLE+domain(url), file(url))
-
-     # test for stub image
-     if delete_google_stub and (filesize(fn) in google_placeholder_filesizes):
-        os.remove(fn)
-
-  
-def filesize(fn):
-   return os.stat(fn).st_size
-
-
-
-# mime magic
-def filetype(fn):
-   f = open(fn, "rb")
-   bin = f.read(4)
-   f.close()
-   if bin[1:3] == "PNG":
-      return "image/png"
-   else:
-      return "*/*"
-
-
-
-# favicon.ico
-def direct_download(favicon, fn):
-
-#  try: 
-    # URL download
-    r = urllib.urlopen(favicon)
-    headers = r.info()
-    
-    # abort on
-    if r.getcode() >= 300:
-       raise Error("HTTP error" + r.getcode())
-    if not headers["Content-Type"].lower().find("image/"):
-       raise Error("can't use text/* content")
-       
-    # save file
-    fn_tmp = fn+".tmp"
-    f = open(fn_tmp, "wb")
-    f.write(r.read(32768))
-    f.close()
-        
-    # check type
-    if headers["Content-Type"].lower()=="image/png" and favicon.find(".png") and filetype(fn)=="image/png":
-       pngresize(fn_tmp)
-       os.mv(fn_tmp, fn)
-    else:
-       ico2png(fn_tmp, fn)
-       os.remove(fn_tmp)
-
- # except:
-  #  "File not found" and False
-
-
-  
-# peek at URL, download favicon.ico <link rel>
-def html_download(url):
-
-
-  # <link rel>
-  #try:
-    # download html, look for @href in <link rel=shortcut icon>
-    r = urllib.urlopen(url)
-    html = r.read(4096)
-    r.close()
-    rx = re.compile("""<link[^<>]+rel\s*=\s*"?\s*(?:shortcut\s+|fav)?icon[^<>]+href=["'](?P<href>[^<>"']+)["'<>\s].""")
-    favicon = "".join(rx.findall(html))
-    
-    # url or
-    if favicon.startswith("http://"):
-       None
-    # just /pathname
-    else:
-       favicon = ahttp.urlparse.urljoin(url, favicon)
-       #favicon = "http://" + domain(url) + "/" + favicon
-
-    # download
-    direct_download(favicon, file(url))
-
-
-
-
-
-
-#
-# title: workaround for PIL.Image to preserve the transparency for .ico import
-#
-# http://stackoverflow.com/questions/987916/how-to-determine-the-transparent-color-index-of-ico-image-with-pil
-# http://djangosnippets.org/snippets/1287/
-#
-# Author: dc
-# Posted: January 17, 2009
-# Languag: Python
-# Django Version: 1.0
-# Tags: pil image ico 
-# Score: 2 (after 2 ratings)
-#
-         
-import operator
-import struct
-
-try:
-    from PIL import BmpImagePlugin, PngImagePlugin, Image
-except Exception as e:
-    print("no PIL", e)
-    always_google = 1
-    only_google = 1
-
-
-def load_icon(file, index=None):
-    '''
-    Load Windows ICO image.
-
-    See http://en.wikipedia.org/w/index.php?oldid=264332061 for file format
-    description.
-    '''
-    if isinstance(file, basestring):
-        file = open(file, 'rb')
-
-    try:
-        header = struct.unpack('<3H', file.read(6))
-    except:
-        raise IOError('Not an ICO file')
-
-    # Check magic
-    if header[:2] != (0, 1):
-        raise IOError('Not an ICO file')
-
-    # Collect icon directories
-    directories = []
-    for i in xrange(header[2]):
-        directory = list(struct.unpack('<4B2H2I', file.read(16)))
-        for j in xrange(3):
-            if not directory[j]:
-                directory[j] = 256
-
-        directories.append(directory)
-
-    if index is None:
-        # Select best icon
-        directory = max(directories, key=operator.itemgetter(slice(0, 3)))
-    else:
-        directory = directories[index]
-
-    # Seek to the bitmap data
-    file.seek(directory[7])
-
-    prefix = file.read(16)
-    file.seek(-16, 1)
-
-    if PngImagePlugin._accept(prefix):
-        # Windows Vista icon with PNG inside
-        image = PngImagePlugin.PngImageFile(file)
-    else:
-        # Load XOR bitmap
-        image = BmpImagePlugin.DibImageFile(file)
-        if image.mode == 'RGBA':
-            # Windows XP 32-bit color depth icon without AND bitmap
-            pass
-        else:
-            # Patch up the bitmap height
-            image.size = image.size[0], image.size[1] >> 1
-            d, e, o, a = image.tile[0]
-            image.tile[0] = d, (0, 0) + image.size, o, a
-
-            # Calculate AND bitmap dimensions. See
-            # http://en.wikipedia.org/w/index.php?oldid=264236948#Pixel_storage
-            # for description
-            offset = o + a[1] * image.size[1]
-            stride = ((image.size[0] + 31) >> 5) << 2
-            size = stride * image.size[1]
-
-            # Load AND bitmap
-            file.seek(offset)
-            string = file.read(size)
-            mask = Image.fromstring('1', image.size, string, 'raw',
-                                    ('1;I', stride, -1))
-
-            image = image.convert('RGBA')
-            image.putalpha(mask)
-
-    return image
-
-
-
-
-# convert .ico file to .png format
-def ico2png(ico, png_fn):
-  #print("ico2png", ico, png, image)
-  
-  try:  # .ico
-    image = load_icon(ico, None)
-  except:  # automatic img file type guessing
-    image = Image.open(ico)
-       
-  # resize
-  if image.size[0] > 16:
-    image.resize((16, 16), Image.ANTIALIAS)
-
-  # .png format
-  image.save(png_fn, "PNG", quality=98)
-
-
-# resize an image
-def pngresize(fn, x=16, y=16):
-  image = Image.open(fn)
-  if image.size[0] > x:
-    image.resize((x, y), Image.ANTIALIAS)
-    image.save(fn, "PNG", quality=98)
-
-
-
-
-#-- test
-if __name__ == "__main__":
-    import sys
-    download(sys.argv[1])
-
-
diff --git a/g.py b/g.py
deleted file mode 100644
index b679756..0000000
--- a/g.py
+++ /dev/null
@@ -1,15 +0,0 @@
-from itertools import groupby
-
-ls = [(0,7), (1,7), (0,5), (1,5), (2,5), (0,9), (9,9)]
-
-i = 0
-def grp(kv):
-    global i
-    if kv[0] == 0:
-        i += 1
-    return i
-
-
-for i,row in groupby(ls, grp):
-    print list(row)
-
diff --git a/gtk3.xml b/gtk3.xml
index 6c15bc2..5239bcf 100644
--- a/gtk3.xml
+++ b/gtk3.xml
@@ -2,14 +2,23 @@
 <!-- Generated with glade 3.16.1 -->
 <interface>
   <requires lib="gtk+" version="3.0"/>
+  <object class="GtkAdjustment" id="adjustment_config_max_streams">
+    <property name="lower">50</property>
+    <property name="upper">2000</property>
+    <property name="value">500</property>
+    <property name="step_increment">25</property>
+    <property name="page_increment">100</property>
+  </object>
   <object class="GtkListStore" id="config_play">
     <columns>
       <!-- column-name type -->
       <column type="gchararray"/>
       <!-- column-name app -->
       <column type="gchararray"/>
-      <!-- column-name gboolean1 -->
+      <!-- column-name editable -->
       <column type="gboolean"/>
+      <!-- column-name icon -->
+      <column type="gchararray"/>
     </columns>
   </object>
   <object class="GtkListStore" id="config_record">
@@ -18,8 +27,10 @@
       <column type="gchararray"/>
       <!-- column-name app -->
       <column type="gchararray"/>
-      <!-- column-name gboolean1 -->
+      <!-- column-name editable -->
       <column type="gboolean"/>
+      <!-- column-name icon -->
+      <column type="gchararray"/>
     </columns>
   </object>
   <object class="GtkWindow" id="win_config">
@@ -77,6 +88,7 @@
                             </child>
                             <child>
                               <object class="GtkScrolledWindow" id="scrolledwindow4">
+                                <property name="height_request">200</property>
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <child>
@@ -85,7 +97,7 @@
                                     <property name="height_request">200</property>
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
-                                    <property name="border_width">5</property>
+                                    <property name="border_width">2</property>
                                     <property name="model">config_play</property>
                                     <property name="headers_clickable">False</property>
                                     <property name="rules_hint">True</property>
@@ -114,10 +126,16 @@
                                     </child>
                                     <child>
                                       <object class="GtkTreeViewColumn" id="tvc_config_player_app">
-                                        <property name="spacing">10</property>
+                                        <property name="spacing">5</property>
                                         <property name="min_width">300</property>
                                         <property name="title" translatable="yes">Application</property>
                                         <child>
+                                          <object class="GtkCellRendererPixbuf" id="tvcr_config_player_bin"/>
+                                          <attributes>
+                                            <attribute name="stock-id">3</attribute>
+                                          </attributes>
+                                        </child>
+                                        <child>
                                           <object class="GtkCellRendererText" id="tvcr_config_player_app">
                                             <signal name="edited" handler="config_play_list_edit_col1" swapped="no"/>
                                           </object>
@@ -138,7 +156,23 @@
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkLabel" id="label_record3">
+                              <object class="GtkLabel" id="label_player2">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="xalign">0.019999999552965164</property>
+                                <property name="yalign">0.49000000953674316</property>
+                                <property name="label" translatable="yes"><small>You can set the same player for all formats. And audio/* and video/* would even suffice.</small></property>
+                                <property name="use_markup">True</property>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="padding">5</property>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label_player3">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
                                 <property name="xalign">0</property>
@@ -147,7 +181,7 @@
                               <packing>
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
-                                <property name="position">2</property>
+                                <property name="position">3</property>
                               </packing>
                             </child>
                             <child>
@@ -164,7 +198,7 @@
                               <packing>
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
-                                <property name="position">4</property>
+                                <property name="position">5</property>
                               </packing>
                             </child>
                             <child>
@@ -206,6 +240,12 @@
                                     <property name="min_width">300</property>
                                     <property name="title" translatable="yes">Application</property>
                                     <child>
+                                      <object class="GtkCellRendererPixbuf" id="tvcr_config_record_bin"/>
+                                      <attributes>
+                                        <attribute name="stock-id">3</attribute>
+                                      </attributes>
+                                    </child>
+                                    <child>
                                       <object class="GtkCellRendererText" id="tvcr_config_record_app">
                                         <signal name="edited" handler="config_record_list_edit_col1" swapped="no"/>
                                       </object>
@@ -220,7 +260,7 @@
                               <packing>
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
-                                <property name="position">5</property>
+                                <property name="position">6</property>
                               </packing>
                             </child>
                             <child>
@@ -229,17 +269,15 @@
                                 <property name="can_focus">True</property>
                                 <property name="xalign">0.019999999552965164</property>
                                 <property name="yalign">0.49000000953674316</property>
-                                <property name="label" translatable="yes">Use <a href="http://fossil.include-once.org/streamtuner2/wiki?name=player">placeholders</a> such as <b>%pls</b> for Shoutcast playlists,
-or pass <b>%m3u</b> for players that expect mp3 playlist files,
-and <b>%srv</b> to use direct streaming URLs.</property>
+                                <property name="label" translatable="yes"><small>Each application may optionally use <a href="http://fossil.include-once.org/streamtuner2/wiki?name=player">placeholders</a> such as <b>%pls</b> for Shoutcast playlists,
+and <b>%xspf</b> for newer, <b>%m3u</b> for older players, or even <b>%srv</b> for direct streaming URLs.</small></property>
                                 <property name="use_markup">True</property>
-                                <property name="wrap">True</property>
                               </object>
                               <packing>
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
                                 <property name="padding">5</property>
-                                <property name="position">6</property>
+                                <property name="position">7</property>
                               </packing>
                             </child>
                             <child>
@@ -255,7 +293,9 @@ and <b>%srv</b> to use direct streaming URLs.</property>
                   <object class="GtkLabel" id="label13">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="label" translatable="yes">Player</property>
+                    <property name="xpad">12</property>
+                    <property name="ypad">5</property>
+                    <property name="label" translatable="yes">🔊 Player</property>
                   </object>
                   <packing>
                     <property name="tab_fill">False</property>
@@ -279,9 +319,10 @@ and <b>%srv</b> to use direct streaming URLs.</property>
                               <object class="GtkLabel" id="label_cfg_tab_options_display">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="xalign">0.019999999552965164</property>
-                                <property name="ypad">9</property>
+                                <property name="xalign">0</property>
+                                <property name="ypad">5</property>
                                 <property name="label" translatable="yes">Display</property>
+                                <property name="justify">right</property>
                                 <attributes>
                                   <attribute name="weight" value="bold"/>
                                   <attribute name="gravity" value="east"/>
@@ -290,12 +331,13 @@ and <b>%srv</b> to use direct streaming URLs.</property>
                               <packing>
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
+                                <property name="padding">10</property>
                                 <property name="position">0</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkCheckButton" id="config_show_favicons">
-                                <property name="label" translatable="yes">Display favicons for individual music stations.</property>
+                              <object class="GtkCheckButton" id="config_show_bookmarks">
+                                <property name="label" translatable="yes">Show bookmark ☆star for favourites in stream lists.</property>
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
@@ -305,12 +347,13 @@ and <b>%srv</b> to use direct streaming URLs.</property>
                               <packing>
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
+                                <property name="padding">3</property>
                                 <property name="position">1</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkCheckButton" id="config_load_favicon">
-                                <property name="label" translatable="yes">Load favicon for played stations.</property>
+                              <object class="GtkCheckButton" id="config_auto_save_appstate">
+                                <property name="label" translatable="yes">Save window state, sizes and selections automatically.</property>
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
@@ -320,12 +363,13 @@ and <b>%srv</b> to use direct streaming URLs.</property>
                               <packing>
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
+                                <property name="padding">3</property>
                                 <property name="position">2</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkCheckButton" id="config_show_bookmarks">
-                                <property name="label" translatable="yes">Show bookmark star for favourites in stream lists.</property>
+                              <object class="GtkCheckButton" id="config_window_title">
+                                <property name="label" translatable="yes">Add current channel name to window title.</property>
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
@@ -335,77 +379,25 @@ and <b>%srv</b> to use direct streaming URLs.</property>
                               <packing>
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
+                                <property name="padding">3</property>
                                 <property name="position">3</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkLabel" id="label45">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="tooltip_text" translatable="yes">needs restart</property>
-                                <property name="xalign">0</property>
-                                <property name="label" translatable="yes">Use specific Gtk+ theme for Streamtuner2.</property>
-                              </object>
-                              <packing>
-                                <property name="expand">True</property>
-                                <property name="fill">True</property>
-                                <property name="padding">5</property>
-                                <property name="position">4</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkHBox" id="theme_cb_placeholder">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <child>
-                                  <placeholder/>
-                                </child>
-                                <child>
-                                  <placeholder/>
-                                </child>
-                              </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">5</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkCheckButton" id="config_auto_save_appstate">
-                                <property name="label" translatable="yes">Save window state, sizes and selections automatically.</property>
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="receives_default">False</property>
-                                <property name="xalign">0</property>
-                                <property name="draw_indicator">True</property>
-                              </object>
-                              <packing>
-                                <property name="expand">True</property>
-                                <property name="fill">True</property>
-                                <property name="padding">5</property>
-                                <property name="position">6</property>
-                              </packing>
+                              <placeholder/>
                             </child>
                             <child>
                               <placeholder/>
                             </child>
                             <child>
-                              <object class="GtkLabel" id="label2spc3">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                              </object>
-                              <packing>
-                                <property name="expand">True</property>
-                                <property name="fill">True</property>
-                                <property name="position">8</property>
-                              </packing>
+                              <placeholder/>
                             </child>
                             <child>
                               <object class="GtkLabel" id="label_cfg_tab_options_display3">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="xalign">0.019999999552965164</property>
-                                <property name="ypad">9</property>
+                                <property name="xalign">0</property>
+                                <property name="ypad">5</property>
                                 <property name="label" translatable="yes">Station loading</property>
                                 <attributes>
                                   <attribute name="weight" value="bold"/>
@@ -415,12 +407,19 @@ and <b>%srv</b> to use direct streaming URLs.</property>
                               <packing>
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
-                                <property name="position">9</property>
+                                <property name="padding">10</property>
+                                <property name="position">7</property>
                               </packing>
                             </child>
                             <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
                               <object class="GtkCheckButton" id="config_pyquery">
-                                <property name="label" translatable="yes">Prefer HTML traversing (PyQuery) over regex text matching.</property>
+                                <property name="label" translatable="yes">Try PyQuery/HTML traversion before regex station extraction.</property>
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
@@ -435,35 +434,28 @@ and <b>%srv</b> to use direct streaming URLs.</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkLabel" id="doc_pyquery_vs_regex">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="xalign">0</property>
-                                <property name="label" translatable="yes"><small>Most plugins intellegently fall back, but sometimes overriding
-the website extraction method can fix some station list update errors.</small></property>
-                                <property name="use_markup">True</property>
-                              </object>
-                              <packing>
-                                <property name="expand">True</property>
-                                <property name="fill">True</property>
-                                <property name="position">11</property>
-                              </packing>
+                              <placeholder/>
                             </child>
                             <child>
                               <object class="GtkHBox" id="hbox5">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
                                 <child>
-                                  <object class="GtkEntry" id="config_max_streams">
+                                  <object class="GtkSpinButton" id="config_max_streams">
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
-                                    <property name="max_length">5</property>
-                                    <property name="invisible_char">●</property>
-                                    <property name="width_chars">5</property>
-                                    <property name="text" translatable="yes">500</property>
-                                    <property name="shadow_type">out</property>
+                                    <property name="max_length">8</property>
+                                    <property name="width_chars">7</property>
+                                    <property name="primary_icon_stock">gtk-sort-ascending</property>
                                     <property name="primary_icon_activatable">False</property>
                                     <property name="secondary_icon_activatable">False</property>
+                                    <property name="primary_icon_sensitive">False</property>
+                                    <property name="secondary_icon_sensitive">False</property>
+                                    <property name="adjustment">adjustment_config_max_streams</property>
+                                    <property name="climb_rate">50.020000000000003</property>
+                                    <property name="numeric">True</property>
+                                    <property name="wrap">True</property>
+                                    <property name="value">500</property>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
@@ -481,6 +473,7 @@ the website extraction method can fix some station list update errors.</small
 <small>Some plugins use custom overrides.</small></property>
                                     <property name="use_markup">True</property>
                                     <property name="ellipsize">end</property>
+                                    <property name="angle">0.01</property>
                                   </object>
                                   <packing>
                                     <property name="expand">True</property>
@@ -492,7 +485,7 @@ the website extraction method can fix some station list update errors.</small
                               <packing>
                                 <property name="expand">False</property>
                                 <property name="fill">False</property>
-                                <property name="padding">5</property>
+                                <property name="padding">8</property>
                                 <property name="position">12</property>
                               </packing>
                             </child>
@@ -511,12 +504,13 @@ the website extraction method can fix some station list update errors.</small
                               <packing>
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
+                                <property name="padding">3</property>
                                 <property name="position">14</property>
                               </packing>
                             </child>
                             <child>
                               <object class="GtkCheckButton" id="config_heuristic_bookmark_update">
-                                <property name="label" translatable="yes">Update favorites from freshened stream URLs.</property>
+                                <property name="label" translatable="yes">Update bookmarked stream URLs when updating station lists.</property>
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
@@ -526,21 +520,23 @@ the website extraction method can fix some station list update errors.</small
                               <packing>
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
+                                <property name="padding">3</property>
                                 <property name="position">15</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkCheckButton" id="config_google_homepage">
-                                <property name="label" translatable="yes">Google missing station homepages.</property>
+                              <object class="GtkCheckButton" id="config_auto_save_stations">
+                                <property name="label" translatable="yes">Save station lists after editing or internal updates (favicon or dnd).</property>
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
-                                <property name="xalign">0</property>
+                                <property name="xalign">0.0099999997764825821</property>
                                 <property name="draw_indicator">True</property>
                               </object>
                               <packing>
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
+                                <property name="padding">3</property>
                                 <property name="position">16</property>
                               </packing>
                             </child>
@@ -551,34 +547,62 @@ the website extraction method can fix some station list update errors.</small
                               <placeholder/>
                             </child>
                             <child>
-                              <placeholder/>
+                              <object class="GtkLabel" id="label_cfg_tab_options_display2">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="yalign">0</property>
+                                <property name="ypad">5</property>
+                                <property name="label" translatable="yes">Playlist conversion</property>
+                                <attributes>
+                                  <attribute name="weight" value="bold"/>
+                                  <attribute name="gravity" value="east"/>
+                                </attributes>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="padding">10</property>
+                                <property name="position">19</property>
+                              </packing>
                             </child>
                             <child>
-                              <object class="GtkLabel" id="label4spc">
+                              <object class="GtkCheckButton" id="config_reuse_m3u">
+                                <property name="label" translatable="yes">Keep and reuse temporary .pls/.m3u files for played stations.</property>
                                 <property name="visible">True</property>
-                                <property name="can_focus">False</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">False</property>
+                                <property name="xalign">0</property>
+                                <property name="draw_indicator">True</property>
                               </object>
                               <packing>
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
+                                <property name="padding">5</property>
                                 <property name="position">20</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkLabel" id="label_cfg_tab_options_display1">
+                              <object class="GtkCheckButton" id="config_playlist_asis">
                                 <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="xalign">0.019999999552965164</property>
-                                <property name="ypad">9</property>
-                                <property name="label" translatable="yes">System</property>
-                                <attributes>
-                                  <attribute name="weight" value="bold"/>
-                                  <attribute name="gravity" value="east"/>
-                                </attributes>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">False</property>
+                                <property name="xalign">0</property>
+                                <property name="draw_indicator">True</property>
+                                <child>
+                                  <object class="GtkLabel" id="label4">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="label" translatable="yes">Forgo any streaming URL and playlist format conversion for players.
+<small>(Ignore all <b>%fmt</b> placeholders. Sometimes faster, but won't work with all channels.)</small></property>
+                                    <property name="use_markup">True</property>
+                                  </object>
+                                </child>
                               </object>
                               <packing>
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
+                                <property name="padding">5</property>
                                 <property name="position">21</property>
                               </packing>
                             </child>
@@ -589,6 +613,26 @@ the website extraction method can fix some station list update errors.</small
                               <placeholder/>
                             </child>
                             <child>
+                              <object class="GtkLabel" id="label_cfg_tab_options_display1">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="yalign">0</property>
+                                <property name="ypad">5</property>
+                                <property name="label" translatable="yes">System</property>
+                                <attributes>
+                                  <attribute name="weight" value="bold"/>
+                                  <attribute name="gravity" value="east"/>
+                                </attributes>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="padding">10</property>
+                                <property name="position">24</property>
+                              </packing>
+                            </child>
+                            <child>
                               <object class="GtkHBox" id="hbox2tmpfiles">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
@@ -627,29 +671,13 @@ the website extraction method can fix some station list update errors.</small
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
                                 <property name="padding">5</property>
-                                <property name="position">24</property>
+                                <property name="position">25</property>
                               </packing>
                             </child>
                             <child>
                               <placeholder/>
                             </child>
                             <child>
-                              <object class="GtkCheckButton" id="config_reuse_m3u">
-                                <property name="label" translatable="yes">Keep and reuse temporary .m3u files for played stations.</property>
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="receives_default">False</property>
-                                <property name="xalign">0.5</property>
-                                <property name="draw_indicator">True</property>
-                              </object>
-                              <packing>
-                                <property name="expand">True</property>
-                                <property name="fill">True</property>
-                                <property name="padding">5</property>
-                                <property name="position">26</property>
-                              </packing>
-                            </child>
-                            <child>
                               <placeholder/>
                             </child>
                             <child>
@@ -714,11 +742,47 @@ the website extraction method can fix some station list update errors.</small
                               <packing>
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
-                                <property name="padding">5</property>
+                                <property name="padding">3</property>
                                 <property name="position">30</property>
                               </packing>
                             </child>
                             <child>
+                              <object class="GtkCheckButton" id="config_nothreads">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">False</property>
+                                <property name="xalign">0</property>
+                                <property name="draw_indicator">True</property>
+                                <child>
+                                  <object class="GtkLabel" id="label2">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="label" translatable="yes">Disable <i>"threading"</i> for user interface.
+<small>Makes browsing appear slower. But avoids some crashes with Gtk3.</small></property>
+                                    <property name="use_markup">True</property>
+                                  </object>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="padding">3</property>
+                                <property name="position">31</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
                               <placeholder/>
                             </child>
                           </object>
@@ -734,7 +798,9 @@ the website extraction method can fix some station list update errors.</small
                   <object class="GtkLabel" id="label20">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="label" translatable="yes">Options</property>
+                    <property name="xpad">12</property>
+                    <property name="ypad">5</property>
+                    <property name="label" translatable="yes">☑ Options</property>
                   </object>
                   <packing>
                     <property name="position">1</property>
@@ -742,12 +808,12 @@ the website extraction method can fix some station list update errors.</small
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkScrolledWindow" id="scrolledwindow1">
+                  <object class="GtkScrolledWindow" id="scrolledwindow5">
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
                     <property name="hscrollbar_policy">never</property>
                     <child>
-                      <object class="GtkViewport" id="viewport1">
+                      <object class="GtkViewport" id="viewport4">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
                         <property name="border_width">15</property>
@@ -759,12 +825,12 @@ the website extraction method can fix some station list update errors.</small
                             <property name="can_focus">False</property>
                             <property name="spacing">10</property>
                             <child>
-                              <object class="GtkLabel" id="label1cplginsdoc">
+                              <object class="GtkLabel" id="label1cplginsdoc1">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
                                 <property name="xalign">0.05000000074505806</property>
-                                <property name="label" translatable="yes"><b>Channels</b> show up as tabs. While <b>feature</b> <i>plugins</i> add menu entries
-or internal functions. Changes take effect after restarting streamtuner2.</property>
+                                <property name="label" translatable="yes"><b>Channels</b> show up as notebook tabs. Changed options take effect
+immediately, while plugin enabling/disabling requires a restart of ST2.</property>
                                 <property name="use_markup">True</property>
                               </object>
                               <packing>
@@ -774,46 +840,10 @@ or internal functions. Changes take effect after restarting streamtuner2.</prope
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkHBox" id="hbox6">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <child>
-                                  <object class="GtkLabel" id="label27">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">False</property>
-                                    <property name="xalign">0.40999999642372131</property>
-                                    <property name="label" translatable="yes">Tab ordering</property>
-                                  </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">True</property>
-                                    <property name="padding">6</property>
-                                    <property name="position">0</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <object class="GtkEntry" id="config_channel_order">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="invisible_char">●</property>
-                                    <property name="primary_icon_activatable">False</property>
-                                    <property name="secondary_icon_activatable">False</property>
-                                  </object>
-                                  <packing>
-                                    <property name="expand">True</property>
-                                    <property name="fill">True</property>
-                                    <property name="position">1</property>
-                                  </packing>
-                                </child>
-                              </object>
-                              <packing>
-                                <property name="expand">True</property>
-                                <property name="fill">True</property>
-                                <property name="position">1</property>
-                              </packing>
+                              <placeholder/>
                             </child>
                             <child>
-                              <object class="GtkHSeparator" id="hseparator1">
+                              <object class="GtkHSeparator" id="hseparator2">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
                               </object>
@@ -970,14 +1000,224 @@ or internal functions. Changes take effect after restarting streamtuner2.</prope
                     </child>
                   </object>
                   <packing>
-                    <property name="position">3</property>
+                    <property name="position">2</property>
                   </packing>
                 </child>
                 <child type="tab">
-                  <object class="GtkLabel" id="label44">
+                  <object class="GtkLabel" id="label1">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="xpad">12</property>
+                    <property name="ypad">5</property>
+                    <property name="label" translatable="yes">📻 Channels</property>
+                  </object>
+                  <packing>
+                    <property name="position">2</property>
+                    <property name="tab_fill">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkScrolledWindow" id="scrolledwindow1">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="hscrollbar_policy">never</property>
+                    <child>
+                      <object class="GtkViewport" id="viewport1">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="border_width">15</property>
+                        <property name="resize_mode">queue</property>
+                        <property name="shadow_type">none</property>
+                        <child>
+                          <object class="GtkVBox" id="feature_options">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="spacing">10</property>
+                            <child>
+                              <object class="GtkLabel" id="label1cplginsdoc">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0.05000000074505806</property>
+                                <property name="label" translatable="yes"><b>Feature</b> <i>plugins</i> can add menu entries, or internal functionilty,
+or appear as further categories within the bookmarks tab.</property>
+                                <property name="use_markup">True</property>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <object class="GtkHSeparator" id="hseparator1">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="position">3</property>
+                  </packing>
+                </child>
+                <child type="tab">
+                  <object class="GtkLabel" id="label44">
                     <property name="can_focus">False</property>
-                    <property name="label" translatable="yes">Channel
-Plugins</property>
+                    <property name="xpad">12</property>
+                    <property name="ypad">5</property>
+                    <property name="label" translatable="yes">🔌 Features</property>
                   </object>
                   <packing>
                     <property name="position">3</property>
@@ -1069,13 +1309,14 @@ Plugins</property>
     <property name="stock">gtk-add</property>
   </object>
   <object class="GtkDialog" id="search_dialog">
-    <property name="width_request">325</property>
+    <property name="width_request">375</property>
     <property name="can_focus">False</property>
     <property name="opacity">0.94999999999999996</property>
     <property name="border_width">5</property>
     <property name="title" translatable="yes">station search</property>
     <property name="window_position">center-on-parent</property>
     <property name="destroy_with_parent">True</property>
+    <property name="icon_name">edit-find</property>
     <property name="type_hint">dialog</property>
     <property name="gravity">center</property>
     <signal name="close" handler="search_cancel" swapped="no"/>
@@ -1090,21 +1331,6 @@ Plugins</property>
             <property name="visible">True</property>
             <property name="can_focus">False</property>
             <property name="layout_style">end</property>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
           </object>
           <packing>
             <property name="expand">False</property>
@@ -1119,17 +1345,7 @@ Plugins</property>
             <property name="can_focus">False</property>
             <property name="spacing">20</property>
             <child>
-              <object class="GtkLabel" id="label2">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="label" translatable="yes"><b><big>search</big></b></property>
-                <property name="use_markup">True</property>
-              </object>
-              <packing>
-                <property name="expand">True</property>
-                <property name="fill">True</property>
-                <property name="position">0</property>
-              </packing>
+              <placeholder/>
             </child>
             <child>
               <placeholder/>
@@ -1139,11 +1355,12 @@ Plugins</property>
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
                 <child>
-                  <object class="GtkLabel" id="label1sd">
+                  <object class="GtkImage" id="search_img">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="ypad">10</property>
-                    <property name="label" translatable="yes">for</property>
+                    <property name="tooltip_text" translatable="yes">The Findeeeeeeeer</property>
+                    <property name="stock">gtk-find</property>
+                    <property name="icon_size">6</property>
                   </object>
                   <packing>
                     <property name="expand">True</property>
@@ -1152,16 +1369,38 @@ Plugins</property>
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkEntry" id="search_full">
+                  <object class="GtkVBox" id="box1sd">
                     <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="has_focus">True</property>
-                    <property name="is_focus">True</property>
-                    <property name="tooltip_text" translatable="yes">A single word to search for in all stations.</property>
-                    <property name="invisible_char">●</property>
-                    <property name="activates_default">True</property>
-                    <property name="primary_icon_activatable">False</property>
-                    <property name="secondary_icon_activatable">False</property>
+                    <property name="can_focus">False</property>
+                    <child>
+                      <object class="GtkLabel" id="label2sd">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes"><b><big>search</big></b></property>
+                        <property name="use_markup">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkEntry" id="search_full">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="tooltip_text" translatable="yes">A single word to search for in all stations.</property>
+                        <property name="invisible_char">●</property>
+                        <property name="activates_default">True</property>
+                        <property name="primary_icon_activatable">False</property>
+                        <property name="secondary_icon_activatable">False</property>
+                      </object>
+                      <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
                   </object>
                   <packing>
                     <property name="expand">True</property>
@@ -1197,7 +1436,7 @@ Plugins</property>
                     <property name="can_focus">False</property>
                     <property name="xpad">10</property>
                     <property name="ypad">10</property>
-                    <property name="label" translatable="yes">in</property>
+                    <property name="label" translatable="yes">               in</property>
                   </object>
                   <packing>
                     <property name="expand">True</property>
@@ -1214,7 +1453,6 @@ Plugins</property>
                     <property name="xalign">0.5</property>
                     <property name="active">True</property>
                     <property name="draw_indicator">True</property>
-                    <property name="group">search_dialog_current</property>
                   </object>
                   <packing>
                     <property name="expand">True</property>
@@ -1239,7 +1477,13 @@ Plugins</property>
                     <property name="position">2</property>
                   </packing>
                 </child>
-              </object>
+                <child>
+                  <placeholder/>
+                </child>
+                <child>
+                  <placeholder/>
+                </child>
+              </object>
               <packing>
                 <property name="expand">True</property>
                 <property name="fill">True</property>
@@ -1247,16 +1491,13 @@ Plugins</property>
               </packing>
             </child>
             <child>
-              <placeholder/>
-            </child>
-            <child>
               <object class="GtkHBox" id="hbox3">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
                 <property name="spacing">20</property>
                 <child>
                   <object class="GtkButton" id="cache_search">
-                    <property name="label" translatable="yes">Cache _find</property>
+                    <property name="label" translatable="yes">Cache s_can</property>
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
                     <property name="receives_default">False</property>
@@ -1283,7 +1524,7 @@ Plugins</property>
                     <property name="can_default">True</property>
                     <property name="has_default">True</property>
                     <property name="receives_default">True</property>
-                    <property name="tooltip_text" translatable="yes">Instead of doing a cache search, go through the search functions on the directory service homepages. (UNIMPLEMENTED)</property>
+                    <property name="tooltip_text" translatable="yes">Instead of doing a cache search, go through the search functions on the directory service homepages. (Not implemented by all channels.)</property>
                     <property name="image">image2</property>
                     <property name="use_underline">True</property>
                     <signal name="clicked" handler="search_srv" swapped="no"/>
@@ -1311,1152 +1552,31 @@ Plugins</property>
       </object>
     </child>
   </object>
-  <object class="GtkMenu" id="streamactions">
+  <object class="GtkImage" id="image3">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
-    <child>
-      <object class="GtkMenuItem" id="streamactions_play">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="label" translatable="yes">play</property>
-        <property name="use_underline">True</property>
-        <signal name="activate" handler="on_play_clicked" swapped="no"/>
-      </object>
-    </child>
-    <child>
-      <object class="GtkMenuItem" id="streamactions_record">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="label" translatable="yes">record</property>
-        <property name="use_underline">True</property>
-        <signal name="activate" handler="on_record_clicked" swapped="no"/>
-      </object>
-    </child>
-    <child>
-      <object class="GtkMenuItem" id="streamactions_bookmark">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="label" translatable="yes">bookmark</property>
-        <property name="use_underline">True</property>
-        <signal name="activate" handler="bookmark" swapped="no"/>
-      </object>
-    </child>
-    <child>
-      <object class="GtkMenuItem" id="extensionsCTM">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="label" translatable="yes">Extensions</property>
-        <property name="use_underline">True</property>
-      </object>
-    </child>
-    <child>
-      <object class="GtkSeparatorMenuItem" id="----">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-      </object>
-    </child>
-    <child>
-      <object class="GtkMenuItem" id="save">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="label" translatable="yes">save</property>
-        <property name="use_underline">True</property>
-        <signal name="activate" handler="save_as" swapped="no"/>
-      </object>
-    </child>
-    <child>
-      <object class="GtkMenuItem" id="edit">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="label" translatable="yes">edit</property>
-        <property name="use_underline">True</property>
-        <signal name="activate" handler="streamedit_open" swapped="no"/>
-      </object>
-    </child>
-    <child>
-      <object class="GtkSeparatorMenuItem" id="menuitem1">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-      </object>
-    </child>
-    <child>
-      <object class="GtkMenuItem" id="homepage">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="label" translatable="yes">station homepage</property>
-        <property name="use_underline">True</property>
-        <signal name="activate" handler="on_homepage_stream_clicked" swapped="no"/>
-      </object>
-    </child>
+    <property name="stock">gtk-home</property>
   </object>
-  <object class="GtkDialog" id="timer_dialog">
+  <object class="GtkImage" id="image4">
+    <property name="visible">True</property>
     <property name="can_focus">False</property>
-    <property name="border_width">5</property>
-    <property name="type_hint">normal</property>
-    <signal name="close" handler="timer_cancel" swapped="no"/>
-    <signal name="delete-event" handler="timer_cancel" swapped="no"/>
-    <child internal-child="vbox">
-      <object class="GtkBox" id="dialog-vbox2">
+    <property name="stock">gtk-connect</property>
+  </object>
+  <object class="GtkWindow" id="win_streamtuner2">
+    <property name="width_request">500</property>
+    <property name="height_request">330</property>
+    <property name="can_focus">False</property>
+    <property name="title" translatable="yes">Streamtuner2</property>
+    <property name="default_width">980</property>
+    <property name="default_height">775</property>
+    <property name="icon">/usr/share/pixmaps/streamtuner2.png</property>
+    <signal name="delete-event" handler="gtk_main_quit" swapped="no"/>
+    <child>
+      <object class="GtkVBox" id="vbox2">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
-        <property name="spacing">2</property>
-        <child internal-child="action_area">
-          <object class="GtkButtonBox" id="dialog-action_area2">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="layout_style">end</property>
-            <child>
-              <object class="GtkButton" id="timer_cancel">
-                <property name="label" translatable="yes">cancel</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <signal name="clicked" handler="timer_cancel" swapped="no"/>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="timer_ok">
-                <property name="label" translatable="yes">ok</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <signal name="clicked" handler="timer_ok" swapped="no"/>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="pack_type">end</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
         <child>
-          <object class="GtkTable" id="table2">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="n_rows">3</property>
-            <property name="n_columns">3</property>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <object class="GtkEntry" id="timer_value">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="invisible_char">●</property>
-                <property name="text" translatable="yes">Fri,Sat 20:00-21:00</property>
-                <property name="primary_icon_activatable">False</property>
-                <property name="secondary_icon_activatable">False</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">1</property>
-                <property name="bottom_attach">2</property>
-              </packing>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-          </object>
-          <packing>
-            <property name="expand">True</property>
-            <property name="fill">True</property>
-            <property name="position">1</property>
-          </packing>
-        </child>
-      </object>
-    </child>
-    <action-widgets>
-      <action-widget response="0">timer_cancel</action-widget>
-      <action-widget response="0">timer_ok</action-widget>
-    </action-widgets>
-  </object>
-  <object class="GtkWindow" id="url_action_container">
-    <property name="can_focus">False</property>
-    <child>
-      <object class="GtkVBox" id="url_action_list">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <child>
-          <object class="GtkLabel" id="url_action_1_online_forum">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="label" translatable="yes">http://sourceforge.net/projects/streamtuner2/forums/forum/1173108</property>
-          </object>
-          <packing>
-            <property name="expand">True</property>
-            <property name="fill">True</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkLabel" id="url_action_2_fossil_wiki">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="label" translatable="yes">http://fossil.include-once.org/streamtuner2/</property>
-          </object>
-          <packing>
-            <property name="expand">True</property>
-            <property name="fill">True</property>
-            <property name="position">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkLabel" id="url_action_3_project_homepage">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="label" translatable="yes">http://milki.include-once.org/streamtuner2/</property>
-          </object>
-          <packing>
-            <property name="expand">True</property>
-            <property name="fill">True</property>
-            <property name="position">2</property>
-          </packing>
-        </child>
-      </object>
-    </child>
-  </object>
-  <object class="GtkWindow" id="win_streamedit">
-    <property name="can_focus">False</property>
-    <property name="opacity">0.94999999999999996</property>
-    <property name="border_width">5</property>
-    <property name="title" translatable="yes">inspect/edit stream data</property>
-    <property name="window_position">center-on-parent</property>
-    <property name="destroy_with_parent">True</property>
-    <property name="skip_pager_hint">True</property>
-    <signal name="delete-event" handler="streamedit_cancel" swapped="no"/>
-    <child>
-      <object class="GtkTable" id="table6">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="border_width">15</property>
-        <property name="n_rows">10</property>
-        <property name="n_columns">2</property>
-        <property name="column_spacing">5</property>
-        <property name="row_spacing">5</property>
-        <child>
-          <placeholder/>
-        </child>
-        <child>
-          <object class="GtkLabel" id="label31">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="tooltip_text" translatable="yes">Radio station name.</property>
-            <property name="xalign">0.89999997615814209</property>
-            <property name="label" translatable="yes">title</property>
-          </object>
-          <packing>
-            <property name="top_attach">1</property>
-            <property name="bottom_attach">2</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkEntry" id="streamedit_title">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="invisible_char">●</property>
-            <property name="primary_icon_activatable">False</property>
-            <property name="secondary_icon_activatable">False</property>
-          </object>
-          <packing>
-            <property name="left_attach">1</property>
-            <property name="right_attach">2</property>
-            <property name="top_attach">1</property>
-            <property name="bottom_attach">2</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkEntry" id="streamedit_playing">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="invisible_char">●</property>
-            <property name="primary_icon_activatable">False</property>
-            <property name="secondary_icon_activatable">False</property>
-          </object>
-          <packing>
-            <property name="left_attach">1</property>
-            <property name="right_attach">2</property>
-            <property name="top_attach">2</property>
-            <property name="bottom_attach">3</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkEntry" id="streamedit_homepage">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="invisible_char">●</property>
-            <property name="primary_icon_activatable">False</property>
-            <property name="secondary_icon_activatable">False</property>
-          </object>
-          <packing>
-            <property name="left_attach">1</property>
-            <property name="right_attach">2</property>
-            <property name="top_attach">3</property>
-            <property name="bottom_attach">4</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkEntry" id="streamedit_genre">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="invisible_char">●</property>
-            <property name="primary_icon_activatable">False</property>
-            <property name="secondary_icon_activatable">False</property>
-          </object>
-          <packing>
-            <property name="left_attach">1</property>
-            <property name="right_attach">2</property>
-            <property name="top_attach">4</property>
-            <property name="bottom_attach">5</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkEntry" id="streamedit_url">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="invisible_char">●</property>
-            <property name="primary_icon_activatable">False</property>
-            <property name="secondary_icon_activatable">False</property>
-          </object>
-          <packing>
-            <property name="left_attach">1</property>
-            <property name="right_attach">2</property>
-            <property name="top_attach">5</property>
-            <property name="bottom_attach">6</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkEntry" id="streamedit_favicon">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="invisible_char">●</property>
-            <property name="primary_icon_activatable">False</property>
-            <property name="secondary_icon_activatable">False</property>
-          </object>
-          <packing>
-            <property name="left_attach">1</property>
-            <property name="right_attach">2</property>
-            <property name="top_attach">6</property>
-            <property name="bottom_attach">7</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkLabel" id="label32">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="tooltip_text" translatable="yes">Either the last playing song, or a general description of the station.</property>
-            <property name="xalign">0.89999997615814209</property>
-            <property name="label" translatable="yes">playing/desc</property>
-          </object>
-          <packing>
-            <property name="top_attach">2</property>
-            <property name="bottom_attach">3</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkLabel" id="homepage1">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="xalign">0.89999997615814209</property>
-            <property name="label" translatable="yes">homepage</property>
-          </object>
-          <packing>
-            <property name="top_attach">3</property>
-            <property name="bottom_attach">4</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkLabel" id="label33">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="xalign">0.89999997615814209</property>
-            <property name="label" translatable="yes">genre</property>
-          </object>
-          <packing>
-            <property name="top_attach">4</property>
-            <property name="bottom_attach">5</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkLabel" id="label34">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="tooltip_text" translatable="yes">PLS or M3U link.</property>
-            <property name="xalign">0.89999997615814209</property>
-            <property name="label" translatable="yes">stream url</property>
-          </object>
-          <packing>
-            <property name="top_attach">5</property>
-            <property name="bottom_attach">6</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkLabel" id="label35">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="tooltip_text" translatable="yes">Homepage icon for station. Points to a local cache file.</property>
-            <property name="xalign">0.89999997615814209</property>
-            <property name="label" translatable="yes">favicon</property>
-          </object>
-          <packing>
-            <property name="top_attach">6</property>
-            <property name="bottom_attach">7</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkFixed" id="fixed2">
-            <property name="height_request">40</property>
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <child>
-              <object class="GtkButton" id="cancel5">
-                <property name="label" translatable="yes">cancel</property>
-                <property name="width_request">100</property>
-                <property name="height_request">25</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <signal name="clicked" handler="streamedit_cancel" swapped="no"/>
-              </object>
-              <packing>
-                <property name="x">100</property>
-                <property name="y">10</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="ok1">
-                <property name="label" translatable="yes">ok</property>
-                <property name="width_request">100</property>
-                <property name="height_request">25</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="tooltip_text" translatable="yes">Save changes.</property>
-                <signal name="clicked" handler="streamedit_save" swapped="no"/>
-              </object>
-              <packing>
-                <property name="x">210</property>
-                <property name="y">10</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="streamedit_new">
-                <property name="label" translatable="yes">new</property>
-                <property name="width_request">50</property>
-                <property name="height_request">25</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <signal name="clicked" handler="streamedit_new" swapped="no"/>
-              </object>
-              <packing>
-                <property name="x">5</property>
-                <property name="y">10</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="left_attach">1</property>
-            <property name="right_attach">2</property>
-            <property name="top_attach">9</property>
-            <property name="bottom_attach">10</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkLabel" id="label36">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="xalign">0.69999998807907104</property>
-            <property name="label" translatable="yes"><b>channel</b></property>
-            <property name="use_markup">True</property>
-          </object>
-        </child>
-        <child>
-          <object class="GtkLabel" id="label37">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="xalign">0.08999999612569809</property>
-            <property name="label" translatable="yes"><b>information</b></property>
-            <property name="use_markup">True</property>
-          </object>
-          <packing>
-            <property name="left_attach">1</property>
-            <property name="right_attach">2</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkEntry" id="streamedit_extra">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="invisible_char">●</property>
-            <property name="primary_icon_activatable">False</property>
-            <property name="secondary_icon_activatable">False</property>
-          </object>
-          <packing>
-            <property name="left_attach">1</property>
-            <property name="right_attach">2</property>
-            <property name="top_attach">8</property>
-            <property name="bottom_attach">9</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkLabel" id="label38">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="tooltip_text" translatable="yes">You can add extra information here, if you want. Useful for searching later. But take care that it gets reset on channel reloading.</property>
-            <property name="label" translatable="yes">extra info</property>
-          </object>
-          <packing>
-            <property name="top_attach">8</property>
-            <property name="bottom_attach">9</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkLabel" id="label39">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="tooltip_text" translatable="yes">Audio file format MIME type.</property>
-            <property name="label" translatable="yes">format</property>
-          </object>
-          <packing>
-            <property name="top_attach">7</property>
-            <property name="bottom_attach">8</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkEntry" id="streamedit_format">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="invisible_char">●</property>
-            <property name="primary_icon_activatable">False</property>
-            <property name="secondary_icon_activatable">False</property>
-          </object>
-          <packing>
-            <property name="left_attach">1</property>
-            <property name="right_attach">2</property>
-            <property name="top_attach">7</property>
-            <property name="bottom_attach">8</property>
-          </packing>
-        </child>
-      </object>
-    </child>
-  </object>
-  <object class="GtkWindow" id="win_streamtuner2">
-    <property name="width_request">500</property>
-    <property name="height_request">330</property>
-    <property name="can_focus">False</property>
-    <property name="title" translatable="yes">streamtuner2</property>
-    <property name="default_width">980</property>
-    <property name="default_height">775</property>
-    <property name="icon">/usr/share/pixmaps/streamtuner2.png</property>
-    <property name="icon_name">applications-multimedia</property>
-    <signal name="delete-event" handler="gtk_main_quit" swapped="no"/>
-    <child>
-      <object class="GtkVBox" id="vbox2">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <child>
-          <object class="GtkHBox" id="hbox8">
+          <object class="GtkHBox" id="hbox8">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
             <child>
@@ -2468,24 +1588,24 @@ Plugins</property>
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
                     <child>
-                      <object class="GtkMenuItem" id="streammenu">
+                      <object class="GtkMenuItem" id="streammenu1">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
                         <property name="label" translatable="yes">_Station</property>
                         <property name="use_underline">True</property>
                         <child type="submenu">
-                          <object class="GtkMenu" id="menu1">
+                          <object class="GtkMenu" id="streammenu">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
                             <child>
                               <object class="GtkMenuItem" id="menu_bookmark">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="label" translatable="yes">bookmark</property>
+                                <property name="label" translatable="yes">Bookmark</property>
                                 <property name="use_underline">True</property>
                                 <signal name="activate" handler="bookmark" swapped="no"/>
-                                <accelerator key="d" signal="activate" modifiers="GDK_CONTROL_MASK"/>
                                 <accelerator key="F8" signal="activate"/>
+                                <accelerator key="d" signal="activate" modifiers="GDK_CONTROL_MASK"/>
                               </object>
                             </child>
                             <child>
@@ -2496,8 +1616,8 @@ Plugins</property>
                                 <property name="use_underline">True</property>
                                 <property name="use_stock">True</property>
                                 <signal name="activate" handler="save_as" swapped="no"/>
-                                <accelerator key="F2" signal="activate"/>
                                 <accelerator key="s" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                                <accelerator key="F2" signal="activate"/>
                               </object>
                             </child>
                             <child>
@@ -2508,33 +1628,34 @@ Plugins</property>
                                 <property name="use_underline">True</property>
                                 <property name="use_stock">True</property>
                                 <signal name="activate" handler="streamedit_open" swapped="no"/>
-                                <accelerator key="F3" signal="activate"/>
-                                <accelerator key="space" signal="activate" modifiers="GDK_MOD1_MASK"/>
                                 <accelerator key="Return" signal="activate" modifiers="GDK_MOD1_MASK"/>
+                                <accelerator key="space" signal="activate" modifiers="GDK_MOD1_MASK"/>
+                                <accelerator key="F3" signal="activate"/>
                               </object>
                             </child>
                             <child>
-                              <object class="GtkMenuItem" id="extensions0">
+                              <object class="GtkSeparatorMenuItem" id="men_sepmenu_0">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkImageMenuItem" id="extensions_main0">
                                 <property name="label" translatable="yes">Extensions</property>
-                                <property name="use_underline">True</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="image">image4</property>
+                                <property name="use_stock">False</property>
                                 <child type="submenu">
                                   <object class="GtkMenu" id="extensions">
                                     <property name="visible">True</property>
                                     <property name="can_focus">False</property>
-                                    <child>
-                                      <object class="GtkSeparatorMenuItem" id="extensions1">
-                                        <property name="visible">True</property>
-                                        <property name="can_focus">False</property>
-                                      </object>
-                                    </child>
                                   </object>
                                 </child>
                               </object>
                             </child>
                             <child>
-                              <object class="GtkSeparatorMenuItem" id="separatormenuitem1">
+                              <object class="GtkSeparatorMenuItem" id="men_sepmenu_2">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
                               </object>
@@ -2583,8 +1704,8 @@ Plugins</property>
                                 <property name="use_underline">True</property>
                                 <property name="use_stock">True</property>
                                 <signal name="activate" handler="delete_entry" swapped="no"/>
-                                <accelerator key="Delete" signal="activate"/>
                                 <accelerator key="x" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                                <accelerator key="Delete" signal="activate"/>
                               </object>
                             </child>
                             <child>
@@ -2595,6 +1716,7 @@ Plugins</property>
                                 <property name="use_underline">True</property>
                                 <property name="use_stock">True</property>
                                 <signal name="activate" handler="search_open" swapped="no"/>
+                                <accelerator key="F4" signal="activate"/>
                                 <accelerator key="f" signal="activate" modifiers="GDK_CONTROL_MASK"/>
                               </object>
                             </child>
@@ -2791,10 +1913,11 @@ Plugins</property>
                               <object class="GtkMenuItem" id="menuitem10favicons">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="tooltip_text" translatable="yes">this will take a few minutes</property>
+                                <property name="tooltip_text" translatable="yes">this will take a few seconds</property>
                                 <property name="label" translatable="yes">Update favicons...</property>
                                 <property name="use_underline">True</property>
                                 <signal name="activate" handler="update_favicons" swapped="no"/>
+                                <accelerator key="F6" signal="activate"/>
                               </object>
                             </child>
                             <child>
@@ -2804,6 +1927,7 @@ Plugins</property>
                                 <property name="label" translatable="yes">Reload Category Tree</property>
                                 <property name="use_underline">True</property>
                                 <signal name="activate" handler="update_categories" swapped="no"/>
+                                <accelerator key="F5" signal="activate" modifiers="GDK_MOD1_MASK"/>
                               </object>
                             </child>
                             <child>
@@ -2831,16 +1955,17 @@ Plugins</property>
                               <object class="GtkMenuItem" id="helpmenu1">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="label" translatable="yes">documentation</property>
+                                <property name="label" translatable="yes">Documentation</property>
                                 <property name="use_underline">True</property>
                                 <signal name="activate" handler="menu_help" swapped="no"/>
+                                <accelerator key="F1" signal="activate"/>
                               </object>
                             </child>
                             <child>
                               <object class="GtkMenuItem" id="menuonlineforum">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="label" translatable="yes">online forum</property>
+                                <property name="label" translatable="yes">Online forum</property>
                                 <property name="use_underline">True</property>
                                 <signal name="activate" handler="menu_onlineforum" swapped="no"/>
                               </object>
@@ -2849,9 +1974,10 @@ Plugins</property>
                               <object class="GtkMenuItem" id="menufossilwiki">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="label" translatable="yes">wiki/fossil/bugs</property>
+                                <property name="label" translatable="yes">Wiki/Fossil/Bugs</property>
                                 <property name="use_underline">True</property>
                                 <signal name="activate" handler="menu_fossilwiki" swapped="no"/>
+                                <accelerator key="F1" signal="activate" modifiers="GDK_CONTROL_MASK"/>
                               </object>
                             </child>
                             <child>
@@ -2953,7 +2079,25 @@ Plugins</property>
                             <property name="visible_horizontal">False</property>
                             <property name="label" translatable="yes">stop</property>
                             <property name="stock_id">gtk-cancel</property>
-                            <signal name="clicked" handler="on_stop_clicked" swapped="no"/>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="homogeneous">True</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkToolItem" id="toolbutton2">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <child>
+                              <object class="GtkLabel" id="toolbar_link">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="use_markup">True</property>
+                                <property name="justify">center</property>
+                                <property name="width_chars">24</property>
+                              </object>
+                            </child>
                           </object>
                           <packing>
                             <property name="expand">False</property>
@@ -2976,7 +2120,7 @@ Plugins</property>
                         <property name="xalign">0.10000000149011612</property>
                         <property name="secondary_icon_stock">gtk-find</property>
                         <property name="primary_icon_activatable">False</property>
-                        <property name="secondary_icon_activatable">False</property>
+                        <signal name="activate" handler="quicksearch_set" swapped="no"/>
                         <signal name="changed" handler="quicksearch_set" swapped="no"/>
                         <signal name="icon-press" handler="quicksearch_set" swapped="no"/>
                       </object>
@@ -2996,187 +2140,2910 @@ Plugins</property>
                 </child>
               </object>
               <packing>
-                <property name="expand">True</property>
-                <property name="fill">True</property>
-                <property name="position">0</property>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkImage" id="img_logo">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="events">GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON3_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_FOCUS_CHANGE_MASK | GDK_STRUCTURE_MASK | GDK_PROPERTY_CHANGE_MASK | GDK_VISIBILITY_NOTIFY_MASK | GDK_PROXIMITY_IN_MASK | GDK_PROXIMITY_OUT_MASK | GDK_SUBSTRUCTURE_MASK | GDK_SCROLL_MASK</property>
+                <property name="xpad">15</property>
+                <property name="stock">gtk-media-play</property>
+                <signal name="button-press-event" handler="double_click_channel_tab" swapped="no"/>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkNotebook" id="notebook_channels">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="tab_pos">left</property>
+            <property name="scrollable">True</property>
+            <property name="enable_popup">True</property>
+            <signal name="switch-page" handler="on_notebook_channels_switch_page" swapped="no"/>
+            <child>
+              <object class="GtkHPaned" id="v_bookmarks">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <child>
+                  <object class="GtkScrolledWindow" id="bookmarks_cat_scrollwin1">
+                    <property name="width_request">150</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <child>
+                      <object class="GtkTreeView" id="bookmarks_cat">
+                        <property name="width_request">75</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="enable_tree_lines">True</property>
+                        <signal name="button-release-event" handler="on_category_clicked" swapped="no"/>
+                        <child internal-child="selection">
+                          <object class="GtkTreeSelection" id="treeview-selection3"/>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="resize">False</property>
+                    <property name="shrink">True</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkScrolledWindow" id="bookmarks_list_scrollwin1">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <child>
+                      <object class="GtkTreeView" id="bookmarks_list">
+                        <property name="width_request">200</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <signal name="button-press-event" handler="station_context_menu" swapped="no"/>
+                        <signal name="row-activated" handler="on_stream_row_activated" swapped="no"/>
+                        <child internal-child="selection">
+                          <object class="GtkTreeSelection" id="treeview-selection4"/>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="resize">True</property>
+                    <property name="shrink">True</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="reorderable">True</property>
+              </packing>
+            </child>
+            <child type="tab">
+              <object class="GtkHBox" id="c_bookmarks">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <signal name="popup-menu" handler="on_homepage_channel_clicked" swapped="no"/>
+                <child>
+                  <object class="GtkImage" id="image7">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="stock">gtk-indent</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="l_bookmarks">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">Bookmarks</property>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="tab_expand">True</property>
+                <property name="tab_fill">False</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkHBox" id="hbox10">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <child>
+              <object class="GtkLabel" id="statusbar">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="xpad">6</property>
+                <property name="ypad">4</property>
+                <property name="angle">0.02</property>
+                <attributes>
+                  <attribute name="weight" value="medium"/>
+                  <attribute name="foreground" value="#555557575353"/>
+                </attributes>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkProgressBar" id="progress">
+                <property name="width_request">75</property>
+                <property name="height_request">16</property>
+                <property name="can_focus">False</property>
+                <property name="no_show_all">True</property>
+                <property name="fraction">1</property>
+                <property name="text" translatable="yes">loading...</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="padding">2</property>
+                <property name="pack_type">end</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">2</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <child internal-child="accessible">
+      <object class="AtkObject" id="win_streamtuner2-atkobject">
+        <property name="AtkObject::accessible-name" translatable="yes">streamtuner2</property>
+      </object>
+    </child>
+  </object>
+  <object class="GtkImage" id="image5">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-indent</property>
+    <property name="icon_size">2</property>
+  </object>
+  <object class="GtkMenu" id="streamactions">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <child>
+      <object class="GtkImageMenuItem" id="streamactions_play">
+        <property name="label">gtk-media-play</property>
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="use_underline">True</property>
+        <property name="use_stock">True</property>
+        <signal name="activate" handler="on_play_clicked" swapped="no"/>
+      </object>
+    </child>
+    <child>
+      <object class="GtkImageMenuItem" id="streamactions_record">
+        <property name="label">gtk-media-record</property>
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="use_underline">True</property>
+        <property name="use_stock">True</property>
+        <signal name="activate" handler="on_record_clicked" swapped="no"/>
+      </object>
+    </child>
+    <child>
+      <object class="GtkImageMenuItem" id="streamactions_bookmark">
+        <property name="label">Add bookmark</property>
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="image">image5</property>
+        <property name="use_stock">False</property>
+        <signal name="activate" handler="bookmark" swapped="no"/>
+      </object>
+    </child>
+    <child>
+      <object class="GtkSeparatorMenuItem" id="m_s_a_line1">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+      </object>
+    </child>
+    <child>
+      <object class="GtkMenuItem" id="extensionsCTM">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="label" translatable="yes">Extensions</property>
+        <property name="use_underline">True</property>
+        <child type="submenu">
+          <object class="GtkMenu" id="extensions_context">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+          </object>
+        </child>
+      </object>
+    </child>
+    <child>
+      <object class="GtkSeparatorMenuItem" id="m_s_a_line2">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+      </object>
+    </child>
+    <child>
+      <object class="GtkImageMenuItem" id="save">
+        <property name="label">gtk-save-as</property>
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="use_underline">True</property>
+        <property name="use_stock">True</property>
+        <signal name="activate" handler="save_as" swapped="no"/>
+      </object>
+    </child>
+    <child>
+      <object class="GtkImageMenuItem" id="edit">
+        <property name="label">gtk-edit</property>
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="use_underline">True</property>
+        <property name="use_stock">True</property>
+        <signal name="activate" handler="streamedit_open" swapped="no"/>
+      </object>
+    </child>
+    <child>
+      <object class="GtkImageMenuItem" id="homepage">
+        <property name="label">Station homepage</property>
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="image">image3</property>
+        <property name="use_stock">False</property>
+        <signal name="activate" handler="on_homepage_stream_clicked" swapped="no"/>
+      </object>
+    </child>
+  </object>
+  <object class="GtkDialog" id="timer_dialog">
+    <property name="can_focus">False</property>
+    <property name="border_width">5</property>
+    <property name="icon_name">appointment-new</property>
+    <property name="type_hint">normal</property>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="dialog-vbox2">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="spacing">2</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area2">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="timer_cancel">
+                <property name="label" translatable="yes">cancel</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="timer_ok">
+                <property name="label" translatable="yes">ok</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkTable" id="table2">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="n_rows">3</property>
+            <property name="n_columns">3</property>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <object class="GtkEntry" id="timer_value">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="invisible_char">●</property>
+                <property name="text" translatable="yes">Fri,Sat 20:00-21:00</property>
+                <property name="primary_icon_activatable">False</property>
+                <property name="secondary_icon_activatable">False</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
               </packing>
             </child>
             <child>
-              <object class="GtkImage" id="img_logo_streamtuner2">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="events">GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON3_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_FOCUS_CHANGE_MASK | GDK_STRUCTURE_MASK | GDK_PROPERTY_CHANGE_MASK | GDK_VISIBILITY_NOTIFY_MASK | GDK_PROXIMITY_IN_MASK | GDK_PROXIMITY_OUT_MASK | GDK_SUBSTRUCTURE_MASK | GDK_SCROLL_MASK</property>
-                <property name="xpad">15</property>
-                <property name="pixbuf">streamtuner2.png</property>
-                <signal name="button-press-event" handler="double_click_channel_tab" swapped="no"/>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">1</property>
-              </packing>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
             </child>
           </object>
           <packing>
-            <property name="expand">False</property>
-            <property name="fill">False</property>
-            <property name="position">0</property>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="0">timer_cancel</action-widget>
+      <action-widget response="0">timer_ok</action-widget>
+    </action-widgets>
+  </object>
+  <object class="GtkWindow" id="url_action_container">
+    <property name="can_focus">False</property>
+    <child>
+      <object class="GtkVBox" id="url_action_list">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <child>
+          <object class="GtkLabel" id="url_action_1_online_forum">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="label" translatable="yes">http://sourceforge.net/projects/streamtuner2/forums/forum/1173108</property>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="url_action_2_fossil_wiki">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="label" translatable="yes">http://fossil.include-once.org/streamtuner2/</property>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="url_action_3_project_homepage">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="label" translatable="yes">http://milki.include-once.org/streamtuner2/</property>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">2</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+  <object class="GtkWindow" id="win_streamedit">
+    <property name="can_focus">False</property>
+    <property name="opacity">0.94999999999999996</property>
+    <property name="border_width">5</property>
+    <property name="title" translatable="yes">inspect/edit stream data</property>
+    <property name="window_position">center-on-parent</property>
+    <property name="destroy_with_parent">True</property>
+    <property name="icon_name">gtk-edit</property>
+    <property name="skip_pager_hint">True</property>
+    <signal name="delete-event" handler="streamedit_cancel" swapped="no"/>
+    <child>
+      <object class="GtkTable" id="table6">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="border_width">15</property>
+        <property name="n_rows">10</property>
+        <property name="n_columns">2</property>
+        <property name="column_spacing">5</property>
+        <property name="row_spacing">5</property>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <object class="GtkLabel" id="label31">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="tooltip_text" translatable="yes">Radio station name.</property>
+            <property name="xalign">0.89999997615814209</property>
+            <property name="label" translatable="yes">title</property>
+          </object>
+          <packing>
+            <property name="top_attach">1</property>
+            <property name="bottom_attach">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkEntry" id="streamedit_title">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="invisible_char">●</property>
+            <property name="primary_icon_activatable">False</property>
+            <property name="secondary_icon_activatable">False</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="right_attach">2</property>
+            <property name="top_attach">1</property>
+            <property name="bottom_attach">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkEntry" id="streamedit_playing">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="invisible_char">●</property>
+            <property name="primary_icon_activatable">False</property>
+            <property name="secondary_icon_activatable">False</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="right_attach">2</property>
+            <property name="top_attach">2</property>
+            <property name="bottom_attach">3</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkEntry" id="streamedit_homepage">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="invisible_char">●</property>
+            <property name="primary_icon_activatable">False</property>
+            <property name="secondary_icon_activatable">False</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="right_attach">2</property>
+            <property name="top_attach">3</property>
+            <property name="bottom_attach">4</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkEntry" id="streamedit_genre">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="invisible_char">●</property>
+            <property name="primary_icon_activatable">False</property>
+            <property name="secondary_icon_activatable">False</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="right_attach">2</property>
+            <property name="top_attach">4</property>
+            <property name="bottom_attach">5</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkEntry" id="streamedit_url">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="invisible_char">●</property>
+            <property name="primary_icon_activatable">False</property>
+            <property name="secondary_icon_activatable">False</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="right_attach">2</property>
+            <property name="top_attach">5</property>
+            <property name="bottom_attach">6</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkEntry" id="streamedit_favicon">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="invisible_char">●</property>
+            <property name="primary_icon_activatable">False</property>
+            <property name="secondary_icon_activatable">False</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="right_attach">2</property>
+            <property name="top_attach">6</property>
+            <property name="bottom_attach">7</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="label32">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="tooltip_text" translatable="yes">Either the last playing song, or a general description of the station.</property>
+            <property name="xalign">0.89999997615814209</property>
+            <property name="label" translatable="yes">playing/desc</property>
+          </object>
+          <packing>
+            <property name="top_attach">2</property>
+            <property name="bottom_attach">3</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="homepage1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="xalign">0.89999997615814209</property>
+            <property name="label" translatable="yes">homepage</property>
+          </object>
+          <packing>
+            <property name="top_attach">3</property>
+            <property name="bottom_attach">4</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="label33">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="xalign">0.89999997615814209</property>
+            <property name="label" translatable="yes">genre</property>
+          </object>
+          <packing>
+            <property name="top_attach">4</property>
+            <property name="bottom_attach">5</property>
           </packing>
         </child>
         <child>
-          <object class="GtkNotebook" id="notebook_channels">
+          <object class="GtkLabel" id="label34">
             <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="scrollable">True</property>
-            <property name="enable_popup">True</property>
-            <signal name="switch-page" handler="on_notebook_channels_switch_page" swapped="no"/>
-            <child>
-              <object class="GtkHPaned" id="v_bookmarks">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <child>
-                  <object class="GtkScrolledWindow" id="bookmarks_cat_scrollwin1">
-                    <property name="width_request">150</property>
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <child>
-                      <object class="GtkTreeView" id="bookmarks_cat">
-                        <property name="width_request">75</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="enable_tree_lines">True</property>
-                        <signal name="button-release-event" handler="on_category_clicked" swapped="no"/>
-                        <child internal-child="selection">
-                          <object class="GtkTreeSelection" id="treeview-selection3"/>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                  <packing>
-                    <property name="resize">False</property>
-                    <property name="shrink">True</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkScrolledWindow" id="bookmarks_list_scrollwin1">
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <child>
-                      <object class="GtkTreeView" id="bookmarks_list">
-                        <property name="width_request">200</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <signal name="button-press-event" handler="station_context_menu" swapped="no"/>
-                        <signal name="row-activated" handler="on_stream_row_activated" swapped="no"/>
-                        <child internal-child="selection">
-                          <object class="GtkTreeSelection" id="treeview-selection4"/>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                  <packing>
-                    <property name="resize">True</property>
-                    <property name="shrink">True</property>
-                  </packing>
-                </child>
-              </object>
-            </child>
-            <child type="tab">
-              <object class="GtkHBox" id="c_bookmarks">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <signal name="popup-menu" handler="on_homepage_channel_clicked" swapped="no"/>
-                <child>
-                  <object class="GtkImage" id="image7">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="stock">gtk-indent</property>
-                  </object>
-                  <packing>
-                    <property name="expand">True</property>
-                    <property name="fill">True</property>
-                    <property name="position">0</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkLabel" id="l_bookmarks">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="label" translatable="yes">bookmarks</property>
-                  </object>
-                  <packing>
-                    <property name="expand">True</property>
-                    <property name="fill">True</property>
-                    <property name="position">1</property>
-                  </packing>
-                </child>
-              </object>
-              <packing>
-                <property name="tab_fill">False</property>
-              </packing>
-            </child>
+            <property name="can_focus">False</property>
+            <property name="tooltip_text" translatable="yes">PLS or M3U link.</property>
+            <property name="xalign">0.89999997615814209</property>
+            <property name="label" translatable="yes">stream url</property>
           </object>
           <packing>
-            <property name="expand">True</property>
-            <property name="fill">True</property>
-            <property name="position">1</property>
+            <property name="top_attach">5</property>
+            <property name="bottom_attach">6</property>
           </packing>
         </child>
         <child>
-          <object class="GtkHBox" id="hbox10">
+          <object class="GtkLabel" id="label35">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="tooltip_text" translatable="yes">Homepage icon for station. Points to a local cache file.</property>
+            <property name="xalign">0.89999997615814209</property>
+            <property name="label" translatable="yes">favicon</property>
+          </object>
+          <packing>
+            <property name="top_attach">6</property>
+            <property name="bottom_attach">7</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkFixed" id="fixed2">
+            <property name="height_request">40</property>
             <property name="visible">True</property>
             <property name="can_focus">False</property>
             <child>
-              <object class="GtkStatusbar" id="statusbar">
+              <object class="GtkButton" id="cancel5">
+                <property name="label" translatable="yes">cancel</property>
+                <property name="width_request">100</property>
+                <property name="height_request">25</property>
                 <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="spacing">2</property>
-                <property name="homogeneous">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <signal name="clicked" handler="streamedit_cancel" swapped="no"/>
               </object>
               <packing>
-                <property name="expand">True</property>
-                <property name="fill">True</property>
-                <property name="position">0</property>
+                <property name="x">100</property>
+                <property name="y">10</property>
               </packing>
             </child>
             <child>
-              <object class="GtkProgressBar" id="progress">
-                <property name="width_request">75</property>
-                <property name="can_focus">False</property>
-                <property name="fraction">0.28000000000000003</property>
-                <property name="text" translatable="yes">loading...</property>
+              <object class="GtkButton" id="ok1">
+                <property name="label" translatable="yes">ok</property>
+                <property name="width_request">100</property>
+                <property name="height_request">25</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Save changes.</property>
+                <signal name="clicked" handler="streamedit_save" swapped="no"/>
               </object>
               <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">1</property>
+                <property name="x">210</property>
+                <property name="y">10</property>
               </packing>
             </child>
             <child>
-              <object class="GtkStatusbar" id="statusbar1">
-                <property name="width_request">20</property>
+              <object class="GtkButton" id="streamedit_new">
+                <property name="label" translatable="yes">copy/new</property>
+                <property name="width_request">85</property>
+                <property name="height_request">25</property>
                 <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="spacing">2</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <signal name="clicked" handler="streamedit_new" swapped="no"/>
               </object>
               <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">2</property>
+                <property name="x">5</property>
+                <property name="y">10</property>
               </packing>
             </child>
           </object>
           <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">2</property>
+            <property name="left_attach">1</property>
+            <property name="right_attach">2</property>
+            <property name="top_attach">9</property>
+            <property name="bottom_attach">10</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="label36">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="xalign">0.69999998807907104</property>
+            <property name="label" translatable="yes"><b>channel</b></property>
+            <property name="use_markup">True</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkLabel" id="label37">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="xalign">0.08999999612569809</property>
+            <property name="label" translatable="yes"><b>information</b></property>
+            <property name="use_markup">True</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="right_attach">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkEntry" id="streamedit_extra">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="invisible_char">●</property>
+            <property name="primary_icon_activatable">False</property>
+            <property name="secondary_icon_activatable">False</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="right_attach">2</property>
+            <property name="top_attach">8</property>
+            <property name="bottom_attach">9</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="label38">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="tooltip_text" translatable="yes">You can add extra information here, if you want. Useful for searching later. But take care that it gets reset on channel reloading.</property>
+            <property name="label" translatable="yes">extra info</property>
+          </object>
+          <packing>
+            <property name="top_attach">8</property>
+            <property name="bottom_attach">9</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="label39">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="tooltip_text" translatable="yes">Audio file format MIME type.</property>
+            <property name="label" translatable="yes">format</property>
+          </object>
+          <packing>
+            <property name="top_attach">7</property>
+            <property name="bottom_attach">8</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkEntry" id="streamedit_format">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="invisible_char">●</property>
+            <property name="primary_icon_activatable">False</property>
+            <property name="secondary_icon_activatable">False</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="right_attach">2</property>
+            <property name="top_attach">7</property>
+            <property name="bottom_attach">8</property>
           </packing>
         </child>
-      </object>
-    </child>
-    <child internal-child="accessible">
-      <object class="AtkObject" id="win_streamtuner2-atkobject">
-        <property name="AtkObject::accessible-name" translatable="yes">streamtuner2</property>
       </object>
     </child>
   </object>
diff --git a/gtk3.xml.gz b/gtk3.xml.gz
new file mode 100644
index 0000000..a43ff69
Binary files /dev/null and b/gtk3.xml.gz differ
diff --git a/gtk2.xml b/gtk3.xml~
similarity index 57%
rename from gtk2.xml
rename to gtk3.xml~
index a2518f4..48c69ae 100644
--- a/gtk2.xml
+++ b/gtk3.xml~
@@ -1,15 +1,24 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.16.1 -->
 <interface>
-  <!-- interface-requires gtk+ 3.0 -->
-  <!-- interface-naming-policy toplevel-contextual -->
+  <requires lib="gtk+" version="3.0"/>
+  <object class="GtkAdjustment" id="adjustment_config_max_streams">
+    <property name="lower">50</property>
+    <property name="upper">2000</property>
+    <property name="value">500</property>
+    <property name="step_increment">25</property>
+    <property name="page_increment">100</property>
+  </object>
   <object class="GtkListStore" id="config_play">
     <columns>
       <!-- column-name type -->
       <column type="gchararray"/>
       <!-- column-name app -->
       <column type="gchararray"/>
-      <!-- column-name gboolean1 -->
+      <!-- column-name editable -->
       <column type="gboolean"/>
+      <!-- column-name icon -->
+      <column type="gchararray"/>
     </columns>
   </object>
   <object class="GtkListStore" id="config_record">
@@ -18,8 +27,10 @@
       <column type="gchararray"/>
       <!-- column-name app -->
       <column type="gchararray"/>
-      <!-- column-name gboolean1 -->
+      <!-- column-name editable -->
       <column type="gboolean"/>
+      <!-- column-name icon -->
+      <column type="gchararray"/>
     </columns>
   </object>
   <object class="GtkWindow" id="win_config">
@@ -77,6 +88,7 @@
                             </child>
                             <child>
                               <object class="GtkScrolledWindow" id="scrolledwindow4">
+                                <property name="height_request">200</property>
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <child>
@@ -85,13 +97,16 @@
                                     <property name="height_request">200</property>
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
-                                    <property name="border_width">5</property>
+                                    <property name="border_width">2</property>
                                     <property name="model">config_play</property>
                                     <property name="headers_clickable">False</property>
                                     <property name="rules_hint">True</property>
                                     <property name="search_column">0</property>
                                     <property name="level_indentation">8</property>
                                     <property name="enable_grid_lines">both</property>
+                                    <child internal-child="selection">
+                                      <object class="GtkTreeSelection" id="treeview-selection1"/>
+                                    </child>
                                     <child>
                                       <object class="GtkTreeViewColumn" id="tvc_config_player_type">
                                         <property name="spacing">10</property>
@@ -111,10 +126,16 @@
                                     </child>
                                     <child>
                                       <object class="GtkTreeViewColumn" id="tvc_config_player_app">
-                                        <property name="spacing">10</property>
+                                        <property name="spacing">5</property>
                                         <property name="min_width">300</property>
                                         <property name="title" translatable="yes">Application</property>
                                         <child>
+                                          <object class="GtkCellRendererPixbuf" id="tvcr_config_player_bin"/>
+                                          <attributes>
+                                            <attribute name="stock-id">3</attribute>
+                                          </attributes>
+                                        </child>
+                                        <child>
                                           <object class="GtkCellRendererText" id="tvcr_config_player_app">
                                             <signal name="edited" handler="config_play_list_edit_col1" swapped="no"/>
                                           </object>
@@ -135,7 +156,23 @@
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkLabel" id="label_record3">
+                              <object class="GtkLabel" id="label_player2">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="xalign">0.019999999552965164</property>
+                                <property name="yalign">0.49000000953674316</property>
+                                <property name="label" translatable="yes"><small>You can set the same player for all formats. And audio/* and video/* would even suffice.</small></property>
+                                <property name="use_markup">True</property>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="padding">5</property>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label_player3">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
                                 <property name="xalign">0</property>
@@ -144,7 +181,7 @@
                               <packing>
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
-                                <property name="position">2</property>
+                                <property name="position">3</property>
                               </packing>
                             </child>
                             <child>
@@ -161,7 +198,7 @@
                               <packing>
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
-                                <property name="position">4</property>
+                                <property name="position">5</property>
                               </packing>
                             </child>
                             <child>
@@ -177,6 +214,9 @@
                                 <property name="search_column">0</property>
                                 <property name="level_indentation">8</property>
                                 <property name="enable_grid_lines">both</property>
+                                <child internal-child="selection">
+                                  <object class="GtkTreeSelection" id="treeview-selection2"/>
+                                </child>
                                 <child>
                                   <object class="GtkTreeViewColumn" id="tvc_config_record_type">
                                     <property name="spacing">10</property>
@@ -200,6 +240,12 @@
                                     <property name="min_width">300</property>
                                     <property name="title" translatable="yes">Application</property>
                                     <child>
+                                      <object class="GtkCellRendererPixbuf" id="tvcr_config_record_bin"/>
+                                      <attributes>
+                                        <attribute name="stock-id">3</attribute>
+                                      </attributes>
+                                    </child>
+                                    <child>
                                       <object class="GtkCellRendererText" id="tvcr_config_record_app">
                                         <signal name="edited" handler="config_record_list_edit_col1" swapped="no"/>
                                       </object>
@@ -214,7 +260,7 @@
                               <packing>
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
-                                <property name="position">5</property>
+                                <property name="position">6</property>
                               </packing>
                             </child>
                             <child>
@@ -223,17 +269,15 @@
                                 <property name="can_focus">True</property>
                                 <property name="xalign">0.019999999552965164</property>
                                 <property name="yalign">0.49000000953674316</property>
-                                <property name="label" translatable="yes">Use <a href="http://fossil.include-once.org/streamtuner2/wiki?name=player">placeholders</a> such as <b>%pls</b> for Shoutcast playlists,
-or pass <b>%m3u</b> for players that expect mp3 playlist files,
-and <b>%srv</b> to use direct streaming URLs.</property>
+                                <property name="label" translatable="yes"><small>Each application may optionally use <a href="http://fossil.include-once.org/streamtuner2/wiki?name=player">placeholders</a> such as <b>%pls</b> for Shoutcast playlists,
+and <b>%xspf</b> for newer, <b>%m3u</b> for older players, or even <b>%srv</b> for direct streaming URLs.</small></property>
                                 <property name="use_markup">True</property>
-                                <property name="wrap">True</property>
                               </object>
                               <packing>
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
                                 <property name="padding">5</property>
-                                <property name="position">6</property>
+                                <property name="position">7</property>
                               </packing>
                             </child>
                             <child>
@@ -249,7 +293,9 @@ and <b>%srv</b> to use direct streaming URLs.</property>
                   <object class="GtkLabel" id="label13">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="label" translatable="yes">Player</property>
+                    <property name="xpad">12</property>
+                    <property name="ypad">5</property>
+                    <property name="label" translatable="yes">🔊 Player</property>
                   </object>
                   <packing>
                     <property name="tab_fill">False</property>
@@ -273,9 +319,10 @@ and <b>%srv</b> to use direct streaming URLs.</property>
                               <object class="GtkLabel" id="label_cfg_tab_options_display">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="xalign">0.019999999552965164</property>
-                                <property name="ypad">9</property>
+                                <property name="xalign">0</property>
+                                <property name="ypad">5</property>
                                 <property name="label" translatable="yes">Display</property>
+                                <property name="justify">right</property>
                                 <attributes>
                                   <attribute name="weight" value="bold"/>
                                   <attribute name="gravity" value="east"/>
@@ -284,12 +331,13 @@ and <b>%srv</b> to use direct streaming URLs.</property>
                               <packing>
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
+                                <property name="padding">10</property>
                                 <property name="position">0</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkCheckButton" id="config_show_favicons">
-                                <property name="label" translatable="yes">Display favicons for individual music stations.</property>
+                              <object class="GtkCheckButton" id="config_show_bookmarks">
+                                <property name="label" translatable="yes">Show bookmark ☆star for favourites in stream lists.</property>
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
@@ -299,12 +347,13 @@ and <b>%srv</b> to use direct streaming URLs.</property>
                               <packing>
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
+                                <property name="padding">3</property>
                                 <property name="position">1</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkCheckButton" id="config_load_favicon">
-                                <property name="label" translatable="yes">Load favicon for played stations.</property>
+                              <object class="GtkCheckButton" id="config_auto_save_appstate">
+                                <property name="label" translatable="yes">Save window state, sizes and selections automatically.</property>
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
@@ -314,12 +363,13 @@ and <b>%srv</b> to use direct streaming URLs.</property>
                               <packing>
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
+                                <property name="padding">3</property>
                                 <property name="position">2</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkCheckButton" id="config_show_bookmarks">
-                                <property name="label" translatable="yes">Show bookmark star for favourites in stream lists.</property>
+                              <object class="GtkCheckButton" id="config_window_title">
+                                <property name="label" translatable="yes">Add current channel name to window title.</property>
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
@@ -329,77 +379,25 @@ and <b>%srv</b> to use direct streaming URLs.</property>
                               <packing>
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
+                                <property name="padding">3</property>
                                 <property name="position">3</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkLabel" id="label45">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="tooltip_text" translatable="yes">needs restart</property>
-                                <property name="xalign">0</property>
-                                <property name="label" translatable="yes">Use specific Gtk+ theme for Streamtuner2.</property>
-                              </object>
-                              <packing>
-                                <property name="expand">True</property>
-                                <property name="fill">True</property>
-                                <property name="padding">5</property>
-                                <property name="position">4</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkHBox" id="theme_cb_placeholder">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <child>
-                                  <placeholder/>
-                                </child>
-                                <child>
-                                  <placeholder/>
-                                </child>
-                              </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">5</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkCheckButton" id="config_auto_save_appstate">
-                                <property name="label" translatable="yes">Save window state, sizes and selections automatically.</property>
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="receives_default">False</property>
-                                <property name="xalign">0</property>
-                                <property name="draw_indicator">True</property>
-                              </object>
-                              <packing>
-                                <property name="expand">True</property>
-                                <property name="fill">True</property>
-                                <property name="padding">5</property>
-                                <property name="position">6</property>
-                              </packing>
+                              <placeholder/>
                             </child>
                             <child>
                               <placeholder/>
                             </child>
                             <child>
-                              <object class="GtkLabel" id="label2spc3">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                              </object>
-                              <packing>
-                                <property name="expand">True</property>
-                                <property name="fill">True</property>
-                                <property name="position">8</property>
-                              </packing>
+                              <placeholder/>
                             </child>
                             <child>
                               <object class="GtkLabel" id="label_cfg_tab_options_display3">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="xalign">0.019999999552965164</property>
-                                <property name="ypad">9</property>
+                                <property name="xalign">0</property>
+                                <property name="ypad">5</property>
                                 <property name="label" translatable="yes">Station loading</property>
                                 <attributes>
                                   <attribute name="weight" value="bold"/>
@@ -409,12 +407,19 @@ and <b>%srv</b> to use direct streaming URLs.</property>
                               <packing>
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
-                                <property name="position">9</property>
+                                <property name="padding">10</property>
+                                <property name="position">7</property>
                               </packing>
                             </child>
                             <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
                               <object class="GtkCheckButton" id="config_pyquery">
-                                <property name="label" translatable="yes">Prefer HTML traversing (PyQuery) over regex text matching.</property>
+                                <property name="label" translatable="yes">Try PyQuery/HTML traversion before regex station extraction.</property>
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
@@ -429,37 +434,28 @@ and <b>%srv</b> to use direct streaming URLs.</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkLabel" id="doc_pyquery_vs_regex">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="xalign">0</property>
-                                <property name="label" translatable="yes"><small>Most plugins intellegently fall back, but sometimes overriding
-the website extraction method can fix some station list update errors.</small></property>
-                                <property name="use_markup">True</property>
-                              </object>
-                              <packing>
-                                <property name="expand">True</property>
-                                <property name="fill">True</property>
-                                <property name="position">11</property>
-                              </packing>
+                              <placeholder/>
                             </child>
                             <child>
                               <object class="GtkHBox" id="hbox5">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
                                 <child>
-                                  <object class="GtkEntry" id="config_max_streams">
+                                  <object class="GtkSpinButton" id="config_max_streams">
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
-                                    <property name="max_length">5</property>
-                                    <property name="invisible_char">●</property>
-                                    <property name="width_chars">5</property>
-                                    <property name="text" translatable="yes">500</property>
-                                    <property name="shadow_type">out</property>
+                                    <property name="max_length">8</property>
+                                    <property name="width_chars">7</property>
+                                    <property name="primary_icon_stock">gtk-sort-ascending</property>
                                     <property name="primary_icon_activatable">False</property>
                                     <property name="secondary_icon_activatable">False</property>
-                                    <property name="primary_icon_sensitive">True</property>
-                                    <property name="secondary_icon_sensitive">True</property>
+                                    <property name="primary_icon_sensitive">False</property>
+                                    <property name="secondary_icon_sensitive">False</property>
+                                    <property name="adjustment">adjustment_config_max_streams</property>
+                                    <property name="climb_rate">50.020000000000003</property>
+                                    <property name="numeric">True</property>
+                                    <property name="wrap">True</property>
+                                    <property name="value">500</property>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
@@ -477,6 +473,7 @@ the website extraction method can fix some station list update errors.</small
 <small>Some plugins use custom overrides.</small></property>
                                     <property name="use_markup">True</property>
                                     <property name="ellipsize">end</property>
+                                    <property name="angle">0.01</property>
                                   </object>
                                   <packing>
                                     <property name="expand">True</property>
@@ -488,7 +485,7 @@ the website extraction method can fix some station list update errors.</small
                               <packing>
                                 <property name="expand">False</property>
                                 <property name="fill">False</property>
-                                <property name="padding">5</property>
+                                <property name="padding">8</property>
                                 <property name="position">12</property>
                               </packing>
                             </child>
@@ -507,12 +504,13 @@ the website extraction method can fix some station list update errors.</small
                               <packing>
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
+                                <property name="padding">3</property>
                                 <property name="position">14</property>
                               </packing>
                             </child>
                             <child>
                               <object class="GtkCheckButton" id="config_heuristic_bookmark_update">
-                                <property name="label" translatable="yes">Update favorites from freshened stream URLs.</property>
+                                <property name="label" translatable="yes">Update bookmarked stream URLs when updating station lists.</property>
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
@@ -522,21 +520,23 @@ the website extraction method can fix some station list update errors.</small
                               <packing>
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
+                                <property name="padding">3</property>
                                 <property name="position">15</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkCheckButton" id="config_google_homepage">
-                                <property name="label" translatable="yes">Google missing station homepages.</property>
+                              <object class="GtkCheckButton" id="config_auto_save_stations">
+                                <property name="label" translatable="yes">Save station lists after editing or internal updates (favicon or dnd).</property>
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
-                                <property name="xalign">0</property>
+                                <property name="xalign">0.0099999997764825821</property>
                                 <property name="draw_indicator">True</property>
                               </object>
                               <packing>
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
+                                <property name="padding">3</property>
                                 <property name="position">16</property>
                               </packing>
                             </child>
@@ -547,34 +547,62 @@ the website extraction method can fix some station list update errors.</small
                               <placeholder/>
                             </child>
                             <child>
-                              <placeholder/>
+                              <object class="GtkLabel" id="label_cfg_tab_options_display2">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="yalign">0</property>
+                                <property name="ypad">5</property>
+                                <property name="label" translatable="yes">Playlist conversion</property>
+                                <attributes>
+                                  <attribute name="weight" value="bold"/>
+                                  <attribute name="gravity" value="east"/>
+                                </attributes>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="padding">10</property>
+                                <property name="position">19</property>
+                              </packing>
                             </child>
                             <child>
-                              <object class="GtkLabel" id="label4spc">
+                              <object class="GtkCheckButton" id="config_reuse_m3u">
+                                <property name="label" translatable="yes">Keep and reuse temporary .pls/.m3u files for played stations.</property>
                                 <property name="visible">True</property>
-                                <property name="can_focus">False</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">False</property>
+                                <property name="xalign">0</property>
+                                <property name="draw_indicator">True</property>
                               </object>
                               <packing>
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
+                                <property name="padding">5</property>
                                 <property name="position">20</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkLabel" id="label_cfg_tab_options_display1">
+                              <object class="GtkCheckButton" id="config_playlist_asis">
                                 <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="xalign">0.019999999552965164</property>
-                                <property name="ypad">9</property>
-                                <property name="label" translatable="yes">System</property>
-                                <attributes>
-                                  <attribute name="weight" value="bold"/>
-                                  <attribute name="gravity" value="east"/>
-                                </attributes>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">False</property>
+                                <property name="xalign">0</property>
+                                <property name="draw_indicator">True</property>
+                                <child>
+                                  <object class="GtkLabel" id="label4">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="label" translatable="yes">Forgo any streaming URL and playlist format conversion for players.
+<small>(Ignore all <b>%fmt</b> placeholders. Sometimes faster, but won't work with all channels.)</small></property>
+                                    <property name="use_markup">True</property>
+                                  </object>
+                                </child>
                               </object>
                               <packing>
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
+                                <property name="padding">5</property>
                                 <property name="position">21</property>
                               </packing>
                             </child>
@@ -585,6 +613,26 @@ the website extraction method can fix some station list update errors.</small
                               <placeholder/>
                             </child>
                             <child>
+                              <object class="GtkLabel" id="label_cfg_tab_options_display1">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="yalign">0</property>
+                                <property name="ypad">5</property>
+                                <property name="label" translatable="yes">System</property>
+                                <attributes>
+                                  <attribute name="weight" value="bold"/>
+                                  <attribute name="gravity" value="east"/>
+                                </attributes>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="padding">10</property>
+                                <property name="position">24</property>
+                              </packing>
+                            </child>
+                            <child>
                               <object class="GtkHBox" id="hbox2tmpfiles">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
@@ -611,8 +659,6 @@ the website extraction method can fix some station list update errors.</small
                                     <property name="primary_icon_stock">gtk-save-as</property>
                                     <property name="primary_icon_activatable">False</property>
                                     <property name="secondary_icon_activatable">False</property>
-                                    <property name="primary_icon_sensitive">True</property>
-                                    <property name="secondary_icon_sensitive">True</property>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
@@ -625,28 +671,13 @@ the website extraction method can fix some station list update errors.</small
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
                                 <property name="padding">5</property>
-                                <property name="position">24</property>
+                                <property name="position">25</property>
                               </packing>
                             </child>
                             <child>
                               <placeholder/>
                             </child>
                             <child>
-                              <object class="GtkCheckButton" id="config_reuse_m3u">
-                                <property name="label" translatable="yes">Keep and reuse temporary .m3u files for played stations.</property>
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="receives_default">False</property>
-                                <property name="draw_indicator">True</property>
-                              </object>
-                              <packing>
-                                <property name="expand">True</property>
-                                <property name="fill">True</property>
-                                <property name="padding">5</property>
-                                <property name="position">26</property>
-                              </packing>
-                            </child>
-                            <child>
                               <placeholder/>
                             </child>
                             <child>
@@ -680,8 +711,6 @@ the website extraction method can fix some station list update errors.</small
                                     <property name="primary_icon_stock">gtk-home</property>
                                     <property name="primary_icon_activatable">False</property>
                                     <property name="secondary_icon_activatable">False</property>
-                                    <property name="primary_icon_sensitive">True</property>
-                                    <property name="secondary_icon_sensitive">True</property>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
@@ -707,16 +736,53 @@ the website extraction method can fix some station list update errors.</small
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
                                 <property name="use_underline">True</property>
+                                <property name="xalign">0.5</property>
                                 <property name="draw_indicator">True</property>
                               </object>
                               <packing>
                                 <property name="expand">True</property>
                                 <property name="fill">True</property>
-                                <property name="padding">5</property>
+                                <property name="padding">3</property>
                                 <property name="position">30</property>
                               </packing>
                             </child>
                             <child>
+                              <object class="GtkCheckButton" id="config_nothreads">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">False</property>
+                                <property name="xalign">0</property>
+                                <property name="draw_indicator">True</property>
+                                <child>
+                                  <object class="GtkLabel" id="label2">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="label" translatable="yes">Disable <i>"threading"</i> for user interface.
+<small>Makes browsing appear slower. But avoids some crashes with Gtk3.</small></property>
+                                    <property name="use_markup">True</property>
+                                  </object>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="padding">3</property>
+                                <property name="position">31</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
                               <placeholder/>
                             </child>
                           </object>
@@ -732,7 +798,9 @@ the website extraction method can fix some station list update errors.</small
                   <object class="GtkLabel" id="label20">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="label" translatable="yes">Options</property>
+                    <property name="xpad">12</property>
+                    <property name="ypad">5</property>
+                    <property name="label" translatable="yes">☑ Options</property>
                   </object>
                   <packing>
                     <property name="position">1</property>
@@ -740,12 +808,12 @@ the website extraction method can fix some station list update errors.</small
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkScrolledWindow" id="scrolledwindow1">
+                  <object class="GtkScrolledWindow" id="scrolledwindow5">
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
                     <property name="hscrollbar_policy">never</property>
                     <child>
-                      <object class="GtkViewport" id="viewport1">
+                      <object class="GtkViewport" id="viewport4">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
                         <property name="border_width">15</property>
@@ -757,12 +825,12 @@ the website extraction method can fix some station list update errors.</small
                             <property name="can_focus">False</property>
                             <property name="spacing">10</property>
                             <child>
-                              <object class="GtkLabel" id="label1cplginsdoc">
+                              <object class="GtkLabel" id="label1cplginsdoc1">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
                                 <property name="xalign">0.05000000074505806</property>
-                                <property name="label" translatable="yes"><b>Channels</b> show up as tabs. While <b>feature</b> <i>plugins</i> add menu entries
-or internal functions. Changes take effect after restarting streamtuner2.</property>
+                                <property name="label" translatable="yes"><b>Channels</b> show up as notebook tabs. Changed options take effect
+immediately, while plugin enabling/disabling requires a restart of ST2.</property>
                                 <property name="use_markup">True</property>
                               </object>
                               <packing>
@@ -772,48 +840,10 @@ or internal functions. Changes take effect after restarting streamtuner2.</prope
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkHBox" id="hbox6">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <child>
-                                  <object class="GtkLabel" id="label27">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">False</property>
-                                    <property name="xalign">0.40999999642372131</property>
-                                    <property name="label" translatable="yes">Tab ordering</property>
-                                  </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">True</property>
-                                    <property name="padding">6</property>
-                                    <property name="position">0</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <object class="GtkEntry" id="config_channel_order">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="invisible_char">●</property>
-                                    <property name="primary_icon_activatable">False</property>
-                                    <property name="secondary_icon_activatable">False</property>
-                                    <property name="primary_icon_sensitive">True</property>
-                                    <property name="secondary_icon_sensitive">True</property>
-                                  </object>
-                                  <packing>
-                                    <property name="expand">True</property>
-                                    <property name="fill">True</property>
-                                    <property name="position">1</property>
-                                  </packing>
-                                </child>
-                              </object>
-                              <packing>
-                                <property name="expand">True</property>
-                                <property name="fill">True</property>
-                                <property name="position">1</property>
-                              </packing>
+                              <placeholder/>
                             </child>
                             <child>
-                              <object class="GtkHSeparator" id="hseparator1">
+                              <object class="GtkHSeparator" id="hseparator2">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
                               </object>
@@ -970,14 +1000,224 @@ or internal functions. Changes take effect after restarting streamtuner2.</prope
                     </child>
                   </object>
                   <packing>
-                    <property name="position">3</property>
+                    <property name="position">2</property>
+                  </packing>
+                </child>
+                <child type="tab">
+                  <object class="GtkLabel" id="label1">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="xpad">12</property>
+                    <property name="ypad">5</property>
+                    <property name="label" translatable="yes">📻 Channels</property>
+                  </object>
+                  <packing>
+                    <property name="position">2</property>
+                    <property name="tab_fill">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkScrolledWindow" id="scrolledwindow1">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="hscrollbar_policy">never</property>
+                    <child>
+                      <object class="GtkViewport" id="viewport1">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="border_width">15</property>
+                        <property name="resize_mode">queue</property>
+                        <property name="shadow_type">none</property>
+                        <child>
+                          <object class="GtkVBox" id="feature_options">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="spacing">10</property>
+                            <child>
+                              <object class="GtkLabel" id="label1cplginsdoc">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0.05000000074505806</property>
+                                <property name="label" translatable="yes"><b>Feature</b> <i>plugins</i> can add menu entries, or internal functionilty,
+or appear as further categories within the bookmarks tab.</property>
+                                <property name="use_markup">True</property>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <object class="GtkHSeparator" id="hseparator1">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="position">3</property>
                   </packing>
                 </child>
                 <child type="tab">
                   <object class="GtkLabel" id="label44">
                     <property name="can_focus">False</property>
-                    <property name="label" translatable="yes">Channel
-Plugins</property>
+                    <property name="xpad">12</property>
+                    <property name="ypad">5</property>
+                    <property name="label" translatable="yes">🔌 Features</property>
                   </object>
                   <packing>
                     <property name="position">3</property>
@@ -1069,156 +1309,239 @@ Plugins</property>
     <property name="stock">gtk-add</property>
   </object>
   <object class="GtkDialog" id="search_dialog">
-    <property name="width_request">325</property>
+    <property name="width_request">375</property>
     <property name="can_focus">False</property>
+    <property name="opacity">0.94999999999999996</property>
     <property name="border_width">5</property>
     <property name="title" translatable="yes">station search</property>
     <property name="window_position">center-on-parent</property>
     <property name="destroy_with_parent">True</property>
+    <property name="icon_name">edit-find</property>
     <property name="type_hint">dialog</property>
     <property name="gravity">center</property>
-    <property name="opacity">0.94999999999999996</property>
     <signal name="close" handler="search_cancel" swapped="no"/>
     <signal name="delete-event" handler="search_cancel" swapped="no"/>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox1">
+      <object class="GtkBox" id="dialog-vbox1">
+        <property name="visible">True</property>
         <property name="can_focus">False</property>
+        <property name="spacing">2</property>
         <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area1">
+          <object class="GtkButtonBox" id="dialog-action_area1">
+            <property name="visible">True</property>
             <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
           </object>
           <packing>
-            <property name="expand">True</property>
-            <property name="fill">True</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
-      </object>
-    </child>
-  </object>
-  <object class="GtkMenu" id="streamactions">
-    <property name="visible">True</property>
-    <property name="can_focus">False</property>
-    <child>
-      <object class="GtkMenuItem" id="streamactions_play">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="label" translatable="yes">play</property>
-        <property name="use_underline">True</property>
-        <signal name="activate" handler="on_play_clicked" swapped="no"/>
-      </object>
-    </child>
-    <child>
-      <object class="GtkMenuItem" id="streamactions_record">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="label" translatable="yes">record</property>
-        <property name="use_underline">True</property>
-        <signal name="activate" handler="on_record_clicked" swapped="no"/>
-      </object>
-    </child>
-    <child>
-      <object class="GtkMenuItem" id="streamactions_bookmark">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="label" translatable="yes">bookmark</property>
-        <property name="use_underline">True</property>
-        <signal name="activate" handler="bookmark" swapped="no"/>
-      </object>
-    </child>
-    <child>
-      <object class="GtkMenuItem" id="extensionsCTM">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="label" translatable="yes">Extensions</property>
-        <property name="use_underline">True</property>
-      </object>
-    </child>
-    <child>
-      <object class="GtkSeparatorMenuItem" id="----">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-      </object>
-    </child>
-    <child>
-      <object class="GtkMenuItem" id="save">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="label" translatable="yes">save</property>
-        <property name="use_underline">True</property>
-        <signal name="activate" handler="save_as" swapped="no"/>
-      </object>
-    </child>
-    <child>
-      <object class="GtkMenuItem" id="edit">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="label" translatable="yes">edit</property>
-        <property name="use_underline">True</property>
-        <signal name="activate" handler="streamedit_open" swapped="no"/>
-      </object>
-    </child>
-    <child>
-      <object class="GtkSeparatorMenuItem" id="menuitem1">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-      </object>
-    </child>
-    <child>
-      <object class="GtkMenuItem" id="homepage">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="label" translatable="yes">station homepage</property>
-        <property name="use_underline">True</property>
-        <signal name="activate" handler="on_homepage_stream_clicked" swapped="no"/>
-      </object>
-    </child>
-  </object>
-  <object class="GtkDialog" id="timer_dialog">
-    <property name="can_focus">False</property>
-    <property name="border_width">5</property>
-    <property name="type_hint">normal</property>
-    <signal name="close" handler="timer_cancel" swapped="no"/>
-    <signal name="delete-event" handler="timer_cancel" swapped="no"/>
-    <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox2">
-        <property name="can_focus">False</property>
-        <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area2">
-            <property name="can_focus">False</property>
-          </object>
-          <packing>
-            <property name="expand">True</property>
-            <property name="fill">True</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
-      </object>
-    </child>
-  </object>
-  <object class="GtkWindow" id="url_action_container">
-    <property name="can_focus">False</property>
-    <child>
-      <object class="GtkVBox" id="url_action_list">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <child>
-          <object class="GtkLabel" id="url_action_1_online_forum">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="label" translatable="yes">http://sourceforge.net/projects/streamtuner2/forums/forum/1173108</property>
-          </object>
-          <packing>
-            <property name="expand">True</property>
-            <property name="fill">True</property>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="pack_type">end</property>
             <property name="position">0</property>
           </packing>
         </child>
         <child>
-          <object class="GtkLabel" id="url_action_2_fossil_wiki">
+          <object class="GtkVBox" id="vbox1">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
-            <property name="label" translatable="yes">http://fossil.include-once.org/streamtuner2/</property>
+            <property name="spacing">20</property>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <object class="GtkHBox" id="hbox1">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <child>
+                  <object class="GtkImage" id="search_img">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="tooltip_text" translatable="yes">The Findeeeeeeeer</property>
+                    <property name="stock">gtk-find</property>
+                    <property name="icon_size">6</property>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkVBox" id="box1sd">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <child>
+                      <object class="GtkLabel" id="label2sd">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes"><b><big>search</big></b></property>
+                        <property name="use_markup">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkEntry" id="search_full">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="tooltip_text" translatable="yes">A single word to search for in all stations.</property>
+                        <property name="invisible_char">●</property>
+                        <property name="activates_default">True</property>
+                        <property name="primary_icon_activatable">False</property>
+                        <property name="secondary_icon_activatable">False</property>
+                      </object>
+                      <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="label4sd">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">2</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkHBox" id="hbox2">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <child>
+                  <object class="GtkLabel" id="label3sd">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="xpad">10</property>
+                    <property name="ypad">10</property>
+                    <property name="label" translatable="yes">               in</property>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkRadioButton" id="search_dialog_all">
+                    <property name="label" translatable="yes">all channels</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="xalign">0.5</property>
+                    <property name="active">True</property>
+                    <property name="draw_indicator">True</property>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkRadioButton" id="search_dialog_current">
+                    <property name="label" translatable="yes">just current</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="xalign">0.5</property>
+                    <property name="active">True</property>
+                    <property name="draw_indicator">True</property>
+                    <property name="group">search_dialog_all</property>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">2</property>
+                  </packing>
+                </child>
+                <child>
+                  <placeholder/>
+                </child>
+                <child>
+                  <placeholder/>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">3</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkHBox" id="hbox3">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="spacing">20</property>
+                <child>
+                  <object class="GtkButton" id="cache_search">
+                    <property name="label" translatable="yes">Cache s_can</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="receives_default">False</property>
+                    <property name="tooltip_text" translatable="yes">Start searching for above search term in the currently loaded station lists. Doesn't find *new* information, just looks through the known data.</property>
+                    <property name="image">image1</property>
+                    <property name="relief">half</property>
+                    <property name="use_underline">True</property>
+                    <signal name="clicked" handler="search_go" swapped="no"/>
+                    <accelerator key="Return" signal="activate"/>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="server_search">
+                    <property name="label" translatable="yes">Server _search</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="has_focus">True</property>
+                    <property name="is_focus">True</property>
+                    <property name="can_default">True</property>
+                    <property name="has_default">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="tooltip_text" translatable="yes">Instead of doing a cache search, go through the search functions on the directory service homepages. (Not implemented by all channels.)</property>
+                    <property name="image">image2</property>
+                    <property name="use_underline">True</property>
+                    <signal name="clicked" handler="search_srv" swapped="no"/>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">5</property>
+              </packing>
+            </child>
           </object>
           <packing>
             <property name="expand">True</property>
@@ -1226,387 +1549,38 @@ Plugins</property>
             <property name="position">1</property>
           </packing>
         </child>
-        <child>
-          <object class="GtkLabel" id="url_action_3_project_homepage">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="label" translatable="yes">http://milki.include-once.org/streamtuner2/</property>
-          </object>
-          <packing>
-            <property name="expand">True</property>
-            <property name="fill">True</property>
-            <property name="position">2</property>
-          </packing>
-        </child>
       </object>
     </child>
   </object>
-  <object class="GtkWindow" id="win_streamedit">
+  <object class="GtkImage" id="image3">
+    <property name="visible">True</property>
     <property name="can_focus">False</property>
-    <property name="border_width">5</property>
-    <property name="title" translatable="yes">inspect/edit stream data</property>
-    <property name="window_position">center-on-parent</property>
-    <property name="destroy_with_parent">True</property>
-    <property name="skip_pager_hint">True</property>
-    <property name="opacity">0.94999999999999996</property>
-    <signal name="delete-event" handler="streamedit_cancel" swapped="no"/>
+    <property name="stock">gtk-home</property>
+  </object>
+  <object class="GtkImage" id="image4">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-connect</property>
+  </object>
+  <object class="GtkWindow" id="win_streamtuner2">
+    <property name="width_request">500</property>
+    <property name="height_request">330</property>
+    <property name="can_focus">False</property>
+    <property name="title" translatable="yes">Streamtuner2</property>
+    <property name="default_width">980</property>
+    <property name="default_height">775</property>
+    <property name="icon">/usr/share/pixmaps/streamtuner2.png</property>
+    <signal name="delete-event" handler="gtk_main_quit" swapped="no"/>
     <child>
-      <object class="GtkTable" id="table6">
+      <object class="GtkVBox" id="vbox2">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
-        <property name="border_width">15</property>
-        <property name="n_rows">10</property>
-        <property name="n_columns">2</property>
-        <property name="column_spacing">5</property>
-        <property name="row_spacing">5</property>
-        <child>
-          <placeholder/>
-        </child>
         <child>
-          <object class="GtkLabel" id="label31">
+          <object class="GtkHBox" id="hbox8">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
-            <property name="tooltip_text" translatable="yes">Radio station name.</property>
-            <property name="xalign">0.89999997615814209</property>
-            <property name="label" translatable="yes">title</property>
-          </object>
-          <packing>
-            <property name="top_attach">1</property>
-            <property name="bottom_attach">2</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkEntry" id="streamedit_title">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="invisible_char">●</property>
-            <property name="primary_icon_activatable">False</property>
-            <property name="secondary_icon_activatable">False</property>
-            <property name="primary_icon_sensitive">True</property>
-            <property name="secondary_icon_sensitive">True</property>
-          </object>
-          <packing>
-            <property name="left_attach">1</property>
-            <property name="right_attach">2</property>
-            <property name="top_attach">1</property>
-            <property name="bottom_attach">2</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkEntry" id="streamedit_playing">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="invisible_char">●</property>
-            <property name="primary_icon_activatable">False</property>
-            <property name="secondary_icon_activatable">False</property>
-            <property name="primary_icon_sensitive">True</property>
-            <property name="secondary_icon_sensitive">True</property>
-          </object>
-          <packing>
-            <property name="left_attach">1</property>
-            <property name="right_attach">2</property>
-            <property name="top_attach">2</property>
-            <property name="bottom_attach">3</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkEntry" id="streamedit_homepage">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="invisible_char">●</property>
-            <property name="primary_icon_activatable">False</property>
-            <property name="secondary_icon_activatable">False</property>
-            <property name="primary_icon_sensitive">True</property>
-            <property name="secondary_icon_sensitive">True</property>
-          </object>
-          <packing>
-            <property name="left_attach">1</property>
-            <property name="right_attach">2</property>
-            <property name="top_attach">3</property>
-            <property name="bottom_attach">4</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkEntry" id="streamedit_genre">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="invisible_char">●</property>
-            <property name="primary_icon_activatable">False</property>
-            <property name="secondary_icon_activatable">False</property>
-            <property name="primary_icon_sensitive">True</property>
-            <property name="secondary_icon_sensitive">True</property>
-          </object>
-          <packing>
-            <property name="left_attach">1</property>
-            <property name="right_attach">2</property>
-            <property name="top_attach">4</property>
-            <property name="bottom_attach">5</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkEntry" id="streamedit_url">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="invisible_char">●</property>
-            <property name="primary_icon_activatable">False</property>
-            <property name="secondary_icon_activatable">False</property>
-            <property name="primary_icon_sensitive">True</property>
-            <property name="secondary_icon_sensitive">True</property>
-          </object>
-          <packing>
-            <property name="left_attach">1</property>
-            <property name="right_attach">2</property>
-            <property name="top_attach">5</property>
-            <property name="bottom_attach">6</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkEntry" id="streamedit_favicon">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="invisible_char">●</property>
-            <property name="primary_icon_activatable">False</property>
-            <property name="secondary_icon_activatable">False</property>
-            <property name="primary_icon_sensitive">True</property>
-            <property name="secondary_icon_sensitive">True</property>
-          </object>
-          <packing>
-            <property name="left_attach">1</property>
-            <property name="right_attach">2</property>
-            <property name="top_attach">6</property>
-            <property name="bottom_attach">7</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkLabel" id="label32">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="tooltip_text" translatable="yes">Either the last playing song, or a general description of the station.</property>
-            <property name="xalign">0.89999997615814209</property>
-            <property name="label" translatable="yes">playing/desc</property>
-          </object>
-          <packing>
-            <property name="top_attach">2</property>
-            <property name="bottom_attach">3</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkLabel" id="homepage1">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="xalign">0.89999997615814209</property>
-            <property name="label" translatable="yes">homepage</property>
-          </object>
-          <packing>
-            <property name="top_attach">3</property>
-            <property name="bottom_attach">4</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkLabel" id="label33">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="xalign">0.89999997615814209</property>
-            <property name="label" translatable="yes">genre</property>
-          </object>
-          <packing>
-            <property name="top_attach">4</property>
-            <property name="bottom_attach">5</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkLabel" id="label34">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="tooltip_text" translatable="yes">PLS or M3U link.</property>
-            <property name="xalign">0.89999997615814209</property>
-            <property name="label" translatable="yes">stream url</property>
-          </object>
-          <packing>
-            <property name="top_attach">5</property>
-            <property name="bottom_attach">6</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkLabel" id="label35">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="tooltip_text" translatable="yes">Homepage icon for station. Points to a local cache file.</property>
-            <property name="xalign">0.89999997615814209</property>
-            <property name="label" translatable="yes">favicon</property>
-          </object>
-          <packing>
-            <property name="top_attach">6</property>
-            <property name="bottom_attach">7</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkFixed" id="fixed2">
-            <property name="height_request">40</property>
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <child>
-              <object class="GtkButton" id="cancel5">
-                <property name="label" translatable="yes">cancel</property>
-                <property name="width_request">100</property>
-                <property name="height_request">25</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <signal name="clicked" handler="streamedit_cancel" swapped="no"/>
-              </object>
-              <packing>
-                <property name="x">100</property>
-                <property name="y">10</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="ok1">
-                <property name="label" translatable="yes">ok</property>
-                <property name="width_request">100</property>
-                <property name="height_request">25</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="tooltip_text" translatable="yes">Save changes.</property>
-                <signal name="clicked" handler="streamedit_save" swapped="no"/>
-              </object>
-              <packing>
-                <property name="x">210</property>
-                <property name="y">10</property>
-              </packing>
-            </child>
             <child>
-              <object class="GtkButton" id="streamedit_new">
-                <property name="label" translatable="yes">new</property>
-                <property name="width_request">50</property>
-                <property name="height_request">25</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <signal name="clicked" handler="streamedit_new" swapped="no"/>
-              </object>
-              <packing>
-                <property name="x">5</property>
-                <property name="y">10</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="left_attach">1</property>
-            <property name="right_attach">2</property>
-            <property name="top_attach">9</property>
-            <property name="bottom_attach">10</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkLabel" id="label36">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="xalign">0.69999998807907104</property>
-            <property name="label" translatable="yes"><b>channel</b></property>
-            <property name="use_markup">True</property>
-          </object>
-        </child>
-        <child>
-          <object class="GtkLabel" id="label37">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="xalign">0.08999999612569809</property>
-            <property name="label" translatable="yes"><b>information</b></property>
-            <property name="use_markup">True</property>
-          </object>
-          <packing>
-            <property name="left_attach">1</property>
-            <property name="right_attach">2</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkEntry" id="streamedit_extra">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="invisible_char">●</property>
-            <property name="primary_icon_activatable">False</property>
-            <property name="secondary_icon_activatable">False</property>
-            <property name="primary_icon_sensitive">True</property>
-            <property name="secondary_icon_sensitive">True</property>
-          </object>
-          <packing>
-            <property name="left_attach">1</property>
-            <property name="right_attach">2</property>
-            <property name="top_attach">8</property>
-            <property name="bottom_attach">9</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkLabel" id="label38">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="tooltip_text" translatable="yes">You can add extra information here, if you want. Useful for searching later. But take care that it gets reset on channel reloading.</property>
-            <property name="label" translatable="yes">extra info</property>
-          </object>
-          <packing>
-            <property name="top_attach">8</property>
-            <property name="bottom_attach">9</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkLabel" id="label39">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="tooltip_text" translatable="yes">Audio file format MIME type.</property>
-            <property name="label" translatable="yes">format</property>
-          </object>
-          <packing>
-            <property name="top_attach">7</property>
-            <property name="bottom_attach">8</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkEntry" id="streamedit_format">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="invisible_char">●</property>
-            <property name="primary_icon_activatable">False</property>
-            <property name="secondary_icon_activatable">False</property>
-            <property name="primary_icon_sensitive">True</property>
-            <property name="secondary_icon_sensitive">True</property>
-          </object>
-          <packing>
-            <property name="left_attach">1</property>
-            <property name="right_attach">2</property>
-            <property name="top_attach">7</property>
-            <property name="bottom_attach">8</property>
-          </packing>
-        </child>
-      </object>
-    </child>
-  </object>
-  <object class="GtkWindow" id="win_streamtuner2">
-    <property name="width_request">500</property>
-    <property name="height_request">330</property>
-    <property name="can_focus">False</property>
-    <property name="title" translatable="yes">streamtuner2</property>
-    <property name="default_width">980</property>
-    <property name="default_height">775</property>
-    <property name="icon">/usr/share/pixmaps/streamtuner2.png</property>
-    <property name="icon_name">applications-multimedia</property>
-    <child internal-child="accessible">
-      <object class="AtkObject" id="win_streamtuner2-atkobject">
-        <property name="AtkObject::accessible-name" translatable="yes">streamtuner2</property>
-      </object>
-    </child>
-    <signal name="delete-event" handler="gtk_main_quit" swapped="no"/>
-    <child>
-      <object class="GtkVBox" id="vbox2">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <child>
-          <object class="GtkHBox" id="hbox8">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <child>
-              <object class="GtkVBox" id="vbox3">
+              <object class="GtkVBox" id="vbox3">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
                 <child>
@@ -1614,24 +1588,24 @@ Plugins</property>
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
                     <child>
-                      <object class="GtkMenuItem" id="streammenu">
+                      <object class="GtkMenuItem" id="streammenu1">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
                         <property name="label" translatable="yes">_Station</property>
                         <property name="use_underline">True</property>
                         <child type="submenu">
-                          <object class="GtkMenu" id="menu1">
+                          <object class="GtkMenu" id="streammenu">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
                             <child>
                               <object class="GtkMenuItem" id="menu_bookmark">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="label" translatable="yes">bookmark</property>
+                                <property name="label" translatable="yes">Bookmark</property>
                                 <property name="use_underline">True</property>
-                                <accelerator key="F8" signal="activate"/>
-                                <accelerator key="d" signal="activate" modifiers="GDK_CONTROL_MASK"/>
                                 <signal name="activate" handler="bookmark" swapped="no"/>
+                                <accelerator key="d" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                                <accelerator key="F8" signal="activate"/>
                               </object>
                             </child>
                             <child>
@@ -1641,9 +1615,9 @@ Plugins</property>
                                 <property name="can_focus">False</property>
                                 <property name="use_underline">True</property>
                                 <property name="use_stock">True</property>
-                                <accelerator key="s" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                                <accelerator key="F2" signal="activate"/>
                                 <signal name="activate" handler="save_as" swapped="no"/>
+                                <accelerator key="F2" signal="activate"/>
+                                <accelerator key="s" signal="activate" modifiers="GDK_CONTROL_MASK"/>
                               </object>
                             </child>
                             <child>
@@ -1653,34 +1627,35 @@ Plugins</property>
                                 <property name="can_focus">False</property>
                                 <property name="use_underline">True</property>
                                 <property name="use_stock">True</property>
-                                <accelerator key="Return" signal="activate" modifiers="GDK_MOD1_MASK"/>
-                                <accelerator key="space" signal="activate" modifiers="GDK_MOD1_MASK"/>
-                                <accelerator key="F3" signal="activate"/>
                                 <signal name="activate" handler="streamedit_open" swapped="no"/>
+                                <accelerator key="F3" signal="activate"/>
+                                <accelerator key="space" signal="activate" modifiers="GDK_MOD1_MASK"/>
+                                <accelerator key="Return" signal="activate" modifiers="GDK_MOD1_MASK"/>
                               </object>
                             </child>
                             <child>
-                              <object class="GtkMenuItem" id="extensions0">
+                              <object class="GtkSeparatorMenuItem" id="men_sepmenu_0">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkImageMenuItem" id="extensions_main0">
                                 <property name="label" translatable="yes">Extensions</property>
-                                <property name="use_underline">True</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="image">image4</property>
+                                <property name="use_stock">False</property>
                                 <child type="submenu">
                                   <object class="GtkMenu" id="extensions">
                                     <property name="visible">True</property>
                                     <property name="can_focus">False</property>
-                                    <child>
-                                      <object class="GtkSeparatorMenuItem" id="extensions1">
-                                        <property name="visible">True</property>
-                                        <property name="can_focus">False</property>
-                                      </object>
-                                    </child>
                                   </object>
                                 </child>
                               </object>
                             </child>
                             <child>
-                              <object class="GtkSeparatorMenuItem" id="separatormenuitem1">
+                              <object class="GtkSeparatorMenuItem" id="men_sepmenu_2">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
                               </object>
@@ -1692,8 +1667,8 @@ Plugins</property>
                                 <property name="can_focus">False</property>
                                 <property name="use_underline">True</property>
                                 <property name="use_stock">True</property>
-                                <accelerator key="F4" signal="activate" modifiers="GDK_MOD1_MASK"/>
                                 <signal name="activate" handler="gtk_main_quit" swapped="no"/>
+                                <accelerator key="F4" signal="activate" modifiers="GDK_MOD1_MASK"/>
                               </object>
                             </child>
                           </object>
@@ -1728,9 +1703,9 @@ Plugins</property>
                                 <property name="can_focus">False</property>
                                 <property name="use_underline">True</property>
                                 <property name="use_stock">True</property>
-                                <accelerator key="x" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                                <accelerator key="Delete" signal="activate"/>
                                 <signal name="activate" handler="delete_entry" swapped="no"/>
+                                <accelerator key="Delete" signal="activate"/>
+                                <accelerator key="x" signal="activate" modifiers="GDK_CONTROL_MASK"/>
                               </object>
                             </child>
                             <child>
@@ -1740,8 +1715,9 @@ Plugins</property>
                                 <property name="can_focus">False</property>
                                 <property name="use_underline">True</property>
                                 <property name="use_stock">True</property>
-                                <accelerator key="f" signal="activate" modifiers="GDK_CONTROL_MASK"/>
                                 <signal name="activate" handler="search_open" swapped="no"/>
+                                <accelerator key="f" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                                <accelerator key="F4" signal="activate"/>
                               </object>
                             </child>
                             <child>
@@ -1896,8 +1872,8 @@ Plugins</property>
                                 <property name="can_focus">False</property>
                                 <property name="use_underline">True</property>
                                 <property name="use_stock">True</property>
-                                <accelerator key="F12" signal="activate"/>
                                 <signal name="activate" handler="menu_properties" swapped="no"/>
+                                <accelerator key="F12" signal="activate"/>
                               </object>
                             </child>
                           </object>
@@ -1929,18 +1905,19 @@ Plugins</property>
                                 <property name="can_focus">False</property>
                                 <property name="label" translatable="yes">Reload</property>
                                 <property name="use_underline">True</property>
-                                <accelerator key="F5" signal="activate"/>
                                 <signal name="activate" handler="on_reload_clicked" swapped="no"/>
+                                <accelerator key="F5" signal="activate"/>
                               </object>
                             </child>
                             <child>
                               <object class="GtkMenuItem" id="menuitem10favicons">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="tooltip_text" translatable="yes">this will take a few minutes</property>
+                                <property name="tooltip_text" translatable="yes">this will take a few seconds</property>
                                 <property name="label" translatable="yes">Update favicons...</property>
                                 <property name="use_underline">True</property>
                                 <signal name="activate" handler="update_favicons" swapped="no"/>
+                                <accelerator key="F6" signal="activate"/>
                               </object>
                             </child>
                             <child>
@@ -1950,6 +1927,7 @@ Plugins</property>
                                 <property name="label" translatable="yes">Reload Category Tree</property>
                                 <property name="use_underline">True</property>
                                 <signal name="activate" handler="update_categories" swapped="no"/>
+                                <accelerator key="F5" signal="activate" modifiers="GDK_MOD1_MASK"/>
                               </object>
                             </child>
                             <child>
@@ -1977,16 +1955,17 @@ Plugins</property>
                               <object class="GtkMenuItem" id="helpmenu1">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="label" translatable="yes">documentation</property>
+                                <property name="label" translatable="yes">Documentation</property>
                                 <property name="use_underline">True</property>
                                 <signal name="activate" handler="menu_help" swapped="no"/>
+                                <accelerator key="F1" signal="activate"/>
                               </object>
                             </child>
                             <child>
                               <object class="GtkMenuItem" id="menuonlineforum">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="label" translatable="yes">online forum</property>
+                                <property name="label" translatable="yes">Online forum</property>
                                 <property name="use_underline">True</property>
                                 <signal name="activate" handler="menu_onlineforum" swapped="no"/>
                               </object>
@@ -1995,9 +1974,10 @@ Plugins</property>
                               <object class="GtkMenuItem" id="menufossilwiki">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="label" translatable="yes">wiki/fossil/bugs</property>
+                                <property name="label" translatable="yes">Wiki/Fossil/Bugs</property>
                                 <property name="use_underline">True</property>
                                 <signal name="activate" handler="menu_fossilwiki" swapped="no"/>
+                                <accelerator key="F1" signal="activate" modifiers="GDK_CONTROL_MASK"/>
                               </object>
                             </child>
                             <child>
@@ -2099,7 +2079,25 @@ Plugins</property>
                             <property name="visible_horizontal">False</property>
                             <property name="label" translatable="yes">stop</property>
                             <property name="stock_id">gtk-cancel</property>
-                            <signal name="clicked" handler="on_stop_clicked" swapped="no"/>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="homogeneous">True</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkToolItem" id="toolbutton2">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <child>
+                              <object class="GtkLabel" id="toolbar_link">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="use_markup">True</property>
+                                <property name="justify">center</property>
+                                <property name="width_chars">24</property>
+                              </object>
+                            </child>
                           </object>
                           <packing>
                             <property name="expand">False</property>
@@ -2123,8 +2121,6 @@ Plugins</property>
                         <property name="secondary_icon_stock">gtk-find</property>
                         <property name="primary_icon_activatable">False</property>
                         <property name="secondary_icon_activatable">False</property>
-                        <property name="primary_icon_sensitive">True</property>
-                        <property name="secondary_icon_sensitive">True</property>
                         <signal name="changed" handler="quicksearch_set" swapped="no"/>
                         <signal name="icon-press" handler="quicksearch_set" swapped="no"/>
                       </object>
@@ -2144,174 +2140,2887 @@ Plugins</property>
                 </child>
               </object>
               <packing>
-                <property name="expand">True</property>
-                <property name="fill">True</property>
-                <property name="position">0</property>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkImage" id="img_logo">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="events">GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON3_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_FOCUS_CHANGE_MASK | GDK_STRUCTURE_MASK | GDK_PROPERTY_CHANGE_MASK | GDK_VISIBILITY_NOTIFY_MASK | GDK_PROXIMITY_IN_MASK | GDK_PROXIMITY_OUT_MASK | GDK_SUBSTRUCTURE_MASK | GDK_SCROLL_MASK</property>
+                <property name="xpad">15</property>
+                <property name="stock">gtk-media-play</property>
+                <signal name="button-press-event" handler="double_click_channel_tab" swapped="no"/>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkNotebook" id="notebook_channels">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="tab_pos">left</property>
+            <property name="scrollable">True</property>
+            <property name="enable_popup">True</property>
+            <signal name="switch-page" handler="on_notebook_channels_switch_page" swapped="no"/>
+            <child>
+              <object class="GtkHPaned" id="v_bookmarks">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <child>
+                  <object class="GtkScrolledWindow" id="bookmarks_cat_scrollwin1">
+                    <property name="width_request">150</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <child>
+                      <object class="GtkTreeView" id="bookmarks_cat">
+                        <property name="width_request">75</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="enable_tree_lines">True</property>
+                        <signal name="button-release-event" handler="on_category_clicked" swapped="no"/>
+                        <child internal-child="selection">
+                          <object class="GtkTreeSelection" id="treeview-selection3"/>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="resize">False</property>
+                    <property name="shrink">True</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkScrolledWindow" id="bookmarks_list_scrollwin1">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <child>
+                      <object class="GtkTreeView" id="bookmarks_list">
+                        <property name="width_request">200</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <signal name="button-press-event" handler="station_context_menu" swapped="no"/>
+                        <signal name="row-activated" handler="on_stream_row_activated" swapped="no"/>
+                        <child internal-child="selection">
+                          <object class="GtkTreeSelection" id="treeview-selection4"/>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="resize">True</property>
+                    <property name="shrink">True</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="reorderable">True</property>
+              </packing>
+            </child>
+            <child type="tab">
+              <object class="GtkHBox" id="c_bookmarks">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <signal name="popup-menu" handler="on_homepage_channel_clicked" swapped="no"/>
+                <child>
+                  <object class="GtkImage" id="image7">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="stock">gtk-indent</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="l_bookmarks">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">Bookmarks</property>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="tab_expand">True</property>
+                <property name="tab_fill">False</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkHBox" id="hbox10">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <child>
+              <object class="GtkLabel" id="statusbar">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="xpad">6</property>
+                <property name="ypad">4</property>
+                <property name="angle">0.02</property>
+                <attributes>
+                  <attribute name="weight" value="medium"/>
+                  <attribute name="foreground" value="#555557575353"/>
+                </attributes>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkProgressBar" id="progress">
+                <property name="width_request">75</property>
+                <property name="height_request">16</property>
+                <property name="can_focus">False</property>
+                <property name="no_show_all">True</property>
+                <property name="fraction">1</property>
+                <property name="text" translatable="yes">loading...</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="padding">2</property>
+                <property name="pack_type">end</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">2</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <child internal-child="accessible">
+      <object class="AtkObject" id="win_streamtuner2-atkobject">
+        <property name="AtkObject::accessible-name" translatable="yes">streamtuner2</property>
+      </object>
+    </child>
+  </object>
+  <object class="GtkImage" id="image5">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-indent</property>
+    <property name="icon_size">2</property>
+  </object>
+  <object class="GtkMenu" id="streamactions">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <child>
+      <object class="GtkImageMenuItem" id="streamactions_play">
+        <property name="label">gtk-media-play</property>
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="use_underline">True</property>
+        <property name="use_stock">True</property>
+        <signal name="activate" handler="on_play_clicked" swapped="no"/>
+      </object>
+    </child>
+    <child>
+      <object class="GtkImageMenuItem" id="streamactions_record">
+        <property name="label">gtk-media-record</property>
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="use_underline">True</property>
+        <property name="use_stock">True</property>
+        <signal name="activate" handler="on_record_clicked" swapped="no"/>
+      </object>
+    </child>
+    <child>
+      <object class="GtkImageMenuItem" id="streamactions_bookmark">
+        <property name="label">Add bookmark</property>
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="image">image5</property>
+        <property name="use_stock">False</property>
+        <signal name="activate" handler="bookmark" swapped="no"/>
+      </object>
+    </child>
+    <child>
+      <object class="GtkSeparatorMenuItem" id="m_s_a_line1">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+      </object>
+    </child>
+    <child>
+      <object class="GtkMenuItem" id="extensionsCTM">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="label" translatable="yes">Extensions</property>
+        <property name="use_underline">True</property>
+        <child type="submenu">
+          <object class="GtkMenu" id="extensions_context">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+          </object>
+        </child>
+      </object>
+    </child>
+    <child>
+      <object class="GtkSeparatorMenuItem" id="m_s_a_line2">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+      </object>
+    </child>
+    <child>
+      <object class="GtkImageMenuItem" id="save">
+        <property name="label">gtk-save-as</property>
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="use_underline">True</property>
+        <property name="use_stock">True</property>
+        <signal name="activate" handler="save_as" swapped="no"/>
+      </object>
+    </child>
+    <child>
+      <object class="GtkImageMenuItem" id="edit">
+        <property name="label">gtk-edit</property>
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="use_underline">True</property>
+        <property name="use_stock">True</property>
+        <signal name="activate" handler="streamedit_open" swapped="no"/>
+      </object>
+    </child>
+    <child>
+      <object class="GtkImageMenuItem" id="homepage">
+        <property name="label">Station homepage</property>
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="image">image3</property>
+        <property name="use_stock">False</property>
+        <signal name="activate" handler="on_homepage_stream_clicked" swapped="no"/>
+      </object>
+    </child>
+  </object>
+  <object class="GtkDialog" id="timer_dialog">
+    <property name="can_focus">False</property>
+    <property name="border_width">5</property>
+    <property name="icon_name">appointment-new</property>
+    <property name="type_hint">normal</property>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="dialog-vbox2">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="spacing">2</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area2">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="timer_cancel">
+                <property name="label" translatable="yes">cancel</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="timer_ok">
+                <property name="label" translatable="yes">ok</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkTable" id="table2">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="n_rows">3</property>
+            <property name="n_columns">3</property>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <object class="GtkEntry" id="timer_value">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="invisible_char">●</property>
+                <property name="text" translatable="yes">Fri,Sat 20:00-21:00</property>
+                <property name="primary_icon_activatable">False</property>
+                <property name="secondary_icon_activatable">False</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
               </packing>
             </child>
             <child>
-              <object class="GtkImage" id="img_logo_streamtuner2">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="events">GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON3_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_FOCUS_CHANGE_MASK | GDK_STRUCTURE_MASK | GDK_PROPERTY_CHANGE_MASK | GDK_VISIBILITY_NOTIFY_MASK | GDK_PROXIMITY_IN_MASK | GDK_PROXIMITY_OUT_MASK | GDK_SUBSTRUCTURE_MASK | GDK_SCROLL_MASK</property>
-                <property name="xpad">15</property>
-                <property name="pixbuf">streamtuner2.png</property>
-                <signal name="button-press-event" handler="double_click_channel_tab" swapped="no"/>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">1</property>
-              </packing>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
             </child>
           </object>
           <packing>
-            <property name="expand">False</property>
-            <property name="fill">False</property>
-            <property name="position">0</property>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="0">timer_cancel</action-widget>
+      <action-widget response="0">timer_ok</action-widget>
+    </action-widgets>
+  </object>
+  <object class="GtkWindow" id="url_action_container">
+    <property name="can_focus">False</property>
+    <child>
+      <object class="GtkVBox" id="url_action_list">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <child>
+          <object class="GtkLabel" id="url_action_1_online_forum">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="label" translatable="yes">http://sourceforge.net/projects/streamtuner2/forums/forum/1173108</property>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="url_action_2_fossil_wiki">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="label" translatable="yes">http://fossil.include-once.org/streamtuner2/</property>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="url_action_3_project_homepage">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="label" translatable="yes">http://milki.include-once.org/streamtuner2/</property>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">2</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+  <object class="GtkWindow" id="win_streamedit">
+    <property name="can_focus">False</property>
+    <property name="opacity">0.94999999999999996</property>
+    <property name="border_width">5</property>
+    <property name="title" translatable="yes">inspect/edit stream data</property>
+    <property name="window_position">center-on-parent</property>
+    <property name="destroy_with_parent">True</property>
+    <property name="icon_name">gtk-edit</property>
+    <property name="skip_pager_hint">True</property>
+    <signal name="delete-event" handler="streamedit_cancel" swapped="no"/>
+    <child>
+      <object class="GtkTable" id="table6">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="border_width">15</property>
+        <property name="n_rows">10</property>
+        <property name="n_columns">2</property>
+        <property name="column_spacing">5</property>
+        <property name="row_spacing">5</property>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <object class="GtkLabel" id="label31">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="tooltip_text" translatable="yes">Radio station name.</property>
+            <property name="xalign">0.89999997615814209</property>
+            <property name="label" translatable="yes">title</property>
+          </object>
+          <packing>
+            <property name="top_attach">1</property>
+            <property name="bottom_attach">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkEntry" id="streamedit_title">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="invisible_char">●</property>
+            <property name="primary_icon_activatable">False</property>
+            <property name="secondary_icon_activatable">False</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="right_attach">2</property>
+            <property name="top_attach">1</property>
+            <property name="bottom_attach">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkEntry" id="streamedit_playing">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="invisible_char">●</property>
+            <property name="primary_icon_activatable">False</property>
+            <property name="secondary_icon_activatable">False</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="right_attach">2</property>
+            <property name="top_attach">2</property>
+            <property name="bottom_attach">3</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkEntry" id="streamedit_homepage">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="invisible_char">●</property>
+            <property name="primary_icon_activatable">False</property>
+            <property name="secondary_icon_activatable">False</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="right_attach">2</property>
+            <property name="top_attach">3</property>
+            <property name="bottom_attach">4</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkEntry" id="streamedit_genre">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="invisible_char">●</property>
+            <property name="primary_icon_activatable">False</property>
+            <property name="secondary_icon_activatable">False</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="right_attach">2</property>
+            <property name="top_attach">4</property>
+            <property name="bottom_attach">5</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkEntry" id="streamedit_url">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="invisible_char">●</property>
+            <property name="primary_icon_activatable">False</property>
+            <property name="secondary_icon_activatable">False</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="right_attach">2</property>
+            <property name="top_attach">5</property>
+            <property name="bottom_attach">6</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkEntry" id="streamedit_favicon">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="invisible_char">●</property>
+            <property name="primary_icon_activatable">False</property>
+            <property name="secondary_icon_activatable">False</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="right_attach">2</property>
+            <property name="top_attach">6</property>
+            <property name="bottom_attach">7</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="label32">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="tooltip_text" translatable="yes">Either the last playing song, or a general description of the station.</property>
+            <property name="xalign">0.89999997615814209</property>
+            <property name="label" translatable="yes">playing/desc</property>
+          </object>
+          <packing>
+            <property name="top_attach">2</property>
+            <property name="bottom_attach">3</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="homepage1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="xalign">0.89999997615814209</property>
+            <property name="label" translatable="yes">homepage</property>
+          </object>
+          <packing>
+            <property name="top_attach">3</property>
+            <property name="bottom_attach">4</property>
           </packing>
         </child>
         <child>
-          <object class="GtkNotebook" id="notebook_channels">
+          <object class="GtkLabel" id="label33">
             <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="scrollable">True</property>
-            <property name="enable_popup">True</property>
-            <signal name="switch-page" handler="on_notebook_channels_switch_page" swapped="no"/>
-            <child>
-              <object class="GtkHPaned" id="v_bookmarks">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <child>
-                  <object class="GtkScrolledWindow" id="bookmarks_cat_scrollwin1">
-                    <property name="width_request">150</property>
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <child>
-                      <object class="GtkTreeView" id="bookmarks_cat">
-                        <property name="width_request">75</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="enable_tree_lines">True</property>
-                        <signal name="button-release-event" handler="on_category_clicked" swapped="no"/>
-                      </object>
-                    </child>
-                  </object>
-                  <packing>
-                    <property name="resize">False</property>
-                    <property name="shrink">True</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkScrolledWindow" id="bookmarks_list_scrollwin1">
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <child>
-                      <object class="GtkTreeView" id="bookmarks_list">
-                        <property name="width_request">200</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <signal name="button-press-event" handler="station_context_menu" swapped="no"/>
-                        <signal name="row-activated" handler="on_stream_row_activated" swapped="no"/>
-                      </object>
-                    </child>
-                  </object>
-                  <packing>
-                    <property name="resize">True</property>
-                    <property name="shrink">True</property>
-                  </packing>
-                </child>
-              </object>
-            </child>
-            <child type="tab">
-              <object class="GtkHBox" id="c_bookmarks">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <signal name="popup-menu" handler="on_homepage_channel_clicked" swapped="no"/>
-                <child>
-                  <object class="GtkImage" id="image7">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="stock">gtk-indent</property>
-                  </object>
-                  <packing>
-                    <property name="expand">True</property>
-                    <property name="fill">True</property>
-                    <property name="position">0</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkLabel" id="l_bookmarks">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="label" translatable="yes">bookmarks</property>
-                  </object>
-                  <packing>
-                    <property name="expand">True</property>
-                    <property name="fill">True</property>
-                    <property name="position">1</property>
-                  </packing>
-                </child>
-              </object>
-              <packing>
-                <property name="tab_fill">False</property>
-              </packing>
-            </child>
+            <property name="can_focus">False</property>
+            <property name="xalign">0.89999997615814209</property>
+            <property name="label" translatable="yes">genre</property>
           </object>
           <packing>
-            <property name="expand">True</property>
-            <property name="fill">True</property>
-            <property name="position">1</property>
+            <property name="top_attach">4</property>
+            <property name="bottom_attach">5</property>
           </packing>
         </child>
         <child>
-          <object class="GtkHBox" id="hbox10">
+          <object class="GtkLabel" id="label34">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="tooltip_text" translatable="yes">PLS or M3U link.</property>
+            <property name="xalign">0.89999997615814209</property>
+            <property name="label" translatable="yes">stream url</property>
+          </object>
+          <packing>
+            <property name="top_attach">5</property>
+            <property name="bottom_attach">6</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="label35">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="tooltip_text" translatable="yes">Homepage icon for station. Points to a local cache file.</property>
+            <property name="xalign">0.89999997615814209</property>
+            <property name="label" translatable="yes">favicon</property>
+          </object>
+          <packing>
+            <property name="top_attach">6</property>
+            <property name="bottom_attach">7</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkFixed" id="fixed2">
+            <property name="height_request">40</property>
             <property name="visible">True</property>
             <property name="can_focus">False</property>
             <child>
-              <object class="GtkStatusbar" id="statusbar">
+              <object class="GtkButton" id="cancel5">
+                <property name="label" translatable="yes">cancel</property>
+                <property name="width_request">100</property>
+                <property name="height_request">25</property>
                 <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="spacing">2</property>
-                <property name="homogeneous">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <signal name="clicked" handler="streamedit_cancel" swapped="no"/>
               </object>
               <packing>
-                <property name="expand">True</property>
-                <property name="fill">True</property>
-                <property name="position">0</property>
+                <property name="x">100</property>
+                <property name="y">10</property>
               </packing>
             </child>
             <child>
-              <object class="GtkProgressBar" id="progress">
-                <property name="width_request">75</property>
-                <property name="can_focus">False</property>
-                <property name="fraction">0.28000000000000003</property>
-                <property name="text" translatable="yes">loading...</property>
+              <object class="GtkButton" id="ok1">
+                <property name="label" translatable="yes">ok</property>
+                <property name="width_request">100</property>
+                <property name="height_request">25</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Save changes.</property>
+                <signal name="clicked" handler="streamedit_save" swapped="no"/>
               </object>
               <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">1</property>
+                <property name="x">210</property>
+                <property name="y">10</property>
               </packing>
             </child>
             <child>
-              <object class="GtkStatusbar" id="statusbar1">
-                <property name="width_request">20</property>
+              <object class="GtkButton" id="streamedit_new">
+                <property name="label" translatable="yes">copy/new</property>
+                <property name="width_request">85</property>
+                <property name="height_request">25</property>
                 <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="spacing">2</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <signal name="clicked" handler="streamedit_new" swapped="no"/>
               </object>
               <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">2</property>
+                <property name="x">5</property>
+                <property name="y">10</property>
               </packing>
             </child>
           </object>
           <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">2</property>
+            <property name="left_attach">1</property>
+            <property name="right_attach">2</property>
+            <property name="top_attach">9</property>
+            <property name="bottom_attach">10</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="label36">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="xalign">0.69999998807907104</property>
+            <property name="label" translatable="yes"><b>channel</b></property>
+            <property name="use_markup">True</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkLabel" id="label37">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="xalign">0.08999999612569809</property>
+            <property name="label" translatable="yes"><b>information</b></property>
+            <property name="use_markup">True</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="right_attach">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkEntry" id="streamedit_extra">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="invisible_char">●</property>
+            <property name="primary_icon_activatable">False</property>
+            <property name="secondary_icon_activatable">False</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="right_attach">2</property>
+            <property name="top_attach">8</property>
+            <property name="bottom_attach">9</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="label38">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="tooltip_text" translatable="yes">You can add extra information here, if you want. Useful for searching later. But take care that it gets reset on channel reloading.</property>
+            <property name="label" translatable="yes">extra info</property>
+          </object>
+          <packing>
+            <property name="top_attach">8</property>
+            <property name="bottom_attach">9</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="label39">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="tooltip_text" translatable="yes">Audio file format MIME type.</property>
+            <property name="label" translatable="yes">format</property>
+          </object>
+          <packing>
+            <property name="top_attach">7</property>
+            <property name="bottom_attach">8</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkEntry" id="streamedit_format">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="invisible_char">●</property>
+            <property name="primary_icon_activatable">False</property>
+            <property name="secondary_icon_activatable">False</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="right_attach">2</property>
+            <property name="top_attach">7</property>
+            <property name="bottom_attach">8</property>
           </packing>
         </child>
       </object>
diff --git a/help/action_edit.page b/help/action_edit.page
new file mode 100644
index 0000000..ac67744
--- /dev/null
+++ b/help/action_edit.page
@@ -0,0 +1,34 @@
+<page	xmlns="http://projectmallard.org/1.0/"
+	type="guide"
+	id="edit">
+
+<info>
+	<link type="guide" xref="index#functions"/>
+	<link type="guide" xref="streams#actions"/>
+	<desc>Edit or inspect a station entry.</desc>
+</info>
+
+	<title>Edit</title>
+
+	<p>You probably won't need this often. But there's an
+	<guiseq><gui></gui> <gui>Edit/Details</gui></guiseq> context menu
+	which brings up a station editor:
+	</p>
+	
+	<media type="image" src="img/streamedit.png" mime="image/png" />
+
+	<p>You can see the standard title and genre fields here. But also a
+	few internally kept infos. For example the "url" field contains the
+	actual pls/m3u/server address. While the "format" can list a
+	non-standard audio compression type.</p>
+
+	<note>
+	<p>This dialog is primarily useful for your personal bookmarks.
+	It allows to shorten or rename things. You can even use
+	<gui style="button">new</gui> to add new entries this way.
+	(Which doesn't make sense in regular channel categories, because
+	changes will be lost once you hit Reload.)</p>
+	</note>
+
+
+</page>
diff --git a/help/action_homepage.page b/help/action_homepage.page
index 750e7dc..be24f50 100644
--- a/help/action_homepage.page
+++ b/help/action_homepage.page
@@ -10,18 +10,18 @@
 
 	<title>Radio homepages</title>
 
-	<p>Most radio stations are listed with a homepage URL. Use the <gui>house</gui> symbol in the
+	<p>Most radio stations are listed with a homepage URL. Use the <gui style="button">house</gui> symbol in the
 	toolbar or <guiseq><gui>right click</gui> <gui>homepage</gui></guiseq> to open it in a web browser.</p>
 
-        <p>Some homepage links are guessed, because for example Shoutcast doesn't list them anymore.
-	And if you play a station without homepage URL, it automatically gets googled (but will not
-	be displayed until you reselect the category.)
+        <p>Some homepage links are guessed, because some channels (e.g. Shoutcast) don't provide them (anymore).
+	If you play a station without homepage URL, it automatically gets googled. (The link will be visible
+        once you reselect the genre/category.)
         </p>
 
 	<section>
-	<title>Channel service</title>
-	<p>You can also open channel homepages. Either from the <gui>Channel</gui> menu, or via
-	double clicking the channel tab.</p>
+	<title>Channel homepages</title>
+	<p>You can also visit channel homepages (Shoutcast.com, Xiph.org, etc).
+        Either from the <gui>Channel</gui> menu, or via	double clicking the channel tab.</p>
 	</section>
 
 </page>
diff --git a/help/action_playing.page b/help/action_playing.page
index afc464b..4792331 100644
--- a/help/action_playing.page
+++ b/help/action_playing.page
@@ -4,27 +4,34 @@
 
 	<info>
 	<link type="guide" xref="index#browsing"/>
+	<link type="guide" xref="index#functions"/>
 	<desc>Double click a station to start it in your audio player.</desc>
 	<link type="guide" xref="streams#actions"/>
 	</info>
 
 	<title>Playing</title>
 
-	<p>Simply double click a station to start it with your audio player.</p>
+	<p>To start playing a station, you can:</p>
+	
+	<list>
+
+	  <item><p>Just <em>double click</em> an entry.</p></item>
+
+	  <item><p>Use the <key>▶ play</key> toolbar button.</p></item>
+
+	  <item><p>Right click for the context menu and the <key>play</key> action.</p></item>
+
+	  <item><p>Drag and drop it directly into your audio player.</p></item>
+
+	  <item><p>Save it (<key>F2</key>) to a playlist file, then start your player with that.</p></item>
+
+	</list>
 
         <p>In streamtuner2 you can configure different audio players for different audio
-        formats. In the 'Apps' section of the settings dialog, there is one application associated
-        with each audio file (MIME) type. Per default this is audacious, but you can certainly use
-        any other application.</p>
-
-        <note><p>Note however, that some audio players will start twice and won't
-        allow easy station switching. In these circumstance it might be sensible to write
-        a wrapper script, or configure special commandline arguments to your favoured audio
-        player.</p></note>
-
-        <p>It's also possible to save a station entry as .m3u or .pls file, and load this manually
-        in your player. You might even want to collect such .m3u files for archival / backup
-        purposes.</p>
+        formats (MP3 or OGG). In the <link xref="config_apps">Apps</link> section of the
+        <link xref="configuration">settings dialog</link>, you can associate one player
+        with each audio file (MIME) type. Nowadays you can often configure the same player
+        for all audio (and even video) types.</p>
 
 
 </page>
diff --git a/help/action_recording.page b/help/action_recording.page
index 3bd92d0..12c759b 100644
--- a/help/action_recording.page
+++ b/help/action_recording.page
@@ -4,26 +4,117 @@
 
 <info>
 	<link type="guide" xref="streams#actions"/>
-	<link type="guide" xref="configuration#apps"/>
+	<link type="guide" xref="configuration#recording"/>
 	<link type="guide" xref="index#functions"/>
 	<desc>Save radio songs as MP3 files via streamripper.</desc>
 </info>
 
-	<title>Recording</title>
+<title>Recording</title>
 
-	<p>Most stations that stream MP3 or OGG music can be recorded. This is accomplished by
-        the commandline tool "streamripper". If you select a station a press the [record] button,
-        a console window should appear. Within that streamripper outputs its current activity.</p>
+<p>Most stations that stream MP3 or OGG music can be recorded. This is
+accomplished through the command-line tool <app>streamripper</app>.  If you
+select a station and press <gui style="button">● record</gui>, a console
+window should appear, where streamripper shows its progress.</p>
 
-        <p>Per default recorded streams are written into the current directory. Often this is your
-        home directory. And streamripper automatically creates a directory with the recorded
-        radio station title as name. Within that directory the individual music titles are split
-        into separate .mp3 files.</p>
+<p>You can <link xref="configuration">configure the recording tool</link> according to audio types again.</p>
 
-        <p>You can influence all these behaviours with -arguments to the streamripper program.
-        Please refer to the manpage of streamripper. The options are too various to list here.
-        You can set default arguments (e.g. another default save directory) in the 'Apps' section of
-        the streamtuner2 configuration dialog.</p>
+<section>
+<title>Streamripper</title>
+
+<p>There's already a default entry for recording radio stations:</p>
+
+<table shade="rows" rules="rows cols">
+  <thead>  <tr><td><p>Format</p></td>     <td><p>Application</p></td></tr> </thead>
+  <tr><td><p><var>audio/*</var></p></td>  <td><p><cmd>xterm -e streamripper %srv</cmd></p></td></tr>
+</table>
+
+<p>Streamripper has a few more options of its own:</p>
+
+<steps>
+  <item><p>To define an exact download directory:</p>
+     <list> <item><p><cmd>xterm -e "streamripper -d ~/Music/ %srv"</cmd></p></item> </list>
+  </item>
+  <item><p>Use a specific filename pattern:</p>
+     <list> <item><p><cmd>xterm -e "streamripper --xs2 -D '%S-%A-%T-%a.mp3' %srv"</cmd></p></item> </list>
+  </item>
+  <item><p>Just record a continuous stream, for 1 hour, without splitting individual songs from a radio station:</p>
+     <list> <item><p><cmd>xterm -e "streamripper -A -s 3600 -d ~/Music/ %srv"</cmd></p></item> </list>
+  </item>
+  <item><p>Pretend to be an audio player (in case recording is blocked):</p>
+     <list> <item><p><cmd>streamripper -u 'WinampMPEG/5.0' %srv</cmd></p></item> </list>
+  </item>
+</steps>
+
+<p>Whenever you leave out the <cmd>xterm</cmd> prefix, it runs silently in the background.
+Common xterm alternatives are <cmd>x-terminal-emulator</cmd>, or <cmd>rxvt</cmd>,
+<cmd>gnome-terminal</cmd>, and <cmd>xfce4-terminal</cmd> etc.</p>
+
+<p>See the streamripper(1) man page or its
+<link href="http://streamripper.sourceforge.net/faq.php">FAQ</link> for more tips.</p>
+
+</section>
+
+<section>
+<title>fIcy/fPls</title>
+
+<p>As alternative to streamripper, check out <link href="http://freshcode.club/projects/ficy">fIcy/fPls</link>
+for recording ICEcast/SHOUTcast streaming servers.</p>
+
+<p>It can be configured just as easily with:</p>
+<steps> <item><p><cmd>xterm -e "fPls %pls"</cmd></p></item> </steps>
+</section>
+
+
+<section>
+<title>Graphical stream recording tools</title>
+<p>You can also try a streamripper GUI or graphical
+reimplementation:</p>
+<list>
+<item><p><link href="http://sourceforge.net/projects/stripper/">StreamRipStar</link> (Java), works best per drag and drop; set the DND format to PLS or M3U however.</p></item>
+<item><p><link href="http://launchpad.net/streamtastic">Streamtastic</link> (Java), only imports a text entry per drag and drop.</p></item>
+<item><p><link href="http://kstreamripper.sourceforge.net/">KStreamRipper</link>, though no current version in distros.</p></item>
+<item><p>VLC has built-in recording capabilities.</p></item>
+</list>
+<p>Which all simplify defining a custom download directory, or how radio
+streams are split (between advertisement breaks), and the naming scheme
+for resulting *.mp3 filenames of course.</p>
+</section>
+
+
+
+<section>
+<title>Youtube-DL</title>
+
+<p>The recording settings already have a specific entry for "video/youtube" URLs.</p>
+
+<p>To configure a custom download directory, use:</p>
+<steps> <item><p><cmd>xterm -e "cd /media/music ; youtube-dl %srv"</cmd></p></item> </steps>
+
+<p>The <cmd>cd</cmd> trick also works with streamripper, or other tools.</p>
+</section>
+
+
+<section>
+<title>Wget for MOD files</title>
+<p>To download audio files from The MOD Archive directly, you can also
+define a custom handler.</p>
+<steps>
+  <item><p>Scroll/click on the ⎘ empty row in the recording application list.</p></item>
+  <item><p>There create a new recording MIME type:</p>
+     <list> <item><p><var>audio/mod+zip</var></p></item> </list>
+  </item>
+  <item><p>Specifiy a command like:</p>
+     <list>
+        <item><p><cmd>xterm -e wget %srv</cmd></p></item>
+        <item><p><cmd>cd ~/Desktop ; wget %srv</cmd></p></item>
+        <item><p><cmd>curl %srv</cmd></p></item>
+     </list>
+  </item>
+</steps>
+<p>
+All MOD file formats (IT, XM, S3M, etc.) are mapped to this generic type specifier.
+</p>
+</section>
 
 
 </page>
diff --git a/help/action_saving.page b/help/action_saving.page
index 5408bda..28a7cf8 100644
--- a/help/action_saving.page
+++ b/help/action_saving.page
@@ -10,13 +10,19 @@
 
 	<title>Saving</title>
 
-	<p>You can export the currently selected stream using <guiseq><gui>Station</gui> <gui>Save</gui></guiseq>. A file
-	dialog opens, where you can adapt the title. The extension of the filename decides on
-	the saved link format. Per default a .m3u file is created, because most audio players
-	understand this format.</p>
-	<p> But you can also save in .pls
-	or .xspf or .asx or .smil format. Note that the lower right dropdown
-	has no effect, you must edit the filename field.</p>
+	<p>You can export the currently selected stream using
+	<guiseq><gui>Station</gui> <gui>Save</gui></guiseq> or by pressing
+	<key>F2</key>.  A file dialog opens, where you can adapt the title.
+	</p>
+
+	<p>The extension of the filename decides on the saved link format.  Per
+	default a .m3u file is created, because that's what most audio players
+	understand.</p>
+
+	<note><p> You can also save in <file>.pls</file> or <file>.xspf</file>
+	or <file>.asx</file> or <file>.smil</file> format.  In current
+	releases the file extension is automatically adapted when changing
+	the filter dropdown (bottom right corner in the file dialog). </p></note>
 
 
 </page>
diff --git a/help/channel_bookmarks.page b/help/channel_bookmarks.page
index e70491a..a7eea2c 100644
--- a/help/channel_bookmarks.page
+++ b/help/channel_bookmarks.page
@@ -11,21 +11,30 @@
 
 	<title>Bookmarks</title>
 
-	<p>It's easy to lose the overview when you browse through the various channel tabs, genres
-        and internet radio stations. Therefore streamtuner2 allows to create bookmarks. This way
-        you can collect favoured streams in a single place.</p>
+	<p>Streamtuner2 allows to bookmark favourite streams/stations.</p>
 
-        <p>Just right click a station you want to bookmark, and choose bookmark in the context
-        menu. Alternatively you can use the Streams entry in the application menu. Once bookmarked
-        you can see the station entry in the (!) "bookmarks" tab, under "favourite". That's where
-        they all go.</p>
+        <list>
+         <item><p>Use right click for a stations <guiseq><gui>context menu</gui> <gui>bookmark</gui></guiseq></p></item>
+         <item><p>Or just press <key>F8</key> on a selected radio.</p></item>
+         <item><p>Else use the main menu <guiseq><gui>Station</gui> <gui>bookmark</gui></guiseq></p></item>
+        </list>
+
+        <p>Once bookmarked the station is listed under <guiseq><gui
+        style="menu"><key>bookmarks</key></gui> <gui><key>favourite</key></gui></guiseq>.</p>
+
+        <p>Additionally every appearance of the station in other channel
+        tabs gets a ★ star icon.</p>
 
 	<section id="editing">
 	<title>Editing</title>
-        <p>Entries can be removed from the bookmark list again. Use the edit menu for that.</p>
+        <p>Entries can be removed from the bookmark list again. Use
+        <guiseq><gui>Edit</gui> <gui>Delete</gui></guiseq> or the <key>DEL</key>
+	key for that.</p>
+
+        <p>You can also manually adapt an entry via <guiseq><gui>Station</gui> <gui>Edit</gui></guiseq>
+        or by pressing <key>F3</key>.
+	</p>
 
-	<p>Bookmarked stations are shown with a star in all other channel tabs. If you delete the
-        entry there, it won't remove it from the real bookmarks list.</p>
 	</section>
 
 	<section id="other">
@@ -33,6 +42,8 @@
 	<p>The bookmarks tab can display other categories besides "favourite". For example the
 	search feature creates a "search", while the "timer" and "links" plugins also display
 	lists here.</p>
+	<note style="bug"><p>However the favourite list itself can not yet be categorized
+	further.</p></note>
 	</section>
 
 </page>
diff --git a/help/channel_dirble.page b/help/channel_dirble.page
new file mode 100644
index 0000000..80bde9a
--- /dev/null
+++ b/help/channel_dirble.page
@@ -0,0 +1,24 @@
+<page	xmlns="http://projectmallard.org/1.0/"
+	type="guide"
+	id="dirble">
+
+<info>
+	<link type="guide" xref="index#channels"/>
+	<link type="guide" xref="channels#list"/>
+        <desc>Dirble.com</desc>
+</info>
+
+	<title>Dirble</title>
+        <subtitle><link href="http://dirble.com/">//dirble.com/</link></subtitle>
+	
+	<p>Dirble.com is another radio station directory, made up of
+	user-contributed content, and automatic streaming server polling.</p>
+
+	<p>It provides a JSON API, which as of v2 has a lot of unneeded meta
+	information and internal ids. But it's actually nicer to scan, and
+	contains even station homepages now.</p>
+
+        <note><p>The config option for a custom API key is perhaps
+        redundant. Should streamtuner2 -D however reveal an error, you
+        can however configure your own account there.</p></note>
+</page>
diff --git a/help/channel_filtermusic.page b/help/channel_filtermusic.page
new file mode 100644
index 0000000..b965e78
--- /dev/null
+++ b/help/channel_filtermusic.page
@@ -0,0 +1,33 @@
+<page	xmlns="http://projectmallard.org/1.0/"
+	type="guide"
+	id="filtermusic">
+
+<info>
+	<link type="guide" xref="index#channels"/>
+	<link type="guide" xref="channels#list"/>
+	<link type="guide" xref="configuration#plugins"/>
+        <desc>Selection of the best radio stations</desc>
+</info>
+
+	<title>filtermusic</title>
+        <subtitle><link href="http://filtermusic.net/">//filtermusic.net/</link></subtitle>
+
+
+	<p>Filtermusic summarizes all the common genres, but is primarily
+	focused on electro/dance/pop stations.  It elects on listener
+	popularity and freshness or something.</p>
+
+	<p>Which is why there are just a dozen categories with around 20-30
+	stations each. Still useful if you don't like to browse around
+	a lot.</p>
+
+        <section id="options">	
+        <title>Configuration</title>
+	<p>Like the Xiph plugin this channel provides two/three fetch modes.</p>
+	<note><p>
+	There's no speed or feature differences this time. You might prefer
+	the buffered mode, as it reduces update requests, but still allows
+	refreshing lists.</p></note>
+	</section>
+
+</page>
diff --git a/help/channel_internetradioorguk.page b/help/channel_internetradioorguk.page
index 529bd92..0d16ef6 100644
--- a/help/channel_internetradioorguk.page
+++ b/help/channel_internetradioorguk.page
@@ -9,12 +9,21 @@
         <desc>Large radio directory from the UK.</desc>
 </info>
 
-	<title>Internet-Radio.com</title>
+	<title>Internet-Radio</title>
+        <subtitle><link href="http://internet-radio.com/">//internet-radio.com/</link></subtitle>
+        
+	<p>Internet-Radio.com is a broad alternative to Shoutcast.</p>
+	<list>
+ 	 <item><p>It has regained station homepages for most entries again.</p></item>
+ 	 <item><p>Genres are similiar to Shoutcast.</p></item>
+ 	 <item><p>Updating station lists is comperatively fast.</p></item>
+ 	</list>
 
-	<p>I-R.com is a good alternative to Shoutcast. It also lacks a channel homepage in most
-	cases, but is a likewise encyclopedical directory. Genres are similiar to Shoutcast.</p>
-
-	<note><p>Note that this plugin uses its own setting for how many links to retrieve. Instead
-	of stream numbers, it only counts pages (which however speeds up processing now).</p></note>
+        <section id="options">
+        <title>Configuration</title>
+	<p>Note that this plugin has its own setting on how many
+	links to retrieve.  Instead of stream numbers, it only counts pages
+	(which however speeds up processing now).</p>
+	</section>
 
 </page>
diff --git a/help/channel_jamendo.page b/help/channel_jamendo.page
index 52f7b71..cf407cd 100644
--- a/help/channel_jamendo.page
+++ b/help/channel_jamendo.page
@@ -5,20 +5,49 @@
 <info>
 	<link type="guide" xref="index#channels"/>
 	<link type="guide" xref="channels#list"/>
+	<link type="guide" xref="configuration#plugins"/>
         <desc>Creative Commons music and artist hub.</desc>
 </info>
 
-	<title>Jamendo</title>
+<title>Jamendo</title>
+<subtitle><link href="http://jamendo.com/">//jamendo.com/</link></subtitle>
 
-	<p>Jamendo is a Creative Comments licensing oriented music distributor. It hosts audio
-	files for individual musicians and artists. Tracks and albums can thus be downloaded
-	free of charge. Yeah, imagine that.</p>
+<p>Jamendo is a Creative Comments licensing oriented music distributor. It hosts audio
+files for individual musicians and artists. Tracks and albums can thus be downloaded
+free of charge. Yeah, imagine that.</p>
 
-        <p>The new Jamendo v3.0 is now utilized. It allows to list albums, playlists, and
-        individual tracks by genre. Radios are a static list.</p>
+<p>The new Jamendo v3.0 is now utilized. It allows to list albums,
+playlists, and individual tracks by genre.  The radio list is static
+(they're looping over randomized songs from each genre.)</p>
+
+<p>Instead of favicons, streamtuner2 can fetch album or track
+covers.  Thus the images are a bit larger, and retrieving them all
+via <guiseq><gui>Channel</gui> <gui>Load favicons...</gui></guiseq>
+takes a while longer.</p>
+
+<section id="options">
+<title><link xref="configuration">Config</link> options</title>
+<terms>
+   <title>System</title>
+   <item>
+     <title>Streaming format</title>
+     <p>You can switch between MP3 and Ogg Vorbis audio streams for Jamendo.
+     It's not honored by the radio section, but albums and tracks should be
+     received as Ogg when configured so.</p>
+   </item>
+   <item>
+     <title>Preview image sizes</title>
+     <p>Album covers are downloaded in lieu of favicons. They're available
+     in different sizes. Use 25px if you want just favicon-sized icons.</p>
+   </item>
+   <item>
+     <title>Result length</title>
+     <p>Currently only 1 page (of 200 entries each) of album/track lists are
+     fetched.</p>
+     <note style="bug"><p>Setting a higher value may not work.</p></note>
+   </item>
+</terms>
+</section>
 
-        <p>Instead of favicons, streamtuner2 can fetch album or track covers. Thus the images
-        are a bit larger, and retrieving them all via Channel > Load favicons... takes a while
-        longer.</p>
 
 </page>
diff --git a/help/channel_live365.page b/help/channel_live365.page
new file mode 100644
index 0000000..b807874
--- /dev/null
+++ b/help/channel_live365.page
@@ -0,0 +1,23 @@
+<page	xmlns="http://projectmallard.org/1.0/"
+	type="guide"
+	id="live365">
+
+<info>
+	<link type="guide" xref="index#channels"/>
+	<link type="guide" xref="channels#list"/>
+        <desc>Live365 radio network</desc>
+</info>
+
+	<title>Live365</title>
+        <subtitle><link href="http://live365.com/">//live365.com/</link></subtitle>
+	<p>Live365 is a radio broadcasting service and directory. It categorizes stations in
+        over 250 genres. Not all radio stations are free to listen however. It's a commercial
+        provider. Therefore streamtuner2 tries to filter result lists.</p>
+
+	<p>This channel plugin is known to break once in a while. And it can't be guaranteed
+	to pass working streaming URLs to audio players.</p>
+
+	<p>If it breaks once more, it's going to get removed. (Unless someone else sends in
+	a patch, of course!)</p>
+
+</page>
diff --git a/help/channel_modarchive.page b/help/channel_modarchive.page
new file mode 100644
index 0000000..9d33a32
--- /dev/null
+++ b/help/channel_modarchive.page
@@ -0,0 +1,38 @@
+<page	xmlns="http://projectmallard.org/1.0/"
+	type="guide"
+	id="modarchive">
+
+<info>
+	<link type="guide" xref="index#channels"/>
+	<link type="guide" xref="channels#list"/>
+        <desc>Tracker audio file collection.</desc>
+</info>
+
+	<title>The MOD Archive</title>
+        <subtitle><link href="http://modarchive.org/">//modarchive.org/</link></subtitle>          
+        
+	<p>MODArchive is a collection of module/tracker files. It's a community project, and
+        categorizes individual audio files. You'll need a MOD-capable audio player.</p>
+
+        <list>
+             <item><p>XMP/libxmp</p></item>
+             <item><p>MikMod</p></item>
+             <item><p>MODPlug for XMMS</p></item>
+             <item><p>GModplay</p></item>
+             <item><p>VLC (built-in support)</p></item>
+        </list>
+
+        <section id="options">
+        <title>Configuration</title>
+        
+	<p>See <link xref="recording">recording configuration</link> if you
+	want to enable the download mode.</p>
+
+	<note><p>Audio files are packaged up in ZIP files on MODArchive. 
+	While they are different formats (IT, S3M, XM, etc) they'll all
+	carry a generic <var>audio/mod+zip</var> type specifier in
+	streamtuner2.</p></note>
+	
+	</section>
+
+</page>
diff --git a/help/channel_myoggradio.page b/help/channel_myoggradio.page
index 50b00c8..9537f0f 100644
--- a/help/channel_myoggradio.page
+++ b/help/channel_myoggradio.page
@@ -9,34 +9,62 @@
         <desc>Open source stream directory.</desc>
 </info>
 
-	<title>MyOggRadio</title>
+<title>MyOggRadio</title>
+<subtitle><link href="http://myoggradio.org/">//myoggradio.org/</link></subtitle>          
 
-	<p><link href="http://ehm.homelinux.org/MyOggRadio/">MyOggRadio</link> is an open
-        source internet radio directory project. Since it provides its station list as
-	JSON it is very well supported.</p>
+<p><link href="http://ehm.homelinux.org/MyOggRadio/">MyOggRadio</link> is an open
+source internet radio directory project.</p>
 
-        <p>Because the directory is currently still rather small, streamtuner2 provides the
-	option to share radion station links. Use the <guiseq><gui>Station</gui> <gui>Extensions</gui> <gui>Share...</gui></guiseq>
-	menu entry to upload the currently selected radio (from your favourite bookmarks).</p>
+<p>Since it provides its station list as JSON it's very well supported.</p>
 
-        <p>The personal section is empty, unless you specify an user account in the settings
-	and actually bookmarks stations on the MyOggRadio web site. Shared entries are not
-	automatically in the MOR favorite list.</p>
+<section>
+  <title>Sharing is caring</title>
+  <p>To help with populating the directory further,
+  streamtuner2 provides an option to share radion station links.
+  Use the <guiseq><gui>Station</gui> <gui>Share on MyOggRadio...</gui></guiseq>
+  context menu entry to upload a selected radio (e.g. from your bookmarks).</p>
+</section>
 
+<section>
+  <title>Personal</title>
+  <p>The personal section is empty per default. You need to specify an user account
+  in the settings dialog, and actually bookmark stations in the MyOggRadio web site.
+  Shared entries aren't automatically in the <gui style="button">personal</gui> list.</p>
 
-<terms>
+  <note style="tip"><p>MyOggRadio also has a neat cross-platform player:
+  <link href="http://freshcode.club/projects/jmorp">JMyOggRadioPlayer</link>.</p></note>
+</section>
+
+<section id="options">
   <title>Channel options.</title>
+  <terms>
   <item>
     <title><code>Login settings</code></title>
-    <p>If you want to upload station infos to MyOggRadio, you need an account there. Registration
-    is free and doesn't require personal information nor email address. Specify username and
-    password separated with a : colon in this field.</p>
+    <p>If you want to upload station infos to MyOggRadio, you need an account there.
+    Registration is free and doesn't require personal information nor email address.
+    Specify it as <input>username:password</input> separated with a : colon in this field.</p>
+    <note style="advanced">
+      <p>Alternatively you can store your account settings in the central
+      <file>~/.netrc</file> config file. Or in <file>~/.config/netrc</file> even.</p>
+      <p>Your entry for MyOggRadio should follow the common format:</p>
+<code>
+machine myoggradio.org
+    login usr123
+    password pw123
+</code>
+      <p>Which is useful because it's a standard format, and prevents
+      leaking authorization data into per-application config stores.
+      Note that a user:pw setting in streamtuner still takes precedence
+      however.</p>
+    </note>
   </item>
   <item>
     <title><code>stream URL format</code></title>
-    <p>When uploading stations, the streaming URL can be converted into RAW format. You
-    can however leave it as .PLS link file.</p>
+    <p>When uploading stations, the streaming URL can be converted into
+    raw/direct server address. When undefined, station URLs are left as
+    .M3U/.PLS link.</p>
   </item>
-</terms>
+  </terms>
+</section>
 
 </page>
diff --git a/help/channel_radionomy.page b/help/channel_radionomy.page
new file mode 100644
index 0000000..80dbe1f
--- /dev/null
+++ b/help/channel_radionomy.page
@@ -0,0 +1,45 @@
+<page	xmlns="http://projectmallard.org/1.0/"
+	type="guide"
+	id="radionomy">
+
+<info>
+	<link type="guide" xref="index#channels"/>
+	<link type="guide" xref="channels#list"/>
+	<link type="guide" xref="configuration#plugins"/>
+        <desc>Large internet streaming provider</desc>
+</info>
+
+	<title>Radionomy</title>
+	<subtitle><link href="http://radionomy.com/">//radionomy.com/</link></subtitle>
+
+	<p>Radionomy is an internet radio streaming provider, orginally
+	founded in Belgium.  It commands a pretty big slice of the worldwide
+	internet radio stuff these days. - It took over Shoutcast.com for
+	instance.</p>
+
+	<p>Their primary directory on Radionomy.com only lists stations
+	which radionomy itself hosts streaming servers for.  It's over 6000
+	already.  Both listening and station hosting are free (given agreement
+	to autoplay advertisements, and a minimum quota of daily listeners). 
+	Radionomy is therefore pretty popular and growing.</p>
+	
+	<p>The extraction method in streamtuner2 uses a mix of RegExp,
+	DOM traversal, and JSON extraction, with some AJAX updating spiced
+	in. It closely follows the website scheme to fetch station lists.
+	Instead of favicons smaller station logos are displayed (25px
+	in contrast to the usual 16px).
+	</p>
+	
+	<section id="options">
+	 <title>Configuration</title>
+	 
+         <p> You can configure the number of pages it'll try (<key>3</key> by
+  	 default) to influence the length of station lists.</p>
+	
+	 <p> And the song title updating ("<key>OnAir Updates</key>") can be disabled.
+	 Future versions of this channel plugin might poll it automatically,
+	 and keep the station list auto-updated.</p>
+	
+	 </section>
+
+</page>
diff --git a/help/channel_shoutcast.page b/help/channel_shoutcast.page
index 69ec06a..be39d71 100644
--- a/help/channel_shoutcast.page
+++ b/help/channel_shoutcast.page
@@ -5,11 +5,11 @@
 <info>
 	<link type="guide" xref="index#channels"/>
 	<link type="guide" xref="channels#list"/>
-	<link type="guide" xref="configuration#plugins"/>
-        <desc>One of the bigger radio station lists.</desc>
+        <desc>Probably still the largest radio station list.</desc>
 </info>
 
 	<title>Shoutcast</title>
+	<subtitle><link	href="http://shoutcast.com/">//shoutcast.com/</link></subtitle>
 
 	<p>SHOUTcast is the name of a MP3 streaming server software. It automatically collects all
 	station lists on shoutcast.com.
@@ -17,27 +17,14 @@
 
         <list>
 		<item><p>Station entries usually provide current playing information.</p></item>
-		<item><p>Stream links are plain PLS files.</p></item>
+		<item><p>Stream links are plain <link xref="gloassry_pls">PLS files</link>.</p></item>
 		<item><p>Genres are subcategorized, so the main groups in the category
-		list must often be expanded to see the interesting entries.</p></item>
+		list must be expanded to see the interesting entries.</p></item>
         </list>
 
         <p>Since being sold from AOL to Radionomy, the directory got cut down. There are no longer
         entries for currently played songs, and homepage links are largely gone. Hencewhy the
         Shoutcast channel is no longer considered a primary feature.</p>
 
-<terms>
-  <title>There are a few plugin options for this channel.</title>
-  <item>
-    <title><code>PyQuery parsing</code></title>
-    <p>Uses an XML parser to extract station data from within HTML <tags> of the shoutcast.com site. This is
-    slower, but often more reliable than regular expressions, which look for plain text markers.</p>
-  </item>
-  <item>
-    <title><code>debug output</code></title>
-    <p>Prints verbose messages to the console. This option is used while developing extensions for Streamtuner2.
-    And it actually ought to be a global option by now.</p>
-  </item>
-</terms>
 
 </page>
diff --git a/help/channel_somafm.page b/help/channel_somafm.page
new file mode 100644
index 0000000..2f99576
--- /dev/null
+++ b/help/channel_somafm.page
@@ -0,0 +1,31 @@
+<page	xmlns="http://projectmallard.org/1.0/"
+	type="guide"
+	id="somafm">
+
+<info>
+	<link type="guide" xref="index#channels"/>
+	<link type="guide" xref="channels#list"/>
+        <link type="guide" xref="configuration#channels"/>
+        <desc>Set of radio stations</desc>
+</info>
+
+	<title>SomaFM</title>
+	<subtitle><link	href="http://somafm.com/">//somafm.com/</link></subtitle>
+
+	<p>SomaFM is a small radio station network. It provides its own
+	unique channels. Which streamtuner2 shows in a static list.</p>
+
+        <note><p>SomaFM is a non-commercial and ad-free provider. It
+        strongly depends on listener donations.</p></note>
+
+        <section id="configuration">	
+        <title>Bitrate configuration</title>
+
+	<p>It provides streaming links in different audio formats. Only
+	AAC64 is guaranteed to be available for all. Other bitrates depend
+	on the station.</p>
+
+	<p>After reconfiguring the bitrate/format, you can Reload the
+	station list to update them. Otherwise refreshing has no effect.</p>
+	</section>
+</page>
diff --git a/help/channel_surfmusik.page b/help/channel_surfmusik.page
index 6521f33..fa46a7e 100644
--- a/help/channel_surfmusik.page
+++ b/help/channel_surfmusik.page
@@ -10,6 +10,7 @@
 </info>
 
 	<title>SurfMusic</title>
+	<subtitle><link	href="http://surfmusic.de/">//surfmusic.de/</link></subtitle>
 
 	<p><link href="http://surfmusic.de/">SurfMusic</link> is a user-collection of
         internet radios. It's grouped by genres, or locations / countries.</p>
@@ -17,18 +18,19 @@
         <p>It's both pretty large and rather quick to extract listings from. And it mostly
         includes station homepage links.</p>
 
+        <note style="bug"><p>The MusicTV and NewsTV sections also return results, but those are mostly
+        web-based video stations. Some of them are outdated links even.</p></note>
 
-        <p>The MusicTV and NewsTV sections also return results, but those are mostly
-        web-based video stations. Some of them are outdated links even.</p>
-
-
-<terms>
+<section id="options">
   <title>Channel options.</title>
+  <terms>
   <item>
     <title><code>Language</code></title>
-    <p>The current version is German-only. The English genre titles will be added
-    later.</p>
+    <p>There's an English and a German variant of this radio directory. Genres are
+    also localized. Restart streamtuner2 after switching the Language option. Then
+    use <guiseq><gui>Channel</gui> <gui>Reload category tree</gui></guiseq>.</p>
   </item>
-</terms>
+  </terms>
+</section>
 
 </page>
diff --git a/help/channel_tunein.page b/help/channel_tunein.page
new file mode 100644
index 0000000..945bbe0
--- /dev/null
+++ b/help/channel_tunein.page
@@ -0,0 +1,27 @@
+<page	xmlns="http://projectmallard.org/1.0/"
+	type="guide"
+	id="tunein">
+
+<info>
+	<link type="guide" xref="index#channels"/>
+	<link type="guide" xref="channels#list"/>
+	<link type="guide" xref="configuration#plugins"/>
+        <desc>Radio and Podcast directory.</desc>
+</info>
+
+	<title>TuneIn</title>
+	<subtitle><link	href="http://tunein.com/">//tunein.com/</link></subtitle>
+
+	<p>TuneIn hosts a major radio, show and podcast directory. It also provides the
+        RadioTime/AIR interface for listener feedback or something. ST2 queries the OPML
+        lists only for radio stations currently.</p>
+        
+        <section id="options">
+        <title>Configuration</title>
+        <p>You can switch between "music" and "genres" list. The genres
+        list is basically a longer and expanded variant of "music".
+        Use <guiseq><gui>Channel</gui> <gui>Reload category tree</gui></guiseq>
+        to update them thereafter.</p>
+        </section>
+
+</page>
diff --git a/help/channel_ubuntuusers.page b/help/channel_ubuntuusers.page
new file mode 100644
index 0000000..121f370
--- /dev/null
+++ b/help/channel_ubuntuusers.page
@@ -0,0 +1,26 @@
+<page	xmlns="http://projectmallard.org/1.0/"
+	type="guide"
+	id="ubuntuusersm">
+
+<info>
+	<link type="guide" xref="index#channels"/>
+	<link type="guide" xref="channels#list"/>
+        <desc>Wiki list of radio stations</desc>
+</info>
+
+	<title>UbuntuUsers</title>
+	<subtitle><link	href="http://ubuntuusers.de/">//ubuntuusers.de/</link></subtitle>
+
+	<p>There's a manually curated list of radio stations in the
+	UbuntuUsers.de Wiki. Like the origin website, most entries are
+	German or European stations.</p>
+
+	<p>So this is more of an example plugin, as it's not a huge list
+	of course. It's just here really, because the Wiki markup is
+	pretty well-written and easy to parse.</p>
+	
+	<note><p>There's also a small streaming TV list. But most entries
+	aren't really accessible (anymore) without command line tools. 
+	(Which that very Wiki page covers in detail.)</p></note>
+
+</page>
diff --git a/help/channel_xiph.page b/help/channel_xiph.page
index 94ff42a..c5e8913 100644
--- a/help/channel_xiph.page
+++ b/help/channel_xiph.page
@@ -10,27 +10,80 @@
 </info>
 
 	<title>Xiph.org</title>
+	<subtitle><link	href="http://dir.xiph.org/">//dir.xiph.org/</link></subtitle>
 
-	<p>Xiph.org is a non-profit organization, which develops and promotes the OGG audio format.
-        It also hosts a list of ICEcast streaming stations (ICEcast is the non-commercial pendant
-        to the SHOUTcast server.)</p>
+	<p>Xiph.org is a non-profit organization, which maintains and
+	promotes the OGG streaming format, and develops audio compression
+	schemes such as Vorbis, FLAC, Opus, or the Theora video encoding
+	format.  It also hosts a list of ICEcast streaming stations. ICEcast
+	is their non-commercial pendant to the SHOUTcast server.</p>
 
-        <p>This channel is especially easy to read by Streamtuner2, because the source data is already
-        provided as <XML> file. However, it lacks some essential informations like station
-        homepages and listener numbers.</p>
+        <p>There are different ways for streamtuner2 to retrieve the station
+        lists available on dir.xiph.org.  That's because this is a primary
+        plugin, and fallback solutions therefore important.  Each fetching
+        mode has its own advantages and drawbacks though.</p>
 
-        <p>Xiph also uses the .xspf format, instead of .pls stream links</p>
+        <p>Xiph also uses the .xspf playlist format, instead of just the
+        more ancient Shoutcast .pls stream links.</p>
 
-
-<terms>
+<section id="options">
   <title>Channel options.</title>
+  <terms>
   <item>
     <title><code>Filter by minimum bitrate</code></title>
     <p>The bitrate of an audio stream determines the music quality. Many Xiph streams have simple
     and low quality microphone sources. To filter these out, and only leave high quality music
-    stations, you can therefore set this option. OGG starts to sound good with 128 kbit/s (whereas
-    MP3 often requires 192 at least).</p>
+    stations, you can therefore change this option. OGG starts to sound well with 96 kbit/s (whereas
+    MP3 often requires 128 or 160 kbit/s at least).</p>
+  </item>
+  <item>
+    <title><code>Fetch mode</code></title>
+    <p>There are now three options to retrieve Xiph directory stations.</p>
+    <p></p>
+      <terms>
+      <item>
+        <title><code>Cache JSON</code></title>
+        <p>There's a caching server specifically for streamtuner2. It fixes
+        Xiphs quirky JSON API, and provides a simpler interface. It can't
+        correct the invalid encodings however, which is why you see ????
+        question marks a lot. This method does not reveal station homepages,
+        but enables the channel/server search.</p>
+      </item>
+      <p></p>
+      <item>
+        <title><code>Clunky YP.XML</code></title>
+        <p>The "yellow pages" YP.XML contains the full list of all known
+        ICEcast streaming servers. It's however quite bulky and super slow
+        to download. It furthermore clogs up a lot of memory, and requires
+        manual searching (only cache search works). Which is why streamtuner2
+        is trying hard to avoid it. It doesn't contain station homepages either.
+        </p>
+        <p>It's only still an option, because it's likely to remain accessible
+        after Xiph.org rewrites their directory service. (Which though is
+        getting delayed since a few years already.)
+        You can set the special "buffy" mode in your <file>settings.json</file>
+        to keep the whole YP.XML in memory. Which avoids the
+        slow station list download/unpacking.
+        </p>
+      </item>
+      <p></p>
+      <item>
+        <title><code>Forbidden fruits</code></title>
+        <p>As new alternative, you can let ST2 directly scrape the station
+        lists from dir.xiph.org (like it does for other channels).  This is
+        something which Xiph doesn't approve of.  But the drawbacks of their
+        alternative offerings are too severe and user-unfriendly; which is
+        why there's this raw HTML extraction mode now.</p>
+        <p>The website listings contain full station homepages and a few
+        more extras.  In this mode we can even acceess the XSPF playlist
+        formats directly.  Both, the server search function, or browsing by
+        audio/video format are supported.  </p>
+        <note><p>A miximum of 100 entries get fetched in this mode however
+        (which is 5 pages á 20 entries).</p></note>
+      </item>
+    </terms>
   </item>
-</terms>
+  </terms>
+</section>
 
 </page>
diff --git a/help/channel_youtube.page b/help/channel_youtube.page
index 0f65f0e..c3c0357 100644
--- a/help/channel_youtube.page
+++ b/help/channel_youtube.page
@@ -10,29 +10,44 @@
 </info>
 
 	<title>Youtube</title>
+	<subtitle><link	href="http://youtube.com/">//youtube.com/</link></subtitle>
 
-	<p>Googles <link href="https://youtube.com/">Youtube</link> provides a quirky
-        JSON API that makes browsing channels and genres feasible. This beta plugin
-        provides a little overview, and usually retrieves recent video uploads.</p>
-
-        <p>VLC can directly play Youtube URLs. For other players the default application
-        setting wraps <link href="http://youtube-dl.org/">youtube-dl</link>, which is also
-        used for recording.</p>
-
-
-<terms>
-  <title>Channel options.</title>
-  <item>
-    <title><code>Region</code></title>
-    <p>With the country dropdown you can predefine which mostPopular listins are returned.</p>
-  </item>
-  <item>
-    <title><code>My Channels</code></title>
-    <p>You can edit the list of YT channel names to fetch some of your favourite artists/uploaders.
-    To apply this setting, and have new categories show up in the genre pane, use
-    <guiseq><gui>Channel</gui> <gui>Update category tree</gui></guiseq> first.
-    </p>
-  </item>
-</terms>
+	<p>Googles Youtube provides a quirky JSON API that makes browsing
+        channels and genres feasible.  This beta plugin provides a little
+        overview, and usually retrieves recent video uploads.</p>
+
+        <p>VLC can directly play Youtube URLs. For other players one can use
+        <link href="http://youtube-dl.org/">youtube-dl</link> as wrapper.
+        For example <cmd>totem $(youtube-dl %srv)</cmd> as configured player
+        command.</p>
+        
+        <p>Youtube-dl is preconfigued as "recording"/download tool for this channel
+        tab.</p>
+
+        <p>Of course you could also just invoke a specific YT video by
+        opening it in your web browser - click the station <key>home</key>
+        button simply.</p>
+
+
+        <section id="options">
+          <title>Channel options.</title>
+          <terms>
+          <item>
+            <title><code>Region</code></title>
+            <p>With the country dropdown you can predefine which mostPopular listings are returned.</p>
+          </item>
+          <item>
+            <title><code>My Channels</code></title>
+            <p>You can edit the list of YT channel names to fetch some of your favourite artists/uploaders.
+            To apply this setting, and have new categories show up in the genre pane, use
+            <guiseq><gui>Channel</gui> <gui>Update category tree</gui></guiseq> first.</p>
+            <p>It's not an exact map, but utilizes the search function to find channels.</p>
+          </item>
+          <item>
+            <title><code>Wadsworth constant</code></title>
+            <p>Only influences the video homepage link.</p>
+          </item>
+          </terms>
+        </section>
 
 </page>
diff --git a/help/channels.page b/help/channels.page
index fc2d863..c69bc6d 100644
--- a/help/channels.page
+++ b/help/channels.page
@@ -9,10 +9,15 @@
 
 	<title>Channels</title>
 
-	<p>The tabs in the main window represent the music directory channels. Each lists
-        categories and streams from a specific radio directory.</p>
+	<p>The tabs in the main window represent the music directory
+        channels/services.  Each lists categories/genres and their associated radios/streams.</p>
 
-	<media type="image" mime="image/png" src="img/channels.png">Tabs</media>
+	<media type="image" mime="image/png" src="img/channels-left.png">Tabs</media>
+
+        <p>The notebook tabs can also be repositioned with
+        <guiseq><gui>Edit</gui> <gui>Channel tab position</gui> <gui>Top</gui></guiseq>.
+        And you can directly rearrange the channel tabs themselves,
+        by dragging them within the list.</p>
 
         <p>If you first select a channel tab, the categories should appear or be loading.
         Otherwise:</p>
@@ -24,8 +29,8 @@
 	</steps>
 
 	<p>Individual channels provide different music/radio information. The table
-        views are mostly identical in each tab. (You could modify the <code>datamap[]</code>
-        in the plugin files if you wanted to adapt this.)</p>
+        views are however mostly identical for each tab. Some views may rename columns,
+        or remove them alltogether.</p>
 
 	<section id="list">
 		<title>Available channels</title>
@@ -34,16 +39,17 @@
 
 	<section id="homepage">
 	<title>Channel service homepage</title>
-	<p>You can dobule click the channel tab to view the website of a directory services.
+	<p>You can dobule click the channel tab to visit the channel/directory homepage.
 	Alternatively there is an entry in the <gui>Channel</gui> menu.</p>
 	</section>
 
-	<section id="homepage">
-	<title>Channel menu options</title>
+	<section id="actions">
+	<title>Channel menu actions</title>
 	<terms>
 		<item>
 			<title>Homepage of directory service</title>
-			<p>Opens a webbrowser with the current channels website.</p>
+			<p>Opens the website of the currently selected channel
+			in your configured web browser.</p>
 		</item>
 		<item>
 			<title>Reload</title>
@@ -58,7 +64,7 @@
 			<title>Reload category tree</title>
 			<p>Updates the genre list in the left category pane.
 			For most channels the category list is already complete, but it might
-			change over time. So this option often only is used for initializing streamtuner2
+			change over time. So this option is often only used for initializing streamtuner2
 			channels when the list is empty.</p>
 		</item>
 	</terms>
diff --git a/help/cli.page b/help/cli.page
index e6cf092..7a2dff5 100644
--- a/help/cli.page
+++ b/help/cli.page
@@ -3,7 +3,7 @@
 	id="cli">
 
 <info>
-	<link type="guide" xref="index#advanced"/>
+	<link type="guide" xref="index#extra"/>
         <desc>Console interface, exporting data.</desc>
 </info>
 
@@ -22,7 +22,7 @@
           <item>
             <title><code>streamtuner2 play "station"</code></title>
             <p>This command looks through all channel plugins, and finds a station containing the
-	    mentioned title. In the shell you must put the station title in quotes, if it contains
+	    mentioned title. You must put the station title in quotes in shell calls, if it contains
 	    e.g. spaces. You can optionally specify a channelname before the station title.</p>
           </item>
           <item>
@@ -48,4 +48,47 @@
 	<p>Specifying a channel name is often optional. If you add one, it should be all-lowercase.
 	You can also give a list, like "shoutcast,xiph" which would be searched then.</p>
 
+        <section>
+        <title>GUI options</title>
+	<p>There are also a few command line flags, which influence the
+        graphical runtime.</p>
+        <list>
+          <item>
+            <title>--gtk3</title>
+            <p>Picks the Gtk3 toolkit. Which is default for Python3 runs.
+            But could also be used for Python2 instead of pygtk.</p>
+          </item>
+          <item>
+            <title>--gtk2</title>
+            <p>Fake option. Python2 runs on Gtk2 per default. And Py3 is
+            bound to Gtk3/PyGObject anyway.</p>
+          </item>
+          <item>
+            <title>-D</title>
+            <p>Enable debug output on the console. Identical to the debug
+            configuration dialog option.</p>
+          </item>
+          <item>
+            <title>-d plugin</title>
+            <p>Disable a named plugin. Useful if it hangs on startup. So
+            <cmd>-d xiph</cmd> can temporarily disable it. Note that this
+            flag gets set durably by clicking [save] in the config
+            dialog.</p>
+          </item>
+          <item>
+            <title>-e plugin</title>
+            <p>Enable a channel/feature plugin just once.</p>
+          </item>
+          <item>
+            <title>-h</title>
+            <p>Print help list with all known command line flags. Note that
+            this excludes details on the CLI action commands.</p>
+          </item>
+          <item>
+            <title>-x</title>
+            <p>Exit right away. A flag only used for testing.</p>
+          </item>
+        </list>
+	</section>
+
 </page>
diff --git a/help/config_apps.page b/help/config_apps.page
index e53dda3..7dc7365 100644
--- a/help/config_apps.page
+++ b/help/config_apps.page
@@ -3,6 +3,7 @@
 	id="config_apps">
 
 <info>
+	<link type="seealso" xref="index#configuration"/>
 	<link type="guide" xref="configuration#apps"/>
 	<desc>Common applications to use as players.</desc>
 </info>
@@ -10,44 +11,72 @@
 	<title>Audio players</title>
 
 	<p>On BSD/Linux systems there are a plethora of audio players. In streamtuner2 you can
-	configure most of them as target application. Mostly it makes sense to use a single
+	<link xref="configuration">configure</link> most of them as target application. Mostly it makes sense to use a single
 	application for all audio formats. But at least the */* media type should be handled
 	by a generic player, like vlc.</p>
 
 	<table shade="rows" rules="rows cols">
-		<tr><td>Audacious</td><td>audacious %m3u</td><td>audio</td></tr>
-		<tr><td>XMMS2</td><td>xmms2 %m3u</td><td>audio</td></tr>
-		<tr><td>Amarok</td><td>amarok -l %pls</td><td>audio</td></tr>
-		<tr><td>Exaile</td><td>exaile %m3u</td><td>audio</td></tr>
-		<tr><td>Amarok</td><td>amarok -l %pls</td><td>audio</td></tr>
-		<tr><td>mplayer</td><td>mplayer %srv</td><td>console</td></tr>
-		<tr><td>VLC</td><td>vlc %u</td><td>video/*</td></tr>
-		<tr><td>Totem</td><td>totem %u</td><td>video/*</td></tr>
-		<tr><td>Media Player</td><td>mplayer2.exe %pls</td><td>Win32</td></tr>
+		<tr><td><p><app>Audacious</app></p></td>     <td><p><cmd>audacious</cmd></p></td>  <td><p>audio</p></td></tr>
+		<tr><td><p><app>XMMS2</app></p></td>         <td><p><cmd>xmms2 %m3u</cmd></p></td>      <td><p>audio</p></td></tr>
+		<tr><td><p><app>Amarok</app></p></td>        <td><p><cmd>amarok -l %pls</cmd></p></td>  <td><p>audio</p></td></tr>
+		<tr><td><p><app>Exaile</app></p></td>        <td><p><cmd>exaile</cmd></p></td>     <td><p>audio</p></td></tr>
+		<tr><td><p><app>mplayer</app></p></td>       <td><p><cmd>mplayer %srv</cmd></p></td>    <td><p>console</p></td></tr>
+		<tr><td><p><app>VLC</app></p></td>           <td><p><cmd>vlc %u</cmd></p></td>          <td><p>video</p></td></tr>
+		<tr><td><p><app>Totem</app></p></td>         <td><p><cmd>totem %u</cmd></p></td>        <td><p>video</p></td></tr>
+		<tr><td><p><app>Media Player</app></p></td>  <td><p><cmd>mplayer2.exe %asx</cmd></p></td>  <td><p>Win32</p></td></tr>
 	</table>
 
 	<p>Some audio players open a second instance when you actually want to switch radios.
 	In this case it's a common workaround to write <code>pkill vlc ; vlc %u</code> instead,
 	which ends the previous player process and starts it anew.
-        For VLC there's however also the option <code>--one-instance</code>, which sometimes
-        works better.</p>
+        For VLC there's however also the <code>--one-instance</code> option, which sometimes
+        works better. (And sometimes not.)</p>
 
-	<p>Some applications, like Rhythmbox or Banshee, are primarily audio browsers, not players,
-        and cannot be invoked with a play URL by other apps. This makes them less suitable for use with
-	streamtuner2.</p>
+	<p>Some applications, like Rhythmbox or Banshee, are primarily playlist managers, not players,
+        and cannot be invoked with a station URL. This makes them less suitable for use with streamtuner2.
+        (Same goes for streamtuner2 itself. It's not a player, but just a playlist browser.)</p>
 
-	<section id="abbr">
+	<section id="placeholders">
 	<title>URL placeholders</title>
-	<p>Any listed application can be invoked with a different kind of URL or filename.be invoked with a play URL by other apps.
-	Which to use often depends on the application.</p>
+
+	<p>Listed audio players get run with a streaming server address (URL).
+	These can either be direct MP3/Ogg servers (<var>http://example.org:7843/</var>)
+	and sometimes playlist files (<var>http://example.org/listen.pls</var>)
+	- depending on the channel directory.</p>
+
+	<p>Most audio players automatically handle any station URLs. Some however
+	support just a few formats, or can't handle modern XSPF playlists for
+	instance. Which is why you can control this by adding a placeholder
+	after the configured application name:</p>
+
 	<table shade="rows" rules="rows cols">
-		<tr><td>Placeholder</td><td>Alternatives</td><td>URL/Filename type</td></tr>
-		<tr><td>%m3u</td><td>%f %g %m</td><td>Provides a local .m3u file for the streaming station</td></tr>
-		<tr><td>%pls</td><td>%url %u %r</td><td>Either a remote .pls resource, or a local .pls file (if converted)</td></tr>
-		<tr><td>%srv</td><td>%d %s</td><td>Direct link to first streaming address, e.g. http://72.5.9.33:7500</td></tr>
+	<thead>	<tr><td><p>Placeholder</p></td><td><p>Alternatives</p></td><td><p>URL/Filename type</p></td></tr> </thead>
+		<tr><td><p>%pls</p></td><td><p>%url %u %r</p></td><td><p>Either a remote .pls resource (fastest), or a local .pls file (if converted)</p></td></tr>
+		<tr><td><p>%m3u</p></td><td><p>%f %g %m</p></td><td><p>Provides a local .m3u file for the streaming station</p></td></tr>
+		<tr><td><p>%srv</p></td><td><p>%d %s</p></td><td><p>Direct link to first streaming address, e.g. http://72.5.9.33:7500</p></td></tr>
+		<tr><td><p>%xspf</p></td><td><p>%x</p></td><td><p>Xiph.org shareable playlist format (for modern players)</p></td></tr>
+		<tr><td><p>%jspf</p></td><td><p>%j</p></td><td><p>JSON playlist format (widely unsupported)</p></td></tr>
+		<tr><td><p>%asx</p></td><td><p></p></td><td><p>Some obscure Windows playlist format (don't use that)</p></td></tr>
+		<tr><td><p>%smil</p></td><td><p></p></td><td><p>Standardized multimedia sequencing lists (which nobody uses either)</p></td></tr>
 	</table>
-	<p>You sould preferrably use the long forms. Most audio players like %m3u most, while
-	streamripper needs %srv for recording.</p>
+
+        <p>Preferrably use the long %abbr names for configuration. The
+        default is <var>%pls</var> if you leave it out. (Most directories
+        already provide PLS files, which avoids any extra conversion by ST2
+        which sometimes delay playback.)</p>
+        
+        <p>A few channels (like Jamendo) send custom JSON playlist snippets,
+        which no audio player would understand. Which is why they're always
+        pre-converted.</p>
+        
+	<note style="info"><p>Most audio players like %pls, yet sometimes the
+	older %m3u format more.  Streamripper requires %srv for recording.</p>
+
+	<p>Use the newer <var>%xspf</var> format if your player supports
+	it. This format retains the maximum of station infos (such as
+	homepages etc.), and thus often makes for better bookmarking directly
+	in your player.</p> </note>
+
 	</section>
 
 </page>
diff --git a/help/configuration.page b/help/configuration.page
index 06770de..328a8d7 100644
--- a/help/configuration.page
+++ b/help/configuration.page
@@ -1,89 +1,256 @@
-<page	xmlns="http://projectmallard.org/1.0/"
-	type="guide"
-	id="configuration">
+<page
+    xmlns="http://projectmallard.org/1.0/"
+    type="guide" group="first"
+    id="configuration">
 
 <info>
-	<link type="guide" xref="index#configuration"/>
-        <desc><key>F12</key> brings up the options window with the Player, Display, System and Plugin sections.</desc>
+    <link type="guide" xref="index#configuration"/>
+    <desc><key>F12</key> brings up the options window with the Player, Display, System and Plugin sections.</desc>
 </info>
 
-	<title>Settings dialog</title>
-
-	<p>There are multiple behaviour options in streamtuner2.
-        You can find the settings dialog in the edit menu as "Preferences" (last entry).
-        </p>
-
-        <terms>
-          <title>It is separated into three main areas.</title>
-          <item>
-            <title>Player</title>
-            <p>Lists audio formats and the audio player applications, or recording tools below.</p>
-          </item>
-          <item>
-            <title>Options</title>
-            <p>Influences the display of all stream/station lists, and contains some system settings.</p>
-          </item>
-          <item>
-            <title>Channel Plugins</title>
-            <p>Every channel tab can have specific options. These are configured here.
-            Also you can disable channels you don't need.</p>
-          </item>
-        </terms>
-
-
-	<section id="apps">
-		<title>Player application settings</title>
-		<p>MIME types are elaborate identifiers for file types; audio/mp3 for example represents MP3 files, and audio/ogg
-		means just OGG.</p>
-		<p>The text entry fields can hold the application name of an audio player. Often the application name
-		is just a lower case version of the program title.</p>
-		<p>Behind application names a placeholder can be used. On invocation such placeholders
-		get replaced with an URL (a http://..-Link) or filename for the selected radio stream.</p>
-		<p>It's introduced by a percent sign, and followed by letters. %m3u for example generates a .m3u file,
-                which most audio players understand. Otherwise try %pls, which might even be faster because streamtuner2 doesn't
-		have to download and preprocess it. Alternatively %srv instead gives a direct stream link.</p>
-		<p>Catch-all entries like */* or a generic audio/* entry allow to configure a default player.
-		</p>
-		<p><title>Recording</title></p>
-		<p>The second block of entries in the 'Apps' section specifies recording applications.
-                Here streamripper is preconfigured for audio streams, and youtube-dl for Youtube videos for instance.
-                To define a target directory, you can add commandline arguments to each. Also it's typically
-                helpful to leave the xterm prefix on, so you can follow the processing state. (Alternatively to
-                xterm there is x-terminal-emulator, or rxvt, gnome-terminal, xfce4-terminal, etc.)</p>
-	</section>
-
-
-	<section id="gui">
-		<title>Display/GUI options</title>
-		<p>Most options here a self-explanatory. The options for the favicons define if station entries should
-		show little icons. Not all stations have one, so you might as well turn this off to conserve a little
-		memory.</p>
-		<p>The number of stations setting is not honored by all channel plugins. Often it's not possible to
-		load more or fewer station entries. Some plugins have own settings (in the 'Plugins' section) even.
-		For the major plugins this however limits how much scroll text appears in the stream lists.</p>
-		<p>"Retain deleted stations" keeps old entries, when you reload a category/genre. Shoutcast often
-		forgets stations or throws them out. If you keep this option enabled, these entries are kept in
-		streamtuner2. Browse down in the stations list to still see them.</p>
-		<p>It's possible to select a Gtk+ theme. But not all themes work with all Gtk display engines, and
-		not all themes work with streamtuner2. You just have to try it.</p>
-		<p>Remembering window states makes streamtuner2 not forget which channel and category was last
-		selected. You can however disable this option, and instead manually save the window states/layout
-		in the edit menu, if you want.</p>
-		<p>Setting another temporary directory might be useful, if you want to keep the temporary .m3u cache
-		files. They are created whenever you hit play. For archival or speed-up porposes you might want to keep
-		them elsewhere. They don't take a lot of space.</p>
-	</section>
-
-	<section id="plugins">
-		<title>Plugin and Channel settings</title>
-		<p>Each channel plugin can bring its own list of configuration settings. These are collected here.</p>
-		<p>The heading for each plugin allows to enable or disable it. To apply changed states you need to restart
-                streamtuner2 however.</p>
-		<p>If you want to find out more about the short option descriptions (most settings are checkboxes),
-		please have a look into the channels directory /usr/share/streamtuner2/channels/ and corresponding
-		*.py files. These are readable, and sometimes contain more information.</p>
-	</section>
-	
-	
-	
+<title>Settings dialog</title>
+
+<p>
+There are various options for streamtuner2, available under <guiseq><gui>Edit</gui>
+<gui>Preferences</gui></guiseq> or via <key>F12</key>.
+</p>
+  <p><media type="image" src="img/configtabs.png" mime="image/png" /></p>
+
+<terms>
+  <title>It's grouped into:</title>
+  <item>
+    <title>🔊 Player</title>
+    <p>Associates media formats to audio player applications or recording tools.</p>
+  </item>
+  <item>
+    <title>☑ Options</title>
+    <p>Influences the display of all stream/station lists, and contains some
+    behaviour and system settings.</p>
+  </item>
+  <item>
+    <title>📻 Channel Plugins</title>
+    <p>Allows to enable or disable channel tabs. Each can have specific
+    options, which can be configured here.</p>
+  </item>
+  <item>
+    <title>🔌 Feature Plugins</title>
+    <p>Another class of plugins enables internal functions, or adds extra menu
+    entries, or further configuration options.</p>
+  </item>
+  <item>
+    <title>📦 Add</title>
+    <p>The <link xref="pluginmanager2">Plugin Manager 2</link> adds another
+    tab for updating or installing new plugins.</p>
+  </item>
+</terms>
+
+
+
+<section id="apps">
+
+    <title>Player application settings</title>
+
+    <p>MIME types are categorized identifiers for file types. <var>Audio/mpeg</var> for
+    example represents MP3 files, and <var>audio/ogg</var> means OGG Vorbis.  And the player
+    setting dialog simply associates an audio type with a playback application:</p>
+
+<table shade="rows" rules="rows cols">
+  <thead>  <tr><td><p>Format</p></td>     <td><p>Application</p></td></tr> </thead>
+    <tr><td><p><var>audio/mpeg</var></p></td>     <td><p><cmd>audacious</cmd></p></td></tr>
+    <tr><td><p><var>audio/ogg</var></p></td>      <td><p><cmd>audacious</cmd></p></td></tr>
+    <tr><td><p><var>audio/*</var></p></td>        <td><p><cmd>vlc --one-instance</cmd></p></td></tr>
+    <tr><td><p><var>video/*</var></p></td>        <td><p><cmd>totem</cmd></p></td></tr>
+    <tr><td><p><var>video/youtube</var></p></td>  <td><p><cmd>vlc %srv</cmd></p></td></tr>
+</table>
+
+    <p>Application names are most always lowercase binary names. Double click an entry to edit it.
+    After editing, the icon next to the application name will be updated. If it stays green, it's
+    likely to work. If it turns red / into a stop symbol, then the entered name is likely incorrect.</p>
+
+   <p><media type="image" src="img/configapps.png" mime="image/png" /></p>
+
+    <p>After the application name, you can optionally use a placeholder like "<var>%pls</var>" (default),
+    "<var>%m3u</var>" (old), or "<var>%xspf</var>" (modern), and "<var>%srv</var>" (for direct
+    streaming URLs). See <link xref="config_apps#placeholders">placeholders</link>.</p>
+
+    <p>Catch-all entries like <var>*/*</var> or a generic <var>audio/*</var> entry allow to
+    configure a default player.  While <var>video/youtube</var> is specific to the Youtube
+    channel.  And <var>url/http</var> a pseudo MIME type to configure a web browser (for
+    station homepages).</p>
+    
+    <p>In practice you only need one entry for <var>audio/*</var> and one for
+    <var>video/*</var>, both can use the same player even.  You can remove default entries by
+    clearing both the Format field and its associated Application.  Add completely new
+    associations through the emtpy line.  (Reopen the dialog to add another one.)</p>
+
+</section>
+<section id="recording">
+
+    <title>Recording Apps</title>
+
+    <p>The second block of entries in the 'Apps' section specifies recording applications.
+    Here streamripper is preconfigured for audio streams, and youtube-dl for Youtube videos for instance.</p>
+
+<table shade="rows" rules="rows cols">
+    <tr><td><p><var>audio/*</var></p></td>         <td><p><cmd>xterm -e streamripper %srv</cmd></p></td></tr>
+    <tr><td><p><var>video/youtube</var></p></td>   <td><p><cmd>xterm -e "youtube-dl %srv"</cmd></p></td></tr>
+</table>
+
+    <p>To define a target directory, you can often add commandline arguments to each. Also it's typically
+    helpful to leave the xterm prefix on, so you can follow the processing state.</p>
+</section>
+
+
+<section id="gui">
+
+  <title>Display/GUI options</title>
+  <terms>
+    <title>Display settings</title>
+    <item>
+      <title>Show bookmark star</title>
+      <p>Bookmarked stations will be marked with a ★ star in all other station lists / categories.
+      That doesn't often work for the same station entry from two different channel services / tabs though.</p>
+    </item>
+    <item>
+      <title>Save window states</title>
+      <p>Automatically remember window size, selected channel tab, categories, or selected station.
+      Also keeps the width of station list columns. If disabled, you can manually save the current
+      layout/selections via <guiseq><gui>Edit</gui> <gui>Save States</gui></guiseq>.</p>
+    </item>
+    <item>
+      <title>Update window title</title>
+      <p>When switching channel tabs, the Streamtuner2 window title usually gets the current
+      channel name appended (such as "- Shoutcast" or "- Xiph"). You can disable this if it
+      looks confusing. (Requires a restart to fully take effect.)</p>
+    </item>
+    <item><title><link type="guide" xref="favicon">→ Favicon plugin options</link></title></item>
+  </terms>
+
+  <terms>
+    <title>Station loading</title>
+    <item>
+      <title>Prefer HTML traversing (PyQuery) over regex</title>
+      <p>Some channels provide proper APIs to fetch station lists. Others are just websites that
+      require scraping listings out. Most channel tabs provide two alternative methods for that.
+      The DOM/HTML selection method is sometimes slower, but more reliable. As fallback streamtuner2
+      plugins often use a regex to match text. Occassionally the regex method is surprisingly more exact,
+      because directory services often use frightful unstructured HTML. If available, both methods
+      are tried. You can influence the order with this setting, and thus speed it up.</p>
+    </item>
+    <item>
+      <title>[<input>500</input>] Limit stream number</title>
+      <p> Constraints the length of station lists per category.
+      The number of stations option is not honored by all channel plugins. Often it's not possible to
+      load more or fewer station entries. Some plugins have own settings (in the 'Plugins' section) even.
+      For the major plugins this however limits how many scrollable entries appear in the stream lists.</p>
+    </item>
+    <item>
+      <title>Retain deleted stations</title> <p>When enabled, keeps old station entries when
+      updating/reloading a category/genre.  Services often forget stations or throws them out when inavailable.
+      With this option enabled, these entries are kept in streamtuner2 as strikethrough entries (often
+      at the end of the list).</p>
+    </item>
+    <item>
+      <title>Update favouries from freshened URLs</title>
+      <p>Streaming URLs in bookmarked stations get renewed on category reloads/updates. This isn't
+      very reliable, as often station titles change together with the streaming URLs.</p>
+    </item>
+    <item>
+      <title>Save station lists after updates</title>
+      <p>After reloading (<key>F5</key>) the updated station lists are
+      autoamtically saved. For favicon updates or drag and drop events this
+      only happens automatically when this option is set.</p>
+    </item>
+ </terms>
+
+  <terms>
+    <title>Playlist</title>
+    <item>
+      <title>Reuse .m3u/.pls files</title> <p>When converting online station playlists,
+      streamtuner2 creates temporary files like <var>shoutcast.11539398391891.m3u</var> for
+      your audio player.  It'll keep those files around in /tmp/streamtuner2 until you quit. 
+      That speeds up switching between and reconnecting to a previous station.  It's in
+      particular necessary when you use <key>⏭</key> or <key>⏪</key> directly in your player. 
+      For <var>%pls</var> references your player typically usues the online-only playlist
+      files anyway.  If you disable this option, then converted pls/m3u/xspf files get
+      recreated repeatedly.</p>
+    </item>
+    <item>
+      <title>Forgo any playlist conversion</title>
+      <p>Per default most server playlists (be they .pls or .m3u, .xpsf) are converted.
+      All player/recording apps receive a default <var>%pls</var> file normally.
+      Set this option to disable any such placeholders from the Player tab, and avoid
+      streamtuner2 pre-downloading any m3u/pls/xspf. Instead your audio  player gets passed
+      the literal server/playlist streaming URL then.</p> <note><p>Note that this is only
+      a minor speedup, but may trip up some applications. A few channel sources don't
+      even provide standard stream addresses and playlists. (Jamendo albums for example really
+      need pre-conversion; no audio player can deal with such custom JSON playlists).
+      In short: you don't normally want to enable this flag - unless you run into problems
+      with streamtuner2 taking too long, or when it hang by accidentially downloading streams
+      itself.</p></note>
+    </item>
+ </terms>
+
+  <terms>
+    <title>System</title>
+    <item>
+      <title>Temporary files</title> <p>Streamtuner2 creates temporary .m3u files - for audio
+      players that are configured to use %m3u files instead of %pls or %srv URLs.  For
+      archival purposes you might want to set a dedicated directory for this.  In recent
+      versions streamtuner2 will create a <file>/tmp/streamtuner2</file> directory for itself. 
+      (You cannot set just `/tmp` anymore, because that will be mapped to the longer name. 
+      You can trick the old behaviour with `/tmp/.` however.  Don't do that unless you have a
+      reason).</p>
+    </item>
+    <item>
+      <title>Config directory</title>
+      <p>Is where streamtuner2 keeps its <file>settings.json</file> and channel caches, favicons, etc.
+      You can't set this in the config dialog. This is just for display. Set the <sys>XDG_CONFIG_HOME</sys>
+      environment variable to adapt.</p>
+    </item>
+    <item>
+      <title>Enable debug messages</title>
+      <p>If you start streamtuner2 from a terminal window (xterm/rxvt), you can get a load of state
+      and processing or debug infos. Enable this only for testing, as it might slow down station
+      rendering.</p>
+    </item>
+    <item>
+      <title>Disable threading</title> <p>Now "threading" is a somewhat technical term.  It
+      means that an application runs different tasks internally at the same time.  It's used
+      for snappier interfaces.  However, it's also difficult to get right at times.  In
+      Streamtuner2 some concurrent tasks conflict with updating the Gtk3 user interface. 
+      Which is why the application may crash even on reloading station lists or when switching
+      between categories too quickly.  This is only an issue for Python3 on Gtk3 with
+      streamtuner2.  In such cases you can disable the concurrent-tasking mode.  The GUI will
+      appear slower at times, and freeze between fetching lists, but remains stable on the
+      upside.  There's also a command line flag <cmd>--nt</cmd> to enable this workaround.</p>
+    </item>
+ </terms>
+
+</section>
+
+<section id="plugins">
+    <title>Channel and feature plugins and settings</title>
+
+    <p>The tabs <key>📻 Channels</key> lists all available directory services.
+    While the <key>🔌 Features</key> group provides internal or menu enhancements.
+    Disabling or enabling a plugin however requires a restart of Streamtuner2
+    to take effect. (Unless the <link xref="pluginmanager2">Plugin Manager 2</link>
+    is enabled, with its <key>📦 Add</key> tab visible.)</p>
+    
+    
+    <p><media type="image" src="img/configplugins.png" mime="image/png" /></p>
+
+    <p>Each plugin can have its own little list of extra options. They'll be
+    applied right away for already active channel/feature plugins.</p>
+
+</section>
+
+<section id="note">
+    <note style="note"><p>If you want to find out more about the short option descriptions (most settings are checkboxes),
+    please have a look into the channels directory /usr/share/streamtuner2/channels/ and corresponding
+    *.py files. These are somewhat readable even to non-programmers, and sometimes contain more information.</p></note>
+</section>
+
+
 </page>
diff --git a/help/dragndrop.page b/help/dragndrop.page
new file mode 100644
index 0000000..5fc5ab9
--- /dev/null
+++ b/help/dragndrop.page
@@ -0,0 +1,64 @@
+<page	xmlns="http://projectmallard.org/1.0/"
+	type="guide"
+	id="dragndrop">
+
+<info>
+	<link type="guide" xref="index#extra"/>
+        <desc>Drag and drop support.</desc>
+</info>
+
+	<title>Drag'n'drop</title>
+
+	<p>With the DND feature plugin enabled, there's an even simpler
+	method now to export stations.  Simply click and hold the mouse on a
+	stream entry, then drag it out to the desktop, file manager or
+	directly into VLC or any running music player.  That'll usually
+	copy a stream/station address directly.</p>
+
+	<p>Now it's not guaranteed to work with all applications or file
+	managers, as X11/Gtk DND support is somewhat arcane and wonky.
+	You may specifically have to adapt the default export format for
+	this. Generally a XSPF or PLS file gets created for file managers.
+	While VLC is one of the few applications that understands direct
+	playlist URLs or literal M3U/PLS payloads even.</p>
+	
+
+        <section id="import">
+	<title>Importing</title>
+
+	<p>Playlist importing also works mostly. Here the action module
+	takes care to unpack PLS, XPSF or M3U files and a few other
+	formats. If you drag in streams/playlists from other applications,
+	it'll usually be expanded.</p>
+	
+	<note style="warning">
+	<p>Take note that Streamtuner2 is not intended as playlist manager
+	though. It will only accept radio streaming lists and discard
+	local MP3/Ogg files.</p>
+	</note>
+
+	<p>The import capabilities also allow to move a station entry
+	from one of the channel tabs into your bookmarks list. Simply drag
+	an entry over the "bookmarks" notebook tab then further along into
+	the favourite list. - While this also works the other way round,
+	it doesn't make sense to add bookmarks to Shoutcast/Xiph/etc.
+	Because when their lists get refreshed (<key>F5</key>) all custom
+	entries are usually dropped.</p>
+	</section>
+	
+	<section id="configuration">
+	<title>Export format configuration</title>
+
+	<p>Use <key>F12</key> and change the DND export format. Again
+	PLS is most universal, XSPF most complete, but other formats
+	still available. Use the "desktop" format only if you want to
+	bookmark direct playback links on your desktop.</p>
+
+	<note><p>This is a workaround, because XDND is commonly just implemented
+	as dumb file transfer scheme. Hardly any application specifies the
+	actually desired formats, thus there's no auto-negotiation. ST2
+	therefore has to create temporary export files and hope for the
+	best.</p></note>
+	</section>
+
+</page>
diff --git a/help/exportcat.page b/help/exportcat.page
new file mode 100644
index 0000000..b4c6f9b
--- /dev/null
+++ b/help/exportcat.page
@@ -0,0 +1,28 @@
+<page	xmlns="http://projectmallard.org/1.0/"
+	type="guide"
+	id="exportcat">
+
+<info>
+	<link type="guide" xref="index#extra"/>
+        <desc>Exporting a whole category as .pls.</desc>
+</info>
+
+	<title>Export all stations</title>
+
+	<p>There's an "Export All" plugin available. It adds an entry under
+	<guiseq><gui>Main menu</gui> <gui>Extensions</gui> <gui>Export all stations</gui></guiseq>.
+	Which allows to export all stations from the currently visible channel category.</p>
+	
+	<p>This is of course intended primarily for saving your bookmarks.
+	And it allows to import radio lists into any other music player
+	or playlist collection/management app (such as Rhythmbox).</p>
+
+	<section id="configuration">
+	<title>Configuration option</title>
+	<p>You can set the default export format in the settings dialog
+	<key>F12</key>.</p>
+	<p>It supports all common export formats now, with .PLS being the
+	default.</p>
+	</section>
+
+</page>
diff --git a/help/extending.page b/help/extending.page
deleted file mode 100644
index cfaf83d..0000000
--- a/help/extending.page
+++ /dev/null
@@ -1,58 +0,0 @@
-<page	xmlns="http://projectmallard.org/1.0/"
-	type="guide"
-	id="extending">
-
-<info>
-	<link type="guide" xref="index#advanced"/>
-        <desc>Writing your own channel plugins.</desc>
-</info>
-
-	<title>Extension Howto</title>
-
-	<p>Streamtuner2 is written in Python, a rather easy programming language. And it's also rather simple
-	to write a new channel plugin.</p>
-
-	<p>The basic layout of every channel plugin is as follows:</p>
-
-	<p><code type="text/python">
-
-from channels import *
-
-class myplugin (ChannelPlugin):
-
-    title = "MyNewChannel"
-    module = "myplugin"
-    homepage = "http://www.mymusicstation.com/"
-    categories = []
-
-
-
-    def update_categories(self):
-    
-        self.categories = []
-
-
-
-    def update_streams(self, cat, force=0):
-
-        entries = []
-
-        # ...
-        # get it from somewhere
-        # ...        
-
-        return entries
-        
-	</code></p>
-
-	<p>There are some self-explanatory description fields, and two important methods. Sometimes you
-        don't need categories even. The update_streams() function often downloads a website, parses it
-	with regular expressions or PyQuery / DOM methods, and packs into into a result list.</p>	
-
-	<p>Here entries is a list of dictionaries, with standardized entry names like "title" and "playing"
-	for the description, and "homepage" for a browsable link, and most importantly "url" for the
-	actual streaming link. Often you want to add a "genre" and "format" and "bitrate" info. But this depends
-	on your plugins data source, really.</p>
-	
-	
-</page>
diff --git a/help/favicon.page b/help/favicon.page
new file mode 100644
index 0000000..075d42a
--- /dev/null
+++ b/help/favicon.page
@@ -0,0 +1,73 @@
+<page	xmlns="http://projectmallard.org/1.0/"
+	type="guide"
+	id="favicon">
+
+<info>
+	<link type="guide" xref="index#extra"/>
+        <desc>Favicons</desc>
+</info>
+
+<title>Station favicons</title>
+
+<p>Per default you'll get a small logo / icon for any station
+with a homepage link. They're automatically fetched and displayed
+as soon as you play a radio entry.</p>
+
+<p>This functionality meanwhile resides in a plugin. It's available in the
+<key>🔌 Features</key> <link xref="configuration">configuration</link> tab. 
+You can disable it as whole if unneeded.  Most configuration options are now
+collected there.</p>
+
+<p>Some channels (Jamendo or Radionomy) provide small album previews
+or banners (Punkcast) even. Whereas normal favicons are just 16x16
+pixel images.</p>
+
+<p>Downloaded image files are meanwhile all sanitized (internally
+converted to ensure they're really image files).
+Albeit that's not strictly necessary for modern Gtk versions. (But
+better safe than sorry).
+Images are kept in the <file>~/.config/streamtuner2/icons</file> directory.
+</p>
+
+
+<section id="configuration">
+<title>Configuration options</title>
+
+<terms>
+  <item>
+    <title>Load favicons on playing</title>
+    <p>When starting to play a station, its homepage favicon is automatically downloaded
+    in the background. It's even displayed right away as soon as it's there. You can
+    also have a whole category/genre list updated right away per menu command
+    <guiseq><gui>Channel</gui> <gui>Update favicons...</gui></guiseq>.</p>
+  </item>
+  <item>
+    <title>Homepage googling</title>
+    <p>When playing a station that doesn't have a homepage entry, streamtuner2 tries
+    to google the station title. The found URL is then used/kept as station homepage.
+    This isn't super exact however, so you might end up with homepages and icons
+    from Wikipedia, Twitter, Facebook or something for generic radio station names.
+    (Btw, station titles like www.mymusicstation.com are automatically mapped to
+    homepage URLs already.)</p>
+  </item>
+  <item>
+    <title>Use Google favicon service</title>
+    <p>Downloading favicons directly from station homepages can sometimes be
+    a little slow. Which is because it requires to inspect the homepage
+    itself first, and then uncovering an image resource. The Google method
+    instead uses <cmd>http://www.google.com/s2/favicons?domain=www.example.com</cmd>
+    to fetch a PNG icon right away. Which is often faster. You might want to
+    disable this for privacy reasons though.</p>
+  </item>
+  <item>
+    <title>Omit placeholders</title>
+    <p>Oftentimes the Google favicon service sends back a placeholder icon
+    (a blue mini globe), which doesn't look very interesting. So you might
+    want to disable those. (They're still downloaded, but just not saved in
+    the cache directory.)</p>
+  </item>
+</terms>
+
+</section>
+
+</page>
diff --git a/help/global_key.page b/help/global_key.page
index bec4fc8..b9b2745 100644
--- a/help/global_key.page
+++ b/help/global_key.page
@@ -1,37 +1,38 @@
 <page	xmlns="http://projectmallard.org/1.0/"
-	type="topic"
+	type="guide"
 	id="global_key">
 
 <info>
-	<link type="guide" xref="index#advanced"/>
+	<link type="guide" xref="index#extra"/>
         <desc>Global keyboard shortcut for radio switching.</desc>
 </info>
 
 	<title>Global_key</title>
 
 	<p>Using the global_key extension you can define a keyboard shortcut for switching within
-	a list of favourite radio stations. Per default it uses your bookmarks list, but it can be
+	a list of favourited radio stations. Per default it uses your bookmarks list, but it can be
 	configured to alternate in any other channel.</p>
 
-	<p>This is useful if you don't want to keep the streamtuner2 window in the foreground
-	all the time, but still want to switch radios easily.</p>
+	<p>This is useful if you don't want to keep streamtuner2 atop your
+	desktop all the time, but still want to switch radios easily.</p>
 
 	<p>Go into settings <key>F12</key> for plugins to define a keyboard shortcut:</p>
 
 	<table shade="rows" rules="rows cols">
-		<tr><td>keyspec:</td><td>corresponds to:</td></tr>
-		<tr><td>F9</td><td>Responds to only <key>F9</key>. (too generic)</td></tr>
-		<tr><td><Meta>R</td><td>often the 'Windows'-key and R</td></tr>
-		<tr><td><Ctrl>N</td><td>Control and <key>N</key></td></tr>
-		<tr><td><Shift>F1</td><td>Shift and F1</td></tr>
-		<tr><td><Alt>SPACE</td><td>Use Alt and <key>Space</key>. (too generic)</td></tr>
-		<tr><td>XF86Forward</td><td>Uses a "forward" function key. (default)</td></tr>
+	<thead>	<tr><td><p>keyspec</p></td>                   <td><p>corresponds to</p></td></tr> </thead>
+		<tr><td><p><input>F9</input></p></td>              <td><p>Responds to only <key>F9</key>. (too generic)</p></td></tr>
+		<tr><td><p><input><Meta>R</input></p></td>   <td><p>often the 'Windows'-key and R</p></td></tr>
+		<tr><td><p><input><Ctrl>N</input></p></td>   <td><p>Control and <key>N</key></p></td></tr>
+		<tr><td><p><input><Shift>F1</input></p></td> <td><p>Shift and F1</p></td></tr>
+		<tr><td><p><input><Alt>SPACE</input></p></td> <td><p>Use Alt and <key>Space</key>. (too generic)</p></td></tr>
+		<tr><td><p><input>XF86Forward</input></p></td>     <td><p>Uses a "forward" function key. (default)</p></td></tr>
 	</table>
 
 	<p>To define another channel as source, enter its module name in the according field. Also
 	add a category separated by : colon here.</p>
 
-	<note><p>If the configured keyboard shortcut conflicts with another application,
-	it won't work. And if you choose it too generic, you won't be able to type longer
-	documents. Also found out: key names are case sensitive.</p></note>
+	<note style="bug"><p>If the configured keyboard shortcut conflicts
+	with another application, it won't work.  And if you choose it too
+	generic, you won't be able to type longer documents.  Also found
+	out: key names are case sensitive.</p></note>
 </page>
diff --git a/help/glossary.page b/help/glossary.page
index 0177ae9..d84ac8e 100644
--- a/help/glossary.page
+++ b/help/glossary.page
@@ -3,7 +3,7 @@
 	id="glossary">
 
 <info>
-	<link type="guide" xref="index#advanced"/>
+	<link type="topic" xref="index#extra"/>
 	<desc>Technical and streamtuner2 specific terminology and jargon.</desc>
 </info>
 
@@ -25,7 +25,7 @@
 	    data.  MP3 radio music for example is streamed, because it's not
 	    just a time-limited audio file, but unending (unless you stop
 	    the player or paying your ISP).</p>
-	    <p>In streamtuner2 we also use the terms "stream" and radio "station" interchangably.</p>
+	    <p>In streamtuner2 the terms "stream" and radio "station" are used interchangably.</p>
 	  </item>
 
 	  <item>
@@ -36,13 +36,12 @@
 	  </item>
 
 	  <item>
-	    <title>URL</title>
-	    <p>URL stands for "Uniform Resource Locator" and simply means
-	    hyperlinks and web addresses like http://www.example.org/. 
-	    There is also the hipster term "URI", which is technically more
-	    general (but superseeded by "IRI" and "IRL" anyway).  In
-	    streamtuner2 the audio streaming link often is an URL, as is the
-	    radio station homepage of course.</p>
+	    <title>URL</title> <p>URL stands for "Uniform Resource Locator"
+	    and simply refers to something retrievable hyperlinks or web addresses like
+	    http://www.example.org/.  Radio stations/streams are stored as URLs internally.
+            The more generic hipster term "URI" (long superseded by "IRI" anyway)
+            makes less sense in this context, because ISBN: or MailTo: references aren't
+            overly useful for such purposes.</p>
 	  </item>
 
 	  <item>
@@ -52,12 +51,10 @@
 	  </item>
 
 	  <item>
-	    <title>Favicons</title>
-	    <p>Favicons are small symbols for websites. Every website has one.
-	    Or should have. As it makes it easier to associate content with
-	    homepage addresses. (ST2 downloads favicons either per menu command
-	    or automatically for the current station once you hit play.)
-   	    </p>
+	    <title>Favicons</title> <p>Favicons are small symbols for
+	    websites.  Most website should have one.  (ST2 downloads
+	    favicons either per menu command or automatically for the
+	    current station once you hit play.) </p>
 	  </item>
 
 	  <item>
@@ -94,7 +91,8 @@
 	    <p>For classification of web and email content, two-factor descriptions like
 	    "audio/ogg" are advised. These are called Multipurpose Internet Mail Extension
             types, and are used on the web in lieu of file extensions (which URL resources don't have).
-            Note that ST2 uses the MP3 type wrong; it's officially audio/mpeg, and not audio/mp3 as shown in the settings window.</p>
+            Note that ST2 uses the MP3 type wrong; it's officially
+            audio/mpeg, and not audio/mp3 as shown in the settings window.</p>
 	  </item>
 
 	  <item>
@@ -102,7 +100,7 @@
 	    <p>Audio streams are compressed with exactness loss. This can be heard
 	    at lower "bitrates". For MP3 files any music with less than 100 kbit/s
 	    starts to hiss, while OGG Vorbis still sounds okay at a datarate of
-	    for example 64 kbit/s. So while bitrate basically means file size per duration,
+	    e.g. 64 kbit per second. So while bitrate basically means file size per duration,
 	    it's commonly used as quality indicator.</p>
 	  </item>
 
diff --git a/help/glossary_json.page b/help/glossary_json.page
index 59d9af6..17b20cb 100644
--- a/help/glossary_json.page
+++ b/help/glossary_json.page
@@ -14,7 +14,7 @@
         and radio station data files.</p>
 	<p>The MIME type of these files is application/json and they often look like: </p>
 
-<p><code>
+<code>
 [
   {
     "title": "Station title..",
@@ -23,6 +23,6 @@
   },
   { "title": "second" }
 ]
-</code></p>
+</code>
 
 </page>
diff --git a/help/glossary_m3u.page b/help/glossary_m3u.page
index 9c4bc04..95689af 100644
--- a/help/glossary_m3u.page
+++ b/help/glossary_m3u.page
@@ -9,13 +9,13 @@
 
 	<title>.M3U files</title>
 
-	<p>M3U files also contain playlists, like .pls files. But they are often used by locally installed audio players.</p>
+	<p>M3U files also contain playlists, like .pls files. They're often used by desktop audio players.</p>
 	<p>The MIME type of these files is audio/x-mpegurl and they often look like: </p>
 
-<p><code>
+<code>
 #M3U
 http://123.45.67.189:8222/
 http://123.45.67.222:7555/
-</code></p>
+</code>
 
 </page>
diff --git a/help/glossary_pls.page b/help/glossary_pls.page
index 7cc7b29..91c3375 100644
--- a/help/glossary_pls.page
+++ b/help/glossary_pls.page
@@ -10,14 +10,18 @@
 	<title>.PLS files</title>
 
 	<p>Playlist files often have the extension .pls</p>
-	<p>It's the primary station stream link format of SHOUTcast.</p>
-	<p>The MIME type of these files is audio/x-scpls and they often look like: </p>
-<p><code mime="audio/x-scpls">
+
+	<p>It's the primary station stream link format of SHOUTcast, and was
+	popularized by WinAmp.</p>
+
+	<p>The MIME type of these files is <sys>audio/x-scpls</sys> and they often look like: </p>
+
+<code mime="audio/x-scpls">
 [playlist]
 numberofentries=1
 File1=http://123.45.67.189:8222
 Title1=(#1 - 555/2000) radio station Xyz - top 100 - all the hitzez
 Length1=-1
-</code></p>
+</code>
 
 </page>
diff --git a/help/html/bookmarks.html b/help/html/bookmarks.html
index 7c6d33b..02edfcd 100644
--- a/help/html/bookmarks.html
+++ b/help/html/bookmarks.html
@@ -19,20 +19,25 @@
 <div class="hgroup"><h1 class="title"><span class="title">Bookmarks</span></h1></div>
 <div class="region">
 <div class="contents">
-<p class="p">It's easy to lose the overview when you browse through the various channel tabs, genres
-        and internet radio stations. Therefore streamtuner2 allows to create bookmarks. This way
-        you can collect favoured streams in a single place.</p>
-<p class="p">Just right click a station you want to bookmark, and choose bookmark in the context
-        menu. Alternatively you can use the Streams entry in the application menu. Once bookmarked
-        you can see the station entry in the (!) "bookmarks" tab, under "favourite". That's where
-        they all go.</p>
+<p class="p">Streamtuner2 allows to bookmark favourite streams/stations.</p>
+<div class="list"><div class="inner"><div class="region"><ul class="list">
+<li class="list"><p class="p">Use right click for a stations <span class="guiseq"><span class="gui">context menu</span> ▸ <span class="gui">bookmark</span></span></p></li>
+<li class="list"><p class="p">Or just press <span class="key"><kbd>F8</kbd></span> on a selected radio.</p></li>
+<li class="list"><p class="p">Else use the main menu <span class="guiseq"><span class="gui">Station</span> ▸ <span class="gui">bookmark</span></span></p></li>
+</ul></div></div></div>
+<p class="p">Once bookmarked the station is listed under <span class="guiseq"><span class="gui"><span class="key"><kbd>bookmarks</kbd></span></span> ▸ <span class="gui"><span class="key"><kbd>favourite</kbd></span></span></span>.</p>
+<p class="p">Additionally every appearance of the station in other channel
+        tabs gets a ★ star icon.</p>
 </div>
 <div id="editing" class="sect"><div class="inner">
 <div class="hgroup"><h2 class="title"><span class="title">Editing</span></h2></div>
 <div class="region"><div class="contents">
-<p class="p">Entries can be removed from the bookmark list again. Use the edit menu for that.</p>
-<p class="p">Bookmarked stations are shown with a star in all other channel tabs. If you delete the
-        entry there, it won't remove it from the real bookmarks list.</p>
+<p class="p">Entries can be removed from the bookmark list again. Use
+        <span class="guiseq"><span class="gui">Edit</span> ▸ <span class="gui">Delete</span></span> or the <span class="key"><kbd>DEL</kbd></span>
+	key for that.</p>
+<p class="p">You can also manually adapt an entry via <span class="guiseq"><span class="gui">Station</span> ▸ <span class="gui">Edit</span></span>
+        or by pressing <span class="key"><kbd>F3</kbd></span>.
+	</p>
 </div></div>
 </div></div>
 <div id="other" class="sect"><div class="inner">
@@ -41,6 +46,8 @@
 <p class="p">The bookmarks tab can display other categories besides "favourite". For example the
 	search feature creates a "search", while the "timer" and "links" plugins also display
 	lists here.</p>
+<div class="note note-bug" title="Bug"><div class="inner"><div class="region"><div class="contents"><p class="p">However the favourite list itself can not yet be categorized
+	further.</p></div></div></div></div>
 <div class="links topiclinks"><div class="inner"><div class="region">
 <div class="linkdiv "><a class="linkdiv" href="search.html" title="Searching"><span class="title">Searching</span><span class="linkdiv-dash"> — </span><span class="desc">Quicksearch field and Ctrl+F compound search window.</span></a></div>
 <div class="linkdiv "><a class="linkdiv" href="timer.html" title="Timer"><span class="title">Timer</span><span class="linkdiv-dash"> — </span><span class="desc">Programming recurring play and recording events.</span></a></div>
diff --git a/help/html/channels.html b/help/html/channels.html
index a456603..5b6039b 100644
--- a/help/html/channels.html
+++ b/help/html/channels.html
@@ -13,9 +13,13 @@
 <div class="hgroup"><h1 class="title"><span class="title">Channels</span></h1></div>
 <div class="region">
 <div class="contents">
-<p class="p">The tabs in the main window represent the music directory channels. Each lists
-        categories and streams from a specific radio directory.</p>
-<div class="media media-image"><div class="inner"><img src="img/channels.png" class="media media-block" alt=""></div></div>
+<p class="p">The tabs in the main window represent the music directory
+        channels/services.  Each lists categories/genres and their associated radios/streams.</p>
+<div class="media media-image"><div class="inner"><img src="img/channels-left.png" class="media media-block" alt=""></div></div>
+<p class="p">The notebook tabs can also be repositioned with
+        <span class="guiseq"><span class="gui">Edit</span> ▸ <span class="gui">Channel tab position</span> ▸ <span class="gui">Top</span></span>.
+        And you can directly rearrange the channel tabs themselves,
+        by dragging them within the list.</p>
 <p class="p">If you first select a channel tab, the categories should appear or be loading.
         Otherwise:</p>
 <div class="steps"><div class="inner"><div class="region"><ol class="steps">
@@ -24,31 +28,42 @@
 <li class="steps"><p class="p">Pick a category/genre from the overview, left.</p></li>
 </ol></div></div></div>
 <p class="p">Individual channels provide different music/radio information. The table
-        views are however identical in each tab. You could modify the <span class="code">datamap[]</span>
-        in the plugin files, if you want to adapt this.</p>
+        views are however mostly identical for each tab. Some views may rename columns,
+        or remove them alltogether.</p>
 </div>
 <div id="list" class="sect"><div class="inner">
 <div class="hgroup"><h2 class="title"><span class="title">Available channels</span></h2></div>
 <div class="region"><div class="contents"><div class="links topiclinks"><div class="inner"><div class="region">
 <div class="linkdiv "><a class="linkdiv" href="bookmarks.html" title="Bookmarks"><span class="title">Bookmarks</span><span class="linkdiv-dash"> — </span><span class="desc">Collect favourites via bookmark function, entry editing and deleting.</span></a></div>
-<div class="linkdiv "><a class="linkdiv" href="internet_radio_org_uk.html" title="Internet-Radio.org.uk"><span class="title">Internet-Radio.org.uk</span><span class="linkdiv-dash"> — </span><span class="desc">Large radio directory from the UK.</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="dirble.html" title="Dirble"><span class="title">Dirble</span><span class="linkdiv-dash"> — </span><span class="desc">Dirble.com</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="internet_radio_org_uk.html" title="Internet-Radio"><span class="title">Internet-Radio</span><span class="linkdiv-dash"> — </span><span class="desc">Large radio directory from the UK.</span></a></div>
 <div class="linkdiv "><a class="linkdiv" href="jamendo.html" title="Jamendo"><span class="title">Jamendo</span><span class="linkdiv-dash"> — </span><span class="desc">Creative Commons music and artist hub.</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="live365.html" title="Live365"><span class="title">Live365</span><span class="linkdiv-dash"> — </span><span class="desc">Live365 radio network</span></a></div>
 <div class="linkdiv "><a class="linkdiv" href="myoggradio.html" title="MyOggRadio"><span class="title">MyOggRadio</span><span class="linkdiv-dash"> — </span><span class="desc">Open source stream directory.</span></a></div>
-<div class="linkdiv "><a class="linkdiv" href="shoutcast.html" title="Shoutcast"><span class="title">Shoutcast</span><span class="linkdiv-dash"> — </span><span class="desc">One of the bigger radio station lists.</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="radionomy.html" title="Radionomy"><span class="title">Radionomy</span><span class="linkdiv-dash"> — </span><span class="desc">Large internet streaming provider</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="shoutcast.html" title="Shoutcast"><span class="title">Shoutcast</span><span class="linkdiv-dash"> — </span><span class="desc">Probably still the largest radio station list.</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="somafm.html" title="SomaFM"><span class="title">SomaFM</span><span class="linkdiv-dash"> — </span><span class="desc">Set of radio stations</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="surfmusik.html" title="SurfMusic"><span class="title">SurfMusic</span><span class="linkdiv-dash"> — </span><span class="desc">International radio listings.</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="modarchive.html" title="The MOD Archive"><span class="title">The MOD Archive</span><span class="linkdiv-dash"> — </span><span class="desc">Tracker audio file collection.</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="tunein.html" title="TuneIn"><span class="title">TuneIn</span><span class="linkdiv-dash"> — </span><span class="desc">Radio and Podcast directory.</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="ubuntuusersm.html" title="UbuntuUsers"><span class="title">UbuntuUsers</span><span class="linkdiv-dash"> — </span><span class="desc">Wiki list of radio stations</span></a></div>
 <div class="linkdiv "><a class="linkdiv" href="xiph.html" title="Xiph.org"><span class="title">Xiph.org</span><span class="linkdiv-dash"> — </span><span class="desc">ICEcast radio directory.</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="youtube.html" title="Youtube"><span class="title">Youtube</span><span class="linkdiv-dash"> — </span><span class="desc">Youtube music/video listings.</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="filtermusic.html" title="filtermusic"><span class="title">filtermusic</span><span class="linkdiv-dash"> — </span><span class="desc">Selection of the best radio stations</span></a></div>
 </div></div></div></div></div>
 </div></div>
 <div id="homepage" class="sect"><div class="inner">
 <div class="hgroup"><h2 class="title"><span class="title">Channel service homepage</span></h2></div>
-<div class="region"><div class="contents"><p class="p">You can dobule click the channel tab to view the website of a directory services.
+<div class="region"><div class="contents"><p class="p">You can dobule click the channel tab to visit the channel/directory homepage.
 	Alternatively there is an entry in the <span class="gui">Channel</span> menu.</p></div></div>
 </div></div>
-<div id="homepage" class="sect"><div class="inner">
-<div class="hgroup"><h2 class="title"><span class="title">Channel menu options</span></h2></div>
+<div id="actions" class="sect"><div class="inner">
+<div class="hgroup"><h2 class="title"><span class="title">Channel menu actions</span></h2></div>
 <div class="region"><div class="contents">
 <div class="terms"><div class="inner"><div class="region"><dl class="terms">
 <dt class="terms">Homepage of directory service</dt>
-<dd class="terms"><p class="p">Opens a webbrowser with the current channels website.</p></dd>
+<dd class="terms"><p class="p">Opens the website of the currently selected channel
+			in your configured web browser.</p></dd>
 <dt class="terms">Reload</dt>
 <dd class="terms"><p class="p">Updates the current category and displays fresh station lists.</p></dd>
 <dt class="terms">Update favicons...</dt>
@@ -57,7 +72,7 @@
 <dt class="terms">Reload category tree</dt>
 <dd class="terms"><p class="p">Updates the genre list in the left category pane.
 			For most channels the category list is already complete, but it might
-			change over time. So this option often only is used for initializing streamtuner2
+			change over time. So this option is often only used for initializing streamtuner2
 			channels when the list is empty.</p></dd>
 </dl></div></div></div>
 <p class="p">The channel menu also contains a list of available channels. Select an entry to switch
diff --git a/help/html/cli.html b/help/html/cli.html
index 6156df0..9d687a1 100644
--- a/help/html/cli.html
+++ b/help/html/cli.html
@@ -7,8 +7,12 @@
 <script type="text/javascript" src="jquery.js"></script><script type="text/javascript" src="jquery.syntax.js"></script><script type="text/javascript" src="yelp.js"></script>
 </head>
 <body><div class="page" role="main">
-<div class="header"><div class="trails" role="navigation"><div class="trail">
-<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#advanced" title="Advanced topics">Advanced topics</a> » </div></div></div>
+<div class="header"><div class="trails" role="navigation">
+<div class="trail">
+<a class="trail" href="glossary.html" title="Glossary">Glossary</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » </div>
+<div class="trail">
+<a class="trail" href="technical.html" title="Technical information">Technical information</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » </div>
+</div></div>
 <div class="body">
 <div class="hgroup"><h1 class="title"><span class="title">CLI (command line interface)</span></h1></div>
 <div class="region">
@@ -23,7 +27,7 @@
 <div class="region"><dl class="terms">
 <dt class="terms"><span class="code">streamtuner2 play "station"</span></dt>
 <dd class="terms"><p class="p">This command looks through all channel plugins, and finds a station containing the
-	    mentioned title. In the shell you must put the station title in quotes, if it contains
+	    mentioned title. You must put the station title in quotes in shell calls, if it contains
 	    e.g. spaces. You can optionally specify a channelname before the station title.</p></dd>
 <dt class="terms"><span class="code">streamtuner2 url [channel] "station"</span></dt>
 <dd class="terms"><p class="p">Just looks up the streaming URL for a given station. If no channel name is given,
@@ -40,11 +44,55 @@
 <p class="p">Specifying a channel name is often optional. If you add one, it should be all-lowercase.
 	You can also give a list, like "shoutcast,xiph" which would be searched then.</p>
 </div>
+<div id="" class="sect"><div class="inner">
+<div class="hgroup"><h2 class="title"><span class="title">GUI options</span></h2></div>
+<div class="region"><div class="contents">
+<p class="p">There are also a few command line flags, which influence the
+        graphical runtime.</p>
+<div class="list"><div class="inner"><div class="region"><ul class="list">
+<li class="list">
+<div class="title title-item"><h3><span class="title">--gtk3</span></h3></div>
+<p class="p">Picks the Gtk3 toolkit. Which is default for Python3 runs.
+            But could also be used for Python2 instead of pygtk.</p>
+</li>
+<li class="list">
+<div class="title title-item"><h3><span class="title">--gtk2</span></h3></div>
+<p class="p">Fake option. Python2 runs on Gtk2 per default. And Py3 is
+            bound to Gtk3/PyGObject anyway.</p>
+</li>
+<li class="list">
+<div class="title title-item"><h3><span class="title">-D</span></h3></div>
+<p class="p">Enable debug output on the console. Identical to the debug
+            configuration dialog option.</p>
+</li>
+<li class="list">
+<div class="title title-item"><h3><span class="title">-d plugin</span></h3></div>
+<p class="p">Disable a named plugin. Useful if it hangs on startup. So
+            <span class="cmd">-d xiph</span> can temporarily disable it. Note that this
+            flag gets set durably by clicking [save] in the config
+            dialog.</p>
+</li>
+<li class="list">
+<div class="title title-item"><h3><span class="title">-e plugin</span></h3></div>
+<p class="p">Enable a channel/feature plugin just once.</p>
+</li>
+<li class="list">
+<div class="title title-item"><h3><span class="title">-h</span></h3></div>
+<p class="p">Print help list with all known command line flags. Note that
+            this excludes details on the CLI action commands.</p>
+</li>
+<li class="list">
+<div class="title title-item"><h3><span class="title">-x</span></h3></div>
+<p class="p">Exit right away. A flag only used for testing.</p>
+</li>
+</ul></div></div></div>
+</div></div>
+</div></div>
 <div class="sect sect-links" role="navigation">
 <div class="hgroup"></div>
 <div class="contents"><div class="links guidelinks"><div class="inner">
 <div class="title"><h2><span class="title">More Information</span></h2></div>
-<div class="region"><ul><li class="links "><a href="index.html#advanced" title="Advanced topics">Advanced topics</a></li></ul></div>
+<div class="region"><ul><li class="links "><a href="index.html#extra" title="Additional features">Additional features</a></li></ul></div>
 </div></div></div>
 </div>
 </div>
diff --git a/help/html/config_apps.html b/help/html/config_apps.html
index 20d494f..efca942 100644
--- a/help/html/config_apps.html
+++ b/help/html/config_apps.html
@@ -14,100 +14,142 @@
 <div class="region">
 <div class="contents">
 <p class="p">On BSD/Linux systems there are a plethora of audio players. In streamtuner2 you can
-	configure most of them as target application. Mostly it makes sense to use a single
+	<span class="link"><a href="configuration.html" title="Settings dialog">configure</a></span> most of them as target application. Mostly it makes sense to use a single
 	application for all audio formats. But at least the */* media type should be handled
 	by a generic player, like vlc.</p>
 <div class="table"><div class="inner"><div class="region"><table class="table">
 <tr>
-<td></td>
-<td style="border-left-style: solid;"></td>
-<td style="border-left-style: solid;"></td>
+<td><p class="p"><span class="app">Audacious</span></p></td>
+<td style="border-left-style: solid;"><p class="p"><span class="cmd">audacious</span></p></td>
+<td style="border-left-style: solid;"><p class="p">audio</p></td>
 </tr>
 <tr class="shade">
-<td style="border-top-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
+<td style="border-top-style: solid;"><p class="p"><span class="app">XMMS2</span></p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p"><span class="cmd">xmms2 %m3u</span></p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p">audio</p></td>
 </tr>
 <tr>
-<td style="border-top-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
+<td style="border-top-style: solid;"><p class="p"><span class="app">Amarok</span></p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p"><span class="cmd">amarok -l %pls</span></p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p">audio</p></td>
 </tr>
 <tr class="shade">
-<td style="border-top-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
+<td style="border-top-style: solid;"><p class="p"><span class="app">Exaile</span></p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p"><span class="cmd">exaile</span></p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p">audio</p></td>
 </tr>
 <tr>
-<td style="border-top-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
+<td style="border-top-style: solid;"><p class="p"><span class="app">mplayer</span></p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p"><span class="cmd">mplayer %srv</span></p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p">console</p></td>
 </tr>
 <tr class="shade">
-<td style="border-top-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
+<td style="border-top-style: solid;"><p class="p"><span class="app">VLC</span></p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p"><span class="cmd">vlc %u</span></p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p">video</p></td>
 </tr>
 <tr>
-<td style="border-top-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
+<td style="border-top-style: solid;"><p class="p"><span class="app">Totem</span></p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p"><span class="cmd">totem %u</span></p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p">video</p></td>
 </tr>
 <tr class="shade">
-<td style="border-top-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
-</tr>
-<tr>
-<td style="border-top-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
+<td style="border-top-style: solid;"><p class="p"><span class="app">Media Player</span></p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p"><span class="cmd">mplayer2.exe %asx</span></p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p">Win32</p></td>
 </tr>
 </table></div></div></div>
 <p class="p">Some audio players open a second instance when you actually want to switch radios.
-	In this case it's a common workaround to write <span class="code">pkill vlc ; vlc %u</span> instead.
-	This ends the previous player and starts it anew.</p>
-<p class="p">Some applications, like Rhythmbox or Banshee, are pure GUI applications and cannot
-	be invoked with a play URL by other apps. This makes them unsuitable for use with
-	streamtuner2.</p>
+	In this case it's a common workaround to write <span class="code">pkill vlc ; vlc %u</span> instead,
+	which ends the previous player process and starts it anew.
+        For VLC there's however also the <span class="code">--one-instance</span> option, which sometimes
+        works better. (And sometimes not.)</p>
+<p class="p">Some applications, like Rhythmbox or Banshee, are primarily playlist managers, not players,
+        and cannot be invoked with a station URL. This makes them less suitable for use with streamtuner2.
+        (Same goes for streamtuner2 itself. It's not a player, but just a playlist browser.)</p>
 </div>
-<div id="abbr" class="sect"><div class="inner">
+<div id="placeholders" class="sect"><div class="inner">
 <div class="hgroup"><h2 class="title"><span class="title">URL placeholders</span></h2></div>
 <div class="region"><div class="contents">
-<p class="p">Any listed application can be invoked with a different kind of URL or filename.be invoked with a play URL by other apps.
-	Which to use often depends on the application.</p>
+<p class="p">Listed audio players get run with a streaming server address (URL).
+	These can either be direct MP3/Ogg servers (<span class="var">http://example.org:7843/</span>)
+	and sometimes playlist files (<span class="var">http://example.org/listen.pls</span>)
+	- depending on the channel directory.</p>
+<p class="p">Most audio players automatically handle any station URLs. Some however
+	support just a few formats, or can't handle modern XSPF playlists for
+	instance. Which is why you can control this by adding a placeholder
+	after the configured application name:</p>
 <div class="table"><div class="inner"><div class="region"><table class="table">
+<thead><tr>
+<td><p class="p">Placeholder</p></td>
+<td style="border-left-style: solid;"><p class="p">Alternatives</p></td>
+<td style="border-left-style: solid;"><p class="p">URL/Filename type</p></td>
+</tr></thead>
+<tr>
+<td><p class="p">%pls</p></td>
+<td style="border-left-style: solid;"><p class="p">%url %u %r</p></td>
+<td style="border-left-style: solid;"><p class="p">Either a remote .pls resource (fastest), or a local .pls file (if converted)</p></td>
+</tr>
+<tr class="shade">
+<td style="border-top-style: solid;"><p class="p">%m3u</p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p">%f %g %m</p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p">Provides a local .m3u file for the streaming station</p></td>
+</tr>
 <tr>
-<td></td>
-<td style="border-left-style: solid;"></td>
-<td style="border-left-style: solid;"></td>
+<td style="border-top-style: solid;"><p class="p">%srv</p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p">%d %s</p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p">Direct link to first streaming address, e.g. http://72.5.9.33:7500</p></td>
 </tr>
 <tr class="shade">
-<td style="border-top-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
+<td style="border-top-style: solid;"><p class="p">%xspf</p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p">%x</p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p">Xiph.org shareable playlist format (for modern players)</p></td>
 </tr>
 <tr>
-<td style="border-top-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
+<td style="border-top-style: solid;"><p class="p">%jspf</p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p">%j</p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p">JSON playlist format (widely unsupported)</p></td>
 </tr>
 <tr class="shade">
-<td style="border-top-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
+<td style="border-top-style: solid;"><p class="p">%asx</p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p"></p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p">Some obscure Windows playlist format (don't use that)</p></td>
+</tr>
+<tr>
+<td style="border-top-style: solid;"><p class="p">%smil</p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p"></p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p">Standardized multimedia sequencing lists (which nobody uses either)</p></td>
 </tr>
 </table></div></div></div>
-<p class="p">You sould preferrably use the long forms. Most audio players like %m3u most, while
-	streamripper needs %srv for recording.</p>
+<p class="p">Preferrably use the long %abbr names for configuration. The
+        default is <span class="var">%pls</span> if you leave it out. (Most directories
+        already provide PLS files, which avoids any extra conversion by ST2
+        which sometimes delay playback.)</p>
+<p class="p">A few channels (like Jamendo) send custom JSON playlist snippets,
+        which no audio player would understand. Which is why they're always
+        pre-converted.</p>
+<div class="note" title="Note"><div class="inner"><div class="region"><div class="contents">
+<p class="p">Most audio players like %pls, yet sometimes the
+	older %m3u format more.  Streamripper requires %srv for recording.</p>
+<p class="p">Use the newer <span class="var">%xspf</span> format if your player supports
+	it. This format retains the maximum of station infos (such as
+	homepages etc.), and thus often makes for better bookmarking directly
+	in your player.</p>
+</div></div></div></div>
 </div></div>
 </div></div>
 <div class="sect sect-links" role="navigation">
 <div class="hgroup"></div>
-<div class="contents"><div class="links guidelinks"><div class="inner">
+<div class="contents">
+<div class="links guidelinks"><div class="inner">
 <div class="title"><h2><span class="title">More Information</span></h2></div>
 <div class="region"><ul><li class="links "><a href="configuration.html#apps" title="Player application settings">Player application settings</a></li></ul></div>
-</div></div></div>
+</div></div>
+<div class="links seealsolinks"><div class="inner">
+<div class="title"><h2><span class="title">See Also</span></h2></div>
+<div class="region"><ul><li class="links "><a href="index.html#configuration" title="Configuration">Configuration</a></li></ul></div>
+</div></div>
+</div>
 </div>
 </div>
 <div class="clear"></div>
diff --git a/help/html/configuration.html b/help/html/configuration.html
index 12255ad..8705237 100644
--- a/help/html/configuration.html
+++ b/help/html/configuration.html
@@ -13,89 +13,252 @@
 <div class="hgroup"><h1 class="title"><span class="title">Settings dialog</span></h1></div>
 <div class="region">
 <div class="contents">
-<p class="p">There are many options in streamtuner2. You can find the settings dialog in the edit menu,
-        preferences (last entry).</p>
+<p class="p">
+There are various options for streamtuner2, available under <span class="guiseq"><span class="gui">Edit</span> ▸ <span class="gui">Preferences</span></span> or via <span class="key"><kbd>F12</kbd></span>.
+</p>
+<p class="p"><span class="media"><span class="media media-image"><img src="img/configtabs.png" class="media media-inline" alt=""></span></span></p>
 <div class="terms"><div class="inner">
-<div class="title title-terms"><h2><span class="title">It is separated into four main areas.</span></h2></div>
+<div class="title title-terms"><h2><span class="title">It's grouped into:</span></h2></div>
 <div class="region"><dl class="terms">
-<dt class="terms">Player</dt>
-<dd class="terms"><p class="p">Lists audio formats and the applications which shall be used for playing.</p></dd>
-<dt class="terms">Display</dt>
-<dd class="terms"><p class="p">Influences the display of all stream/station lists.</p></dd>
-<dt class="terms">System</dt>
-<dd class="terms"><p class="p">Filesystem and environment settings. Boring.</p></dd>
-<dt class="terms">Channel Plugins</dt>
-<dd class="terms"><p class="p">Every channel tab can have specific options. These are configured here. Also you can disable channels you don't need.</p></dd>
+<dt class="terms">🔊 Player</dt>
+<dd class="terms"><p class="p">Associates media formats to audio player applications or recording tools.</p></dd>
+<dt class="terms">☑ Options</dt>
+<dd class="terms"><p class="p">Influences the display of all stream/station lists, and contains some
+    behaviour and system settings.</p></dd>
+<dt class="terms">📻 Channel Plugins</dt>
+<dd class="terms"><p class="p">Allows to enable or disable channel tabs. Each can have specific
+    options, which can be configured here.</p></dd>
+<dt class="terms">🔌 Feature Plugins</dt>
+<dd class="terms"><p class="p">Another class of plugins enables internal functions, or adds extra menu
+    entries, or further configuration options.</p></dd>
+<dt class="terms">📦 Add</dt>
+<dd class="terms"><p class="p">The <span class="link"><a href="pluginmanager2.html" title="Plugin Manager 2">Plugin Manager 2</a></span> adds another
+    tab for updating or installing new plugins.</p></dd>
 </dl></div>
 </div></div>
 </div>
 <div id="apps" class="sect"><div class="inner">
 <div class="hgroup"><h2 class="title"><span class="title">Player application settings</span></h2></div>
 <div class="region"><div class="contents">
-<p class="p">MIME types are elaborate identifiers for file types. audio/mp3 for example represents MP3 files, and audio/ogg
-		means just OGG.</p>
-<p class="p">The text entry fields can hold the application name of an audio player. Often the application name
-		is just a lower case version of the program title, but you might have to look it up.</p>
-<p class="p">Behind the application program name is a placeholder. If the audio player is invoked, this placeholder
-		gets replaces with an URL (a http://..-Link) of the selected radio stream.</p>
-<p class="p">It's introduced by percent sign, and followed by letters. %m3u for example generates a .m3u file. Most
-		audio players understand that. Otherwise try %pls, which might even be faster because streamtuner2 doesn't
-		have to download and preprocess it. %srv instead gives a direct stream link.</p>
-<p class="p">The entry for */* is a catch-all. If the audio format of a radio station isn't know, this application
-		gets called.</p>
-<p class="p">Recording</p>
-<p class="p">The last entry in the 'Apps' section specifies streamripper. It is used for recording stations. You
-		might want to add some commandline -arguments here.</p>
-<div class="links topiclinks"><div class="inner"><div class="region">
-<div class="linkdiv "><a class="linkdiv" href="config_apps.html" title="Audio players"><span class="title">Audio players</span><span class="linkdiv-dash"> — </span><span class="desc">Common applications to use as players.</span></a></div>
-<div class="linkdiv "><a class="linkdiv" href="recording.html" title="Recording"><span class="title">Recording</span><span class="linkdiv-dash"> — </span><span class="desc">Save radio songs as MP3 files via streamripper.</span></a></div>
-</div></div></div>
+<p class="p">MIME types are categorized identifiers for file types. <span class="var">Audio/mpeg</span> for
+    example represents MP3 files, and <span class="var">audio/ogg</span> means OGG Vorbis.  And the player
+    setting dialog simply associates an audio type with a playback application:</p>
+<div class="table"><div class="inner"><div class="region"><table class="table">
+<thead><tr>
+<td><p class="p">Format</p></td>
+<td style="border-left-style: solid;"><p class="p">Application</p></td>
+</tr></thead>
+<tr>
+<td><p class="p"><span class="var">audio/mpeg</span></p></td>
+<td style="border-left-style: solid;"><p class="p"><span class="cmd">audacious</span></p></td>
+</tr>
+<tr class="shade">
+<td style="border-top-style: solid;"><p class="p"><span class="var">audio/ogg</span></p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p"><span class="cmd">audacious</span></p></td>
+</tr>
+<tr>
+<td style="border-top-style: solid;"><p class="p"><span class="var">audio/*</span></p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p"><span class="cmd">vlc --one-instance</span></p></td>
+</tr>
+<tr class="shade">
+<td style="border-top-style: solid;"><p class="p"><span class="var">video/*</span></p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p"><span class="cmd">totem</span></p></td>
+</tr>
+<tr>
+<td style="border-top-style: solid;"><p class="p"><span class="var">video/youtube</span></p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p"><span class="cmd">vlc %srv</span></p></td>
+</tr>
+</table></div></div></div>
+<p class="p">Application names are most always lowercase binary names. Double click an entry to edit it.
+    After editing, the icon next to the application name will be updated. If it stays green, it's
+    likely to work. If it turns red / into a stop symbol, then the entered name is likely incorrect.</p>
+<p class="p"><span class="media"><span class="media media-image"><img src="img/configapps.png" class="media media-inline" alt=""></span></span></p>
+<p class="p">After the application name, you can optionally use a placeholder like "<span class="var">%pls</span>" (default),
+    "<span class="var">%m3u</span>" (old), or "<span class="var">%xspf</span>" (modern), and "<span class="var">%srv</span>" (for direct
+    streaming URLs). See <span class="link"><a href="config_apps.html#placeholders" title="URL placeholders">placeholders</a></span>.</p>
+<p class="p">Catch-all entries like <span class="var">*/*</span> or a generic <span class="var">audio/*</span> entry allow to
+    configure a default player.  While <span class="var">video/youtube</span> is specific to the Youtube
+    channel.  And <span class="var">url/http</span> a pseudo MIME type to configure a web browser (for
+    station homepages).</p>
+<p class="p">In practice you only need one entry for <span class="var">audio/*</span> and one for
+    <span class="var">video/*</span>, both can use the same player even.  You can remove default entries by
+    clearing both the Format field and its associated Application.  Add completely new
+    associations through the emtpy line.  (Reopen the dialog to add another one.)</p>
+<div class="links topiclinks"><div class="inner"><div class="region"><div class="linkdiv "><a class="linkdiv" href="config_apps.html" title="Audio players"><span class="title">Audio players</span><span class="linkdiv-dash"> — </span><span class="desc">Common applications to use as players.</span></a></div></div></div></div>
+</div></div>
+</div></div>
+<div id="recording" class="sect"><div class="inner">
+<div class="hgroup"><h2 class="title"><span class="title">Recording Apps</span></h2></div>
+<div class="region"><div class="contents">
+<p class="p">The second block of entries in the 'Apps' section specifies recording applications.
+    Here streamripper is preconfigured for audio streams, and youtube-dl for Youtube videos for instance.</p>
+<div class="table"><div class="inner"><div class="region"><table class="table">
+<tr>
+<td><p class="p"><span class="var">audio/*</span></p></td>
+<td style="border-left-style: solid;"><p class="p"><span class="cmd">xterm -e streamripper %srv</span></p></td>
+</tr>
+<tr class="shade">
+<td style="border-top-style: solid;"><p class="p"><span class="var">video/youtube</span></p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p"><span class="cmd">xterm -e "youtube-dl %srv"</span></p></td>
+</tr>
+</table></div></div></div>
+<p class="p">To define a target directory, you can often add commandline arguments to each. Also it's typically
+    helpful to leave the xterm prefix on, so you can follow the processing state.</p>
+<div class="links topiclinks"><div class="inner"><div class="region"><div class="linkdiv "><a class="linkdiv" href="recording.html" title="Recording"><span class="title">Recording</span><span class="linkdiv-dash"> — </span><span class="desc">Save radio songs as MP3 files via streamripper.</span></a></div></div></div></div>
 </div></div>
 </div></div>
 <div id="gui" class="sect"><div class="inner">
 <div class="hgroup"><h2 class="title"><span class="title">Display/GUI options</span></h2></div>
 <div class="region"><div class="contents">
-<p class="p">Most options here a self-explanatory. The options for the favicons define if station entries should
-		show little icons. Not all stations have one, so you might as well turn this off to conserve a little
-		memory.</p>
-<p class="p">The number of stations setting is not honored by all channel plugins. Often it's not possible to
-		load more or fewer station entries. Some plugins have own settings (in the 'Plugins' section) even.
-		For the major plugins this however limits how much scroll text appears in the stream lists.</p>
-<p class="p">"Retain deleted stations" keeps old entries, when you reload a category/genre. Shoutcast often
-		forgets stations or throws them out. If you keep this option enabled, these entries are kept in
-		streamtuner2. Browse down in the stations list to still see them.</p>
-<p class="p">It's possible to select a Gtk+ theme. But not all themes work with all Gtk display engines, and
-		not all themes work with streamtuner2. You just have to try it.</p>
-<p class="p">Remembering window states makes streamtuner2 not forget which channel and category was last
-		selected. You can however disable this option, and instead manually save the window states/layout
-		in the edit menu, if you want.</p>
+<div class="terms"><div class="inner">
+<div class="title title-terms"><h3><span class="title">Display settings</span></h3></div>
+<div class="region"><dl class="terms">
+<dt class="terms">Show bookmark star</dt>
+<dd class="terms"><p class="p">Bookmarked stations will be marked with a ★ star in all other station lists / categories.
+      That doesn't often work for the same station entry from two different channel services / tabs though.</p></dd>
+<dt class="terms">Save window states</dt>
+<dd class="terms"><p class="p">Automatically remember window size, selected channel tab, categories, or selected station.
+      Also keeps the width of station list columns. If disabled, you can manually save the current
+      layout/selections via <span class="guiseq"><span class="gui">Edit</span> ▸ <span class="gui">Save States</span></span>.</p></dd>
+<dt class="terms">Update window title</dt>
+<dd class="terms"><p class="p">When switching channel tabs, the Streamtuner2 window title usually gets the current
+      channel name appended (such as "- Shoutcast" or "- Xiph"). You can disable this if it
+      looks confusing. (Requires a restart to fully take effect.)</p></dd>
+<dt class="terms"><span class="link"><a href="favicon.html" title="Station favicons">→ Favicon plugin options</a></span></dt>
+<dd class="terms"></dd>
+</dl></div>
 </div></div>
+<div class="terms"><div class="inner">
+<div class="title title-terms"><h3><span class="title">Station loading</span></h3></div>
+<div class="region"><dl class="terms">
+<dt class="terms">Prefer HTML traversing (PyQuery) over regex</dt>
+<dd class="terms"><p class="p">Some channels provide proper APIs to fetch station lists. Others are just websites that
+      require scraping listings out. Most channel tabs provide two alternative methods for that.
+      The DOM/HTML selection method is sometimes slower, but more reliable. As fallback streamtuner2
+      plugins often use a regex to match text. Occassionally the regex method is surprisingly more exact,
+      because directory services often use frightful unstructured HTML. If available, both methods
+      are tried. You can influence the order with this setting, and thus speed it up.</p></dd>
+<dt class="terms">[<span class="input">500</span>] Limit stream number</dt>
+<dd class="terms"><p class="p"> Constraints the length of station lists per category.
+      The number of stations option is not honored by all channel plugins. Often it's not possible to
+      load more or fewer station entries. Some plugins have own settings (in the 'Plugins' section) even.
+      For the major plugins this however limits how many scrollable entries appear in the stream lists.</p></dd>
+<dt class="terms">Retain deleted stations</dt>
+<dd class="terms"><p class="p">When enabled, keeps old station entries when
+      updating/reloading a category/genre.  Services often forget stations or throws them out when inavailable.
+      With this option enabled, these entries are kept in streamtuner2 as strikethrough entries (often
+      at the end of the list).</p></dd>
+<dt class="terms">Update favouries from freshened URLs</dt>
+<dd class="terms"><p class="p">Streaming URLs in bookmarked stations get renewed on category reloads/updates. This isn't
+      very reliable, as often station titles change together with the streaming URLs.</p></dd>
+<dt class="terms">Save station lists after updates</dt>
+<dd class="terms"><p class="p">After reloading (<span class="key"><kbd>F5</kbd></span>) the updated station lists are
+      autoamtically saved. For favicon updates or drag and drop events this
+      only happens automatically when this option is set.</p></dd>
+</dl></div>
+</div></div>
+<div class="terms"><div class="inner">
+<div class="title title-terms"><h3><span class="title">Playlist</span></h3></div>
+<div class="region"><dl class="terms">
+<dt class="terms">Reuse .m3u/.pls files</dt>
+<dd class="terms"><p class="p">When converting online station playlists,
+      streamtuner2 creates temporary files like <span class="var">shoutcast.11539398391891.m3u</span> for
+      your audio player.  It'll keep those files around in /tmp/streamtuner2 until you quit. 
+      That speeds up switching between and reconnecting to a previous station.  It's in
+      particular necessary when you use <span class="key"><kbd>⏭</kbd></span> or <span class="key"><kbd>⏪</kbd></span> directly in your player. 
+      For <span class="var">%pls</span> references your player typically usues the online-only playlist
+      files anyway.  If you disable this option, then converted pls/m3u/xspf files get
+      recreated repeatedly.</p></dd>
+<dt class="terms">Forgo any playlist conversion</dt>
+<dd class="terms">
+<p class="p">Per default most server playlists (be they .pls or .m3u, .xpsf) are converted.
+      All player/recording apps receive a default <span class="var">%pls</span> file normally.
+      Set this option to disable any such placeholders from the Player tab, and avoid
+      streamtuner2 pre-downloading any m3u/pls/xspf. Instead your audio  player gets passed
+      the literal server/playlist streaming URL then.</p>
+<div class="note" title="Note"><div class="inner"><div class="region"><div class="contents"><p class="p">Note that this is only
+      a minor speedup, but may trip up some applications. A few channel sources don't
+      even provide standard stream addresses and playlists. (Jamendo albums for example really
+      need pre-conversion; no audio player can deal with such custom JSON playlists).
+      In short: you don't normally want to enable this flag - unless you run into problems
+      with streamtuner2 taking too long, or when it hang by accidentially downloading streams
+      itself.</p></div></div></div></div>
+</dd>
+</dl></div>
+</div></div>
+<div class="terms"><div class="inner">
+<div class="title title-terms"><h3><span class="title">System</span></h3></div>
+<div class="region"><dl class="terms">
+<dt class="terms">Temporary files</dt>
+<dd class="terms"><p class="p">Streamtuner2 creates temporary .m3u files - for audio
+      players that are configured to use %m3u files instead of %pls or %srv URLs.  For
+      archival purposes you might want to set a dedicated directory for this.  In recent
+      versions streamtuner2 will create a <span class="file">/tmp/streamtuner2</span> directory for itself. 
+      (You cannot set just `/tmp` anymore, because that will be mapped to the longer name. 
+      You can trick the old behaviour with `/tmp/.` however.  Don't do that unless you have a
+      reason).</p></dd>
+<dt class="terms">Config directory</dt>
+<dd class="terms"><p class="p">Is where streamtuner2 keeps its <span class="file">settings.json</span> and channel caches, favicons, etc.
+      You can't set this in the config dialog. This is just for display. Set the <span class="sys">XDG_CONFIG_HOME</span>
+      environment variable to adapt.</p></dd>
+<dt class="terms">Enable debug messages</dt>
+<dd class="terms"><p class="p">If you start streamtuner2 from a terminal window (xterm/rxvt), you can get a load of state
+      and processing or debug infos. Enable this only for testing, as it might slow down station
+      rendering.</p></dd>
+<dt class="terms">Disable threading</dt>
+<dd class="terms"><p class="p">Now "threading" is a somewhat technical term.  It
+      means that an application runs different tasks internally at the same time.  It's used
+      for snappier interfaces.  However, it's also difficult to get right at times.  In
+      Streamtuner2 some concurrent tasks conflict with updating the Gtk3 user interface. 
+      Which is why the application may crash even on reloading station lists or when switching
+      between categories too quickly.  This is only an issue for Python3 on Gtk3 with
+      streamtuner2.  In such cases you can disable the concurrent-tasking mode.  The GUI will
+      appear slower at times, and freeze between fetching lists, but remains stable on the
+      upside.  There's also a command line flag <span class="cmd">--nt</span> to enable this workaround.</p></dd>
+</dl></div>
 </div></div>
-<div id="system" class="sect"><div class="inner">
-<div class="hgroup"><h2 class="title"><span class="title">System info</span></h2></div>
-<div class="region"><div class="contents">
-<p class="p">There are just a few options here, and some are hard-wired. Usually you don't want to change them.</p>
-<p class="p">Setting another temporary directory might be useful, if you want to keep the temporary .m3u cache
-		files. They are created whenever you hit play. For archival or speed-up porposes you might want to keep
-		them elsewhere. They don't take a lot of space.</p>
 </div></div>
 </div></div>
 <div id="plugins" class="sect"><div class="inner">
-<div class="hgroup"><h2 class="title"><span class="title">Plugin and Channel settings</span></h2></div>
-<div class="region"><div class="contents">
-<p class="p">Each channel plugin can bring its own list of configuration settings. These are collected here.</p>
-<p class="p">The heading for each plugin is actually a button, which allows disabling the plugin. Alas the state
-		cannot be easily discerned with all themes.</p>
-<p class="p">If you want to find out more about the short option descriptions (most settings are checkboxes),
-		please have a look into the channels directory /usr/share/streamtuner2/channels/ and corresponding
-		*.py files. These are readable, and sometimes contain more information.</p>
+<div class="hgroup"><h2 class="title"><span class="title">Channel and feature plugins and settings</span></h2></div>
+<div class="region">
+<div class="contents">
+<p class="p">The tabs <span class="key"><kbd>📻 Channels</kbd></span> lists all available directory services.
+    While the <span class="key"><kbd>🔌 Features</kbd></span> group provides internal or menu enhancements.
+    Disabling or enabling a plugin however requires a restart of Streamtuner2
+    to take effect. (Unless the <span class="link"><a href="pluginmanager2.html" title="Plugin Manager 2">Plugin Manager 2</a></span>
+    is enabled, with its <span class="key"><kbd>📦 Add</kbd></span> tab visible.)</p>
+<p class="p"><span class="media"><span class="media media-image"><img src="img/configplugins.png" class="media media-inline" alt=""></span></span></p>
+<p class="p">Each plugin can have its own little list of extra options. They'll be
+    applied right away for already active channel/feature plugins.</p>
 <div class="links topiclinks"><div class="inner"><div class="region">
-<div class="linkdiv "><a class="linkdiv" href="internet_radio_org_uk.html" title="Internet-Radio.org.uk"><span class="title">Internet-Radio.org.uk</span><span class="linkdiv-dash"> — </span><span class="desc">Large radio directory from the UK.</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="internet_radio_org_uk.html" title="Internet-Radio"><span class="title">Internet-Radio</span><span class="linkdiv-dash"> — </span><span class="desc">Large radio directory from the UK.</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="jamendo.html" title="Jamendo"><span class="title">Jamendo</span><span class="linkdiv-dash"> — </span><span class="desc">Creative Commons music and artist hub.</span></a></div>
 <div class="linkdiv "><a class="linkdiv" href="myoggradio.html" title="MyOggRadio"><span class="title">MyOggRadio</span><span class="linkdiv-dash"> — </span><span class="desc">Open source stream directory.</span></a></div>
-<div class="linkdiv "><a class="linkdiv" href="shoutcast.html" title="Shoutcast"><span class="title">Shoutcast</span><span class="linkdiv-dash"> — </span><span class="desc">One of the bigger radio station lists.</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="radionomy.html" title="Radionomy"><span class="title">Radionomy</span><span class="linkdiv-dash"> — </span><span class="desc">Large internet streaming provider</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="surfmusik.html" title="SurfMusic"><span class="title">SurfMusic</span><span class="linkdiv-dash"> — </span><span class="desc">International radio listings.</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="tunein.html" title="TuneIn"><span class="title">TuneIn</span><span class="linkdiv-dash"> — </span><span class="desc">Radio and Podcast directory.</span></a></div>
 <div class="linkdiv "><a class="linkdiv" href="xiph.html" title="Xiph.org"><span class="title">Xiph.org</span><span class="linkdiv-dash"> — </span><span class="desc">ICEcast radio directory.</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="youtube.html" title="Youtube"><span class="title">Youtube</span><span class="linkdiv-dash"> — </span><span class="desc">Youtube music/video listings.</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="filtermusic.html" title="filtermusic"><span class="title">filtermusic</span><span class="linkdiv-dash"> — </span><span class="desc">Selection of the best radio stations</span></a></div>
 </div></div></div>
+</div>
+<div class="sect sect-links" role="navigation">
+<div class="hgroup"></div>
+<div class="contents"><div class="links guidelinks"><div class="inner">
+<div class="title"><h3><span class="title">More Information</span></h3></div>
+<div class="region"><ul><li class="links ">
+<a href="pluginmanager2.html" title="Plugin Manager 2">Plugin Manager 2</a><span class="desc"> — User plugin installation</span>
+</li></ul></div>
+</div></div></div>
+</div>
+</div>
 </div></div>
+<div id="note" class="sect"><div class="inner">
+<div class="hgroup"></div>
+<div class="region"><div class="contents"><div class="note" title="Note"><div class="inner"><div class="region"><div class="contents"><p class="p">If you want to find out more about the short option descriptions (most settings are checkboxes),
+    please have a look into the channels directory /usr/share/streamtuner2/channels/ and corresponding
+    *.py files. These are somewhat readable even to non-programmers, and sometimes contain more information.</p></div></div></div></div></div></div>
 </div></div>
 <div class="sect sect-links" role="navigation">
 <div class="hgroup"></div>
diff --git a/help/html/jamendo.html b/help/html/dirble.html
similarity index 69%
copy from help/html/jamendo.html
copy to help/html/dirble.html
index 2f4f884..bd2f191 100644
--- a/help/html/jamendo.html
+++ b/help/html/dirble.html
@@ -2,7 +2,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
-<title>Jamendo</title>
+<title>Dirble</title>
 <link rel="stylesheet" type="text/css" href="C.css">
 <script type="text/javascript" src="jquery.js"></script><script type="text/javascript" src="jquery.syntax.js"></script><script type="text/javascript" src="yelp.js"></script>
 </head>
@@ -14,15 +14,20 @@
 <a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#channels" title="Channel tabs">Channel tabs</a> » </div>
 </div></div>
 <div class="body">
-<div class="hgroup"><h1 class="title"><span class="title">Jamendo</span></h1></div>
+<div class="hgroup">
+<h1 class="title"><span class="title">Dirble</span></h1>
+<h2 class="subtitle"><span class="subtitle"><span class="link"><a href="http://dirble.com/" title="http://dirble.com/">//dirble.com/</a></span></span></h2>
+</div>
 <div class="region">
 <div class="contents">
-<p class="p">Jamendo is a Creative Comments licensing oriented music distributor. It hosts audio
-	files for individual musicians and artists. Tracks and albums can thus be downloaded
-	free of charge. Yeah, imagine that.</p>
-<p class="p">The streamtuner2 plugin for Jamendo is pretty limited at the moment. It just provides
-	a quick overview over top artists and most listened albums from each genre. To browse
-	the whole collections, better go to the Jamendo homepage or use Rhythmbox.</p>
+<p class="p">Dirble.com is another radio station directory, made up of
+	user-contributed content, and automatic streaming server polling.</p>
+<p class="p">It provides a JSON API, which as of v2 has a lot of unneeded meta
+	information and internal ids. But it's actually nicer to scan, and
+	contains even station homepages now.</p>
+<div class="note" title="Note"><div class="inner"><div class="region"><div class="contents"><p class="p">The config option for a custom API key is perhaps
+        redundant. Should streamtuner2 -D however reveal an error, you
+        can however configure your own account there.</p></div></div></div></div>
 </div>
 <div class="sect sect-links" role="navigation">
 <div class="hgroup"></div>
diff --git a/help/html/dragndrop.html b/help/html/dragndrop.html
new file mode 100644
index 0000000..78caa18
--- /dev/null
+++ b/help/html/dragndrop.html
@@ -0,0 +1,77 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
+<title>Drag'n'drop</title>
+<link rel="stylesheet" type="text/css" href="C.css">
+<script type="text/javascript" src="jquery.js"></script><script type="text/javascript" src="jquery.syntax.js"></script><script type="text/javascript" src="yelp.js"></script>
+</head>
+<body><div class="page" role="main">
+<div class="header"><div class="trails" role="navigation">
+<div class="trail">
+<a class="trail" href="glossary.html" title="Glossary">Glossary</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » </div>
+<div class="trail">
+<a class="trail" href="technical.html" title="Technical information">Technical information</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » </div>
+</div></div>
+<div class="body">
+<div class="hgroup"><h1 class="title"><span class="title">Drag'n'drop</span></h1></div>
+<div class="region">
+<div class="contents">
+<p class="p">With the DND feature plugin enabled, there's an even simpler
+	method now to export stations.  Simply click and hold the mouse on a
+	stream entry, then drag it out to the desktop, file manager or
+	directly into VLC or any running music player.  That'll usually
+	copy a stream/station address directly.</p>
+<p class="p">Now it's not guaranteed to work with all applications or file
+	managers, as X11/Gtk DND support is somewhat arcane and wonky.
+	You may specifically have to adapt the default export format for
+	this. Generally a XSPF or PLS file gets created for file managers.
+	While VLC is one of the few applications that understands direct
+	playlist URLs or literal M3U/PLS payloads even.</p>
+</div>
+<div id="import" class="sect"><div class="inner">
+<div class="hgroup"><h2 class="title"><span class="title">Importing</span></h2></div>
+<div class="region"><div class="contents">
+<p class="p">Playlist importing also works mostly. Here the action module
+	takes care to unpack PLS, XPSF or M3U files and a few other
+	formats. If you drag in streams/playlists from other applications,
+	it'll usually be expanded.</p>
+<div class="note note-warning" title="Warning"><div class="inner"><div class="region"><div class="contents"><p class="p">Take note that Streamtuner2 is not intended as playlist manager
+	though. It will only accept radio streaming lists and discard
+	local MP3/Ogg files.</p></div></div></div></div>
+<p class="p">The import capabilities also allow to move a station entry
+	from one of the channel tabs into your bookmarks list. Simply drag
+	an entry over the "bookmarks" notebook tab then further along into
+	the favourite list. - While this also works the other way round,
+	it doesn't make sense to add bookmarks to Shoutcast/Xiph/etc.
+	Because when their lists get refreshed (<span class="key"><kbd>F5</kbd></span>) all custom
+	entries are usually dropped.</p>
+</div></div>
+</div></div>
+<div id="configuration" class="sect"><div class="inner">
+<div class="hgroup"><h2 class="title"><span class="title">Export format configuration</span></h2></div>
+<div class="region"><div class="contents">
+<p class="p">Use <span class="key"><kbd>F12</kbd></span> and change the DND export format. Again
+	PLS is most universal, XSPF most complete, but other formats
+	still available. Use the "desktop" format only if you want to
+	bookmark direct playback links on your desktop.</p>
+<div class="note" title="Note"><div class="inner"><div class="region"><div class="contents"><p class="p">This is a workaround, because XDND is commonly just implemented
+	as dumb file transfer scheme. Hardly any application specifies the
+	actually desired formats, thus there's no auto-negotiation. ST2
+	therefore has to create temporary export files and hope for the
+	best.</p></div></div></div></div>
+</div></div>
+</div></div>
+<div class="sect sect-links" role="navigation">
+<div class="hgroup"></div>
+<div class="contents"><div class="links guidelinks"><div class="inner">
+<div class="title"><h2><span class="title">More Information</span></h2></div>
+<div class="region"><ul><li class="links "><a href="index.html#extra" title="Additional features">Additional features</a></li></ul></div>
+</div></div></div>
+</div>
+</div>
+<div class="clear"></div>
+</div>
+<div class="footer"></div>
+</div></body>
+</html>
diff --git a/help/html/playing.html b/help/html/edit.html
similarity index 59%
copy from help/html/playing.html
copy to help/html/edit.html
index 7041746..32fab9b 100644
--- a/help/html/playing.html
+++ b/help/html/edit.html
@@ -2,33 +2,35 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
-<title>Playing</title>
+<title>Edit</title>
 <link rel="stylesheet" type="text/css" href="C.css">
 <script type="text/javascript" src="jquery.js"></script><script type="text/javascript" src="jquery.syntax.js"></script><script type="text/javascript" src="yelp.js"></script>
 </head>
 <body><div class="page" role="main">
 <div class="header"><div class="trails" role="navigation">
 <div class="trail">
-<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#browsing" title="Browsing channels and radio stations">Browsing channels and radio stations</a> » </div>
-<div class="trail">
 <a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#browsing" title="Browsing channels and radio stations">Browsing channels and radio stations</a> » <a class="trail" href="streams.html" title="Streams / Stations">Streams / Stations</a> › <a class="trail" href="streams.html#actions" title="Actions">Actions</a> » </div>
+<div class="trail">
+<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#browsing" title="Browsing channels and radio stations">Browsing channels and radio stations</a> » <a class="trail" href="streams.html" title="Streams / Stations">Streams / Stations</a> » <a class="trail" href="index.html#functions" title="Functions">Functions</a> » </div>
 </div></div>
 <div class="body">
-<div class="hgroup"><h1 class="title"><span class="title">Playing</span></h1></div>
+<div class="hgroup"><h1 class="title"><span class="title">Edit</span></h1></div>
 <div class="region">
 <div class="contents">
-<p class="p">Simply double click a station to start it with your audio player.</p>
-<p class="p">In streamtuner2 you can configure different audio players for different audio
-        formats. In the 'Apps' section of the settings dialog, there is one application associated
-        with each audio file (MIME) type. Per default this is audacious, but you can certainly use
-        any other application.</p>
-<div class="note" title="Note"><div class="inner"><div class="region"><div class="contents"><p class="p">Note however, that some audio players will start twice and won't
-        allow easy station switching. In these circumstance it might be sensible to write
-        a wrapper script, or configure special commandline arguments to your favoured audio
-        player.</p></div></div></div></div>
-<p class="p">It's also possible to save a station entry as .m3u or .pls file, and load this manually
-        in your player. You might even want to collect such .m3u files for archival / backup
-        purposes.</p>
+<p class="p">You probably won't need this often. But there's an
+	<span class="guiseq"><span class="gui"></span> ▸ <span class="gui">Edit/Details</span></span> context menu
+	which brings up a station editor:
+	</p>
+<div class="media media-image"><div class="inner"><img src="img/streamedit.png" class="media media-block" alt=""></div></div>
+<p class="p">You can see the standard title and genre fields here. But also a
+	few internally kept infos. For example the "url" field contains the
+	actual pls/m3u/server address. While the "format" can list a
+	non-standard audio compression type.</p>
+<div class="note" title="Note"><div class="inner"><div class="region"><div class="contents"><p class="p">This dialog is primarily useful for your personal bookmarks.
+	It allows to shorten or rename things. You can even use
+	<span class="gui">new</span> to add new entries this way.
+	(Which doesn't make sense in regular channel categories, because
+	changes will be lost once you hit Reload.)</p></div></div></div></div>
 </div>
 <div class="sect sect-links" role="navigation">
 <div class="hgroup"></div>
@@ -36,7 +38,7 @@
 <div class="title"><h2><span class="title">More Information</span></h2></div>
 <div class="region"><ul>
 <li class="links "><a href="streams.html#actions" title="Actions">Actions</a></li>
-<li class="links "><a href="index.html#browsing" title="Browsing channels and radio stations">Browsing channels and radio stations</a></li>
+<li class="links "><a href="index.html#functions" title="Functions">Functions</a></li>
 </ul></div>
 </div></div></div>
 </div>
diff --git a/help/html/exportcat.html b/help/html/exportcat.html
new file mode 100644
index 0000000..06f3f37
--- /dev/null
+++ b/help/html/exportcat.html
@@ -0,0 +1,48 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
+<title>Export all stations</title>
+<link rel="stylesheet" type="text/css" href="C.css">
+<script type="text/javascript" src="jquery.js"></script><script type="text/javascript" src="jquery.syntax.js"></script><script type="text/javascript" src="yelp.js"></script>
+</head>
+<body><div class="page" role="main">
+<div class="header"><div class="trails" role="navigation">
+<div class="trail">
+<a class="trail" href="glossary.html" title="Glossary">Glossary</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » </div>
+<div class="trail">
+<a class="trail" href="technical.html" title="Technical information">Technical information</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » </div>
+</div></div>
+<div class="body">
+<div class="hgroup"><h1 class="title"><span class="title">Export all stations</span></h1></div>
+<div class="region">
+<div class="contents">
+<p class="p">There's an "Export All" plugin available. It adds an entry under
+	<span class="guiseq"><span class="gui">Main menu</span> ▸ <span class="gui">Extensions</span> ▸ <span class="gui">Export all stations</span></span>.
+	Which allows to export all stations from the currently visible channel category.</p>
+<p class="p">This is of course intended primarily for saving your bookmarks.
+	And it allows to import radio lists into any other music player
+	or playlist collection/management app (such as Rhythmbox).</p>
+</div>
+<div id="configuration" class="sect"><div class="inner">
+<div class="hgroup"><h2 class="title"><span class="title">Configuration option</span></h2></div>
+<div class="region"><div class="contents">
+<p class="p">You can set the default export format in the settings dialog
+	<span class="key"><kbd>F12</kbd></span>.</p>
+<p class="p">It supports all common export formats now, with .PLS being the
+	default.</p>
+</div></div>
+</div></div>
+<div class="sect sect-links" role="navigation">
+<div class="hgroup"></div>
+<div class="contents"><div class="links guidelinks"><div class="inner">
+<div class="title"><h2><span class="title">More Information</span></h2></div>
+<div class="region"><ul><li class="links "><a href="index.html#extra" title="Additional features">Additional features</a></li></ul></div>
+</div></div></div>
+</div>
+</div>
+<div class="clear"></div>
+</div>
+<div class="footer"></div>
+</div></body>
+</html>
diff --git a/help/html/extending.html b/help/html/extending.html
index 93ad6b6..f7c7fc2 100644
--- a/help/html/extending.html
+++ b/help/html/extending.html
@@ -16,8 +16,7 @@
 <p class="p">Streamtuner2 is written in Python, a rather easy programming language. And it's also rather simple
 	to write a new channel plugin.</p>
 <p class="p">The basic layout of every channel plugin is as follows:</p>
-<p class="p"><span class="code">
-
+<div class="code"><pre class="contents ">
 from channels import *
 
 class myplugin (ChannelPlugin):
@@ -45,7 +44,7 @@ class myplugin (ChannelPlugin):
 
         return entries
         
-	</span></p>
+	</pre></div>
 <p class="p">There are some self-explanatory description fields, and two important methods. Sometimes you
         don't need categories even. The update_streams() function often downloads a website, parses it
 	with regular expressions or PyQuery / DOM methods, and packs into into a result list.</p>
diff --git a/help/html/favicon.html b/help/html/favicon.html
new file mode 100644
index 0000000..2ed26ae
--- /dev/null
+++ b/help/html/favicon.html
@@ -0,0 +1,78 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
+<title>Station favicons</title>
+<link rel="stylesheet" type="text/css" href="C.css">
+<script type="text/javascript" src="jquery.js"></script><script type="text/javascript" src="jquery.syntax.js"></script><script type="text/javascript" src="yelp.js"></script>
+</head>
+<body><div class="page" role="main">
+<div class="header"><div class="trails" role="navigation">
+<div class="trail">
+<a class="trail" href="glossary.html" title="Glossary">Glossary</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » </div>
+<div class="trail">
+<a class="trail" href="technical.html" title="Technical information">Technical information</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » </div>
+</div></div>
+<div class="body">
+<div class="hgroup"><h1 class="title"><span class="title">Station favicons</span></h1></div>
+<div class="region">
+<div class="contents">
+<p class="p">Per default you'll get a small logo / icon for any station
+with a homepage link. They're automatically fetched and displayed
+as soon as you play a radio entry.</p>
+<p class="p">This functionality meanwhile resides in a plugin. It's available in the
+<span class="key"><kbd>🔌 Features</kbd></span> <span class="link"><a href="configuration.html" title="Settings dialog">configuration</a></span> tab. 
+You can disable it as whole if unneeded.  Most configuration options are now
+collected there.</p>
+<p class="p">Some channels (Jamendo or Radionomy) provide small album previews
+or banners (Punkcast) even. Whereas normal favicons are just 16x16
+pixel images.</p>
+<p class="p">Downloaded image files are meanwhile all sanitized (internally
+converted to ensure they're really image files).
+Albeit that's not strictly necessary for modern Gtk versions. (But
+better safe than sorry).
+Images are kept in the <span class="file">~/.config/streamtuner2/icons</span> directory.
+</p>
+</div>
+<div id="configuration" class="sect"><div class="inner">
+<div class="hgroup"><h2 class="title"><span class="title">Configuration options</span></h2></div>
+<div class="region"><div class="contents"><div class="terms"><div class="inner"><div class="region"><dl class="terms">
+<dt class="terms">Load favicons on playing</dt>
+<dd class="terms"><p class="p">When starting to play a station, its homepage favicon is automatically downloaded
+    in the background. It's even displayed right away as soon as it's there. You can
+    also have a whole category/genre list updated right away per menu command
+    <span class="guiseq"><span class="gui">Channel</span> ▸ <span class="gui">Update favicons...</span></span>.</p></dd>
+<dt class="terms">Homepage googling</dt>
+<dd class="terms"><p class="p">When playing a station that doesn't have a homepage entry, streamtuner2 tries
+    to google the station title. The found URL is then used/kept as station homepage.
+    This isn't super exact however, so you might end up with homepages and icons
+    from Wikipedia, Twitter, Facebook or something for generic radio station names.
+    (Btw, station titles like www.mymusicstation.com are automatically mapped to
+    homepage URLs already.)</p></dd>
+<dt class="terms">Use Google favicon service</dt>
+<dd class="terms"><p class="p">Downloading favicons directly from station homepages can sometimes be
+    a little slow. Which is because it requires to inspect the homepage
+    itself first, and then uncovering an image resource. The Google method
+    instead uses <span class="cmd">http://www.google.com/s2/favicons?domain=www.example.com</span>
+    to fetch a PNG icon right away. Which is often faster. You might want to
+    disable this for privacy reasons though.</p></dd>
+<dt class="terms">Omit placeholders</dt>
+<dd class="terms"><p class="p">Oftentimes the Google favicon service sends back a placeholder icon
+    (a blue mini globe), which doesn't look very interesting. So you might
+    want to disable those. (They're still downloaded, but just not saved in
+    the cache directory.)</p></dd>
+</dl></div></div></div></div></div>
+</div></div>
+<div class="sect sect-links" role="navigation">
+<div class="hgroup"></div>
+<div class="contents"><div class="links guidelinks"><div class="inner">
+<div class="title"><h2><span class="title">More Information</span></h2></div>
+<div class="region"><ul><li class="links "><a href="index.html#extra" title="Additional features">Additional features</a></li></ul></div>
+</div></div></div>
+</div>
+</div>
+<div class="clear"></div>
+</div>
+<div class="footer"></div>
+</div></body>
+</html>
diff --git a/help/html/filtermusic.html b/help/html/filtermusic.html
new file mode 100644
index 0000000..5230405
--- /dev/null
+++ b/help/html/filtermusic.html
@@ -0,0 +1,60 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
+<title>filtermusic</title>
+<link rel="stylesheet" type="text/css" href="C.css">
+<script type="text/javascript" src="jquery.js"></script><script type="text/javascript" src="jquery.syntax.js"></script><script type="text/javascript" src="yelp.js"></script>
+</head>
+<body><div class="page" role="main">
+<div class="header"><div class="trails" role="navigation">
+<div class="trail">
+<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#browsing" title="Browsing channels and radio stations">Browsing channels and radio stations</a> » <a class="trail" href="channels.html" title="Channels">Channels</a> › <a class="trail" href="channels.html#list" title="Available channels">Available channels</a> » </div>
+<div class="trail">
+<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#channels" title="Channel tabs">Channel tabs</a> » </div>
+<div class="trail">
+<a class="trail" href="glossary.html" title="Glossary">Glossary</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » <a class="trail" href="pluginmanager2.html" title="Plugin Manager 2">Plugin Manager 2</a> » <a class="trail" href="configuration.html#plugins" title="Channel and feature plugins and settings">Channel and feature plugins and settings</a> » </div>
+<div class="trail">
+<a class="trail" href="technical.html" title="Technical information">Technical information</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » <a class="trail" href="pluginmanager2.html" title="Plugin Manager 2">Plugin Manager 2</a> » <a class="trail" href="configuration.html#plugins" title="Channel and feature plugins and settings">Channel and feature plugins and settings</a> » </div>
+</div></div>
+<div class="body">
+<div class="hgroup">
+<h1 class="title"><span class="title">filtermusic</span></h1>
+<h2 class="subtitle"><span class="subtitle"><span class="link"><a href="http://filtermusic.net/" title="http://filtermusic.net/">//filtermusic.net/</a></span></span></h2>
+</div>
+<div class="region">
+<div class="contents">
+<p class="p">Filtermusic summarizes all the common genres, but is primarily
+	focused on electro/dance/pop stations.  It elects on listener
+	popularity and freshness or something.</p>
+<p class="p">Which is why there are just a dozen categories with around 20-30
+	stations each. Still useful if you don't like to browse around
+	a lot.</p>
+</div>
+<div id="options" class="sect"><div class="inner">
+<div class="hgroup"><h2 class="title"><span class="title">Configuration</span></h2></div>
+<div class="region"><div class="contents">
+<p class="p">Like the Xiph plugin this channel provides two/three fetch modes.</p>
+<div class="note" title="Note"><div class="inner"><div class="region"><div class="contents"><p class="p">
+	There's no speed or feature differences this time. You might prefer
+	the buffered mode, as it reduces update requests, but still allows
+	refreshing lists.</p></div></div></div></div>
+</div></div>
+</div></div>
+<div class="sect sect-links" role="navigation">
+<div class="hgroup"></div>
+<div class="contents"><div class="links guidelinks"><div class="inner">
+<div class="title"><h2><span class="title">More Information</span></h2></div>
+<div class="region"><ul>
+<li class="links "><a href="channels.html#list" title="Available channels">Available channels</a></li>
+<li class="links "><a href="configuration.html#plugins" title="Channel and feature plugins and settings">Channel and feature plugins and settings</a></li>
+<li class="links "><a href="index.html#channels" title="Channel tabs">Channel tabs</a></li>
+</ul></div>
+</div></div></div>
+</div>
+</div>
+<div class="clear"></div>
+</div>
+<div class="footer"></div>
+</div></body>
+</html>
diff --git a/help/html/global_key.html b/help/html/global_key.html
index 9abb65c..73ea53d 100644
--- a/help/html/global_key.html
+++ b/help/html/global_key.html
@@ -7,59 +7,64 @@
 <script type="text/javascript" src="jquery.js"></script><script type="text/javascript" src="jquery.syntax.js"></script><script type="text/javascript" src="yelp.js"></script>
 </head>
 <body><div class="page" role="main">
-<div class="header"><div class="trails" role="navigation"><div class="trail">
-<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#advanced" title="Advanced topics">Advanced topics</a> » </div></div></div>
+<div class="header"><div class="trails" role="navigation">
+<div class="trail">
+<a class="trail" href="glossary.html" title="Glossary">Glossary</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » </div>
+<div class="trail">
+<a class="trail" href="technical.html" title="Technical information">Technical information</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » </div>
+</div></div>
 <div class="body">
 <div class="hgroup"><h1 class="title"><span class="title">Global_key</span></h1></div>
 <div class="region">
 <div class="contents">
 <p class="p">Using the global_key extension you can define a keyboard shortcut for switching within
-	a list of favourite radio stations. Per default it uses your bookmarks list, but it can be
+	a list of favourited radio stations. Per default it uses your bookmarks list, but it can be
 	configured to alternate in any other channel.</p>
-<p class="p">This is useful if you don't want to keep the streamtuner2 window in the foreground
-	all the time, but still want to switch radios easily.</p>
+<p class="p">This is useful if you don't want to keep streamtuner2 atop your
+	desktop all the time, but still want to switch radios easily.</p>
 <p class="p">Go into settings <span class="key"><kbd>F12</kbd></span> for plugins to define a keyboard shortcut:</p>
 <div class="table"><div class="inner"><div class="region"><table class="table">
+<thead><tr>
+<td><p class="p">keyspec</p></td>
+<td style="border-left-style: solid;"><p class="p">corresponds to</p></td>
+</tr></thead>
 <tr>
-<td></td>
-<td style="border-left-style: solid;"></td>
+<td><p class="p"><span class="input">F9</span></p></td>
+<td style="border-left-style: solid;"><p class="p">Responds to only <span class="key"><kbd>F9</kbd></span>. (too generic)</p></td>
 </tr>
 <tr class="shade">
-<td style="border-top-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
+<td style="border-top-style: solid;"><p class="p"><span class="input"><Meta>R</span></p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p">often the 'Windows'-key and R</p></td>
 </tr>
 <tr>
-<td style="border-top-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
+<td style="border-top-style: solid;"><p class="p"><span class="input"><Ctrl>N</span></p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p">Control and <span class="key"><kbd>N</kbd></span></p></td>
 </tr>
 <tr class="shade">
-<td style="border-top-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
+<td style="border-top-style: solid;"><p class="p"><span class="input"><Shift>F1</span></p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p">Shift and F1</p></td>
 </tr>
 <tr>
-<td style="border-top-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
+<td style="border-top-style: solid;"><p class="p"><span class="input"><Alt>SPACE</span></p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p">Use Alt and <span class="key"><kbd>Space</kbd></span>. (too generic)</p></td>
 </tr>
 <tr class="shade">
-<td style="border-top-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
-</tr>
-<tr>
-<td style="border-top-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
+<td style="border-top-style: solid;"><p class="p"><span class="input">XF86Forward</span></p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p">Uses a "forward" function key. (default)</p></td>
 </tr>
 </table></div></div></div>
 <p class="p">To define another channel as source, enter its module name in the according field. Also
 	add a category separated by : colon here.</p>
-<div class="note" title="Note"><div class="inner"><div class="region"><div class="contents"><p class="p">If the configured keyboard shortcut conflicts with another application,
-	it won't work. And if you choose it too generic, you won't be able to type longer
-	documents. Also found out: key names are case sensitive.</p></div></div></div></div>
+<div class="note note-bug" title="Bug"><div class="inner"><div class="region"><div class="contents"><p class="p">If the configured keyboard shortcut conflicts
+	with another application, it won't work.  And if you choose it too
+	generic, you won't be able to type longer documents.  Also found
+	out: key names are case sensitive.</p></div></div></div></div>
 </div>
 <div class="sect sect-links" role="navigation">
 <div class="hgroup"></div>
 <div class="contents"><div class="links guidelinks"><div class="inner">
 <div class="title"><h2><span class="title">More Information</span></h2></div>
-<div class="region"><ul><li class="links "><a href="index.html#advanced" title="Advanced topics">Advanced topics</a></li></ul></div>
+<div class="region"><ul><li class="links "><a href="index.html#extra" title="Additional features">Additional features</a></li></ul></div>
 </div></div></div>
 </div>
 </div>
diff --git a/help/html/glossary.html b/help/html/glossary.html
index d189bae..f0ac6d5 100644
--- a/help/html/glossary.html
+++ b/help/html/glossary.html
@@ -7,12 +7,12 @@
 <script type="text/javascript" src="jquery.js"></script><script type="text/javascript" src="jquery.syntax.js"></script><script type="text/javascript" src="yelp.js"></script>
 </head>
 <body><div class="page" role="main">
-<div class="header"><div class="trails" role="navigation"><div class="trail">
-<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#advanced" title="Advanced topics">Advanced topics</a> » </div></div></div>
+<div class="header"></div>
 <div class="body">
 <div class="hgroup"><h1 class="title"><span class="title">Glossary</span></h1></div>
 <div class="region">
-<div class="contents"><div class="terms"><div class="inner"><div class="region"><dl class="terms">
+<div class="contents">
+<div class="terms"><div class="inner"><div class="region"><dl class="terms">
 <dt class="terms">Channel</dt>
 <dd class="terms"><p class="p">Each tab in the main window is a "channel". It represents one
    	    music directory service.</p></dd>
@@ -22,28 +22,27 @@
 	    data.  MP3 radio music for example is streamed, because it's not
 	    just a time-limited audio file, but unending (unless you stop
 	    the player or paying your ISP).</p>
-<p class="p">In streamtuner2 we also use the terms "stream" and radio "station" interchangably.</p>
+<p class="p">In streamtuner2 the terms "stream" and radio "station" are used interchangably.</p>
 </dd>
 <dt class="terms">Genre</dt>
 <dd class="terms"><p class="p">Music genres are represented as "categories" in the left
 	    pane.  Every channel groups its music stations into some
 	    structure.</p></dd>
 <dt class="terms">URL</dt>
-<dd class="terms"><p class="p">URL stands for "Uniform Resource Locator" and simply means
-	    hyperlinks and web addresses like http://www.example.org/. 
-	    There is also the hipster term "URI", which is technically more
-	    general (but superseeded by "IRI" and "IRL" anyway).  In
-	    streamtuner2 the audio streaming link often is an URL, as is the
-	    radio station homepage of course.</p></dd>
+<dd class="terms"><p class="p">URL stands for "Uniform Resource Locator"
+	    and simply refers to something retrievable hyperlinks or web addresses like
+	    http://www.example.org/.  Radio stations/streams are stored as URLs internally.
+            The more generic hipster term "URI" (long superseded by "IRI" anyway)
+            makes less sense in this context, because ISBN: or MailTo: references aren't
+            overly useful for such purposes.</p></dd>
 <dt class="terms">Radio</dt>
 <dd class="terms"><p class="p">Plays music. Sometimes interrupted by advertisements.
    	    </p></dd>
 <dt class="terms">Favicons</dt>
-<dd class="terms"><p class="p">Favicons are small symbols for websites. Every website has one.
-	    Or should have. As it makes it easier to associate content with
-	    homepage addresses. (ST2 downloads favicons either per menu command
-	    or automatically for the current station once you hit play.)
-   	    </p></dd>
+<dd class="terms"><p class="p">Favicons are small symbols for
+	    websites.  Most website should have one.  (ST2 downloads
+	    favicons either per menu command or automatically for the
+	    current station once you hit play.) </p></dd>
 <dt class="terms">Cache</dt>
 <dd class="terms"><p class="p">Radio lists are kept in "cache" files for efficiency reasons.
 	    To not redownload stream information on every category or channel
@@ -65,14 +64,17 @@
 <dd class="terms"><p class="p">For classification of web and email content, two-factor descriptions like
 	    "audio/ogg" are advised. These are called Multipurpose Internet Mail Extension
             types, and are used on the web in lieu of file extensions (which URL resources don't have).
-            Note that ST2 uses the MP3 type wrong; it's officially audio/mpeg, and not audio/mp3 as shown in the settings window.</p></dd>
+            Note that ST2 uses the MP3 type wrong; it's officially
+            audio/mpeg, and not audio/mp3 as shown in the settings window.</p></dd>
 <dt class="terms">Bitrate</dt>
 <dd class="terms"><p class="p">Audio streams are compressed with exactness loss. This can be heard
 	    at lower "bitrates". For MP3 files any music with less than 100 kbit/s
 	    starts to hiss, while OGG Vorbis still sounds okay at a datarate of
-	    for example 64 kbit/s. So while bitrate basically means file size per duration,
+	    e.g. 64 kbit per second. So while bitrate basically means file size per duration,
 	    it's commonly used as quality indicator.</p></dd>
-</dl></div></div></div></div>
+</dl></div></div></div>
+<div class="links topiclinks"><div class="inner"><div class="region"><div class="linkdiv "><a class="linkdiv" href="index.html#extra" title="Additional features"><span class="title">Additional features</span></a></div></div></div></div>
+</div>
 <div id="filetypes" class="sect"><div class="inner">
 <div class="hgroup"><h2 class="title"><span class="title">Filetypes</span></h2></div>
 <div class="region"><div class="contents">
@@ -85,13 +87,6 @@
 </div></div></div>
 </div></div>
 </div></div>
-<div class="sect sect-links" role="navigation">
-<div class="hgroup"></div>
-<div class="contents"><div class="links guidelinks"><div class="inner">
-<div class="title"><h2><span class="title">More Information</span></h2></div>
-<div class="region"><ul><li class="links "><a href="index.html#advanced" title="Advanced topics">Advanced topics</a></li></ul></div>
-</div></div></div>
-</div>
 </div>
 <div class="clear"></div>
 </div>
diff --git a/help/html/homepage.html b/help/html/homepage.html
index e248024..3eecbae 100644
--- a/help/html/homepage.html
+++ b/help/html/homepage.html
@@ -11,7 +11,7 @@
 <div class="trail">
 <a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#browsing" title="Browsing channels and radio stations">Browsing channels and radio stations</a> » <a class="trail" href="streams.html" title="Streams / Stations">Streams / Stations</a> › <a class="trail" href="streams.html#actions" title="Actions">Actions</a> » </div>
 <div class="trail">
-<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#functions" title="Functions">Functions</a> » </div>
+<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#browsing" title="Browsing channels and radio stations">Browsing channels and radio stations</a> » <a class="trail" href="streams.html" title="Streams / Stations">Streams / Stations</a> » <a class="trail" href="index.html#functions" title="Functions">Functions</a> » </div>
 </div></div>
 <div class="body">
 <div class="hgroup"><h1 class="title"><span class="title">Radio homepages</span></h1></div>
@@ -19,15 +19,15 @@
 <div class="contents">
 <p class="p">Most radio stations are listed with a homepage URL. Use the <span class="gui">house</span> symbol in the
 	toolbar or <span class="guiseq"><span class="gui">right click</span> ▸ <span class="gui">homepage</span></span> to open it in a web browser.</p>
-<p class="p">Some homepage links are guessed, because for example Shoutcast doesn't list them anymore.
-	And if you play a station without homepage URL, it automatically gets googled (but will not
-	be displayed until you reselect the category.)
+<p class="p">Some homepage links are guessed, because some channels (e.g. Shoutcast) don't provide them (anymore).
+	If you play a station without homepage URL, it automatically gets googled. (The link will be visible
+        once you reselect the genre/category.)
         </p>
 </div>
 <div id="" class="sect"><div class="inner">
-<div class="hgroup"><h2 class="title"><span class="title">Channel service</span></h2></div>
-<div class="region"><div class="contents"><p class="p">You can also open channel homepages. Either from the <span class="gui">Channel</span> menu, or via
-	double clicking the channel tab.</p></div></div>
+<div class="hgroup"><h2 class="title"><span class="title">Channel homepages</span></h2></div>
+<div class="region"><div class="contents"><p class="p">You can also visit channel homepages (Shoutcast.com, Xiph.org, etc).
+        Either from the <span class="gui">Channel</span> menu, or via	double clicking the channel tab.</p></div></div>
 </div></div>
 <div class="sect sect-links" role="navigation">
 <div class="hgroup"></div>
diff --git a/help/html/img/categories.png b/help/html/img/categories.png
new file mode 100644
index 0000000..59f2201
Binary files /dev/null and b/help/html/img/categories.png differ
diff --git a/help/html/img/channels-left.png b/help/html/img/channels-left.png
new file mode 100644
index 0000000..b6aa063
Binary files /dev/null and b/help/html/img/channels-left.png differ
diff --git a/help/html/img/channels.png b/help/html/img/channels.png
index 9ea5d75..db6b622 100644
Binary files a/help/html/img/channels.png and b/help/html/img/channels.png differ
diff --git a/help/html/img/configapps.png b/help/html/img/configapps.png
new file mode 100644
index 0000000..3252ff8
Binary files /dev/null and b/help/html/img/configapps.png differ
diff --git a/help/html/img/configplugins.png b/help/html/img/configplugins.png
new file mode 100644
index 0000000..9ffa076
Binary files /dev/null and b/help/html/img/configplugins.png differ
diff --git a/help/html/img/configtabs.png b/help/html/img/configtabs.png
new file mode 100644
index 0000000..080aa10
Binary files /dev/null and b/help/html/img/configtabs.png differ
diff --git a/help/html/img/mainwindow.png b/help/html/img/mainwindow.png
new file mode 100644
index 0000000..5d8c3ac
Binary files /dev/null and b/help/html/img/mainwindow.png differ
diff --git a/help/html/img/mainwindow2.svg b/help/html/img/mainwindow2.svg
deleted file mode 100644
index 0b979fb..0000000
--- a/help/html/img/mainwindow2.svg
+++ /dev/null
@@ -1,303 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="439.92966"
-   height="274.76151"
-   id="svg2"
-   version="1.1"
-   inkscape:version="0.47 r22583"
-   sodipodi:docname="mainwindow.svg">
-  <defs
-     id="defs4">
-    <inkscape:perspective
-       sodipodi:type="inkscape:persp3d"
-       inkscape:vp_x="0 : 526.18109 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_z="744.09448 : 526.18109 : 1"
-       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
-       id="perspective10" />
-    <inkscape:perspective
-       id="perspective2844"
-       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
-       inkscape:vp_z="1 : 0.5 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_x="0 : 0.5 : 1"
-       sodipodi:type="inkscape:persp3d" />
-    <inkscape:perspective
-       id="perspective2844-9"
-       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
-       inkscape:vp_z="1 : 0.5 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_x="0 : 0.5 : 1"
-       sodipodi:type="inkscape:persp3d" />
-    <inkscape:perspective
-       id="perspective2844-94"
-       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
-       inkscape:vp_z="1 : 0.5 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_x="0 : 0.5 : 1"
-       sodipodi:type="inkscape:persp3d" />
-    <inkscape:perspective
-       id="perspective2844-3"
-       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
-       inkscape:vp_z="1 : 0.5 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_x="0 : 0.5 : 1"
-       sodipodi:type="inkscape:persp3d" />
-    <inkscape:perspective
-       id="perspective2939"
-       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
-       inkscape:vp_z="1 : 0.5 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_x="0 : 0.5 : 1"
-       sodipodi:type="inkscape:persp3d" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="0.98994949"
-     inkscape:cx="258.4942"
-     inkscape:cy="185.63951"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     inkscape:window-width="1146"
-     inkscape:window-height="972"
-     inkscape:window-x="32"
-     inkscape:window-y="172"
-     inkscape:window-maximized="0" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Ebene 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-159.09078,-322.02188)">
-    <g
-       id="g2852">
-      <rect
-         y="322.02188"
-         x="159.6041"
-         height="274.76151"
-         width="439.41635"
-         id="rect2816"
-         style="fill:#e6e6e6;fill-opacity:1;stroke:none" />
-      <rect
-         y="322.02188"
-         x="159.6041"
-         height="20.203051"
-         width="272.74118"
-         id="rect2818"
-         style="fill:#666666;fill-opacity:1;stroke:none" />
-      <path
-         transform="translate(6.0609153,8.0812204)"
-         d="m 188.89853,353.33661 -11.36421,6.56113 -11.36422,6.56114 0,-13.12227 0,-13.12227 11.36422,6.56114 11.36421,6.56113 z"
-         inkscape:randomized="0"
-         inkscape:rounded="0"
-         inkscape:flatsided="false"
-         sodipodi:arg2="1.0471976"
-         sodipodi:arg1="0"
-         sodipodi:r2="7.5761442"
-         sodipodi:r1="15.152288"
-         sodipodi:cy="353.33661"
-         sodipodi:cx="173.74625"
-         sodipodi:sides="3"
-         id="path2820"
-         style="fill:#008000;fill-opacity:1;stroke:none"
-         sodipodi:type="star" />
-      <path
-         transform="translate(-2.0203051,-3.0304576)"
-         inkscape:transform-center-x="-6.0609153"
-         d="m 233.34524,364.4483 c 0,6.69471 -5.87939,12.12183 -13.13198,12.12183 -7.2526,0 -13.13199,-5.42712 -13.13199,-12.12183 0,-6.6947 5.87939,-12.12183 13.13199,-12.12183 7.25259,0 13.13198,5.42713 13.13198,12.12183 z"
-         sodipodi:ry="12.121831"
-         sodipodi:rx="13.131983"
-         sodipodi:cy="364.4483"
-         sodipodi:cx="220.21326"
-         id="path2822"
-         style="fill:#800000;fill-opacity:1;stroke:none"
-         sodipodi:type="arc" />
-      <text
-         transform="scale(0.618526,1.6167469)"
-         id="text2824"
-         y="230.25543"
-         x="707.06281"
-         style="font-size:36.30619431px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
-         xml:space="preserve"><tspan
-           y="230.25543"
-           x="707.06281"
-           id="tspan2826"
-           sodipodi:role="line">streamtuner2</tspan></text>
-      <path
-         id="path2828"
-         d="m 159.69408,399.56285 398.39683,-0.89352 36.79897,0.36494"
-         style="fill:none;stroke:#000000;stroke-width:1.20659292px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-      <text
-         transform="scale(0.99810497,1.0018986)"
-         id="text2830"
-         y="336.47824"
-         x="168.58113"
-         style="font-size:15.96251678px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
-         xml:space="preserve"><tspan
-           y="336.47824"
-           x="168.58113"
-           id="tspan2832"
-           sodipodi:role="line">Station Edit Channel Help</tspan></text>
-      <rect
-         y="381.62091"
-         x="168.69548"
-         height="19.192898"
-         width="60.609154"
-         id="rect2834"
-         style="fill:#999999;fill-opacity:1;stroke:none" />
-      <rect
-         y="382.12598"
-         x="236.37569"
-         height="19.192898"
-         width="60.609154"
-         id="rect2834-0"
-         style="fill:#666666;fill-opacity:1;stroke:none" />
-      <rect
-         y="381.11581"
-         x="304.05594"
-         height="19.192898"
-         width="60.609154"
-         id="rect2834-09"
-         style="fill:#999999;fill-opacity:1;stroke:none" />
-      <rect
-         y="382.12598"
-         x="371.73615"
-         height="19.192898"
-         width="60.609154"
-         id="rect2834-5"
-         style="fill:#999999;fill-opacity:1;stroke:none" />
-      <rect
-         y="382.12598"
-         x="438.40622"
-         height="19.192898"
-         width="60.609154"
-         id="rect2834-7"
-         style="fill:#999999;fill-opacity:1;stroke:none" />
-      <text
-         transform="scale(0.87874836,1.1379822)"
-         id="text2887"
-         y="348.10754"
-         x="193.84726"
-         style="font-size:12.21920872px;font-style:normal;font-weight:normal;fill:#e6e6e6;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
-         xml:space="preserve"><tspan
-           y="348.10754"
-           x="193.84726"
-           id="tspan2889"
-           sodipodi:role="line">bookmarks   Shoutcast     Xiph            Jamendo</tspan></text>
-      <rect
-         y="409.90515"
-         x="166.67517"
-         height="167.68532"
-         width="81.822365"
-         id="rect2891"
-         style="fill:#f9f9f9;fill-opacity:1;stroke:none" />
-      <text
-         transform="scale(0.98758137,1.0125748)"
-         id="text2893"
-         y="425.48941"
-         x="175.3701"
-         style="font-size:13.59386539px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
-         xml:space="preserve"><tspan
-           y="425.48941"
-           x="175.3701"
-           id="tspan2895"
-           sodipodi:role="line">Category</tspan><tspan
-           id="tspan2897"
-           y="442.48175"
-           x="175.3701"
-           sodipodi:role="line">Genre</tspan><tspan
-           id="tspan2899"
-           y="459.47406"
-           x="175.3701"
-           sodipodi:role="line">genre</tspan><tspan
-           id="tspan2901"
-           y="476.4664"
-           x="175.3701"
-           sodipodi:role="line">genre</tspan><tspan
-           id="tspan2903"
-           y="493.45874"
-           x="175.3701"
-           sodipodi:role="line">genre</tspan><tspan
-           id="tspan2905"
-           y="510.45108"
-           x="175.3701"
-           sodipodi:role="line">genre</tspan></text>
-      <rect
-         y="410.91531"
-         x="265.67014"
-         height="168.69548"
-         width="317.1879"
-         id="rect2907"
-         style="fill:#f9f9f9;fill-opacity:1;stroke:none" />
-      <text
-         transform="scale(1.0541937,0.94859229)"
-         id="text2893-5"
-         y="453.32745"
-         x="260.99759"
-         style="font-size:14.31282997px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
-         xml:space="preserve"><tspan
-           id="tspan2905-3"
-           y="453.32745"
-           x="260.99759"
-           sodipodi:role="line">Radio station      128   http://www.radi</tspan><tspan
-           id="tspan2981"
-           y="471.21851"
-           x="260.99759"
-           sodipodi:role="line">Station title ...     128   http://123.fm/</tspan><tspan
-           id="tspan2983"
-           y="489.10953"
-           x="260.99759"
-           sodipodi:role="line">Stream title ....    128   http://www....</tspan><tspan
-           id="tspan2985"
-           y="507.00058"
-           x="260.99759"
-           sodipodi:role="line">....</tspan><tspan
-           id="tspan2987"
-           y="524.8916"
-           x="260.99759"
-           sodipodi:role="line">....</tspan><tspan
-           id="tspan2989"
-           y="542.78265"
-           x="260.99759"
-           sodipodi:role="line">...</tspan><tspan
-           id="tspan2991"
-           y="560.67371"
-           x="260.99759"
-           sodipodi:role="line">.....</tspan><tspan
-           id="tspan2993"
-           y="578.5647"
-           x="260.99759"
-           sodipodi:role="line">...</tspan><tspan
-           id="tspan2995"
-           y="596.45575"
-           x="260.99759"
-           sodipodi:role="line">........</tspan></text>
-    </g>
-  </g>
-</svg>
diff --git a/help/html/img/pluginmanager2.png b/help/html/img/pluginmanager2.png
new file mode 100644
index 0000000..7d4ff7d
Binary files /dev/null and b/help/html/img/pluginmanager2.png differ
diff --git a/help/html/img/search.png b/help/html/img/search.png
new file mode 100644
index 0000000..142f655
Binary files /dev/null and b/help/html/img/search.png differ
diff --git a/help/html/img/streamactions.png b/help/html/img/streamactions.png
new file mode 100644
index 0000000..a5670f3
Binary files /dev/null and b/help/html/img/streamactions.png differ
diff --git a/help/html/img/streamedit.png b/help/html/img/streamedit.png
new file mode 100644
index 0000000..b1238a1
Binary files /dev/null and b/help/html/img/streamedit.png differ
diff --git a/help/html/img/streams.png b/help/html/img/streams.png
index fb3f719..4ef65b6 100644
Binary files a/help/html/img/streams.png and b/help/html/img/streams.png differ
diff --git a/help/html/img/timer.png b/help/html/img/timer.png
new file mode 100644
index 0000000..705aa00
Binary files /dev/null and b/help/html/img/timer.png differ
diff --git a/help/html/index.html b/help/html/index.html
index 244e1b7..c42b4f5 100644
--- a/help/html/index.html
+++ b/help/html/index.html
@@ -19,7 +19,7 @@
 <div class="hgroup"><h2 class="title"><span class="title">Browsing channels and radio stations</span></h2></div>
 <div class="region"><div class="contents"><div class="links topiclinks"><div class="inner"><div class="region">
 <div class="links-twocolumn">
-<div class="linkdiv "><a class="linkdiv" href="channels.html" title="Channels"><span class="title">Channels</span><span class="linkdiv-dash"> — </span><span class="desc">Switching through the channel tabs, different radio directoriy services.</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="channels.html" title="Channels"><span class="title">Channels</span><span class="linkdiv-dash"> — </span><span class="desc">Switching through the channel tabs, different radio directory services.</span></a></div>
 <div class="linkdiv "><a class="linkdiv" href="playing.html" title="Playing"><span class="title">Playing</span><span class="linkdiv-dash"> — </span><span class="desc">Double click a station to start it in your audio player.</span></a></div>
 </div>
 <div class="links-twocolumn"><div class="linkdiv "><a class="linkdiv" href="streams.html" title="Streams / Stations"><span class="title">Streams / Stations</span><span class="linkdiv-dash"> — </span><span class="desc">Radio streams lists, station information columns, entry actions.</span></a></div></div>
@@ -30,57 +30,118 @@
 <div class="region"><div class="contents"><div class="links topiclinks"><div class="inner"><div class="region">
 <div class="links-twocolumn">
 <div class="linkdiv "><a class="linkdiv" href="bookmarks.html" title="Bookmarks"><span class="title">Bookmarks</span><span class="linkdiv-dash"> — </span><span class="desc">Collect favourites via bookmark function, entry editing and deleting.</span></a></div>
-<div class="linkdiv "><a class="linkdiv" href="internet_radio_org_uk.html" title="Internet-Radio.org.uk"><span class="title">Internet-Radio.org.uk</span><span class="linkdiv-dash"> — </span><span class="desc">Large radio directory from the UK.</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="dirble.html" title="Dirble"><span class="title">Dirble</span><span class="linkdiv-dash"> — </span><span class="desc">Dirble.com</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="internet_radio_org_uk.html" title="Internet-Radio"><span class="title">Internet-Radio</span><span class="linkdiv-dash"> — </span><span class="desc">Large radio directory from the UK.</span></a></div>
 <div class="linkdiv "><a class="linkdiv" href="jamendo.html" title="Jamendo"><span class="title">Jamendo</span><span class="linkdiv-dash"> — </span><span class="desc">Creative Commons music and artist hub.</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="live365.html" title="Live365"><span class="title">Live365</span><span class="linkdiv-dash"> — </span><span class="desc">Live365 radio network</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="myoggradio.html" title="MyOggRadio"><span class="title">MyOggRadio</span><span class="linkdiv-dash"> — </span><span class="desc">Open source stream directory.</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="radionomy.html" title="Radionomy"><span class="title">Radionomy</span><span class="linkdiv-dash"> — </span><span class="desc">Large internet streaming provider</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="shoutcast.html" title="Shoutcast"><span class="title">Shoutcast</span><span class="linkdiv-dash"> — </span><span class="desc">Probably still the largest radio station list.</span></a></div>
 </div>
 <div class="links-twocolumn">
-<div class="linkdiv "><a class="linkdiv" href="myoggradio.html" title="MyOggRadio"><span class="title">MyOggRadio</span><span class="linkdiv-dash"> — </span><span class="desc">Open source stream directory.</span></a></div>
-<div class="linkdiv "><a class="linkdiv" href="shoutcast.html" title="Shoutcast"><span class="title">Shoutcast</span><span class="linkdiv-dash"> — </span><span class="desc">One of the bigger radio station lists.</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="somafm.html" title="SomaFM"><span class="title">SomaFM</span><span class="linkdiv-dash"> — </span><span class="desc">Set of radio stations</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="surfmusik.html" title="SurfMusic"><span class="title">SurfMusic</span><span class="linkdiv-dash"> — </span><span class="desc">International radio listings.</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="modarchive.html" title="The MOD Archive"><span class="title">The MOD Archive</span><span class="linkdiv-dash"> — </span><span class="desc">Tracker audio file collection.</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="tunein.html" title="TuneIn"><span class="title">TuneIn</span><span class="linkdiv-dash"> — </span><span class="desc">Radio and Podcast directory.</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="ubuntuusersm.html" title="UbuntuUsers"><span class="title">UbuntuUsers</span><span class="linkdiv-dash"> — </span><span class="desc">Wiki list of radio stations</span></a></div>
 <div class="linkdiv "><a class="linkdiv" href="xiph.html" title="Xiph.org"><span class="title">Xiph.org</span><span class="linkdiv-dash"> — </span><span class="desc">ICEcast radio directory.</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="youtube.html" title="Youtube"><span class="title">Youtube</span><span class="linkdiv-dash"> — </span><span class="desc">Youtube music/video listings.</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="filtermusic.html" title="filtermusic"><span class="title">filtermusic</span><span class="linkdiv-dash"> — </span><span class="desc">Selection of the best radio stations</span></a></div>
 </div>
 </div></div></div></div></div>
 </div></div>
 <div id="functions" class="sect"><div class="inner">
 <div class="hgroup"><h2 class="title"><span class="title">Functions</span></h2></div>
-<div class="region"><div class="contents"><div class="links topiclinks"><div class="inner"><div class="region">
+<div class="region">
+<div class="contents"><div class="links topiclinks"><div class="inner"><div class="region">
 <div class="links-twocolumn">
+<div class="linkdiv "><a class="linkdiv" href="edit.html" title="Edit"><span class="title">Edit</span><span class="linkdiv-dash"> — </span><span class="desc">Edit or inspect a station entry.</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="playing.html" title="Playing"><span class="title">Playing</span><span class="linkdiv-dash"> — </span><span class="desc">Double click a station to start it in your audio player.</span></a></div>
 <div class="linkdiv "><a class="linkdiv" href="homepage.html" title="Radio homepages"><span class="title">Radio homepages</span><span class="linkdiv-dash"> — </span><span class="desc">Start a web browser for a station.</span></a></div>
-<div class="linkdiv "><a class="linkdiv" href="recording.html" title="Recording"><span class="title">Recording</span><span class="linkdiv-dash"> — </span><span class="desc">Save radio songs as MP3 files via streamripper.</span></a></div>
 </div>
 <div class="links-twocolumn">
+<div class="linkdiv "><a class="linkdiv" href="recording.html" title="Recording"><span class="title">Recording</span><span class="linkdiv-dash"> — </span><span class="desc">Save radio songs as MP3 files via streamripper.</span></a></div>
 <div class="linkdiv "><a class="linkdiv" href="saving.html" title="Saving"><span class="title">Saving</span><span class="linkdiv-dash"> — </span><span class="desc">Export a station entry as .m3u/.pls file.</span></a></div>
 <div class="linkdiv "><a class="linkdiv" href="search.html" title="Searching"><span class="title">Searching</span><span class="linkdiv-dash"> — </span><span class="desc">Quicksearch field and Ctrl+F compound search window.</span></a></div>
 </div>
-</div></div></div></div></div>
+</div></div></div></div>
+<div class="sect sect-links" role="navigation">
+<div class="hgroup"></div>
+<div class="contents"><div class="links guidelinks"><div class="inner">
+<div class="title"><h3><span class="title">More Information</span></h3></div>
+<div class="region"><ul><li class="links ">
+<a href="streams.html" title="Streams / Stations">Streams / Stations</a><span class="desc"> — Radio streams lists, station information columns, entry actions.</span>
+</li></ul></div>
+</div></div></div>
+</div>
+</div>
 </div></div>
 <div id="configuration" class="sect"><div class="inner">
 <div class="hgroup"><h2 class="title"><span class="title">Configuration</span></h2></div>
-<div class="region"><div class="contents"><div class="links topiclinks"><div class="inner"><div class="region">
+<div class="region">
+<div class="contents"><div class="links topiclinks"><div class="inner"><div class="region">
 <div class="links-twocolumn"><div class="linkdiv "><a class="linkdiv" href="configuration.html" title="Settings dialog"><span class="title">Settings dialog</span><span class="linkdiv-dash"> — </span><span class="desc"><span class="key"><kbd>F12</kbd></span> brings up the options window with the Player, Display, System and Plugin sections.</span></a></div></div>
 <div class="links-twocolumn"></div>
-</div></div></div></div></div>
+</div></div></div></div>
+<div class="sect sect-links" role="navigation">
+<div class="hgroup"></div>
+<div class="contents"><div class="links seealsolinks"><div class="inner">
+<div class="title"><h3><span class="title">See Also</span></h3></div>
+<div class="region"><ul><li class="links ">
+<a href="config_apps.html" title="Audio players">Audio players</a><span class="desc"> — Common applications to use as players.</span>
+</li></ul></div>
+</div></div></div>
+</div>
+</div>
 </div></div>
-<div id="advanced" class="sect"><div class="inner">
-<div class="hgroup"><h2 class="title"><span class="title">Advanced topics</span></h2></div>
-<div class="region"><div class="contents"><div class="links topiclinks"><div class="inner"><div class="region">
+<div id="extra" class="sect"><div class="inner">
+<div class="hgroup"><h2 class="title"><span class="title">Additional features</span></h2></div>
+<div class="region">
+<div class="contents"><div class="links topiclinks"><div class="inner"><div class="region">
 <div class="links-twocolumn">
 <div class="linkdiv "><a class="linkdiv" href="cli.html" title="CLI (command line interface)"><span class="title">CLI (command line interface)</span><span class="linkdiv-dash"> — </span><span class="desc">Console interface, exporting data.</span></a></div>
-<div class="linkdiv "><a class="linkdiv" href="extending.html" title="Extension Howto"><span class="title">Extension Howto</span><span class="linkdiv-dash"> — </span><span class="desc">Writing your own channel plugins.</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="dragndrop.html" title="Drag'n'drop"><span class="title">Drag'n'drop</span><span class="linkdiv-dash"> — </span><span class="desc">Drag and drop support.</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="exportcat.html" title="Export all stations"><span class="title">Export all stations</span><span class="linkdiv-dash"> — </span><span class="desc">Exporting a whole category as .pls.</span></a></div>
 <div class="linkdiv "><a class="linkdiv" href="global_key.html" title="Global_key"><span class="title">Global_key</span><span class="linkdiv-dash"> — </span><span class="desc">Global keyboard shortcut for radio switching.</span></a></div>
 </div>
 <div class="links-twocolumn">
-<div class="linkdiv "><a class="linkdiv" href="glossary.html" title="Glossary"><span class="title">Glossary</span><span class="linkdiv-dash"> — </span><span class="desc">Technical and streamtuner2 specific terminology and jargon.</span></a></div>
-<div class="linkdiv "><a class="linkdiv" href="technical.html" title="Technical information"><span class="title">Technical information</span><span class="linkdiv-dash"> — </span><span class="desc">Filenames, Directories, Dependencies</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="pluginmanager2.html" title="Plugin Manager 2"><span class="title">Plugin Manager 2</span><span class="linkdiv-dash"> — </span><span class="desc">User plugin installation</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="favicon.html" title="Station favicons"><span class="title">Station favicons</span><span class="linkdiv-dash"> — </span><span class="desc">Favicons</span></a></div>
 <div class="linkdiv "><a class="linkdiv" href="timer.html" title="Timer"><span class="title">Timer</span><span class="linkdiv-dash"> — </span><span class="desc">Programming recurring play and recording events.</span></a></div>
 </div>
-</div></div></div></div></div>
+</div></div></div></div>
+<div class="sect sect-links" role="navigation">
+<div class="hgroup"></div>
+<div class="contents"><div class="links guidelinks"><div class="inner">
+<div class="title"><h3><span class="title">More Information</span></h3></div>
+<div class="region"><ul>
+<li class="links ">
+<a href="glossary.html" title="Glossary">Glossary</a><span class="desc"> — Technical and streamtuner2 specific terminology and jargon.</span>
+</li>
+<li class="links ">
+<a href="technical.html" title="Technical information">Technical information</a><span class="desc"> — Filenames, Directories, Dependencies</span>
+</li>
+</ul></div>
+</div></div></div>
+</div>
+</div>
 </div></div>
 <div id="footer" class="sect"><div class="inner">
-<div class="hgroup"></div>
+<div class="hgroup"><h3 class="subtitle"><span class="subtitle">Project resources and additional help</span></h3></div>
 <div class="region"><div class="contents">
-<p class="p">You can get additional help from the online forum. See help menu for the link.</p>
-<p class="p">Update status: This documentation is based on available functions in streamtuner2
-	version 2.0.7 of August 2010. It is still incomplete however.</p>
+<div class="list"><div class="inner"><div class="region"><ul class="list">
+<li class="list"><p class="p">You can get additional help from the
+   	  <span class="link"><a href="http://sourceforge.net/p/streamtuner2/discussion/1173108/" title="http://sourceforge.net/p/streamtuner2/discussion/1173108/">online forum</a></span>.
+   	  Or via <span class="guiseq"><span class="gui">Help</span> ▸ <span class="gui">Forum</span></span>.</p></li>
+<li class="list"><p class="p">Feedback on issues you ran into is also very welcome.
+	  <span class="link"><a href="http://fossil.include-once.org/streamtuner2/rptview?rn=1" title="http://fossil.include-once.org/streamtuner2/rptview?rn=1">Bug reports</a></span>
+	  don't require any account registration. But please include -D debug output.
+	  Also accessible via <span class="guiseq"><span class="gui">Help</span> ▸ <span class="gui">Wiki/Fossil/Bugs</span></span>.</p></li>
+<li class="list"><p class="p">Watch for new project releases on
+	  <span class="link"><a href="http://freshcode.club/projects/streamtuner2" title="http://freshcode.club/projects/streamtuner2">freshcode.club</a></span></p></li>
+</ul></div></div></div>
+<p class="p">This manual was last updated for available functions in streamtuner2
+	version 2.1.9, as of May 2015.</p>
 </div></div>
 </div></div>
 </div>
diff --git a/help/html/internet_radio_org_uk.html b/help/html/internet_radio_org_uk.html
index 61b1ad6..0e627b0 100644
--- a/help/html/internet_radio_org_uk.html
+++ b/help/html/internet_radio_org_uk.html
@@ -2,7 +2,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
-<title>Internet-Radio.org.uk</title>
+<title>Internet-Radio</title>
 <link rel="stylesheet" type="text/css" href="C.css">
 <script type="text/javascript" src="jquery.js"></script><script type="text/javascript" src="jquery.syntax.js"></script><script type="text/javascript" src="yelp.js"></script>
 </head>
@@ -13,25 +13,38 @@
 <div class="trail">
 <a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#channels" title="Channel tabs">Channel tabs</a> » </div>
 <div class="trail">
-<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#configuration" title="Configuration">Configuration</a> » <a class="trail" href="configuration.html" title="Settings dialog">Settings dialog</a> › <a class="trail" href="configuration.html#plugins" title="Plugin and Channel settings">Plugin and Channel settings</a> » </div>
+<a class="trail" href="glossary.html" title="Glossary">Glossary</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » <a class="trail" href="pluginmanager2.html" title="Plugin Manager 2">Plugin Manager 2</a> » <a class="trail" href="configuration.html#plugins" title="Channel and feature plugins and settings">Channel and feature plugins and settings</a> » </div>
+<div class="trail">
+<a class="trail" href="technical.html" title="Technical information">Technical information</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » <a class="trail" href="pluginmanager2.html" title="Plugin Manager 2">Plugin Manager 2</a> » <a class="trail" href="configuration.html#plugins" title="Channel and feature plugins and settings">Channel and feature plugins and settings</a> » </div>
 </div></div>
 <div class="body">
-<div class="hgroup"><h1 class="title"><span class="title">Internet-Radio.org.uk</span></h1></div>
+<div class="hgroup">
+<h1 class="title"><span class="title">Internet-Radio</span></h1>
+<h2 class="subtitle"><span class="subtitle"><span class="link"><a href="http://internet-radio.com/" title="http://internet-radio.com/">//internet-radio.com/</a></span></span></h2>
+</div>
 <div class="region">
 <div class="contents">
-<p class="p">I-R.org.uk is a good alternative to Shoutcast. It also lacks channel homepage in most
-	cases, but is a likewise encyclopedical directory. Genres are similiar to Shoutcast.</p>
-<div class="note" title="Note"><div class="inner"><div class="region"><div class="contents"><p class="p">Note that this plugin uses its own setting for how many links to retrieve. Instead
-	of stream numbers, it only counts pages. This is a lazyness related bug.</p></div></div></div></div>
+<p class="p">Internet-Radio.com is a broad alternative to Shoutcast.</p>
+<div class="list"><div class="inner"><div class="region"><ul class="list">
+<li class="list"><p class="p">It has regained station homepages for most entries again.</p></li>
+<li class="list"><p class="p">Genres are similiar to Shoutcast.</p></li>
+<li class="list"><p class="p">Updating station lists is comperatively fast.</p></li>
+</ul></div></div></div>
 </div>
+<div id="options" class="sect"><div class="inner">
+<div class="hgroup"><h2 class="title"><span class="title">Configuration</span></h2></div>
+<div class="region"><div class="contents"><p class="p">Note that this plugin has its own setting on how many
+	links to retrieve.  Instead of stream numbers, it only counts pages
+	(which however speeds up processing now).</p></div></div>
+</div></div>
 <div class="sect sect-links" role="navigation">
 <div class="hgroup"></div>
 <div class="contents"><div class="links guidelinks"><div class="inner">
 <div class="title"><h2><span class="title">More Information</span></h2></div>
 <div class="region"><ul>
 <li class="links "><a href="channels.html#list" title="Available channels">Available channels</a></li>
+<li class="links "><a href="configuration.html#plugins" title="Channel and feature plugins and settings">Channel and feature plugins and settings</a></li>
 <li class="links "><a href="index.html#channels" title="Channel tabs">Channel tabs</a></li>
-<li class="links "><a href="configuration.html#plugins" title="Plugin and Channel settings">Plugin and Channel settings</a></li>
 </ul></div>
 </div></div></div>
 </div>
diff --git a/help/html/introduction.html b/help/html/introduction.html
index 06089b5..4832bf0 100644
--- a/help/html/introduction.html
+++ b/help/html/introduction.html
@@ -15,8 +15,9 @@
 <div class="contents">
 <p class="p">Streamtuner2 is a simple browser for internet radios. It aquires its radio lists
 	from various directory services. These are represented as "channel" tabs in the main
-	window. Below are the category/genre lists (left) and the stations for a genre (right).</p>
-<div class="media media-image"><div class="inner"><img src="img/mainwindow2.svg" class="media media-block" alt=""></div></div>
+	window. The category/genre lists are in the left pane, and associated stations right
+	to them.</p>
+<div class="media media-image"><div class="inner"><img src="img/mainwindow.png" class="media media-block" alt=""></div></div>
 </div>
 <div id="play" class="sect"><div class="inner">
 <div class="hgroup"><h2 class="title"><span class="title">How to select and play a radio.</span></h2></div>
@@ -25,13 +26,11 @@
 <li class="steps"><p class="p">Select a channel tab, like <span class="code">Shoutcast</span>.</p></li>
 <li class="steps"><p class="p">Click one of the genres in the left pane. For example <span class="code">Classic</span>.</p></li>
 <li class="steps"><p class="p">Now the right pane loads a radio list.</p></li>
-<li class="steps"><p class="p">Double click one of the radio streams or use the <span class="key"><kbd>play</kbd></span> toolbar button.</p></li>
+<li class="steps"><p class="p">Double click one of the radio streams or use the <span class="key"><kbd>▶ play</kbd></span> toolbar button.</p></li>
 </ol></div></div></div>
-<p class="p">Note that some categories can and should be exanded. In a few plugins (modarchive),
-	the expandable genre/category brings up no station list on its own, while in Shoutcast
-	and most others it's a valid genre in itself.</p>
-<p class="p">Some radio stations cannot be played, because they just have a homepage. (That's the
-	case for all listings in the Google Stations channel.)</p>
+<p class="p">Note that some categories are expandable. In a few plugins (modarchive),
+	the grouping genre/categories are empty, while in other channels they're
+	filled genre lists themselves.</p>
 </div></div>
 </div></div>
 <div id="actions" class="sect"><div class="inner">
@@ -42,43 +41,43 @@
 	or access the context menu with a right click.</p>
 <div class="table"><div class="inner"><div class="region"><table class="table">
 <tr>
-<td></td>
-<td style="border-left-style: solid;"></td>
+<td><p class="p"><span class="link"><a href="playing.html" title="Playing">Play</a></span></p></td>
+<td style="border-left-style: solid;"><p class="p">Starts the radio in a configured audio player</p></td>
 </tr>
 <tr class="shade">
-<td style="border-top-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
+<td style="border-top-style: solid;"><p class="p"><span class="link"><a href="recording.html" title="Recording">Record</a></span></p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p">Opens a terminal window and streamripper, which cuts the radio broadcast into individual mp3 songs.</p></td>
 </tr>
 <tr>
-<td style="border-top-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
+<td style="border-top-style: solid;"><p class="p"><span class="link"><a href="bookmarks.html" title="Bookmarks">Bookmarks</a></span></p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p">Copy radio entry over into the <span class="gui">bookmarks</span> channel.</p></td>
 </tr>
 <tr class="shade">
-<td style="border-top-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
+<td style="border-top-style: solid;"><p class="p">Homepage</p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p">Most radio stations have a homepage, which you can start a web browser for.</p></td>
 </tr>
 <tr>
-<td style="border-top-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
+<td style="border-top-style: solid;"><p class="p">Saving</p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p">A radio entry can be exported as .pls, .xspf, .m3u, .desktop, or .json file.</p></td>
 </tr>
 <tr class="shade">
-<td style="border-top-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
+<td style="border-top-style: solid;"><p class="p">Extensions<span class="guiseq"><span class="gui"></span> ▸ <span class="gui"></span></span></p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p">Some plugins add other features in this submenu.</p></td>
 </tr>
 <tr>
-<td style="border-top-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
+<td style="border-top-style: solid;"><p class="p">Editing</p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p">This command is in the <span class="gui">Edit</span> and context menu, allows to inspect and modify radio descriptions.</p></td>
 </tr>
 <tr class="shade">
-<td style="border-top-style: solid;"></td>
-<td style="border-top-style: solid;border-left-style: solid;"></td>
+<td style="border-top-style: solid;"><p class="p">Searching</p></td>
+<td style="border-top-style: solid;border-left-style: solid;"><p class="p">You can get a radio list according to search criteria.</p></td>
 </tr>
 </table></div></div></div>
 <p class="p"> Play, Record and Homepage also have buttons in the toolbar.</p>
 </div></div>
 </div></div>
-<div id="" class="sect"><div class="inner">
-<div class="hgroup"><h2 class="title"><span class="title">Radio lists get stale</span></h2></div>
+<div id="none" class="sect"><div class="inner">
+<div class="hgroup"><h2 class="title"><span class="title">Refresh radio lists</span></h2></div>
 <div class="region"><div class="contents"><p class="p">After some time, stream informations become obsolete. Therefore you should regularily
 	refresh the lists. The <span class="gui">Reload</span> button in the toolbar (or <span class="key"><kbd>F5</kbd></span>) is your friend. You can
 	also update the category lists with <span class="guiseq"><span class="gui">Channel</span> ▸ <span class="gui">Reload Category Tree</span></span>
@@ -93,7 +92,7 @@
 <div class="contents"><div class="links guidelinks"><div class="inner">
 <div class="title"><h2><span class="title">More Information</span></h2></div>
 <div class="region"><ul><li class="links ">
-<a href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a><span class="desc"> — Documentation overview</span>
+<a href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a><span class="desc"> — Internet radio station browser</span>
 </li></ul></div>
 </div></div></div>
 </div>
diff --git a/help/html/jamendo.html b/help/html/jamendo.html
index 2f4f884..a02bfe7 100644
--- a/help/html/jamendo.html
+++ b/help/html/jamendo.html
@@ -12,24 +12,57 @@
 <a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#browsing" title="Browsing channels and radio stations">Browsing channels and radio stations</a> » <a class="trail" href="channels.html" title="Channels">Channels</a> › <a class="trail" href="channels.html#list" title="Available channels">Available channels</a> » </div>
 <div class="trail">
 <a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#channels" title="Channel tabs">Channel tabs</a> » </div>
+<div class="trail">
+<a class="trail" href="glossary.html" title="Glossary">Glossary</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » <a class="trail" href="pluginmanager2.html" title="Plugin Manager 2">Plugin Manager 2</a> » <a class="trail" href="configuration.html#plugins" title="Channel and feature plugins and settings">Channel and feature plugins and settings</a> » </div>
+<div class="trail">
+<a class="trail" href="technical.html" title="Technical information">Technical information</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » <a class="trail" href="pluginmanager2.html" title="Plugin Manager 2">Plugin Manager 2</a> » <a class="trail" href="configuration.html#plugins" title="Channel and feature plugins and settings">Channel and feature plugins and settings</a> » </div>
 </div></div>
 <div class="body">
-<div class="hgroup"><h1 class="title"><span class="title">Jamendo</span></h1></div>
+<div class="hgroup">
+<h1 class="title"><span class="title">Jamendo</span></h1>
+<h2 class="subtitle"><span class="subtitle"><span class="link"><a href="http://jamendo.com/" title="http://jamendo.com/">//jamendo.com/</a></span></span></h2>
+</div>
 <div class="region">
 <div class="contents">
 <p class="p">Jamendo is a Creative Comments licensing oriented music distributor. It hosts audio
-	files for individual musicians and artists. Tracks and albums can thus be downloaded
-	free of charge. Yeah, imagine that.</p>
-<p class="p">The streamtuner2 plugin for Jamendo is pretty limited at the moment. It just provides
-	a quick overview over top artists and most listened albums from each genre. To browse
-	the whole collections, better go to the Jamendo homepage or use Rhythmbox.</p>
+files for individual musicians and artists. Tracks and albums can thus be downloaded
+free of charge. Yeah, imagine that.</p>
+<p class="p">The new Jamendo v3.0 is now utilized. It allows to list albums,
+playlists, and individual tracks by genre.  The radio list is static
+(they're looping over randomized songs from each genre.)</p>
+<p class="p">Instead of favicons, streamtuner2 can fetch album or track
+covers.  Thus the images are a bit larger, and retrieving them all
+via <span class="guiseq"><span class="gui">Channel</span> ▸ <span class="gui">Load favicons...</span></span>
+takes a while longer.</p>
 </div>
+<div id="options" class="sect"><div class="inner">
+<div class="hgroup"><h2 class="title"><span class="title"><span class="link"><a href="configuration.html" title="Settings dialog">Config</a></span> options</span></h2></div>
+<div class="region"><div class="contents"><div class="terms"><div class="inner">
+<div class="title title-terms"><h3><span class="title">System</span></h3></div>
+<div class="region"><dl class="terms">
+<dt class="terms">Streaming format</dt>
+<dd class="terms"><p class="p">You can switch between MP3 and Ogg Vorbis audio streams for Jamendo.
+     It's not honored by the radio section, but albums and tracks should be
+     received as Ogg when configured so.</p></dd>
+<dt class="terms">Preview image sizes</dt>
+<dd class="terms"><p class="p">Album covers are downloaded in lieu of favicons. They're available
+     in different sizes. Use 25px if you want just favicon-sized icons.</p></dd>
+<dt class="terms">Result length</dt>
+<dd class="terms">
+<p class="p">Currently only 1 page (of 200 entries each) of album/track lists are
+     fetched.</p>
+<div class="note note-bug" title="Bug"><div class="inner"><div class="region"><div class="contents"><p class="p">Setting a higher value may not work.</p></div></div></div></div>
+</dd>
+</dl></div>
+</div></div></div></div>
+</div></div>
 <div class="sect sect-links" role="navigation">
 <div class="hgroup"></div>
 <div class="contents"><div class="links guidelinks"><div class="inner">
 <div class="title"><h2><span class="title">More Information</span></h2></div>
 <div class="region"><ul>
 <li class="links "><a href="channels.html#list" title="Available channels">Available channels</a></li>
+<li class="links "><a href="configuration.html#plugins" title="Channel and feature plugins and settings">Channel and feature plugins and settings</a></li>
 <li class="links "><a href="index.html#channels" title="Channel tabs">Channel tabs</a></li>
 </ul></div>
 </div></div></div>
diff --git a/help/html/json.html b/help/html/json.html
index 5a4a0ba..eb1e8dd 100644
--- a/help/html/json.html
+++ b/help/html/json.html
@@ -8,25 +8,23 @@
 </head>
 <body><div class="page" role="main">
 <div class="header"><div class="trails" role="navigation"><div class="trail">
-<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#advanced" title="Advanced topics">Advanced topics</a> » <a class="trail" href="glossary.html" title="Glossary">Glossary</a> › <a class="trail" href="glossary.html#filetypes" title="Filetypes">Filetypes</a> » </div></div></div>
+<a class="trail" href="glossary.html" title="Glossary">Glossary</a> › <a class="trail" href="glossary.html#filetypes" title="Filetypes">Filetypes</a> » </div></div></div>
 <div class="body">
 <div class="hgroup"><h1 class="title"><span class="title">JSON files</span></h1></div>
 <div class="region">
 <div class="contents">
 <p class="p">JSON is a data representation format derived from Javascript (the browser embedded
-        programming language for websites). Streamtuner2 uses it to store it's configuration
+        programming language for websites). Streamtuner2 uses it to store its configuration
         and radio station data files.</p>
 <p class="p">The MIME type of these files is application/json and they often look like: </p>
-<p class="p"><span class="code">
-[
+<div class="code"><pre class="contents ">[
   {
     "title": "Station title..",
     "url": "http://1.2.3.4:8000/",
     "homepage": "http://radio.org/",
   },
   { "title": "second" }
-]
-</span></p>
+]</pre></div>
 </div>
 <div class="sect sect-links" role="navigation">
 <div class="hgroup"></div>
diff --git a/help/html/jamendo.html b/help/html/live365.html
similarity index 71%
copy from help/html/jamendo.html
copy to help/html/live365.html
index 2f4f884..4509696 100644
--- a/help/html/jamendo.html
+++ b/help/html/live365.html
@@ -2,7 +2,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
-<title>Jamendo</title>
+<title>Live365</title>
 <link rel="stylesheet" type="text/css" href="C.css">
 <script type="text/javascript" src="jquery.js"></script><script type="text/javascript" src="jquery.syntax.js"></script><script type="text/javascript" src="yelp.js"></script>
 </head>
@@ -14,15 +14,19 @@
 <a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#channels" title="Channel tabs">Channel tabs</a> » </div>
 </div></div>
 <div class="body">
-<div class="hgroup"><h1 class="title"><span class="title">Jamendo</span></h1></div>
+<div class="hgroup">
+<h1 class="title"><span class="title">Live365</span></h1>
+<h2 class="subtitle"><span class="subtitle"><span class="link"><a href="http://live365.com/" title="http://live365.com/">//live365.com/</a></span></span></h2>
+</div>
 <div class="region">
 <div class="contents">
-<p class="p">Jamendo is a Creative Comments licensing oriented music distributor. It hosts audio
-	files for individual musicians and artists. Tracks and albums can thus be downloaded
-	free of charge. Yeah, imagine that.</p>
-<p class="p">The streamtuner2 plugin for Jamendo is pretty limited at the moment. It just provides
-	a quick overview over top artists and most listened albums from each genre. To browse
-	the whole collections, better go to the Jamendo homepage or use Rhythmbox.</p>
+<p class="p">Live365 is a radio broadcasting service and directory. It categorizes stations in
+        over 250 genres. Not all radio stations are free to listen however. It's a commercial
+        provider. Therefore streamtuner2 tries to filter result lists.</p>
+<p class="p">This channel plugin is known to break once in a while. And it can't be guaranteed
+	to pass working streaming URLs to audio players.</p>
+<p class="p">If it breaks once more, it's going to get removed. (Unless someone else sends in
+	a patch, of course!)</p>
 </div>
 <div class="sect sect-links" role="navigation">
 <div class="hgroup"></div>
diff --git a/help/html/m3u.html b/help/html/m3u.html
index e8b475b..4550c61 100644
--- a/help/html/m3u.html
+++ b/help/html/m3u.html
@@ -8,18 +8,16 @@
 </head>
 <body><div class="page" role="main">
 <div class="header"><div class="trails" role="navigation"><div class="trail">
-<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#advanced" title="Advanced topics">Advanced topics</a> » <a class="trail" href="glossary.html" title="Glossary">Glossary</a> › <a class="trail" href="glossary.html#filetypes" title="Filetypes">Filetypes</a> » </div></div></div>
+<a class="trail" href="glossary.html" title="Glossary">Glossary</a> › <a class="trail" href="glossary.html#filetypes" title="Filetypes">Filetypes</a> » </div></div></div>
 <div class="body">
 <div class="hgroup"><h1 class="title"><span class="title">.M3U files</span></h1></div>
 <div class="region">
 <div class="contents">
-<p class="p">M3U files also contain playlists, like .pls files. But they are often used by locally installed audio players.</p>
+<p class="p">M3U files also contain playlists, like .pls files. They're often used by desktop audio players.</p>
 <p class="p">The MIME type of these files is audio/x-mpegurl and they often look like: </p>
-<p class="p"><span class="code">
-#M3U
+<div class="code"><pre class="contents ">#M3U
 http://123.45.67.189:8222/
-http://123.45.67.222:7555/
-</span></p>
+http://123.45.67.222:7555/</pre></div>
 </div>
 <div class="sect sect-links" role="navigation">
 <div class="hgroup"></div>
diff --git a/help/html/internet_radio_org_uk.html b/help/html/modarchive.html
similarity index 58%
copy from help/html/internet_radio_org_uk.html
copy to help/html/modarchive.html
index 61b1ad6..bbc48a9 100644
--- a/help/html/internet_radio_org_uk.html
+++ b/help/html/modarchive.html
@@ -2,7 +2,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
-<title>Internet-Radio.org.uk</title>
+<title>The MOD Archive</title>
 <link rel="stylesheet" type="text/css" href="C.css">
 <script type="text/javascript" src="jquery.js"></script><script type="text/javascript" src="jquery.syntax.js"></script><script type="text/javascript" src="yelp.js"></script>
 </head>
@@ -12,18 +12,35 @@
 <a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#browsing" title="Browsing channels and radio stations">Browsing channels and radio stations</a> » <a class="trail" href="channels.html" title="Channels">Channels</a> › <a class="trail" href="channels.html#list" title="Available channels">Available channels</a> » </div>
 <div class="trail">
 <a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#channels" title="Channel tabs">Channel tabs</a> » </div>
-<div class="trail">
-<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#configuration" title="Configuration">Configuration</a> » <a class="trail" href="configuration.html" title="Settings dialog">Settings dialog</a> › <a class="trail" href="configuration.html#plugins" title="Plugin and Channel settings">Plugin and Channel settings</a> » </div>
 </div></div>
 <div class="body">
-<div class="hgroup"><h1 class="title"><span class="title">Internet-Radio.org.uk</span></h1></div>
+<div class="hgroup">
+<h1 class="title"><span class="title">The MOD Archive</span></h1>
+<h2 class="subtitle"><span class="subtitle"><span class="link"><a href="http://modarchive.org/" title="http://modarchive.org/">//modarchive.org/</a></span></span></h2>
+</div>
 <div class="region">
 <div class="contents">
-<p class="p">I-R.org.uk is a good alternative to Shoutcast. It also lacks channel homepage in most
-	cases, but is a likewise encyclopedical directory. Genres are similiar to Shoutcast.</p>
-<div class="note" title="Note"><div class="inner"><div class="region"><div class="contents"><p class="p">Note that this plugin uses its own setting for how many links to retrieve. Instead
-	of stream numbers, it only counts pages. This is a lazyness related bug.</p></div></div></div></div>
+<p class="p">MODArchive is a collection of module/tracker files. It's a community project, and
+        categorizes individual audio files. You'll need a MOD-capable audio player.</p>
+<div class="list"><div class="inner"><div class="region"><ul class="list">
+<li class="list"><p class="p">XMP/libxmp</p></li>
+<li class="list"><p class="p">MikMod</p></li>
+<li class="list"><p class="p">MODPlug for XMMS</p></li>
+<li class="list"><p class="p">GModplay</p></li>
+<li class="list"><p class="p">VLC (built-in support)</p></li>
+</ul></div></div></div>
 </div>
+<div id="options" class="sect"><div class="inner">
+<div class="hgroup"><h2 class="title"><span class="title">Configuration</span></h2></div>
+<div class="region"><div class="contents">
+<p class="p">See <span class="link"><a href="recording.html" title="Recording">recording configuration</a></span> if you
+	want to enable the download mode.</p>
+<div class="note" title="Note"><div class="inner"><div class="region"><div class="contents"><p class="p">Audio files are packaged up in ZIP files on MODArchive. 
+	While they are different formats (IT, S3M, XM, etc) they'll all
+	carry a generic <span class="var">audio/mod+zip</span> type specifier in
+	streamtuner2.</p></div></div></div></div>
+</div></div>
+</div></div>
 <div class="sect sect-links" role="navigation">
 <div class="hgroup"></div>
 <div class="contents"><div class="links guidelinks"><div class="inner">
@@ -31,7 +48,6 @@
 <div class="region"><ul>
 <li class="links "><a href="channels.html#list" title="Available channels">Available channels</a></li>
 <li class="links "><a href="index.html#channels" title="Channel tabs">Channel tabs</a></li>
-<li class="links "><a href="configuration.html#plugins" title="Plugin and Channel settings">Plugin and Channel settings</a></li>
 </ul></div>
 </div></div></div>
 </div>
diff --git a/help/html/myoggradio.html b/help/html/myoggradio.html
index 4c0dc75..d904402 100644
--- a/help/html/myoggradio.html
+++ b/help/html/myoggradio.html
@@ -13,42 +13,73 @@
 <div class="trail">
 <a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#channels" title="Channel tabs">Channel tabs</a> » </div>
 <div class="trail">
-<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#configuration" title="Configuration">Configuration</a> » <a class="trail" href="configuration.html" title="Settings dialog">Settings dialog</a> › <a class="trail" href="configuration.html#plugins" title="Plugin and Channel settings">Plugin and Channel settings</a> » </div>
+<a class="trail" href="glossary.html" title="Glossary">Glossary</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » <a class="trail" href="pluginmanager2.html" title="Plugin Manager 2">Plugin Manager 2</a> » <a class="trail" href="configuration.html#plugins" title="Channel and feature plugins and settings">Channel and feature plugins and settings</a> » </div>
+<div class="trail">
+<a class="trail" href="technical.html" title="Technical information">Technical information</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » <a class="trail" href="pluginmanager2.html" title="Plugin Manager 2">Plugin Manager 2</a> » <a class="trail" href="configuration.html#plugins" title="Channel and feature plugins and settings">Channel and feature plugins and settings</a> » </div>
 </div></div>
 <div class="body">
-<div class="hgroup"><h1 class="title"><span class="title">MyOggRadio</span></h1></div>
+<div class="hgroup">
+<h1 class="title"><span class="title">MyOggRadio</span></h1>
+<h2 class="subtitle"><span class="subtitle"><span class="link"><a href="http://myoggradio.org/" title="http://myoggradio.org/">//myoggradio.org/</a></span></span></h2>
+</div>
 <div class="region">
 <div class="contents">
 <p class="p"><span class="link"><a href="http://ehm.homelinux.org/MyOggRadio/" title="http://ehm.homelinux.org/MyOggRadio/">MyOggRadio</a></span> is an open
-        source internet radio directory project. Since it provides its station list as
-	JSON it is very well supported.</p>
-<p class="p">Because the directory is currently still rather small, streamtuner2 provides the
-	option to share radion station links. Use the <span class="guiseq"><span class="gui">Station</span> ▸ <span class="gui">Extensions</span> ▸ <span class="gui">Share...</span></span>
-	menu entry to upload the currently selected radio (from your favourite bookmarks).</p>
-<p class="p">The personal section is empty, unless you specify an user account in the settings
-	and actually bookmarks stations on the MyOggRadio web site. Shared entries are not
-	automatically in the MOR favorite list.</p>
-<div class="terms"><div class="inner">
-<div class="title title-terms"><h2><span class="title">Channel options.</span></h2></div>
-<div class="region"><dl class="terms">
+source internet radio directory project.</p>
+<p class="p">Since it provides its station list as JSON it's very well supported.</p>
+</div>
+<div id="" class="sect"><div class="inner">
+<div class="hgroup"><h2 class="title"><span class="title">Sharing is caring</span></h2></div>
+<div class="region"><div class="contents"><p class="p">To help with populating the directory further,
+  streamtuner2 provides an option to share radion station links.
+  Use the <span class="guiseq"><span class="gui">Station</span> ▸ <span class="gui">Share on MyOggRadio...</span></span>
+  context menu entry to upload a selected radio (e.g. from your bookmarks).</p></div></div>
+</div></div>
+<div id="" class="sect"><div class="inner">
+<div class="hgroup"><h2 class="title"><span class="title">Personal</span></h2></div>
+<div class="region"><div class="contents">
+<p class="p">The personal section is empty per default. You need to specify an user account
+  in the settings dialog, and actually bookmark stations in the MyOggRadio web site.
+  Shared entries aren't automatically in the <span class="gui">personal</span> list.</p>
+<div class="note note-tip" title="Tip"><div class="inner"><div class="region"><div class="contents"><p class="p">MyOggRadio also has a neat cross-platform player:
+  <span class="link"><a href="http://freshcode.club/projects/jmorp" title="http://freshcode.club/projects/jmorp">JMyOggRadioPlayer</a></span>.</p></div></div></div></div>
+</div></div>
+</div></div>
+<div id="options" class="sect"><div class="inner">
+<div class="hgroup"><h2 class="title"><span class="title">Channel options.</span></h2></div>
+<div class="region"><div class="contents"><div class="terms"><div class="inner"><div class="region"><dl class="terms">
 <dt class="terms"><span class="code">Login settings</span></dt>
-<dd class="terms"><p class="p">If you want to upload station infos to MyOggRadio, you need an account there. Registration
-    is free and doesn't require personal information nor email address. Specify username and
-    password separated with a : colon in this field.</p></dd>
+<dd class="terms">
+<p class="p">If you want to upload station infos to MyOggRadio, you need an account there.
+    Registration is free and doesn't require personal information nor email address.
+    Specify it as <span class="input">username:password</span> separated with a : colon in this field.</p>
+<div class="note note-advanced" title="Advanced"><div class="inner"><div class="region"><div class="contents">
+<p class="p">Alternatively you can store your account settings in the central
+      <span class="file">~/.netrc</span> config file. Or in <span class="file">~/.config/netrc</span> even.</p>
+<p class="p">Your entry for MyOggRadio should follow the common format:</p>
+<div class="code"><pre class="contents ">machine myoggradio.org
+    login usr123
+    password pw123</pre></div>
+<p class="p">Which is useful because it's a standard format, and prevents
+      leaking authorization data into per-application config stores.
+      Note that a user:pw setting in streamtuner still takes precedence
+      however.</p>
+</div></div></div></div>
+</dd>
 <dt class="terms"><span class="code">stream URL format</span></dt>
-<dd class="terms"><p class="p">When uploading stations, the streaming URL can be converted into RAW format. You
-    can however leave it as .PLS link file.</p></dd>
-</dl></div>
+<dd class="terms"><p class="p">When uploading stations, the streaming URL can be converted into
+    raw/direct server address. When undefined, station URLs are left as
+    .M3U/.PLS link.</p></dd>
+</dl></div></div></div></div></div>
 </div></div>
-</div>
 <div class="sect sect-links" role="navigation">
 <div class="hgroup"></div>
 <div class="contents"><div class="links guidelinks"><div class="inner">
 <div class="title"><h2><span class="title">More Information</span></h2></div>
 <div class="region"><ul>
 <li class="links "><a href="channels.html#list" title="Available channels">Available channels</a></li>
+<li class="links "><a href="configuration.html#plugins" title="Channel and feature plugins and settings">Channel and feature plugins and settings</a></li>
 <li class="links "><a href="index.html#channels" title="Channel tabs">Channel tabs</a></li>
-<li class="links "><a href="configuration.html#plugins" title="Plugin and Channel settings">Plugin and Channel settings</a></li>
 </ul></div>
 </div></div></div>
 </div>
diff --git a/help/html/playing.html b/help/html/playing.html
index 7041746..650239a 100644
--- a/help/html/playing.html
+++ b/help/html/playing.html
@@ -12,23 +12,26 @@
 <a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#browsing" title="Browsing channels and radio stations">Browsing channels and radio stations</a> » </div>
 <div class="trail">
 <a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#browsing" title="Browsing channels and radio stations">Browsing channels and radio stations</a> » <a class="trail" href="streams.html" title="Streams / Stations">Streams / Stations</a> › <a class="trail" href="streams.html#actions" title="Actions">Actions</a> » </div>
+<div class="trail">
+<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#browsing" title="Browsing channels and radio stations">Browsing channels and radio stations</a> » <a class="trail" href="streams.html" title="Streams / Stations">Streams / Stations</a> » <a class="trail" href="index.html#functions" title="Functions">Functions</a> » </div>
 </div></div>
 <div class="body">
 <div class="hgroup"><h1 class="title"><span class="title">Playing</span></h1></div>
 <div class="region">
 <div class="contents">
-<p class="p">Simply double click a station to start it with your audio player.</p>
+<p class="p">To start playing a station, you can:</p>
+<div class="list"><div class="inner"><div class="region"><ul class="list">
+<li class="list"><p class="p">Just <span class="em">double click</span> an entry.</p></li>
+<li class="list"><p class="p">Use the <span class="key"><kbd>▶ play</kbd></span> toolbar button.</p></li>
+<li class="list"><p class="p">Right click for the context menu and the <span class="key"><kbd>play</kbd></span> action.</p></li>
+<li class="list"><p class="p">Drag and drop it directly into your audio player.</p></li>
+<li class="list"><p class="p">Save it (<span class="key"><kbd>F2</kbd></span>) to a playlist file, then start your player with that.</p></li>
+</ul></div></div></div>
 <p class="p">In streamtuner2 you can configure different audio players for different audio
-        formats. In the 'Apps' section of the settings dialog, there is one application associated
-        with each audio file (MIME) type. Per default this is audacious, but you can certainly use
-        any other application.</p>
-<div class="note" title="Note"><div class="inner"><div class="region"><div class="contents"><p class="p">Note however, that some audio players will start twice and won't
-        allow easy station switching. In these circumstance it might be sensible to write
-        a wrapper script, or configure special commandline arguments to your favoured audio
-        player.</p></div></div></div></div>
-<p class="p">It's also possible to save a station entry as .m3u or .pls file, and load this manually
-        in your player. You might even want to collect such .m3u files for archival / backup
-        purposes.</p>
+        formats (MP3 or OGG). In the <span class="link"><a href="config_apps.html" title="Audio players">Apps</a></span> section of the
+        <span class="link"><a href="configuration.html" title="Settings dialog">settings dialog</a></span>, you can associate one player
+        with each audio file (MIME) type. Nowadays you can often configure the same player
+        for all audio (and even video) types.</p>
 </div>
 <div class="sect sect-links" role="navigation">
 <div class="hgroup"></div>
@@ -37,6 +40,7 @@
 <div class="region"><ul>
 <li class="links "><a href="streams.html#actions" title="Actions">Actions</a></li>
 <li class="links "><a href="index.html#browsing" title="Browsing channels and radio stations">Browsing channels and radio stations</a></li>
+<li class="links "><a href="index.html#functions" title="Functions">Functions</a></li>
 </ul></div>
 </div></div></div>
 </div>
diff --git a/help/html/pls.html b/help/html/pls.html
index b7d1f0d..8b04754 100644
--- a/help/html/pls.html
+++ b/help/html/pls.html
@@ -8,21 +8,20 @@
 </head>
 <body><div class="page" role="main">
 <div class="header"><div class="trails" role="navigation"><div class="trail">
-<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#advanced" title="Advanced topics">Advanced topics</a> » <a class="trail" href="glossary.html" title="Glossary">Glossary</a> › <a class="trail" href="glossary.html#filetypes" title="Filetypes">Filetypes</a> » </div></div></div>
+<a class="trail" href="glossary.html" title="Glossary">Glossary</a> › <a class="trail" href="glossary.html#filetypes" title="Filetypes">Filetypes</a> » </div></div></div>
 <div class="body">
 <div class="hgroup"><h1 class="title"><span class="title">.PLS files</span></h1></div>
 <div class="region">
 <div class="contents">
 <p class="p">Playlist files often have the extension .pls</p>
-<p class="p">It's the primary station stream link format of SHOUTcast.</p>
-<p class="p">The MIME type of these files is audio/x-scpls and they often look like: </p>
-<p class="p"><span class="code">
-[playlist]
+<p class="p">It's the primary station stream link format of SHOUTcast, and was
+	popularized by WinAmp.</p>
+<p class="p">The MIME type of these files is <span class="sys">audio/x-scpls</span> and they often look like: </p>
+<div class="code"><pre class="contents ">[playlist]
 numberofentries=1
 File1=http://123.45.67.189:8222
 Title1=(#1 - 555/2000) radio station Xyz - top 100 - all the hitzez
-Length1=-1
-</span></p>
+Length1=-1</pre></div>
 </div>
 <div class="sect sect-links" role="navigation">
 <div class="hgroup"></div>
diff --git a/help/html/pluginmanager2.html b/help/html/pluginmanager2.html
new file mode 100644
index 0000000..9ffcc7a
--- /dev/null
+++ b/help/html/pluginmanager2.html
@@ -0,0 +1,95 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
+<title>Plugin Manager 2</title>
+<link rel="stylesheet" type="text/css" href="C.css">
+<script type="text/javascript" src="jquery.js"></script><script type="text/javascript" src="jquery.syntax.js"></script><script type="text/javascript" src="yelp.js"></script>
+</head>
+<body><div class="page" role="main">
+<div class="header"><div class="trails" role="navigation">
+<div class="trail">
+<a class="trail" href="glossary.html" title="Glossary">Glossary</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » </div>
+<div class="trail">
+<a class="trail" href="technical.html" title="Technical information">Technical information</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » </div>
+</div></div>
+<div class="body">
+<div class="hgroup"><h1 class="title"><span class="title">Plugin Manager 2</span></h1></div>
+<div class="region">
+<div class="contents">
+<p class="p">For updating or installing new plugins (extra channels or
+	features), there's a user plugin manager. It's available as
+	feature extension itself.</p>
+<div class="steps"><div class="inner"><div class="region"><ol class="steps">
+<li class="steps"><p class="p">See the <span class="key"><kbd>F12</kbd></span> config dialog <span class="key"><kbd>🔌 Feature</kbd></span> section.</p></li>
+<li class="steps"><p class="p">Enable the <span class="key"><kbd>⨯</kbd></span> Plugin Manager (listed near the end).</p></li>
+<li class="steps"><p class="p">Restart streamtuner2 one last time for this change to take effect.</p></li>
+</ol></div></div></div>
+<p class="p">Once activated it brings up a new <span class="key"><kbd>📦 Add</kbd></span> tab
+	in the configuration window.</p>
+<p class="p"><span class="media"><span class="media media-image"><img src="img/pluginmanager2.png" class="media media-inline" alt="Install dialog for user plugins"></span></span></p>
+<p class="p">You can scan for available/new plugins there. And have them
+	downloaded right away. New plugins are just downloaded, not
+	implictly enabled. Reopen the config dialog to see them in the
+	regular <span class="key"><kbd>📻 Channels</kbd></span> or <span class="key"><kbd>🔌 Feature</kbd></span> tabs, and
+	then enable them.</p>
+<div class="note" title="Note"><div class="inner"><div class="region"><div class="contents"><p class="p">Updated plugins will not be automatically loaded if they
+	were enable already. That requires either a restart, or disabling +
+	saving once, then reenabling them.</p></div></div></div></div>
+<div class="links topiclinks"><div class="inner"><div class="region"><div class="linkdiv "><a class="linkdiv" href="configuration.html#plugins" title="Channel and feature plugins and settings"><span class="title">Channel and feature plugins and settings</span></a></div></div></div></div>
+</div>
+<div id="configuration" class="sect"><div class="inner">
+<div class="hgroup"><h2 class="title"><span class="title">Configuration</span></h2></div>
+<div class="region"><div class="contents"><div class="list"><div class="inner"><div class="region"><ul class="list">
+<li class="list"><p class="p">Alternative download repositories may be configured. (Little
+	practical value at the moment.)</p></li>
+<li class="list">
+<p class="p">And you can let the plugin manager handle autoactivation
+	of changed plugin states.</p>
+<div class="list"><div class="inner"><div class="region"><ul class="list">
+<li class="list"><p class="p">After reconfiguring existing channel plugins, they get
+   	  automatically instantiated or disabled in the user interface.
+   	  (Which avoids the usual restart).</p></li>
+<li class="list"><p class="p">This currently doesn't work with feature/core
+   	  plugins. Plugin deactivation is mostly visual, but does not undo
+   	  menu extensions or undefine callback hooks.</p></li>
+</ul></div></div></div>
+</li>
+</ul></div></div></div></div></div>
+</div></div>
+<div id="configuration" class="sect"><div class="inner">
+<div class="hgroup"><h2 class="title"><span class="title">User plugins</span></h2></div>
+<div class="region"><div class="contents">
+<p class="p">Downloaded plugins are stored in <span class="file">~/.config/streamtuner2/plugins</span>.
+	To remove them, delete the individual *.py files there manually.</p>
+<div class="note note-bug" title="Bug"><div class="inner"><div class="region"><div class="contents">
+<p class="p">Currently system-installed core plugins take
+	precedence over downloaded updates.</p>
+<p class="p">And you'll have to take care to eventually refresh/delete outdated user plugins,
+	whenever you install a newer Streamtuner2 version.</p>
+</div></div></div></div>
+</div></div>
+</div></div>
+<div id="" class="sect"><div class="inner">
+<div class="hgroup"><h3 class="subtitle"><span class="subtitle">Disable user plugin loading</span></h3></div>
+<div class="region"><div class="contents">
+<p class="p">Since this is still rather experimental, you may disable all
+	associated features by starting ST2 via:</p>
+<div class="screen"><pre class="contents ">streamtuner2 -d <span class="input">pluginmanager2</span></pre></div>
+<p class="p">That'll inhibit loading this extension plugin. (Also works
+	with any other plugin id.)</p>
+</div></div>
+</div></div>
+<div class="sect sect-links" role="navigation">
+<div class="hgroup"></div>
+<div class="contents"><div class="links guidelinks"><div class="inner">
+<div class="title"><h2><span class="title">More Information</span></h2></div>
+<div class="region"><ul><li class="links "><a href="index.html#extra" title="Additional features">Additional features</a></li></ul></div>
+</div></div></div>
+</div>
+</div>
+<div class="clear"></div>
+</div>
+<div class="footer"></div>
+</div></body>
+</html>
diff --git a/help/html/radionomy.html b/help/html/radionomy.html
new file mode 100644
index 0000000..f556015
--- /dev/null
+++ b/help/html/radionomy.html
@@ -0,0 +1,69 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
+<title>Radionomy</title>
+<link rel="stylesheet" type="text/css" href="C.css">
+<script type="text/javascript" src="jquery.js"></script><script type="text/javascript" src="jquery.syntax.js"></script><script type="text/javascript" src="yelp.js"></script>
+</head>
+<body><div class="page" role="main">
+<div class="header"><div class="trails" role="navigation">
+<div class="trail">
+<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#browsing" title="Browsing channels and radio stations">Browsing channels and radio stations</a> » <a class="trail" href="channels.html" title="Channels">Channels</a> › <a class="trail" href="channels.html#list" title="Available channels">Available channels</a> » </div>
+<div class="trail">
+<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#channels" title="Channel tabs">Channel tabs</a> » </div>
+<div class="trail">
+<a class="trail" href="glossary.html" title="Glossary">Glossary</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » <a class="trail" href="pluginmanager2.html" title="Plugin Manager 2">Plugin Manager 2</a> » <a class="trail" href="configuration.html#plugins" title="Channel and feature plugins and settings">Channel and feature plugins and settings</a> » </div>
+<div class="trail">
+<a class="trail" href="technical.html" title="Technical information">Technical information</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » <a class="trail" href="pluginmanager2.html" title="Plugin Manager 2">Plugin Manager 2</a> » <a class="trail" href="configuration.html#plugins" title="Channel and feature plugins and settings">Channel and feature plugins and settings</a> » </div>
+</div></div>
+<div class="body">
+<div class="hgroup">
+<h1 class="title"><span class="title">Radionomy</span></h1>
+<h2 class="subtitle"><span class="subtitle"><span class="link"><a href="http://radionomy.com/" title="http://radionomy.com/">//radionomy.com/</a></span></span></h2>
+</div>
+<div class="region">
+<div class="contents">
+<p class="p">Radionomy is an internet radio streaming provider, orginally
+	founded in Belgium.  It commands a pretty big slice of the worldwide
+	internet radio stuff these days. - It took over Shoutcast.com for
+	instance.</p>
+<p class="p">Their primary directory on Radionomy.com only lists stations
+	which radionomy itself hosts streaming servers for.  It's over 6000
+	already.  Both listening and station hosting are free (given agreement
+	to autoplay advertisements, and a minimum quota of daily listeners). 
+	Radionomy is therefore pretty popular and growing.</p>
+<p class="p">The extraction method in streamtuner2 uses a mix of RegExp,
+	DOM traversal, and JSON extraction, with some AJAX updating spiced
+	in. It closely follows the website scheme to fetch station lists.
+	Instead of favicons smaller station logos are displayed (25px
+	in contrast to the usual 16px).
+	</p>
+</div>
+<div id="options" class="sect"><div class="inner">
+<div class="hgroup"><h2 class="title"><span class="title">Configuration</span></h2></div>
+<div class="region"><div class="contents">
+<p class="p"> You can configure the number of pages it'll try (<span class="key"><kbd>3</kbd></span> by
+  	 default) to influence the length of station lists.</p>
+<p class="p"> And the song title updating ("<span class="key"><kbd>OnAir Updates</kbd></span>") can be disabled.
+	 Future versions of this channel plugin might poll it automatically,
+	 and keep the station list auto-updated.</p>
+</div></div>
+</div></div>
+<div class="sect sect-links" role="navigation">
+<div class="hgroup"></div>
+<div class="contents"><div class="links guidelinks"><div class="inner">
+<div class="title"><h2><span class="title">More Information</span></h2></div>
+<div class="region"><ul>
+<li class="links "><a href="channels.html#list" title="Available channels">Available channels</a></li>
+<li class="links "><a href="configuration.html#plugins" title="Channel and feature plugins and settings">Channel and feature plugins and settings</a></li>
+<li class="links "><a href="index.html#channels" title="Channel tabs">Channel tabs</a></li>
+</ul></div>
+</div></div></div>
+</div>
+</div>
+<div class="clear"></div>
+</div>
+<div class="footer"></div>
+</div></body>
+</html>
diff --git a/help/html/recording.html b/help/html/recording.html
index b273c7c..e8a122c 100644
--- a/help/html/recording.html
+++ b/help/html/recording.html
@@ -11,26 +11,119 @@
 <div class="trail">
 <a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#browsing" title="Browsing channels and radio stations">Browsing channels and radio stations</a> » <a class="trail" href="streams.html" title="Streams / Stations">Streams / Stations</a> › <a class="trail" href="streams.html#actions" title="Actions">Actions</a> » </div>
 <div class="trail">
-<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#configuration" title="Configuration">Configuration</a> » <a class="trail" href="configuration.html" title="Settings dialog">Settings dialog</a> › <a class="trail" href="configuration.html#apps" title="Player application settings">Player application settings</a> » </div>
+<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#browsing" title="Browsing channels and radio stations">Browsing channels and radio stations</a> » <a class="trail" href="streams.html" title="Streams / Stations">Streams / Stations</a> » <a class="trail" href="index.html#functions" title="Functions">Functions</a> » </div>
 <div class="trail">
-<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#functions" title="Functions">Functions</a> » </div>
+<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#configuration" title="Configuration">Configuration</a> » <a class="trail" href="configuration.html" title="Settings dialog">Settings dialog</a> › <a class="trail" href="configuration.html#recording" title="Recording Apps">Recording Apps</a> » </div>
 </div></div>
 <div class="body">
 <div class="hgroup"><h1 class="title"><span class="title">Recording</span></h1></div>
 <div class="region">
 <div class="contents">
-<p class="p">Most stations that stream MP3 or OGG music can be recorded. This is accomplished by
-        the commandline tool "streamripper". If you select a station a press the [record] button,
-        a console window should appear. Within that streamripper outputs its current activity.</p>
-<p class="p">Per default recorded streams are written into the current directory. Often this is your
-        home directory. And streamripper automatically creates a directory with the recorded
-        radio station title as name. Within that directory the individual music titles are split
-        into separate .mp3 files.</p>
-<p class="p">You can influence all these behaviours with -arguments to the streamripper program.
-        Please refer to the manpage of streamripper. The options are too various to list here.
-        You can set default arguments (e.g. another default save directory) in the 'Apps' section of
-        the streamtuner2 configuration dialog.</p>
+<p class="p">Most stations that stream MP3 or OGG music can be recorded. This is
+accomplished through the command-line tool <span class="app">streamripper</span>.  If you
+select a station and press <span class="gui">● record</span>, a console
+window should appear, where streamripper shows its progress.</p>
+<p class="p">You can <span class="link"><a href="configuration.html" title="Settings dialog">configure the recording tool</a></span> according to audio types again.</p>
 </div>
+<div id="" class="sect"><div class="inner">
+<div class="hgroup"><h2 class="title"><span class="title">Streamripper</span></h2></div>
+<div class="region"><div class="contents">
+<p class="p">There's already a default entry for recording radio stations:</p>
+<div class="table"><div class="inner"><div class="region"><table class="table">
+<thead><tr>
+<td><p class="p">Format</p></td>
+<td style="border-left-style: solid;"><p class="p">Application</p></td>
+</tr></thead>
+<tr>
+<td><p class="p"><span class="var">audio/*</span></p></td>
+<td style="border-left-style: solid;"><p class="p"><span class="cmd">xterm -e streamripper %srv</span></p></td>
+</tr>
+</table></div></div></div>
+<p class="p">Streamripper has a few more options of its own:</p>
+<div class="steps"><div class="inner"><div class="region"><ol class="steps">
+<li class="steps">
+<p class="p">To define an exact download directory:</p>
+<div class="list"><div class="inner"><div class="region"><ul class="list"><li class="list"><p class="p"><span class="cmd">xterm -e "streamripper -d ~/Music/ %srv"</span></p></li></ul></div></div></div>
+</li>
+<li class="steps">
+<p class="p">Use a specific filename pattern:</p>
+<div class="list"><div class="inner"><div class="region"><ul class="list"><li class="list"><p class="p"><span class="cmd">xterm -e "streamripper --xs2 -D '%S-%A-%T-%a.mp3' %srv"</span></p></li></ul></div></div></div>
+</li>
+<li class="steps">
+<p class="p">Just record a continuous stream, for 1 hour, without splitting individual songs from a radio station:</p>
+<div class="list"><div class="inner"><div class="region"><ul class="list"><li class="list"><p class="p"><span class="cmd">xterm -e "streamripper -A -s 3600 -d ~/Music/ %srv"</span></p></li></ul></div></div></div>
+</li>
+<li class="steps">
+<p class="p">Pretend to be an audio player (in case recording is blocked):</p>
+<div class="list"><div class="inner"><div class="region"><ul class="list"><li class="list"><p class="p"><span class="cmd">streamripper -u 'WinampMPEG/5.0' %srv</span></p></li></ul></div></div></div>
+</li>
+</ol></div></div></div>
+<p class="p">Whenever you leave out the <span class="cmd">xterm</span> prefix, it runs silently in the background.
+Common xterm alternatives are <span class="cmd">x-terminal-emulator</span>, or <span class="cmd">rxvt</span>,
+<span class="cmd">gnome-terminal</span>, and <span class="cmd">xfce4-terminal</span> etc.</p>
+<p class="p">See the streamripper(1) man page or its
+<span class="link"><a href="http://streamripper.sourceforge.net/faq.php" title="http://streamripper.sourceforge.net/faq.php">FAQ</a></span> for more tips.</p>
+</div></div>
+</div></div>
+<div id="" class="sect"><div class="inner">
+<div class="hgroup"><h2 class="title"><span class="title">fIcy/fPls</span></h2></div>
+<div class="region"><div class="contents">
+<p class="p">As alternative to streamripper, check out <span class="link"><a href="http://freshcode.club/projects/ficy" title="http://freshcode.club/projects/ficy">fIcy/fPls</a></span>
+for recording ICEcast/SHOUTcast streaming servers.</p>
+<p class="p">It can be configured just as easily with:</p>
+<div class="steps"><div class="inner"><div class="region"><ol class="steps"><li class="steps"><p class="p"><span class="cmd">xterm -e "fPls %pls"</span></p></li></ol></div></div></div>
+</div></div>
+</div></div>
+<div id="" class="sect"><div class="inner">
+<div class="hgroup"><h2 class="title"><span class="title">Graphical stream recording tools</span></h2></div>
+<div class="region"><div class="contents">
+<p class="p">You can also try a streamripper GUI or graphical
+reimplementation:</p>
+<div class="list"><div class="inner"><div class="region"><ul class="list">
+<li class="list"><p class="p"><span class="link"><a href="http://sourceforge.net/projects/stripper/" title="http://sourceforge.net/projects/stripper/">StreamRipStar</a></span> (Java), works best per drag and drop; set the DND format to PLS or M3U however.</p></li>
+<li class="list"><p class="p"><span class="link"><a href="http://launchpad.net/streamtastic" title="http://launchpad.net/streamtastic">Streamtastic</a></span> (Java), only imports a text entry per drag and drop.</p></li>
+<li class="list"><p class="p"><span class="link"><a href="http://kstreamripper.sourceforge.net/" title="http://kstreamripper.sourceforge.net/">KStreamRipper</a></span>, though no current version in distros.</p></li>
+<li class="list"><p class="p">VLC has built-in recording capabilities.</p></li>
+</ul></div></div></div>
+<p class="p">Which all simplify defining a custom download directory, or how radio
+streams are split (between advertisement breaks), and the naming scheme
+for resulting *.mp3 filenames of course.</p>
+</div></div>
+</div></div>
+<div id="" class="sect"><div class="inner">
+<div class="hgroup"><h2 class="title"><span class="title">Youtube-DL</span></h2></div>
+<div class="region"><div class="contents">
+<p class="p">The recording settings already have a specific entry for "video/youtube" URLs.</p>
+<p class="p">To configure a custom download directory, use:</p>
+<div class="steps"><div class="inner"><div class="region"><ol class="steps"><li class="steps"><p class="p"><span class="cmd">xterm -e "cd /media/music ; youtube-dl %srv"</span></p></li></ol></div></div></div>
+<p class="p">The <span class="cmd">cd</span> trick also works with streamripper, or other tools.</p>
+</div></div>
+</div></div>
+<div id="" class="sect"><div class="inner">
+<div class="hgroup"><h2 class="title"><span class="title">Wget for MOD files</span></h2></div>
+<div class="region"><div class="contents">
+<p class="p">To download audio files from The MOD Archive directly, you can also
+define a custom handler.</p>
+<div class="steps"><div class="inner"><div class="region"><ol class="steps">
+<li class="steps"><p class="p">Scroll/click on the ⎘ empty row in the recording application list.</p></li>
+<li class="steps">
+<p class="p">There create a new recording MIME type:</p>
+<div class="list"><div class="inner"><div class="region"><ul class="list"><li class="list"><p class="p"><span class="var">audio/mod+zip</span></p></li></ul></div></div></div>
+</li>
+<li class="steps">
+<p class="p">Specifiy a command like:</p>
+<div class="list"><div class="inner"><div class="region"><ul class="list">
+<li class="list"><p class="p"><span class="cmd">xterm -e wget %srv</span></p></li>
+<li class="list"><p class="p"><span class="cmd">cd ~/Desktop ; wget %srv</span></p></li>
+<li class="list"><p class="p"><span class="cmd">curl %srv</span></p></li>
+</ul></div></div></div>
+</li>
+</ol></div></div></div>
+<p class="p">
+All MOD file formats (IT, XM, S3M, etc.) are mapped to this generic type specifier.
+</p>
+</div></div>
+</div></div>
 <div class="sect sect-links" role="navigation">
 <div class="hgroup"></div>
 <div class="contents"><div class="links guidelinks"><div class="inner">
@@ -38,7 +131,7 @@
 <div class="region"><ul>
 <li class="links "><a href="streams.html#actions" title="Actions">Actions</a></li>
 <li class="links "><a href="index.html#functions" title="Functions">Functions</a></li>
-<li class="links "><a href="configuration.html#apps" title="Player application settings">Player application settings</a></li>
+<li class="links "><a href="configuration.html#recording" title="Recording Apps">Recording Apps</a></li>
 </ul></div>
 </div></div></div>
 </div>
diff --git a/help/html/reloading.html b/help/html/reloading.html
index 9e702d7..798cbf0 100644
--- a/help/html/reloading.html
+++ b/help/html/reloading.html
@@ -14,8 +14,9 @@
 <div class="region">
 <div class="contents">
 <p class="p">Station information can get stale. Especially Shoutcast invalidates old information
-        frequently. Therefore you have to [reload] the lists. There is an action button below
-        the menu bar for this. It retrieves the current data from the directory service.</p>
+        frequently. Therefore you have to <span class="guiseq"><span class="gui"></span> ▸ <span class="gui">Reload</span></span> the lists.
+        There is an action button below the menu bar for this.
+        It retrieves the current data from the directory service.</p>
 <p class="p">Favicons aren't loaded automatically. There is a menu entry in Channels for that, which
         works in the background and doesn't display the new icons automatically either. Simply
         reselect the category/genre in the left pane. Or again, use the station reload button.</p>
diff --git a/help/html/saving.html b/help/html/saving.html
index 5f15cc3..f9cff44 100644
--- a/help/html/saving.html
+++ b/help/html/saving.html
@@ -11,19 +11,23 @@
 <div class="trail">
 <a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#browsing" title="Browsing channels and radio stations">Browsing channels and radio stations</a> » <a class="trail" href="streams.html" title="Streams / Stations">Streams / Stations</a> › <a class="trail" href="streams.html#actions" title="Actions">Actions</a> » </div>
 <div class="trail">
-<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#functions" title="Functions">Functions</a> » </div>
+<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#browsing" title="Browsing channels and radio stations">Browsing channels and radio stations</a> » <a class="trail" href="streams.html" title="Streams / Stations">Streams / Stations</a> » <a class="trail" href="index.html#functions" title="Functions">Functions</a> » </div>
 </div></div>
 <div class="body">
 <div class="hgroup"><h1 class="title"><span class="title">Saving</span></h1></div>
 <div class="region">
 <div class="contents">
-<p class="p">You can export the currently selected stream using <span class="guiseq"><span class="gui">Station</span> ▸ <span class="gui">Save</span></span>. A file
-	dialog opens, where you can adapt the title. The extension of the filename decides on
-	the saved link format. Per default a .m3u file is created, because most audio players
-	understand this format.</p>
-<p class="p"> But you can also save in .pls
-	or .xspf or .asx or .smil format. Note that the lower right dropdown
-	has no effect, you must edit the filename field.</p>
+<p class="p">You can export the currently selected stream using
+	<span class="guiseq"><span class="gui">Station</span> ▸ <span class="gui">Save</span></span> or by pressing
+	<span class="key"><kbd>F2</kbd></span>.  A file dialog opens, where you can adapt the title.
+	</p>
+<p class="p">The extension of the filename decides on the saved link format.  Per
+	default a .m3u file is created, because that's what most audio players
+	understand.</p>
+<div class="note" title="Note"><div class="inner"><div class="region"><div class="contents"><p class="p"> You can also save in <span class="file">.pls</span> or <span class="file">.xspf</span>
+	or <span class="file">.asx</span> or <span class="file">.smil</span> format.  In current
+	releases the file extension is automatically adapted when changing
+	the filter dropdown (bottom right corner in the file dialog). </p></div></div></div></div>
 </div>
 <div class="sect sect-links" role="navigation">
 <div class="hgroup"></div>
diff --git a/help/html/search.html b/help/html/search.html
index de475f5..92761a4 100644
--- a/help/html/search.html
+++ b/help/html/search.html
@@ -13,48 +13,39 @@
 <div class="trail">
 <a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#browsing" title="Browsing channels and radio stations">Browsing channels and radio stations</a> » <a class="trail" href="channels.html" title="Channels">Channels</a> › <a class="trail" href="channels.html#list" title="Available channels">Available channels</a> » <a class="trail" href="bookmarks.html" title="Bookmarks">Bookmarks</a> › <a class="trail" href="bookmarks.html#other" title="Subcategories">Subcategories</a> » </div>
 <div class="trail">
-<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#channels" title="Channel tabs">Channel tabs</a> » <a class="trail" href="bookmarks.html" title="Bookmarks">Bookmarks</a> › <a class="trail" href="bookmarks.html#other" title="Subcategories">Subcategories</a> » </div>
+<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#browsing" title="Browsing channels and radio stations">Browsing channels and radio stations</a> » <a class="trail" href="streams.html" title="Streams / Stations">Streams / Stations</a> » <a class="trail" href="index.html#functions" title="Functions">Functions</a> » </div>
 <div class="trail">
-<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#functions" title="Functions">Functions</a> » </div>
+<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#channels" title="Channel tabs">Channel tabs</a> » <a class="trail" href="bookmarks.html" title="Bookmarks">Bookmarks</a> › <a class="trail" href="bookmarks.html#other" title="Subcategories">Subcategories</a> » </div>
 </div></div>
 <div class="body">
 <div class="hgroup"><h1 class="title"><span class="title">Searching</span></h1></div>
 <div class="region">
-<div class="contents"><p class="p">There are two search functions. The quick search field is in the toolbar, and allows
-	to highlight search terms in the current station list. The cache search is available
-	through the <span class="guiseq"><span class="gui">Edit</span> ▸ <span class="gui">Search</span></span> menu instead and provides more details.</p></div>
-<div id="cachesearch" class="sect"><div class="inner">
-<div class="hgroup"><h2 class="title"><span class="title">Dialog options</span></h2></div>
-<div class="region"><div class="contents">
-<p class="p">You can get to the search dialog via <span class="guiseq"><span class="gui">Edit</span> ▸ <span class="gui">Find</span></span> or <span class="key"><kbd>Ctrl</kbd></span>+<span class="key"><kbd>F</kbd></span>. Centrally to this dialog is the
-	text field, where you can specify the phrase to scan for.</p>
-<p class="p">Above you can check which channel plugins to inspect for the search term. Using this
-	allows to limit the search to specific radio station directories, but usually you want
-	to search them all.</p>
-<p class="p">Below the search phrase text box, you can specifiy which station fields to look
-	into. Often you just want to search the titles of radio stations. But you can also
-	have the search occour in the description/playing fields. Alternatively you could
-	just search the homepage links.</p>
-</div></div>
-</div></div>
-<div id="methods" class="sect"><div class="inner">
-<div class="hgroup"><h2 class="title"><span class="title">Search methods</span></h2></div>
-<div class="region"><div class="contents">
-<p class="p">Lastly, there are three search methods. You mostly want to use the <span class="gui">cache search</span>,
-	which just scans through the station lists streamtuner2 has downloaded. Since you are mostly
-	looking for something you had already seen, this will give you the desired results.</p>
-<p class="p">The <span class="gui">server search</span> would try to do a live search on the directory servers,
-	providing you with the most recent data. However, it's not implemented for all channel
-	plugins, and therefore brings limited output.</p>
-<p class="p">Use the button <span class="gui">google it</span> as last resort, if streamtuner2 didn't find anything.</p>
-</div></div>
-</div></div>
+<div class="contents"><p class="p">There are two search functions.</p></div>
 <div id="quicksearch" class="sect"><div class="inner">
 <div class="hgroup"><h2 class="title"><span class="title">Quick search</span></h2></div>
-<div class="region"><div class="contents"><p class="p">Just enter text into the quick search box. Streamtuner2 will instantly highlight
+<div class="region"><div class="contents"><p class="p">Just enter text into the quick search box atop. Streamtuner2 will instantly highlight
 	any matches in the current stations view. If you switch tabs, just click the glass icon
 	to reapply the highlighting.</p></div></div>
 </div></div>
+<div id="cachesearch" class="sect"><div class="inner">
+<div class="hgroup"><h2 class="title"><span class="title">Search window</span></h2></div>
+<div class="region"><div class="contents">
+<p class="p">You can get to the search dialog via <span class="guiseq"><span class="gui">Edit</span> ▸ <span class="gui">Find</span></span> or <span class="key"><kbd>Ctrl</kbd></span>+<span class="key"><kbd>F</kbd></span>.  Centrally
+	to this dialog is the text field, where you can specify the phrase
+	to scan for.</p>
+<div class="media media-image"><div class="inner"><img src="img/search.png" class="media media-block" alt=""></div></div>
+<p class="p">It either will search in all channels, or just the last active
+        channel/service.</p>
+<p class="p">Then there are two search variants.  You mostly want to use
+        the live <span class="gui">Server search</span>.  It passes your search terms to
+        the actual directory services, and loads the most recent data into a
+        result list. This might take a few seconds. And it's not implemented
+        for all channel plugins. (Some websites/APIs don't have a search.)</p>
+<p class="p">While <span class="gui">Cache find</span> would just look up entries in your
+        already downloaded channel/genre lists.  This is sufficient when
+        you're just looking for something previously seen/listened to.</p>
+</div></div>
+</div></div>
 <div class="sect sect-links" role="navigation">
 <div class="hgroup"></div>
 <div class="contents"><div class="links guidelinks"><div class="inner">
diff --git a/help/html/shoutcast.html b/help/html/shoutcast.html
index a1b4eb1..be7a77e 100644
--- a/help/html/shoutcast.html
+++ b/help/html/shoutcast.html
@@ -12,11 +12,12 @@
 <a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#browsing" title="Browsing channels and radio stations">Browsing channels and radio stations</a> » <a class="trail" href="channels.html" title="Channels">Channels</a> › <a class="trail" href="channels.html#list" title="Available channels">Available channels</a> » </div>
 <div class="trail">
 <a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#channels" title="Channel tabs">Channel tabs</a> » </div>
-<div class="trail">
-<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#configuration" title="Configuration">Configuration</a> » <a class="trail" href="configuration.html" title="Settings dialog">Settings dialog</a> › <a class="trail" href="configuration.html#plugins" title="Plugin and Channel settings">Plugin and Channel settings</a> » </div>
 </div></div>
 <div class="body">
-<div class="hgroup"><h1 class="title"><span class="title">Shoutcast</span></h1></div>
+<div class="hgroup">
+<h1 class="title"><span class="title">Shoutcast</span></h1>
+<h2 class="subtitle"><span class="subtitle"><span class="link"><a href="http://shoutcast.com/" title="http://shoutcast.com/">//shoutcast.com/</a></span></span></h2>
+</div>
 <div class="region">
 <div class="contents">
 <p class="p">SHOUTcast is the name of a MP3 streaming server software. It automatically collects all
@@ -24,20 +25,13 @@
         </p>
 <div class="list"><div class="inner"><div class="region"><ul class="list">
 <li class="list"><p class="p">Station entries usually provide current playing information.</p></li>
-<li class="list"><p class="p">Stream links are plain PLS files.</p></li>
+<li class="list"><p class="p">Stream links are plain <span class="link"><a href="gloassry_pls.html" title="gloassry_pls">PLS files</a></span>.</p></li>
 <li class="list"><p class="p">Genres are subcategorized, so the main groups in the category
-		list must often be expanded to see the interesting entries.</p></li>
+		list must be expanded to see the interesting entries.</p></li>
 </ul></div></div></div>
-<div class="terms"><div class="inner">
-<div class="title title-terms"><h2><span class="title">There are a few plugin options for this channel.</span></h2></div>
-<div class="region"><dl class="terms">
-<dt class="terms"><span class="code">PyQuery parsing</span></dt>
-<dd class="terms"><p class="p">Uses an XML parser to extract station data from within HTML <tags> of the shoutcast.com site. This is
-    slower, but often more reliable than regular expressions, which look for plain text markers.</p></dd>
-<dt class="terms"><span class="code">debug output</span></dt>
-<dd class="terms"><p class="p">Prints verbose messages to the console. This option is used while developing extensions for Streamtuner2.</p></dd>
-</dl></div>
-</div></div>
+<p class="p">Since being sold from AOL to Radionomy, the directory got cut down. There are no longer
+        entries for currently played songs, and homepage links are largely gone. Hencewhy the
+        Shoutcast channel is no longer considered a primary feature.</p>
 </div>
 <div class="sect sect-links" role="navigation">
 <div class="hgroup"></div>
@@ -46,7 +40,6 @@
 <div class="region"><ul>
 <li class="links "><a href="channels.html#list" title="Available channels">Available channels</a></li>
 <li class="links "><a href="index.html#channels" title="Channel tabs">Channel tabs</a></li>
-<li class="links "><a href="configuration.html#plugins" title="Plugin and Channel settings">Plugin and Channel settings</a></li>
 </ul></div>
 </div></div></div>
 </div>
diff --git a/help/html/jamendo.html b/help/html/somafm.html
similarity index 63%
copy from help/html/jamendo.html
copy to help/html/somafm.html
index 2f4f884..d082d8f 100644
--- a/help/html/jamendo.html
+++ b/help/html/somafm.html
@@ -2,7 +2,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
-<title>Jamendo</title>
+<title>SomaFM</title>
 <link rel="stylesheet" type="text/css" href="C.css">
 <script type="text/javascript" src="jquery.js"></script><script type="text/javascript" src="jquery.syntax.js"></script><script type="text/javascript" src="yelp.js"></script>
 </head>
@@ -14,16 +14,27 @@
 <a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#channels" title="Channel tabs">Channel tabs</a> » </div>
 </div></div>
 <div class="body">
-<div class="hgroup"><h1 class="title"><span class="title">Jamendo</span></h1></div>
+<div class="hgroup">
+<h1 class="title"><span class="title">SomaFM</span></h1>
+<h2 class="subtitle"><span class="subtitle"><span class="link"><a href="http://somafm.com/" title="http://somafm.com/">//somafm.com/</a></span></span></h2>
+</div>
 <div class="region">
 <div class="contents">
-<p class="p">Jamendo is a Creative Comments licensing oriented music distributor. It hosts audio
-	files for individual musicians and artists. Tracks and albums can thus be downloaded
-	free of charge. Yeah, imagine that.</p>
-<p class="p">The streamtuner2 plugin for Jamendo is pretty limited at the moment. It just provides
-	a quick overview over top artists and most listened albums from each genre. To browse
-	the whole collections, better go to the Jamendo homepage or use Rhythmbox.</p>
+<p class="p">SomaFM is a small radio station network. It provides its own
+	unique channels. Which streamtuner2 shows in a static list.</p>
+<div class="note" title="Note"><div class="inner"><div class="region"><div class="contents"><p class="p">SomaFM is a non-commercial and ad-free provider. It
+        strongly depends on listener donations.</p></div></div></div></div>
 </div>
+<div id="configuration" class="sect"><div class="inner">
+<div class="hgroup"><h2 class="title"><span class="title">Bitrate configuration</span></h2></div>
+<div class="region"><div class="contents">
+<p class="p">It provides streaming links in different audio formats. Only
+	AAC64 is guaranteed to be available for all. Other bitrates depend
+	on the station.</p>
+<p class="p">After reconfiguring the bitrate/format, you can Reload the
+	station list to update them. Otherwise refreshing has no effect.</p>
+</div></div>
+</div></div>
 <div class="sect sect-links" role="navigation">
 <div class="hgroup"></div>
 <div class="contents"><div class="links guidelinks"><div class="inner">
diff --git a/help/html/streams.html b/help/html/streams.html
index a3caf62..005c6ea 100644
--- a/help/html/streams.html
+++ b/help/html/streams.html
@@ -20,11 +20,13 @@
 <p class="p">You can double click a station line to get it to play. Alternatively there are the
         play and record buttons in the menubar. You can also invoke a stations homepage, if it
         has one.</p>
+<div class="links topiclinks"><div class="inner"><div class="region"><div class="linkdiv "><a class="linkdiv" href="index.html#functions" title="Functions"><span class="title">Functions</span></a></div></div></div></div>
 </div>
 <div id="actions" class="sect"><div class="inner">
 <div class="hgroup"><h2 class="title"><span class="title">Actions</span></h2></div>
 <div class="region"><div class="contents"><div class="links topiclinks"><div class="inner"><div class="region">
 <div class="linkdiv "><a class="linkdiv" href="bookmarks.html" title="Bookmarks"><span class="title">Bookmarks</span><span class="linkdiv-dash"> — </span><span class="desc">Collect favourites via bookmark function, entry editing and deleting.</span></a></div>
+<div class="linkdiv "><a class="linkdiv" href="edit.html" title="Edit"><span class="title">Edit</span><span class="linkdiv-dash"> — </span><span class="desc">Edit or inspect a station entry.</span></a></div>
 <div class="linkdiv "><a class="linkdiv" href="playing.html" title="Playing"><span class="title">Playing</span><span class="linkdiv-dash"> — </span><span class="desc">Double click a station to start it in your audio player.</span></a></div>
 <div class="linkdiv "><a class="linkdiv" href="homepage.html" title="Radio homepages"><span class="title">Radio homepages</span><span class="linkdiv-dash"> — </span><span class="desc">Start a web browser for a station.</span></a></div>
 <div class="linkdiv "><a class="linkdiv" href="recording.html" title="Recording"><span class="title">Recording</span><span class="linkdiv-dash"> — </span><span class="desc">Save radio songs as MP3 files via streamripper.</span></a></div>
@@ -37,12 +39,10 @@
 <div class="region"><div class="contents">
 <p class="p">Additionally most actions are available in a context menu. Right click
         a station entry to display it.</p>
-<div class="note" title="Note"><div class="inner"><div class="region"><div class="contents"><p class="p">Reshuffling of station entries in the list is possible by dragging them. But
-	this is only a visual effect and will confuse the internal ordering of entries. Don't
-	do it.</p></div></div></div></div>
-<p class="p">You can always click the current category in the left list, to have the current
-	station list redisplayed. Which is useful after updating favicons, or accidental
-	dragging of entries.</p>
+<div class="media media-image"><div class="inner"><img src="img/streamactions.png" class="media media-block" alt=""></div></div>
+<p class="p">You can reach them in the <span class="guiseq"><span class="gui">Main menu</span> ▸ <span class="gui">Stations</span></span>
+        as well. The <span class="guiseq"><span class="gui">Extensions</span> ▸ <span class="gui"></span></span> submenu there will
+        list a few other plugin extensions.</p>
 </div></div>
 </div></div>
 <div class="sect sect-links" role="navigation">
diff --git a/help/html/surfmusik.html b/help/html/surfmusik.html
new file mode 100644
index 0000000..4e4d01e
--- /dev/null
+++ b/help/html/surfmusik.html
@@ -0,0 +1,59 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
+<title>SurfMusic</title>
+<link rel="stylesheet" type="text/css" href="C.css">
+<script type="text/javascript" src="jquery.js"></script><script type="text/javascript" src="jquery.syntax.js"></script><script type="text/javascript" src="yelp.js"></script>
+</head>
+<body><div class="page" role="main">
+<div class="header"><div class="trails" role="navigation">
+<div class="trail">
+<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#browsing" title="Browsing channels and radio stations">Browsing channels and radio stations</a> » <a class="trail" href="channels.html" title="Channels">Channels</a> › <a class="trail" href="channels.html#list" title="Available channels">Available channels</a> » </div>
+<div class="trail">
+<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#channels" title="Channel tabs">Channel tabs</a> » </div>
+<div class="trail">
+<a class="trail" href="glossary.html" title="Glossary">Glossary</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » <a class="trail" href="pluginmanager2.html" title="Plugin Manager 2">Plugin Manager 2</a> » <a class="trail" href="configuration.html#plugins" title="Channel and feature plugins and settings">Channel and feature plugins and settings</a> » </div>
+<div class="trail">
+<a class="trail" href="technical.html" title="Technical information">Technical information</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » <a class="trail" href="pluginmanager2.html" title="Plugin Manager 2">Plugin Manager 2</a> » <a class="trail" href="configuration.html#plugins" title="Channel and feature plugins and settings">Channel and feature plugins and settings</a> » </div>
+</div></div>
+<div class="body">
+<div class="hgroup">
+<h1 class="title"><span class="title">SurfMusic</span></h1>
+<h2 class="subtitle"><span class="subtitle"><span class="link"><a href="http://surfmusic.de/" title="http://surfmusic.de/">//surfmusic.de/</a></span></span></h2>
+</div>
+<div class="region">
+<div class="contents">
+<p class="p"><span class="link"><a href="http://surfmusic.de/" title="http://surfmusic.de/">SurfMusic</a></span> is a user-collection of
+        internet radios. It's grouped by genres, or locations / countries.</p>
+<p class="p">It's both pretty large and rather quick to extract listings from. And it mostly
+        includes station homepage links.</p>
+<div class="note note-bug" title="Bug"><div class="inner"><div class="region"><div class="contents"><p class="p">The MusicTV and NewsTV sections also return results, but those are mostly
+        web-based video stations. Some of them are outdated links even.</p></div></div></div></div>
+</div>
+<div id="options" class="sect"><div class="inner">
+<div class="hgroup"><h2 class="title"><span class="title">Channel options.</span></h2></div>
+<div class="region"><div class="contents"><div class="terms"><div class="inner"><div class="region"><dl class="terms">
+<dt class="terms"><span class="code">Language</span></dt>
+<dd class="terms"><p class="p">There's an English and a German variant of this radio directory. Genres are
+    also localized. Restart streamtuner2 after switching the Language option. Then
+    use <span class="guiseq"><span class="gui">Channel</span> ▸ <span class="gui">Reload category tree</span></span>.</p></dd>
+</dl></div></div></div></div></div>
+</div></div>
+<div class="sect sect-links" role="navigation">
+<div class="hgroup"></div>
+<div class="contents"><div class="links guidelinks"><div class="inner">
+<div class="title"><h2><span class="title">More Information</span></h2></div>
+<div class="region"><ul>
+<li class="links "><a href="channels.html#list" title="Available channels">Available channels</a></li>
+<li class="links "><a href="configuration.html#plugins" title="Channel and feature plugins and settings">Channel and feature plugins and settings</a></li>
+<li class="links "><a href="index.html#channels" title="Channel tabs">Channel tabs</a></li>
+</ul></div>
+</div></div></div>
+</div>
+</div>
+<div class="clear"></div>
+</div>
+<div class="footer"></div>
+</div></body>
+</html>
diff --git a/help/html/technical.html b/help/html/technical.html
index b993e9d..595bdd9 100644
--- a/help/html/technical.html
+++ b/help/html/technical.html
@@ -7,25 +7,28 @@
 <script type="text/javascript" src="jquery.js"></script><script type="text/javascript" src="jquery.syntax.js"></script><script type="text/javascript" src="yelp.js"></script>
 </head>
 <body><div class="page" role="main">
-<div class="header"><div class="trails" role="navigation"><div class="trail">
-<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#advanced" title="Advanced topics">Advanced topics</a> » </div></div></div>
+<div class="header"></div>
 <div class="body">
 <div class="hgroup"><h1 class="title"><span class="title">Technical information</span></h1></div>
 <div class="region">
-<div class="contents"></div>
+<div class="contents"><div class="links topiclinks"><div class="inner"><div class="region"><div class="linkdiv "><a class="linkdiv" href="index.html#extra" title="Additional features"><span class="title">Additional features</span></a></div></div></div></div></div>
 <div id="dependecies" class="sect"><div class="inner">
-<div class="hgroup"><h2 class="title"><span class="title">Dependencies</span></h2></div>
+<div class="hgroup"></div>
 <div class="region"><div class="contents">
-<div class="terms"><div class="inner"><div class="region"><dl class="terms">
-<dd class="terms"><p class="p">Python 2.7 or 3.x</p></dd>
-<dd class="terms"><p class="p">PyGtk or PyGI</p></dd>
+<div class="terms"><div class="inner">
+<div class="title title-terms"><h3><span class="title">Dependencies</span></h3></div>
+<div class="region"><dl class="terms">
+<dd class="terms"><p class="p"><span class="link">Python 2.7 or 3.x</span></p></dd>
+<dd class="terms"><p class="p"><span class="link">PyGtk or PyGI</span></p></dd>
 <dd class="terms"><p class="p">Gtk2 or Gtk3</p></dd>
-</dl></div></div></div>
+<dd class="terms"><p class="p"><span class="link">Requests/urllib3</span></p></dd>
+</dl></div>
+</div></div>
 <div class="terms"><div class="inner">
 <div class="title title-terms"><h3><span class="title">Soft dependencies</span></h3></div>
 <div class="region"><dl class="terms">
-<dd class="terms"><p class="p">Python-LXML</p></dd>
-<dd class="terms"><p class="p">Python-PyQuery</p></dd>
+<dd class="terms"><p class="p"><span class="link">Python-LXML</span></p></dd>
+<dd class="terms"><p class="p"><span class="link">Python-PyQuery</span></p></dd>
 <dd class="terms"><p class="p">Python-Kronos</p></dd>
 <dd class="terms"><p class="p">Audacious</p></dd>
 </dl></div>
@@ -35,46 +38,43 @@
 <div id="config_files" class="sect"><div class="inner">
 <div class="hgroup"><h2 class="title"><span class="title">Configuration files</span></h2></div>
 <div class="region"><div class="contents"><div class="terms"><div class="inner"><div class="region"><dl class="terms">
-<dt class="terms">/home/$USER/.config/streamtuner2/</dt>
+<dt class="terms"><span class="file">/home/$USER/.config/streamtuner2/</span></dt>
 <dd class="terms"><p class="p">Corresponds to the XDG_CONFIG_HOME setting. All ST2 configuration settings
             are contained within here and are in JSON format.</p></dd>
-<dt class="terms">~/.config/streamtuner2/settings.json</dt>
+<dt class="terms"><span class="file">~/.config/streamtuner2/settings.json</span></dt>
 <dd class="terms"><p class="p">General runtime options, plugin settings, and configured audio players.</p></dd>
-<dt class="terms">~/.config/streamtuner2/window.json</dt>
+<dt class="terms"><span class="file">~/.config/streamtuner2/window.json</span></dt>
 <dd class="terms"><p class="p">Saved window sizes, list widths.</p></dd>
-<dt class="terms">~/.config/streamtuner2/state.json</dt>
+<dt class="terms"><span class="file">~/.config/streamtuner2/state.json</span></dt>
 <dd class="terms"><p class="p">Last category in each channel tab.</p></dd>
-<dt class="terms">~/.config/streamtuner2/bookmarks.json</dt>
-<dd class="terms"><p class="p">Is a separate cahce file for your bookmarked/favourite radio stations.</p></dd>
-<dt class="terms">~/.config/streamtuner2/cache/***.json</dt>
+<dt class="terms"><span class="file">~/.config/streamtuner2/bookmarks.json</span></dt>
+<dd class="terms"><p class="p">Is a separate cache file for your bookmarked/favourite radio stations.</p></dd>
+<dt class="terms"><span class="file">~/.config/streamtuner2/cache/***.json</span></dt>
 <dd class="terms"><p class="p">JSON files for stream lists in each channel.</p></dd>
-<dt class="terms">~/.config/streamtuner2/icons/*.png</dt>
+<dt class="terms"><span class="file">~/.config/streamtuner2/icons/*.png</span></dt>
 <dd class="terms"><p class="p">Holds downloaded favicons for station homepages.</p></dd>
 </dl></div></div></div></div></div>
 </div></div>
 <div id="install_dirs" class="sect"><div class="inner">
 <div class="hgroup"><h2 class="title"><span class="title">Installation spread</span></h2></div>
 <div class="region"><div class="contents"><div class="terms"><div class="inner"><div class="region"><dl class="terms">
-<dt class="terms">/usr/bin/streamtuner2</dt>
+<dt class="terms"><span class="file">/usr/bin/streamtuner2</span></dt>
 <dd class="terms"><p class="p">Is the main binary.</p></dd>
-<dt class="terms">/usr/share/streamtuner2/</dt>
+<dt class="terms"><span class="file">/usr/share/streamtuner2/</span></dt>
 <dd class="terms"><p class="p">Contains the individual ST2 python modules, and plugins in channels/. Also packages in pyquery/, but which is only used if the according modules aren't installed by the distribution.</p></dd>
-<dt class="terms">/usr/share/doc/streamtuner2/</dt>
+<dt class="terms"><span class="file">/usr/share/doc/streamtuner2/</span></dt>
 <dd class="terms"><p class="p">Contains the README, and Mallard/gnome-help/yelp files under help/.</p></dd>
 </dl></div></div></div></div></div>
 </div></div>
 <div id="license" class="sect"><div class="inner">
 <div class="hgroup"><h2 class="title"><span class="title">Public Domain</span></h2></div>
-<div class="region"><div class="contents"><p class="p">There is no licensing requirement with this application. All code can be copied, modified
-	and distributed unrestrictively.</p></div></div>
+<div class="region"><div class="contents">
+<p class="p">The majority of code distributed with ST2 is placed into the Public Domain; meaning
+        no licensing requirement and all code can be copied, modified
+	and distributed unrestrictively.</p>
+<p class="p">The bundled kronos.py and requests/ library are NOT however.</p>
+</div></div>
 </div></div>
-<div class="sect sect-links" role="navigation">
-<div class="hgroup"></div>
-<div class="contents"><div class="links guidelinks"><div class="inner">
-<div class="title"><h2><span class="title">More Information</span></h2></div>
-<div class="region"><ul><li class="links "><a href="index.html#advanced" title="Advanced topics">Advanced topics</a></li></ul></div>
-</div></div></div>
-</div>
 </div>
 <div class="clear"></div>
 </div>
diff --git a/help/html/timer.html b/help/html/timer.html
index 23670c2..1a62fbd 100644
--- a/help/html/timer.html
+++ b/help/html/timer.html
@@ -9,27 +9,33 @@
 <body><div class="page" role="main">
 <div class="header"><div class="trails" role="navigation">
 <div class="trail">
-<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#advanced" title="Advanced topics">Advanced topics</a> » </div>
-<div class="trail">
 <a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#browsing" title="Browsing channels and radio stations">Browsing channels and radio stations</a> » <a class="trail" href="streams.html" title="Streams / Stations">Streams / Stations</a> › <a class="trail" href="streams.html#actions" title="Actions">Actions</a> » <a class="trail" href="bookmarks.html" title="Bookmarks">Bookmarks</a> › <a class="trail" href="bookmarks.html#other" title="Subcategories">Subcategories</a> » </div>
 <div class="trail">
 <a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#browsing" title="Browsing channels and radio stations">Browsing channels and radio stations</a> » <a class="trail" href="channels.html" title="Channels">Channels</a> › <a class="trail" href="channels.html#list" title="Available channels">Available channels</a> » <a class="trail" href="bookmarks.html" title="Bookmarks">Bookmarks</a> › <a class="trail" href="bookmarks.html#other" title="Subcategories">Subcategories</a> » </div>
 <div class="trail">
 <a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#channels" title="Channel tabs">Channel tabs</a> » <a class="trail" href="bookmarks.html" title="Bookmarks">Bookmarks</a> › <a class="trail" href="bookmarks.html#other" title="Subcategories">Subcategories</a> » </div>
+<div class="trail">
+<a class="trail" href="glossary.html" title="Glossary">Glossary</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » </div>
+<div class="trail">
+<a class="trail" href="technical.html" title="Technical information">Technical information</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » </div>
 </div></div>
 <div class="body">
 <div class="hgroup"><h1 class="title"><span class="title">Timer</span></h1></div>
 <div class="region">
-<div class="contents">
+<div class="contents"></div>
+<div id="" class="sect"><div class="inner">
+<div class="hgroup"></div>
+<div class="region"><div class="contents">
 <p class="p">You can programm play/recording events with the timer plugin. Simply select a station
 	and choose <span class="guiseq"><span class="gui">Station</span> ▸ <span class="gui">Extensions</span> ▸ <span class="gui">Add timer...</span></span>.
 	A small popup will ask for a data/time string. If you press <span class="key"><kbd>OK</kbd></span> the station
-	and the programmed time
-	will be stored in the bookmarks channel in the "timer" category.</p>
+	and the programmed time will be stored in the bookmarks channel in the "timer" category.</p>
+<p class="p"><span class="media"><span class="media media-image"><img src="img/timer.png" class="media media-inline" alt="Timer"></span></span></p>
 <div class="note note-tip" title="Tip"><div class="inner"><div class="region"><div class="contents"><p class="p">Note that streamtuner2 must be running for the programmed timer events to work.
 	(In a future version there might be the option to have it handled by the system cron
 	daemon.)</p></div></div></div></div>
-</div>
+</div></div>
+</div></div>
 <div id="timestring" class="sect"><div class="inner">
 <div class="hgroup"><h2 class="title"><span class="title">Time specification strings</span></h2></div>
 <div class="region"><div class="contents">
@@ -59,7 +65,7 @@
 <div class="contents"><div class="links guidelinks"><div class="inner">
 <div class="title"><h2><span class="title">More Information</span></h2></div>
 <div class="region"><ul>
-<li class="links "><a href="index.html#advanced" title="Advanced topics">Advanced topics</a></li>
+<li class="links "><a href="index.html#extra" title="Additional features">Additional features</a></li>
 <li class="links "><a href="bookmarks.html#other" title="Subcategories">Subcategories</a></li>
 </ul></div>
 </div></div></div>
diff --git a/help/html/tunein.html b/help/html/tunein.html
new file mode 100644
index 0000000..2c9d3eb
--- /dev/null
+++ b/help/html/tunein.html
@@ -0,0 +1,52 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
+<title>TuneIn</title>
+<link rel="stylesheet" type="text/css" href="C.css">
+<script type="text/javascript" src="jquery.js"></script><script type="text/javascript" src="jquery.syntax.js"></script><script type="text/javascript" src="yelp.js"></script>
+</head>
+<body><div class="page" role="main">
+<div class="header"><div class="trails" role="navigation">
+<div class="trail">
+<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#browsing" title="Browsing channels and radio stations">Browsing channels and radio stations</a> » <a class="trail" href="channels.html" title="Channels">Channels</a> › <a class="trail" href="channels.html#list" title="Available channels">Available channels</a> » </div>
+<div class="trail">
+<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#channels" title="Channel tabs">Channel tabs</a> » </div>
+<div class="trail">
+<a class="trail" href="glossary.html" title="Glossary">Glossary</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » <a class="trail" href="pluginmanager2.html" title="Plugin Manager 2">Plugin Manager 2</a> » <a class="trail" href="configuration.html#plugins" title="Channel and feature plugins and settings">Channel and feature plugins and settings</a> » </div>
+<div class="trail">
+<a class="trail" href="technical.html" title="Technical information">Technical information</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » <a class="trail" href="pluginmanager2.html" title="Plugin Manager 2">Plugin Manager 2</a> » <a class="trail" href="configuration.html#plugins" title="Channel and feature plugins and settings">Channel and feature plugins and settings</a> » </div>
+</div></div>
+<div class="body">
+<div class="hgroup">
+<h1 class="title"><span class="title">TuneIn</span></h1>
+<h2 class="subtitle"><span class="subtitle"><span class="link"><a href="http://tunein.com/" title="http://tunein.com/">//tunein.com/</a></span></span></h2>
+</div>
+<div class="region">
+<div class="contents"><p class="p">TuneIn hosts a major radio, show and podcast directory. It also provides the
+        RadioTime/AIR interface for listener feedback or something. ST2 queries the OPML
+        lists only for radio stations currently.</p></div>
+<div id="options" class="sect"><div class="inner">
+<div class="hgroup"><h2 class="title"><span class="title">Configuration</span></h2></div>
+<div class="region"><div class="contents"><p class="p">You can switch between "music" and "genres" list. The genres
+        list is basically a longer and expanded variant of "music".
+        Use <span class="guiseq"><span class="gui">Channel</span> ▸ <span class="gui">Reload category tree</span></span>
+        to update them thereafter.</p></div></div>
+</div></div>
+<div class="sect sect-links" role="navigation">
+<div class="hgroup"></div>
+<div class="contents"><div class="links guidelinks"><div class="inner">
+<div class="title"><h2><span class="title">More Information</span></h2></div>
+<div class="region"><ul>
+<li class="links "><a href="channels.html#list" title="Available channels">Available channels</a></li>
+<li class="links "><a href="configuration.html#plugins" title="Channel and feature plugins and settings">Channel and feature plugins and settings</a></li>
+<li class="links "><a href="index.html#channels" title="Channel tabs">Channel tabs</a></li>
+</ul></div>
+</div></div></div>
+</div>
+</div>
+<div class="clear"></div>
+</div>
+<div class="footer"></div>
+</div></body>
+</html>
diff --git a/help/html/jamendo.html b/help/html/ubuntuusersm.html
similarity index 68%
copy from help/html/jamendo.html
copy to help/html/ubuntuusersm.html
index 2f4f884..73b7382 100644
--- a/help/html/jamendo.html
+++ b/help/html/ubuntuusersm.html
@@ -2,7 +2,7 @@
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
-<title>Jamendo</title>
+<title>UbuntuUsers</title>
 <link rel="stylesheet" type="text/css" href="C.css">
 <script type="text/javascript" src="jquery.js"></script><script type="text/javascript" src="jquery.syntax.js"></script><script type="text/javascript" src="yelp.js"></script>
 </head>
@@ -14,15 +14,21 @@
 <a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#channels" title="Channel tabs">Channel tabs</a> » </div>
 </div></div>
 <div class="body">
-<div class="hgroup"><h1 class="title"><span class="title">Jamendo</span></h1></div>
+<div class="hgroup">
+<h1 class="title"><span class="title">UbuntuUsers</span></h1>
+<h2 class="subtitle"><span class="subtitle"><span class="link"><a href="http://ubuntuusers.de/" title="http://ubuntuusers.de/">//ubuntuusers.de/</a></span></span></h2>
+</div>
 <div class="region">
 <div class="contents">
-<p class="p">Jamendo is a Creative Comments licensing oriented music distributor. It hosts audio
-	files for individual musicians and artists. Tracks and albums can thus be downloaded
-	free of charge. Yeah, imagine that.</p>
-<p class="p">The streamtuner2 plugin for Jamendo is pretty limited at the moment. It just provides
-	a quick overview over top artists and most listened albums from each genre. To browse
-	the whole collections, better go to the Jamendo homepage or use Rhythmbox.</p>
+<p class="p">There's a manually curated list of radio stations in the
+	UbuntuUsers.de Wiki. Like the origin website, most entries are
+	German or European stations.</p>
+<p class="p">So this is more of an example plugin, as it's not a huge list
+	of course. It's just here really, because the Wiki markup is
+	pretty well-written and easy to parse.</p>
+<div class="note" title="Note"><div class="inner"><div class="region"><div class="contents"><p class="p">There's also a small streaming TV list. But most entries
+	aren't really accessible (anymore) without command line tools. 
+	(Which that very Wiki page covers in detail.)</p></div></div></div></div>
 </div>
 <div class="sect sect-links" role="navigation">
 <div class="hgroup"></div>
diff --git a/help/html/xiph.html b/help/html/xiph.html
index e4c6a46..64ea9d9 100644
--- a/help/html/xiph.html
+++ b/help/html/xiph.html
@@ -13,38 +13,90 @@
 <div class="trail">
 <a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#channels" title="Channel tabs">Channel tabs</a> » </div>
 <div class="trail">
-<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#configuration" title="Configuration">Configuration</a> » <a class="trail" href="configuration.html" title="Settings dialog">Settings dialog</a> › <a class="trail" href="configuration.html#plugins" title="Plugin and Channel settings">Plugin and Channel settings</a> » </div>
+<a class="trail" href="glossary.html" title="Glossary">Glossary</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » <a class="trail" href="pluginmanager2.html" title="Plugin Manager 2">Plugin Manager 2</a> » <a class="trail" href="configuration.html#plugins" title="Channel and feature plugins and settings">Channel and feature plugins and settings</a> » </div>
+<div class="trail">
+<a class="trail" href="technical.html" title="Technical information">Technical information</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » <a class="trail" href="pluginmanager2.html" title="Plugin Manager 2">Plugin Manager 2</a> » <a class="trail" href="configuration.html#plugins" title="Channel and feature plugins and settings">Channel and feature plugins and settings</a> » </div>
 </div></div>
 <div class="body">
-<div class="hgroup"><h1 class="title"><span class="title">Xiph.org</span></h1></div>
+<div class="hgroup">
+<h1 class="title"><span class="title">Xiph.org</span></h1>
+<h2 class="subtitle"><span class="subtitle"><span class="link"><a href="http://dir.xiph.org/" title="http://dir.xiph.org/">//dir.xiph.org/</a></span></span></h2>
+</div>
 <div class="region">
 <div class="contents">
-<p class="p">Xiph.org is a non-profit organization, which develops and promotes the OGG audio format.
-        It also hosts a list of ICEcast streaming stations (ICEcast is the non-commercial pendant
-        to the SHOUTcast server.)</p>
-<p class="p">This channel is especially easy to read by Streamtuner2, because the source data is already
-        provided as <XML> file. However, it lacks some essential informaitons like station
-        homepages and listener numbers.</p>
-<p class="p">Xiph also uses the .xspf format, instead of .pls stream links</p>
-<div class="terms"><div class="inner">
-<div class="title title-terms"><h2><span class="title">Channel options.</span></h2></div>
-<div class="region"><dl class="terms">
+<p class="p">Xiph.org is a non-profit organization, which maintains and
+	promotes the OGG streaming format, and develops audio compression
+	schemes such as Vorbis, FLAC, Opus, or the Theora video encoding
+	format.  It also hosts a list of ICEcast streaming stations. ICEcast
+	is their non-commercial pendant to the SHOUTcast server.</p>
+<p class="p">There are different ways for streamtuner2 to retrieve the station
+        lists available on dir.xiph.org.  That's because this is a primary
+        plugin, and fallback solutions therefore important.  Each fetching
+        mode has its own advantages and drawbacks though.</p>
+<p class="p">Xiph also uses the .xspf playlist format, instead of just the
+        more ancient Shoutcast .pls stream links.</p>
+</div>
+<div id="options" class="sect"><div class="inner">
+<div class="hgroup"><h2 class="title"><span class="title">Channel options.</span></h2></div>
+<div class="region"><div class="contents"><div class="terms"><div class="inner"><div class="region"><dl class="terms">
 <dt class="terms"><span class="code">Filter by minimum bitrate</span></dt>
 <dd class="terms"><p class="p">The bitrate of an audio stream determines the music quality. Many Xiph streams have simple
     and low quality microphone sources. To filter these out, and only leave high quality music
-    stations, you can therefore set this option. OGG starts to sound good with 128 kbit/s (whereas
-    MP3 often needs 192 at least).</p></dd>
-</dl></div>
+    stations, you can therefore change this option. OGG starts to sound well with 96 kbit/s (whereas
+    MP3 often requires 128 or 160 kbit/s at least).</p></dd>
+<dt class="terms"><span class="code">Fetch mode</span></dt>
+<dd class="terms">
+<p class="p">There are now three options to retrieve Xiph directory stations.</p>
+<p class="p"></p>
+<div class="terms"><div class="inner"><div class="region"><dl class="terms">
+<dt class="terms"><span class="code">Cache JSON</span></dt>
+<dd class="terms"><p class="p">There's a caching server specifically for streamtuner2. It fixes
+        Xiphs quirky JSON API, and provides a simpler interface. It can't
+        correct the invalid encodings however, which is why you see ????
+        question marks a lot. This method does not reveal station homepages,
+        but enables the channel/server search.</p></dd>
+<dt class="terms"><span class="code">Clunky YP.XML</span></dt>
+<dd class="terms">
+<p class="p">The "yellow pages" YP.XML contains the full list of all known
+        ICEcast streaming servers. It's however quite bulky and super slow
+        to download. It furthermore clogs up a lot of memory, and requires
+        manual searching (only cache search works). Which is why streamtuner2
+        is trying hard to avoid it. It doesn't contain station homepages either.
+        </p>
+<p class="p">It's only still an option, because it's likely to remain accessible
+        after Xiph.org rewrites their directory service. (Which though is
+        getting delayed since a few years already.)
+        You can set the special "buffy" mode in your <span class="file">settings.json</span>
+        to keep the whole YP.XML in memory. Which avoids the
+        slow station list download/unpacking.
+        </p>
+</dd>
+<dt class="terms"><span class="code">Forbidden fruits</span></dt>
+<dd class="terms">
+<p class="p">As new alternative, you can let ST2 directly scrape the station
+        lists from dir.xiph.org (like it does for other channels).  This is
+        something which Xiph doesn't approve of.  But the drawbacks of their
+        alternative offerings are too severe and user-unfriendly; which is
+        why there's this raw HTML extraction mode now.</p>
+<p class="p">The website listings contain full station homepages and a few
+        more extras.  In this mode we can even acceess the XSPF playlist
+        formats directly.  Both, the server search function, or browsing by
+        audio/video format are supported.  </p>
+<div class="note" title="Note"><div class="inner"><div class="region"><div class="contents"><p class="p">A miximum of 100 entries get fetched in this mode however
+        (which is 5 pages á 20 entries).</p></div></div></div></div>
+</dd>
+</dl></div></div></div>
+</dd>
+</dl></div></div></div></div></div>
 </div></div>
-</div>
 <div class="sect sect-links" role="navigation">
 <div class="hgroup"></div>
 <div class="contents"><div class="links guidelinks"><div class="inner">
 <div class="title"><h2><span class="title">More Information</span></h2></div>
 <div class="region"><ul>
 <li class="links "><a href="channels.html#list" title="Available channels">Available channels</a></li>
+<li class="links "><a href="configuration.html#plugins" title="Channel and feature plugins and settings">Channel and feature plugins and settings</a></li>
 <li class="links "><a href="index.html#channels" title="Channel tabs">Channel tabs</a></li>
-<li class="links "><a href="configuration.html#plugins" title="Plugin and Channel settings">Plugin and Channel settings</a></li>
 </ul></div>
 </div></div></div>
 </div>
diff --git a/help/html/yelp-note-bug.png b/help/html/yelp-note-bug.png
new file mode 100644
index 0000000..501bc59
Binary files /dev/null and b/help/html/yelp-note-bug.png differ
diff --git a/help/html/youtube.html b/help/html/youtube.html
new file mode 100644
index 0000000..f8be30a
--- /dev/null
+++ b/help/html/youtube.html
@@ -0,0 +1,72 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
+<title>Youtube</title>
+<link rel="stylesheet" type="text/css" href="C.css">
+<script type="text/javascript" src="jquery.js"></script><script type="text/javascript" src="jquery.syntax.js"></script><script type="text/javascript" src="yelp.js"></script>
+</head>
+<body><div class="page" role="main">
+<div class="header"><div class="trails" role="navigation">
+<div class="trail">
+<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#browsing" title="Browsing channels and radio stations">Browsing channels and radio stations</a> » <a class="trail" href="channels.html" title="Channels">Channels</a> › <a class="trail" href="channels.html#list" title="Available channels">Available channels</a> » </div>
+<div class="trail">
+<a class="trail" href="index.html" title="♪ Streamtuner2"><span class="media"><span class="media media-image"><img src="img/logo.png" class="media media-inline" alt="♪"></span></span> Streamtuner2 </a> › <a class="trail" href="index.html#channels" title="Channel tabs">Channel tabs</a> » </div>
+<div class="trail">
+<a class="trail" href="glossary.html" title="Glossary">Glossary</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » <a class="trail" href="pluginmanager2.html" title="Plugin Manager 2">Plugin Manager 2</a> » <a class="trail" href="configuration.html#plugins" title="Channel and feature plugins and settings">Channel and feature plugins and settings</a> » </div>
+<div class="trail">
+<a class="trail" href="technical.html" title="Technical information">Technical information</a> » <a class="trail" href="index.html#extra" title="Additional features">Additional features</a> » <a class="trail" href="pluginmanager2.html" title="Plugin Manager 2">Plugin Manager 2</a> » <a class="trail" href="configuration.html#plugins" title="Channel and feature plugins and settings">Channel and feature plugins and settings</a> » </div>
+</div></div>
+<div class="body">
+<div class="hgroup">
+<h1 class="title"><span class="title">Youtube</span></h1>
+<h2 class="subtitle"><span class="subtitle"><span class="link"><a href="http://youtube.com/" title="http://youtube.com/">//youtube.com/</a></span></span></h2>
+</div>
+<div class="region">
+<div class="contents">
+<p class="p">Googles Youtube provides a quirky JSON API that makes browsing
+        channels and genres feasible.  This beta plugin provides a little
+        overview, and usually retrieves recent video uploads.</p>
+<p class="p">VLC can directly play Youtube URLs. For other players one can use
+        <span class="link"><a href="http://youtube-dl.org/" title="http://youtube-dl.org/">youtube-dl</a></span> as wrapper.
+        For example <span class="cmd">totem $(youtube-dl %srv)</span> as configured player
+        command.</p>
+<p class="p">Youtube-dl is preconfigued as "recording"/download tool for this channel
+        tab.</p>
+<p class="p">Of course you could also just invoke a specific YT video by
+        opening it in your web browser - click the station <span class="key"><kbd>home</kbd></span>
+        button simply.</p>
+</div>
+<div id="options" class="sect"><div class="inner">
+<div class="hgroup"><h2 class="title"><span class="title">Channel options.</span></h2></div>
+<div class="region"><div class="contents"><div class="terms"><div class="inner"><div class="region"><dl class="terms">
+<dt class="terms"><span class="code">Region</span></dt>
+<dd class="terms"><p class="p">With the country dropdown you can predefine which mostPopular listings are returned.</p></dd>
+<dt class="terms"><span class="code">My Channels</span></dt>
+<dd class="terms">
+<p class="p">You can edit the list of YT channel names to fetch some of your favourite artists/uploaders.
+            To apply this setting, and have new categories show up in the genre pane, use
+            <span class="guiseq"><span class="gui">Channel</span> ▸ <span class="gui">Update category tree</span></span> first.</p>
+<p class="p">It's not an exact map, but utilizes the search function to find channels.</p>
+</dd>
+<dt class="terms"><span class="code">Wadsworth constant</span></dt>
+<dd class="terms"><p class="p">Only influences the video homepage link.</p></dd>
+</dl></div></div></div></div></div>
+</div></div>
+<div class="sect sect-links" role="navigation">
+<div class="hgroup"></div>
+<div class="contents"><div class="links guidelinks"><div class="inner">
+<div class="title"><h2><span class="title">More Information</span></h2></div>
+<div class="region"><ul>
+<li class="links "><a href="channels.html#list" title="Available channels">Available channels</a></li>
+<li class="links "><a href="configuration.html#plugins" title="Channel and feature plugins and settings">Channel and feature plugins and settings</a></li>
+<li class="links "><a href="index.html#channels" title="Channel tabs">Channel tabs</a></li>
+</ul></div>
+</div></div></div>
+</div>
+</div>
+<div class="clear"></div>
+</div>
+<div class="footer"></div>
+</div></body>
+</html>
diff --git a/help/img/categories.png b/help/img/categories.png
index 82dfa95..59f2201 100644
Binary files a/help/img/categories.png and b/help/img/categories.png differ
diff --git a/help/img/channels-left.png b/help/img/channels-left.png
new file mode 100644
index 0000000..b6aa063
Binary files /dev/null and b/help/img/channels-left.png differ
diff --git a/help/img/channels.png b/help/img/channels.png
index 9ea5d75..db6b622 100644
Binary files a/help/img/channels.png and b/help/img/channels.png differ
diff --git a/help/img/configapps.png b/help/img/configapps.png
new file mode 100644
index 0000000..3252ff8
Binary files /dev/null and b/help/img/configapps.png differ
diff --git a/help/img/configplugins.png b/help/img/configplugins.png
new file mode 100644
index 0000000..9ffa076
Binary files /dev/null and b/help/img/configplugins.png differ
diff --git a/help/img/configtabs.png b/help/img/configtabs.png
new file mode 100644
index 0000000..080aa10
Binary files /dev/null and b/help/img/configtabs.png differ
diff --git a/help/img/inkscape_pasted_image_20100831_165045.png b/help/img/inkscape_pasted_image_20100831_165045.png
deleted file mode 100644
index 6e00f62..0000000
Binary files a/help/img/inkscape_pasted_image_20100831_165045.png and /dev/null differ
diff --git a/help/img/inkscape_pasted_image_20100831_171132.png b/help/img/inkscape_pasted_image_20100831_171132.png
deleted file mode 100644
index fc239ed..0000000
Binary files a/help/img/inkscape_pasted_image_20100831_171132.png and /dev/null differ
diff --git a/help/img/inkscape_pasted_image_20100831_171614.png b/help/img/inkscape_pasted_image_20100831_171614.png
deleted file mode 100644
index 9aa6fed..0000000
Binary files a/help/img/inkscape_pasted_image_20100831_171614.png and /dev/null differ
diff --git a/help/img/mainwindow.png b/help/img/mainwindow.png
new file mode 100644
index 0000000..5d8c3ac
Binary files /dev/null and b/help/img/mainwindow.png differ
diff --git a/help/img/pluginmanager2.png b/help/img/pluginmanager2.png
new file mode 100644
index 0000000..7d4ff7d
Binary files /dev/null and b/help/img/pluginmanager2.png differ
diff --git a/help/img/search.png b/help/img/search.png
new file mode 100644
index 0000000..142f655
Binary files /dev/null and b/help/img/search.png differ
diff --git a/help/img/streamactions.png b/help/img/streamactions.png
new file mode 100644
index 0000000..a5670f3
Binary files /dev/null and b/help/img/streamactions.png differ
diff --git a/help/img/streamedit.png b/help/img/streamedit.png
new file mode 100644
index 0000000..b1238a1
Binary files /dev/null and b/help/img/streamedit.png differ
diff --git a/help/img/streams.png b/help/img/streams.png
index fb3f719..4ef65b6 100644
Binary files a/help/img/streams.png and b/help/img/streams.png differ
diff --git a/help/img/timer.png b/help/img/timer.png
new file mode 100644
index 0000000..705aa00
Binary files /dev/null and b/help/img/timer.png differ
diff --git a/help/index.page b/help/index.page
index 992f226..8dbd443 100644
--- a/help/index.page
+++ b/help/index.page
@@ -1,10 +1,15 @@
+<!--
+# title: streamtuner2 mallard help pages
+# pack: *.page=../../doc/streamtuner2/help/, img=../../doc/streamtuner2/help/
+-->
 <page	xmlns="http://projectmallard.org/1.0/"
 	type="guide"
 	id="index">
 
 	<info>
 	<credit type="author"><name>Mario Salzer</name></credit>
-        <desc>Documentation overview</desc>
+        <desc>Internet radio station browser</desc>
+        <revision pkgversion="2.1.9" version="2.1.9"/>
 	</info>
 
 	<title><media type="image" mime="image/png" src="img/logo.png">♪</media> Streamtuner2 </title>
@@ -27,15 +32,29 @@
             <title>Configuration</title>
     	</section>
 
-	<section id="advanced" style="2column">
-            <title>Advanced topics</title>
+	<section id="extra" style="2column">
+            <title>Additional features</title>
     	</section>
 
 	<section id="footer">
-	<p>You can get additional help from the online forum. See help menu for the link.</p>
+	<subtitle>Project resources and additional help</subtitle>
+	<list>
+	  <item><p>You can get additional help from the
+   	  <link href="http://sourceforge.net/p/streamtuner2/discussion/1173108/">online forum</link>.
+   	  Or via <guiseq><gui>Help</gui> <gui>Forum</gui></guiseq>.</p></item>
 
-	<p>Update status: This documentation is based on available functions in streamtuner2
-	version 2.0.7 of August 2010. It is still incomplete however.</p>
+	  <item><p>Feedback on issues you ran into is also very welcome.
+	  <link href="http://fossil.include-once.org/streamtuner2/rptview?rn=1">Bug reports</link>
+	  don't require any account registration. But please include -D debug output.
+	  Also accessible via <guiseq><gui>Help</gui> <gui>Wiki/Fossil/Bugs</gui></guiseq>.</p></item>
+
+	  <item><p>Watch for new project releases on
+	  <link href="http://freshcode.club/projects/streamtuner2">freshcode.club</link></p></item>
+
+   	</list>
+
+	<p>This manual was last updated for available functions in streamtuner2
+	version 2.1.9, as of May 2015.</p>
 	</section>
 
 </page>
diff --git a/help/introduction.page b/help/introduction.page
index 03074b6..35bb574 100644
--- a/help/introduction.page
+++ b/help/introduction.page
@@ -11,9 +11,10 @@
 
 	<p>Streamtuner2 is a simple browser for internet radios. It aquires its radio lists
 	from various directory services. These are represented as "channel" tabs in the main
-	window. Below are the category/genre lists (left) and the stations for a genre (right).</p>
+	window. The category/genre lists are in the left pane, and associated stations right
+	to them.</p>
 
-	<media src="img/mainwindow2.svg" type="image" mime="image/svg+xml" />
+	<media src="img/mainwindow.png" type="image" mime="image/png" />
 
         <section id="play">
 	<title>How to select and play a radio.</title>
@@ -21,13 +22,11 @@
 		<item><p>Select a channel tab, like <code>Shoutcast</code>.</p></item>
 		<item><p>Click one of the genres in the left pane. For example <code>Classic</code>.</p></item>
 		<item><p>Now the right pane loads a radio list.</p></item>
-		<item><p>Double click one of the radio streams or use the <key>play</key> toolbar button.</p></item>
+		<item><p>Double click one of the radio streams or use the <key>▶ play</key> toolbar button.</p></item>
 	</steps>
-	<p>Note that some categories can and should be exanded. In a few plugins (modarchive),
-	the expandable genre/category brings up no station list on its own, while in Shoutcast
-	and most others it's a valid genre in itself.</p>
-	<p>Some radio stations cannot be played, because they just have a homepage. (That's the
-	case for all listings in the Google Stations channel.)</p>
+	<p>Note that some categories are expandable. In a few plugins (modarchive),
+	the grouping genre/categories are empty, while in other channels they're
+	filled genre lists themselves.</p>
 	</section>
 
 	<section id="actions">
@@ -36,20 +35,20 @@
 	other functions available. Either go to the <guiseq><gui/><gui>Station</gui></guiseq> menu,
 	or access the context menu with a right click.</p>
 	<table shade="rows" rules="rows cols">
-		<tr><td>Play</td><td>Starts the radio in a configured audio player</td></tr>
-		<tr><td>Record</td><td>Opens a terminal window and streamripper, which cuts the radio broadcast into individual mp3 songs.</td></tr>
-		<tr><td>Bookmarks</td><td>Copy radio entry over into the <gui>bookmarks</gui> channel.</td></tr>
-		<tr><td>Homepage</td><td>Most radio stations have a homepage. Open this in a web browser.</td></tr>
-		<tr><td>Saving</td><td>A radio entry can be exported as .m3u or .pls file.</td></tr>
-		<tr><td>Extensions<guiseq><gui/><gui/></guiseq></td><td>Some plugins add other features in this submenu.</td></tr>
-		<tr><td>Editing</td><td>This command is in the <gui>Edit</gui> and context menu, allows to inspect and modify radio descriptions.</td></tr>
-		<tr><td>Searching</td><td>You can get a radio list according to search criteria.</td></tr>
+		<tr><td><p><link xref="playing">Play</link></p></td><td><p>Starts the radio in a configured audio player</p></td></tr>
+		<tr><td><p><link xref="recording">Record</link></p></td><td><p>Opens a terminal window and streamripper, which cuts the radio broadcast into individual mp3 songs.</p></td></tr>
+		<tr><td><p><link xref="bookmarks">Bookmarks</link></p></td><td><p>Copy radio entry over into the <gui>bookmarks</gui> channel.</p></td></tr>
+		<tr><td><p>Homepage</p></td><td><p>Most radio stations have a homepage, which you can start a web browser for.</p></td></tr>
+		<tr><td><p>Saving</p></td><td><p>A radio entry can be exported as .pls, .xspf, .m3u, .desktop, or .json file.</p></td></tr>
+		<tr><td><p>Extensions<guiseq><gui/><gui/></guiseq></p></td><td><p>Some plugins add other features in this submenu.</p></td></tr>
+		<tr><td><p>Editing</p></td><td><p>This command is in the <gui>Edit</gui> and context menu, allows to inspect and modify radio descriptions.</p></td></tr>
+		<tr><td><p>Searching</p></td><td><p>You can get a radio list according to search criteria.</p></td></tr>
 	</table>
 	<p> Play, Record and Homepage also have buttons in the toolbar.</p>
 	</section>
 
-	<section>
-	<title>Radio lists get stale</title>
+	<section id="none">
+	<title>Refresh radio lists</title>
 	<p>After some time, stream informations become obsolete. Therefore you should regularily
 	refresh the lists. The <gui>Reload</gui> button in the toolbar (or <key>F5</key>) is your friend. You can
 	also update the category lists with <guiseq><gui>Channel</gui> <gui>Reload Category Tree</gui></guiseq>
diff --git a/help/pluginmanager2.page b/help/pluginmanager2.page
new file mode 100644
index 0000000..55027e4
--- /dev/null
+++ b/help/pluginmanager2.page
@@ -0,0 +1,77 @@
+<page	xmlns="http://projectmallard.org/1.0/"
+	type="guide"
+	id="pluginmanager2">
+
+<info>
+	<link type="guide" xref="index#extra"/>
+	<link type="topic" xref="configuration#plugins"/>
+        <desc>User plugin installation</desc>
+</info>
+
+	<title>Plugin Manager 2</title>
+
+	<p>For updating or installing new plugins (extra channels or
+	features), there's a user plugin manager. It's available as
+	feature extension itself.</p>
+	
+	<steps>
+	 <item><p>See the <key>F12</key> config dialog <key>🔌 Feature</key> section.</p></item>
+	 <item><p>Enable the <key>⨯</key> Plugin Manager (listed near the end).</p></item>
+	 <item><p>Restart streamtuner2 one last time for this change to take effect.</p></item>
+	</steps>
+	
+	<p>Once activated it brings up a new <key>📦 Add</key> tab
+	in the configuration window.</p>
+	
+	<p><media type="image" src="img/pluginmanager2.png"
+	mime="image/png">Install dialog for user plugins</media></p>
+	
+	<p>You can scan for available/new plugins there. And have them
+	downloaded right away. New plugins are just downloaded, not
+	implictly enabled. Reopen the config dialog to see them in the
+	regular <key>📻 Channels</key> or <key>🔌 Feature</key> tabs, and
+	then enable them.</p>
+	
+	<note><p>Updated plugins will not be automatically loaded if they
+	were enable already. That requires either a restart, or disabling +
+	saving once, then reenabling them.</p></note>
+	
+	<section id="configuration">
+	<title>Configuration</title>
+	<list>
+	<item><p>Alternative download repositories may be configured. (Little
+	practical value at the moment.)</p></item>
+	<item><p>And you can let the plugin manager handle autoactivation
+	of changed plugin states.</p>
+	  <list>
+	  <item><p>After reconfiguring existing channel plugins, they get
+   	  automatically instantiated or disabled in the user interface.
+   	  (Which avoids the usual restart).</p></item>
+	  <item><p>This currently doesn't work with feature/core
+   	  plugins. Plugin deactivation is mostly visual, but does not undo
+   	  menu extensions or undefine callback hooks.</p></item>
+     	  </list>
+     	</item>
+   	</list>
+	</section>
+
+	<section id="configuration">
+	<title>User plugins</title>
+	<p>Downloaded plugins are stored in <file>~/.config/streamtuner2/plugins</file>.
+	To remove them, delete the individual *.py files there manually.</p>
+	<note style="bug"><p>Currently system-installed core plugins take
+	precedence over downloaded updates.</p>
+	<p>And you'll have to take care to eventually refresh/delete outdated user plugins,
+	whenever you install a newer Streamtuner2 version.</p></note>
+	</section>
+	
+	<section>
+	<subtitle>Disable user plugin loading</subtitle>
+	<p>Since this is still rather experimental, you may disable all
+	associated features by starting ST2 via:</p>
+	<screen>streamtuner2 -d <input>pluginmanager2</input></screen>
+	<p>That'll inhibit loading this extension plugin. (Also works
+	with any other plugin id.)</p>
+	</section>
+
+</page>
diff --git a/help/reloading.page b/help/reloading.page
index 5c6763d..6f34022 100644
--- a/help/reloading.page
+++ b/help/reloading.page
@@ -8,9 +8,11 @@
 </info>
 
 	<title>Reloading</title>
+	
         <p>Station information can get stale. Especially Shoutcast invalidates old information
-        frequently. Therefore you have to [reload] the lists. There is an action button below
-        the menu bar for this. It retrieves the current data from the directory service.</p>
+        frequently. Therefore you have to <guiseq><gui></gui> <gui>Reload</gui></guiseq> the lists.
+        There is an action button below the menu bar for this.
+        It retrieves the current data from the directory service.</p>
 
 	<p>Favicons aren't loaded automatically. There is a menu entry in Channels for that, which
         works in the background and doesn't display the new icons automatically either. Simply
diff --git a/help/search.page b/help/search.page
index 0a87c1d..da56aaf 100644
--- a/help/search.page
+++ b/help/search.page
@@ -22,28 +22,26 @@
 
 	<section id="cachesearch">
 	<title>Search window</title>
-	<p>You can get to the search dialog via <guiseq><gui>Edit</gui> <gui>Find</gui></guiseq> or <key>Ctrl</key>+<key>F</key>. Centrally to this dialog is the
-	text field, where you can specify the phrase to scan for.</p>
 
-	<!--p>Above you can check which channel plugins to inspect for the search term. Using this
-	allows to limit the search to specific radio station directories, but usually you want
-	to search them all.</p>
+	<p>You can get to the search dialog via <guiseq><gui>Edit</gui>
+	<gui>Find</gui></guiseq> or <key>Ctrl</key>+<key>F</key>.  Centrally
+	to this dialog is the text field, where you can specify the phrase
+	to scan for.</p>
 
-	<p>Below the search phrase text box, you can specifiy which station fields to look
-	into. Often you just want to search the titles of radio stations. But you can also
-	have the search occour in the description/playing fields. Alternatively you could
-	just search the homepage links.</p-->
+	<media src="img/search.png" type="image" mime="image/png" />
 
-	<p>And then there are two search methods.  You mostly want to use
+        <p>It either will search in all channels, or just the last active
+        channel/service.</p>
+
+	<p>Then there are two search variants.  You mostly want to use
         the live <gui>Server search</gui>.  It passes your search terms to
         the actual directory services, and loads the most recent data into a
-        result list (this might take a few seconds).  It's not implemented
-        for all channel plugins however.</p>
+        result list. This might take a few seconds. And it's not implemented
+        for all channel plugins. (Some websites/APIs don't have a search.)</p>
 
-	<p>With <gui>Cache find</gui> would just look up entries in your
-        already downloaded channel/genre lists.  Since often you are just
-        looking for something you had already seen, this will give you the
-        desired results.</p>
+	<p>While <gui>Cache find</gui> would just look up entries in your
+        already downloaded channel/genre lists.  This is sufficient when
+        you're just looking for something previously seen/listened to.</p>
 
 	</section>
 
diff --git a/help/streams.page b/help/streams.page
index 31f2bd1..8d95b11 100644
--- a/help/streams.page
+++ b/help/streams.page
@@ -4,6 +4,7 @@
 
 <info>
 	<link type="guide" xref="index#browsing"/>
+	<link type="topic" xref="index#functions"/>
         <desc>Radio streams lists, station information columns, entry actions.</desc>
 </info>
 
@@ -30,13 +31,11 @@
         <p>Additionally most actions are available in a context menu. Right click
         a station entry to display it.</p>
 
-	<note><p>Reshuffling of station entries in the list is possible by dragging them. But
-	this is only a visual effect and will confuse the internal ordering of entries. Don't
-	do it.</p></note>
+	<media type="image" mime="image/png" src="img/streamactions.png">Station list</media>
 
-	<p>You can always click the current category in the left list, to have the current
-	station list redisplayed. Which is useful after updating favicons, or accidental
-	dragging of entries.</p>
+        <p>You can reach them in the <guiseq><gui>Main menu</gui> <gui>Stations</gui></guiseq>
+        as well. The <guiseq><gui>Extensions</gui> <gui></gui></guiseq> submenu there will
+        list a few other plugin extensions.</p>
 </section>
 
 </page>
diff --git a/help/streamtuner2.1 b/help/streamtuner2.1
index 690bbab..c4a3838 100644
--- a/help/streamtuner2.1
+++ b/help/streamtuner2.1
@@ -1,6 +1,6 @@
 .\" (many thanks to the manpage howto!)
 .\"
-.TH streamtuner2 "January 2014" "BSD/Linux" "User Manuals"
+.TH streamtuner2 1 "2015-04-02" "2.1.4" "Application manuals"
 .SH NAME
 streamtuner2 \- Browser for internet radio stations
 .SH SYNOPSIS
diff --git a/help/technical.page b/help/technical.page
index 414ad28..83ed204 100644
--- a/help/technical.page
+++ b/help/technical.page
@@ -3,7 +3,7 @@
 	id="technical">
 
 <info>
-	<link type="guide" xref="index#advanced"/>
+	<link type="topic" xref="index#extra"/>
         <desc>Filenames, Directories, Dependencies</desc>
 </info>
 
@@ -11,16 +11,17 @@
 
 
 	<section id="dependecies">
-  	  <title>Dependencies</title>
         <terms>
-          <item><p>Python 2.7 or 3.x</p></item>
-          <item><p>PyGtk or PyGI</p></item>
+  	  <title>Dependencies</title>
+          <item><p><link action="install:python">Python 2.7 or 3.x</link></p></item>
+          <item><p><link action="install:python-gtk2">PyGtk or PyGI</link></p></item>
           <item><p>Gtk2 or Gtk3</p></item>
+          <item><p><link action="install:python-requests">Requests/urllib3</link></p></item>
 	</terms>
         <terms>
   	  <title>Soft dependencies</title>
-          <item><p>Python-LXML</p></item>
-          <item><p>Python-PyQuery</p></item>
+          <item><p><link action="install:python-lxml">Python-LXML</link></p></item>
+          <item><p><link action="install:python-pyquery">Python-PyQuery</link></p></item>
           <item><p>Python-Kronos</p></item>
           <item><p>Audacious</p></item>
 	</terms>
@@ -31,32 +32,32 @@
   	  <title>Configuration files</title>
         <terms>
           <item>
-            <title>/home/$USER/.config/streamtuner2/</title>
+            <title><file>/home/$USER/.config/streamtuner2/</file></title>
             <p>Corresponds to the XDG_CONFIG_HOME setting. All ST2 configuration settings
             are contained within here and are in JSON format.</p>
           </item>
           <item>
-            <title>~/.config/streamtuner2/settings.json</title>
+            <title><file>~/.config/streamtuner2/settings.json</file></title>
             <p>General runtime options, plugin settings, and configured audio players.</p>
           </item>
           <item>
-            <title>~/.config/streamtuner2/window.json</title>
+            <title><file>~/.config/streamtuner2/window.json</file></title>
             <p>Saved window sizes, list widths.</p>
           </item>
           <item>
-            <title>~/.config/streamtuner2/state.json</title>
+            <title><file>~/.config/streamtuner2/state.json</file></title>
             <p>Last category in each channel tab.</p>
           </item>
           <item>
-            <title>~/.config/streamtuner2/bookmarks.json</title>
+            <title><file>~/.config/streamtuner2/bookmarks.json</file></title>
             <p>Is a separate cache file for your bookmarked/favourite radio stations.</p>
           </item>
           <item>
-            <title>~/.config/streamtuner2/cache/***.json</title>
+            <title><file>~/.config/streamtuner2/cache/***.json</file></title>
             <p>JSON files for stream lists in each channel.</p>
           </item>
           <item>
-            <title>~/.config/streamtuner2/icons/*.png</title>
+            <title><file>~/.config/streamtuner2/icons/*.png</file></title>
             <p>Holds downloaded favicons for station homepages.</p>
           </item>
 	</terms>
@@ -67,15 +68,15 @@
   	  <title>Installation spread</title>
         <terms>
           <item>
-            <title>/usr/bin/streamtuner2</title>
+            <title><file>/usr/bin/streamtuner2</file></title>
             <p>Is the main binary.</p>
           </item>
           <item>
-            <title>/usr/share/streamtuner2/</title>
+            <title><file>/usr/share/streamtuner2/</file></title>
             <p>Contains the individual ST2 python modules, and plugins in channels/. Also packages in pyquery/, but which is only used if the according modules aren't installed by the distribution.</p>
           </item>
           <item>
-            <title>/usr/share/doc/streamtuner2/</title>
+            <title><file>/usr/share/doc/streamtuner2/</file></title>
             <p>Contains the README, and Mallard/gnome-help/yelp files under help/.</p>
           </item>
 	</terms>
diff --git a/help/timer.page b/help/timer.page
index fac8f03..90efb96 100644
--- a/help/timer.page
+++ b/help/timer.page
@@ -4,22 +4,24 @@
 
 <info>
 	<link type="guide" xref="bookmarks#other"/>
-	<link type="guide" xref="index#advanced"/>
+	<link type="guide" xref="index#extra"/>
         <desc>Programming recurring play and recording events.</desc>
 </info>
 
 	<title>Timer</title>
 
+<section>
 	<p>You can programm play/recording events with the timer plugin. Simply select a station
 	and choose <guiseq><gui>Station</gui> <gui>Extensions</gui> <gui>Add timer...</gui></guiseq>.
 	A small popup will ask for a data/time string. If you press <key>OK</key> the station
-	and the programmed time
-	will be stored in the bookmarks channel in the "timer" category.</p>
+	and the programmed time will be stored in the bookmarks channel in the "timer" category.</p>
+	
+	<p><media type="image" src="img/timer.png" mime="image/png">Timer</media></p>
 
         <note style="tip"><p>Note that streamtuner2 must be running for the programmed timer events to work.
 	(In a future version there might be the option to have it handled by the system cron
 	daemon.)</p></note>
-
+</section>
 
 	<section id="timestring">
 	<title>Time specification strings</title>
diff --git a/icon.png b/icon.png
new file mode 100644
index 0000000..e2271c5
Binary files /dev/null and b/icon.png differ
diff --git a/logo.png b/logo.png
deleted file mode 100644
index 3e9a2e2..0000000
Binary files a/logo.png and /dev/null differ
diff --git a/logo.py b/logo.py
new file mode 100644
index 0000000..c731efd
--- /dev/null
+++ b/logo.py
@@ -0,0 +1,114 @@
+# type: binary
+# api: gtk
+# title: streamtuner2 logo
+# description: encoded PNG
+#
+# Allows to be packaged within PYZ archive.
+
+png = """
+iVBORw0KGgoAAAANSUhEUgAAAUEAAABzCAYAAAAGy7AjAABq0UlEQVR4Aezda2xT5xnAcWi77rJKm9bJ9rHPCSG1WBLH5ziOnQtNRaR1+9BpFxB0ZQgGE0ViarnQDhQI5AIhxECAXEJCVkhKYlInjnMhhGZkhNwdiqpW+7BFmrRqFZXoNE1ojC4E3j6PzWsO5QhzROOm1vPhJ6PgONbR0V/v8x7nZB5jbFbV1tZm1tXVba+qqvpDZWXlVvD7Y8eOvQrWlJeXv5CXl/etefPmPYHPjTVCCIlFBHc0NDQwLfX19TdXr179K4fD8X0I4fy4OriEEIoghg1WgEU8elpgNXg1KysrLyMj4ztxd4AJIRRBGHtLHxZBtHnz5n6IYDKMxk/F1QEmhFAEYQ+wLFoEYc9wZunSpflpaWlGGovjDSE0Dh+MEkE+Fn/qdrt/TGNxvCGEIljBQxfNli1bBpxOZwqNxfGEEIrgsUeNIIzFt5ctW1YAF0poLI4bhFAEazBw
+j8rj8fzL5XK9KMvyd+PhABNCKIJ1eiKItm3bNohjMewPfuPrfoAJIRTBBr0RxLF4+fLlhXfH4ifUr4doVCaEfG0iWF1dfRLDptehQ4f+nZub+5LNZnuGv57hHUOJ0CistL5s/QF8/ekVK1Y8OdeDSAihlWCT3gBy+/bt+1t2drbDarV+E1eExjbjFUO7gRl8hv+a3jadt9RaXnvujecS8P/xijI+Z65FkRBCH5Zuqa+vZydOnODUvzscNYQFBQWDiqIswhstGH3GDwwdBhbhB+2GW6YWU9DSYClKKk1ScnJyvo17iXMliIQQ+rW51uPHj+M+XwiGj0cRRt5bmzZt+k+0EG7durXZ7XYnmXymvxg7jcwYuMcQUEURGM8Yp8wnzVVShRT64DUGkcZmQr4yFMEjR4744E4yDGEM1UH0eDy3XC7XSHFx8UeqVeID4Ot31q9fXy74hL8auyF+XSqd3INhhJXjNaFJ8IrV4ivKWuXZmO8jEkIoghUVFX64OMJQ
+TU1NCI9ieXn5tNPp9MMFkLUHDx78BFeI3BejCN83ndCa8Impx8Qiuk0Mo/hIYfQbbpiaYR+x3vK69U1rbPYRCSEUQRh5u2BfkMEFEoQxjCgrK5uGcdULnHADhV/CqvG61ujMpbWl3Tb1mljIWRW9YewwzghnhKD4llicVDaL+4iEEIogrPDOwr4g4zCIPIr79+/HCLaAZLyx6qpVqzbA/01rjc/4KPtlJvQJTDin0iuw6GF8eBxhr3HK0mSpko5KL9I+IiFfKoogjLx9sMJj6OjRoygSxNLS0lAEYV/wR/DcJ+HfP9ywYUMJBPKOenTm5ABE8LxwT5+Kdhh1rxpNftM182mzV6qVXlHWze19xOFTKfOHTqU8QycymcMoggcOHOg/fPgwg73BCB7FvXv3qiM4H2OTnp5uhivGJ7XGZ7lTZuZ+c9i7EbMXxoDxhuAV3hX/KL5u3a5vH3GizfkqOD3uc24c96Ur4Ev/Oyojb9tSh5tSZ8D7w42pNWDVcGPK
+QjqxyRxCEYSRdwBGYvw4TAgGkUcRrgpHIsijgpGRZXkh3G26Qz0646PcBRG8AOH7k0o/iBJGjTjqH6e7TDOCT5gUG2Ef8UD0fcSg39UB2IQ/g020h1yfaMvohzAWgZ9CHL/3uMd3tNm+ZuR0GuMgitxVCKMfbIMwZoOn6WQnXxGKIIy8gx6PhyGMIYdBLCoqeiCCCEdQ/BrcX/AcH5/x0d5jZ5YByz0XwngYdcdRbxhVcRT8wpR4WqyGfcSfaO0jBjsyP54MZLJgwM2CHZyLYRjvxvE2hPFDUAdxXANhNOg9vmNeuXLUK7PRFmQPaw77Qhw/AyPgtzE+wQihCMLIOwwjMUOwPxjCo1hYWKgZQYSjJ95JBj4ofYGPz/azEMGLlrA/qwyEJTYm/l88L97hcZyFMGrGUQgI1ywtFq9UL610rHM866t1S5Nd2SzYmcUmu+7qzAwLILdWHH+u9/iOtzrGxlodLOSMEuZFMtOK40izvSDGJxghFMGSkpIxGInx
+4zAIYxixe/du7QiqQqgoig1urTWEI7S9187ESyITB1UuhmEYlV8oH6UvTh9N3Zj6YVJl0qdirzgTddX4WOO0Rhi7TTfSfNKV4jY762vPYmMBiGFX2CS43I2PD8Zx6c9chXqOLawcnwI3YaxmsN/Ixt/hHGxcHUZVHNf9Ov2fcLzNMTzBCKEIwr7fBIzEjMMg8iju2rXroRHkIYTn2CGEE/Y+O5OGJCYOiWGX7icvk6fgwsp+eL3X4HuKXVmuU7a1tnGrx3o1IZAwzVeNusL4GKtG81mBLelIZG+22Zjfn8nGOxdDDHNYsCeHTXbnsMs94She8GbPwPtt03NsYeUoA9xrjIAohmAYteKY90LG3+HnxPIP3RNCEYSR9z0YiRnAu8KgSBB37twZLYLq0diZfC75M2lEYiHD9/Awula6rjkcjk3ABq+ZBvLg9X8D37oT1Nlftl9cVLLoHwtaF/yPj9JaYZytcTqjM4FtbE9hl9qfZ8Huxey93rDGI9k34X3q
+GlVhrP5d8L6x2hWGYdSIY99bTgxte4xPMEIognv27HkfVoMMwWgcwqOYn58fNYIc3lcwcSDx44SxBCaNSvcbCVuyfsltt9t9KDMzMxHDibfoxxuz4utDGBfD43L4eW+ASuUlpTc5P3lqYePC6+KAeIfvM0aL4+OO0wt6LKypMocN+p9nl8/lsit9uaxke9Z1eE+69gQvd2cdn+zS3nNUx5GH8USZC0O7O8YnGCEUQbgV1gewGsQrwSHqIO7YseORI4gfnVkw9Dl75wEWxfUF+heLphgTu8D2sgtLEQSlINKRXiwUkN5ZCoigqBhL0GgSNSZGjSYk/ySmJKYkatDEgkHBQi8gaowFu7HEoIJw3znLzrI7jMImprz34ff9voV15+7M7M6Pc+499w73DKeUQzQ43I1jkiOBFalPQko8RSaTDcE2gQE4cqssaRkNEaEI3m8yPPrAoxyee9XM0exLWaasVrhZ+Bt7D7uD6msEMQJPTowI+zs9sijbiuz4yI4c
+/2EqqdhtR6LDJt+A/eBoc26P77A+dgzSakCZVlMwiBHIz7RA0fr+w1+wfvrplyD0+9VBNEgQlCEFCjEnJ0crCfJKeL9wj3AJwinjaAJCdEhxIHK5vNPW1jYfIsfxVA0fJUNgIJbfYEmLgYHBKGNjYwHI0ByiRC8QZyL8vMLMyuxjWYKsXLROdIWzi9OOQkSYxah9Os3+nkXk8Zbk6/enkuO77Unlj/bE0cGiSZvzWr7LdgjQdnyXLabTKkCMCpjkGB5ocZ0SbT/9/IP0SxBS3iaIBgkCo8EKKCnOnTtXOwke5p3hHuMSBUe7ocQ4NXUqSpCEhIRUQio85UX4B+0+BwwDnlcyHHgBGPXcc8+Ne+aZZ1hjxowR8Xg8XMHaQV9ffwbIMQ1GpVeZmpl+ZBRqVCZeKb7I/Yr7gBqAYR6d7ls6zd7JIilxVuTrD6aS8h8dyb6v7LGvbps25xWiR/OKIjtSXoTptBogRYQux2MgxqlTzBv/hS9YP/30S3D+/PnN
+MACCI8EqKClmZ2c/VoL4HAVGcPwy/q+84zyCcI9zuzjWjV26HUlOTiZZWdkPHLzm7fKNLiqcJa/6JDitbkdoRlNxePYvFVE555pj5128FJ937U7CghsPEhfcaEtaeKMteeH1tqS8K21J8y62Jcw91RabUdUemVLcHhb7VVtA0PpWD9/5v9uFhtw1ybe5L/xY8pASYm9ipMuRs4sNErQm33zoQCr2OpP335qKfXXztZmbDNFjYsWeqUTFbsROAZMciz6yaadE208//zD9EszNzT0NIsRBEAUoREqKUAitIUFa6joIGAI8Azw3crTuKP5h0UVeBY+oKFcDxDglawpJSkpSpNt+wctISGYNici7SqIW3CDRQAwQC8Qt/I3EAwlA4sKbCpKA5EW3SMqim0S+6DciX3iDyGHb5NyzJDG7gcSklZHw+J0kMLyQ+M5YSVyDUsmk+e5E+p4J4ezjMJftMMiRUwQSjLcm337sSCr3u5IlebZ3IGr1hWN8GhgMDFRL
+4xnFWLXXcUvlXgdS+RNFV1qNMMlxy+s2rXCec/+FL1g//fRLEFLeX2EAhCAoQ3UhwvxghQShP06mFB6KYJhgUiLbNuQrH6f4nxdNk1d96p11sto/52yrtNia8Kv4XVTyCa+Sh6ikaJttS2AVGkXKPTs686Fb0NYr08K+bpwW9k2NS/DnFU4zPzrmEPBu2VSft0umeKwttnZ7Za+l09LdFvYLdpjZzvnGxDLlC8OJMdukJiEfCA38t3JFbhuFUu/NppOTttk6Ld7h4r3moOf0jdW+gVt+CQh+56p/4Pq7PtML2t1nZhOrLD9i+PZEwvuRqyrdQSnS5cjdwybyBBvy7TZnUnXQjUTOnvKHheXsEDhuMcACRgPDgWeBocAguhSr9ztVVu13Igr2OXaxF3EgTHJclG19G86z23/hC0f7IzcYuiCGsFisp6E7YihE+4OVzw/8/2Ztx376JQgp73kYACEIRIUKKCnCajG4svRnFq5Zs+zifp7vkla7w33OLxe8
+cls6vXNbiE/uReIL+M0Dci8Q6c9WhF8DAqxWo6obmxwbAsvwK6LMmJiYuxwO5zPo85sL+xELRACzgTAgBAgCZgHTAX/AF/ACPIBpgAvgBDgocQW8Bg4cOAMIGzp0aOLzzz8/d9SoUQU6OnobJVKz7wL8pp72fMNEVbbDVNPI/ZFD5Ik25LtPXUnVz+7E3SOQ5C6+S7IX/tYqn3O6ISrh8OfeAe/msDg2NvB+QmAc8AIlxdeXmwyrOejysLrYhVQXO5PqA2qAFJnkODtoMg6KjPuX5TcAJQefyQtj9JeajrIoyx41uWbtKMvmbSOtfvl+lGXTp/D7xtFmu9LHSudasdnscfDvWZTi/9My7KdfgjDT4yKIEAdBEJShitS09E5r99T7zvIy4pZznkzLuUDcAQ8QnidI0AvwBjwyTtyzjyhqEf1s0iaoFRAKFCIFCtF6njWJjY1VRJmpqamtUCazGSTlDPthAIgBISAAeAAXYAMsQBfQUQpnLDAaGAmMAF5U
+MlL5f7rKbUVDhgyRDR482AxkaDtixAjPjW/YFyV/baFRtkOvZ+TtBQkm2ZLvP3MlP37rQbz9FqAEe5CT/3tHavavZyITDn3tPf29eVyB4xTc9/ffmuRZW+JGan5GXLs4iLgooMkRhOhMbG0sqv/NyA/lN47nOG70lJqXRzlcbxzl0tk52oUQBa4MuBEyxrGlaaxV0dIx44WC0aNHD8PosJfIkk6/OPvpE3932jMIVoK5AiIkFChESoop8jRi7ZlFnECCrjnnVCJ0yWxuswz56oJk6vyyF3UnfgztrB4wYMBL/EP8m4J6AVFQ1w0lRcvFliQ6OhqjTcWgC6TZG+EClCmjqKeBoUqGqDFYySAlA9UYQKGewim3G4ptKtseBhJ8oeKw95G8A5ZU2Q5jPSNvH5ekJk0hO76cRrZucG6bNNmvdGbI9sPJmSeu5i7+nZIgA793ps09e3bLxuVVdYfdSe3haaT2EIUbQTEyyXH3l444KFL4bwkQo7nxDgdjxnrc
+uTDWmxANfBjwpeFx+bzO5DfjuVzuOKz3xDbV5aqrqzsS0unxenp6OhTjx48fhWl2vwj76Qt/V3/P4GdGiYeZROzyladn3wcREgQGQhCVEJNTUokVSNAhubTTMnL3dX3XFTVjRG7fPTVg8HpoYxmQCcwGPAYNGmQnrBBeETYKibChG0qKCIrQZLcJ8driReRL5J0w4PIJYKjer0bnUcdysnGWHCg92TBzX3PDzJ3N9TO/bK6f8SHwzonaGW8ArzTVTl/SVDN9HpDeVB0Q31Dp35p/yFqjbIdzBIXYDW8/SDAZJLjdnSzKs/8d+sKSYD/sAb9x4yek2zsv/Sg4YlclCO82kwy/276K1Jd5kDqKUncFKEa6HFGKW96wx0GRjH9NgG5H88fPJJ0A0WBWT3QCGQjCx/aHug6frgERclB81PdsvNsBF53AB7/pBN67rRPUqkLXt6lIF/7ha3rbz376edLyG2oU8YPDxOTydyZlNl+xnHOapKTnYN8fDoKooKSY
+lJRCJlh53xqtZ7Abtl0D5AExgC9gB0wA+MDY4cOHjxLWCi8Km4RERSMFsxjFu8V3pF9INxtsMZiAN2/X5u5yILsdID4CAiQnFcwiIMUuGhD8P6AemaEAZEgWl9pQJTuM9Yz8Yh5JTbEjO7/2JLu+9myrOOT9fUWp90dlB9y37tvluvHbzxw2vL/Z+q3XV5pvWLY4+Jtly9c2rnpt/71Vr9eSgtXNpHR/PGk46kXqFXiS+iNqqMTYLceFOVNuQ7+r4z8tQBzo0PE4kKQ7u7NDdzYhiF74I4hgIJJOJ9Fz/mAduE2PitpZbp8Hs6IJ6UHAsWaIBk3x8+5tX/vp50nIb+CQ4aynDWOLQ03T6svNs04TC5DfJGAykJQ6B/vnSFpaGoJCVEkxPj6+A4qTq6GmOR/a8QYmAxJAB1AUOlMjpFgnKKoXtYiaRUTBiS6EJygpPlaOncJyYZ14n7hAVigz6YsQQWhXTtROJ0hzHYKio2CW44m6meSlI7bqZTuIRj0j
+/2ceSZNPJbu+9SIQOZITNQGkqdq/iyoKP9JU6UcaFfiSxgol5T4KGpDjiHcXxxCQIoMct77l1Fq8y3V5Vcm0jNrDHgm1h90jQI6zIGr0hqjRBZgCUaMFYPQkB0HGsCfosqPuXmXHEaIgnoHwS/dZs8pvsAIOXGKFNN5ix9xpZyfA84ndcCiSgPjWB3oTY8Ih/X0RI0K2xwcRnGRC6LADS87p6OhYYfrc2772089fkt9Io1nPG8QfkpukN5yckHWKmAJmwESgS4anSGJKBs7iQFCGCCVFHMl9CLMz9sCX2kMpvuHA00xlISgtUZPoougUyO+kGs2AdmLsFJWL6iT7JQWG7xua4JxiuhBBQmyUESUnFBUFJUYmOTbVziCLQYJU2Q5TPaOghK+Q4A/fe5PGakUb6m1S78MgRz9NOVY8So7efZIjUqcZObY8qS8V9sexZxXnclMJUZCmCSf40HU9s5AvIKrLBlmFwaM/9OUF6bIFqWyX1Tu4CS13eRmEqMjs
+hhty8Ch8Xwxgm2c4PoWRvCxCKPhzuuCGlZyHSNC6X4L9/C0SRFnoea4dIU08slCW3nDJKLOZGGeeJCbAhKyTxFRdhvB7QpJcMYsDSUlJQSgpogTbYfDiCyMjI0x7H3vfXxSV+IT4ovi0mKg4JSYoRUqMWssRhVghqhPvF2sIseaI9/SGcpBLJdIlHkpCj5EjSC0AJUiV7DDWMwoOgwRT7UnRDl+Q5kzGtBrE+o/Lcc83bnUgDasnlAoP5yWdOcCfC1LK6UKghDtz+zkdXb15IL0pY8eO5UG/4Wgsm8EBDkAPSmMmsI2nJfNTL9wUzCeEjjDnjzZdoakfvp4XUBgpzCNEwYJu+NEKCdoqB0cG9JGnehlpZqpzpBjQSzfRQGpQjUL7esgn225vx8pwnFTbAHPbavs0GLtDlOd/MPCfvn2t1tGfMLbYW5LWcF4/4wQxyDxBZCBBQ6CHDDObOzluK8/Fxyd0JCYm4kwOhBIigrV81M3X9fsyd1h8UnxJfEZM
+FPxCg1mO2oixU1QJQjwgLvjfPqctVaVepO6oD6k/huJQyISSC4Mc/RU0wO+Ly2zUynZogBSFZYLuSLBmRi99jlrIsfqvyXHFUgdcZWbmk0iFscZPOPfqGVE+IRos7iQsmcN6EJgFVfZCFxBeOBAdsji28VniJYRosLQLjsu81SBOLm/W1mjxMkLoCBIPtoAEfWE/eCjW3oB9GQcMw6JtHFnGQRXq/5QjziOoQm7Yv+d5M96cJEopThGlH1sqzDg+D/8fj0X9WsHvK7bJtY0QCJP3xoqyjr8szqnfKM6t3yLOPLpSlPxjBsdJPomqh2QWBXOtJf6R4TomSkXyPTHiOWWLJPNq1krm126QZB8tEMl3p3HdsixxxBzmxD+H+0yXOEbI2KWAx6Z2HnTVRtUH4j4JZr06QZp7ZI50Ud0b0vz6TZLc0qWiiM3eyu2eoeSPbeJ2eqZuOpJ5Zen6S5q2GLx85mv9/OqN4ozdGRxjWxH+oUMh/hdl2Ocv9njvDWMF
+KRX/E2c0EQkgBVCETDI0SDz6YLjQ+QhstwWivQ7o+1PM5EBQiJQUoZxFqwUUJKcllyVnJUTyqxpnJOTvEKNThSHJO2RJdkGZSdVhSB2PeIMUvTSlCKjLsR5+zgcJqsp2KGq6axqFR0CCKXbQJwjtVIG8qJS69z5HZjnWPRk5xsfY4nJeoicgwYEoKMnS1t8lBYSoWIEC+6NdV4+VghddL3V/Q+BCM5TkX7ksfYUQBau64Qdt+hhEKeaHbo2WriZEX51XgVXtnfor793Xf+VBq4pVDKxW8mrbH9DeBFHcl54Gr7XfNXj1QWs3ba1iedFq3Gd+6GZr/YJr5QZrOzsN1hJisA7eq+DqVdjWEqVBiRzlJ07ZOd2g4NIh2bqH7bL1hPTgTaQT9vPKaVH8p3NQ/ChhxgiLEpfEbLR0wfE82as3Gg03dHQYvk2IBhu7MXjt6q/S7J9WsqWmQtw3NWEN4Lqlcow2tt81erut1ejtByr0F5d/gvsh8psnkr16YZfR
+5o52oy2EqGMMGL7eckLgn6eIxlFs2L7BwhK50aZ7vxm/S4gG78F2m+7e0V9UUqjHl4hRzP+1Ufs+fanZcQdn8FPrLgrSG4kQEIEAu2V4QkOG/OAvbg5+XrdIOdobA8XLnSBCgqAM1YUYGRmplQQhErysIcCzatDkCFJkluOfSKedKw3JAhDiTihErjzkSWrLIEos81Skkg0KKSIoSW8YHbbWLNup00R0TNg1OvwNbF/h9+g+x97k2Kgux5l/WY5OjpPPQGE5819qLSWIEZj05RtX9V8nxABZ0w3fv+BduHhEj4sK8HmMSnhOCWEcx4R1XPuo93j2UYXAe1yHuA0cC+9I+H+2MPLdKJpYmHlLE0NkgybQXqAwZE0sk1hE0Vt2CGatzJC9ee+2QjKbCDFSIlt14Q6IwxPqRIdj1MWZ7DNOtur8TqPNhCh4hwEGscgKGsrYhlamSkk8Re9j1c/6xsXo7TvnUCo9KOzCRJ33uzBae+4kf1qiK+4fld5y7WaZ
+mHxAiIr/daE/74djPLuZM4w33/p1woeE9OAjCnyP1nvCwMWJ+DkYrqhYAf/fCRAV2CYNw7VnT7LtghyVWcBT/3kJ4k6+YCkfwk4uf4+b3kB4AB8BCT5KhuMc8s/+n6cGfgHbLgWmQ4GzMaS8hAKEqICSYkREhHYSbBZfURcaJTmMBlF8+lX68LP2YtQmanSqVEaIB0CIJR6kttQT8IBI0Qvk6AkStGIs3RE0dElRVC5U1QnWHffBiAxg6G8ESTHJsfkRcjz5F+R4aL9PBywd9iPOkGGQk9bpMEZNBgVnm1AidGRv/PFAFPPuaoj0qJkgjH3BGPlgpIGvA6nq42AIPmIEiKmeItqKL4xkkgpivPURvMsAiATeK0YYXCBnEotsWcVlk61t7SgVOoZrz/8OIvCBEq4X2db+OkYbrpVTYlFnAtCLWEBYpxpZBhYWVFSpPJ+DJCmFNibv3bvJIBaQGAO0fTRad6GFbWRtqxTsYJ5tgDl1fOoylWZ9e1q2+vQp
+xnO0tSeG667eFEW8udbonY4O9XPPKP7NXRgsrauDc21MRb3/aQmOcHvlOd2Uyu9ZafWEDXCAx8lwrNOS83BQnwELADeAD1/YUVFRUQSB1BfREOLs2bO1kiCMDl9BQakLS11kE+dPJJZelg+Nlxjf1d+t3yr5hTlqfFLptFMVCLFkMtmJQoR5wFUl7iQfBPm40WlxhUg1Y6T2iDc9pab6HCkx/gU5zuxVjtRrPv6fT6fM0GwXfAaTgDHAn55tgULDKE6ad+CTx0UsRutaftFfUPyWMHCJC6Zg2GeEnelUx7saA+lQBfnS5MJIZrEwwighSiywD+HC0BUpfRULheEahQR9sU9N9uqpLyix0OmrWKTZu3ZAU0LqjwOeF9nrF0uZxcLAJk0MEYheJZlFRdguyodr5W8BzzH9gerAqLgHGEHTefMRrGfgjW4MAEHQmjX4hwyP7z8rwVFBn78wPqXygE5aHdEF9ECAj5PhOO+3rsIBfQXkA86AHvC0vb39MIj2
+MO1VoS7FsLAw7STYILpKT1spMaGkzPPMO6G9a1AcvBN422ya2XbjZcb1BjsMbkEq3Ymi+7vSaadKGVm535rMK7Z8bF+juFJE5Ikwd/hzN1JTiuk04t3FcSUgRWY5+j0ZOTZoyrFguQ8Jjfy0VSiehrN0bIHxwNA/K0JF+YpDqIfJ++0P+xKxGG+8dc1w9Ymf9BfsWy4KKXDGFAs77tWlSN8XlIQ4oTCSSSwGS8p/57kl/STwytgu8Mr8koJPx1Px+IXAf8E7IEEHUdhr8dqIBTF45fwdOF4/cfyH0fg7c/R7v0MU+8EpnkfWHr5Xzk5R/LY62bp7DxnFsq7tIaT9scrBlsHCiC1OIJJOJrFI51fc4rqm72VPcN7EtQncIpz9Tqn+qttt2FepYi2C/aV/PGAZWPlgu5xJfpOwa4IOdl8g0oLf2oSJ318QhG1tECX9cFa65FKr/muEqHiVgVUdRBj3XQvfb8UxQei7NZKXLrdi/y0TooxjJ7CYHY/vPynB
+5x1fGjw2pfLncam1ZDygk1pHmGXYoJAhO/bA/acGPY0zPlYBngCLuoA8PDyGQ7RHwsPDFaAQ1aUYGhqqlQSFdcJrIBJKKpqiAfGY5priKs3lQAyU3ljBoxsQB0IsMLM3+8R4gXGVwXaDG5JGSQfIjZZOU/w1MU6s039sOi2pFpPkeFhKC1aRqT7kgbM8umv3jiJewN8iR+YaRyA2xoOk55wmWfOv3Dc1j9mgXD1HD/hTKYtydJEjyfz+a20jFgBEcOc3/eUnD0jm7lsu8M6xxahBfQSVkqAopjBSPWKhZCLJLr4IYgrBchscYOkN7KPEEWJh6IZwVcRCsU4T6cuXHojkRS3C8K11gqB1RwShmzByc5e+dK68h1hQKCtutbMtfHHAIQywwosfXm/PsQldKl1+/Q8mqQjjv98Pr5Ni+irKKFtFDfpIEUok6WXXdVmcfHidMx4DdhfAzzYcu9jl0pfvtUtXEkKH51OwAftr2RN9JuNAlYqCbkQ5p//Q07d6
+B88f7K8jnHdXXbG5XJRZ3yJZTog6YmQZsLSDcBzS98F+JOCxAXYs2dRUUc6Fmziar2JJF6K8W/fgNdNGjhz5/H8hJe7RDzgy8diK0ak1ZAwwFiSoLkNdBhkOMwpshO3eA2YDQvULB5a5HwHRHkFQhhSUFIODg7WV4HVhI0OqqRSjcbYxzpP9CMAv2rNwp7nhAAt+N4a70DmDDKPgvZaYTzH/wCTb5Jhsm+yqpFby8HH9jE86nZbUiomFhXkrcM3W1uKSi9Oky96ek6/ODLC8FhZsfT02yuYGRIq/ZadPubkw1+7W8vypdzascfzj75JjEzxOc5+umps8d9GtDlPz2K3KpcP0tEqNafOG4aIwl2TuL9UQyzoG1jJDyUS67PIp4eytKZhyKqPDp4DBwvDCSEX08pom4oyS8/D+U5T9ToPUwb5GHGjAdhC1erahgqBNYaqI5ZWe8EMKm3V50hU4iAK7MhWYBBhz7eJcQSadTGLhTluwH17jiyLH96JGU1G8
+PK+XV0uWd/YQi2j+lTsoIIWYs05+h6JB1IXCtgx9HwvCqQEZBKUJz5kJ0xpOil4iRIPFsP9hXx9W9MeZelvi7wryNeE45f6EgoK2xuL5U7bJ5riveEm4kBANqLrM2UXnYZtoeD0PswDcDisEuJ6vv6aq41Sv95zX2QmF8aHYbfJfSIk1vrgvxh9yGSGv7hgpryGjgMfJUA8YF1HUCtvtBBYBk4Hh6gc1a9assSBCgkDUp0BdioGBgdpJsEp4CwcXcKBBRWM3RjlGWObxEsChUijYB8XNleDmS89DdKgLAwCGeD9iEOJseF2++WTzrSZyk1LZe7JLkgpJOyUtJjE+iXRaWichmLIDO4HtwC6gGDgONAJngYvqxEfb3KBmd/QaOYIUy0u8Op1Brj5elleDZllfi44AsSbZ/547x4MsXuBBXnnZk7zxmhfZ8rY32bjei3j65KAAVaTnXLg3aoz+CuU6imOAQX+mb1AgEAzH8hG+/6oPJEtutDKJBSIUZlAk
+NESZNQfZYlMjZVQ4mB9cGCl5mRA6wiTmGSOKOtfkMgtBclmyIG5fpiBuLwCPiYfkKBxewIZwKmKhI4je0wIXeAocjwkO2FBCw4ueH/3TPBQKXSzCrPOt8Po0kAKfqr+jwGNAYQnSf73AJBa2RdAcHBTi+m1K4His+pjjsvgHjnN+Ecd5cRHHddnnKFasMaSKkfFYMbJiOeZ7C+bevy+YR4iK3C54oUUNKG49Y08rxXM5XfDV0OXJFuH7Up85VbLEMnK342cTomJON2yrpM/wDx412IHgzxCpTuJltLXjTB86esKJSbj/f0WCWDOJ71OQajg2JUgyGj8L5ecy8E9J8Dn314aMSKk8BxIkyEigNxm+6LzsIrzhR0AYwKbn+HD7S52goCCM+BRQQqSkCILqswQDAgJelByRPNQoOanvBoVolGeEApGj7OgnlxIiflnwfsQQGY4HERoAdvD+wfB8nrmF+cYJsROKZZtl5yWlkgePG4T5s+m0pEEhwTK87eej
+pnXh88ALgC4g3v2Vy0bFqjCHp3WtFlNKgWIE1MUIfLXN5QFsVwUcAMqBZqDF0srhgY2NG6ETGLYZ5acBLO56ecCAQVlw3iyAF/7Ml5WqmcNUjSWxCOd6vbJdELvvjGjB7TaFXDBCobOYGUosguTqY3psnlFX0XJhpGgRIYiQAkTCj+kpQfz88SIRpDRvUogGyesGXu/C83wtnopY1EGRsGSOG0BcE2k1d09hpMSPq/0EpUIXC2fmF7+CHMLx+GE7rjqwHUZNFtzgPXuZxMJxXfUBjoRjRIapMcoXU2loy0w5usoDxusJzThsj41O3NlH8rlxZ/fyUu9pTjlM74YTVHwGtrHRNfS01pzKCKQCibfb4D2i4TPTkBMKEY+Bm9LRwZVDOyma6Iks8zHNVpcP/owDMZyoK5dw3reKxC50+Wapf2ZwBF//81Zb8+avHNb/8p3jmZYfHFsv73EiyNmdjncbt9ufOvah3fqd660moRC1kuCLCWWhKD86I4FRj5Dh
+M1LvOtiptwBnpgvF39+fDeLBiE8BClFdiiDJPksQIsdt4lKxouBYUEMrRq7rwjDPsBmklgBt6uC+9Db7RSmbZ0GKY+GG7RIQow38PguYC+28ZRpm+qPhesNfJcWSe1QfH5MYtUmnpY1SlOAPzBJkBtYG3AHg0lgqUIqUGOlyXLPC/ndoO0q9jWHDhg2KTS6bnznvHEnNbiLJGRUkXl5CYpJ+hMjvFIqvB64ea7DgPRIQ/9n+QWo2AU6PAwwwzRuvoxvFmhzxJsdnUwkv8lALP+t2mypioZPTM2LhBnxciBLg+GyJxql5FJRMuLOZJYiREjey/EOcZ0wH9iuC7bQiRSNioUSScrsNZBYP6NBnhuAADieiYQ+KhFEsdOQMoExosLw+K4H3k1HT4VC+KCeWx7YAdkjdJk7k+YOc2FvnOIkP21EqFGyKhJ6wAorPQpu2ugae1hoLWcQpibh+D1N95aDMU+pCg+clrKi2NlYMIRpEPeyEcxdHFxr+rBjgCr7w
+i14UIQoiu9HhaS/BkkJ7/pkdLnuu7nUjXbh28RMz5dvsj3+80rLXARjVhzkiuaKULkAmGY5WybCWDOFNLYdtXwEmAc/QLxJvb28eiI4gKENKiBTTp0/vkwQhaozF9Fl8GCRYRZuKVqMCJdgE8opnliAzj7pBOzxawmMA7Fsm/LzOdLrpLsPVhqeke6R3Rc0Mo9N9jBqlDQoJfqqNBKsOOF/BFaNrkIOIctFUgEmOqYk2v2G/KP04w6L3SlFufSU998KDwYOffV3ZP/iX+m+oQl28mDG6UZZrTIRHV5hFEsMyD3+T7b6phBtedZWb9rCTEgmjWOIu3dTRZTuyp72dwCQWTiCzBLH/jB149GP6qjMYoSgu5Kkvp9IjFoQVeuImLvKA5So0OQxAubNDT5WiTOhiocOKZSCGgWjAc0cNRn2YiuJ+s6aXL2SFt95ggUwQJrGoiGAgHPBSSHCKjtTTGn9HdGerEXT9HpyHGSh2ugQxKtUNaWvTDSVERQgQ/LAT
+znUkfqZ0CWK9qE5Ay2mdYFwXkgZXOwme+MYl7PJP7q3X97sTJq6ps6+bi3vcHu58y3bV46LCrigw7md9mvR6lyGIcKjQpQIOYjlgBjxNbxwkKATRkRkzZqhQlyJEir1KEGRpDBJsBYioRKRajIBfqXl/ERSiLE+mtQSZhIj9jyhEYCREhwJgEqTYvrCfqdD26xM9J35jtNyoyfB7/fviRmp0um9ilNRJOnG+dF8lCPcJYVft67pvSDVywLmbYoBBjl7uk1ug7SE9aj9HCodqI0HE0iarDM5JMiABhmpzHpmg3Qh/MKaTuGo0SlHZr+SlJ3XMZ/nuaWTHdXQ+Six6ZlF5elNXZzKKxf/REtTzP7oNJaMiCoh82AnvH6trWyBnFEtAzTWUNe4rXYKwCMQYvYCmEhQKo1gowhgIZSCkC51pPzVj/x0OHugEXPgBRdKDIAb8Wu7reDf/ob4wrWrRWlelBCWe1j0WuUX8Hi/BcQFtbeOmE6IgQIm/IhKMeJQE
+x3m2nB7nRwgdHU7fJdj83bTA6we8Om4UexGtOOCpYs+mqduwO+TREkwoC6Akp40MnzGNbICDWElFgvTGoURGH0RHoD9PAQpRXYq+vr6PlaCfn99zkD43UukzSlC1LFVFN5QYZfO1kKAWQgSehiW/RpiamvKg7Ymwv57wmJQcZVEfl2RBphWYkInbDYi4ToxCpGAUo6RWOwnCHeMCKn/quotclQLlDZQAJjmW/uDUAe0WMbVl67Dw2RwtJRiTfPy2svxpKjC8t5SY6hTH1A2LoDElQvBnfI4+U4AuRRxMwf4lTJt1HbZ+90ixWC19X8dyWR6jWDyZJYiRnI5P3Q6dEJpMAu89xNFNXcsVKYxi8ay5Bu054UXEVBg+3qN6N0imp1Q86lv/b3vnAdfU9T3wAIFsMkhIwt4bZIAC7r231r0V997bKu699x6KWod171G3ttZqtVbbuq3WqtU6UDj/c0ICj/BeCEj92f7h8/l+XvLyxnsZX86999x7dZXPP9VV
+uviHrrIZlVioaOLbx7oSG6hVOVZX8dI0bR2AbNRmUOtdmrbCd3/q4pde0Yd2+MrVzWuUtvTBbzOnJ6iZhbZ0hgR1ftUSckx1UB2pbFmCmqqpqZqqANmoYlmCmnL3b6krA2RSKQOdlRK8tbta6afHa75/dqIW5Maf2aiZg69nl95EkTWrBLEovJbEllccm21/iQedhZQ1bxkmqlSpEooiAxMkRIYUc5UgRoztmPWJ3se90w2Dk17IwOsCCTGLkIEFIUF2TELE+i2BsdHCY+O8ondWTCsK00bGwdCesdAxKQaKrwwxpu2w5zP6X/bPkwRx/uBxCBA0faYJEiObHFMWl3yLx53Adqwu/X+L64vzmPRD8iJDvr1olXF2Pj1il8v7xNfXutFP3ygtVd/ow3sDXxip+/AKRXxUR5jb3DQ40K6j4Qdb58+/csilPoqp2LTt+phRw+ixgXoMKpy+R0NpkVTNhaWtcvN0DqnU/CsVf8jN9bHjOzMFYxKJtgK7BE1i
+1ZY5l2IuFUIXNe48tQ7jvg1xWc9aqOiNlHLxCC+iqfT6uaYKAMGUiabMjVe60J4H9W6BY6g4iu9VBSo+UwOKpsS5/WwTWDknGCXoUy3BqQKAgfJZqMtYlqBTmdRUp7IATFRlLEvQqfj9W6rSAAZKZaFzz12Cx5eXFT88UvvO81N1IQcn2ahjCRRh7fRZQ+I7mZ+TWiJtVJ0vXMu7BJEu34JQ6bqNz+c3x37CruapFNWqVStSs2ZNIFB4RDYhYnHZogQxakw2Fp/Ty5Yt+8TrqNeHbMPVn2eAUgwZUNAS5P6h7lqeqPpmY1z6sfVxsG9VHGxdEAurUIgtVocz0nZY8hkv+aXlRYIX95TYf3FvCbi4tyROpM4Apcgmx4kjE6lRpAlLipFNj8GPN/UZ/hf0Hf4S8iLDwJCqZ3BWvT74GfvnVslM96Qtub1LjoiFqPUhTe9drBFLfhi7TPGH51z58SPziIXQhfderQ/v3UeDjzXVsuNc7tpTiiQp6mT+KKlh
+Q1P+/g0SClMsmrJ3XuJrDbVFJiaZRyyEpiS3BA11nLFfjaSZ88zFoil26Ab1RCFBkFjYoHQbej/MocYJdfSW9qoyAAZKZ+FU/N5bnVsETTVQiRos6PiIxJj/6OxU7OdTqpIASiYlANQxGRLUelVLoOfK4tlRxVuWoCI+NVWRAJBJPGFZgsrY+7cUxXC7ogByBjq33CV492Cd2X+daQC5crp+Ji9y4daeWq87NQ71z/Y5Ug6duv2RC/mSIKKrP+9v/K89XSQSxdOsa4gNQ4LR1atXJ9kZIBkypYivc0qQnuM+VXCb3SVKlDiLctvredzzbeakRWc9TJMZZUoxpH/+JXhqfZHxyNJTGyLnIlNOb4hMPp0SOex0SlRfpOvpjVHtTm+MbnpmU3Q9pOqZTTE9z2yOgdObEFye3BgLx9bHQq8dYVmpOz/65Mhn9PsubxI8vzPx2YXdxYG4SOwhShhgk2OntsWoUSTY/Dj+/v6C7kMeP++FEuyN9CERIv2skGG5
+ij2fYn3aHBRhNFtxgglJ0jl0QBUSSQ4qUTSy97gx187YkMY9R4lz6IjqTLEw0fvVnqD3rd7UqRyAOeqSj/7GH3stGnePORCBzrd+mKr02zfmYlEX+/Z3vKaqzuHT25pHLAi+zi5B0/1qA3tVJakg2aWS8OKdzrt6SxKdqbcLA1uStFPk/vLqyD0tnSK2tzGhjtzbQhM4PMKpyOHxBtEUy45T+PZf6P4QJXNUdGMrrrsi5ulDeRxAJrEZqMKNEvSsliCPAchBpGUJOkalpjpGARiINGFZgo5h92/JIgDM0blaluCtPbX9Xp5tlPbqXCMgXrLyRU7OWqKhgZSpZQ/T55ZNgs6t92zMrwRVXS6Cc5EaZ3Hu3XZCodCb2cOgcuXKRbFekGRngITIlCK+xilBY/QixTaJUkhP3K6pxwmPVx6nzKayPJNFcP/gfEnw5Jpw+5Nrw98gcHJtBJxcFwGnDBQBFKMBFKOB00QKEQUoRiPRgGKEU7iu/64wY9oOE0Y+
+4wXf9Lo1Yi5NHxk36XhK0bbnthWth1Q6t71YAhJ+fnsxr/M74tWI4PzX8X4InP86AS7sNJEIF3YZISmaybFKxdg7eP925lJp3/dW7+7DXkCP4S+gJ0qQTYb9OWRYvlLvZ1ift1QsFsexNYARZvlhflgMuseMXrJJJfbQLr1bcAQVJY2DldoRzKRfddiiqsrEl0/YI5aHr11cPdu6unmWVCa8eaNMBCAUREIGmuApCymNxpikbBjg1CnqzHSSCpJdKmHrL5Mc1MGzWplHLIQykilB9vtVRN2/xyYWZfh3P2LjSQzdE2PwB9pH5BS4sKJjVNr7nGJJfaf1rFFfGXx4iWMRAELGQBm47Rrl+5l6zzDHMVQE7B4sCwcwEMaE9suQoLN7tQRpKEAmIRnIgi1LUBqcmioNAiAkmViWoMz//i1JAEAm/hnoXCxL8OHxL6b/faEpsNMkk3uHG3w4u6HG69sH679nrn9FnGfSOJMHRxp8qFEuINh0jxnFl2brhpLQ
+8ou6w5F0lVfUOvyRVEP0puGYKlasmID1gkCQDAmmFHG9RQlScjN1fSOpYeusxv24+0vmZOYkRBMkxOB++ZPgN6tCoxD4ZnVYJijGDEiM5nJczy7Hk0j/r0OZaTs58hlpPMGOLWIgZXYsnNoUC2e3EHEZbI2Dc1uLAkrRRBqKEYjzCIrRgEmM5nI8+3UijOxX9HuUYzMUYy2kLMoxdt2C+rFdhz5+123YcyARWpQhiwijY6v+ThLEaL8YlwTN00YwWllsKgblEEscrot5/qcq/PBCdeiKFhrfPgk67zqh6qC5FZ3CD3ZTRN09Jo9N+8AmFUIdOPM0FTOpKKgIv3LeMZokkh155Mu3quAdSzUBU+s5+Qwrowo5Ns6xyNvXJBRzsTh7d1pFCchO/vNaMKMVk0wUwUwJso99qPDbOJdNLIRj4I1rGu/BjannCIlB7TO5uNz/5FhZ0Ju/pMEA5mJR+O24TP2RVd4LB0oCAUyYRCL1f4p9b93rkHhIhLiUuLjH
+ucp8ryyW+KeliVEyYr+cyL2NEnStliD2BTDgk4XE27IERV6pqSIvgGx4WpagxOP+LaEHgNA9O1o9twTXTS7l8OxMs+dvvmsBTF5/SzQ3cOfwFx+6tYi5TvPUILWQupVLBU7aMa/yXXo9i2ZZXMxixfhyO0z124buaCHxpf1Unc+nfZQI2x34oND7TsekXOp874zYly9fvlSlSpWAwKjQAFOKuN6iBAlaT5Cs3Y+5v3I/gQIkvmFglGJw3/xJ8MSK4KQTK0LAwEoChbjKCFOOayzL8RuMHPvvCGak7ZhBI0uf84Gk5tGQMisaTqZQBBkDZzYb+SoGzn4Vi+QqR7BWjlichhkzl0PnYc+gC0qwK5IXGfYb9gcUjQ15gF/yORKJJIo1TYalKOvq7h8jD7v7MEdRKJyFsOxIiVAWSChBv73SuQT3MwpFpfRdMYpEwoRNLAYCzSGhPHnj6uppGBxU5b2gmXnEQjj6ckuQMCSD6yNipT53H5mJxUwyr19JvF88
+EXkDmDCXitjrzQeta7mJeK4wZ9eapUWe6ekiT3zNIztij9//kLqd/0rqdmam2P32IZH7yyeZknFjwRVA5pohQY2+WgI9F7pkIDAicrEsQYEuNVWgA8hES1iWoND5/i0HDYA5liT45FSzum+/bw1ZtMrGi/Mt0utXDTtO10R1svT+E/TPgM45fUip3a+/awlvLnFzcn3tF7Sv8Vp5ttif1tm55dZvP0aChLrt/lSlX/HZWCwuRxEh9tetXKFCBcCI0IC5EPG1PPUddjvi9rfbMTcwcDwD9+NGKSLBffInwePLghYjYGA5EQwniBUESdE6OZ7ARpF+24KMqTuMfEbiUtYcIyTBDTOi4Jv1rMVqpADkuKMYnN1WDObOnQVJQ59BR6QT0hkFaC7DHhZk2KPfMShTMugujjqdLBAIKFeQb+2YghqPTkkYtbxiEwvBHrEgviygRKTeD95oXcvSHCVFAwMDpfTFx6JmsNTz0hVusRjxZAFl4uQ2Yj+1xFL9odJ9
+QTOSiDlSN24JMu9X7dK5s8jlTSoJJRt6DnTZEerepjnpe+ygnERERcV5se7yRQdngBxoOFCz4ARgj0g0RgnqqiXYqwDMEagsS9BekZpqrwDgE3ITliXo4Hj/Fl8GkA0pSlDHLkE67/3jzeen/tAOMmibyTsjC5PLPzUOxWXHOhg0/h1ZVfvCu8ttgIsXF1qlR4R4xtL2hp2wXkbqV75zY1XXS/CxInTqeDpdldhpG0qwOhZhW2A0CCZIiEwp4rq8SfAQSvCoG2RyLDtBfYLyJcFjiwO+O7YkADIIhONLjaAU8yLH47jsuyWQmbaDMsyOz2lvSGoWBeunFYETa1mK1SlEVP7liGI8g8vTm+NhzqwZ0H7on9ABSULyI8OkDn0gskjYYywOd8XP1MXa95Uid8oNdHZr3FnifvN3NrmwRywsoEjELlefYwQzn4ZqMv5IbU0z22ld69YV6e8+YROLAW12HAgUiVR74DblB9J1UvSq0C1qyiYVseYHixIkjF3b
+PJ103YcKnJ68ypSLkgWFOSST1HSlpvceSo/BfzgkB3vqH63TR5cTKG7e4zsCGJCxQ2KxMyKQX/3b8FiSHZE8Q4Jq52oJdmKATEQZ2IstS9BOmJpqKwDIjkGCLbgkyBc8uGVjD2CAn4VWG9WVQ4K2D0+2vPT+agdg492V9lCxVPCK3Bro+rSNDf7jTKvUVNyei8GdE8bTvWV+YXHaS19ds7WXPlaChApTZ5warvjFNyRqBqa2AFGuXDkDTCni8zxJ0PWQ69+uh10hkyOugNGhAZJiUO+8S/DoQj8R8gGBo4v8DRxbTAQYsCxHhhiRY0jfzQHmqTuZk7CTFH1OogSbRsK6KRFwfBVLfSOxPh9yNIrxFEpy56q60H/MCWgz5Cm0RdoheZVhT5Rht4E/Q/OGRdMxUfwetg5Xw8p99mRpFoz/XO1dDH/uVRS62VuEzrdfWIpWCHsmFJ04/ZmqcJ6AdYCuvWhEGvqBmnfUpx+gVhdaS+K0/6K9Ih2Y0Yo5JBJ7
+x9R0mdOqqy4ubl1RXEGmEWFkqqWN2MQicLz6ELcrSa25uVUDUKK3VlehlUS+9Rxf/Pd7k2BsCSEb79NFst131Jqai1C0NJNbZp26cbQZtVpTuaFYuv9bO4e3H2yNQmETC9/hwRu5cvhRjabMXBu7dLCxg2wIhN/covdQo6kdZ2MLwCNssrC1+/M1TRXA0j3QjkaWsbFNfUdrs2GbRt3mGtF1mkuQ7oVv//Bnw/n52XHWRnegnkLmv9NScXr+y4ut37y7TFFfTn452OQ91ZdakWJld3J9vZ2pV9qBOSYJzhhmaCXmZ14w9oZQhEZEV3Jud+A1iawgcEr6Jj2iejfAEaYzYUoRxWa1BEnUrgdcX7seRPkRhxgYpRjUK+8SPDLPJ+HIfB84Mt8XjizI4OgCFOJCI4usl+PRpUHQZ5N/ZuoOW06j9wkv6NAkEtZODodjK8wbY4hwA5wt1exyxMdUvI6B2TPHo/weQsshf0ArpDWSZxka6wvbJ42G+rVi04KC
+gnajAEMs1wdyJz4bp3cMoShH7dxmhlS5+rxIcfyeg+OdV3wZikKSboxWSDwv3zvIfn0lkX/9q9Kpxy693mcAjW9HdYBcM5XROag4igKKV2u+GCGRp5y3F//y3E746r0pYrETvvngIPrxudRx3TVnbaV5lBdIrbqIyCQcZ22rELly3ESlqu96parXZiMbVU6dJlGxm6RujfhxW01Gl7fYJLl8eIpItO1HB4dzj+ztf3zG5//60sHh/BNc96tUOve8RlNhDm5LY+tF4VJlEqD5vVEVgE5XtqfMcdY+sXTDVaHo2D2B+NRDkWTvbals2WWlqvs2FxfvvlSUJtGhDJMVqn5rVE69NiGG+1Br2iVnjEwT5u2omPyl0qnfapW61yZkMy2VTn1mUy8Vtu6BNOyVXDVlqFI9YGXmPppemxROAxfQoAzU08d8H0rhUTiN66RUD1pC2yKGffD5Yr2Ld1mSrfnn+euBhr5vL7WCHHyfwYFlNV5TxG1Nz6Vvt9TrQ3WK
+74yYF4kXJZe/Su93tin9sG7Q279U0yFOnc6lF5QICZc22yG6SlsoVaqUSYYkQFrmSYIu+1zeuBxwgWwcdCEpIvmT4OE5Xj0Oz/WGTOZ5A4oRSIx5leORRQHQO8UvM2WHLafR+zhKsHERWDsxFI4uYzTGIN8w6hzZ5MjSGIOPixgaZHYsrQk9vzwGzQY/geZIC6TlYBShFTLsyCLDpF57oWubOKwPjH6LEU53TIFSW/uecsmBZIh4Ux9hhOq9GuGPsiM+7o0MQAbi855URMXHNekHSZEVFXlNcrAARYQSGtGaBITUwWMl4bIPHRsf90JaUYIxEkaiYkzObmOs1xPTYKBGYYcZCaVrphQXa+/flANIkQ5FmtSFj/IQkQbGEZtpWQmX8fQ6XYsxGrXlOp5xsFIdXRvth8sKuKxGx6EiLj4uQvdOMjI2ELjQxFSMEbRDqI7R+JqI7XVc5WsUE58tyqXz4+uBZvv4meTNNt4fRYgkXvN9SOxsebIPjjeJoVZd
+LlZOLP/U2iGy7hxulJDVutwyO9g4sm5qxXt0DeZfVGlISEiUZ+XeqwpahIR7i3UQW7GxQYZEyZIl36O0NmAUGmJKJrVYx7RH/xZFCJnsZ4BCDOwZmGcJHprlserQLE84NNvIHC84bCSvcjyMy17rfcxSdxigEL2OehokuGZ8CBxZwlKsXkGYyZGlMebEKmqQiYD9yxNg6pTx0HTwXWg86DE0GfwYmiLcMnxqUYadkKQBN6Ft83LQv3N0Ov5jvIN1VEHsUWDeZcgcOME4m5yeWmZJdvQjpcckDxIfScp8SH1jjwp3FIeXOTRGH9Zd+uDr/kg4EofrE/FHWAJ/jAn4OBq3IYn44dKba3/El6DniHN+5lsxiRXh030Yx1VU0PXT0tTDwzSHSl6OZ5SLmMRMxzEV580Ssm2Nz/kmrH2d6/zc+3Bff173eXyiUTnK82OnKcwbWfqOtaMvXdtZx/dvTIchXrOwbU6lZ/Re5sjLw5UqrAMq7VM2aZ1TpzMFLkIc
+uBU8mi2H8GpdILFEmQ/4I9uFX4ZSxukeRewT6xgluFv/FkUIBvZmYZJiYI+8S/DAdPcdW8Z5vv96skfavuke6QdnegCK0Uje5HgYlz3Xemem7rDlNHod9oT2jSJg9dhgOLwwq0h9zFikRrgaY/BxCBwzsm5eQxiSvBIaDb4DDQc9gi8G/Q6NjOQmw9acMkSGPILWLVvDgM4x0LNddCp+F9ZQXeA/0BfbhmCZVc6WYOtBpExUutp8ZfPYNsX2GfI8kw3/EHgeSQ/JcBJXAczHbMOkII9Hz/8joAQb1MnZE6RRJpP6J/5g7QRNj459UZKSo7lYN6Xcc5IgawMEvqDDhpJK/qVarnLqeKrgRWjEqfNZ0LdYn+pcf8EpeVC1xpiHFo4JuTRRk8JciNSzRbdT906/C8W3m8GeLAK7512CuG0Y8sBE0biYB6USox5VLB35e40KRR7XqxrxpGmt8Kdt6oX92alR6LPFQ/3ecsgRH3tDj9VemWk7bDmNnoc8oP0X
+EbAqORAOzWcvVjPrG48iuESCYM+CGJg6eTC0HnYK6gx8CHWRegMfQX2kAYqwIQowrzJsY5IhMfA2tGjeAnq1j4ZZI6KhUZ2olyjBBmypCJ8aQ3E1VhfA28ODT4mso2wNRqYen2YujEJu76+duG5S6SdrJpZ+as7aSaWftq4XvtXa6R4eHK7X4S/sJmfipRmLRpd8yCwOE9nqB4ODg/Uowor+RavM0jdf/4FdZAUbIao6HHup/GL1IXloVRJiBEOINBCnVLddl4oihEx2ZWAUY34lGIqMRaYji5C1yHbkIHIK+R65ZZLkwkG+bw/OcIeDMxGKGglj1HgQ6bHS05iyw57P6HHAA4rHR7+tUTHyWdPaEU/bNQz/s2uz8Gd92oS9GJoU+teX3UJfrhwd+O7wQn84gpHiwfn+sGp6Xeg3einUHvgL1BzwAGohtQcSD3OVYWNrI0MsArdo1gB6tYuCaUOiYN20IukJ8TH3sKrCkd6nz0GCztHOwbyDPPgkHMjA
+MclxMxXTCyX46T5nqkOk3kBsUF2mtZHyL3tq7nxxqh4YOG1OfZgxOPEmqwSZIqSIEHP9puBj8K/WD3C0GaO0PoEQ26MQm6ScVNSYOlHiU7wcpmiEa7do3+u36QFlCLodDIxSDOgWQBJMYs4xUkCQLG0R6b6prs8PTHOFA9Pc4MB0NzhIkBQRLFpD9xUemWk7bDmN7vvcaSitx8jPyC+MKPRhBrG/D+lZ/d2kcX2gx8jlUH/QBajS/x5UHXAfqiHVkRoIU4Z1rJRhEw4ZNu99Flo2qQp92kXCtMFFIGVaOMwbFfEWG6zW03fhs5LgMR4UCEetw7HT/0KChSLkxrrv48rkONGjwzVfPvumNpjz/JuMobV6tYo8RlGlRZOiTBJQKu9IgkREiRqga7WNRPWJuQSqTmffa0aNB+20dqBdWhq0Ke6g+0oHKEbQbcNocDtGgl0Cb2Dk0hWjWGpCFzIrYREbLqx9Y/dP1vsgsH+KSwZTXeCAAVcgMe7HZbel7sy0
+nWyP3Q6jBPe6p+H7uhGjbOr7qgmsMCgivu2+aSU6n7lUuscPr8r1/RXK97sDFfrfhYpIJaQyShBFaJUM6+YqQxQh0nQwMughVGsyE0oVL5pWqVzU+4Y1I992blbk78GdIl41rx9FM/e1/Zx+GM4xKMFTPLCKkwWDY9d/owQLub23asc/j9eALGrmoHisb7IpWZoVlImTcfpHyE4sBFXqBM5t95Og/odgQna/baAZORW0U7qAblEl8O1Q7FFwkWKT3T08S2LPGV8qTmOxWkfpHfhcaZwMSoZIEDEiMspSgDgg9pbYnuzcdO8EHeydmMW+SfpM9k5ygW6L3Qwt1W4HMPLb7wau+1GA+1zBfbcveG2NB/8VtdPj6o2/F9/x+J0SvW68LdnnNyjV9zco3e82lDFSFiVYDvlYGdazIMN63S9CQpnG7/Fzfo1SfoH/7J7j5/sH8ogRnXp+ThLUJej8eed5YODcp0HWV7YSW1/d/z0SLGTu4Ajhnb2V7/xxtCpk
+UC0H32+s8J5yKulztVT8m4EAF9GxcVhE7gvqpOOfWoCW5z7pcgk0KEjnLhc+aDufe6PrePq5vsOJ+/q2R67p2x44qW/x9XaXJpsW6OotHqopP7KpMqByAkoyACXpjUVuD8TdiIcJHC/RU+Xs5r16sG7JzmQtGBhL6AxsHusHS0cXh6kja0P98R0hYOYwCJ44A8LGrIPIYQcgZsB3ULTPL1AMiTfwKyRgxJeIFEcBlkBKIqX63s6TDKvmkOGDXGVYr+9NKNtg2rvgkIi7OMbgWcwrW4q5Xx2QaF9fXzesAvGk8QiRop9ZEcnGJdBFKesl66BoqRilbKYcp2yqHM9KY+VUh1UON3jf8YAN/i7+G1Vt1SpVU9UkzmPg8RWtFCM1pTVVzXpQfPL7ZvK5H9cSn+pct3aUn/LkUCWcaKkyJzMHxf5B0z3Q9qwHCQgI4BvrrSA3ouMSwK/G4M8gMuScFS/7fMndsyaPd+t+Fdxx6Y7rPbr/kO7V/QryQ7p3j6vg
+0+MK+OLr/j2vgX+PHyGgxzUI6XkZwpDQnlcgtNePENbrGi5vQBgS3utniECK9P4ZInvfNBCFRCMxvW9BbJ9bEIfkVYZlrZRhtVxkWKffr1Dui7mpoRFF7+PnewmFtxUFOBJ/4NUxR49y4qRsrcCfmQj5lAxMycX0BeaCkn4dNjrs5V3hARsowReUTE3JxdQTgpKA2aAcQZqcic6bz4mlbKzehmX2Q8otpFxKul9a4p+MUjo+ZhIxU44miZ2OSdBjWkfnZF5TPu7ZhvWejZPU03tJ98R8PwuaK5tKl3q4v0La7wcqQA4OZvAIH1co7ruSrotTglg8irckPqwwByw+5Sgmh5RrCW5NV6CILn0+MiQRWiNDxINA4XkiXog3is8H8UX8el4HfyQACTTwEwQhwb1+ghCUYO4yvMUpwwSrZIgitFKG1RkyrIHnKttk8fuwqMSHKL/vMSdzB4pkItIUUz+iMBrUIIJ/S3GPfli5YEuJ1vY77HfwrvOADf4+/nMa
+fp9GojGO1uJt3gpp7NmizO0HS4nKNAAD9YLApb8J4+x5elMis2lUGOY2BIkYEZsSyUkSTiWc/IQrhQMctjhssN9jfxKv91t8fEC4SrhY0UZRjfZh70LIPe8ziVTeVl5MuEI41GETxsnbHPbY77Y/ictDghTBV4Llgtny7vI61EeYrpWEyCZD05QCiIf5vVDCu6nHCe1v6DbXXhEnXC4cLFgnmG+/1X6LcJ5wFB3/n4gIL6xO8Luzs8yzR/vKgiW2TSv2N/UFN10DV1G4KQL5pUhCRfCpMxY07Q99djJ0tlKGnlbKMOh/JMPyuciwYqej6Yk1hr0ODov8DSV3keTn7e09CWmJFMUvqx6/CJK8R3+fvyQpWsQf+HbeLR6wwT+UIUHqmWL7ne1Vru2cqzjXZvaJZaundNjs0Jxrf8EqwRYaSYV6iNh+a3uNd5MH5vBP8G+hdANJLPJm8lD7ffZf2Vy1eU2vsfIzL51/gH9d2VDZgOYTsSRpEhHJj4Rqd87u
+V8YxOLE9Z/tUtEC0FP8VRBi7K9qZ5xHz9/BHcO2vjdRWpHNKh0rL2p2wu8j7iZfGfB1leJnut6D/6e6ZGaX9ZXvJ3x7sKQWWuLurJNQq53eAMSIQpwS7IVAQhJWqi0JMBm3bPZ+xDK9YlKFXrjL8yWoZRrHK8JccMkzMhwwr9L4GJZsseV8kvuZjjHKuYeR3HOW3FqU3Gn/MzXBZDIXoSt0j6cts+nH/JyW4HyV4hwds8I9lStDD7qLdTa7t1InqLtT31ZIEUTBJvNs8YEM8V3yK+tpS0dr2ou0vbNvYH7J/QqNkixaKkmx+tPmT1lmDzTWbt/IB8uF0bBIVW19f2ShZGZTvLd5vPMgrduftnsg7yjsZR3rhMweQFWwVTOTaTxuk7SKeIu5v87PNW7bXhauFN2mOmYKU4L5Zkfqfv0q4fm9ncbi/yzLT+0X8QX2vmZ8p65cIi7rFSWAFTUSJauBbc3i6rtUWGm7rs5GhNg8y9LZChsFWyjDaShkWtyDD
+0p1PQWLjxalRZVo/Cw4OvYHiO4ei+xrr/GajDHqh+GriDyKSIr//rvxYJHgYJfiQB2zwT2ZIkAZLsLtk90u21x9koUnU9KKoJhcJdqJt2ZDMlZxDSQVTgi+e5ze2beyP2D9TdlGO493lfaDnVnE/A9vrtm+caju1Mh//jwQoXixuanPL5iVtl19sfrJ5o+ys7EP1rCTaTAluF0zm2kc6WnqAdwfv5R4P2BCuFd4qSAkenB3h+vPmYjfv7ogHVr42kQBnlselBvm7fWk2FiFnJChBXhSE+Kj+0PQY5ZqOPMe0jJshkXHnfcp1vO1ef8YrbettacouFz4LGepyyPDqJ5FhjJUyLNn7BpTruAVqNBsEdWuVpwEOnqH4TpP48Au6COU3DMXXHCnph38YEaqxrkb035YfiwSPoAQf8SAHv6METzMkeBkliOtYsE6Cq1GCHPtL5jMk+ANKkGUbu+/t3qHM/s62/rH1OBx0oMiqiKmSn6I2jABL2ty1eU2vfyy2
+N21fa0po6hsbiGwMEtyJEsTrzA/ClIKT4OmlsZ4/bYz97fa2OGByJ5OimVxZG5tWPsFrN32etG+uEjRWbK5CoABJR/7ARpfjKMFxGJX0DgwKHONf0/+Eb1vf936tQsC7ZS1wbz0Y9O2WgKbjPpTVd/9TGeoLUIYoQqtlSCI0yTCh+xko024FVG02GOrXrwMta4VCUr1A6N4oAJrVCP6AfXuPovj6U3EXl2WRUIr6cAxAakl04B4Z5D8uwYMoQY5ohH+CIcFvUYKs21kpweUoQY79JXMYEvwOJYiRUoFzh5euKatpb2zEsXUOc9bYXra9kdt+WFx9jxHxXxgtvjese8CNYLPgOxpWjERrkOAOlCCuzw/C9QVTHD61ODLgp5SoB79tiQZ2YjL5KSU6vW5579PUWMV2Xs4vUnx8POWL3SwoAWIE+BCX+5CuGB2GBhULCtKO1h7RjdOBy5eYXDzEDTz6e4BXdy/w7egLfm39IKBlOPi0rAZeLTuDa+uxoGu/
+Bpw6Hf1sZehjpQxD2WTY6zrEdjkGJdqvhfItJkKNL9pB49qJ0LZ2ICTV9YPuDf2gX1MfGNbKC8YnecCMrm7QvHrQ39jzpCtGfYFYd6PDaNARi0JC66O+/7AE96IEf+UBG/wjDAmeRQlybKdJsEKCS1CCHPVjklkMCZ5HCeI6S2A95p+OAxx3Kr9QTnIu7txd0VYxTjJBst32B9u3lvaTjpNupXuhpH/hBuFA1u1uZ4D3+1rRTpFiHMi1nIu7S1XHfo4z8J/BX/Q6G7h/ulNjp/5UP0pFbcEWlCCuzw+CDYKr9J58jATPLokIv74u4skvm4qAgc3mRBr4Fbm1MRLa1Pa9xjUnCWFpOHshCqsC8udHCvAdchsluAOjwDaIZ3CXYLlqjmqvcr4SlHOVoJqtAqcZTqCZogHteC3ox+jBdYQruA1CMfb1QMl4gU8nH/Br7wf+rf3Bv0UR8G1eAXyaNwHPFt3AvdUocG07F/StN4Kmw2FQdf72H5OhC6sMf8wh
+Q98cMrwGgdhLI6jLQQhtvS09rMnSD2F1xr0Jq9DlWXCxavfCQ0N+alfbHzrW9YVuDXyhdyNvGNzcC75s5QaTOrjCzC56mN9DC0t7a2BNfw1sHKyGGmXD/8Co2tWY4mLHnoz6/1SCO1GCN3jABv8AQ4InUYIc22nirZDgQpQgR0upZDpDgqdQgriOC8lUyQ96V31zPF8IpdaQcChP0TCidiVNU5vvbd5w7SueI75A56G6O9sLtr9xtSxja+3f+lD9QIrEKHLEfYTUKk1zmuiK6arge/E7176i+aLTuG0QtaoKNqIEcV1u4D+iZyjobxx7O67G1uxxyjbKZExA70aNLfn9np5aEFL0+tqw57dSwiA74RlszOL6uvD0DnW9f8JrLmmpFd3ilwlni5OhtKqhxC4gaXmUHw2Y+jsuz2DktwSXDRMSElxxaa+Yq1goXyAH+Xw5KOYrQLFAAQYhzjNKcQ5KcaYTqKerwXmKM2gnaEE31hgxDnMD9wHu4NnXE7x7
+eoN3V+8MQXbwg4jSES+wePhjSEjouYCokpf9itW66Vuy+T3v8l0ee1Xu/8yjxqiX7nUnv3ZtMPeta+NlqfrmGz5gX+g0beuv05zb7EJ2pzu33ZeuaXcg3bn9IeRoujbpeLpLx2Pg1vE4uGMU6pW0H3zb74SA9lsgqO0GFNoqiGi1BCJbzIOY5jMgouUkFPUwCGzZDYJatIDgFjVxWQIJhaBWQbg+EFBcT7CoehGLrHuwzm4jSmxp1RI+XyW3doGJ7XQwvaMW5nTRwOLualjRSwVr+6kgZYACNg+Sw5Yhctg2lJaK9LiY6LMcX6ZCCW5DCV7lARv83QwJHkUJ/sgDNjTFrJDgPJQgx/6SKQwJHkcJcmzHP8h/pffQt6V0GpYRtO0oodshxWEP7xoP2MDcv18o0pF9KavKtQ0miaerGqiWUbGWojnzofDpPVN2Ura2uWzznm1/FOgrihwpD1CwHiVoeu16TvAYaRjRHkbRfkHno5xCU/I55QhyT1NgmZPz
+A0tfWxP86uf1wZBFCCuXVwSnfVHJ4zuaaiC383G+wJx7BMVVApmA3EJeIR9Y6vto3VvkKXIDOYGsQwF2wwnUY2iwVhq0VTldWUY+T56OgIH55pAYGVI0iXEuinG2U4Ycp6lBM1kDzhOcgYrTumQU5GgXCKsQdisiImIZDqAwEgVDjEfJTEfm4ONFyHJkLbIRt9mG7MTH+3B5EJeHkSPIUeQY7nMc15/Ax980rej9qn11LzDRoYYXJNXwhI41PaFTTS/EEzrXRmp5QNUmKOTOfuDXzQ98e/mCTx8f8BmADPEB7+He4DXMKx3/sXyL78cElF9rrMOrgw0b5ce2dJq/oocc1vR2hPV9ZbCxnxQ2D5DCloEy2DZICtuHIIORoVLYgSzspqEIe0Gh+DgkuBkl+D0P2OB/zZDgIZQg63ZWSnA2SpBjf8lEhgQPoQTNt7mcgXSA9DjNMcI1WKihmLtAOJK2ZQPzEe/RlAIOKx3GcW3jsMGBZsyrQe8Nx4AidiRh
+TGi+kG3fH7JwquLUj+5FsBoliM+5kIyXXDJNG8ocE/RjSiqnFwREXV0V8PrG2gDIIJCTcwsDPlQr6XGCJtS3ZgBWq75UGMGJihYt6o1Cq4bR3Uj88a1E9iCn8Pk3yFGExt/bhaxAhsfFxTXCfWJxqTNW0NtI+kpEjrMdbzjOcQQDcx1BPleOGIVoLkYzSSoXKDOYl1OQFD1GlI84i9LuiFMExKLEIlBgMSiyeDx/cXxcBh9XQOFUxddqIQ1wXRMSEa5rj8tOuK4zPu6Kj7sjPfB5z7AQ//7JzdUfkpupgRjb3AnGIeObqxAFTGyhgEkt5DClFdJSDo16asF1kiu4TkGmuYLLTBfQz9aDfo4edPN1tEyjqgGUdS1jX10V1eWl9BHt3NxXCFv6iWDrABFs6y+EbbQcmMH2QWIDO4jBYhjZwpX+GXUuFB+HBDegBC/wgA3+VoYE96IEObbTFLVCgtNRghz7S8YxJLgfJXiRB2womiuW4Xk4R6ohQYkmidpy
+7S9YKrhPRT7+Fv5+rm2kg6RUZC5nTN7WsUG9RUQzREt53/KADccejmuoZwz2LpnMtY3tQdu3Lr4uXZjTaX4seyZ6eFxe6vv4+ipfuL7KD66v5uboLN/3JWPdd1EjCKMOMN8SZBt6X4pSc8cfcTAJDv8qYlRTC59XwfWlaB29hpGfG0WQzK43tHSc4TjBcRbKj5jNYA6DudbLkVmcRhmmxxSN2Y3XUxPl5kTixvOLMYVEgjKTESQbui4SD6WOYNFZi0sXbPFyQ3F60BBcuK8XbudD4HrfPnV1VVd0k3xY2U0CK7qKYaUBEazsgkuiswhWdxHBmq5CWNNFAK2Gy0GzVAOa5RpQL1eDegVGrSvx+SpkNUavS52pWmEDvneJ1IhhqstL6SnoPa2d6s2GnqK0rX0dYFs/QQb9CaFRikLYTqAUO9TyeYbHSSwUH4cE16AET/OADf4mhgR3ogQ5ttPEWSHBqSjBMzxgQzKGIcFdKEGO7dSl1aOoHtDSeSQjJA24
+9hcsEtyniZf42/iXeGd5wAZ/M/8ZchP/AVzD7VjB167b7bB7yHUM8TjxGSreChYLpnBtI1gmeEST2RfEnDTExpF6x4uLvK79uMILflzhbeCaOSsz2DXR621MmBuJ2jUvAubltyM2tUCSaEiMJBsUhoBEydaRmpBOkIbJZsjeIyCbyWCWzCBFa+RoSYzOY5ypKL4RJViKriu3/qVG7Og+SNZMKHJlUjI+Mrl+haA/etZz/6trL3Vq9UnK9Og5SvBapAL3JU4QOk8FZaYqoeNIGdQeqwSnlVhsX8VgdRaaZZo0YzVBUeaEMfg4GnkQi1QrFfq4Yy2v52Oaa14v6yx5T1IkmHKsWjqU6lulheLjkOAKlOBxHrDBX8eQ4FaUoOm1E9nRxFohwYkoQdyWDckohgS3owQ5ttNEaXpTfZlFCQ6T1Dds/01OBPMNkWAVFNiv9PyfQjhT+DPNFIjnm8K1jWiC6Bo1vBRUd8xz8zz2Xl3mAbmRMtL9dbC/yyzqSpjX
+Ivcn+2LKJskmS6dJQTZdlsUMIwUgRvde7s9QLAtJJia5FBQ0WnVwg+CLztOc3yuXYhF8GbIci+HLVVmsYLCSwSpVNhlqlnJKUIZUQYYhO5DfSIpEqfgij5pV9vtzYEP9yznt5e/WdhelxcbGHC+UngUJLkEJHuJBNg5nwF/NkOBmlCCuY8E6CY5DCXLsLxnOkOBXKEH27UiCPXI7j2QISvAID9gQzBbcp+k3bbfZPqDnBc7RDARzBfeooUEwByWIz9mQDJJQK3JwQRSFT85yrfnDEldg4wqDFYNcX/l5u37J7DnzOUrQFiV4TTpVCplMy4SEaK0cOcXo18yPpDEai+QBFJEW1LXLhsnslQux9nGJMh2BTJYyWEYw5cgtRvViNasEzaHXEPrrhCxBvjNJEQVIy9mF0rMgwYUowX08YIO/nCHB9ShBju00MVZIcAxKkGN/FFeWBFNQgvt5wIYm0goJDkQJcuwvmG6MBNfb3aTneeaAdTgscniE95OA55vK
+tY1kgORkQQyQMCVJYXd2tu7W5YU6MLCInfXDdK/9fVxHU48W076fpQS1X2qVkskSIKSTUXxTzGCXo9VilE+Xp0cmRp7ConCngpxfxHGcoxBbqb9WLFSAYhGDxVnkVYzq+WpqRV9rUYLcYvRA6iHjkFoWti2U4FyU4E4esMFfzJDgapQgx3aaaCskOErYhbeLB2xIBjEkuAYlyLqdlRLshxLk2F8wxSDBivxl/O9Yt9nNA9EI0V3haOE1YbLwSn4QjRX9IB4s3kVFXTzfVDomG9j4+U1BSPDkdE3HS/M1wMkCDewdr00N8XeZLcc/2uezlqB8hDwM0wXAwCQGkzP5KDHq++mppXQrUh0bZRwLIndOWENoi/mM+ymf0QQ1wJAQifyKUTNDk4oCXE2NSEwJFlLAEpyJEtzKAzb48xkSXIYSZN+OJNgnl7o6e4cJDmN523jAhqQ/Q4IrUIIc22mKWCHB3ihBjv0FEw3F4bIo/kO87TxgQ1VZtZQaLOh68gPm
+Kgbh0ouSrAWTBJO5ziPp9fESpH1PTFVd+w6zPrg4P8spvVK87jB9PrTPZyxBY6vwCMfK4vFiEE/IQDKBhMiEXY7SydaJMaB+ABWFZ6JcoqghoyCuWzFT0ZW9EYbIvxi1E7U0i9syqrukRplCcf1DEpyKEtzIAzb4sxgSXGx3i7eJB2woKysnWGq1pQFQ8TybuPaX9GFIcAlKkGM7TYQVEuyJEtzMAzYEYwX38TyJgjGCWVzbSLtKD9DAp4y8PS7sjPDNoHW2hm5z41GCX/GADUmPj5fg3mRZyMXZcsiJIpOJHdQv8DyJdD2UDJ1f6D3/JF9K577O4di8DtkYz8AoRiTPYlSNVKVGxUQdQ6l0odScgigKy8bK3LDe8QV7I4z1YmSTo260jqLW+VhsL1IowX9QgpNQgut4wAZ/eoYE8Ufkzp/Nv8y1nWNTx43UbY3tO0XrtGFaT9slto+59pf0ZEhwPkrQ9Np6JlZKsBtKELdlQzDaUByOFXcUN+faxn6y
+PaWulERElqYvoEiPRoimfEAmFAUau/JJBMkowQ08YEPS9eMleGSCbOqFGVK4MNOELAdffyl/dXC84+XDExy/Z0dukSPIjlGKHfR+fJIvJSYGS8SjxS9EySLAugUQjxUbKAgx+tf1v0cJ2iiV8tTN72OLwsZ8xq0FkbZDmBen3Qa6USv2dMyrDC2U4D8owXEowZU8YIM/OUOClNBrP9H+KNd2DskO91AKJeiHYp5iRfN9CIcJp7LuuyoDSTeGBGejBHEdG5pwKyTYGSXIsb9ghCFPMEYbqg2yWWrzhnW71RgNdpRuIqGxDZ1PkZ6Hv4fOdoHtDbyHD2xI20r7U79fwUiUIB6PDUmnj5Mg7XdkvPjOuWkiyECcxXRuzmdDws6M7Gwa4kjD7Ht8ki9m1apVBTjc9inRaJTgGAbJJkxiJNjFyFacVg9UU9HyGKaw9Eap+BSEVOST5XW4GmGsFaMlOfq087mLX8Ix7K3YhRSYBEejBJfwgA3++AwJUrcuwRDB
+fFrHhai7aK/eW1+MisWIkqIhKkYLhgvm8RajHJbygAtJZ4YEp6MEObbThFkhwSSUIMf+eA9UHI6mYziMdNjFW8YDNmwW2Lx3bOI4meZQMY4PaI/wSfI6D527fbL9Nq597WbavXJxc6mNIxZpBMNQghzbSTp8nAQXd7NXnp4iSD8zRQBnLTHVHGGe2TBI8o566nySLybJyamHU3/hl0IwQUIkuMVoOWqUjpGmhZYPvYESXIBRYGns+VEgUaBsquxKXlun2cXIHjWG1A75Aa+5N7X0/oOTGxVKcARKcD4P2OCPMUiwDNXpSZtIG/AW8MASdlPsntkPtz/rMMhhG+571naa7RNanxuSJIYEJ6MEWbezUoLtUYILecCGYKDgvrHvsUBWS1YD7zGN1nPhMMLhiqiraJqsuawZSqsN7j/LdqrtPUv7yJrIDlLLsKE4PBglyLbdIrzndh8nwYNj+BVPT+JDnphsb+CM1TgYWN9f/OkkSG8Idl9zVfRRnBOORAmO
+YpAPMUqSJRBQPYCKwVsxCmyNxW23gshQVyYrfQsqbYc1asTH0YnRR/Cam+G1M+euKKSgJTgEJTiLBwZmZ4c/MkOCFAHh0o0/mv8zrS9gUAgMCY5DCXJspwm1QoJtUIJzeMCGoF+mBPl0HGEP4Xpa/9HMzQD/oTx1dXNtTJGzoWFkAEoQ17Mhaf1xEtw3ym7UyQk2YOKURWxzMjE37DJZ20/wCSVorBcMKhdUEXONXmAdBghHoPhGGrFWjEa8G3r/bhygtQ/VrVEf3AKJAsfKelhqhPnYZG/nYc5v8Jq3UJ9rej8KJfgPSnAgSnAaD9jgD82QoGk8PVkDWVveFN4Hei2viFuJ7/Kmsrw2HYXQhiHB0ShBXMeGJsQKCbZECXLsL+iVKUE7xF7rqg3Ee7xGr1lkRu7YjbV74xzpPJwaiDJHlu6DEuTYXtIi/xKk+98xzH57prAmsGFjkZPmjCd4rKzpY//pJGiqeE1MTHT2ruPdW9pP+gLrVMAESTFXMSKy
+QbL3QVWCbqNI9qJIhlKuHRa1pR8vE6MEx8jmFlTaDlvU6NvMl3p6zCvorn2FsEiwL0pwIg/Y4A/MkKBxXD1bEpC4hXgWvWY1k3iA53isd9ePsBlv856emyNpyZDgCJQgrmNDE2yFBJuhBDn2F3TLJkEbg9z9tNEOvRzO8SbzIL+gSP9SR6vH0D2YxiA0SLAHSpBjH0mzj5Kg7dfDBaeYRdfTTCbx84FdFhOzs+5TRoImKIePGjCwd0cnTXvNdcFQlN8wBixiJMRDxWn6NvrnUcWiLtEgCUgfY48LOb1xBda1b7RsK1fr9Mcme8smy9KjikedxWvuS6NrF9B1F8I+2bjMvhdW8ifzgA1+X/6f1OpLP2xTaggViyUNJFNtRtmkGrYbaxlRW9FP2GDSjo5jMwb3YdlG3Jwx5eYQ21+4jqUOVnfObWpPSVNJ3Rz7jstA0FVwmzlogUmENBK0pJFkod0Qu+e0nbXYJNukiVuKv9f56ZIot5A5CCtJEKU7kWtf
+vM4j1AKdXwnu+VL8Y85GDEF2pljmjAEHy3y6OkH2sQmxToya6Rv61vLdpGmjuSvvJv9bOFiY7jDUAUiMosGidFkfWao6Sf3Kt6bvvaiiUedQejtwv2k0MTxKJITSYUaNGlVgIqGWWpylaydX6/THJnvre+pfGuswa9JwXv9cUbgQqusTtRR1E7YSHhY3E59jgmI6K/lC8hV++YOZ0TiJkEZwVsYovxC2E56xHWz7hjeKB0xshtt8ELQX/KYoq1iC0U4F4xh8ekEHwXpRC9EJ5nlEzUWnHCs7TjRNvi5sK5yO13TM/HqELYVH9YH6yrlN8i6rIYvC69qJxz1tfj/SOtKV5uMR0rEoGZiG3Ne56xJkdWRz8Bq+5ffh/2kz0iaN9yUPmNC92few/wPfm9OYtzgQ7y+BemPQe2TeyClqKqonaiM6gNHzWTz/ORP4HpySV5InsyeYW1daPDROejcrrUVs4FxuTDMhyhMpg6Rv8R+F5//qP7UA31w9CqEkLnug
+4GbHxMWkhJUKOxQZH3nYWN+3E1/fjMvFyAikKT6Pp77BNP9JQUdSJEH5IPl4ttZp68TIHTXiMGLp4WXCf8R7mExJ0gXVq6UQ7oiCokH6glMkYw7lhiFillw5W2oxxh+/N0V4qkRVN3l5+XhFecVEdYy6H8qkAe4fT8el7ehHS6IhWeD2Psxz0KCeJANjFGVPjQqUcGx+LbQOUViaA4Og47hk/PmZH4OSviny43ovaF8qbtO+lE+Iy4oo3iY4aGwPp3icQClC28nF1aUu3TONAEO5gHQ8jiRxG3rvEA86t/k94346ihbz+7l1q6Me2LiC8z5kf74pbx01Smi/ps/uf1ZkIelQNEfFYyQOBVEJF41QEm2pxZceU19gFGRx40CtWnwupv1o/3/ih6PpoWmQ/7Qd7mRvtw5uz/E+duI9Naf7+OeLwoUwE5tZsLG4n1EcNJ8G/UgomqLiKuXW0Q/c/POzfB72bay9HuvPY/W+9iQxvD9HyntEgTrRknFvdohN
+wV+LdZB86X3/VNA1/8+/qBReUzI15fmhADWIC0WJiBqRG0eItmd/gwv2Wvzr+buLRorecrdO5z3Z23GU44fIhMhLKMGJSBRFsf8yoRSKlEHhvf33+Nw+FFuK9FhHqP4EUKSp7qqeytY6nS8xjhanh1QKocEdUlCA9Unyn20UWEghhRIshKJSarTBeVJ/ZLZOm6SYVzn61fZ7gMfbjRLsjsVg/8++LrCQQgolWFj8ofEIMRexjnig+CV36o7lnEbJUEmab23fhyi//chgKgYXJkcXUsi/RYKFIrQzTBNaNrS1ooviN1PajkmIuYlR01nzd5HiRa5RSg8JEClGYi0sBhdSyL9GgoVQsRVz+byohdqtkdsRYX/he4chDmDCKEaTHGkE4Q/6VvrnQZWCaHL6I8gilGC7SPwryITuQgoppFCCnzSXkQZ9oNSd2LjYUcHlg/d61PO47tzK+bG+uf6Je0P3B961vX8LrBR4NTom+qhxeP95NEIMUpEkSg0t/1oB
+FlJIoQQLRWicW1mFfZSLYFRYjxK7saEjGZlNoOwm4XKkMeG7AW6TiI99zSeeL6SQQv61EizEONG8kPIWUYbeKLswFF8MQb0/cBkcHx/vRa9TTiOJszD6K6SQ/6IEC5NmSYZ8ivCoztAEPTeJ798X+RVSSCH/B8zRbOJfFK4KAAAAAElFTkSuQmCC
+"""
+
+
+svg = """
+H4sIAAAAAAAAAO19WW8bSZb1e/0KjgoDdOFjpmJfVHYN0N2YRj8MptE9he+ZliibKEk0KNouz6+fc25kkkmJUqZlKi2rVOqGmZFbxI27nLtE5Kv/+P3yYvJxvrpeLK9eH+laHU3mV6fLs8XV29dHv/7Pf1bpaHK9nl2dzS6WV/PXR1fLo//45YdX/1ZVk7+s5rP1/GzyabF+N/n71W/Xp7P388mf3q3X70+Ojz99+lQvmsZ6uXp7/NOkqn754YdX1x/f/jCZTPDeq+uTs9PXR80N7z+sLuTCs9Pj+cX8cn61vj7WtT4+2l5+ur38lG9ffJyfLi8vl1fXcufV9Y+di1dn55ur2ZtPVi7SOedjZY6NqXBFdf35aj37vdq9FX3cd6tRSh3j3PbKYVed/H4BUtzZGTkrV3cmwkjDp8XZ+t3rI6u9HL6bL96+W+N0c7w4e32EN5mjX3D06mx+fs3W0s4jJydwCm+Yz1Z/W83OFqBruahctnvGKZ2be3DX9Xr5
+vr22eRlanDL6aNt8vf58MS9nqtPlxXJ18qMJc23Cz9K0fD87Xaw/n3RvWZ6fX88xDDDbcf/L7P0vUyoEpfpfpjcve3W8O+gvpFGMSffRCNf0dNt4/h2ERniZv/9lYca/UWlkVT+NrLm/2/r09I0+PRCNrHtyfGRcP41MuL/bs7MwV+ZANDLp/pedvTmLfgDTHo5GNvteGtkc+6Y2qSFTO4RGNue+l81n4/KRTbGfRqm320qdnx+KRn0G4nzmhrzsgDSKvXYNNOrp9qlP8WB81Gcgzt+c+TCmrHkdUx+NvE6qR2fr8OZMH4RGeFmPgYghzs/diDRyQdlefBRUjzk+II3wsh7lN/RlB6ORzbaXj2x2PXxk5b+D0Agv6+Gj/IZ/49LI9NOoD7J4y78D0cj2AA1cgb9RaaRDP410D2R5k/h3IBqZPqYdn0ZqgKzpnm7PzrM6EIbEy3pkbR7PbLrhi6g62ehjDo9NrF6nBNf09N+7N+d+gM0ZRCzV65TAkXo8
+MPm7fn1kjKpV7MrRZ7QGk+rgrN6ClN8NrrWuNlnFrar4jNakPObPuW3H9tJ+e5MEPE7erebnr49+3DNH7XVvm8Zfrxbr69dHH67nq3+BCPP/vvr1en7rqv9Zza6uz5ery9dHl7P1avH7n3QNaAxUp6cKf+2RmVY21FErGxN+alcDRkT905aE9xDL5tpq1bG5JFbMps6w+nqXWGhN+M/vECs4UxtnO1GNvZrPDSRWOiCxnAnWOzet8FNplXSeV0kIV87YKfpurVNxWjmFYcTgzU+bR1+/X81nZ/81X79bYkTvZ2dDCKqtxSNDB3kL9yXwGShldgiqSbqc3C16oq/B3UtPN5Cedig9nxSvVENFK3WuHJFfQj4Mw+y3f9UQlKCqHnfrwDaw6kHlY1nBMRkx/IHZMAyAYXFMGBafCAwbkwHjYKv5/BgwDtCCscdXOigD9gWKRmXA0TBuNZQFuwbpaeHc/Y5T1Rv3outUjes8VT0xi2fjPjnVQabPh7Gccr0e
+Oa4Zj6nwsm/vkY/mEw31G2yq8kCeeoBukacPiBf3IfgDR4z7XvfIMePxcJNzKg/ULeNGGzSUqE/axmllwPwhpPS14YbxKPoFPvlQ2XqSVL3DJx8g0fTJezT7oZ3ynvzu8/OJnDP+j8qHGHtvXQSu6amLOCALOgDCPx4DWvvHZUDbW7yEa3oihYdlwB5uf44MCFs8GN903PdnwYLNmIbY4r46wwOb4qcUHRqHEf1wmP3c2NB53VsyjWvGS9HgZT01Ws+RAXX8AzNg/7oG37eu4aAM2Leu4TkyoBkaxBydAWOsFQirwYDW1jF4Fb+PUIPPg/H19yzSI4bafR7qMj/lSqVRgsig1UCTcsjCmrGGNhCuHXJoVkEPgcd3lQb4og5Zx12lYa2vXXJpl8VdzrVH831Kw+s0KE0pKwIOxeKqzjFosLVpeDzaAN3hp9rWOgejweI5ZOhBE4axuHWwh9HqG8SK0N/e+bRLrGDqaKCbdogVU6CodZYZ3CZWyKkbOOwh
+10HtlooGDBGmUHtWa6dsnlb47ZVTDhqBJPQB/ZtW3tcxcnzTKiWwkLUPysc1IxiwCKSvvunAy0D6XvfIC0HG5LZhaufb8RpUESy+hem3mgjHuQ6jXc6uf+sOjsdRddc5ruan6+28NOubvaV2UL6bDmjXOmeY7JDDzlKg1WdYeGh7Bf3R9eN+pxmojXbdWjQQv7EZ3SR66R97g/7tiX2cLy4uTn48l//AV6vlb/OTq+VVR4sfc3BPhG3iwPqAJ8o2T4F81SAcXQhYHRL5PSYJ71LxVW/ZRVHyffU8B1fzfVn3gyn6uzRVpZ+6rqr2VKh8mbbC1ev5qn2IULZaXKHp/fJitl4sr6pyBfj5+p9/+/OO4JQzUeVOveH5/G+zD9fXi9nVny8+rHZ7vXsO9+3WIJ79df5xIe+E/AL6wpFTptPr8ronoybcl0BB/y2URAWmUsZ6DyQYPX6G8FAt0Zu8Eh3Rkzc4tIboCdseTD8cQEa0e5iMaNcvI/rJyoh1zxOJ
+GKdrAycr7JAvxFjbGLohI0afjKXD7uIu+bKtc1LmfvJ5NYR8ssHK4Yj3RdGn9oG7QTz08gIW6vABHFubbDqtEsHx6KVy4b4oB0hphpDyCyI4Xz3ycYLCGPnTXD/4CEFh52HkoBPzDYqCW2M30EuK8lpwtr+h1XwG9cO9ETPeNUgsuc/ISLzktam96RYwycgjOCztBPgMr4X+07mzL4uM3IF2EGl/78iHJRhkF5qxRp5y7ZztbLMh+sPlmgHGuDtyXBuMUbsjDzrUOit7XyIgOjUI68keRSONfCRud2pQWH9Ubh9pzvVAbh9vzkeSc6cHBR7HlPPxdHs1mN87/t8jjn7/DlZV/76DYIk+j+zAu1j1FVU/8j5W49qDaiAKyP6Lvf+D8Ym8u3ficm9s78C75u0LW+2+7lH3zRsXMQ2LElGXfnEo+WB8Iu/uF/Bu9ewYOwf28cnB9g48QIQnKv2gCE9Uu2HuboQHjq1XLvl0V4TnIP3OD+u31vf0Wzmu1XzU
+fmv7wH77O/utahd8Vto/IKRmQq69yvGGO59i7a2/EcgwQdUZrv8uQAnJ1MGlTtJ3j6hGMzAmZA4aUNPOb2NC7VGqkzPQoXDzLcND1qY0ekhIMYgSbwRGvK2dNupe1RzjMJAb0ygwT0aeIPEu3QAvTqs6dqt4ZODAuF7pvBtWhLYAu3Vh+b6F1sNqf2X/7+c1cD/IFD9g4PeWOnmTItSKCM/OoQm1sTBzd5aXfkk0cRT1AxIOWst6YPUDjRBTSo36aY+0rRPNkJ9WAbgt26jdd0TJMCy6MAYlK2jQ2obo7LRyIKvzOXxPTBmGuWIvTDmAKQe6taDlQVN2dzBmTrXWKuUAcgYPHpWC0EP7P2UwfQ5JNKGv9vDAO/D3xVMeeQ/+ERlP228hwtZFH6OFVbYKZjmpxDyxTiHHYAyNNQTZJ6enAB2MgKhAqAuokX3Oh4C6iTuAmd08ss0ZBMt2N4+sPV4bo9tNfnqXahVYXXAPcc2wFOBIuAcUBqVzdF5PjQem
+x0i/I1IOqmgYiZRMxHtVlirpDAdMxYM4YGORshrky5KYB6yyHJWce92v3B9s44eV+uqbDvxppb5yy4N9FOfrgz/O6gcF23aWht0OWoVofASDf3HsZxyBsWZQDct3rntGWdBlzcCimG+3Vu2hcS2MbaCLPmJca5xJtU9+AeLDJ9U+vWDlOJPqvsHSy7EmdVg88llO6rAwQ9kRcmiRyQM3nOzdGUx2nOzx/A+942RPovVgO04eAoxl9zAwlnerU3bBGCBR9tE9AIyNI7xODYxYjCe849Q0WKsG4dBRq0DHGvkg2Pj86uIw8mGgcsQq0NFGPiji8/zqX63Vw0oNxqx/HWvkAzXceCMfZyNwqwdvA/69oW2MbZggj2iwx0muWPtNaoaeQHIFBsKF7nIxhuWiq5NJ3Qr3rwrL2T9GWG6MCKcdGJb7vkk5ztpbOzAM+N2tvR2JfGkY4D3wtliA2TFYR+Jp/JdCIR5oozN+K8CcHI3mIlwDNRYTNOXUQaMpnN7Q
+79Xx2fz8Wn5dztezs9l69sNmnG1LG/V4tTo7P/nnX/9z48Gfnp78/+VqsyHGZMILZm+WH9avjzZ+Pq47Oz1h72frXxaXs7fz4+uPb//f75cXePnmxM7F68/v59uHlseu5tfLD6vT+eujd+v1+5Pj4/cfVhf1cvUWD8H/Lhe86fhf68XFxd/5kk7wpHnoYn0x/0XeWX62ozhuhtEGDzqjfHXc0kCO3pZb1tvpkJ8Xs/X8T2paZcvSKKM3oi/MMvs8X7UpqFfnF8tP/1wudwJNbRtsX8f4Xl6cXJMjXh9Be4A9PnZARLN7x/JqXV0v/nd+gkl///vP5ZjnTq5I1IvS8kl2GWmbyJNV2XjkRBv/7z9fzNfr+ariuxZXb08UHvRpuTrbaSj7hCj5Tw62gaTutiHlfeezy8XF55N/gTBHv5QBz98ullfbCd0MWtpp8nHh7q4pm31TLPBaBGDvrjrZ7pyio4aFjiHunOUeKZgJC+lNOyc+w71zkGij7e6JdqMU
+9MXtnNhPavLWq+PtEMow/zFbzW4Pkq2WtZDbezDXvwzghvBAbojme2aGcB8z2ExtZ/1eZjBa1d7AU7/JDPDulMrgk1vMkHSdjTf5DmYI7stnOuyd6fX8961pYpAh1TnpzroI9CYZWxufwq6/yTttd0fSZ8ILazynwwZ7iXIHWRrC8AEEWoXepNMQJau7DvvzIOUAsQK8ulustAq1jkHv17Ex1ZwUZ26KlVVAulH7Wzo2G+6i210NviNWWocvFisAnH1i9ba9fL0HIXnvrHchNGDdw5cEfARMAgD0NkTl4U5aZg86WL3LKxEuZieZ80Uc8XG2Wsyu1vdwSXPjar4+fde2kYmr2cXi7dXJ9Xq2Wj+MlT6tFmv8ri6XZ/OTi1W1ftM8+Or03XLVPHm7OXhueE/P+Hcv70la5QTA608/btey/bTDk/+Y/Ta/eje7/LkCEr4+nb2fV2Wk7+eni/PFqWRtNldts0HvZ+t328kn+pw4qHtuWuKnmLo6K6fD5HRS
+uXnlp5g3b5SZAPPGbJSbhpp+g55UhjvrcMGRD5MKPkQMOGswzXLW0TdFA/w17q02qWKN+cfdyqVJZWtl4IdwMxvnJlWojQ44NLA6eFgmD7UH8PgyHq0FdWc0GFMHH6aVB9jOOaMBT+O2JoAi3kwuJjBPDngdQ5A78KCYHIagISwCzussfbR1QH/QHb7Ji/tjMUQ94boVHqM9JRxHjKEcTPgsm+NUq3kVJr423A2YXcOD0ZfIUXOHFV4JYeY5XWs5Z2sd5OLyjCQN8BocvCTDrjru4wNnTeNcxRiSoiuGd3jPFjrrGGbghPCIVDF8GvqeoxAKBCOhMGfw8djka+4ThBMWt3hOGM9zkuR8EsKFOgU5jHXO7D23u9l2CKOQw+RamvtJmXvcbxLI6jGczMc6F3HS1iQzP6aL2bVoiOgFd8GtQ+KolbHcCa1Mh5sAJ+IV0pCZuJxk9MeVQwcSO0OCBzAjZxYeLMkP/A93cMLSfkMm08ph2qh2wpQ0NMrjwexG
+mEYymRxjCBhcAltdgDiKDxE+wfyZQm2QJussDO2EJTEIDi+QZ30ZBQjP8wkvsTIMGTUuxChLS8IcerJ1DKkcG5EXCI6Zeo5EaMMj8CoERC7GVMm4eKmm0LDq3nMkeLfhbswNKzs2WFwOf1P6SmbEuYz3O7KocC8jbQrHmCRFwbM2gLQG3BJxLdqUnYBnLFiFNPNGGlj963CYyd0O4+CDneO5JNxOmeG1pnmw5oZHNyADdcxOaufGToitBuyos78slxcf52vorfsV2va6btZ+n1KLJFaCTgPcwQQUnWaLTqMqE52mMycx1CGH0uBFp0XdHuCs0JoqDEpOUWt56kg24AxYKlL3cdKiLUpMGCTI3ZwjFzBhGmKyOSgcqsF7lCjfaLfgRMqhxFrmb56pZc8mK8rO1UGk0pHX5XZrOkypGNIFp3k5i3cW+c/QPNvjCEFIEAG40lb4UASLoqCg2CCWYWK0qE62iE5DV7YtYBIwNslZOA+dDWQIkJO9nFrhaR7D
+qDRjxvCY4Z0WKdCToizaazWYzUK65GjCss9MfSxKlvQkP3M+wKtUpGWBFAcz0aJj0pZCrTKvGi0uDdBVYP3UDDoA/lLNsHccjyim/Sy8p953RBaWpTYOLOyYY1OFhRU3I6PmL+SOootyKC0i3uSbJrZPtqdqIb9PrWgeIQR4qjChbRqmWa4lfXQuzAdWgPoRClU2UeNPimVmi2FQtssCmtFEWg3oY00LXY6iKUetPZF/yClaTESx6dLPMiDwYp3LuTKTAfMNiJuF62kpwkQ4iofggw2zkC4+y+U0ZxuOCBOxmHLohCVpbIhtaNNSbA90Yw0uNkKwnyP2FB2NxxHeQKtjtBFajZ8XSC1L0HyZ1nwJS9AYiewHqwtLhAIfqNo071WFKCBBFAujGzxhyg3ADq1dN1buARNtuMg26k2J6rQTUTJJTBRxEqVTNFd5k+X7XQ7CdqJVhUdplmBuiNk8nwPyX06KXcaVwGaKxhD/mhbPAQtkqgktCqfYXpq6QOTT
+YItcLD6BiSXe48QrOUs+ogoS6zqRu+SITCRsUTQOHpMbjWNJAiILAUaUhwZGytkoahVPEINL+5CLCiK/WWHti+14BGkUk04LmwRbNoQnrs7Fyoi0QhxVAQ05FqOiOW8FfNtCAJFQn5wQtRwLuKFZgQwb44qqs6L6mwYj2RSKNK0Y1QeD/rLeFP+SFZxAKsJJvlKQh0BKT9GD6RAKE0wagAEiMAyOJko0+AR2LgvqKkIVm6MIAmPYEw1Ubaiu9gvXnhK7EYUrgAQm2jRlFQqkpQiXGFXFpGnSAhIKCKPzAjWkCrA29B4ak415FcEoKKnge0U1CBReLhdunRYD1rhOWrKvpjw/NGDP5bBpmBY/YQP2+BZNHqcmxUk8u3Fd+DAeU6Vl4WpOBe4QFidT85YGLosOzpYi4EQZVo2lxg1BN2ztQrG7RDvF75to+RBKavFvbnpSXBjKhzSYwhiehBHoVTUKmDpLCZvVqrg3xVa0YHljLZLePetuHKeiMaKhZGsg
+N0ODVix70YxF0cl08BiiXxSf9wKoOHpqiUZeBTwZkTifReKU2NZibAjjoAxF4uS4uMeC5OhKlh4HwrhYaOVcceYKYhHLNikOmXh+AmjkWCImgv7aOabrJ7SCSrW5nJY5nIivQIkllZPgqkqS9xBfgplmYkiUSIl0LrV9cfxGU+Oyyukgplj81GIpysMF9LaTtrESFBBX/KQQWuwhULa4Rzw2qkEnpT+8tFgWWlh5iissU1rknpC6lkUbtfGMxLIIb083V9Nz4qHIpXhLwmiGdqI0WIk8GEG5FTPiqbUfrnVp44RASrxSQQm0A4TGgj+N20wXzUG5i9aDXlGm61tQbfGk8xZ8FHc1b8FHEj9eN/CDU4YLJRVL5RkEvQYYMCvwqWnIhNigtIARblZ8BzzdidWOri+DFYBoAUZiom4osRsok4IZ0XENnN1GkgQB+C0XuULEDRfpYlYy3VtqBXjFbZBAuAhkLC25oF4RokLZAlfB79TTLReVkFIHn4gW2+IT
+chGhKhWmMI0SO1wketOgm5CVzIRp/W2Mm91th6ncxrfcQjAlbqNEEDilsaia0NGIjcbvyNdGVrooTBR8i8JcA+zKKFtkX0yFbcGDxNpa5rEmtVheFNU+NG+50K6L5hkIa9F8CYO1aL6lX1FRLZwXXd6CeVHNLZjnyKT7EmigN5dzUbdFYsRiFR+V2qwocsIkudw2EJ06wnsB86454rN83oB5Jxckqo3EsEehRJE6CeHExsK6SQmyxYZqrvgTYjSjb61mEP8jlC5zCKyEAt/axv+wJcAlfRa92e1ziTtt+ixMve00Hd/QdjrGog5EIibimU6LDTQS+PNT0UbSayI535h+9jr6NgRUlK1vPHE7KarWT4uM2Ma5EZIUtgCQDHfolJGiNq+O3zY/7k0uBJuyDi42yYUQNMCSJzU9pgPI1U+DAraNobs9ym52wYfO0pax800Hi//nn/bkpO6Dsw4y5ZMhgRjgAoUkIhzEmVJTZ8TECIyIjZu/afPiM0tbFkHG
+GeVKiEga9vAO9P+ePSvvzNLcSMmMifMjN5XzYcoqZQs7sck5FO1IW0ZlaBrwIyZ5g1hLWCJvMGiTp5CLizpsrlTFhSuXqdaf8xL2FXxOyEiXoGQhiC2J88uBFaDaAMvykwqGUb68AVsSHmxNjuBIXQL6usT7mmPBx03si9s7oCOd2I7hB1W3ur+4KwzQaYniS/Aex6J45aBBPa237LaOQxLCNDHJgjc78bnQgtniVlhZ8rGJz7WRAPbRyEAZlGyiksVg7ee5fd/beXI8RxE0AO+2y3O7RnkLl0wDJEILup1qYjlixwRkG9cmVBoH1eyApdS2NGAJuHQDlHzrwgiEkGCwoOdccA8baINLZk+sBc3KnRii0R1g2EMAiGi2AIIHTfZM8lwS/DMSthAZiMTOEyIkIU6SszSauc26kTtLZKcJzoRJw8/Fd/ToC3NyYoyT5OUknC2dhzwqAS8lul48VeaeGAfbogrHyRAbW2IxEsi538qCa/d90+7pca3lVyCI
+8INE4Xz4o4Qbm3BdCTjmGwHHvBNwdC/hxjvCjWU6S8BxG9PYRh0L0u/GHYvrPHrkEfKYvgt5DHCvoyUjg6w2xtDJCNlbGSH7RRkhMzQjdKcXOXpOKN+bE8qHyQnJcO/NCjkd1dNin4HOVXRQ7il0NhHWKjIuA2XsHelvDKdeZXeXbxVc54MG36tvpe0X+lYsLsg2+ilYBYbOO2pWEE1CX23dEfRSlEi7JsQSTScWgmVDLGCCnnOCcEIJ/mrRcGmyCfkUvJeagqZSbePEsy9hdhbGEM+U9DgrCSjqSdJluNqJFIXYBCcK45e4vVQhMZZcGiRbLr5FG8PSIjaE9KUupo3WVMXYAE62NneDO31TlbLFnb5NjbTIs5R9tSUwpUBFT5tQnMTaQaemWonGsIR5ixYpBRIlb801xk1FWknelzAvD4X8YmZ8GV30JVROUvoN6a2gxRIIErXCGgOWCDXJgBLi8TQqPps23OvEVKXS/1TAz7RUCsmlWQIyDDuXGFCc
+lmA231uiPpwtakGJALJ2hoZUNeOWiiMJh0vCSdTrButM8fyCdEqYk9zSZJ9UoJF2oqzE0sqUiuFrw6SE3SHJ6eJ06hI5KpV59EBLuBkmsimKEPi/N0Jk96XAn76yu69MFZITI2CdByNwk4u761SfaZWqzIvoxNv7K/w0tEz6pST1pST1pST1pST16Zakun04/W7VZ356qVF9qVF94jWqbl/S5Rvy9EvR6pMrWnX7ciTfjkVeqlhfqlifcRWr25fb+YbS9lLW+lLW+lLW+lLW+t2Utbp9ybhvp0Bf6lxf6lxf6lyfW52r/1ahoK/PzbqQQtKSm3UB9Lg7N/ttd1nZT8k0OJ/wkoZ9ScO+pGHvTMN+beHrfvEMYyu6eyv8QXHAdlb4K5fVnfsH+W9Xg3I3KbU5nKb7BsX8ft/isq/mL60ePdzxUt3/fKr79+4h8/SZ8KXc/6Xcf4eN9+0j8x2w8Uv9/0v9/x+i/n/vtj7fgYC+LAh4mgsC9u5k85T4aeuc
+ddlKmMpGYLxsIr8FzsyTNppzmDB4uPYlNB1CAp/oCOoYnSJdaEBfT77S4jiHqc1UMQbKgBWcMUVPLwWPlKkFzypwhIJ4w2HJE34ZJOFJUOHc7tZ7B9XHzwWlGCNLxfh58omJEUqPeY/KC0tjtgw0doalwOwxCuSson2haVKGARZG6sESROAJNsUkjACgTFl4U+iuAleiG1aeCL5kHZAwb/n/pQAuY5MmLsDEErJF2gFtCA6ii15P+HmfmDV7z3iEZBIDTFRKHogBvn8ykDlLYwWKTC3r/lQihofWc87ZKQZmUmQAi5TQEOVphIg6ADo02chAihcDa+kwU8NGfgoDLazClKQeP/ORYbygEhNepYCPQMDooxa4CUseoXgVJINQBrIB38OD9JHlGJouN+x9NrsUOLrPdzcJujumxnW3PirP3IW1/K6Ri3aaYgCO0jc9dxESGNBK5bsd98v52eLD5SOUVC+uziBOJ+p2gbU0nM1Pl6siOOKod8MCbaRgNzDQ
+tO7EBrov3JCuPPBswf2Z+fyL9ernNxfL09+q96vl29X8+pqt6zfDirbfzK7n0rnrd4vz9Ul72FkWkzAfMATu580HwzfbXg/ZA7v8rmT76hOvfr6crX6br8q5j4vrxZvFBW+Snxcc1/X7i9nnk8VV6cbH+Yohms35PUtvtAs//Ty/muF09WZ2+tvb1fLD1dnJ7PT0w+UHfu/hVpjkfk0ngZSNjrul2hgvjtYEPc0BwAC6QMwTdz5PKqaCsqBKmHaDQxQSgB0jglGydYGR4+CNnQKiGAifSCsdXECTxOQmsKgTu6WV1hTznKDeJh7ywJ3VNZWiTgnP9/yUlneeCNbQ3Y+Zta1O01WBDqG+oAbhN0eYhoYXZ1TQNMXWWOsLcIJ4QT1AahXUbjJSce4hy2j0/GJVE9FOMJ3JxpuKjeYLdl1AqQFQACmIIsA08r0TJoH8hN92cRnQlsFJhuomLtLZ8sFLkSWsqIfJ11GioRwoC5sFG0LTmchvRzHKzApu2A96
+SQoqHr1m9sKlUIoWEobmiTeN5RdWMA4ddHaiIa3heVHl9DKYfeYiDZ8kvM4UIM6kRLpITBmaFfres14008qwMy4ql/fqta4+elFGB1dGezTPPmyTJPA8mip6NJVzb6gbvlMCbGjtpXO6lLODQSnC8HOmAF64zKQbCy7fMsx2b4QY5yEd0CeaHiBgKj0BLfgMPmmkc8C4H3CKVyFNgUUcJM1PoFkisDAALmAHgK6hY6W4UoqgLgIJA/YC0nsuxjEs1wybFsfQHQCNKh74vHL0EUKMvtSPAxDy1YmfEhEnAhJKVAlFolJJ6/NDeVNekqUCXRJC3lPBApEYXXSzM9AJRhNuMJAGhWygxWUtAnSTlJ4Beohz4AnDJMCacqk6N9oq4nubHTVLpG6FFiNMTQSIXHBgAYgYFEjB8THQgg4KzcCJwISpTMdWAZ0yTgpcLCVa0HQxWldaiCmb/knmyJIUUE4BWsm2Hdai1lSSwn1Nk6O9l5itFiDLOiiAaCmIwksJ
+Y+nFelgfuRNjt6zEw1wqSWyaxLQieiXOCD8GAQguWF3z/QxoUZVLQtDQscK40A8pXoExitTO0Kf0BgPrebgQQajDN4NgUprC0rDsCC8NcwU+6LZJJhBUBfyvit/I3JjySfKc0UaJEYA+1rbz4BtaNJVH0dvNu9uZaRv4QS1JzNnUhkhhTmF0WSEA8GtDOwkwXJnpQWPF1NFBs2W+AaJZg6IIaTWj6uBISeB6W9YPQGhU0yLrekB2Wzw9yRRaft8LF7PokNljYnfmGcEbjLSgOxQT4G4l/klmoZNDE0swIC755qdUxMxAtKq7dht4pIWEX7u4Wovy1g1ubL6rfkNZy+Hqg/T36n/nq2XPqmuuq9r1Zn+9nE/+Mfnbcv1ucTr5l7tf6964uBsnebul7W0lzJyYhStVdLBgBUPxhUKDh0rOTfxyVcj6pxuTt/2yjblrtf83zjferqzomZS7MpC3LExjY4ARmfCBJx/EwcYvaBuWajmp9gsAxQysUytZhkfo
+fXiJ1EGvGmp1XDKR2C0j6Rg0cHWEzMBpn1IK4ayUY21pfviCKpT1UGRBUa5wszMXOMUADCqhYe0D8/SGj5U6SWe5VBJPMRJZxoksJURUuUXPZga1YWxUUdi40TPBhxeWhaR4pMnl66hR0nc1RyDBD17L8iYr2qT8YEVIGQVD4E4MjnIcpST4spXCYb5Uoiel7slm5aXmw7B+qjRgIFXpF2sKmswQQIOL225Sp1lGZaTowIgCY39L6UcUF1xyv1kie8kRd0sZTBKXRbVjIZ7GHIj9cIyvJZnQzTJbeaRm94KssWteETPrfrPkOy3XUQoNxBwYOkyWsTxTFpRRo8amxU8KtUopCEPfzHG1dbXlgkCCb8nc/Fui4eUBfGVo6L5p8FIbIw26IZphuI5Dsg2JA2PK0g+x5y7I4lmZPTFYpDLTS7iilAKDXvQ1dLmlNERmNDG4uFn5peCDUeErwQtei9FgKAxUBX4qVX+pIYCgBVZUgjB+9/NqXQNx57fxvi58
+GB5H4W5CicMKPuCxOfiGukXBhDBwx6f8fqZz1gFvJX4pSwFs3ETB0BD3o2D4kMpGo6eObJ4iLHUlBRPeTSXlahIBGRgBAKuUxzuBMlw6yoUADFtmCacZJstVEZ3ACiWupU6JMm6LBAZBY1ycXiqhvVRIMcqY8CTHz19hEBNCPKD7st44ADnhQTkS6Fku+5RlkUYWnIsBIoIGggEvOan4Y8LcMsXPa/Bock8iEuIleG4U7Jl9kY99z4kpZXkOXWR98zmJq8m911EiggCsDmzd9LjtMGkYqXuo9z2mb8KBo+uMgRpCLq69dVKn7Kg0udq4IaA8RehX8budMPxTK2kgwCqmZCILChh3gUchi0ezhUDxTIIwyep6iFgqC5uDDbKUv9CmIQ0owXm0UuuqCaIZ3ghcIyuVRLZJGZXbbIekVTOMUB6e1O2Hp1tD3YfqVNDVXUlegQXGSvwcbJPCg/Ddm+XF2aOgu3th3V144dervy7XH3q2emgumvwZXe/JZFmJ
+XQdIG0iJmReDd0Nw3W3BDa3g+tuCm4YIrrkluPYLBDcOEdzYCly6IbhpPMENDxHcfBjBdQ8UXDtEcOMtwbVfLLjfkdjebdyNGlxt+HDZfZiF9+Ap6hZMVWCRDb9FDoAL8wyOvxXn0v7+mu/A1WQqACREZt/AlhP4p5LfBl8RrsFORYmIWPnUuCuFEBKeYkBM1jtJ/tuwip5fQi9r2xiFAMtE+PJWgkowHpEFBDFLRQoj0dwxhtXIOuVSLAJX0rjSJDV5ORlieNMk0l1uN+BwBc/yQ5jBmLI4JugkpcEuiZWCtitqT0VDnM+aB+190+JKJBucTa8mNyERvE4RlKaiUCT8bbkzBqvISjIhRrhMExnPpo7Mygo6XGklis7oHloYPXElRsIWKUXxGc81ZRWHM+I5s84JSBijU47ZEKiA4E2zcQHXq1HHVVGxKiiUGhDrtOZGDQxIKkmiVpEjaCYkNRNC6S0TYpoZYY3P7pzY1MyJa3aY4RjaCWAFpJTvtA3l
+Fi9VKrLZg47tdFi5n4tO/M3psLqdj9BSfzMfrm1x3flo6lvKhPgyIcG3EwJlVPjrxnyUECXnIzTz4UJLfX/XfITNqhru0VegCyVhMyF0Wy1NCF0QFxjA1FYxfQ0OgIZNUYJ7Zho1ZUlpWUoNMocsAdbIQp8soJaJFaVT8xzD4K3NcD354e8AYk6bud2nWiEI1V11NUW5QlzhFsFcuPjUYl7DUdGe0JbWtz2tX//eek//7ftdre7V/cEtPOpi/idNp9aCY7gCzENGcXAziiWfuYZYfv20PGosywzfdaw/Q3OLnn1xLogcy1kAKpNsT0TRkrJAbj3EtKWlRMDA4LfPzhcD45qgO1SVlhhSiFy/xQI44CGxMMyraD5C6RAlNMWaCYa+eEasA+At5BV6BcpBC5bNGYi3bSkr7wPjaxsbo6BQSr2vdRIn4i526JcsRgJak6CNKGL+wxRuOVEUi2Zcu2mxxcTwbt+amFhrKHSGSjAeW0wMHpIZ6GOvjWiJAFVk
+uEOOD2VXruwNFJCQI5VF3kCuUBzMB3ku92hauJxHc9V1qT1jeS1O08bgCXxHTkTcjM8w3FdsjOcif5oIqCFltCzdZvrFGc5LlMp4WLjTJnjYTIptJsXbdlJSOynmxqSEnJpJKbka6DybO3Ng+Aouvtg2ldukHJL5ldwsjceUFLMP2pV8RGdKMBftpHRmoMxJO0uS69/Mie7MSShz4sJmTuyk5bEbc5JtOyemzElWqZkBnds5STfmBJPkN3NS9iUgXoibSSn1hWXVMKteJZBmMSXQAEnT0FiYV5e5GVAdpHZUDA3vV2RDWashdU2GOIDLHMqDcqmmznh2gM2LBGplgvP+oJnZ+W7JAYNmxjyWKr8dNrtRr/JfE0t/10UpwAYrYdLd5C9wAw39GVkYBU5zPjpMIQsuPFdxcJM0nzNTXtxigeFUrYyEgWG3weZlrwjNhC+EJ8t1zsiSUqJyqB0rHMHAqGFlX6bsANNBKRJBGhbSKSJAsCTmVeBWkMqZkGWp
+UoTKhLhorlcMKky8ZPIixCwx0W2y5yIkLiUh8pU6F0yx2zve08H1eOFWPd7tcrzQluMB53xRPR7Gc7sgz90uyJMq+FslefbukrwQ2po8iq3U5CVZItqU5YW2LI85y68szDNcOgl4HKfZSZbV2C1AuJxd//b6SISAPzESV+m76vYq9VIr85iFe3sr9vrB6ONX7Kk8YsXeiwZ80YAH1oCePjLzrgBUwDXBx3s14F3670X7fatKQWueQaWgYL5Xx9cf8c//AVt8DfXmFQEA
+"""
diff --git a/logo.svg b/logo.svg
deleted file mode 100644
index 643060d..0000000
--- a/logo.svg
+++ /dev/null
@@ -1,573 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="1052.3622"
-   height="744.09448"
-   id="svg2"
-   version="1.1"
-   inkscape:version="0.47 r22583"
-   sodipodi:docname="logo.svg">
-  <defs
-     id="defs4">
-    <linearGradient
-       id="linearGradient3660">
-      <stop
-         style="stop-color:#1e1e1e;stop-opacity:1;"
-         offset="0"
-         id="stop3662" />
-      <stop
-         style="stop-color:#3a1a21;stop-opacity:0.87551868;"
-         offset="1"
-         id="stop3664" />
-    </linearGradient>
-    <inkscape:perspective
-       sodipodi:type="inkscape:persp3d"
-       inkscape:vp_x="0 : 526.18109 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_z="744.09448 : 526.18109 : 1"
-       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
-       id="perspective10" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3660"
-       id="linearGradient3666"
-       x1="296.41022"
-       y1="254.74525"
-       x2="509.9274"
-       y2="254.74525"
-       gradientUnits="userSpaceOnUse" />
-    <inkscape:perspective
-       id="perspective3676"
-       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
-       inkscape:vp_z="1 : 0.5 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_x="0 : 0.5 : 1"
-       sodipodi:type="inkscape:persp3d" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3660-1"
-       id="linearGradient3666-5"
-       x1="296.41022"
-       y1="254.74525"
-       x2="509.9274"
-       y2="254.74525"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       id="linearGradient3660-1">
-      <stop
-         style="stop-color:#1e1e1e;stop-opacity:1;"
-         offset="0"
-         id="stop3662-3" />
-      <stop
-         style="stop-color:#3a1a21;stop-opacity:0.87551868;"
-         offset="1"
-         id="stop3664-7" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3660-1"
-       id="linearGradient3684"
-       x1="296.41022"
-       y1="254.74525"
-       x2="509.9274"
-       y2="254.74525"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       id="linearGradient3686">
-      <stop
-         style="stop-color:#1e1e1e;stop-opacity:1;"
-         offset="0"
-         id="stop3688" />
-      <stop
-         style="stop-color:#3a1a21;stop-opacity:0.87551868;"
-         offset="1"
-         id="stop3690" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3660-1"
-       id="linearGradient3692"
-       x1="296.41022"
-       y1="254.74525"
-       x2="509.9274"
-       y2="254.74525"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       id="linearGradient3694">
-      <stop
-         style="stop-color:#1e1e1e;stop-opacity:1;"
-         offset="0"
-         id="stop3696" />
-      <stop
-         style="stop-color:#3a1a21;stop-opacity:0.87551868;"
-         offset="1"
-         id="stop3698" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3660-1"
-       id="linearGradient3700"
-       x1="296.41022"
-       y1="254.74525"
-       x2="509.9274"
-       y2="254.74525"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       id="linearGradient3702">
-      <stop
-         style="stop-color:#1e1e1e;stop-opacity:1;"
-         offset="0"
-         id="stop3704" />
-      <stop
-         style="stop-color:#3a1a21;stop-opacity:0.87551868;"
-         offset="1"
-         id="stop3706" />
-    </linearGradient>
-    <linearGradient
-       y2="254.74525"
-       x2="509.9274"
-       y1="254.74525"
-       x1="296.41022"
-       gradientUnits="userSpaceOnUse"
-       id="linearGradient3714"
-       xlink:href="#linearGradient3660-1"
-       inkscape:collect="always" />
-    <inkscape:perspective
-       id="perspective3790"
-       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
-       inkscape:vp_z="1 : 0.5 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_x="0 : 0.5 : 1"
-       sodipodi:type="inkscape:persp3d" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="0.70710678"
-     inkscape:cx="496.57175"
-     inkscape:cy="414.1878"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     inkscape:window-width="1583"
-     inkscape:window-height="1083"
-     inkscape:window-x="0"
-     inkscape:window-y="24"
-     inkscape:window-maximized="0" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Ebene 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(0,-308.2677)">
-    <path
-       style="fill:#000000;fill-opacity:1;stroke:#000003;stroke-width:2.34887457;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       id="path3696"
-       d="m 125.15868,582.13248 c 0.095,-1.57969 0.064,-3.16279 0.0789,-4.74424 -0.02,-1.57485 0.008,-3.1516 -0.0577,-4.7254 -0.1325,-1.46588 -0.25025,-2.9302 -0.30481,-4.40095 -0.0308,-1.5011 -0.20612,-2.99514 -0.32647,-4.49118 -0.0772,-1.29857 -0.10481,-2.59985 -0.13216,-3.90025 -0.003,-1.07629 -0.0303,-2.15335 0.0325,-3.22829 0.22059,-1.32003 0.22807,-2.64066 0.16933,-3.97208 -0.10469,-1.18205 -0.15705,-2.354 -0.0381,-3.53524 0.12969,-1.09075 0.17774,-2.18612 0.31306,-3.2763 0.18012,-1.27504 0.23472,-2.56049 0.28726,-3.84488 0.0316,-1.31299 0.14676,-2.62921 0.32706,-3.93115 0.17887,-1.07196 0.30657,-2.14917 0.58791,-3.20185 0.26491,-0.82866 0.45273,-1.66991 0.84296,-2.45409 1.45534,-2.11318 4.36986,-4.54457 6.99537,-3.73802 0.38462,0.11814 0.56613,0.24436 0.91394,0.4387 0.88442,0.57946 1.25849,1.37377 1.24025,2.38188 -0.23368,0.94603 -0.71249,2.01014 -1.6194,2.5378 -2.00171,1.16462 -4.03792,2.27281 -6.05687,3.40922 -0.90656,0.25473 -1.85121,0.86977 -2.83129,0.81223 -0.20539,-0.012 -0.40292,-0.0811 -0.60438,-0.12161 -1.2554,-0.42415 -1.58445,-1.13414 -1.45837,-2.3601 0.11215,-0.92881 0.55769,-1.75491 0.99681,-2.5715 0.35348,-0.83399 0.80533,-1.60279 1.38394,-2.30829 2.12974,-1.99719 4.79739,-3.84893 7.77211,-4.24796 0.9752,-0.136 1.76403,0.35206 2.39635,1.01876 0.62647,0.74423 0.8824,1.64284 1.02178,2.57318 0.11174,0.83172 -0.0332,1.66599 -0.30672,2.45444 -0.43355,0.98183 -1.20599,1.75984 -1.97121,2.5084 -2.93498,2.58853 -5.28604,3.85735 -8.75648,4.06039 -1.6693,0.10807 -2.25888,0.0849 -3.43576,-1.15412 -0.8216,-0.97191 -1.08399,-2.02749 -0.86294,-3.24308 0.20139,-0.88129 0.7113,-1.64364 1.12405,-2.44058 0.3717,-0.82983 0.85749,-1.58682 1.45039,-2.28366 2.08936,-1.79371 4.61782,-4.02155 7.47525,-3.8092 0,0 -5.22064,3.71244 -5.22064,3.71244 l 0,0 c -0.25307,0.0522 -0.96697,0.34051 -0.74455,0.21255 8.9928,-5.17316 6.42667,-3.59484 4.45966,-2.52789 -0.6623,0.58925 -1.17612,1.31233 -1.51574,2.12051 -0.41879,0.75979 -0.87518,1.50958 -1.19583,2.31107 -0.3698,1.06585 -0.22677,1.81562 0.50821,2.71066 0.14163,0.13157 0.26579,0.28337 0.42487,0.39471 0.77689,0.54375 1.81507,0.32968 2.69947,0.29665 0.59846,-0.0687 1.18351,-0.13285 1.75001,-0.34693 0.15859,-0.0599 0.60679,-0.29802 0.46075,-0.21332 -5.9005,3.42217 -6.56954,3.87617 -4.5755,2.56456 0.77831,-0.65387 1.49101,-1.39844 2.04123,-2.24529 0.34194,-0.66436 0.50011,-1.4242 0.45275,-2.16588 -0.0852,-0.80044 -0.24202,-1.59124 -0.8021,-2.22072 -0.60025,-0.52985 -1.24842,-0.7078 -2.04771,-0.4949 -2.15016,0.58736 -4.59095,2.48701 4.46389,-2.67394 0.12232,-0.0697 -0.26131,0.10888 -0.38479,0.17666 -0.34554,0.18962 -0.41558,0.27672 -0.71355,0.53157 -0.65695,0.59675 -1.1458,1.33009 -1.45173,2.15221 -0.40127,0.77717 -0.92617,1.51898 -1.08609,2.38791 -0.19617,0.91459 -0.18162,1.30285 0.90069,1.50578 1.12505,-0.0297 2.18216,-0.49908 3.17577,-0.98153 -1.63811,0.92717 -3.27624,1.85432 -4.91434,2.78148 0.3342,-0.19263 0.73877,-0.39423 1.00973,-0.67567 0.36053,-0.37447 0.56814,-0.89396 0.79338,-1.34668 0.1328,-0.77724 -0.11433,-1.34539 -0.84917,-1.74303 -0.2902,-0.11636 -0.45648,-0.21709 -0.77606,-0.21908 -0.12018,-5.2e-4 -0.45812,0.11713 -0.35589,0.056 1.71055,-1.02273 3.48348,-1.94502 5.20278,-2.95392 0.11627,-0.0682 -0.27191,0.056 -0.3861,0.12743 -0.11483,0.0719 -0.18699,0.19314 -0.2805,0.28971 -0.47405,0.72801 -0.66085,1.52115 -0.91149,2.33927 -0.36396,1.01729 -0.46939,2.08067 -0.65826,3.13663 -0.22349,1.27601 -0.33514,2.57846 -0.3796,3.87061 -0.0177,1.29923 -0.0925,2.59913 -0.25039,3.88977 -0.12828,1.08438 -0.17847,2.16765 -0.27219,3.25477 -0.15814,1.16131 -0.20758,2.31101 -0.0832,3.48152 0.0749,1.34351 0.16772,2.68403 -0.078,4.01867 -0.12227,1.05392 -0.0263,2.11818 -0.0573,3.17723 -0.008,1.29592 -0.004,2.59226 0.0765,3.88641 0.0872,1.50639 0.27847,3.00518 0.32777,4.51261 0.0519,1.46648 0.15028,2.93057 0.29054,4.39173 0.1253,1.58972 0.0112,3.18406 0.0351,4.77715 0.0148,1.55549 -0.0174,3.11279 0.0789,4.66642 0,0 -5.80795,2.86311 -5.80795,2.86311 z"
-       inkscape:export-filename="/home/mario/projects/streamtuner2/streamtuner2.png"
-       inkscape:export-xdpi="34.827335"
-       inkscape:export-ydpi="34.827335" />
-    <g
-       id="g2901"
-       transform="matrix(0.54272883,0,0,0.52508714,28.045484,340.06499)"
-       inkscape:export-filename="/home/mario/projects/streamtuner2/streamtuner2.png"
-       inkscape:export-xdpi="34.827335"
-       inkscape:export-ydpi="34.827335">
-      <g
-         id="g2896">
-        <path
-           style="fill:#ff7f2a"
-           id="path2888"
-           d="m 202.33359,452.4659 c -0.3154,2.45371 -0.12233,4.93226 -0.11632,7.39711 -0.0271,2.04828 -0.40529,4.05265 -0.79928,6.05369 -0.26997,1.61535 -0.57978,3.24789 -0.99222,4.83316 -0.44573,1.2274 -0.70169,2.49273 -0.83391,3.78795 0.0713,1.50846 -0.22201,2.96068 -0.48814,4.43563 -0.0441,1.46935 -0.39746,2.87821 -0.69412,4.3114 -0.0922,1.68409 -0.45344,3.29481 -0.95658,4.90264 -0.38703,1.7044 -0.84389,3.42126 -1.5932,5.00586 -0.68182,1.60033 -1.46794,3.1698 -1.9689,4.84535 -0.58843,1.59171 -1.0312,3.21496 -1.68689,4.78254 -0.37953,1.91483 -0.94499,3.77055 -1.45315,5.64993 -0.49928,1.83321 -0.39969,3.74276 -0.81283,5.58624 -0.46241,1.44116 -0.86571,2.89127 -1.10117,4.38714 -0.16049,2.16297 -0.37774,4.32142 -0.56267,6.48291 -0.21896,1.89375 -0.19874,3.80017 -0.34332,5.69698 -0.25765,1.70068 -0.44448,3.40303 -0.52839,5.12169 -0.0234,1.65411 -0.11844,3.30627 -0.13803,4.9602 -0.12476,2.08915 -0.0324,4.18325 0.0218,6.2733 0.0351,1.59049 -0.0522,3.15103 0.18166,4.72688 0.36598,1.70325 0.46637,3.38459 0.26894,5.11066 -0.19835,1.35159 -0.29435,2.71303 -0.34721,4.07702 0.13142,1.50571 -0.29869,2.96975 -0.52132,4.44603 -0.19428,1.38761 -0.18799,2.79069 -0.25716,4.18715 -0.0545,1.89706 -0.0884,3.79397 -0.0632,5.69181 0.0338,1.63201 0.0633,3.26405 0.0785,4.89635 -0.0567,1.63462 -0.0256,3.27071 -0.0108,4.90582 0.0149,1.62122 -0.0808,3.20118 0.1174,4.81206 0.17166,1.89656 0.47363,3.78775 0.47648,5.69505 0.0834,1.87759 0.67641,3.67056 1.06778,5.49624 0.20531,1.59961 0.41207,3.12475 0.88661,4.66866 0.33659,1.89874 0.93925,3.71252 1.57264,5.52887 0.50494,1.72658 1.58496,3.13196 2.73714,4.47399 1.01221,1.37563 2.66855,1.63515 4.12457,2.34772 1.81817,0.71082 3.52954,1.59009 5.40412,2.17108 2.01505,0.90027 4.00045,1.86824 6.15801,2.37439 1.68451,0.27405 3.40558,0.17975 5.10477,0.12501 1.49035,-0.0581 2.98158,-0.0821 4.47291,-0.0937 1.59306,0.018 3.18605,0.0226 4.77938,0.0143 1.52065,-0.002 3.04149,-0.0321 4.56186,0.003 1.61736,0.0156 3.23483,-10e-4 4.85219,-0.01 1.08191,0.0978 2.21596,-0.12221 3.29218,0.0368 0.6931,0.10241 1.36247,0.32964 2.05043,0.46228 2.2419,0.054 4.26545,1.01832 6.42556,1.49643 2.08604,0.3078 4.20471,0.28077 6.30824,0.26987 2.06392,-0.19972 4.03663,0.41104 6.08417,0.5861 0.29183,0.0134 0.58741,-0.008 0.87549,0.0404 1.03121,0.27793 1.04912,0.31167 2.08814,0.48019 0.98196,0.15928 1.96543,0.20808 2.95736,0.25473 2.12109,0.0623 4.24359,0.0531 6.36507,0.0183 1.79954,-0.0512 3.59925,-0.0576 5.39917,-0.0306 2.05455,0.0243 4.10802,0.0336 6.16261,0.005 1.77684,-0.0338 3.5537,-0.0154 5.33079,-0.0295 1.52858,0.5622 3.12667,0.7202 4.74039,0.74718 1.38978,-0.005 2.77934,-0.0332 4.16905,-0.047 2.1336,0.64415 4.30267,1.16014 6.52362,1.41324 2.05586,0.14361 4.12009,0.11857 6.18012,0.14509 2.84164,0.0704 5.65013,0.5581 8.44628,1.03103 2.54878,0.35995 5.12919,0.39476 7.69886,0.4027 1.92842,-0.39285 3.48543,1.13158 5.34467,1.20615 0.16906,0.007 1.6178,-0.23334 1.80648,-0.26355 1.83113,-0.27577 3.68198,-0.29102 5.52862,-0.33494 1.01605,-0.66617 2.23907,-0.41943 3.3419,-0.68089 0.54608,-0.12947 1.0488,-0.40466 1.58935,-0.55551 2.03754,-0.91616 -0.59294,0.1953 1.78709,-0.55272 0.32012,-0.10062 0.60732,-0.2874 0.92141,-0.40552 0.95362,-0.35862 1.93293,-0.52986 2.93466,-0.68074 0.30805,-0.0267 0.62368,-0.007 0.92414,-0.08 1.17472,-0.28539 0.3062,-0.29463 1.33455,-0.81165 0.83376,-0.41918 1.9919,-0.3637 2.89423,-0.4555 2.01121,-0.077 4.02244,-0.1238 6.03512,-0.12412 0.68007,-0.47506 1.46284,-0.41466 2.2214,-0.57941 0.28113,-0.0611 0.53942,-0.20225 0.81651,-0.27957 0.65747,-0.18347 1.24451,-0.26114 1.91673,-0.37191 1.05304,0.0911 1.5942,-0.47411 2.40896,-0.95889 0.24225,-0.14414 0.52669,-0.20754 0.76948,-0.35078 0.50237,-0.29637 0.85729,-0.67957 1.27543,-1.07669 -14.02848,8.17065 -28.06558,16.3265 -42.08544,24.51195 -0.22348,0.13048 0.46305,-0.23126 0.6949,-0.34623 1.05397,-0.52265 1.41961,-0.82487 2.09756,-1.8091 0.5784,-1.37959 1.25841,-2.6969 1.62727,-4.15282 0.0864,-1.44231 0.55015,-2.81905 0.78385,-4.2398 0.17772,-1.4244 0.23083,-2.86376 0.26357,-4.29796 0.0113,-1.57504 -0.0142,-3.15005 -0.0271,-4.72501 -0.0112,-1.44448 -0.0134,-2.88901 -0.0148,-4.33353 -10e-4,-1.5404 0.001,-3.0808 -0.005,-4.6212 0.21841,-1.70057 0.33388,-3.41294 0.74163,-5.08065 0.41156,-1.13214 0.39237,-2.34202 0.68039,-3.50073 0.16832,-0.67715 0.41278,-1.33318 0.60438,-2.00412 0.50788,-2.08561 0.93318,-4.18731 1.47561,-6.26482 0.52637,-2.18758 1.33339,-4.27407 1.82632,-6.47188 0.51395,-1.81619 0.8367,-3.6558 1.05611,-5.52665 0.15399,-1.98963 0.16336,-3.98709 0.13898,-5.98142 0.10423,-1.80028 0.41193,-3.57335 0.5329,-5.37321 0.0136,-1.61943 0.0737,-3.19783 0.36644,-4.79258 0.23429,-1.22317 0.44252,-2.39126 0.28088,-3.62497 -0.21691,-1.70787 -0.37512,-3.42125 -0.47213,-5.1399 -0.0742,-1.49027 -0.0823,-2.98266 -0.0875,-4.47444 0.13645,-1.45116 -0.24479,-2.91445 -0.60283,-4.31131 -0.39918,-1.49152 -0.54941,-3.02331 -0.88482,-4.52692 -0.29671,-1.88619 -0.50091,-3.80298 -0.50997,-5.71429 -0.21196,-1.74899 -0.51287,-3.48366 -0.68924,-5.2374 0.004,-1.43118 -0.32008,-2.81984 -0.54581,-4.22712 -0.23051,-1.49511 -0.57464,-2.96713 -0.74095,-4.47713 -0.31546,-1.58872 -0.72563,-3.16303 -0.80206,-4.78634 -0.34808,-1.66295 -0.4948,-3.35881 -0.78625,-5.02805 -0.36706,-1.6895 -0.61507,-3.39753 -0.75783,-5.11956 -0.1814,-1.25892 0.30038,-2.02993 -0.50507,-3.0299 -0.38971,-0.20714 -0.67224,-0.57526 -1.05686,-0.78765 -0.45175,-0.24946 -0.99049,-0.22903 -1.46983,-0.36534 -1.57249,-0.44715 -3.11203,-1.00323 -4.67412,-1.48544 -8.04385,-2.26854 -16.41288,-3.29168 -24.74565,-3.70209 -4.37043,-0.14871 -8.74674,-0.10026 -13.11822,-0.012 -3.63184,0.0898 -7.26494,0.10169 -10.8973,0.0435 -2.72187,-0.15318 -5.45677,0.10312 -8.17693,0.0253 -0.0711,-0.002 -3.37079,-0.27812 -3.53745,-0.29202 -4.5802,-0.36253 -9.16847,-0.58984 -13.76082,-0.71525 -5.373,0.0639 -10.7417,-0.0586 -16.11034,-0.27718 -3.56602,-0.1696 -7.13541,-0.0942 -10.70356,-0.0808 -2.76886,0.13803 -5.56466,-0.14907 -8.31311,0.23286 -2.86042,0.21382 -5.71996,0.44913 -8.58461,0.60044 -0.38771,-0.0735 -0.79253,-0.0848 -1.16312,-0.2204 -1.90812,-0.69796 -4.20659,-2.48692 -5.79637,-3.7672 -1.96119,-1.50632 -3.44253,-3.47137 -4.77819,-5.52788 -1.14282,-1.86476 -1.59572,-4.01102 -1.86633,-6.15239 -0.1789,-1.63095 -0.12882,-3.273 -0.2015,-4.9092 0.0371,-1.73544 0.59954,-3.36529 1.04757,-5.02551 0.72866,-1.41904 1.3497,-2.87979 2.0482,-4.31737 0.51911,-1.53037 1.35024,-2.89549 1.61594,-4.50039 0.4189,-1.39445 0.82153,-2.76676 0.9765,-4.21745 0.31299,-1.52603 -0.2593,-3.05475 -0.93606,-4.40596 -0.9418,-1.67844 -2.30327,-2.96496 -3.90677,-3.99559 -2.21013,-1.4877 -4.42646,-3.05241 -7.05808,-3.64674 -1.26801,-0.019 -2.6653,-0.39672 -3.93189,-0.14207 -0.52132,0.10482 -0.98837,0.39484 -1.49438,0.55827 -0.2051,0.15392 -0.39411,0.33203 -0.61531,0.46177 -0.22392,0.13133 -0.48995,0.18132 -0.71158,0.31649 -0.65722,0.40081 -0.5843,0.56448 -1.16457,1.06649 -0.65556,0.56714 -0.78458,0.55379 -1.58387,0.91583 -1.07258,0.57351 -2.11902,1.34508 -3.29239,1.71143 -1.57224,0.49089 -0.22527,-0.13724 -1.59739,0.5805 -1.86344,0.56229 0.20909,-0.13863 -1.45724,0.65254 -0.24358,0.11565 -0.52246,0.14561 -0.76439,0.26467 -0.23202,0.11419 -0.40571,0.33409 -0.64608,0.42949 -0.27933,0.11086 -0.59394,0.0987 -0.8839,0.17771 -0.30553,0.0833 -0.59914,0.20532 -0.8987,0.30797 -1.11054,0.88135 -2.51304,0.92005 -3.79682,1.31008 -0.27672,0.0841 -0.52592,0.2408 -0.78888,0.3612 -0.27769,0.0806 -0.55539,0.16125 -0.83309,0.24188 -14.71677,7.24031 -36.70417,21.09743 40.47844,-23.17417 0.29637,-0.16999 -0.63344,0.25998 -0.93318,0.42396 -0.6748,0.36915 -1.08751,0.73335 -1.68933,1.20565 -1.48022,0.78051 -2.33192,2.02763 -2.89303,3.55242 -0.37948,1.66704 -0.37931,3.35214 -0.17722,5.03809 0.17686,1.7178 0.63586,3.38035 0.91534,5.0816 0.33351,1.4738 0.77939,2.93189 1.34228,4.33479 0.94437,1.58306 2.20873,2.97173 3.58659,4.18788 0.2668,0.22813 0.53359,0.45626 0.80038,0.6844 0,0 -42.34875,26.31367 -42.34875,26.31367 l 0,0 c -0.2974,-0.27014 -0.59479,-0.54028 -0.89219,-0.81042 -1.71308,-1.68544 -3.27907,-3.52449 -4.55894,-5.56476 -0.98137,-1.68993 -1.50618,-3.56749 -1.99373,-5.4545 -0.48802,-1.8098 -0.76394,-3.69998 -1.07649,-5.54251 -0.26864,-2.0729 -0.73678,-4.11122 -0.51493,-6.21886 0.0324,-2.33605 0.5019,-4.60343 1.63882,-6.66995 0.29519,-0.32214 2.00575,-2.36955 2.22665,-2.49828 33.9206,-19.76666 28.12627,-20.55493 45.64113,-25.60408 1.04113,-0.39123 0.4981,-0.22026 1.63201,-0.50364 1.20768,-0.43309 2.25237,-1.30254 3.53887,-1.54759 0.31232,-0.1361 0.62464,-0.27219 0.93696,-0.40828 0.23951,-0.15601 0.46126,-0.34344 0.71853,-0.46802 0.95323,-0.46157 2.02567,-0.67487 2.93754,-1.23281 1.62587,-0.62011 2.97119,-1.83847 4.58331,-2.51723 1.66551,-1.06168 3.35026,-1.44016 5.32,-1.27075 2.26992,0.14807 4.52385,0.82538 6.60853,1.71372 2.65296,1.42019 5.11575,3.17086 7.67553,4.7492 2.09502,1.67532 4.02331,3.44109 5.27368,5.86533 1.11573,2.11086 1.98694,4.33429 2.34544,6.70848 -0.039,1.71123 0.038,3.4514 -0.49135,5.10352 -0.6567,1.59729 -0.40902,3.52236 -1.47772,5.00001 -0.47762,1.6089 -1.1585,3.11872 -1.80973,4.65432 -0.31347,0.35875 -0.57876,0.59829 -0.7548,1.05506 -0.37509,0.97324 0.0247,0.53947 -0.43957,1.42459 -0.0864,0.16477 -0.2504,0.28214 -0.32949,0.45055 -0.0907,0.19312 -0.11448,0.41107 -0.17171,0.6166 -0.59383,1.20632 -0.0941,2.7731 -0.29512,4.08205 -0.006,1.3729 -0.0496,2.80144 0.57654,4.06194 0.94569,1.60539 2.16599,2.93091 3.71351,3.98537 1.73706,1.14937 2.96615,1.69879 5.05634,1.16663 2.7806,-0.0998 5.55596,-0.27118 8.32872,-0.50342 2.81742,0.0235 5.63302,-0.008 8.44964,0.0865 3.52151,0.0753 7.03687,0.28228 10.55451,0.4603 5.05737,0.33576 10.10583,0.83438 15.18498,0.6862 4.9913,-0.0282 9.99506,-0.21761 14.97515,0.21441 3.75545,0.22828 7.524,0.15972 11.28438,0.11972 3.64151,-0.0749 7.28442,-0.10981 10.92648,-0.0558 4.30826,0.0786 8.62746,0.13093 12.885,0.88628 8.18539,1.57072 16.31699,3.4741 24.62,4.36906 4.58024,0.68209 7.72198,0.71535 10.71725,4.4694 1.27744,1.7024 2.29759,3.4382 2.0797,5.63631 0.01,1.51985 0.0426,3.04584 0.33072,4.54363 0.13034,0.63344 0.32456,1.25344 0.43651,1.89039 0.18606,1.05856 0.10007,2.17543 0.44401,3.21315 0.39156,1.53852 0.29142,3.14823 0.73619,4.68664 0.38903,1.56214 0.40772,3.19921 0.9827,4.7251 0.12371,1.52922 0.54628,3.0033 0.65011,4.52106 0.0327,1.70241 0.13504,3.40443 0.45204,5.0811 0.32772,1.73324 0.154,3.49721 0.45027,5.24123 0.26957,1.48297 0.68198,2.91719 0.75997,4.43106 0.37022,1.77413 0.89645,3.5052 1.20667,5.29394 -0.006,1.45371 -0.0177,2.90738 -0.0241,4.36109 0.003,1.53252 0.003,3.07353 0.23869,4.59175 0.2763,1.6592 0.71037,3.26 0.38503,4.95566 -0.0872,0.73294 -0.16745,1.46954 -0.39494,2.17613 -0.0603,0.18728 -0.18494,0.35449 -0.21829,0.54838 -0.0959,0.55763 0.0645,1.13987 -0.0474,1.69679 -0.0844,1.85733 -0.13222,3.73178 -0.54614,5.5514 -0.44172,1.90582 -0.0355,3.92287 -0.19351,5.86555 -0.0249,2.14745 -0.17721,4.31202 -0.74515,6.39143 -0.59136,2.14701 -0.85383,4.38093 -1.74677,6.44017 -0.50198,2.0924 -1.24613,4.11005 -1.54017,6.25064 -0.0497,0.2468 -0.36986,1.87096 -0.45099,2.13622 -0.18375,0.60076 -0.43911,0.81096 -0.53521,1.43496 -0.0472,0.30675 -0.003,0.62131 -0.0282,0.93069 -0.0222,0.27629 -0.0753,0.54923 -0.11296,0.82385 -0.11976,0.59633 -0.17125,0.96669 -0.3736,1.53808 -0.0747,0.21094 -0.21296,0.39885 -0.26666,0.61609 -0.1947,0.78751 -0.1008,1.65164 -0.36206,2.43147 -0.41922,1.3074 -0.0586,2.75717 -0.17528,4.11311 -10e-4,1.4468 -0.003,2.8936 -0.0105,4.34038 -0.009,1.59115 -0.0271,3.18233 -0.0191,4.77352 0.0252,1.55776 0.0862,3.11542 0.0217,4.67367 -0.0615,1.50076 -0.11251,3.05274 -0.7127,4.4526 -0.11142,1.82643 -0.31617,3.67452 -1.16344,5.32802 -0.23167,0.96339 -0.44453,1.97688 -0.78298,2.9098 -5.91371,16.3009 -82.30471,1.68329 -44.30888,27.16355 -0.83223,0.24879 -1.72886,0.57419 -2.58248,0.72908 -0.92589,0.168 -1.90196,-0.005 -2.80052,0.34375 -1.80354,0.41343 -3.68753,0.83131 -5.53749,0.60741 -1.81094,0.0909 -3.64444,0.2223 -5.36853,0.82844 -0.84766,0.3038 -1.71022,0.86031 -2.58225,1.06491 -0.58936,0.13827 -1.21561,0.0379 -1.80939,0.15578 -0.25763,0.0511 -0.50012,0.16076 -0.75018,0.24115 -1.87239,0.65308 -3.76541,1.26776 -5.72183,1.58748 -2.331,0.39075 0.70676,-0.078 -1.84559,0.17348 -1.21312,0.11952 -2.38428,0.59203 -3.62289,0.28438 -1.90396,0.0678 -3.816,0.25354 -5.71566,0.0118 -1.1439,-0.24737 -2.22587,-0.72948 -3.36779,-0.95795 -1.03172,-0.20641 -1.16226,-0.0405 -2.21813,-0.0354 -0.43908,0.002 -0.87751,-0.0342 -1.31627,-0.0513 -2.69878,-0.1641 -5.39031,-0.40511 -8.05127,-0.90639 -2.67133,-0.3858 -5.37271,-0.52839 -8.07066,-0.43583 -2.26183,-0.0362 -4.53262,-0.1171 -6.74038,-0.66465 -2.04735,-0.44649 -4.17763,-0.99284 -6.27466,-0.61541 -1.47466,-0.0317 -2.95228,-0.085 -4.41228,-0.31186 -1.44538,-0.23357 -2.9389,-0.71433 -4.39919,-0.42256 -1.74963,-0.0143 -3.49904,0.005 -5.24841,-0.0291 -2.05911,-0.0293 -4.11705,-0.0163 -6.17609,0.0111 -1.79488,0.0299 -3.59004,0.0371 -5.38426,-0.0324 -2.19264,-0.0691 -4.39074,-0.11606 -6.56923,-0.39689 -2.04225,-0.27285 -4.05765,-0.69534 -6.11653,-0.79215 -1.89984,-0.28914 -3.76263,-0.28549 -5.67841,-0.34944 -2.3592,-0.16291 -4.72478,-0.3698 -6.98567,-1.11621 -0.56903,-0.16416 -1.47889,-0.44419 -2.06317,-0.54169 -1.34942,-0.22517 -2.74728,-0.10409 -4.09175,-0.39872 -1.68379,-0.0908 -3.38203,0.19712 -5.07574,0.0923 -1.60811,-0.009 -3.21631,-0.0258 -4.82442,-0.0102 -1.5211,0.0326 -3.04253,0.006 -4.56389,0.004 -1.60645,-0.006 -3.21241,0.003 -4.81844,0.0353 -1.51127,10e-4 -3.02517,0.003 -4.53181,-0.1322 -1.98132,-0.21111 -3.95303,-0.56247 -5.78754,-1.37619 -2.04746,-0.87162 -4.07832,-1.78663 -6.18045,-2.52004 -1.95796,-0.81013 -3.94163,-1.57314 -5.83131,-2.53151 -2.03726,-1.00455 -3.80997,-2.35361 -5.1815,-4.18591 -1.46076,-1.82625 -2.79001,-3.75712 -3.66417,-5.94188 -0.68709,-1.88909 -1.28883,-3.8358 -1.77834,-5.78175 -0.45455,-1.72196 -1.25656,-3.36217 -1.1739,-5.18079 -0.2001,-1.94482 -0.72799,-3.80714 -1.12086,-5.71542 -0.37358,-1.87282 -0.13667,-3.79033 -0.42884,-5.68233 -0.22679,-1.7772 -0.72486,-3.4932 -0.52949,-5.30155 0.0147,-1.63111 0.0464,-3.26327 -0.011,-4.89386 0.0149,-1.65699 0.0434,-3.31375 0.0743,-4.97051 0.0217,-1.88696 -0.0181,-3.77262 -0.0656,-5.65885 -0.0602,-1.5172 -0.0355,-3.03682 0.002,-4.55446 0.0633,-1.38116 0.0786,-2.8488 0.68289,-4.11805 0.005,-1.50375 0.007,-3.01045 0.14551,-4.50916 0.065,-0.55314 0.0893,-0.8693 0.2022,-1.41056 0.0755,-0.36183 0.29277,-0.69055 0.33161,-1.05813 0.0165,-0.15625 -0.12469,-1.39041 -0.1388,-1.52184 -0.25408,-1.79612 -0.68068,-3.55719 -0.46732,-5.38663 0.0507,-2.09737 0.1409,-4.19913 0.0134,-6.29525 -0.0197,-1.69822 -0.12925,-3.39522 -0.041,-5.09405 0.0603,-1.86046 0.11609,-3.73533 0.40619,-5.57506 0.11171,-0.56353 0.30612,-1.11302 0.36413,-1.68458 0.12837,-1.26478 -0.19001,-2.56633 0.0732,-3.82995 0.20404,-2.11065 0.64549,-4.21296 0.61961,-6.33117 -0.0465,-1.8244 -0.0137,-3.65165 0.57607,-5.40293 0.1,-0.26297 0.19991,-0.52593 0.29987,-0.7889 0.11845,-0.2151 0.2654,-0.41681 0.35537,-0.6453 0.46742,-1.18709 0.0792,-2.53495 0.40326,-3.76018 0.0507,-0.36328 0.23523,-1.74501 0.3186,-2.1006 0.28535,-1.21722 0.9331,-2.33068 1.02176,-3.60577 0.16715,-1.96991 0.94937,-3.54911 1.50951,-5.42075 0.40346,-0.92921 0.57409,-1.84641 0.85813,-2.81341 0.65683,-2.23615 -0.15176,0.55415 0.5999,-1.41254 0.10479,-0.27418 0.1523,-0.56694 0.22846,-0.85041 0.59152,-1.46502 1.46169,-2.79463 1.97198,-4.30003 0.12484,-0.59606 0.21932,-1.14136 0.41526,-1.71886 0.17237,-0.50804 0.56838,-1.30105 0.67221,-1.80795 0.0528,-0.25792 0.0234,-0.52603 0.0352,-0.78904 0.057,-0.77602 0.11072,-1.55292 0.27624,-2.31557 0.0873,-0.40205 0.32409,-0.76212 0.40779,-1.16492 0.0529,-0.25443 0.0231,-0.51922 0.0346,-0.77883 0.0544,-0.75694 0.10461,-1.51549 0.26025,-2.26037 0.0798,-0.38183 0.30974,-0.72362 0.3769,-1.10786 0.0434,-0.24841 6.7e-4,-0.50435 10e-4,-0.75653 0.0153,-1.59991 0.0286,-3.21514 0.38059,-4.78406 0.13021,-0.44321 0.36256,-0.85264 0.48618,-1.29773 0.28823,-1.03778 0.22654,-2.19165 0.81735,-3.14942 0.30098,-1.92241 0.88677,-3.76523 1.1582,-5.69121 0.41865,-2.26794 0.25956,-4.65245 0.0546,-6.93648 0,0 44.66718,-22.75907 44.66718,-22.75907 z" />
-        <path
-           style="fill:#ff7f2a"
-           id="path2892"
-           d="m 154.70293,475.03443 c 0.38598,-2.24141 0.52516,-4.51603 0.6436,-6.78444 0.0608,-1.90076 -0.31722,-3.74896 -0.75367,-5.58427 -0.37443,-1.49515 -0.519,-3.02798 -0.597,-4.56273 -0.17569,-1.67342 0.0545,-3.20129 0.76718,-4.71936 0.14862,-0.22337 0.27614,-0.46232 0.44585,-0.67012 0.15448,-0.18915 0.93446,-0.93342 1.15169,-1.05941 2.2325,-1.29486 11.67007,-7.83141 17.83779,-9.92575 2.05297,-0.39126 4.04541,-1.00904 6.09513,-1.4237 2.17396,-0.35258 4.37843,-0.43607 6.57688,-0.46472 1.78476,-0.0212 3.56967,-0.0216 5.35454,-0.0217 0.27026,0.0512 1.30076,0.3097 1.63567,0.15232 0.16746,-0.0787 0.4479,-0.57098 0.29122,-0.47256 -7.0753,4.44452 -10.27679,11.96117 -16.83644,9.72821 -2.41418,-0.65755 -4.95588,-0.70044 -7.44388,-0.77114 -1.62966,0.0406 -3.2768,-0.13832 -4.9053,-0.0337 -0.74461,0.0478 -1.47952,0.19483 -2.21989,0.28741 -1.99323,0.48833 -4.05686,0.64183 -6.05204,1.14493 -0.32232,0.0722 -0.64987,0.1242 -0.96697,0.21669 -0.62559,0.18247 -1.16275,0.42699 -1.72474,0.75398 -0.27025,0.15724 -1.0571,0.66756 -0.78545,0.51275 14.2836,-8.14026 19.70477,-11.67098 14.06141,-8.01659 -1.41949,0.89625 -2.15961,2.10686 -2.51368,3.70928 -0.23742,1.71862 -0.20591,3.45893 -0.19268,5.18952 -0.0555,1.59217 0.0312,3.14803 0.57889,4.65213 0.66507,2.074 1.6598,4.00923 2.52678,5.99954 0.80895,1.6798 0.91767,3.43369 0.80114,5.25598 -0.26515,1.71445 -0.54467,3.44333 -1.01544,5.11525 -0.57179,1.36313 -1.01998,2.75037 -1.25118,4.21043 -0.13885,1.57597 -0.46318,3.12502 -0.71869,4.68481 -0.35674,1.49684 -0.62889,3.00535 -0.77253,4.53716 -0.18537,1.49628 -0.43707,2.9973 -0.80252,4.46144 -0.35183,1.54308 -0.77529,3.06828 -1.0851,4.62057 -0.26197,1.96556 -0.64827,3.91051 -0.87111,5.88125 -0.2998,2.05208 -0.50111,4.12161 -1.16624,6.09262 -0.85198,1.6705 -1.34188,3.45572 -1.84557,5.24941 -0.47414,1.7044 -0.86424,3.43188 -1.35777,5.13057 -0.51391,1.52886 -0.69503,3.11923 -0.79112,4.71969 -0.0296,1.62518 -0.55884,3.15668 -0.97824,4.70646 -0.42038,1.62313 -0.46974,3.30486 -0.50762,4.97156 -0.0209,1.60532 -0.006,3.21081 0.002,4.81617 0.007,1.43903 0.009,2.87807 0.0101,4.31711 -0.006,1.42207 -0.0416,2.83825 0.1305,4.25155 0.25721,1.62862 0.4199,3.26784 0.51323,4.9133 0.0699,1.4669 0.0727,2.9358 0.0757,4.404 0.009,1.49812 -0.01,2.99606 -0.0179,4.49408 0.004,1.72173 -1.7e-4,3.44337 -0.0164,5.16503 0.13168,1.95578 -0.31061,3.83317 -0.76416,5.71427 -0.42111,1.86964 -0.552,3.78083 -0.61947,5.69037 0.0674,1.70454 -0.16793,3.37261 -0.46749,5.0437 -0.42012,1.74735 -0.74277,3.51364 -1.14023,5.26616 -0.24783,1.50696 -0.587,2.99331 -0.89493,4.48836 -0.31432,1.58948 -0.33066,3.21576 -0.37946,4.82938 -0.0765,1.63324 -0.0312,3.2411 0.29264,4.84399 0.45729,1.72811 1.4071,3.23918 2.22207,4.80896 0.83508,1.64301 1.93021,3.08599 3.40716,4.19129 1.07673,1.00577 2.40389,1.48731 3.71765,2.07845 0,0 -15.26301,10.12657 -15.26301,10.12657 l 0,0 c -1.4393,-0.65624 -2.79906,-1.42531 -3.99023,-2.48114 -1.53818,-1.37675 -2.79919,-2.98199 -3.75562,-4.81898 -0.9184,-1.68891 -1.88519,-3.3532 -2.46565,-5.19853 -0.47852,-1.72754 -0.61245,-3.46203 -0.51033,-5.25259 -9.2e-4,-1.69607 0.054,-3.3929 0.2129,-5.08221 0.24153,-1.53879 0.71852,-3.01525 0.89499,-4.56427 0.37359,-1.76356 0.80987,-3.50606 1.13931,-5.27768 0.4293,-1.5375 0.64187,-3.14417 0.62886,-4.73996 0.0656,-2.00217 0.14441,-4.01152 0.5057,-5.98658 0.3221,-1.79217 1.02501,-3.51923 0.91804,-5.36864 -0.0162,-1.71683 -0.0198,-3.43364 -0.0143,-5.15055 -0.006,-1.4926 -0.0209,-2.98511 -0.01,-4.47778 0.002,-1.44592 0.007,-2.89209 -0.0268,-4.33773 -0.0514,-1.59075 -0.14637,-3.18216 -0.41606,-4.75324 -0.25702,-1.49112 -0.35338,-2.96083 -0.27732,-4.47735 -3.4e-4,-1.4395 -0.001,-2.87901 -9.1e-4,-4.31851 9.1e-4,-1.62441 0.002,-3.24888 0.0242,-4.87317 0.0278,-1.76847 0.007,-3.55208 0.29058,-5.30235 0.31145,-1.49944 0.91018,-2.89939 1.14752,-4.41348 0.0674,-1.71632 0.12483,-3.45364 0.6045,-5.11473 0.50879,-1.69035 0.98353,-3.3863 1.38101,-5.10818 0.50947,-1.85168 0.87265,-3.76371 1.78115,-5.47358 0.27756,-0.53317 0.60771,-1.08743 0.75634,-1.67925 0.32028,-1.27527 0.28591,-2.64894 0.63658,-3.92283 0.18267,-2.00387 0.55147,-3.97063 0.8108,-5.96222 0.19137,-1.62286 0.62038,-3.16865 0.95768,-4.76082 0.3752,-1.38046 0.6376,-2.76732 0.94724,-4.1662 0.0954,-1.60584 0.27068,-3.20772 0.69547,-4.76466 0.38381,-1.47464 0.51044,-3.03334 0.75453,-4.5305 0.14244,-1.58481 0.40199,-3.15778 1.09305,-4.60874 0.70977,-1.47126 0.78646,-3.08834 1.21084,-4.65381 0.15714,-1.55968 0.38546,-3.04138 -0.31173,-4.52341 -0.81408,-2.02781 -1.86484,-3.95172 -2.59925,-6.01367 -0.68237,-1.67318 -0.99795,-3.42334 -0.90997,-5.23574 -0.004,-1.81454 -0.009,-3.63076 0.1051,-5.44261 0.1399,-1.90148 0.49575,-3.66071 1.93661,-5.03769 6.05263,-5.12553 13.18548,-9.64834 20.99803,-11.27981 2.04061,-0.34894 4.08178,-0.70271 6.13426,-0.97149 2.41276,-0.20492 4.83503,-0.1016 7.25193,-0.008 2.63624,0.16519 5.3374,0.27606 7.84689,1.1731 7.78721,3.04964 -3.5721,5.35835 -12.88305,11.84116 -0.18313,0.1275 -0.43448,-0.10419 -0.65504,-0.13804 -0.26323,-0.0404 -0.5286,-0.0691 -0.79447,-0.0844 -0.26439,-0.0152 -0.52963,-0.005 -0.79444,-0.007 -1.75479,-0.009 -3.51009,-0.0249 -5.26445,0.0248 -2.1303,0.091 -4.26827,0.21991 -6.34736,0.7311 -2.01436,0.49375 -4.05893,0.96494 -5.99007,1.72443 -8.8158,4.19488 21.44354,-12.46037 11.82335,-7.03497 -1.07491,1.03485 -1.41768,2.16842 -1.25995,3.65017 0.0368,1.43336 0.10378,2.87118 0.40867,4.27736 0.43605,2.00356 0.8832,3.99279 0.89272,6.05931 -0.0714,2.29235 -0.26939,4.57346 -0.45336,6.85895 0,0 -16.47931,8.14012 -16.47931,8.14012 z" />
-        <path
-           style="fill:#ff7f2a"
-           id="path2894"
-           d="m 326.69047,639.81711 c 2.32814,-0.016 4.63035,0.0595 6.90575,0.5819 1.6935,0.45812 3.42068,0.71621 5.16894,0.81939 1.72918,0.14414 3.41793,0.0278 5.06856,-0.51541 1.66179,-0.37586 3.20514,-1.01576 4.71064,-1.79872 1.853,-0.95535 3.13074,-0.91521 5.12372,-0.75269 1.57697,0.16194 2.9187,0.33563 4.42589,-0.2349 0.26916,-0.085 0.53627,-0.17677 0.80748,-0.25499 0.84827,-0.24467 0.79794,-0.14379 1.58504,-0.53963 0.24977,-0.12561 0.96712,-0.56148 0.72425,-0.423 -14.79417,8.43514 -20.0394,11.54687 -14.45213,8.23686 1.22213,-1.02646 2.02347,-2.42045 2.91095,-3.72235 0.20086,0.0454 1.62081,-3.12823 0.63912,-2.29149 -0.24622,0.10828 -0.95917,0.41374 -1.1432,0.53502 -0.29082,0.19165 -1.1229,0.81883 -0.81863,0.64933 25.33261,-14.11228 17.78576,-10.47426 12.46523,-6.94884 -6.09321,4.18811 -2.10169,1.47971 -17.44813,10.22637 -1.07043,0.61009 -2.41548,0.66632 -3.60662,0.76611 -1.76406,-0.007 -3.48216,0.38351 -5.23052,0.57569 -1.57852,0.15403 -3.16559,0.18231 -4.75044,0.17613 -1.81123,-0.0182 -3.62262,-0.008 -5.4339,-0.004 -1.50357,0.004 -3.00714,0.005 -4.51071,0.006 -1.61378,-0.0318 -3.21337,0.48175 -4.65495,1.18012 -1.79757,0.63177 -3.09991,0.76247 -4.78123,1.78471 4.96505,-2.8425 9.92602,-5.69217 14.89517,-8.52751 0.27357,-0.1561 -0.5361,0.33093 -0.80817,0.48964 -5.46548,3.18814 -10.93624,6.36721 -16.40436,9.55082 0,0 14.25233,-11.5231 14.25233,-11.5231 l 0,0 c -4.95951,2.89517 -9.89313,5.83517 -14.87854,8.68552 -0.28109,0.16072 0.50357,-0.40717 0.75535,-0.61076 5.5006,-3.16436 11.00121,-6.32873 16.50182,-9.49309 1.61533,-0.62106 3.32007,-0.95824 4.90834,-1.6621 1.66399,-0.46458 3.33794,-0.77719 5.07744,-0.67224 1.49565,0.002 2.9913,0.005 4.48693,0.0128 1.80679,0.008 3.61416,0.0264 5.42054,-0.0222 1.54479,-0.051 3.09119,-0.11185 4.62389,-0.32651 1.72973,-0.23306 3.46026,-0.41839 5.19288,-0.61674 0.83881,-0.19244 1.60114,-0.42641 2.36964,-0.82355 0.26855,-0.13878 1.05121,-0.59747 0.79001,-0.44531 -15.42361,8.98506 -19.49858,11.5355 -13.72918,7.94386 5.89962,-4.26081 12.44237,-7.56831 18.78935,-11.09077 0.54505,-0.30249 1.54351,-0.37131 2.16088,-0.22489 0.32823,0.0778 0.62444,0.25542 0.93666,0.38313 0.28324,0.26939 0.61348,0.49676 0.84973,0.80818 0.92673,1.22159 0.45044,2.8773 -0.13826,4.10319 -0.81335,1.43551 -1.76772,2.79403 -2.70229,4.15215 -4.55051,6.22265 -12.82779,9.29777 -20.25088,11.04845 -1.57476,0.1349 -3.13425,-0.0587 -4.71029,-0.10656 -1.65248,0.0508 -3.11477,0.65452 -4.57747,1.40693 -1.59507,0.66528 -3.25495,1.13387 -4.94703,1.48513 -1.81082,0.24243 -3.63241,0.30151 -5.45098,0.0758 -1.74988,-0.22707 -3.46126,-0.63143 -5.18272,-1.01202 -2.25835,-0.3178 -4.52985,-0.33006 -6.80693,-0.23591 0,0 14.87103,-10.80443 14.87103,-10.80443 z" />
-      </g>
-      <path
-         d="m 237.20791,448.69337 c 2.162,1.61333 4.29413,3.29899 6.22538,5.187 1.58465,1.78851 2.7173,3.8942 3.62341,6.08982 0.64509,1.63372 0.87631,3.36657 0.98592,5.10634 -0.0137,1.57016 0.23197,3.17585 0.52162,4.72222 0.44669,1.85304 0.63792,3.74968 0.78831,5.64565 0.0703,1.86227 0.30657,3.72647 0.0745,5.58089 -0.10418,0.30556 -0.20837,0.61112 -0.31256,0.91668 0,0 -46.01617,19.94607 -46.01617,19.94607 l 0,0 c 0.18337,-0.0953 0.36674,-0.19062 0.55011,-0.28593 0.16475,-0.0579 0.81419,-0.25793 0.95553,-0.4124 0.62042,-0.67796 0.0607,-2.01674 0.24367,-2.82129 -0.01,-1.66549 -0.0591,-3.33654 -0.38807,-4.9753 -0.14054,-0.64733 -0.34202,-1.281 -0.46818,-1.93129 -0.2234,-1.15159 -0.19357,-2.36234 -0.58745,-3.48598 0.017,-1.25554 0.0785,-2.5266 -0.16134,-3.76626 -0.42007,-1.5556 -1.10725,-3.08248 -2.25322,-4.23679 -1.59313,-1.53646 -3.36089,-2.95184 -5.57252,-3.42916 0,0 41.79108,-27.85027 41.79108,-27.85027 z"
-         id="path2890"
-         style="fill:#ff7f2a" />
-    </g>
-    <path
-       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-       d="m 113.36911,584.05937 c -2.96935,24.50399 -7.13642,48.91325 -8.97317,73.52087 -0.25822,9.42598 7.14315,16.94096 15.9841,19.77142 17.05919,6.12037 35.63857,3.72044 53.45029,4.46769 13.85363,-0.284 27.94961,1.38381 41.62623,-1.19136 11.05987,-4.79593 9.32523,-19.78921 13.58334,-29.22259 4.13854,-15.74444 8.34236,-32.81878 3.38685,-48.80822 -4.76116,-9.56732 -16.62521,-10.00776 -26.04324,-8.7677 -13.61064,0.25348 -27.22175,-0.13447 -40.83286,-0.10901 -10.66977,-3.97964 0.69355,-20.03126 -11.23891,-23.07715 -9.75399,-2.36757 -20.0152,-0.31507 -29.9206,0.20696 -7.59346,-0.0459 -13.76697,3.42084 -11.60162,11.65799 -6.22429,9.2203 -7.97217,-7.53158 -1.13396,-9.87566 10.06256,-6.75105 23.06299,-5.11969 34.66617,-6.1572 8.85469,-1.47258 20.92698,1.24579 19.14527,12.40105 -2.23695,11.76881 10.9075,13.88878 19.82753,11.61825 14.07987,0.61395 28.31397,-0.95355 42.31683,1.06484 11.0745,3.251 12.8551,16.41621 12.05173,26.02449 -1.80401,19.03928 -6.60109,37.85544 -13.39929,55.78431 -6.17944,11.86373 -22.07251,12.22121 -34.06661,11.64325 -23.69152,-0.55814 -47.69418,1.42605 -71.09981,-2.98837 -10.56237,-2.63836 -22.845987,-10.62715 -21.371419,-22.57058 0.571849,-18.44485 5.138719,-36.51326 6.314039,-54.92738 2.05441,-6.17915 -0.82506,-18.31636 7.32911,-20.4659 z"
-       id="path2822"
-       inkscape:export-filename="/home/mario/projects/streamtuner2/streamtuner2.png"
-       inkscape:export-xdpi="34.827335"
-       inkscape:export-ydpi="34.827335" />
-    <path
-       style="fill:#ffcc00"
-       id="path2908"
-       d="m 137.48318,617.1465 c -1.35628,0.0696 -2.71408,0.0569 -4.01555,0.46086 -5.79415,3.20268 -12.82844,7.11591 14.87255,-8.2064 0.24214,-0.13393 -0.48671,0.26381 -0.7266,0.40148 -0.68613,0.39377 -0.65943,0.39252 -1.30846,0.82941 -6.95318,0.0797 -11.92073,8.75932 -19.04947,10.22067 -0.21973,0.0451 -1.16285,0.21929 -1.40948,0.22462 -0.23686,0.006 -0.47194,-0.0409 -0.70792,-0.0613 -1.36024,-0.32242 -2.369,-1.42198 -3.70272,-1.79617 -0.18798,-0.0527 -0.38691,-0.0574 -0.58037,-0.0861 -1.25398,-0.17898 -2.0044,-0.92575 -2.52695,-1.98879 -0.32037,-0.78797 -0.3345,-1.63327 -0.3404,-2.46724 -0.0781,-0.86252 0.16699,-1.69489 0.22141,-2.54809 0.76953,-6.96001 -0.0169,-1.19415 17.56534,-10.13644 0.002,-9.4e-4 1.80117,1.28296 2.00962,1.41659 1.01529,0.64896 2.12908,0.96908 3.32034,1.13354 1.1296,0.0514 2.19091,0.45713 3.29314,0.66421 0.94025,0.12983 1.89127,0.13001 2.83877,0.12291 0.83914,0.0198 1.65564,-0.12618 2.46453,0.11511 0.28373,0.10775 0.59436,0.0821 0.88489,0.15301 0.17033,0.0416 0.32852,0.12194 0.49775,0.16757 0.55336,0.14923 1.13838,0.18688 1.70694,0.24055 1.61877,0.12541 3.2435,0.13132 4.8662,0.11188 1.45566,-0.0235 2.91079,-0.009 4.36631,0.0125 1.5013,0.0105 3.00247,-0.0232 4.50359,-0.0416 1.06969,0.006 2.13916,-0.0253 3.2088,-0.0181 1.34397,0.10883 2.66534,-0.0688 3.99919,-0.19956 0.95477,-0.0457 1.91888,-0.17216 2.87684,-0.12234 0.55749,0.029 1.11002,0.11736 1.66586,0.1678 1.34401,0.11843 2.69315,0.14328 4.04138,0.17333 1.68721,0.28832 3.40303,0.34355 5.11216,0.37393 0.77897,0.0576 1.57655,-0.0428 2.35364,0.0423 0.83744,0.0917 1.65444,0.31349 2.4862,0.44497 0.49714,0.0786 0.99762,0.13587 1.49644,0.2038 1.30369,0.20048 2.62547,0.23638 3.93638,0.3636 1.07386,0.10422 2.09329,0.25378 3.17494,0.25338 1.02413,0.0223 2.05329,-0.15229 3.07703,-0.11404 0.51534,0.0193 1.02594,0.10314 1.53922,0.1516 1.55042,0.31864 3.12948,0.44386 4.70921,0.51882 1.32227,0.0544 2.64595,0.0273 3.96857,0.004 0.15886,-0.003 0.3188,-0.0263 0.47657,-0.008 0.32418,0.0372 0.63322,0.15549 0.95378,0.21534 0.42984,0.0802 0.85745,0.10574 1.2936,0.13017 1.33398,0.11413 2.67161,0.38704 3.96673,0.72641 1.27436,0.29193 2.52229,0.67698 3.79589,0.97087 1.25761,0.13954 2.23496,0.74884 2.99674,1.69861 0.60368,0.95852 0.87101,2.06753 1.10061,3.15596 0.13309,1.07293 0.11459,2.15571 0.10014,3.23409 0.0205,0.90363 -0.19272,1.78554 -0.41754,2.65546 -0.36933,0.9439 -0.8349,1.8645 -1.40342,2.71187 -0.46427,0.7948 -0.94771,1.58603 -1.38069,2.39967 -0.45291,0.75356 -0.87267,1.53926 -1.15872,2.36742 -0.38446,0.82916 -0.70063,1.68159 -1.04526,2.52631 -0.2761,0.7984 -0.50808,1.61432 -0.66915,2.44231 -0.0843,0.7817 -0.3179,1.53595 -0.43838,2.3126 -0.14121,0.89261 -0.25497,1.79708 -0.44896,2.68078 -0.23404,0.87939 -0.4308,1.7702 -0.69419,2.64154 -0.25688,0.69337 -0.39837,1.41068 -0.47086,2.14148 -0.0552,0.73189 -0.0518,1.46634 -0.0522,2.19971 0.061,0.85775 -0.0551,1.68296 -0.33152,2.49606 -0.24945,0.7845 -0.40372,1.59279 -0.60126,2.39199 -0.27555,0.93957 -1.01019,1.45268 -1.76072,2.02891 -0.75169,0.51449 -1.37262,1.16354 -1.99544,1.81388 -0.49887,0.66612 -0.81577,1.42864 -1.2147,2.14887 -0.24907,0.42076 -0.45315,0.85017 -0.4978,1.33799 -0.0139,0.15169 0.0158,0.30762 -0.0171,0.45653 -0.0338,0.15297 -0.12001,0.2905 -0.18003,0.43575 -0.12338,0.12195 -0.24676,0.2439 -0.37013,0.36586 -0.13833,0.0384 -0.30598,0.0243 -0.41497,0.11528 -0.0631,0.0526 -0.45477,0.70679 -0.41021,0.86126 0.0154,0.0533 0.0719,0.0861 0.1078,0.12906 0.4736,0.35246 1.13031,1.30368 1.68376,1.46397 0.20776,0.0601 0.2734,-0.2405 0.31161,-0.32846 -5.71176,3.1549 -11.42352,6.30979 -17.13528,9.46469 0.0665,0.0784 0.15641,0.14277 0.19941,0.23527 0.0127,0.0274 -0.0609,0.042 -0.0567,0.0718 0.024,0.16829 0.0788,0.33183 0.13707,0.4921 0.0637,0.17551 0.0629,0.60808 0.2279,0.51266 5.69077,-3.29005 11.18131,-6.89396 16.77195,-10.34094 0.29048,1.03167 1.02349,1.88061 1.67447,2.72 0.33141,0.33206 0.47765,0.77944 0.74854,1.14838 0.0577,0.0786 0.13249,0.14946 0.21954,0.19643 0.0329,0.0178 0.14356,-0.0371 0.11158,-0.0178 -17.23969,10.41468 -13.30336,15.63732 -17.41906,9.8536 -0.48274,-0.7216 -0.52267,-1.56571 -0.66688,-2.38498 -2.21568,-6.5291 -0.35455,-0.61066 17.80445,-9.06868 0.0605,-0.0282 0.36504,1.08757 0.37983,1.18513 0.0328,0.21665 0.0375,0.43643 0.0563,0.65464 -20.21732,12.09216 -10.86173,10.48819 -21.44532,9.65151 -1.26941,-0.14753 -2.55599,-0.0511 -3.82724,-0.13518 -0.10693,-0.008 -1.26626,-0.16305 -1.42473,-0.18415 -0.89828,-0.13721 -1.80592,-0.16587 -2.71335,-0.16651 -1.00817,-0.2217 -1.91252,-0.70704 -2.91529,-0.94128 -1.41519,-0.14348 -2.82364,-0.33831 -4.24125,-0.47003 -0.2399,-0.0167 -0.47963,-0.036 -0.71972,-0.0502 -0.664,-0.0392 -0.76455,-0.003 -1.42048,-0.15063 -0.60631,-0.13686 -1.19846,-0.34314 -1.80556,-0.48388 -1.06045,-0.1952 -2.15055,-0.17474 -3.22619,-0.19114 -0.82297,-0.18857 -1.70757,-0.10574 -2.5051,-0.40155 -0.45817,-0.16993 -0.62245,-0.3139 -1.0191,-0.58014 -0.72942,-0.62761 -1.61139,-0.79217 -2.55132,-0.86953 -0.91742,-0.0251 -1.66992,-0.56126 -2.57998,-0.67816 -0.62635,0.20977 -1.30644,0.11512 -1.946,0.22706 -0.33651,0.0589 -0.66623,0.21804 -0.97555,0.34751 -0.64043,0.29451 -1.38497,0.25458 -2.00991,0.57774 -1.28215,0.663 0.51947,-0.1494 -0.80795,0.43018 -0.27164,0.15022 -0.59128,0.12082 -0.8785,0.20993 -0.13008,0.0404 -0.23994,0.13013 -0.37008,0.17029 -0.44566,0.13754 -0.96359,0.1572 -1.42565,0.2044 -1.39537,0.0335 -2.79147,-0.0179 -4.18674,-0.0414 -1.65827,0.10371 -3.2766,-0.0734 -4.84161,-0.6126 -1.02151,-0.52614 -2.10688,-0.91655 -3.12714,-1.44258 -0.87685,-0.40591 -1.81174,-0.65191 -2.71858,-0.97655 -0.99206,-0.47664 -2.00908,-0.88706 -3.0684,-1.20268 -0.82097,-0.41036 -1.70224,-0.56338 -2.61436,-0.59558 -0.63179,0.0941 -1.11037,-0.12267 -1.68067,-0.33871 -0.32619,-0.12357 -0.66215,-0.22172 -0.98997,-0.34117 -0.96273,-0.48074 -1.99853,-0.73031 -3.07193,-0.81112 -0.83489,0.0437 -1.60722,-0.24902 -2.43358,-0.32989 -0.8241,-0.0786 -1.61101,-0.38996 -2.3986,-0.63088 -0.89219,-0.14601 -1.62586,-0.66263 -2.41557,-1.04714 -0.96237,-0.53639 -1.84215,-1.1856 -2.68852,-1.87785 -0.85997,-0.7438 -1.71678,-1.4972 -2.4799,-2.33524 -0.66673,-0.79123 -1.12889,-1.68144 -1.42256,-2.65668 -0.17111,-0.76324 -0.46819,-1.48991 -0.68813,-2.23958 -0.22188,-0.79559 -0.28328,-1.61778 -0.31751,-2.43741 -0.0937,-0.80582 0.0781,-1.5876 0.21199,-2.37697 0.0761,-0.73751 0.26953,-1.46347 0.45186,-2.18311 -0.0581,-0.86554 -0.0266,-1.72793 0.0229,-2.59334 0.0314,-0.87606 0.2614,-1.72891 0.38378,-2.5972 0.0265,-0.91067 0.18928,-1.80501 0.32168,-2.70454 0.10206,-0.76852 0.13977,-1.54409 0.1601,-2.31817 -0.0199,-0.91669 0.2023,-1.81251 0.29325,-2.72111 0.0691,-0.79806 0.0784,-1.59924 0.0841,-2.39958 0.0269,-0.79773 0.006,-1.58202 -0.0883,-2.37389 -0.18639,-1.1733 -0.23278,-2.35252 -0.12814,-3.534 0.21229,-1.16111 0.40411,-2.32446 0.5224,-3.4982 0.18306,-0.65889 0.18957,-1.3594 0.39231,-2.01328 0.0524,-0.16901 0.40548,-1.00228 0.46811,-1.15208 3.00553,-6.59735 12.25095,-14.69579 19.33978,-11.32942 1.10662,0.66553 2.13553,1.447 3.18008,2.19973 0.54246,0.35986 1.0265,0.82287 1.58736,1.15717 0.54489,0.32476 1.17145,0.56581 1.73341,0.8673 1.09292,0.45483 2.22151,0.78173 3.40425,0.90656 0.21738,0.0465 0.43478,0.0931 0.65218,0.13964 0.24228,0.0344 0.48767,0.0524 0.72685,0.10325 0.32226,0.0685 0.63272,0.18299 0.95439,0.25404 1.50973,0.33345 3.05479,0.55433 4.57224,0.85482 3.98457,0.67315 8.00394,1.13391 12.02753,1.52403 3.56768,0.33848 7.15257,0.40407 10.73433,0.44887 3.48874,0.0187 6.97553,-0.11384 10.46383,-0.14712 3.08569,0.0434 6.17017,0.0701 9.25562,0.004 1.36248,0.0146 2.73374,-0.14525 4.0964,-0.0796 0.66022,0.0318 1.31611,0.12175 1.97479,0.17568 1.99223,0.15061 3.98001,0.35514 5.95207,0.66739 1.3983,0.26419 2.5611,0.99717 3.64324,1.85448 0.90503,0.99285 1.57399,2.16835 2.16063,3.35832 0.44241,0.91964 0.64574,1.90645 0.74436,2.90895 0.0437,0.93468 0.0163,1.86994 0.017,2.80503 -0.0151,1.01833 -0.0147,2.03681 -0.0256,3.05522 0.006,1.0832 -0.0148,2.16532 0.002,3.2486 0.0177,0.99455 0.0359,1.98611 -0.09,2.97447 -0.11939,0.85299 -0.20701,1.70633 -0.36595,2.55353 -0.17049,0.97018 -0.27437,1.94489 -0.51766,2.90211 -0.44079,0.90752 -0.79459,1.86196 -1.27915,2.74909 -0.18883,0.51416 -0.58113,0.93166 -0.79224,1.43435 -0.10409,0.24784 -0.17722,0.50704 -0.2782,0.75608 -0.27689,1.03282 -0.8731,1.93762 -1.46231,2.82648 -0.72396,0.84212 -1.54936,1.58904 -2.3016,2.40857 -4.23543,5.35973 -15.13959,8.91156 -18.20729,10.60005 -0.16502,0.0908 -0.3691,0.089 -0.54743,0.15201 -0.65141,0.28506 -0.32026,0.1593 -0.99317,0.37798 -0.78177,0.0568 -1.14558,0.42947 -1.72773,0.83566 -0.31296,0.21836 -0.46958,0.24911 -0.82481,0.37762 -0.16851,-0.0101 -0.33698,-0.0397 -0.50553,-0.0302 -0.27034,0.0152 -0.53164,0.10489 -0.80117,0.13028 -0.44203,0.0416 -0.88498,0.0226 -1.32838,0.0245 -1.14245,0.0793 -2.23097,-0.27488 -3.32792,-0.52486 -0.97417,-0.22226 -1.89794,-0.54336 -2.90578,-0.60605 -1.36181,-0.34617 -2.7317,-0.66448 -4.09433,-1.01211 -1.54228,-0.45004 -3.02755,-1.03032 -4.46444,-1.7312 -1.05066,-0.42556 -2.16213,-0.74307 -3.28259,-0.94904 -0.99267,-0.1249 -1.99896,-0.0966 -2.99821,-0.10535 -1.06655,0.002 -2.13286,0.0255 -3.19929,0.0391 -1.04826,0.008 -2.09646,-0.0173 -3.14457,-0.0328 -1.37068,-0.009 -2.74154,-0.0101 -4.11216,0.008 -0.99974,0.0225 -1.99946,0.0239 -2.99933,0.0233 -0.15562,5.1e-4 -0.31249,0.0207 -0.46685,0.002 -0.44909,-0.0558 -0.62899,-0.18487 -1.05575,-0.33286 -0.47843,-0.16591 -0.955,-0.26193 -1.45574,-0.33359 -1.67019,-0.15642 -3.31415,-0.50863 -4.93089,-0.93991 -1.09718,-0.26201 -2.21339,-0.57419 -3.2033,-1.11866 -0.40549,-0.22303 -0.9551,-0.62061 -1.33463,-0.88517 -1.23138,-0.91474 -2.24557,-2.05235 -3.29052,-3.15365 -0.87183,-1.02482 -1.70599,-2.08252 -2.40891,-3.22352 -0.72659,-0.99006 -1.15879,-2.11925 -1.68303,-3.21022 -0.68539,-1.26871 -1.2866,-2.57971 -1.78537,-3.92727 -0.41813,-0.9667 -0.91545,-1.8933 -1.31331,-2.86936 -0.36528,-0.80755 -0.56138,-1.66202 -0.67237,-2.5327 -0.0429,-0.98363 -0.0587,-1.97008 -0.0474,-2.95476 0.006,-0.91612 -0.0239,-1.83212 -0.007,-2.74813 0.003,-0.96518 -0.0333,-1.92755 0.0639,-2.88913 0.0781,-0.36122 0.14776,-0.75612 0.28301,-1.10404 0.0909,-0.23382 0.54302,-1.16108 0.76407,-1.28768 5.76888,-3.30413 11.60383,-6.4991 17.40575,-9.74866 0.61891,0.009 1.30169,-0.10476 1.91381,0.0273 0.13851,0.0299 1.31716,0.46215 1.42788,0.50226 1.73785,0.73417 3.32819,1.73377 4.90235,2.74663 1.17187,0.62219 2.23477,1.407 3.29881,2.18392 1.11187,0.8203 2.3894,1.33519 3.69149,1.79973 2.32858,0.73233 4.67251,1.4327 7.04212,2.03082 1.55096,0.38449 3.13746,0.55358 4.73431,0.57227 1.26233,-0.0313 2.51319,-0.35012 3.74084,-0.63283 1.6995,-0.37696 3.42957,-0.42676 5.16369,-0.42866 3.1136,0.0902 6.22645,0.0976 9.34062,0.0447 2.03625,0.045 4.049,-0.21663 6.07108,-0.39877 1.8973,-0.0558 3.79587,-0.0378 5.69409,-0.0453 1.56146,0.12575 3.25671,0.0454 4.59188,0.98721 0.22745,0.16044 0.41098,0.37225 0.61648,0.55838 1.11685,1.30573 1.43423,3.02105 1.96745,4.59622 0.48166,1.29609 0.78046,2.62556 0.76717,4.00342 -0.0334,1.27964 -0.23806,2.54149 -0.42476,3.80579 -0.0925,1.1312 -0.24072,2.25299 -0.39433,3.37718 -0.0854,0.91765 -0.33664,1.80758 -0.44444,2.72222 -0.1196,0.46379 -0.17557,0.95593 -0.35547,1.40409 -0.21536,0.53648 -0.26694,0.39873 -0.21195,1.01828 1.77535,6.8025 0.47593,1.08988 -17.4248,9.96345 -0.20077,0.0995 -0.29211,-0.33267 -0.44058,-0.49697 -0.30891,-0.34183 -0.62277,-0.66427 -0.96979,-0.96967 -0.87177,-0.73962 -1.72628,-1.49748 -2.56638,-2.27056 -0.73409,-0.69554 -1.44005,-1.42212 -2.33191,-1.92892 -0.89608,-0.57607 -1.78321,-1.17493 -2.7258,-1.67922 -1.1808,-0.8168 -2.57864,-1.07822 -3.95828,-1.40567 -1.73926,-0.36612 -3.47604,-0.69537 -5.2528,-0.82441 -1.50443,-0.0734 -3.01137,-0.0728 -4.51729,-0.0712 -1.60732,0.0973 -3.19815,-0.0929 -4.79598,-0.21768 -1.31119,-0.1011 -2.62682,-0.11159 -3.94129,-0.12108 -1.38512,0.0742 -2.63442,-0.52583 -3.79426,-1.19022 -0.94989,-0.49124 -1.73183,-1.31709 -2.75801,-1.65319 -1.23775,-0.38289 -2.08302,-0.73322 -2.89982,-1.75823 -0.42128,-0.65691 -0.35982,-0.41468 -0.96749,-0.30978 -0.97776,0.16351 -1.79325,-0.40002 -2.59535,-0.86168 -0.87511,-0.7185 -1.75533,-1.39036 -2.89405,-1.62418 -1.28378,-0.10006 -2.54036,-0.43579 -3.83312,-0.32241 -5.55093,3.93831 -1.79538,1.24779 16.37372,-8.73458 0.12574,-0.0691 -0.29701,-0.008 -0.43153,0.0428 -0.46157,0.17612 -0.56085,0.75101 -0.65889,1.14261 -0.10273,0.94658 -0.31427,1.98105 0.15566,2.87242 0.13149,0.2494 0.3082,0.47393 0.4623,0.7109 2.08025,2.56465 5.11682,4.03118 8.12245,5.34749 4.07375,1.5774 8.43852,2.06321 12.78342,2.29495 2.22487,0.23847 4.41343,-0.0955 6.61412,-0.33906 1.4773,-0.30559 2.96883,-0.4544 4.3787,-1.00479 1.01814,-0.32195 2.09734,-0.3542 3.1453,-0.5254 0.45548,-0.0744 0.90392,-0.18493 1.3574,-0.27003 1.18956,-0.3899 2.38951,-0.7939 3.46975,-1.4244 5.64323,-3.91646 0.6361,-0.41743 -15.89128,8.84208 -0.16633,0.0932 0.34397,-0.17075 0.49586,-0.28468 0.43921,-0.32945 0.76063,-0.79304 1.05643,-1.2378 0.49263,-0.83805 0.95758,-1.689 1.46325,-2.52195 0.45532,-0.88843 0.64231,-1.53731 0.32991,-2.49312 -0.46245,-1.02366 -1.27444,-1.82417 -2.18982,-2.48041 -0.84066,-0.72094 -1.61584,-0.80571 -2.68055,-0.85466 -1.17102,-0.11265 -2.1551,0.10819 -2.99126,0.92722 5.52116,-3.09346 11.04342,-6.18505 16.56348,-9.28034 0.13071,-0.0733 -0.27096,0.13143 -0.39537,0.21432 -0.55312,0.3685 -0.74935,0.85605 -0.91896,1.45914 -0.29721,1.64176 -0.29811,3.32118 -0.11826,4.97394 0.38779,2.03265 0.88018,4.09466 1.864,5.94068 0.15581,-0.20369 0.24539,-0.47666 0.46742,-0.6111 0.5288,-0.3202 1.67071,-0.32513 2.21896,-0.34403 0.97505,-0.0336 1.91837,-0.0769 2.88967,-0.16857 0.31819,0.0847 1.34203,-0.008 1.63406,0.14952 0.56893,0.30699 0.94505,0.9572 1.27871,1.47062 0.68367,0.72936 1.0473,1.58592 1.34739,2.51293 0.33345,0.95894 0.59885,1.93798 0.92107,2.90015 0.25666,0.92519 0.62757,1.84297 0.588,2.81754 -0.0542,1.33275 -0.13655,0.12028 -0.0614,0.96581 0.9758,6.84544 0.29384,1.05279 -17.4758,9.93877 -0.20639,0.10321 -0.45041,-0.71103 -0.48076,-0.48818 -0.0403,0.29517 0.17782,0.94038 0.44033,0.78503 17.63393,-10.43526 10.63243,-13.79672 16.78992,-10.78348 0.73043,0.43595 1.24051,1.10233 1.7603,1.74615 0,0 -17.05344,9.87231 -17.05344,9.87231 l 0,0 c -0.46894,-0.53931 -1.00266,-0.9604 -1.61396,-1.34566 -5.16771,-4.75458 -1.1993,-0.88523 15.82253,-11.65246 0.26208,-0.16578 0.33472,0.5235 0.57263,0.72048 0.0732,0.0605 0.0472,-0.32219 -0.037,-0.27702 -17.49193,9.38826 -22.66348,6.0484 -16.84377,9.67439 0.37794,-0.33021 0.13884,-0.059 0.39122,-0.66409 0.0538,-0.12883 0.1436,-0.24356 0.18384,-0.37693 0.17776,-0.58923 -0.20022,-1.06833 -0.34436,-1.62317 -0.39389,-0.96008 -0.63068,-1.96614 -0.96892,-2.94483 -0.093,-0.26274 -0.16047,-0.53394 -0.26362,-0.79308 -0.18637,-0.46823 -0.61349,-0.79781 -0.86872,-1.22615 -0.0531,-0.0664 -0.0938,-0.14428 -0.15944,-0.19932 -0.0564,-0.0474 -0.0937,0.12787 -0.16615,0.14513 -0.39458,0.094 -0.90188,-0.16922 -1.29868,-0.0142 -0.88602,0.008 -1.76877,-0.0134 -2.65396,0.0428 -0.62403,0.0397 -2.01193,0.23824 -2.61148,0.0212 -0.56791,-0.20553 -1.01311,-0.64482 -1.51968,-0.96724 -0.74206,-2.12565 -1.67592,-4.19351 -2.07843,-6.41861 -0.10243,-0.6969 -0.25097,-1.38846 -0.31474,-2.08967 -0.0973,-1.06929 0.0298,-2.15804 -0.0285,-3.22931 0.0309,-0.62731 0.0361,-1.28128 0.20167,-1.89353 1.78599,-6.60556 22.45932,-8.38973 17.84617,-10.98713 1.24428,-0.21457 2.49231,-0.18093 3.73381,0.0608 1.23729,0.31114 2.28995,0.88229 3.2268,1.73255 1.09564,0.96766 2.06122,2.03898 2.73456,3.33207 0.51967,1.24091 0.83588,2.45244 0.35832,3.76221 -0.29737,1.01101 -0.90657,1.83063 -1.35095,2.77879 -0.31132,0.54271 -0.59659,1.08819 -0.92363,1.62239 -0.12324,0.2013 -0.15556,0.48619 -0.36178,0.60841 -15.34013,9.09104 -11.29794,7.37997 -18.00046,10.17061 -1.23162,0.43476 -2.47323,0.86857 -3.78301,1.0168 -1.46179,0.23855 -2.9331,0.42656 -4.33178,0.93285 -1.53277,0.29671 -3.0785,0.5915 -4.63687,0.7138 -2.14107,0.1297 -4.28399,-0.01 -6.41441,-0.23453 -4.34167,-0.59421 -8.69923,-1.40952 -12.77634,-3.0103 -3.43144,-1.42445 -6.86079,-2.97875 -9.29685,-5.8214 -0.25747,-0.32685 -0.5461,-0.6328 -0.77245,-0.98055 -0.73527,-1.12961 -0.86764,-2.43928 -0.76672,-3.73668 0.0157,-0.31848 0.10453,-2.59381 0.31142,-2.71287 16.93131,-9.74332 10.98554,-10.51113 18.23565,-9.41626 1.41703,0.21374 2.88827,0.27599 4.2314,0.7895 1.07048,0.5045 1.97672,1.23588 3.02097,1.77526 0.36503,0.12929 0.45837,0.18958 0.82636,0.22872 0.52901,0.0563 1.07442,-0.0675 1.58358,0.15212 0.74263,0.30145 1.33601,0.78826 1.71095,1.48948 0.4679,0.54358 1.78161,0.62263 2.3743,1.08055 0.90716,0.55805 1.75218,1.21417 2.7114,1.69162 1.06137,0.43037 2.1265,0.52606 3.27254,0.4777 1.32654,0.0393 2.65073,0.11964 3.97035,0.25915 1.55626,0.13945 3.11001,0.10811 4.67143,0.11118 1.5641,0.014 3.13675,0.007 4.68742,0.23151 1.76821,0.29099 3.50531,0.72664 5.25729,1.09483 1.58129,0.37466 3.1435,0.8298 4.48524,1.75461 0.95116,0.59524 1.9509,1.11697 2.86015,1.77359 0.85876,0.67942 1.6439,1.43141 2.4345,2.18347 0.8251,0.75361 1.66562,1.49178 2.55353,2.17626 0.0386,0.031 0.59388,0.48456 0.70832,0.55337 0.0633,0.038 0.15071,0.12888 0.20684,0.0815 0.0633,-0.0534 0.0585,-0.28249 -0.0151,-0.24327 -17.56369,9.3696 -22.08005,5.09343 -16.91867,9.75925 0.29167,-0.46674 0.047,-0.90465 0.14133,-1.41934 0.0537,-0.29296 0.52074,-0.74524 0.4592,-1.10379 0.31249,-0.8254 0.22818,-1.76618 0.59336,-2.58904 0.13104,-1.13958 0.39487,-2.25289 0.44259,-3.40039 0.12877,-1.22993 0.41685,-2.43518 0.4761,-3.6714 0.032,-0.33929 0.10046,-0.67685 0.0996,-1.01755 -0.002,-0.83081 -0.25776,-1.65381 -0.436,-2.45743 -0.25123,-0.83736 -0.7182,-2.57843 -1.22152,-3.27442 -0.0784,-0.10842 -0.18612,-0.19392 -0.27919,-0.29088 -1.25319,-0.71579 -2.85335,-0.5148 -4.24661,-0.57889 -1.91564,0.0198 -3.83166,0.052 -5.73938,0.24035 -1.93998,0.11114 -3.87779,0.14528 -5.82044,0.0425 -3.16927,-0.0554 -6.34162,-0.0568 -9.50492,0.17081 -1.71037,0.13859 -3.41021,0.36653 -5.08027,0.75894 -1.37659,0.24712 -2.7575,0.46994 -4.15906,0.26008 -1.5957,-0.21022 -3.14863,-0.61196 -4.68336,-1.08117 -2.40415,-0.72855 -4.84388,-1.33787 -7.24564,-2.07283 -1.48492,-0.53785 -2.90713,-1.19822 -4.15728,-2.15696 -1.03171,-0.73832 -2.0636,-1.47564 -3.12615,-2.17235 -1.41486,-0.92204 -2.88078,-1.8367 -4.58732,-2.14133 -0.92849,-0.0813 -1.9131,0.0342 -2.63922,0.6544 5.5602,-3.13108 11.14062,-6.22877 16.68059,-9.39323 0.12131,-0.0693 -0.27745,0.053 -0.40993,0.0993 -0.52196,0.18259 -0.9651,0.58459 -1.24586,1.03662 -0.36805,0.79178 -0.23804,1.64375 -0.25148,2.49435 0.0152,0.9201 -0.0201,1.84 -0.0178,2.76018 0.009,0.92618 -0.0222,1.85293 0.0344,2.77834 0.0258,0.70237 0.0864,1.40273 0.3644,2.06132 0.39941,1.00023 0.77302,2.00612 1.24614,2.97879 0.45719,1.27841 0.89931,2.56503 1.65821,3.71573 0.56257,1.01601 0.96442,2.10997 1.62976,3.07475 0.64784,1.0333 1.37328,2.015 2.19876,2.9243 0.91061,1.01205 1.82022,2.04278 3.00592,2.76699 1.23995,0.74611 2.61468,1.1924 4.03128,1.52152 1.68818,0.34561 3.40447,0.4779 5.1052,0.74021 0.96766,0.24291 1.75005,0.45726 2.76311,0.33052 0.97773,-4.9e-4 1.9553,2.8e-4 2.93287,0.0234 1.36368,0.0179 2.7276,0.0159 4.09133,0.007 1.08021,-0.0162 2.16041,-0.0418 3.24077,-0.0408 1.04882,0.008 2.09758,0.0233 3.14611,0.049 1.1213,0.0298 2.25109,0.0774 3.31974,0.44325 1.16161,0.37017 2.32567,0.73432 3.40016,1.31224 1.34114,0.58548 2.70844,1.13235 4.14611,1.45531 1.39339,0.2916 2.79026,0.56871 4.20227,0.75836 0.97467,0.22548 1.91719,0.56347 2.90919,0.72074 1.02194,0.18323 2.03364,0.1865 3.06261,0.0383 0.44769,-0.0661 1.52705,-0.26819 1.90822,-0.48458 0.10358,-0.0588 0.17274,-0.16146 0.25913,-0.24221 0.20788,-0.13297 0.51637,-0.34192 0.74374,-0.43805 0.60673,-0.25648 1.30643,-0.27136 1.87747,-0.62243 0.31138,-0.14387 0.63671,-0.25966 0.94211,-0.41507 0.15541,-0.0791 0.59847,-0.35556 0.4465,-0.27047 -24.5119,13.72512 -21.88212,11.51203 -15.57159,8.88814 0.76835,-0.80879 1.44581,-1.69978 2.34789,-2.37805 0.72047,-0.57498 1.22232,-1.34179 1.68005,-2.12171 0.0416,-0.13324 0.0832,-0.26649 0.12481,-0.39973 0.0525,-0.11829 0.11744,-0.23212 0.15747,-0.35488 0.19116,-0.58634 0.27522,-1.20517 0.70703,-1.69495 0.53856,-1.06081 -0.1124,0.17462 0.47594,-0.80467 0.34507,-0.57439 0.45932,-1.25223 0.87572,-1.79218 0.51562,-0.7654 0.62694,-1.62605 0.6921,-2.52287 0.1376,-0.83865 0.33516,-1.65802 0.38374,-2.50934 0.071,-0.41158 0.21039,-0.8397 0.25396,-1.25274 0.0521,-0.49439 -0.0464,-1.0002 0.007,-1.49533 0.0164,-1.08477 -0.004,-2.16836 0.003,-3.25303 -0.009,-1.01528 -0.006,-2.03081 -0.0104,-3.04603 0.01,-0.89519 0.006,-1.79055 -0.004,-2.68569 -0.004,-0.79029 -0.0271,-1.58639 -0.3122,-2.33807 -0.38587,-0.92482 -0.90513,-1.84387 -1.66719,-2.52813 -0.91299,-0.62248 -1.90161,-1.01767 -3.02122,-1.14521 -1.88556,-0.33564 -3.79905,-0.49869 -5.71353,-0.57794 -1.94223,-0.0788 -3.88839,-0.0164 -5.83082,-0.11652 -3.09319,-0.0694 -6.18545,-0.0316 -9.27878,0.0158 -3.35266,-0.0226 -6.70318,-0.14577 -10.05589,-0.16052 -3.74357,-0.009 -7.52427,0.12731 -11.23788,-0.39463 -3.93256,-0.68037 -7.87852,-1.25661 -11.84713,-1.70819 -2.50865,-0.31245 -5.02889,-0.55761 -7.52051,-0.98385 -1.30251,-0.32172 -2.56898,-0.78065 -3.73835,-1.42852 -1.21623,-0.65013 -2.38065,-1.3634 -3.46122,-2.21347 -0.58026,-0.395 -1.63482,-1.27177 -2.35969,-1.32842 -0.10741,-0.008 -0.21317,0.0306 -0.31976,0.046 -4.86257,4.55338 -0.68025,0.59973 16.47026,-9.10648 0.13513,-0.0765 -0.3073,0.068 -0.4498,0.13077 -0.5457,0.24018 -0.79805,0.71511 -1.11145,1.18008 -0.49102,0.85738 -0.93537,1.7014 -1.01892,2.69516 -0.34807,1.12185 -0.31963,2.33853 -0.63936,3.473 -0.24207,1.00439 -0.18262,1.99909 -0.0408,3.01803 0.13283,0.86195 0.35098,1.70242 0.26382,2.58166 -0.004,0.84641 -0.0103,1.69317 -0.0565,2.53862 -0.052,0.8738 -0.0855,1.75476 -0.34372,2.60033 0.007,0.83291 0.0273,1.66681 -0.0497,2.49791 -0.0883,0.89607 -0.32169,1.76557 -0.38945,2.65719 -0.0257,0.84973 -0.0573,1.73093 -0.36681,2.5345 -0.0459,0.82647 -0.20599,1.66305 -0.0925,2.48341 0.12573,0.8141 0.0196,1.64131 -0.30842,2.40735 -0.0362,0.38888 -0.0736,0.77626 -0.15639,1.15915 -0.0441,0.20394 -0.15199,0.39303 -0.18489,0.59895 -0.0193,0.12046 -3.9e-4,0.24377 -5.5e-4,0.36566 0.002,0.68844 -0.004,1.38124 0.10663,2.06328 0.1629,0.7769 0.50089,1.49603 0.70182,2.26326 0.10686,0.704 0.40291,1.30288 0.87223,1.85607 0.70196,0.75259 1.48782,1.43099 2.29145,2.08007 0.78711,0.58675 1.62048,1.10487 2.52522,1.5082 0.70562,0.35756 1.4726,0.53465 2.23234,0.75198 0.73253,0.20814 1.489,0.3046 2.2422,0.40267 0.81228,0.16172 1.62194,0.2306 2.43245,0.39032 1.07724,0.28657 2.09419,0.72617 3.16107,1.04086 0.33456,0.0817 0.66274,0.19295 1.00336,0.24615 0.51549,0.0805 1.05947,-0.051 1.56448,0.14157 0.95485,0.23028 1.85134,0.60207 2.76959,0.93801 1.03071,0.39529 2.03286,0.85863 3.09204,1.17823 0.97026,0.30882 1.88693,0.76083 2.80519,1.18982 0.96696,0.40745 1.91463,0.8776 2.92138,1.18223 1.44062,0.28866 2.89099,0.30643 4.36012,0.26596 1.3977,-0.042 2.82463,-0.0429 4.18231,-0.40407 0.83055,-0.24472 1.64286,-0.54195 2.43085,-0.88997 0.94788,-0.35334 1.98917,-0.43748 2.95873,-0.73576 1.16792,-0.11123 2.39787,-0.18736 3.53418,0.13591 0.42619,0.13745 0.86124,0.33112 1.30005,0.42785 0.14233,0.0314 0.62399,0.0634 0.75519,0.0867 0.16081,0.0286 0.31767,0.0751 0.4765,0.11267 1.03244,0.31178 1.96569,0.78416 2.88787,1.32496 0.92795,0.26419 1.93887,0.25466 2.89605,0.31367 1.19951,0.0474 2.40325,0.12074 3.54849,0.50249 1.20925,0.3308 2.44057,0.4043 3.68696,0.53422 1.50889,0.20015 3.05118,0.24428 4.51548,0.67752 0.87837,0.28594 1.78235,0.59722 2.72445,0.51409 0.90728,0.0802 1.80423,0.22585 2.70328,0.36617 1.65601,0.19238 3.33067,0.21501 4.99266,0.3431 0.93202,0.0396 1.87832,0.1239 2.80462,-0.0344 0.22603,-0.0386 0.4605,-0.0691 0.66671,-0.16664 0.15582,-0.0737 0.53845,-0.42009 0.39006,-0.33321 -5.54638,3.24749 -11.06064,6.54605 -16.59097,9.81906 0.11267,0.0556 0.21814,0.12787 0.33801,0.16693 0.34333,0.11184 0.0472,-0.28529 0.0547,-0.28912 17.67056,-9.16683 23.13506,-5.10206 17.54033,-9.15263 -0.27415,0.25356 -0.0404,0.7093 -0.0917,0.94903 -2.23653,-6.25784 0.0851,0.0675 -16.89443,10.26381 -0.0796,0.0478 -0.066,-0.1702 -0.10903,-0.2508 -0.25943,-0.48639 -0.52332,-0.97071 -0.80611,-1.44498 -0.75268,-1.07837 -1.71937,-2.02474 -2.27804,-3.21833 5.54545,-3.62227 10.97949,-7.40957 16.63637,-10.86679 0.17557,-0.10731 0.28772,0.28984 0.42853,0.4375 0.14171,0.14859 1.59806,1.83686 1.3488,1.99915 -5.5676,3.62487 -11.53266,6.6427 -17.299,9.96404 -0.63743,-0.44187 -1.11653,-1.00178 -1.68496,-1.51933 -0.19358,-0.17626 -0.40429,-0.33469 -0.59382,-0.51504 -0.18649,-0.17746 -0.35534,-0.37148 -0.53301,-0.55722 -0.45235,-0.68867 -0.82389,-1.30768 -0.76188,-2.16006 0.0147,-0.20217 0.11704,-0.39079 0.14453,-0.5917 0.14082,-1.02913 -0.22649,-0.65209 0.39992,-1.07169 0.10542,-0.0101 0.21038,-0.0269 0.31625,-0.0305 0.0954,-0.003 0.20392,0.0563 0.28607,0.009 0.31419,-0.1796 0.20348,-1.25569 0.42609,-1.57663 0.33107,-0.80258 0.76629,-1.56305 1.13259,-2.35075 0.39,-0.91 1.05051,-1.69862 1.76491,-2.39231 0.33417,-0.29331 0.66569,-0.6006 1.04444,-0.84124 0.79287,-0.50374 -0.11789,0.10432 0.67489,-0.31116 0.10231,-0.0536 0.18758,-0.13325 0.28135,-0.19987 0.62135,-0.47793 0.65217,-1.31066 0.78857,-2.0188 0.17831,-0.67917 0.59944,-1.28782 0.57283,-2.00165 -0.003,-0.76776 -0.01,-1.53559 9.8e-4,-2.30331 0.022,-0.86086 0.0614,-1.72797 0.29796,-2.56344 0.26926,-0.84004 0.54641,-1.67483 0.73189,-2.53883 0.0711,-0.25358 0.18313,-0.49606 0.24294,-0.75234 0.12894,-0.55255 0.10175,-1.14346 0.30339,-1.68407 0.0502,-0.80952 0.12643,-1.62706 0.42768,-2.39146 0.0973,-0.9293 0.29766,-1.83134 0.52501,-2.73675 0.24169,-0.90529 0.61816,-1.77778 0.98463,-2.64028 0.40828,-0.85124 0.62318,-1.78844 1.0908,-2.62046 0.25663,-0.40806 0.42636,-0.84936 0.67638,-1.25832 0.23846,-0.39003 0.55462,-0.73328 0.66548,-1.19102 0.46978,-0.81483 1.07265,-1.55375 1.50737,-2.39104 0.39194,-0.64625 0.528,-1.36216 0.73399,-2.07732 0.0447,-0.99133 0.12247,-1.98261 0.10501,-2.97541 -0.0348,-0.76485 -0.33036,-1.4877 -0.64593,-2.1844 -0.57103,-0.55187 -1.52022,-0.47778 -2.23043,-0.75364 -1.22668,-0.34267 -2.45349,-0.68988 -3.70038,-0.95749 -1.2988,-0.23013 -2.6013,-0.3956 -3.92084,-0.44857 -0.87469,-0.10557 -1.73289,-0.28129 -2.61789,-0.20217 -1.30793,-0.0376 -2.61491,-0.10037 -3.92044,-0.18615 -1.57353,-0.13159 -3.12677,-0.42392 -4.70394,-0.51097 -1.51043,-0.0427 -3.02685,0.0881 -4.53253,-0.0965 -2.31405,-0.2849 -4.62938,-0.55534 -6.93656,-0.89037 -1.38169,-0.16119 -1.63668,-0.21911 -3.02892,-0.26887 -1.17843,-0.0421 -2.36255,0.0476 -3.53905,-0.0687 -1.71878,-0.12586 -3.43959,-0.27972 -5.16352,-0.29824 -1.3346,-0.0459 -2.66029,-0.19385 -3.99191,-0.28506 -1.47408,-0.0432 -2.942,0.0971 -4.41004,0.2175 -1.40303,0.10362 -2.80551,0.12944 -4.21257,0.14009 -1.05234,0.007 -2.10449,-0.0233 -3.15687,-0.0177 -1.46344,-0.0177 -2.92694,-0.0502 -4.39053,-0.0364 -1.47609,0.0237 -2.95218,0.0473 -4.42819,0.002 -1.6793,-0.059 -3.36374,-0.0834 -5.0349,-0.26495 -1.06867,-0.15866 -2.12208,-0.40184 -3.20423,-0.45934 -0.7741,0.11703 -1.56902,0.0125 -2.34859,-5e-4 -1.01798,-0.0738 -2.03321,-0.19841 -3.02163,-0.45408 -1.07837,-0.2804 -2.1742,-0.45671 -3.26294,-0.6903 -1.31455,-0.40589 -2.56546,-0.962 -3.74409,-1.65908 -0.21346,-0.13161 -0.76746,-0.57421 -1.08105,-0.40998 -0.0859,0.045 -0.24065,0.28717 -0.15585,0.2402 17.18828,-9.5205 23.23358,-8.16186 16.51108,-9.57966 -0.0834,0.042 -0.20413,0.0466 -0.2503,0.12577 -0.13166,0.22589 -0.0663,0.51529 -0.12173,0.76903 -0.0453,0.20789 -0.15421,0.40074 -0.18977,0.61042 -0.0207,0.12178 -0.004,0.24679 -0.006,0.37018 -0.0101,0.59223 -0.0309,1.18528 -0.008,1.77735 0.0821,0.44835 1.14209,0.46098 1.47616,0.67753 1.20649,0.56555 2.4506,1.52788 3.85544,1.26273 0.82798,-0.22303 1.62594,-0.44549 2.38745,-0.84318 0.21654,-0.11309 0.8493,-0.4814 0.63627,-0.36221 -5.40362,3.02329 -10.80539,6.04968 -16.20807,9.07451 0.22893,-0.11632 0.46774,-0.21601 0.68679,-0.34895 0.91966,-0.55819 0.41045,-0.39905 1.36513,-0.93137 3.65399,-2.03743 12.25945,-8.85933 19.27583,-10.16925 1.41518,-0.12723 2.84084,-0.17645 4.24284,-0.41847 0,0 -15.9893,11.50297 -15.9893,11.50297 z"
-       inkscape:export-filename="/home/mario/projects/streamtuner2/streamtuner2.png"
-       inkscape:export-xdpi="34.827335"
-       inkscape:export-ydpi="34.827335" />
-    <path
-       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-       id="path2832"
-       d="m 138.9234,606.23556 c -1.39259,-0.356 -2.82059,-0.55172 -4.23917,-0.78211 -1.23436,-0.20401 -2.48122,-0.31356 -3.7319,-0.35384 -0.72577,-0.0191 -1.45179,-0.01 -2.1777,-0.008 -0.52824,0.0415 -1.07952,-0.0588 -1.5976,0.0609 -0.45155,0.10519 -0.87704,0.31084 -1.29744,0.5018 -0.83798,0.30596 -1.69678,0.55093 -2.53535,0.8552 -0.69182,0.28074 -1.41519,0.46139 -2.05032,0.85585 8.3782,-4.63239 4.94934,-3.37072 3.67394,-1.59381 -0.23385,0.36287 -0.3621,0.77267 -0.5087,1.1722 -0.16519,0.45481 -0.2673,0.92737 -0.36222,1.39961 -0.1099,0.43587 -0.20227,0.87523 -0.31557,1.31031 -0.13799,0.42355 -0.25449,0.85272 -0.38012,1.27973 -0.18646,0.51513 -0.31846,1.04534 -0.41862,1.58183 -0.0852,0.43926 -0.0786,0.88775 -0.14557,1.32877 -0.0586,0.41944 -0.16593,0.82848 -0.25986,1.24115 -0.16337,0.50145 -0.22077,1.02476 -0.31412,1.54044 -0.0852,0.59632 -0.17597,1.19185 -0.26467,1.78777 -0.0556,0.46214 -0.0935,0.92439 -0.17217,1.38366 -0.14265,0.61162 -0.21843,1.23186 -0.29683,1.85319 -0.11184,0.62352 -0.15147,1.25491 -0.20982,1.8842 -0.0557,0.50938 -0.204,1.00242 -0.29744,1.50557 -0.0536,0.45385 -0.11819,0.90485 -0.19572,1.35563 -0.0792,0.52553 -0.0798,1.05797 -0.11038,1.58729 -0.0588,0.59968 -0.20412,1.18605 -0.28642,1.78265 -0.0824,0.49611 -0.17386,0.98995 -0.2332,1.48931 -0.0249,0.56406 -0.0906,1.12281 -0.20036,1.67717 -0.13143,0.53415 -0.19058,1.07817 -0.21882,1.62537 -0.0155,0.56111 -0.16288,1.10335 -0.27114,1.65115 -0.10712,0.5473 -0.12566,1.10597 -0.13556,1.66147 -0.016,0.61809 -0.006,1.23626 -0.005,1.85441 0.008,0.53715 0.004,1.07433 0.006,1.6115 0.008,0.5564 -0.002,1.10967 -0.0674,1.66265 -0.0679,0.44733 -0.0931,0.89897 -0.10766,1.35041 -0.0144,0.42896 -0.0137,0.85809 -0.0118,1.28722 0.0254,0.40596 -0.0631,0.80371 -0.12086,1.20314 -0.0519,0.39304 -0.0653,0.78944 -0.0712,1.18523 -0.0256,0.51149 0.007,1.01844 0.0591,1.52702 0.0444,0.70618 0.12669,1.40757 0.25206,2.10449 0.13823,0.72137 0.41512,1.40682 0.63443,2.10705 0.14221,0.54857 0.40417,1.0547 0.613,1.58017 0.20164,0.5146 0.57084,0.93165 0.94392,1.33689 0.601,0.5727 1.26068,1.08364 1.89022,1.62649 0.75169,0.69576 1.55384,1.33727 2.31668,2.02104 0.70994,0.57654 1.47061,1.09148 2.23083,1.60343 0.60181,0.40907 1.14502,0.88892 1.71244,1.33932 0.57458,0.45167 1.24091,0.77344 1.8538,1.17183 0.63505,0.39594 1.23083,0.84736 1.92368,1.14544 0.53058,0.22327 1.09199,0.38394 1.65828,0.49811 0.55458,0.11887 1.09039,0.29159 1.63576,0.44166 0.78438,0.25095 1.59359,0.42322 2.40474,0.57125 1.06866,0.19587 2.14009,0.37845 3.21042,0.56651 0.75526,0.14035 1.48937,0.36477 2.24626,0.49625 0.58661,0.0666 1.16339,0.19329 1.74117,0.30883 0.68066,0.17818 1.3766,0.30949 2.07416,0.41015 0.74937,0.12336 1.51087,0.17667 2.26019,0.29758 0.61662,0.0713 1.22352,0.18853 1.8362,0.28326 0.53104,0.0479 1.05559,0.0789 1.58146,0.16433 0.49165,0.0334 0.96719,0.13648 1.45129,0.21755 0.55035,0.0331 1.09043,0.1279 1.63785,0.18757 0.62644,0.14059 1.26549,0.2075 1.90626,0.24457 0.51533,0.12544 1.0526,0.12249 1.56862,0.23292 0.48534,0.12206 0.98947,0.10586 1.47905,0.19441 0.52946,0.11113 1.07681,0.0872 1.60583,0.18795 0.5328,0.10803 1.07748,0.12978 1.61975,0.14762 0.71432,0.0157 1.4289,0.0175 2.14339,0.0182 0.75453,0.0342 1.49158,0.19297 2.23785,0.29245 0.50222,0.0192 0.98893,0.1123 1.48378,0.18656 0.41956,0.058 0.8439,0.0631 1.26686,0.0682 0.49857,0.006 0.99722,0.003 1.49582,0.002 0.44808,-0.002 0.89615,-0.004 1.34422,-0.006 0.67016,0.008 1.34029,0.0184 2.0105,0.0215 0.8621,0.01 1.72415,-0.003 2.5862,-0.008 0.63227,0.002 1.26012,0.10357 1.89132,0.14742 0.57639,0.0708 1.16571,0.11514 1.73596,0.2299 0.0951,0.0173 0.1914,0.0294 0.28535,0.052 0.77655,0.18563 -0.20352,-0.0128 0.55301,0.1512 0.32103,0.0696 0.64522,0.0952 0.97223,0.12249 1.00303,0.1217 2.00823,0.23203 3.01481,0.32452 0.80428,0.071 1.61185,0.0915 2.41906,0.0944 0.55075,-5.3e-4 1.1015,-0.003 1.65226,-0.002 0.54115,-0.0278 1.07774,-0.11878 1.62096,-0.15697 0.51752,0.0145 1.01577,-0.089 1.52547,-0.14828 0.57739,-0.0781 1.14974,-0.17645 1.73319,-0.22359 0.48564,0.008 0.94803,-0.12876 1.42606,-0.18869 0.48245,-0.0166 0.94614,-0.14314 1.41452,-0.24685 0.52914,-0.1418 1.09039,-0.0851 1.61968,-0.20873 0.50665,-0.11202 1.03077,-0.0804 1.5383,-0.17623 0.47484,-0.092 0.95676,-0.13377 1.43985,-0.1536 0.41932,-0.13228 0.86309,-0.15328 1.3002,-0.17782 0.43119,0.0374 0.80403,-0.11797 1.19888,-0.25047 0.0602,-0.0317 0.1173,-0.0696 0.18061,-0.0949 0.0717,-0.0287 0.1499,-0.0394 0.22228,-0.0662 0.3327,-0.12362 0.63471,-0.31462 0.95414,-0.4648 3.86495,-2.27058 -16.44533,9.28171 0.72591,-0.41698 1.53237,-0.86552 -3.07337,1.71664 -4.61102,2.57334 -0.18266,0.10177 0.36105,-0.21064 0.53871,-0.32038 0.49922,-0.33689 0.97394,-0.70787 1.44561,-1.07994 0.43574,-0.34729 0.84358,-0.72526 1.24767,-1.10617 0.41751,-0.37283 0.79301,-0.78231 1.15748,-1.20295 0.3264,-0.36455 0.41912,-0.84259 0.59867,-1.27885 0.15394,-0.41228 0.33361,-0.81512 0.48418,-1.22859 0.15177,-0.45521 0.35243,-0.8929 0.53372,-1.33782 0.2253,-0.45984 0.38634,-0.94469 0.56586,-1.4222 0.17743,-0.63954 0.36114,-1.27652 0.5774,-1.90509 0.25257,-0.63616 0.53065,-1.26473 0.83415,-1.87998 0.24276,-0.52925 0.46042,-1.06922 0.69148,-1.60348 0.27489,-0.57122 0.52784,-1.1503 0.76679,-1.73629 0.2405,-0.61427 0.53623,-1.20553 0.80728,-1.80708 0.30231,-0.63078 0.56589,-1.2741 0.77985,-1.93765 0.21356,-0.70337 0.43726,-1.40318 0.67018,-2.10078 0.22054,-0.73472 0.4038,-1.47801 0.63154,-2.21088 0.16767,-0.6484 0.35717,-1.29157 0.52446,-1.93997 0.17722,-0.61501 0.2962,-1.24104 0.35799,-1.87612 0.0554,-0.73375 0.20023,-1.45632 0.30871,-2.18338 0.0696,-0.61558 0.16433,-1.22853 0.26367,-1.84022 0.11265,-0.59897 0.16373,-1.20585 0.25921,-1.80712 0.0889,-0.70714 0.23791,-1.40279 0.42468,-2.09113 0.15821,-0.65591 0.36727,-1.29867 0.53969,-1.95084 0.13634,-0.4928 0.14654,-1.00401 0.18687,-1.5092 0.1192,-0.61356 0.24377,-1.22385 0.33748,-1.84198 0.095,-0.65897 0.22594,-1.3121 0.32348,-1.97062 0.0423,-0.54447 0.10589,-1.0812 0.24143,-1.61165 0.15135,-0.49657 0.2044,-1.00975 0.23711,-1.52414 0.0336,-0.67236 0.0257,-1.34566 0.0266,-2.01855 0.004,-0.70055 2e-5,-1.40108 -0.002,-2.10162 -9.7e-4,-0.64404 -0.004,-1.28807 -0.004,-1.93212 0.0145,-0.60558 -0.005,-1.20614 -0.0763,-1.80776 -0.0524,-0.48205 -0.10539,-0.96227 -0.18919,-1.44019 -0.0763,-0.52332 -0.11448,-1.04948 -0.19212,-1.57304 -0.0796,-0.46188 -0.0935,-0.93077 -0.16487,-1.39337 -0.0695,-0.46144 -0.17802,-0.91636 -0.31253,-1.36383 0,0 5.03936,-2.658 5.03936,-2.658 l 0,0 c 0.1367,0.46904 0.26257,0.9425 0.34377,1.42366 0.0822,0.46902 0.11616,0.9373 0.158,1.41145 0.0685,0.51812 0.15125,1.03305 0.19803,1.55355 0.079,0.4912 0.16999,0.9772 0.18565,1.47581 0.0645,0.62027 0.13585,1.23813 0.0992,1.86305 2e-4,0.64523 -0.003,1.29046 -0.004,1.93569 -9.8e-4,0.70056 -0.004,1.40109 0.002,2.10165 0.002,0.67787 -9.8e-4,1.35576 -0.006,2.03361 -0.0112,0.54368 -0.0237,1.09315 -0.16766,1.62233 -0.14346,0.51381 -0.28258,1.02425 -0.29518,1.56101 -0.0812,0.66568 -0.22292,1.32133 -0.32133,1.98447 -0.10224,0.60377 -0.13682,1.21901 -0.3271,1.8072 -0.075,0.52411 -0.0353,1.06028 -0.15689,1.58042 -0.16641,0.66364 -0.42304,1.30143 -0.55661,1.97327 -0.1968,0.66472 -0.37836,1.33318 -0.43986,2.0249 -0.0905,0.6042 -0.15883,1.21005 -0.26009,1.8129 -0.10039,0.60948 -0.1923,1.22125 -0.27941,1.83238 -0.0907,0.72109 -0.26265,1.42887 -0.32468,2.1537 -0.0339,0.66092 -0.10945,1.31241 -0.30213,1.95057 -0.15828,0.66331 -0.38395,1.30814 -0.53315,1.97366 -0.21699,0.74072 -0.46795,1.47237 -0.62842,2.2282 -0.23425,0.69035 -0.45799,1.38258 -0.65885,2.08247 -0.20599,0.68129 -0.43607,1.35198 -0.75603,1.99261 -0.25886,0.60697 -0.56041,1.19301 -0.80886,1.80459 -0.26368,0.57619 -0.45288,1.18099 -0.74634,1.74559 -0.2657,0.52187 -0.47048,1.07373 -0.68684,1.61581 -0.30539,0.60515 -0.60239,1.21056 -0.87864,1.82914 -0.22925,0.61454 -0.43614,1.2414 -0.56379,1.88334 -0.0772,0.26986 -0.19877,0.51451 -0.28533,0.77886 -0.0763,0.23289 -0.10014,0.48303 -0.23971,0.69626 -0.22067,0.41127 -0.33229,0.86356 -0.55887,1.27302 -0.1221,0.43496 -0.30578,0.84562 -0.46314,1.26813 -0.0291,0.0701 -0.0582,0.14013 -0.0873,0.2102 -0.0329,0.0667 -0.0699,0.13165 -0.0986,0.20016 -0.13863,0.33148 -0.16844,0.70065 -0.36331,1.0124 -0.33086,0.45748 -0.71275,0.88406 -1.1251,1.27424 -0.40531,0.39021 -0.81084,0.78076 -1.23813,1.14866 -0.46487,0.3916 -0.95584,0.7505 -1.42932,1.13183 -1.76268,1.26011 -3.89253,2.25383 -5.69081,3.24611 -1.54786,0.8541 6.17196,-3.44927 4.62671,-2.59073 -5.48604,3.04805 -3.3504,2.01461 -5.37879,2.99024 -0.45962,0.22777 -0.93851,0.42306 -1.43156,0.57063 -0.41644,0.11364 -0.84185,0.12227 -1.27125,0.14932 -0.439,0.0465 -0.86913,0.14686 -1.30962,0.17151 -0.46955,0.0396 -0.93458,0.10949 -1.40085,0.17498 -0.51657,0.0414 -1.03037,0.0974 -1.5405,0.18863 -0.53294,0.0367 -1.06297,0.1001 -1.58151,0.22947 -0.48353,0.10333 -0.9698,0.17402 -1.46115,0.23008 -0.4718,0.0773 -0.94326,0.12563 -1.42113,0.15316 -0.57886,0.0681 -1.1502,0.18189 -1.73001,0.24325 -0.51048,0.0734 -1.02374,0.0851 -1.5378,0.12456 -0.54864,0.0536 -1.09487,0.14608 -1.64853,0.11815 -0.55038,0.003 -1.10101,0.004 -1.65113,-0.0144 -0.79975,-0.031 -1.5989,-0.0784 -2.39435,-0.16698 -1.01462,-0.11125 -2.03067,-0.20505 -3.047,-0.30048 -0.62963,-0.0702 -1.23591,-0.22119 -1.85651,-0.339 -0.57214,-0.0705 -1.14264,-0.15575 -1.71882,-0.18937 -0.61042,-0.0644 -1.22041,-0.14439 -1.83625,-0.12439 -0.85505,-0.005 -1.7101,-0.0173 -2.56519,-0.008 -0.69058,0.003 -1.38107,0.0132 -2.07158,0.0218 -0.44383,-5.2e-4 -0.88766,-0.002 -1.33148,-0.003 -0.50365,3e-5 -1.00732,5.2e-4 -1.5109,-0.01 -0.44015,-0.0159 -0.87918,-0.0479 -1.31209,-0.13117 -0.48622,-0.0818 -0.9779,-0.11066 -1.46366,-0.19619 -0.71518,-0.12413 -1.4325,-0.25524 -2.16311,-0.23808 -0.72552,-1.9e-4 -1.45138,0.005 -2.17648,-0.024 -0.55991,-0.0282 -1.11553,-0.0854 -1.66759,-0.18224 -0.53483,-0.044 -1.06599,-0.11109 -1.59687,-0.18775 -0.50366,-0.0389 -1.00256,-0.10643 -1.49762,-0.20514 -0.51343,-0.056 -1.02072,-0.1491 -1.53444,-0.20079 -0.6375,-0.0693 -1.26877,-0.17516 -1.90283,-0.26768 -0.5627,-0.066 -1.12869,-0.10517 -1.68732,-0.19904 -0.47509,-0.0908 -0.95542,-0.13433 -1.43358,-0.20758 -0.52647,-0.0689 -1.06138,-0.0718 -1.58326,-0.17839 -0.59914,-0.11037 -1.20276,-0.1905 -1.8043,-0.28778 -0.75511,-0.0951 -1.50964,-0.19213 -2.26194,-0.30688 -0.70631,-0.12328 -1.41087,-0.25537 -2.10966,-0.41413 -0.57911,-0.11718 -1.16359,-0.2069 -1.74525,-0.311 -0.72723,-0.17701 -1.44596,-0.38821 -2.18396,-0.52235 -1.06708,-0.20681 -2.13971,-0.38182 -3.21062,-0.5684 -0.8349,-0.16093 -1.66819,-0.33348 -2.48137,-0.58007 -0.54145,-0.15389 -1.09086,-0.27658 -1.63682,-0.41441 -0.58566,-0.16094 -1.16837,-0.33794 -1.71013,-0.61182 -0.67533,-0.3603 -1.29111,-0.80929 -1.94369,-1.20567 -0.64719,-0.38862 -1.31306,-0.75329 -1.90688,-1.21827 -0.54839,-0.44894 -1.07602,-0.92378 -1.6722,-1.31515 -0.76064,-0.53873 -1.51368,-1.08901 -2.23347,-1.67835 -0.773,-0.66824 -1.54376,-1.3388 -2.31401,-2.00995 -0.66282,-0.55012 -1.36463,-1.05787 -1.98186,-1.65722 -0.40969,-0.45798 -0.82197,-0.92658 -1.05737,-1.49551 -0.22106,-0.53721 -0.45976,-1.07113 -0.6053,-1.6332 -0.22813,-0.72153 -0.48887,-1.43512 -0.66045,-2.17143 -0.12481,-0.70508 -0.25731,-1.4089 -0.29264,-2.12507 -0.0604,-0.52325 -0.14775,-1.04246 -0.11412,-1.57105 0.002,-0.41215 -0.005,-0.82504 0.0345,-1.23596 0.0407,-0.38495 0.14194,-0.76163 0.15792,-1.14612 9.8e-4,-0.43375 -5.5e-4,-0.86753 0.003,-1.30123 0.0126,-0.46959 0.037,-0.93894 0.0917,-1.40595 0.0814,-0.53313 0.15183,-1.0599 0.10791,-1.60118 9.8e-4,-0.53846 -0.003,-1.07694 0.003,-1.6154 -5.4e-4,-0.62097 0.005,-1.24193 9.8e-4,-1.86291 0.008,-0.57943 0.007,-1.16074 0.0812,-1.73679 0.0949,-0.53258 0.25613,-1.0495 0.31352,-1.58766 0.0227,-0.57166 0.0416,-1.14889 0.17967,-1.70776 0.12657,-0.53042 0.2274,-1.0614 0.2158,-1.60881 0.0306,-0.51178 0.12151,-1.01586 0.2344,-1.51646 0.0764,-0.59301 0.2045,-1.1753 0.29707,-1.76494 0.0723,-0.52962 0.0251,-1.06828 0.0847,-1.60032 0.0483,-0.45966 0.18217,-0.90472 0.18679,-1.36893 0.0764,-0.50681 0.22084,-0.99645 0.32457,-1.49741 0.10912,-0.62654 0.0973,-1.27003 0.21898,-1.89643 0.10097,-0.61305 0.11122,-1.23932 0.27023,-1.84367 0.06,-0.4631 0.15259,-0.91815 0.17606,-1.3858 0.0917,-0.60102 0.23237,-1.19376 0.27207,-1.80144 0.0821,-0.52851 0.14497,-1.06037 0.26769,-1.58181 0.13117,-0.38696 0.19548,-0.79399 0.27437,-1.19284 0.0952,-0.44285 0.11329,-0.88776 0.17052,-1.33719 0.0924,-0.55457 0.20489,-1.11 0.36952,-1.64845 0.15941,-0.41545 0.23886,-0.8511 0.38292,-1.27178 0.1608,-0.41447 0.21308,-0.85322 0.33142,-1.27945 0.14356,-0.47018 0.19872,-0.96576 0.33125,-1.43968 0.14398,-0.4339 0.29566,-0.86377 0.47772,-1.28466 1.15166,-2.20979 3.90594,-2.98767 6.01705,-4.12764 0.6696,-0.29066 1.37702,-0.48987 2.05694,-0.75666 0.85646,-0.29006 1.72802,-0.546 2.5523,-0.91727 0.45878,-0.18661 0.92348,-0.3654 1.42778,-0.38104 0.53448,0.004 1.06898,0.006 1.60346,0.008 0.72288,-2.7e-4 1.44651,0.006 2.16786,0.0552 1.23007,0.0997 2.45378,0.25082 3.66753,0.47125 0.84107,0.13968 1.68265,0.2774 2.52591,0.40427 0.29351,0.0442 1.0911,0.16351 1.42402,0.18671 0.1341,0.009 0.26887,-4e-4 0.40331,-5.3e-4 0,0 -4.65631,3.27304 -4.65631,3.27304 z"
-       inkscape:export-filename="/home/mario/projects/streamtuner2/streamtuner2.png"
-       inkscape:export-xdpi="34.827335"
-       inkscape:export-ydpi="34.827335" />
-    <path
-       style="fill:#000080"
-       d="m 96.985652,621.79155 c -11.854007,6.56748 2.693425,18.8678 -0.845426,26.82712 -3.334314,3.15724 -6.994803,10.40867 -10.412784,2.58573 -6.718999,-7.80346 -4.506918,-19.77619 4.85402,-24.37574 2.134727,-1.67904 4.269458,-3.35807 6.40419,-5.03711 z"
-       id="path2846"
-       inkscape:export-filename="/home/mario/projects/streamtuner2/streamtuner2.png"
-       inkscape:export-xdpi="34.827335"
-       inkscape:export-ydpi="34.827335" />
-    <path
-       style="fill:#000080"
-       d="m 77.440564,618.65 c -6.338736,14.13901 -5.219524,31.8856 4.977757,44.09886 8.318394,3.37328 13.744543,12.72694 3.339644,17.38869 -9.961201,-0.82915 -16.252188,-11.21405 -19.981371,-19.36768 -4.222883,-10.92369 -3.673202,-23.54949 1.720254,-34.00469 3.314569,-2.70506 6.629151,-5.4101 9.943716,-8.11518 z"
-       id="path2848"
-       inkscape:export-filename="/home/mario/projects/streamtuner2/streamtuner2.png"
-       inkscape:export-xdpi="34.827335"
-       inkscape:export-ydpi="34.827335" />
-    <path
-       style="fill:#000080"
-       d="m 53.736404,612.17619 c -8.721849,21.35331 -1.128674,45.83363 11.83398,64.00774 6.440283,8.7845 14.833648,16.40644 24.906093,21.13269 3.077913,10.02195 -13.657164,14.11377 -18.013838,4.97614 -20.348572,-14.50997 -32.075143,-38.47461 -33.045799,-62.69834 -0.9648,-10.62365 4.14459,-22.09619 14.111672,-27.24598 l 0.207892,-0.17225 0,0 z"
-       id="path2850"
-       inkscape:export-filename="/home/mario/projects/streamtuner2/streamtuner2.png"
-       inkscape:export-xdpi="34.827335"
-       inkscape:export-ydpi="34.827335" />
-    <path
-       style="fill:#000080"
-       d="m 207.58663,562.27004 c 11.57892,1.26635 16.95866,19.86556 1.83245,19.425 -4.54755,-3.12343 -7.96591,-10.3503 -11.50365,-12.82422 2.12067,-3.45964 6.98297,-3.71355 9.6712,-6.60078 z"
-       id="path2854"
-       inkscape:export-filename="/home/mario/projects/streamtuner2/streamtuner2.png"
-       inkscape:export-xdpi="34.827335"
-       inkscape:export-ydpi="34.827335" />
-    <path
-       style="fill:#000080"
-       d="m 217.23501,544.15617 c 14.38695,3.52994 27.23095,16.50139 26.27596,31.4792 -4.57995,7.30698 -16.77229,8.99611 -13.34994,-2.45251 -2.94691,-10.90094 -13.74455,-17.28628 -23.5751,-21.80439 3.31932,-2.71811 7.24207,-4.6188 10.64908,-7.2223 z"
-       id="path2860"
-       inkscape:export-filename="/home/mario/projects/streamtuner2/streamtuner2.png"
-       inkscape:export-xdpi="34.827335"
-       inkscape:export-ydpi="34.827335" />
-    <path
-       style="fill:#000080"
-       d="m 221.33791,522.54934 c 16.61138,4.26716 32.92854,12.63769 42.00268,27.29831 9.21703,12.61776 14.38282,28.59757 11.80687,43.94461 -4.25271,3.37789 -17.03033,10.55989 -13.05704,-0.90665 1.669,-19.43074 -9.93774,-37.56041 -24.04995,-50.54753 -5.39112,-7.88696 -23.84018,-6.62944 -24.8931,-14.66434 2.73013,-1.70821 5.46019,-3.41653 8.19054,-5.1244 z"
-       id="path2864"
-       inkscape:export-filename="/home/mario/projects/streamtuner2/streamtuner2.png"
-       inkscape:export-xdpi="34.827335"
-       inkscape:export-ydpi="34.827335" />
-    <path
-       sodipodi:type="star"
-       style="fill:#d40000;stroke:#00001d;stroke-width:4.4000001;stroke-miterlimit:4;stroke-opacity:0.77531649;stroke-dasharray:none"
-       id="path2912"
-       sodipodi:sides="5"
-       sodipodi:cx="303.57144"
-       sodipodi:cy="619.50507"
-       sodipodi:r1="26.467154"
-       sodipodi:r2="13.233577"
-       sodipodi:arg1="1.6247978"
-       sodipodi:arg2="2.2531164"
-       inkscape:flatsided="false"
-       inkscape:rounded="0"
-       inkscape:randomized="0"
-       d="m 302.14287,645.93364 -6.91646,-16.15784 -17.23149,-3.46251 13.22972,-11.57099 -2.03179,-17.45809 15.09288,9.00657 15.97577,-7.32718 -3.9018,17.13735 11.90535,12.92965 -17.50432,1.58489 -8.61786,15.31815 z"
-       transform="matrix(0.54272883,0,0,0.52508714,49.754637,335.93931)"
-       inkscape:export-filename="/home/mario/projects/streamtuner2/streamtuner2.png"
-       inkscape:export-xdpi="34.827335"
-       inkscape:export-ydpi="34.827335" />
-    <path
-       sodipodi:type="star"
-       style="fill:#00c900;fill-opacity:1;stroke:#00001d;stroke-width:5.75574923;stroke-miterlimit:4;stroke-opacity:0.77531649;stroke-dasharray:none"
-       id="path3686"
-       sodipodi:sides="3"
-       sodipodi:cx="311.42856"
-       sodipodi:cy="536.64789"
-       sodipodi:r1="30.388639"
-       sodipodi:r2="15.19432"
-       sodipodi:arg1="0.51623067"
-       sodipodi:arg2="1.5634282"
-       inkscape:flatsided="false"
-       inkscape:rounded="0"
-       inkscape:randomized="0"
-       d="m 337.85713,551.64789 -26.31662,0.19391 -26.31662,0.1939 12.99038,-22.88781 12.99038,-22.88782 13.32624,22.69391 13.32624,22.69391 z"
-       transform="matrix(-0.00435504,0.39786054,-0.43370262,-0.00454164,451.04708,513.6064)"
-       inkscape:transform-center-x="6.0909556"
-       inkscape:transform-center-y="-4.3026555"
-       inkscape:export-filename="/home/mario/projects/streamtuner2/streamtuner2.png"
-       inkscape:export-xdpi="34.827335"
-       inkscape:export-ydpi="34.827335" />
-    <path
-       style="fill:#ffff00;fill-opacity:1;stroke:#000003;stroke-width:0.9075197;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       id="path3698"
-       d="m 142.57262,537.11562 c -0.1057,0.12151 -0.21141,0.24303 -0.31711,0.36454 0,0 -4.55104,1.87325 -4.55104,1.87325 l 0,0 c 0.0959,-0.11482 0.1918,-0.22965 0.28771,-0.34447 0,0 4.58044,-1.89332 4.58044,-1.89332 z"
-       inkscape:export-filename="/home/mario/projects/streamtuner2/streamtuner2.png"
-       inkscape:export-xdpi="34.827335"
-       inkscape:export-ydpi="34.827335" />
-    <path
-       style="fill:#ffff00;fill-opacity:1;stroke:#000003;stroke-width:0.9075197;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       id="path3700"
-       d="m 144.68078,529.44332 c 0.16371,0.59506 0.0811,0.28645 0.2469,0.92606 0,0 -4.34074,2.27615 -4.34074,2.27615 l 0,0 c -0.17023,-0.61108 -0.079,-0.31909 -0.26983,-0.87706 0,0 4.36367,-2.32515 4.36367,-2.32515 z"
-       inkscape:export-filename="/home/mario/projects/streamtuner2/streamtuner2.png"
-       inkscape:export-xdpi="34.827335"
-       inkscape:export-ydpi="34.827335" />
-    <path
-       style="fill:#ffff00;fill-opacity:1;stroke:#000003;stroke-width:0.9075197;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       id="path3702"
-       d="m 144.31464,520.72505 c 0.2126,0.41391 0.39803,0.83965 0.59899,1.2589 0,0 -4.29637,2.35489 -4.29637,2.35489 l 0,0 c -0.19999,-0.40083 -0.37742,-0.81365 -0.6166,-1.19469 0,0 4.31398,-2.4191 4.31398,-2.4191 z"
-       inkscape:export-filename="/home/mario/projects/streamtuner2/streamtuner2.png"
-       inkscape:export-xdpi="34.827335"
-       inkscape:export-ydpi="34.827335" />
-    <path
-       style="fill:#ffff00;fill-opacity:1;stroke:#000003;stroke-width:0.9075197;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       id="path3704"
-       d="m 153.5702,519.7244 c 0.0992,1.01947 0.26776,2.02764 0.44955,3.03565 0.16526,0.87561 0.23707,1.76258 0.27344,2.65074 -0.01,0.15265 -0.0192,0.3053 -0.0287,0.45795 0,0 -4.43092,2.13787 -4.43092,2.13787 l 0,0 c 0.0162,-0.13459 0.0322,-0.26916 0.0484,-0.40373 -0.0227,-0.87188 -0.0706,-1.74414 -0.21754,-2.60603 -0.17028,-1.00437 -0.35121,-2.00501 -0.49691,-3.0127 0,0 4.40273,-2.25975 4.40273,-2.25975 z"
-       inkscape:export-filename="/home/mario/projects/streamtuner2/streamtuner2.png"
-       inkscape:export-xdpi="34.827335"
-       inkscape:export-ydpi="34.827335" />
-    <path
-       style="fill:#ffff00;fill-opacity:1;stroke:#000003;stroke-width:0.9075197;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       id="path3706"
-       d="m 152.37607,532.55855 c -0.11673,1.06767 -0.2182,2.13683 -0.4228,3.19264 -0.13487,0.62687 -0.36866,1.22021 -0.63697,1.80267 0,0 -4.49404,1.98339 -4.49404,1.98339 l 0,0 c 0.27345,-0.55223 0.524,-1.10743 0.68784,-1.70128 0.22317,-1.02078 0.35105,-2.05108 0.43276,-3.09201 0,0 4.43321,-2.18541 4.43321,-2.18541 z"
-       inkscape:export-filename="/home/mario/projects/streamtuner2/streamtuner2.png"
-       inkscape:export-xdpi="34.827335"
-       inkscape:export-ydpi="34.827335" />
-    <path
-       style="fill:#ffff00;fill-opacity:1;stroke:#000003;stroke-width:0.9075197;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       id="path3708"
-       d="m 145.25261,546.92113 c -1.58432,0.99664 0.18585,-0.12446 3.57615,-1.96034 0.14449,-0.0783 -0.27581,0.17753 -0.40996,0.27145 -0.43195,0.30248 -0.83561,0.64156 -1.2487,0.9672 -0.80913,0.49518 -1.38433,1.18124 -1.95054,1.90917 0,0 -4.54608,1.89317 -4.54608,1.89317 l 0,0 c 0.58063,-0.73827 1.06884,-1.53659 1.91408,-2.02845 2.19364,-1.59662 3.46279,-3.04163 6.58777,-4.03661 0,0 -3.92272,2.98441 -3.92272,2.98441 z"
-       inkscape:export-filename="/home/mario/projects/streamtuner2/streamtuner2.png"
-       inkscape:export-xdpi="34.827335"
-       inkscape:export-ydpi="34.827335" />
-    <path
-       style="fill:#ffff00;fill-opacity:1;stroke:#000003;stroke-width:0.9075197;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       id="path3710"
-       d="m 164.78131,519.05631 c -0.0551,1.22419 0.10846,2.4486 0.34539,3.64881 0.22887,0.96717 0.32664,1.95356 0.38626,2.94193 0,0 -4.39741,2.19436 -4.39741,2.19436 l 0,0 c -0.0408,-0.97264 -0.12416,-1.94299 -0.33021,-2.89783 -0.22955,-1.22291 -0.38677,-2.45916 -0.43724,-3.70186 0,0 4.43321,-2.18541 4.43321,-2.18541 z"
-       inkscape:export-filename="/home/mario/projects/streamtuner2/streamtuner2.png"
-       inkscape:export-xdpi="34.827335"
-       inkscape:export-ydpi="34.827335" />
-    <path
-       style="fill:#ffff00;fill-opacity:1;stroke:#000003;stroke-width:0.9075197;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       id="path3712"
-       d="m 163.2064,534.04772 c -0.28175,1.13471 -0.54939,2.27282 -0.81162,3.412 -0.2281,1.12437 -0.79881,2.10416 -1.44495,3.04606 -0.1195,0.17497 -0.23899,0.34995 -0.35848,0.52494 0,0 -4.49735,1.91011 -4.49735,1.91011 l 0,0 c 0.11573,-0.1756 0.23148,-0.3512 0.34721,-0.5268 0.62822,-0.90533 1.27046,-1.79904 1.51808,-2.8858 0.26184,-1.12056 0.54863,-2.23347 0.76966,-3.36266 0,0 4.47745,-2.11785 4.47745,-2.11785 z"
-       inkscape:export-filename="/home/mario/projects/streamtuner2/streamtuner2.png"
-       inkscape:export-xdpi="34.827335"
-       inkscape:export-ydpi="34.827335" />
-    <path
-       style="fill:#ffff00;fill-opacity:1;stroke:#000003;stroke-width:0.9075197;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       id="path3714"
-       d="m 157.75869,549.05094 c -0.35965,1.0623 -0.99757,1.98078 -1.68316,2.86797 -0.42645,0.54305 -0.9507,0.98745 -1.56215,1.32467 -4.47488,2.4679 -3.07682,1.78494 -5.03913,2.7319 -0.53511,0.21343 -0.27228,0.0974 -0.78855,0.34782 0,0 3.87359,-2.9875 3.87359,-2.9875 l 0,0 c 0.52669,-0.23326 0.26547,-0.1161 0.78371,-0.35138 1.74381,-0.82526 0.38261,-0.19256 -3.4472,1.97777 -0.13415,0.076 0.27222,-0.14532 0.4081,-0.21839 0.4745,-0.25518 0.9111,-0.53336 1.25736,-0.94969 0.67786,-0.8244 1.38603,-1.67914 1.66808,-2.71651 0,0 4.52935,-2.02666 4.52935,-2.02666 z"
-       inkscape:export-filename="/home/mario/projects/streamtuner2/streamtuner2.png"
-       inkscape:export-xdpi="34.827335"
-       inkscape:export-ydpi="34.827335" />
-    <path
-       style="fill:#ffff00;fill-opacity:1;stroke:#000003;stroke-width:0.9075197;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       id="path3716"
-       d="m 118.16366,524.34194 c -0.74265,0.73881 -1.3863,1.55986 -1.97605,2.41596 -0.0805,0.14353 -0.16095,0.28706 -0.24144,0.4306 0,0 -4.49458,1.97131 -4.49458,1.97131 l 0,0 c 0.0753,-0.1636 0.15057,-0.32719 0.22584,-0.49078 0.58365,-0.86048 1.19412,-1.69111 1.87811,-2.48038 0,0 4.60812,-1.84671 4.60812,-1.84671 z"
-       inkscape:export-filename="/home/mario/projects/streamtuner2/streamtuner2.png"
-       inkscape:export-xdpi="34.827335"
-       inkscape:export-ydpi="34.827335" />
-    <path
-       style="fill:#ffff00;fill-opacity:1;stroke:#000003;stroke-width:0.9075197;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       id="path3718"
-       d="m 117.07445,534.42278 c -0.20545,1.0372 -0.27668,2.09384 -0.33072,3.14691 -0.006,0.15401 -0.0115,0.30801 -0.0172,0.46202 0,0 -4.41406,2.15532 -4.41406,2.15532 l 0,0 c 0.007,-0.15683 0.0132,-0.31365 0.0199,-0.47048 0.0593,-1.06095 0.15543,-2.11877 0.26463,-3.17591 0,0 4.47746,-2.11786 4.47746,-2.11786 z"
-       inkscape:export-filename="/home/mario/projects/streamtuner2/streamtuner2.png"
-       inkscape:export-xdpi="34.827335"
-       inkscape:export-ydpi="34.827335" />
-    <path
-       style="fill:#ffff00;fill-opacity:1;stroke:#000003;stroke-width:0.9075197;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       id="path3720"
-       d="m 105.11226,526.85059 c 0.13003,0.95907 0.2295,1.92101 0.29313,2.88627 0.003,0.81231 0.0767,1.60897 0.21587,2.40877 0.10179,0.50708 0.28397,0.98169 0.51917,1.4428 0,0 -4.3046,2.37247 -4.3046,2.37247 l 0,0 c -0.26458,-0.50107 -0.471,-1.01411 -0.59645,-1.56583 -0.14086,-0.8189 -0.25888,-1.62831 -0.22761,-2.46237 -0.0467,-0.94497 -0.1135,-1.89238 -0.30223,-2.82237 0,0 4.40272,-2.25974 4.40272,-2.25974 z"
-       inkscape:export-filename="/home/mario/projects/streamtuner2/streamtuner2.png"
-       inkscape:export-xdpi="34.827335"
-       inkscape:export-ydpi="34.827335" />
-    <path
-       style="fill:#ffff00;fill-opacity:1;stroke:#000003;stroke-width:0.9075197;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       id="path3722"
-       d="m 109.42494,541.35347 c 0.54978,0.93 1.27463,1.74623 2.00612,2.54483 0.58809,0.65376 1.3007,1.18691 1.97597,1.7522 0,0 -4.19047,2.52506 -4.19047,2.52506 l 0,0 c -0.69119,-0.5777 -1.40514,-1.13791 -1.99736,-1.81517 -0.74931,-0.82625 -1.47244,-1.67529 -2.10825,-2.58782 0,0 4.31399,-2.4191 4.31399,-2.4191 z"
-       inkscape:export-filename="/home/mario/projects/streamtuner2/streamtuner2.png"
-       inkscape:export-xdpi="34.827335"
-       inkscape:export-ydpi="34.827335" />
-    <path
-       style="fill:#ffff00;fill-opacity:1;stroke:#000003;stroke-width:0.9075197;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       id="path3724"
-       d="m 94.20231,523.92104 c -0.310647,1.0936 -0.519327,2.20553 -0.647877,3.33177 -0.08749,0.87971 -0.148442,1.75899 -0.02171,2.63617 0.05492,0.57105 0.277156,1.09795 0.498382,1.62318 0,0 -4.300979,2.33659 -4.300979,2.33659 l 0,0 c -0.255468,-0.55287 -0.523467,-1.10759 -0.581247,-1.71944 -0.148636,-0.92017 -0.117408,-1.83389 -0.0064,-2.75968 0.124817,-1.12163 0.302424,-2.23441 0.582294,-3.33074 0,0 4.477453,-2.11785 4.477453,-2.11785 z"
-       inkscape:export-filename="/home/mario/projects/streamtuner2/streamtuner2.png"
-       inkscape:export-xdpi="34.827335"
-       inkscape:export-ydpi="34.827335" />
-    <path
-       style="fill:#ffff00;fill-opacity:1;stroke:#000003;stroke-width:0.9075197;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       id="path3726"
-       d="m 97.046838,539.45154 c 0.57729,0.83835 1.034849,1.7452 1.577301,2.60376 0.258907,0.45152 0.63233,0.79472 1.027417,1.13035 0,0 -4.193388,2.51194 -4.193388,2.51194 l 0,0 c -0.413781,-0.3777 -0.820209,-0.75884 -1.102189,-1.24483 -0.52984,-0.84185 -0.960174,-1.74599 -1.584655,-2.52888 0,0 4.275514,-2.47234 4.275514,-2.47234 z"
-       inkscape:export-filename="/home/mario/projects/streamtuner2/streamtuner2.png"
-       inkscape:export-xdpi="34.827335"
-       inkscape:export-ydpi="34.827335" />
-    <path
-       style="fill:#ffff00;fill-opacity:1;stroke:#000003;stroke-width:0.9075197;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       id="path3728"
-       d="m 104.39401,550.83643 c 1.03025,0.46004 2.0318,0.96372 3.00633,1.52574 0.66607,0.42254 1.32962,0.8483 1.99181,1.27674 0,0 -4.15295,2.57069 -4.15295,2.57069 l 0,0 c -0.65114,-0.42503 -1.29508,-0.86155 -1.96478,-1.25888 -0.97299,-0.5426 -1.96723,-1.05749 -3.02631,-1.42705 0,0 4.1459,-2.68724 4.1459,-2.68724 z"
-       inkscape:export-filename="/home/mario/projects/streamtuner2/streamtuner2.png"
-       inkscape:export-xdpi="34.827335"
-       inkscape:export-ydpi="34.827335" />
-    <flowRoot
-       xml:space="preserve"
-       id="flowRoot3751-8"
-       style="font-size:23.99033356px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#800000;fill-opacity:1;stroke:#b62403;stroke-width:0.94034731;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:0.06329112;stroke-dasharray:none;font-family:Vitamin;-inkscape-font-specification:Vitamin"
-       transform="matrix(11.116711,0,0,13.532321,-1860.9616,-2435.4198)"><flowRegion
-         id="flowRegion3753-0"
-         style="fill:url(#linearGradient3714);fill-opacity:1"><rect
-           id="rect3755-9"
-           width="749.5332"
-           height="228.29448"
-           x="295.9747"
-           y="238.00806"
-           style="font-size:23.99033356px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#800000;fill-opacity:1;stroke:#b62403;stroke-width:0.94034731;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:0.06329112;stroke-dasharray:none;font-family:Vitamin;-inkscape-font-specification:Vitamin" /></flowRegion><flowPara
-         id="flowPara3775"
-         style="fill:#800000">2</flowPara></flowRoot>    <flowRoot
-       xml:space="preserve"
-       id="flowRoot3751"
-       style="font-size:23.99033345px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;fill:url(#linearGradient3666);fill-opacity:1;stroke:#b62403;stroke-width:0.94034733999999998;stroke-miterlimit:0;stroke-opacity:0.06329114000000000;stroke-dasharray:none;font-family:Vitamin;-inkscape-font-specification:Vitamin;stroke-linejoin:round;opacity:1"
-       transform="matrix(3.0976782,0,0,8.1747889,-638.23739,-1459.4688)"
-       inkscape:export-xdpi="34.827335"
-       inkscape:export-ydpi="34.827335"
-       inkscape:export-filename="/home/mario/projects/streamtuner2/streamtuner2.png"><flowRegion
-         id="flowRegion3753"
-         style="fill-opacity:1.0;fill:url(#linearGradient3666)"><rect
-           id="rect3755"
-           width="749.5332"
-           height="228.29448"
-           x="295.9747"
-           y="238.00806"
-           style="font-size:23.99033345px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;fill:url(#linearGradient3666);fill-opacity:1;stroke:#b62403;stroke-width:0.94034733999999998;stroke-miterlimit:0;stroke-opacity:0.06329114000000000;stroke-dasharray:none;font-family:Vitamin;-inkscape-font-specification:Vitamin;stroke-linejoin:round" /></flowRegion><flowPara
-         id="flowPara3777">streamtuner</flowPara></flowRoot>    <flowRoot
-       xml:space="preserve"
-       id="flowRoot3759"
-       style="fill:black;stroke:none;stroke-opacity:1;stroke-width:1px;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:1;font-family:Bitstream Vera Sans;font-style:normal;font-weight:normal;font-size:40px"><flowRegion
-         id="flowRegion3761"><rect
-           id="rect3763"
-           width="188.89853"
-           height="448.50772"
-           x="440.42651"
-           y="268.31262" /></flowRegion><flowPara
-         id="flowPara3765" /></flowRoot>    <path
-       style="font-size:23.99033355999999984px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#c83737;fill-opacity:1;stroke:#b62403;stroke-width:11.53353882000000041;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:0.06329112000000001;stroke-dasharray:none;font-family:Vitamin;-inkscape-font-specification:Vitamin"
-       d="m 928.72602,504.29395 c -19.73542,2e-4 -38.15043,3.12998 -55.21875,9.40625 -24.35805,9.09023 -36.53127,22.63023 -36.53125,40.59375 -2e-5,6.9259 1.86002,13.18546 5.59375,18.8125 0.23591,0.32634 0.47702,0.66209 0.71875,0.96875 0.26843,-0.19091 0.53604,-0.38291 0.8125,-0.5625 2.72484,-1.8303 8.02891,-3.61272 15.90625,-5.3125 6.44054,-1.43807 10.37571,-2.15613 11.8125,-2.15625 4.64411,10e-5 8.25151,1.73768 10.84375,5.21875 8.78519,-4.80586 15.6315,-7.21863 20.46875,-7.21875 6.57835,1.4e-4 10.92886,4.21562 13.0625,12.65625 -5.31222,6.2706 -14.526,13.70447 -27.5625,22.28125 0.0182,0.97693 0.0625,1.94676 0.0625,2.96875 -6e-5,8.62917 -2.48327,19.85995 -7.4375,33.71875 0.099,1.69972 1.41076,4.83025 3.9375,9.40625 2.52663,4.44533 3.78119,8.64021 3.78125,12.5625 -6e-5,4.44531 -0.91697,9.15675 -2.75,14.125 -0.69366,1.96117 -2.54044,6.06805 -5.5625,12.34375 -2.27902,4.83752 -3.83236,8.88764 -4.625,12.15625 l -2.8125,0.78125 c -1.43679,-10e-6 -4.59529,-4.05014 -9.5,-12.15625 -4.85523,-7.97538 -8.25536,-11.96874 -10.1875,-11.96875 l -1.5625,2.375 c -0.0496,1.96116 -0.0938,7.39066 -0.0937,16.28125 -2e-5,5.30689 -1.05899,9.55025 -3.1875,12.78125 1.14396,1.76612 2.37481,3.48738 3.75,5.125 8.35636,9.95576 18.49388,14.93748 30.40625,14.9375 10.31208,-2e-5 32.44717,-8.33491 66.40625,-25 35.55898,-17.53081 53.34348,-30.43188 53.34358,-38.65625 -10e-5,-11.25431 -2.4184,-21.5372 -7.21858,-30.84375 -5.51184,-10.82141 -12.60067,-16.21866 -21.3125,-16.21875 -9.06773,9e-5 -23.83487,4.43896 -44.28125,13.3125 2.31123,-8.87354 12.09744,-20.33821 29.34375,-34.40625 15.82366,-12.98567 23.71859,-23.1725 23.71875,-30.53125 -1.6e-4,-17.09781 -5.58028,-31.1494 -16.78125,-42.1875 -10.49013,-10.38845 -22.94247,-15.59355 -37.3438,-15.59375 z M 860.56977,619.5127 c -2.86755,2.6421 -5.24219,5.1412 -7.0625,7.5 -1.53007,2.01155 -2.92078,4.13905 -4.1875,6.375 0.0923,2.97668 0.25008,6.02366 0.5,9.15625 0.59449,7.19095 1.44128,10.78128 2.53125,10.78125 1.78352,3e-5 3.94203,-3.53354 6.46875,-10.59375 2.5762,-7.06013 3.84371,-12.94942 3.84375,-17.65625 -4e-5,-2.22259 -0.59226,-3.97375 -1.78125,-5.28125 -0.0994,-0.11047 -0.21252,-0.18244 -0.3125,-0.28125 z"
-       id="flowRoot3751-8-2"
-       inkscape:export-xdpi="34.827335"
-       inkscape:export-ydpi="34.827335"
-       inkscape:export-filename="/home/mario/projects/streamtuner2/streamtuner2.png" />
-    <path
-       style="fill:#999999;fill-opacity:1;stroke:#b62403;stroke-width:4.73199987;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:0.06329112;stroke-dasharray:none"
-       id="path3827"
-       d="m 129.45955,308.93752 c -0.0258,0.89112 -0.0221,1.78297 -0.0188,2.67439 0.0308,0.69306 -0.0862,1.37897 -0.16108,2.06541 -0.0535,0.50374 -0.0651,1.01036 -0.0718,1.51645 0.004,0.42773 -0.018,0.85657 0.008,1.28385 -2.71343,1.47525 -2.44019,1.79629 -2.42142,0.24758 0.001,-0.63093 -0.0123,-1.25903 0.0658,-1.88594 0.0944,-0.65302 0.39133,-1.21682 0.74325,-1.76341 0.43702,-0.63733 0.93735,-1.22645 1.53129,-1.72167 0.83587,-0.478 1.63819,-1.02019 2.50762,-1.43401 0.0766,-0.0365 0.16176,0.0715 0.21332,0.13893 0.29986,0.39201 0.15763,1.03655 0.1061,1.47617 -0.11576,0.72399 -0.33006,1.42401 -0.53297,2.12643 -0.0783,0.48447 -0.36526,0.94977 -0.30338,1.44848 0.0131,0.0224 0.0358,0.0928 0.0393,0.0671 0.11598,-0.84216 -1.53866,0.72375 -2.29931,1.10335 -0.0702,0.035 0.0998,-0.12182 0.13937,-0.18952 0.11934,-0.20418 0.16631,-0.37489 0.24533,-0.59903 0.19445,-0.77269 0.28912,-1.56641 0.458,-2.34489 0.3879,-1.16924 0.86668,-1.09943 2.61792,-1.84882 0.17067,-0.073 0.28722,0.90098 0.29201,0.93931 0.0922,0.37599 0.0978,1.4687 0.38645,1.7305 0.0237,0.0215 0.0639,-0.004 0.0958,-0.005 0.30772,-0.98842 0.013,0.10091 -2.12879,1.01512 -0.10572,0.0451 0.0947,-0.20958 0.13706,-0.31645 0.16552,-0.41762 0.31487,-0.83662 0.49483,-1.24881 0.21356,-0.4138 0.78433,-1.56376 1.17676,-1.78765 0.83433,-0.47599 1.6944,-0.90537 2.54159,-1.35805 0.0767,0.0759 0.16838,0.13918 0.2301,0.22769 0.38178,0.54752 0.33853,1.38774 0.37376,2.01835 0.0288,0.77962 0.0327,1.55984 0.0337,2.3399 0.15085,1.06269 1.63271,-0.40686 -2.29127,1.34869 -0.0614,0.0275 0.10161,-0.0904 0.1388,-0.14648 0.0714,-0.10767 0.28257,-0.57173 0.32421,-0.66064 0.39934,-0.82689 0.68475,-1.7011 1.02186,-2.55359 0.41383,-0.96023 2.36491,-2.40939 2.68157,-1.15221 0.10726,0.42582 0.0794,0.91858 0.11413,1.35347 0.1,0.87151 0.11126,1.75575 0.33303,2.60843 0.0199,0.0164 0.0549,0.0745 0.0596,0.0491 0.1495,-0.80223 -1.48627,0.67432 -2.23012,1.00992 -0.0899,0.0405 0.0779,-0.18133 0.11122,-0.27414 0.11177,-0.31131 0.15074,-0.477 0.23959,-0.7988 0.25541,-0.69093 0.29881,-1.45987 0.66054,-2.1089 0.81987,-0.44781 1.59264,-0.99545 2.45961,-1.34343 0.10315,-0.0414 0.1169,0.18968 0.16371,0.2905 0.21759,0.46868 0.25176,1.03042 0.31924,1.53452 0.064,0.38857 0.0399,0.80861 0.19402,1.17964 0.0258,0.062 0.0595,0.12807 0.11555,0.16514 0.0261,0.0173 0.11686,-0.0442 0.0891,-0.0298 -0.74688,0.38669 -1.49816,0.7648 -2.24724,1.1472 0.51134,-0.57059 0.87153,-1.26111 1.27206,-1.91081 0.44222,-0.58395 0.75147,-1.26241 1.20285,-1.83827 0.83801,-0.39272 1.6324,-0.89668 2.51402,-1.17816 0.11361,-0.0363 0.0892,0.22238 0.11462,0.33891 0.14888,0.68394 0.0981,1.44267 0.11105,2.13769 0.10884,0.87054 -0.17778,1.86212 0.15454,2.69842 0.54023,-0.76742 -0.113,0.18418 -2.1935,1.0728 -0.10313,0.0441 0.14337,-0.17383 0.19927,-0.27105 0.0718,-0.12492 0.12381,-0.26028 0.18203,-0.3921 0.14379,-0.32556 0.31544,-0.75327 0.44814,-1.07826 0.44266,-1.07017 0.88148,-2.14599 1.49447,-3.13179 0.74831,-0.96086 0.52512,-0.74367 2.69978,-1.70216 0.0997,-0.0439 0.16776,0.1445 0.2244,0.23754 0.2373,0.38979 0.27884,0.92662 0.35289,1.36296 0.0863,0.51597 0.18162,1.03041 0.26125,1.54749 0.002,0.0128 0.0591,0.64747 0.14228,0.70987 -0.79801,0.38002 -1.56086,0.84498 -2.39403,1.14007 -0.0959,0.034 0.0253,-0.20206 0.0323,-0.30359 0.0103,-0.15028 0.015,-0.30092 0.0196,-0.45149 0.0173,-0.56607 0.0174,-1.13266 0.0175,-1.69892 -0.005,-0.47938 -0.004,-0.9589 -0.0129,-1.43824 -0.002,-0.10423 -0.004,-0.20847 -0.009,-0.31262 -0.002,-0.053 -0.0599,-0.13645 -0.0118,-0.15882 0.78602,-0.3652 1.61131,-0.63913 2.41697,-0.95869 -0.0358,1.12808 -0.0304,2.25689 -0.0209,3.38533 0.12666,1.51241 0.69592,0.53861 -2.20257,1.82567 -0.0605,0.0269 0.10475,-0.0839 0.14282,-0.13804 0.0592,-0.0842 0.0971,-0.18159 0.14562,-0.27239 0.50306,-1.24448 0.74396,-1.11763 2.72597,-1.98405 0.18049,-0.0789 0.54758,0.77951 0.58226,0.85904 0.047,0.14216 0.0936,0.28447 0.14104,0.42649 0.0292,0.0874 0.15001,0.5166 0.25792,0.61656 0.022,0.0204 0.10572,-0.0567 0.0789,-0.0432 -2.3696,1.19526 -2.57574,1.95202 -2.1722,0.86394 0.11492,-0.73168 0.19397,-1.48468 0.15219,-2.22676 3.53205,-1.51372 2.04772,-1.37633 2.52539,0.71265 0.0915,-0.94915 0.014,0.13127 -2.27192,1.05076 -0.0947,0.0381 0.0936,-0.1822 0.12793,-0.27836 0.13951,-0.39033 0.19646,-0.814 0.283,-1.21787 0.29762,-1.1677 -0.0251,-0.90382 2.61767,-1.33408 0.17109,-0.0279 -0.004,0.34681 -0.0157,0.51978 -0.003,0.053 -0.12578,1.33385 -0.12751,1.35205 -0.0198,0.22607 -0.0358,0.45248 -0.0593,0.67819 -0.001,0.0105 -0.16358,1.21034 -0.18154,1.21874 -2.67855,1.25198 -2.51662,1.8636 -2.47218,0.41477 0.15132,-1.72212 0.40927,-3.43482 0.64474,-5.1476 0.18826,-1.06023 0.055,-0.69503 2.52102,-1.18293 0.14853,-0.0294 0.0289,0.30151 0.0376,0.45267 0.0301,0.51966 0.0304,1.04188 0.0376,1.5622 -0.0412,1.35585 -0.35776,1.06662 -2.50933,1.90717 -0.11122,0.0435 -0.35144,-0.98525 -0.3681,-1.05579 -0.10504,-0.68175 -0.26285,-1.35527 -0.39832,-2.02995 -0.0138,-0.0685 0.0389,0.13414 0.0584,0.20121 0.75844,-0.39968 1.46443,-0.92077 2.27532,-1.19903 0.13691,-0.047 -0.0313,0.28787 -0.0409,0.43229 -0.0148,0.22277 -0.0239,0.44589 -0.0321,0.669 -0.036,0.98355 -0.039,1.96769 -0.0453,2.95175 0.004,0.83236 0.001,1.66498 0.0306,2.49698 0.005,0.12919 0.009,0.25845 0.0192,0.38735 0.003,0.0419 0.0574,0.10539 0.0199,0.12453 -0.78894,0.40343 -1.61269,0.73485 -2.41903,1.10228 0.24156,-0.85847 0.416,-1.7331 0.67817,-2.58629 0.11218,-0.17362 0.41626,-1.3933 0.55135,-1.47165 2.53053,-1.46749 2.21275,-2.15971 2.55691,-0.93625 0.004,0.87699 -0.0777,1.75031 -0.13704,2.62405 0.0984,1.11565 0.77889,0.11046 -2.35151,1.40547 -0.064,0.0265 0.0538,-0.12808 0.0715,-0.19503 0.0397,-0.15038 0.12335,-0.63238 0.14743,-0.7655 0.11184,-0.82462 0.20999,-1.65158 0.3901,-2.46489 0.38284,-1.02436 1.98738,-2.45898 2.81782,-1.51877 0.30723,0.34784 0.42014,0.8015 0.54417,1.23331 0.32844,0.8646 0.31509,1.89826 0.80727,2.69411 0.0385,0.01 0.0881,0.0586 0.1156,0.0298 0.0438,-0.0459 0.0922,-0.214 0.0346,-0.1872 -0.74741,0.34821 -1.41278,0.86227 -2.17233,1.18312 -0.10612,0.0448 0.0954,-0.21035 0.12978,-0.32029 0.063,-0.20151 0.17295,-0.75122 0.21275,-0.94038 0.18327,-0.77827 0.20304,-1.58626 0.4074,-2.35967 1.68697,-0.84485 2.31788,-2.16241 2.52814,-0.95686 0.0758,0.43439 0.0569,0.89657 0.0666,1.33556 0.0242,1.43722 0.29318,1.07981 -2.40501,1.84688 -0.13665,0.0389 0.0158,-0.2837 0.021,-0.42567 0.008,-0.23263 0.0132,-0.46537 0.0198,-0.69806 -0.009,-1.80418 0.0703,-3.60763 0.0809,-5.41116 -0.0461,-1.51797 -0.43695,-1.0827 2.34756,-1.89326 0.12666,-0.0369 -0.0227,0.26291 -0.03,0.39463 -0.0112,0.20199 -0.0171,0.40425 -0.0256,0.60638 -0.033,1.38469 -0.0307,2.77014 -0.0208,4.15513 0.007,0.45417 0.006,0.9085 0.0148,1.36266 0.002,0.0942 0.004,0.18837 0.008,0.28246 0.002,0.0446 0.0503,0.11226 0.011,0.13338 -0.79298,0.42629 -1.62305,0.77964 -2.43458,1.16946 0.18992,-0.95129 0.30703,-1.91374 0.44479,-2.87364 0.16328,-0.88082 0.20132,-1.7781 0.35237,-2.66008 0.79262,-0.48849 1.49855,-1.1594 2.37785,-1.46549 0.18961,-0.066 0.15705,0.37276 0.19478,0.56995 0.0476,0.24864 0.0362,0.50503 0.0591,0.75714 0.10383,1.14244 0.22997,2.28301 0.33702,3.42521 0.21636,1.51785 0.12457,3.09113 0.49453,4.58652 0.81026,0.47361 0.19057,0.0894 -2.29773,1.17935 -0.0576,0.0252 0.0791,-0.0998 0.10351,-0.15778 0.0426,-0.1013 0.0672,-0.20935 0.0956,-0.31553 0.0877,-0.32889 0.1049,-0.45713 0.16787,-0.79415 0.0992,-0.42256 0.15446,-0.85356 0.17958,-1.28646 0.004,-0.064 -0.0575,-0.20985 0.004,-0.1923 0.0768,0.0219 0.0629,0.14689 0.0943,0.22033 0.75335,-0.40132 1.5067,-0.80265 2.26005,-1.20397 -0.27426,0.92636 -0.51061,1.87288 -0.48872,2.8436 0.16202,0.89946 0.83202,0.12605 -2.29197,1.35435 -0.0865,0.034 0.0507,-0.17926 0.0652,-0.27103 0.0497,-0.31346 0.0639,-0.68461 0.0831,-0.99736 0.0743,-0.97266 0.16517,-1.94758 0.35473,-2.90571 0.82646,-0.35068 1.5988,-0.87714 2.47938,-1.05203 0.1816,-0.0361 0.0189,0.36984 0.0236,0.55493 0.006,0.2537 0.007,0.50752 0.01,0.76128 0.0106,0.81485 0.0209,1.62969 0.0332,2.44452 -0.30132,0.25041 0.16866,0.49365 0.10417,0.73128 -0.0186,0.0686 0.004,-0.23234 -0.0617,-0.20403 -0.78213,0.33967 -1.46215,0.89334 -2.254,1.2097 -0.11588,0.0463 0.0827,-0.23565 0.11653,-0.35576 0.0448,-0.15881 0.0794,-0.32031 0.11912,-0.48046 0.14075,-0.81324 0.27909,-1.62649 0.42847,-2.43831 0.83208,-0.35693 1.63032,-0.80635 2.49624,-1.07081 0.0955,-0.0292 0.0285,0.1979 0.0358,0.29752 0.01,0.13531 0.0119,0.2711 0.0159,0.40671 0.0125,0.43326 0.0134,0.86617 0.0332,1.29921 0.12708,0.98732 0.10815,0.5063 -2.3958,1.21707 -0.14504,0.0412 0.0835,-0.28975 0.12429,-0.4349 0.25949,-0.92348 0.46159,-1.85253 0.65896,-2.79119 0.47901,-1.78531 0.77033,-3.62411 1.2734,-5.40221 0.44999,-1.02256 0.23476,-0.65384 2.5641,-1.49814 0.11494,-0.0417 0.10475,0.22268 0.13431,0.34131 0.11284,0.45288 0.0884,0.97075 0.10643,1.43276 0.0357,0.76327 0.0181,1.52811 0.0525,2.29131 0.004,0.0123 0.0222,0.0314 0.0106,0.0368 -2.65099,1.25706 -2.45622,1.99917 -2.43232,0.85883 0.007,-0.3561 0.007,-0.71246 0.008,-1.06861 -0.0219,-1.25352 -0.26781,-0.69656 2.40162,-1.55793 0.11243,-0.0363 -0.0493,0.23108 -0.0717,0.34707 -0.10065,0.52092 -0.15285,0.83215 -0.24604,1.36266 -0.1203,0.70791 -0.21262,1.4202 -0.28869,2.13411 -0.0257,0.24076 -0.0905,0.57226 -0.0599,0.82498 -0.82604,0.34169 -1.61816,0.78097 -2.4781,1.02507 -0.10264,0.0291 -0.005,-0.21334 -0.006,-0.32004 -7.9e-4,-0.14597 4.6e-4,-0.29195 0.002,-0.43792 0.005,-0.62206 0.0113,-1.24387 0.011,-1.86597 -0.0229,-0.52405 0.03,-1.05367 -0.0373,-1.57602 -0.0208,-0.16176 -0.0292,-0.4709 -0.19101,-0.45047 -0.0702,0.009 -0.0936,0.10613 -0.14037,0.1592 0.66496,-0.33454 1.28487,-0.78009 1.9949,-1.0036 0.209,-0.0658 -0.28956,0.32979 -0.41813,0.50722 -0.62531,0.86296 -1.0641,1.83932 -1.47268,2.8172 -0.29317,0.8173 -0.56156,1.64935 -0.74007,2.50019 -0.0617,0.47244 -0.17419,0.93314 -0.35168,1.37501 -0.83282,0.37975 -1.6287,0.85407 -2.49845,1.13925 -0.13986,0.0459 -0.12277,-1.9055 -0.11974,-1.99625 0.0316,-1.04615 0.22271,-2.07017 0.46954,-3.0839 0.11417,-0.307 0.31023,-1.79762 0.57115,-1.9291 0.84982,-0.42823 1.73099,-0.79118 2.59649,-1.18676 0.61541,0.79329 0.83137,1.82498 1.01549,2.79305 0.13637,0.7717 0.18968,1.55368 0.21112,2.33592 0.036,0.49226 -0.0409,0.99363 0.0272,1.48282 0.58483,0.71119 0.0742,0.0695 -2.36268,1.16249 -0.0556,0.0249 0.10082,-0.072 0.13686,-0.12108 0.21819,-0.29732 0.32862,-0.6793 0.44626,-1.02206 0.29043,-0.72087 0.34275,-1.51151 0.60782,-2.23713 2.29615,-3.82981 2.68838,-1.2827 2.96783,0.0805 0.0163,0.054 0.12408,0.45745 0.19082,0.54721 0.0109,0.0146 0.0487,-0.0522 0.0324,-0.0441 -0.77646,0.38303 -1.52413,0.8264 -2.31809,1.17167 -0.0776,0.0337 0.0913,-0.14288 0.12779,-0.21918 0.0455,-0.0953 0.0784,-0.1961 0.11753,-0.29415 0.22707,-0.56319 0.21168,-1.18166 0.3655,-1.76064 0.82908,-0.38514 1.62096,-0.86339 2.48723,-1.15542 0.0956,-0.0322 0.0484,0.1962 0.0616,0.29618 0.0174,0.13207 0.0221,0.26553 0.0298,0.39852 0.0324,0.55643 0.0636,1.11116 0.10784,1.66698 0.0772,0.54746 0.11237,1.12651 0.30839,1.65052 0.0304,0.0813 0.0629,0.17213 0.13229,0.22425 0.0273,0.0205 0.10948,-0.0809 0.0788,-0.0657 -0.74866,0.37066 -1.49019,0.75558 -2.23528,1.13338 0.40313,-0.65122 0.4449,-1.44544 0.50159,-2.19043 0.0165,-0.75142 0.0475,-1.49696 0.14053,-2.24296 0.22628,-1.97695 -0.1103,-1.11671 2.5996,-2.70186 0.0604,0.1022 0.13358,0.19788 0.18129,0.3066 0.059,0.13456 0.16837,0.60699 0.19829,0.73362 0.11312,0.47881 0.21741,0.95782 0.30965,1.44105 0.15454,0.73133 0.14947,1.48384 0.25635,2.22053 -1.77299,0.62194 -2.67706,2.03959 -2.32197,0.86737 0.11082,-0.36584 0.18895,-0.73876 0.27533,-1.11093 0.13033,-0.24043 0.20721,-1.57216 0.39148,-1.67813 0.80657,-0.46386 1.65566,-0.84952 2.48349,-1.27428 0.0489,0.1071 0.11291,0.20848 0.14654,0.32128 0.17393,0.58326 0.14064,1.27134 0.16217,1.86807 0.0426,1.17919 0.005,0.49105 0.0806,1.62337 0.0536,0.61327 0.0878,1.22892 0.16473,1.84001 0.012,0.0955 0.0256,0.19104 0.0449,0.28538 0.006,0.0287 0.0564,0.0688 0.0304,0.0825 -0.7942,0.41712 -1.61458,0.78237 -2.42186,1.17356 0.091,-0.64292 0.0529,-1.29877 0.0943,-1.94698 0.0129,-0.13999 0.0253,-0.28002 0.0388,-0.41995 0.007,-0.0763 0.0518,-0.50678 0.0626,-0.6348 0.003,-0.0332 -0.0248,-0.0863 0.006,-0.0997 2.56862,-1.13733 2.37067,-1.86714 2.51224,-0.6503 0.0565,0.43518 0.0785,0.87447 0.16421,1.3057 0.0419,0.2106 0.0901,0.41382 0.15675,0.3755 0.0384,-0.0221 0.014,-0.0874 0.021,-0.13105 -2.94605,1.8068 -2.44236,1.75899 -1.93257,0.45213 0.19636,-0.50335 0.37698,-1.0122 0.56767,-1.51769 0.28404,-0.67639 0.4082,-1.415 0.7033,-2.08617 0.83284,-0.40398 1.62813,-0.8969 2.49851,-1.21193 0.20032,-0.0725 0.27755,1.76636 0.28119,1.8483 0.0747,0.42356 -0.0889,1.7272 0.14271,2.0335 -0.79291,0.36697 -1.5384,0.86171 -2.37873,1.10091 -0.14269,0.0406 0.0468,-0.29322 0.0603,-0.44096 0.0201,-0.22026 0.0258,-0.4416 0.0403,-0.6623 0.0558,-0.85122 0.11319,-1.70187 0.16026,-2.55366 0.0661,-0.9896 0.0432,-1.98609 0.17997,-2.97023 0.82534,-0.35747 1.60289,-0.85655 2.47603,-1.07243 0.14711,-0.0364 0.021,0.30243 0.0258,0.45389 0.007,0.22264 0.0109,0.44544 0.01,0.66819 -0.003,0.75233 -0.0446,1.50479 -0.0758,2.25628 -0.009,0.21125 -0.0183,0.42247 -0.0264,0.63374 -0.006,0.16139 -0.0114,0.32282 -0.0167,0.48425 -0.004,0.10741 -0.0117,0.21481 -0.01,0.32226 5.9e-4,0.0298 0.0443,0.0743 0.0176,0.0875 -2.53427,1.25324 -2.77074,1.87418 -2.29898,0.87542 0.21367,-0.69811 0.32645,-1.42023 0.49449,-2.12876 0.32016,-0.98232 0.17503,-0.66269 2.54869,-1.2384 0.15327,-0.0372 0.0429,0.31263 0.0563,0.46977 0.0523,0.61617 0.0594,1.23826 0.081,1.856 0.035,0.46602 -0.0361,0.96273 0.1595,1.40362 0.0283,0.0639 0.0618,0.13237 0.11902,0.17248 0.0243,0.0171 0.11033,-0.0438 0.0839,-0.0302 -0.75846,0.39184 -1.5205,0.77673 -2.28075,1.1651 0.35508,-0.66877 0.55636,-1.42748 0.76844,-2.15517 0.10014,-0.13836 0.24369,-1.05827 0.3755,-1.12444 2.58627,-1.2984 2.23873,-2.01098 2.62064,-0.82073 0.14655,1.31803 0.14509,2.65132 0.17788,3.97685 0.0489,1.51823 0.57919,0.70373 -2.27627,1.85362 -0.075,0.0302 0.0747,-0.14391 0.10226,-0.21988 0.0446,-0.12266 0.0759,-0.24976 0.11388,-0.37464 0.28529,-0.86195 0.56398,-1.72358 0.76914,-2.6086 0.35157,-1.05619 0.14726,-0.58872 2.50567,-1.59971 0.16977,-0.0728 0.54622,1.0832 0.5829,1.21432 0.0256,0.12199 0.05,0.24427 0.0769,0.36599 0.0222,0.10045 0.0838,0.46231 0.18349,0.56857 0.0225,0.024 0.12759,-0.0223 0.0985,-0.007 -2.47306,1.30273 -2.89869,1.71007 -2.09881,0.99579 0.5731,-0.96281 0.98612,-2.0112 1.47736,-3.01696 0.6033,-1.03492 0.38016,-0.75559 2.60196,-1.72727 0.10901,-0.0477 0.15393,0.18499 0.20388,0.29297 0.15938,0.34457 0.13561,0.81476 0.15692,1.18164 -0.003,0.15433 -0.003,0.30878 -0.009,0.463 -0.002,0.0456 -0.0807,0.97535 -0.0814,0.97569 -2.52862,1.3305 -2.35808,1.98274 -2.49559,0.81874 -0.0593,-0.97205 -0.0234,-1.94198 0.10623,-2.90632 0.19509,-0.84155 0.34393,-1.74015 0.76804,-2.50523 0.83516,-0.41769 1.62448,-0.94355 2.50547,-1.25306 0.11153,-0.0392 0.11416,0.20761 0.15917,0.31692 0.24652,0.59863 0.31046,1.27413 0.42751,1.90538 0.14649,0.82566 0.30313,1.65118 0.53445,2.45787 0.0346,0.0431 0.0543,0.10473 0.10376,0.12933 0.0722,0.0359 0.26469,-0.18282 0.19315,-0.14562 -0.73554,0.38254 -1.43613,0.83069 -2.17667,1.20345 -0.0804,0.0405 0.12587,-0.12919 0.18215,-0.19947 0.0603,-0.0753 0.11124,-0.15756 0.16686,-0.23634 0.68028,-1.29189 0.60718,-1.12489 2.84007,-2.01664 0.1027,-0.041 0.15295,0.32796 0.20533,0.6064 0.151,0.72067 -0.0497,1.5041 0.17073,2.20908 -0.24905,-1.00133 0.0596,0.0453 -2.34719,1.09967 -0.0871,0.0381 0.0636,-0.17914 0.0944,-0.26908 0.0387,-0.11314 0.0796,-0.22561 0.114,-0.34015 0.0815,-0.27156 0.14847,-0.54726 0.22349,-0.82068 0.18696,-0.70317 0.46753,-1.38281 0.6015,-2.09974 0.8261,-0.36718 1.61722,-0.82622 2.4783,-1.10154 0.0966,-0.0309 0.0141,0.20252 0.0162,0.30396 0.003,0.14139 -1.2e-4,0.28285 -6.3e-4,0.42428 -0.002,0.51296 -0.0301,1.01705 -0.0717,1.52824 -0.0336,0.37046 -0.0619,0.74137 -0.0941,1.11194 -0.0136,0.1558 0.003,0.1749 -0.0342,0.0733 0,0 -2.38591,1.35873 -2.38591,1.35873 l 0,0 c -0.12928,-0.30309 0.21592,-1.01148 0.13031,-1.35435 0.0552,-0.63916 0.0837,-1.2595 0.0537,-1.90083 -0.004,-0.0808 -0.0827,-0.19833 -0.0147,-0.24217 0.77158,-0.49773 1.61503,-0.87403 2.42255,-1.31105 -0.18359,0.13155 -0.20536,0.5222 -0.26149,0.70757 -0.13659,0.451 -0.30736,0.89281 -0.42194,1.35109 -0.21845,0.77628 -1.07881,4.99378 -2.89537,2.77455 -0.14797,-0.73452 -0.0378,-1.49429 -0.16047,-2.23365 -0.2054,-1.14309 -0.16532,-0.29 2.21183,-1.63481 0.0561,-0.0318 -0.10347,0.0806 -0.13939,0.1342 -0.0369,0.055 -0.23622,0.49573 -0.2632,0.5545 -0.66619,1.14803 -0.988,0.99262 -2.79679,1.9906 -0.10496,0.0579 -0.3304,-0.095 -0.38262,-0.15101 -0.0567,-0.0608 -0.0857,-0.14253 -0.12855,-0.2138 -0.23279,-0.81799 -0.36575,-1.66051 -0.51254,-2.49707 -0.0969,-0.49587 -0.16504,-1.00567 -0.31399,-1.48969 -0.0341,-0.11085 -0.0779,-0.21857 -0.12206,-0.32583 -0.0183,-0.0443 -0.1047,-0.10169 -0.0649,-0.12839 0.72625,-0.48675 1.50333,-0.89299 2.25499,-1.33949 -0.52758,0.42936 -0.69688,1.75043 -0.88045,2.39277 -0.1361,0.93736 -0.19258,1.88054 -0.0987,2.826 0.12751,1.13129 0.11209,0.35308 -2.34484,1.62479 -0.0584,0.0302 0.0403,-0.12563 0.0526,-0.19027 0.0755,-0.39698 0.0876,-0.80398 0.10527,-1.20631 -0.11301,-1.71838 -0.56693,-0.91891 2.04619,-2.33429 0.0964,-0.0522 -0.13386,0.1737 -0.20079,0.26055 -0.53114,0.98531 -0.95151,2.02338 -1.42505,3.03661 -0.44305,0.95426 -2.18834,2.38371 -2.8412,1.41466 -0.18916,-0.28077 -0.17459,-0.66213 -0.26568,-0.97468 -0.0728,-0.26197 -0.0889,-0.36857 -0.20514,-0.60856 -0.0361,-0.0746 -0.0742,-0.14949 -0.12557,-0.21453 -0.0159,-0.0201 -0.091,-0.0187 -0.0695,-0.0326 2.38129,-1.54613 2.72028,-2.05028 2.1046,-1.20833 -0.23977,0.8781 -0.48194,1.75438 -0.77528,2.6168 -0.0299,0.12507 -0.062,0.24965 -0.0898,0.37523 -0.0202,0.0913 0.0249,0.22505 -0.0539,0.27535 -2.45967,1.569 -2.5904,2.15867 -2.57686,0.45034 -0.004,-1.29468 0.008,-2.60087 -0.19364,-3.88278 -0.29527,-1.05313 -0.10112,-0.12274 2.27463,-1.51324 0.0412,-0.0241 -0.10783,0.003 -0.13769,0.04 -0.18674,0.23342 -0.17624,0.71837 -0.33894,0.97017 -0.21492,0.75072 -0.47271,1.48816 -0.68429,2.23995 -0.83048,0.47257 -1.63214,0.99984 -2.49145,1.41771 -0.0655,0.0319 -0.23011,-0.20298 -0.29522,-0.37216 -0.18287,-0.47512 -0.14059,-0.98563 -0.15382,-1.4836 -0.0178,-0.60684 -0.0343,-1.21331 -0.0996,-1.81742 -0.0132,-0.12245 -0.15045,-0.29247 -0.0515,-0.36589 0.72929,-0.54141 1.57421,-0.90662 2.36575,-1.35213 0.039,-0.022 -0.0715,0.054 -0.10725,0.081 -0.23372,0.68705 -0.29479,1.43041 -0.48702,2.13072 -0.20909,1.18376 0.005,0.40084 -2.56747,1.54778 -0.0448,0.02 -0.0113,-0.0979 -0.009,-0.14683 0.0153,-0.27594 0.0554,-0.55003 0.0745,-0.82573 0.0148,-0.21291 0.0261,-0.42604 0.0392,-0.63907 0.0401,-0.74153 0.0932,-1.48811 0.0764,-2.23125 -0.005,-0.2139 -0.0229,-0.42734 -0.0395,-0.64065 -0.0101,-0.12936 -0.14432,-0.30934 -0.0405,-0.38714 0.73595,-0.55141 1.59463,-0.91646 2.39194,-1.37469 -0.3556,0.46901 -0.19171,2.31009 -0.32194,2.94389 -0.0683,1.06258 -0.13827,2.12388 -0.14287,3.189 -6.6e-4,0.15256 0.12154,0.36469 5.9e-4,0.45768 -0.7498,0.57651 -1.63485,0.95159 -2.45227,1.42739 -0.24669,-0.67859 -0.054,-1.45301 -0.14025,-2.15515 -0.0201,-0.40634 -0.0345,-0.81469 -0.10056,-1.217 -0.0145,-0.0881 -0.0333,-0.1756 -0.0556,-0.26208 -0.009,-0.0363 -0.0709,-0.0855 -0.0392,-0.10537 0.75133,-0.47133 1.54038,-0.87967 2.31057,-1.31951 -0.046,0.0172 -0.1085,0.0122 -0.13799,0.0515 -0.0581,0.0773 -0.0718,0.17959 -0.10401,0.27075 -0.19741,0.55899 -0.36316,1.1282 -0.56416,1.68589 -0.1975,0.50001 -0.38049,1.00497 -0.56169,1.51113 -0.008,0.0237 -0.26315,0.76103 -0.26441,0.76195 -0.77019,0.56735 -1.61286,1.02909 -2.41928,1.54363 -0.0563,-0.0369 -0.12262,-0.062 -0.16903,-0.11079 -0.29525,-0.31063 -0.24904,-1.38563 -0.35912,-1.81285 -0.22127,-1.25177 -0.16215,-0.3045 2.34974,-1.75927 0.0233,-0.0135 -0.0459,0.0338 -0.0548,0.0592 -0.11656,0.33337 -0.0681,0.70743 -0.13834,1.04882 -0.0509,0.65374 -0.0321,1.31012 -0.018,1.96533 -0.81846,0.434 -1.61885,0.90391 -2.45537,1.30198 -0.0381,0.0181 -0.0136,-0.0834 -0.0171,-0.1254 -0.009,-0.10187 -0.013,-0.20406 -0.0193,-0.3061 -0.0386,-0.62273 -0.079,-1.24533 -0.12313,-1.8677 -0.0696,-1.15702 -0.0217,-2.35821 -0.32407,-3.48316 0.75578,-0.4489 1.51155,-0.89779 2.26732,-1.34668 -0.0462,0.04 -0.1113,0.0654 -0.13873,0.12004 -0.21265,0.42385 -0.13571,1.04594 -0.32938,1.4851 -0.0322,0.13683 -0.0684,0.27279 -0.0967,0.41049 -0.0125,0.0608 -0.16015,0.90743 -0.21042,0.93904 -2.46865,1.55218 -2.37338,2.29107 -2.47953,1.3095 -0.003,-0.74336 -0.0755,-1.48607 -0.19037,-2.22006 -0.12843,-0.68595 -0.29973,-1.44124 -0.49982,-2.06489 0.74544,-0.45314 1.48678,-0.91312 2.23633,-1.35942 0.0419,-0.0249 -0.0907,0.0503 -0.11167,0.0943 -0.15698,0.33003 -0.0269,0.7607 -0.14176,1.10296 -0.1037,0.74377 -0.16519,1.48387 -0.16416,2.23597 -0.0488,0.78709 -0.1119,1.58347 -0.40073,2.32553 -0.83693,0.49115 -1.64206,1.04106 -2.5108,1.47345 -0.0914,0.0455 -0.24412,-0.22639 -0.30951,-0.43083 -0.17498,-0.54707 -0.22325,-1.13488 -0.30745,-1.69903 -0.0502,-0.54936 -0.0973,-1.09818 -0.14237,-1.64778 -0.01,-0.12204 -0.024,-0.24375 -0.0386,-0.36533 -0.007,-0.0617 -0.0799,-0.1511 -0.0275,-0.18451 0.7638,-0.48672 1.58563,-0.87575 2.37844,-1.31363 -0.0299,0.0143 -0.0704,0.0159 -0.0897,0.0429 -0.20731,0.28968 -0.14683,1.28891 -0.34136,1.66076 -0.0212,0.0658 -0.17889,0.56193 -0.18781,0.5677 -2.21148,1.42869 -2.36176,2.23004 -2.75829,0.67378 -0.0658,-0.28886 -0.1201,-0.58044 -0.19307,-0.86759 -0.30454,-1.19827 -0.56994,-0.0767 2.17732,-1.67226 0.0448,-0.026 -0.0897,0.0518 -0.13448,0.0777 -0.39892,0.63609 -0.33066,1.52767 -0.64902,2.21365 -0.17888,0.6109 -1.70448,5.13259 -3.04737,2.39363 -0.0813,-0.50179 -0.003,-1.01671 -0.0276,-1.52318 -0.006,-0.77375 -0.0345,-1.54885 -0.15664,-2.3144 -0.15525,-0.86197 -0.32075,-1.85249 -0.91511,-2.52737 0.7246,-0.44659 1.45817,-0.87894 2.1738,-1.33977 0.0581,-0.0374 -0.14888,0.0161 -0.19626,0.0663 -0.33295,0.35307 -0.30135,1.27869 -0.49707,1.72156 -0.24856,0.99713 -0.46021,1.99933 -0.48291,3.03147 -0.0289,0.5449 -0.0112,1.08236 0.056,1.62434 0.007,0.06 0.0784,0.1471 0.0273,0.17934 -0.76391,0.48155 -1.58405,0.86754 -2.37608,1.3013 0.38109,-0.11785 0.3551,-0.92869 0.44747,-1.24359 0.1762,-0.88138 0.48146,-1.73234 0.78198,-2.57735 0.31396,-0.74746 0.64227,-1.48324 1.03396,-2.19428 0.0533,-0.0968 0.62038,-1.09598 0.77368,-1.20659 0.84219,-0.60764 1.76188,-1.09994 2.64282,-1.64991 0.10075,0.0282 0.21666,0.0246 0.30226,0.0847 0.45932,0.32294 0.19859,1.73869 0.25298,2.21378 -5.1e-4,0.75633 2.3e-4,1.51331 0.0335,2.2691 0.004,0.0968 0.0974,0.2359 0.0171,0.29011 -0.77004,0.52002 -1.62715,0.89772 -2.44072,1.34657 0.0228,-0.002 0.0589,0.0154 0.0683,-0.005 0.10625,-0.23292 0.0972,-0.50297 0.13193,-0.75662 0.0981,-0.71667 0.18002,-1.43568 0.29379,-2.15022 0.0427,-0.26802 0.16904,-1.02804 0.19759,-1.32351 0.012,-0.12374 -0.0922,-0.30345 0.011,-0.37279 2.84815,-1.91382 2.47386,-2.10978 2.46259,-0.82968 0.007,2.01278 0.44184,1.1088 -2.41694,2.6679 -0.0127,0.007 0.009,-0.0276 0.013,-0.0414 0.0413,-0.76785 0.0181,-1.53817 0.006,-2.30646 -0.017,-0.3656 -0.023,-0.62779 -0.0625,-0.98822 -0.14331,-1.30735 -0.45054,-0.31685 2.20353,-1.80326 0.0669,-0.0375 -0.10849,0.1085 -0.16274,0.16276 -0.26408,0.67809 -0.40907,1.37716 -0.58312,2.08359 -0.27342,1.10976 -0.56886,2.21449 -0.79988,3.33427 -0.17503,0.9196 -0.3602,1.83472 -0.55295,2.75049 -0.0289,0.13732 0.038,0.33433 -0.0777,0.41373 -0.773,0.5305 -1.62998,0.92976 -2.47416,1.33759 -0.0447,0.0216 0.008,-0.0989 0.0126,-0.1484 0.008,-0.4316 0.002,-0.86233 -0.0203,-1.29355 -0.007,-0.12735 -0.0157,-0.2546 -0.0269,-0.38165 -0.007,-0.078 -0.0925,-0.19051 -0.027,-0.23323 0.76678,-0.49955 1.60554,-0.87879 2.40831,-1.31819 -0.032,0.008 -0.0774,-0.004 -0.0959,0.0233 -0.0957,0.14113 -0.1656,0.61752 -0.1848,0.71674 -0.10324,0.53374 -0.17648,1.07065 -0.26312,1.60725 -0.0175,0.091 -0.15097,0.82044 -0.17932,0.8429 -0.75877,0.60096 -2.18689,2.32067 -2.53441,1.41728 -0.0971,-0.25234 0.07,-0.57036 -0.0475,-0.80969 -0.001,-1.05719 0.003,-2.1172 -0.073,-3.17235 -0.0115,-0.15972 -0.17255,-0.37805 -0.0475,-0.47806 0.71806,-0.57418 1.5885,-0.92619 2.38274,-1.38929 -0.20238,0.2907 -0.21703,0.7212 -0.26917,1.05943 -0.0915,0.59346 -0.15081,1.1895 -0.1841,1.78917 -0.002,0.0675 -0.0465,1.30824 -0.0519,1.31205 -1.4556,1.02901 -2.41294,2.36715 -2.56049,1.01777 -0.0201,-0.9946 0.20792,-1.94546 0.40932,-2.91429 0.79956,-0.53041 1.55541,-1.13349 2.39868,-1.59123 0.0747,-0.0405 0.11758,0.13156 0.13877,0.21386 0.0173,0.0671 -0.0229,0.13666 -0.0308,0.20546 -0.0508,0.4378 -0.0665,0.88095 -0.17508,1.31052 -0.0633,0.37854 -0.15066,0.7511 -0.21903,1.1279 -0.0162,0.0894 0.0449,0.22294 -0.0324,0.27061 -2.45619,1.51389 -2.03971,2.09612 -2.60704,1.13529 -0.22731,-1.5508 -0.19997,-3.12412 -0.36893,-4.68104 -0.11367,-1.13297 -0.25068,-2.25673 -0.41092,-3.38387 -0.0331,-0.23271 -0.0752,-0.46447 -0.0959,-0.6986 -0.005,-0.0525 -0.023,-0.12658 0.0202,-0.15673 0.71368,-0.4983 1.47057,-0.93166 2.20586,-1.3975 -0.23908,0.86838 -0.20553,1.78508 -0.40344,2.66355 -0.14261,0.93175 -0.23339,1.87071 -0.38734,2.80094 -0.81159,0.43713 -1.60415,0.91159 -2.43477,1.31139 -0.0436,0.021 0.009,-0.0964 0.0109,-0.14468 0.0239,-0.55596 0.008,-1.11316 0.0237,-1.6693 0.0134,-1.38609 0.021,-2.77232 0.019,-4.15846 -0.002,-0.19801 -0.004,-0.39602 -0.007,-0.59402 -0.002,-0.12985 -0.11036,-0.3111 -0.007,-0.38953 2.75978,-2.0913 2.43912,-2.14477 2.43321,-0.51501 -0.0508,1.80188 -0.17959,3.60192 -0.0816,5.40622 0.007,0.22578 0.0119,0.45163 0.0208,0.67734 0.005,0.13484 0.13041,0.32427 0.0217,0.40424 -2.87477,2.11533 -2.38938,2.06351 -2.41975,0.6178 -0.0432,-2.10108 -0.62011,-1.11804 2.27867,-2.73417 -0.41524,0.56271 -0.25688,1.66587 -0.4899,2.32704 -0.0246,0.12784 -0.19319,1.25598 -0.26932,1.31635 -0.68903,0.54635 -1.89519,2.28782 -2.78783,1.42714 -0.43971,-0.85677 -0.49306,-1.85903 -0.80446,-2.76393 -0.10629,-0.34681 -0.13249,-0.52342 -0.31649,-0.82254 -0.0463,-0.0753 -0.0968,-0.15275 -0.16807,-0.20499 -0.0262,-0.0192 -0.12398,0.0284 -0.0966,0.0109 2.33623,-1.48829 2.70855,-1.92391 1.98375,-1.13926 -0.21521,0.80152 -0.31753,1.62903 -0.41109,2.45215 -0.0373,0.25167 -0.0908,0.50109 -0.1183,0.75401 -0.01,0.0894 0.0667,0.22142 -0.009,0.26948 -1.80052,1.13958 -2.48234,2.22235 -2.54529,0.9107 0.0573,-0.85244 0.16682,-1.70317 0.13479,-2.56054 0.42466,-0.87155 0.0671,-0.175 2.3302,-1.42135 0.06,-0.033 -0.10185,0.0947 -0.13533,0.1544 -0.0784,0.13984 -0.27135,0.68409 -0.31531,0.80263 -0.058,0.15651 -0.11645,0.31289 -0.17468,0.46933 -0.27109,0.83479 -0.47195,1.68957 -0.6212,2.55457 -0.82665,0.43546 -1.63493,0.9077 -2.47993,1.30638 -0.0441,0.0208 0.0155,-0.0965 0.0187,-0.14515 0.009,-0.13534 0.0136,-0.27094 0.0179,-0.40651 0.0271,-0.84274 0.025,-1.68598 0.0308,-2.52903 -0.003,-1.19482 -0.0163,-2.38948 -0.0213,-3.58426 -6e-4,-0.14581 -0.1077,-0.33997 7.5e-4,-0.43744 0.71109,-0.63904 1.55778,-1.10879 2.33668,-1.66318 0.0481,0.0602 0.11413,0.10985 0.14445,0.18077 0.0925,0.21646 0.0771,0.46449 0.11851,0.69623 0.0801,0.44816 0.18516,0.89152 0.25502,1.34157 0.0712,0.28459 0.0925,0.42706 0.20567,0.68677 0.0176,0.0404 0.10664,0.0875 0.0701,0.11199 -0.7356,0.49352 -1.51842,0.91272 -2.27763,1.36908 0.0337,-0.0568 0.0836,-0.10673 0.1011,-0.17044 0.0322,-0.11758 0.03,-0.24198 0.0451,-0.36297 -0.001,-0.51236 2.6e-4,-1.02536 -0.0378,-1.53673 -0.0101,-0.13584 -0.14734,-0.31995 -0.0421,-0.40648 0.71645,-0.58927 1.54124,-1.0363 2.3496,-1.49138 0.0711,-0.04 -0.0655,0.14932 -0.0983,0.22398 -0.36863,1.67597 -0.5727,3.40161 -0.66541,5.11249 -0.0241,1.39957 0.13106,0.48507 -2.37774,1.91264 -0.0497,0.0283 0.0879,-0.0798 0.10816,-0.13334 0.0512,-0.1353 0.0755,-0.27959 0.10174,-0.42182 0.0904,-0.48893 0.10624,-0.7931 0.15233,-1.29356 0.042,-0.50239 0.0729,-0.82472 0.10005,-1.32165 0.008,-0.14312 -0.0994,-0.34443 0.0158,-0.42971 0.74101,-0.54856 1.61938,-0.88336 2.40646,-1.36348 0.0366,-0.0223 -0.0958,-0.059 -0.12533,-0.028 -0.0658,0.069 -0.0684,0.17797 -0.10258,0.26696 -0.17759,0.77935 -0.81859,5.35682 -2.94522,2.88366 -0.0687,-0.48818 -0.10843,-0.97668 -0.11681,-1.46949 -0.002,-0.0971 -0.084,-0.23437 -0.005,-0.29124 0.76333,-0.5515 1.61456,-0.96981 2.42184,-1.45472 -0.0892,0.75851 -0.042,1.53067 -0.15586,2.28801 -0.16232,1.28207 0.0283,0.54244 -2.52241,1.82261 -0.0627,0.0315 -0.11894,-0.0803 -0.15913,-0.13777 -0.21842,-0.31265 -0.22476,-0.72726 -0.39743,-1.06044 -0.072,-0.15951 -0.13952,-0.36807 -0.28178,-0.48964 -0.0282,-0.0241 -0.13959,-0.004 -0.10863,-0.0244 3.52379,-2.32801 2.23617,-1.85165 1.88278,-0.79965 -0.04,0.0973 -0.0821,0.19371 -0.12007,0.29181 -0.0304,0.0787 -0.0117,0.19666 -0.085,0.23835 -2.43168,1.38256 -2.6026,2.07843 -2.70604,0.37996 0.009,-1.12186 0.0151,-2.24407 -0.0191,-3.36562 0.80607,-0.50176 1.58778,-1.04495 2.41819,-1.50529 0.0498,-0.0276 -0.009,0.11371 -0.0107,0.17068 -0.0217,0.59017 -0.007,1.18129 -0.0175,1.77164 -0.001,0.71317 -0.001,1.4266 0.008,2.13972 0.001,0.10552 0.0922,0.25529 0.006,0.31654 -0.76435,0.54468 -1.62324,0.94273 -2.43486,1.41409 -0.0837,-0.25382 -0.085,-0.55326 -0.12009,-0.81457 -0.0695,-0.51749 -0.15731,-1.03235 -0.25456,-1.54528 -0.0622,-0.35253 -0.0886,-0.58099 -0.19781,-0.9167 -0.33783,-1.03828 -1.73609,0.5088 1.963,-1.54564 0.0997,-0.0554 -0.16047,0.16208 -0.2407,0.24312 -0.67634,0.94035 -1.08995,2.03214 -1.54186,3.09147 -0.38899,1.00533 -1.52198,4.76078 -3.41348,3.09282 -0.28208,-0.89672 -0.0599,-1.88171 -0.13825,-2.80329 -0.0112,-0.55656 -0.0164,-1.11471 -0.0731,-1.6691 -0.0129,-0.12641 -0.0313,-0.25228 -0.0522,-0.37762 -0.009,-0.0562 -0.0863,-0.13521 -0.0387,-0.16653 0.7386,-0.48586 1.53326,-0.8806 2.29988,-1.3209 -0.5616,0.35652 -0.80379,1.29864 -1.27118,1.78646 -0.4116,0.64994 -0.78859,1.31998 -1.20055,1.96949 -0.84522,0.46478 -1.66201,0.98548 -2.53564,1.39436 -0.31465,0.14727 -0.51117,-1.41846 -0.50281,-1.58988 -0.0519,-0.40119 -0.0967,-0.80658 -0.21841,-1.19444 -0.34585,-1.10214 -0.84344,0.17081 2.14384,-1.5969 -0.53875,0.44282 -0.46234,1.41117 -0.74422,2.01923 -0.025,0.099 -0.24363,1.06584 -0.29685,1.10701 -0.53517,0.41395 -2.02978,2.45122 -2.68314,1.34273 -0.17361,-0.87867 -0.22302,-1.77025 -0.31079,-2.66012 -0.0183,-0.17429 -0.0367,-0.34857 -0.055,-0.52285 -0.0114,-0.14776 -0.0191,-0.29585 -0.0342,-0.44328 -0.12854,-1.25527 -0.46457,-0.22362 2.23907,-1.72804 0.0579,-0.0322 -0.0946,0.0927 -0.14194,0.13903 -0.38122,0.83776 -0.6354,1.72695 -1.02539,2.56153 -0.0239,0.0553 -0.25267,0.58056 -0.28635,0.66953 -0.0298,0.0786 -0.005,0.19776 -0.0779,0.23988 -1.10873,0.64192 -2.4895,2.21129 -2.65112,0.88793 0.01,-0.7791 0.0232,-1.55862 -0.005,-2.33752 -0.0161,-0.33654 -0.0234,-1.69893 -0.39535,-1.83591 0.71022,-0.42721 1.42045,-0.85442 2.13068,-1.28163 -0.0868,0.0539 -0.18554,0.0921 -0.26035,0.1617 -0.43599,0.40537 -0.70288,1.01031 -0.98951,1.51744 -0.61818,1.32687 -0.87985,3.58992 -3.21476,3.15535 -0.0572,-0.0486 -0.12695,-0.0855 -0.17152,-0.14586 -0.302,-0.40927 -0.28335,-1.33019 -0.4137,-1.81962 -0.11661,-0.86726 0.0216,0.0854 -0.0936,-0.54585 -0.15637,-0.85659 1.49285,-0.89695 2.24681,-1.33254 0.0531,-0.0307 -0.0953,0.0796 -0.13015,0.13 -0.0512,0.0741 -0.0835,0.15972 -0.1252,0.23958 -0.20028,0.77695 -0.29637,1.57599 -0.45011,2.36241 -0.0255,0.0918 -0.22609,0.82982 -0.30202,0.88015 -0.698,0.4627 -2.13404,2.29619 -2.65755,1.15845 -0.10355,-0.55056 0.14556,-1.03428 0.26692,-1.56323 0.19768,-0.69655 0.4383,-1.38044 0.56758,-2.09552 0.0165,-0.13437 0.078,-0.59739 0.0797,-0.74895 0.001,-0.0964 -0.0129,-0.19244 -0.0231,-0.28831 -0.004,-0.0357 0.009,-0.084 -0.019,-0.10612 -0.0219,-0.0172 -0.10174,0.0446 -0.0778,0.0303 0.7063,-0.42223 1.41737,-0.83646 2.12605,-1.2547 -0.63787,0.43013 -1.12985,1.02648 -1.5814,1.64322 -0.3497,0.5094 -0.65539,1.03445 -0.78097,1.64747 -0.093,0.61506 -0.0956,1.22835 -0.0766,1.85001 0.0198,1.65696 0.23823,0.75773 -2.42896,2.24935 -0.008,0.005 0.004,-0.0183 0.005,-0.0275 0.0225,-0.43223 0.002,-0.86548 0.0112,-1.29804 0.005,-0.51464 0.013,-1.02997 0.0649,-1.54245 0.0749,-0.68341 0.21694,-1.36293 0.20127,-2.05285 0.003,-0.88502 0.007,-1.77049 -0.0188,-2.65519 0,0 2.4191,-1.23259 2.4191,-1.23259 z"
-       transform="translate(0,308.2677)" />
-    <path
-       style="fill:#1a1a1a;fill-opacity:1;stroke:#b62403;stroke-width:4.73199987;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:0.06329112;stroke-dasharray:none"
-       id="path3829"
-       d="m 130.71177,313.15648 c 0.0339,0.36872 -0.19265,1.1905 0.25846,1.38889 0.0613,0.0269 0.13313,0.0142 0.19969,0.0213 -0.0776,0.0951 0.62389,-0.35308 0.46648,-0.26738 -0.69082,0.3761 -1.36044,0.79132 -2.06005,1.15081 -0.0956,0.0491 0.15996,-0.14364 0.23988,-0.21554 0.0628,-0.0565 0.11514,-0.12733 0.18826,-0.16962 0.82223,-0.47551 1.66173,-0.9205 2.49259,-1.38075 0.0624,0.0568 0.13796,0.10178 0.18717,0.17028 0.30976,0.43116 0.34842,1.30984 0.42734,1.81815 0.16531,0.7381 0.20336,1.39537 1.08283,0.96402 -3.73489,2.16279 -2.18168,1.3569 -1.48311,0.64409 0.28525,-0.29107 0.53365,-0.61775 0.78802,-0.93525 0.69621,-0.77614 2.41263,-2.48754 3.15752,-1.48089 0.10207,0.13794 0.16075,0.33079 0.21943,0.48707 0.27069,0.79151 0.4908,0.70611 1.17165,0.40375 0.12424,-0.0627 0.24923,-0.12394 0.37272,-0.18812 1.79442,-0.9326 -2.82061,1.68707 -1.04166,0.60693 0.13631,-0.0828 0.27192,-0.16671 0.4058,-0.25335 0.12765,-0.0826 0.25244,-0.16952 0.37866,-0.25428 1.16301,-0.7044 2.88661,-2.64342 3.79217,-1.01718 0.26,0.70603 0.34949,1.45945 0.42678,2.20353 -0.0183,0.0583 0.0783,1.63743 0.33071,1.0355 -4.00053,2.22377 -2.4323,1.67679 -1.88435,0.85227 0.16707,-0.2514 0.283,-0.53991 0.41292,-0.81097 0.2301,-0.48786 0.415,-0.99535 0.61605,-1.49553 1.85137,-0.78162 2.39954,-1.97839 2.56078,-0.79603 0.0596,0.43696 0.0445,0.88907 0.0475,1.32894 0.009,0.0693 0.009,0.14064 0.0284,0.20798 0.057,0.20195 0.0795,-0.0762 0.0764,-0.0747 -0.75311,0.36352 -1.4544,0.82832 -2.20693,1.19302 -0.0802,0.0389 0.1205,-0.13219 0.17038,-0.20604 0.0754,-0.11162 0.13616,-0.23243 0.20424,-0.34865 0.44505,-0.83445 0.91949,-1.65196 1.26397,-2.53449 0.50485,-1.38608 1.02856,-1.4233 2.90055,-2.19307 0.0799,-0.0328 0.40094,0.53599 0.4042,0.54134 0.3671,0.67368 0.48894,1.4555 0.85474,2.12503 0.0483,0.0415 0.0844,0.1044 0.1448,0.12446 0.0826,0.0274 0.26469,-0.2217 0.18751,-0.18154 -2.36084,1.2282 -2.73582,1.88665 -2.02269,1.01711 0.83725,-0.40622 1.63969,-0.89382 2.51175,-1.21866 0.2101,-0.0782 0.55266,1.48643 0.57905,1.62491 0.0623,0.22041 0.20909,1.33255 0.51261,1.33358 0.0797,2.7e-4 0.14611,-0.0639 0.21917,-0.0958 1.02783,-0.74319 -0.32188,0.25327 -1.5937,0.8048 -0.17335,0.0752 0.28116,-0.25264 0.41664,-0.38434 0.39597,-0.38492 0.76406,-0.79917 1.13637,-1.20658 0.92993,-1.15409 1.29926,-1.30222 3.19528,-1.9654 0.0901,-0.0315 0.14537,0.32716 0.1979,0.5891 0.0785,0.7791 0.0646,1.56522 0.0652,2.3476 0.0458,1.1198 0.41307,0.37902 -2.42108,1.37274 -0.0824,0.0289 0.002,-0.17475 0.007,-0.26194 0.0151,-0.25049 0.0455,-0.50719 0.0721,-0.75641 0.0613,-0.75214 0.14017,-1.49841 0.26482,-2.24264 0.27947,-1.17123 0.86804,-0.9865 2.64631,-1.61547 0.0945,-0.0334 0.32966,0.97906 0.3471,1.05222 0.14831,0.50115 0.18395,1.83259 0.56457,2.15428 0.0594,0.0502 0.14364,0.0599 0.21547,0.0898 0.0847,-0.0223 0.17347,-0.0326 0.2541,-0.0668 0.11051,-0.0468 0.42037,-0.23191 0.31499,-0.17446 -0.63508,0.34624 -1.24718,0.73804 -1.90409,1.04082 -0.17327,0.0799 0.29732,-0.23942 0.44005,-0.36602 0.38609,-0.34244 0.455,-0.43275 0.79987,-0.80162 0.53588,-0.48515 0.80805,-1.145 1.18257,-1.74023 0.80239,-0.47485 1.55651,-1.04284 2.40716,-1.42454 0.0967,-0.0434 0.13312,0.16853 0.17332,0.26661 0.15891,0.38771 0.10131,1.22658 0.10756,1.64497 0.0302,0.66506 -0.0267,1.33478 0.0167,1.99937 0.0184,0.28202 0.01,0.28844 0.0465,0.19015 -0.78008,0.37426 -1.53104,0.81652 -2.34023,1.12279 -0.0965,0.0365 0.0873,-0.18714 0.12343,-0.28376 0.21185,-0.56705 0.3546,-1.16287 0.52633,-1.74271 0.042,-0.14647 0.0856,-0.29246 0.12593,-0.43941 0.0975,-0.35572 0.0985,-0.38407 0.18107,-0.71364 0.0127,-0.0507 -0.006,-0.12665 0.0397,-0.15171 2.5177,-1.37487 2.28199,-2.09625 2.51314,-0.93891 0.10888,0.69867 -0.0954,1.45199 0.09,2.13528 0.0206,0.0166 0.0426,0.0681 0.0616,0.0498 0.69691,-0.67051 -1.71746,0.83134 -2.12473,1.02585 -0.10019,0.0479 0.15014,-0.16389 0.21872,-0.25121 0.21995,-0.28009 0.28032,-0.39696 0.46839,-0.70099 0.47959,-0.78844 0.95625,-1.57909 1.5267,-2.30596 0.84313,-0.75435 0.7815,-0.7298 2.74397,-1.45717 0.10399,-0.0385 0.14796,0.16679 0.20574,0.26144 0.21313,0.34915 0.28582,0.76802 0.37163,1.15994 0.16145,0.82429 0.15222,1.68752 0.38997,2.49576 0.0479,0.37462 0.0986,0.008 0.0754,0.019 -0.78258,0.38421 -1.51625,0.86479 -2.30607,1.23387 -0.0639,0.0299 0.0565,-0.12929 0.0826,-0.19483 0.0966,-0.24275 0.12823,-0.3423 0.21588,-0.59316 0.0964,-0.24452 0.34567,-1.40353 0.53663,-1.51744 0.79809,-0.47604 1.62861,-0.89546 2.44291,-1.34319 0.3631,0.718 0.3632,1.55819 0.47683,2.34181 0.0938,0.3976 0.0558,1.10361 0.52466,1.29754 0.19922,0.0824 0.50199,0.0109 0.691,-0.0131 1.07065,-0.22343 1.98681,-0.84603 2.93751,-1.35179 0.91027,-0.30782 1.03906,0.30517 1.00002,1.0543 -0.25576,1.678 -0.14715,1.20771 -2.59316,2.12058 -0.0857,0.032 0.0943,-0.15681 0.14141,-0.23521 0.35627,-0.96817 0.57959,-1.9767 0.89645,-2.95689 0.20546,-0.57635 0.35872,-1.16809 0.56389,-1.74423 0.83433,-0.37639 1.63687,-0.83319 2.50299,-1.12919 0.082,-0.028 0.0504,0.16619 0.0651,0.25156 0.0766,0.4468 0.0631,0.9205 0.0715,1.37206 0.01,0.64708 0.0119,1.29424 0.0128,1.94139 0.0146,0.0337 0.008,0.10915 0.0439,0.10108 0.0449,-0.0101 0.10116,-0.14473 0.0598,-0.12446 -0.73784,0.36193 -1.44018,0.79294 -2.17457,1.16182 -0.0833,0.0418 0.1491,-0.11281 0.2158,-0.17796 0.17515,-0.1711 0.26334,-0.30914 0.40693,-0.5058 0.75054,-1.18639 1.16999,-1.2666 3.00071,-2.01046 0.0945,-0.0384 0.34792,0.46548 0.36282,0.49213 0.27245,0.63664 0.46582,1.3031 0.68941,1.95751 0.039,0.0681 0.12612,0.28783 0.25121,0.30123 0.0557,0.006 0.10477,-0.0397 0.15573,-0.0628 0.5882,-0.26737 2.99793,-1.70951 -1.37656,0.78291 0.97516,-0.59934 1.89616,-1.2819 2.78795,-1.99801 1.07428,-0.78292 0.97607,-0.73283 2.98808,-1.76569 0.14588,-0.0749 0.39311,0.0381 0.49298,0.13734 0.14957,0.14857 0.1854,0.32171 0.25114,0.51121 0.13713,0.55221 0.0858,1.12379 0.13311,1.68506 0.0639,-0.0718 0.0178,0.32347 0.12739,0.30702 0.0428,-0.006 0.10155,-0.13307 0.0628,-0.11376 -0.75013,0.37339 -1.46302,0.81922 -2.21648,1.18583 -0.0901,0.0438 0.14813,-0.13552 0.21359,-0.21132 0.0747,-0.0865 0.1371,-0.18279 0.20564,-0.27418 0.36244,-0.49082 0.49762,-1.12737 0.92296,-1.57019 2.71914,-1.66431 2.12831,-1.79857 3.19782,-0.36052 0,0 -2.32329,1.37985 -2.32329,1.37985 l 0,0 c -0.15366,-0.20035 -0.29669,-0.40892 -0.45072,-0.60876 -0.0272,-0.0353 -0.0514,-0.0746 -0.0869,-0.10152 -0.0124,-0.009 -0.0602,0.008 -0.0468,1.5e-4 0.74455,-0.4383 1.497,-0.86301 2.2455,-1.29451 -0.55986,0.18603 -0.67226,1.02764 -0.99069,1.48012 -0.0158,0.0251 -0.31589,0.51326 -0.36637,0.54474 -0.85499,0.53311 -1.98832,2.00307 -2.72263,1.31313 -0.0855,-0.0803 -0.14341,-0.33876 -0.16893,-0.42369 -0.0646,-0.54195 0.003,-1.09332 -0.10909,-1.63159 -0.0439,-0.14355 -0.0664,-0.35416 -0.26984,-0.33082 -0.0696,0.008 -0.26116,0.0954 -0.20181,0.0583 4.84698,-3.03411 2.04554,-1.21423 1.57354,-0.90617 -0.87878,0.72445 -1.79443,1.4072 -2.75401,2.02127 -0.89065,0.52012 -1.77558,1.05015 -2.67194,1.56038 -0.55051,0.31337 -0.9432,0.29184 -1.21424,-0.31244 -0.21777,-0.6375 -0.38925,-1.29388 -0.67307,-1.907 -0.5585,-0.9342 -1.5371,0.56804 1.97738,-1.52644 0.0595,-0.0355 -0.12674,0.0614 -0.17686,0.10925 -0.0987,0.0942 -0.28643,0.40543 -0.34993,0.50479 -0.79693,1.25484 -1.32613,1.36754 -3.1321,2.19004 -0.0801,0.0365 -0.16582,-0.0738 -0.22378,-0.13995 -0.047,-0.0536 -0.0496,-0.13369 -0.0744,-0.20053 0.004,-0.64751 0.0113,-1.29507 0.003,-1.94258 -0.008,-0.34583 -0.0123,-0.69235 -0.0415,-1.03726 -0.10871,-1.28288 -0.47098,-0.28525 2.33309,-1.69784 -0.0369,0.001 -0.0829,-0.0208 -0.11056,0.004 -0.29568,0.26073 -0.33474,1.27498 -0.5747,1.6221 -0.3416,0.96648 -0.57265,1.96871 -0.86647,2.95028 -0.24506,1.23428 -0.001,0.4651 -2.61667,1.56392 -0.0479,0.0201 -0.0251,-0.10335 -0.0183,-0.15489 0.0426,-0.32046 0.22034,-0.62074 0.22614,-0.95015 0.0819,-0.64781 0.0349,-0.90564 -0.66777,-0.58321 -0.95846,0.52009 -1.91402,1.11801 -3.01635,1.26189 -0.15079,-0.003 -0.30409,0.0173 -0.45235,-0.0104 -0.77398,-0.14445 -0.88135,-0.96849 -0.96626,-1.61089 -0.0993,-0.65749 -0.1549,-1.35026 -0.32482,-1.9797 0.75565,-0.44706 1.50468,-0.90549 2.26693,-1.3412 0.0515,-0.0294 -0.0973,0.0715 -0.13097,0.12026 -0.26627,0.38611 -0.34118,0.8856 -0.46515,1.32581 -0.014,0.0439 -0.24421,0.79028 -0.25701,0.79899 -1.01621,0.69172 -2.11824,2.33699 -2.62433,1.17152 -0.20598,-0.82385 -0.22661,-1.68428 -0.37329,-2.51928 -0.0669,-0.3018 -0.0941,-0.48864 -0.20795,-0.77179 -0.0351,-0.0874 -0.0759,-0.17342 -0.12817,-0.25178 -0.0209,-0.0314 -0.11909,-0.0511 -0.0875,-0.0717 1.63328,-1.06566 3.01553,-1.65853 1.93553,-1.18608 -0.61527,0.68658 -1.07727,1.48579 -1.55465,2.27059 -0.85373,1.49765 -0.91063,1.35743 -3.12184,2.50384 -0.15988,0.0829 -0.28323,-0.17483 -0.33276,-0.25162 -0.16747,-0.70032 0.004,-1.44504 -0.10862,-2.1576 -0.0338,-1.03818 -0.0471,-0.19513 2.36621,-1.46147 0.0443,-0.0233 -0.0658,0.0777 -0.0844,0.1242 -0.15012,0.37569 -0.17736,0.79519 -0.32763,1.17134 -0.13528,0.45078 -0.26489,0.90344 -0.39019,1.35712 -0.0233,0.0845 -0.1689,0.66737 -0.19431,0.68433 -0.79327,0.52925 -1.65474,0.94836 -2.48211,1.42254 -0.13529,-0.25123 -0.0864,-0.52236 -0.0832,-0.80156 0.006,-0.53032 5e-5,-1.06074 -0.007,-1.59101 -0.01,-0.37073 -0.0115,-0.58534 -0.0364,-0.94911 -0.0123,-0.18007 -0.0847,-0.35954 -0.0592,-0.53823 0.004,-0.0263 0.0318,0.0426 0.0477,0.0639 0.74515,-0.44786 1.4903,-0.89572 2.23544,-1.34358 -0.21562,0.20035 -0.28555,0.41063 -0.42321,0.66869 -0.13883,0.26023 -0.29627,0.48496 -0.47976,0.71647 -0.10638,0.13424 -0.22143,0.26136 -0.33215,0.39204 -1.29777,1.45275 -1.80266,1.65357 -3.89914,2.81594 -0.11609,0.0644 -0.25172,0.0959 -0.38415,0.10492 -0.11497,0.008 -0.22752,-0.0368 -0.34128,-0.0553 -0.0897,-0.066 -0.19489,-0.11497 -0.26918,-0.19794 -0.45483,-0.50802 -0.39526,-1.60067 -0.59821,-2.24205 -0.0886,-0.34387 -0.0909,-0.40397 -0.21481,-0.71282 -0.017,-0.0423 -0.10021,-0.097 -0.062,-0.12175 0.74035,-0.48085 1.53298,-0.8761 2.29213,-1.32667 0.0426,-0.0253 -0.108,0.0118 -0.14021,0.0495 -0.0511,0.0598 -0.0592,0.14563 -0.0889,0.21845 -0.13175,0.74048 -0.24647,1.4788 -0.28361,2.23172 -0.0127,0.12446 -0.0619,0.58029 -0.0656,0.7197 -0.002,0.0831 0.0803,0.20318 0.011,0.24915 -3.02074,2.00474 -2.47497,2.21452 -2.40627,1.09069 0.01,-0.76521 0.0288,-1.53367 -0.0513,-2.29597 -0.21111,-1.19455 -0.48512,-0.0522 2.19518,-1.63854 0.062,-0.0367 -0.14652,0.0287 -0.20353,0.0727 -0.0794,0.0614 -0.5176,0.60624 -0.54609,0.64097 -1.33863,1.4602 -2.5238,2.79532 -4.5933,3.41582 -0.11287,-0.0225 -0.23567,-0.016 -0.33861,-0.0675 -0.43025,-0.21508 -0.46392,-1.10632 -0.58633,-1.50709 -0.0617,-0.35114 -0.1198,-0.70645 -0.25564,-1.03881 -0.0329,-0.0804 -0.0709,-0.15948 -0.11899,-0.2318 -0.0271,-0.0407 -0.14518,-0.077 -0.10409,-0.10353 0.73938,-0.47832 1.52854,-0.87492 2.29281,-1.31238 -0.4341,0.21259 0.28526,-0.15631 -0.22083,0.17478 -0.18664,0.1221 -2.06611,2.0184 -2.78992,1.42214 -0.0685,-0.0564 -0.11706,-0.13326 -0.17559,-0.1999 -0.33913,-0.67595 -0.46947,-1.43834 -0.83946,-2.10415 -0.66797,-0.95116 -1.13404,0.2339 1.93511,-1.58266 0.0645,-0.0382 -0.13758,0.0693 -0.186,0.12651 -0.11314,0.13377 -0.23181,0.4685 -0.29175,0.61684 -0.33515,0.89591 -0.81592,1.71689 -1.24912,2.56718 -0.0598,0.11851 -0.12077,0.23639 -0.17928,0.35552 -0.044,0.0896 -0.0448,0.21567 -0.12815,0.27046 -0.39532,0.25981 -2.6533,2.49204 -2.81421,0.92387 7.1e-4,-0.42551 0.009,-0.8549 -0.0391,-1.27852 -0.008,-0.0668 -0.0876,-0.16183 -0.0317,-0.1991 0.75813,-0.50529 1.58062,-0.90664 2.37093,-1.35997 -0.30039,0.21988 -0.45182,1.12062 -0.67038,1.46242 -0.88488,1.81136 -0.45852,1.25005 -3.14673,2.73346 -0.6197,-0.22015 -0.51091,-0.90897 -0.54776,-1.45401 -0.0621,-0.70921 -0.1474,-1.42137 -0.39059,-2.09517 -0.10291,-0.18035 -0.19866,-0.33857 -0.43509,-0.34216 -0.0761,-0.001 -0.28886,0.0811 -0.2249,0.0398 0.55407,-0.35759 2.96289,-1.75711 1.70198,-1.0085 -1.48836,1.0392 -3.07502,1.96134 -4.72229,2.72108 -0.8549,0.24994 -1.10079,0.0593 -1.41687,-0.74238 -0.0144,-0.0359 -0.11155,-0.30452 -0.16418,-0.3632 -0.0216,-0.024 -0.0541,-0.044 -0.0865,-0.0438 -0.0427,1.8e-4 -0.15648,0.067 -0.12006,0.0447 2.2873,-1.39934 2.6695,-1.77112 1.82447,-1.01427 -1.28279,1.60557 -1.60492,1.89712 -3.91035,3.00012 -1.00225,0.16898 -1.12308,-0.55279 -1.30238,-1.36775 -0.0466,-0.2581 -0.18665,-1.41623 -0.3631,-1.59557 -0.0124,-0.0126 -0.0334,0.0117 -0.0501,0.0175 0.72553,-0.42978 1.44706,-0.86639 2.17661,-1.28934 0.0742,-0.043 -0.14579,0.0918 -0.20963,0.149 -0.0823,0.0738 -0.13355,0.18245 -0.22662,0.24206 -0.83638,0.53565 -1.69213,1.04091 -2.5522,1.53762 -0.0916,0.0529 -0.19399,0.0907 -0.29828,0.1086 -0.0991,0.017 -0.20112,-0.004 -0.30168,-0.006 -0.0894,-0.0446 -0.19004,-0.0714 -0.26812,-0.13365 -0.46293,-0.36912 -0.34215,-1.04687 -0.37231,-1.56295 0,0 2.42354,-1.23486 2.42354,-1.23486 z"
-       transform="translate(0,308.2677)" />
-    <path
-       style="fill:#999999;fill-opacity:1;stroke:#b62403;stroke-width:4.73199987;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:0.06329112;stroke-dasharray:none"
-       id="path3831"
-       d="m 126.23113,323.63665 c 0.0564,0.64214 0.16916,1.27323 0.2939,1.90475 0.0919,0.65528 0.23623,1.30035 0.37128,1.94763 0.13159,0.48045 0.32742,1.6942 0.70956,2.01377 0.0322,0.027 0.0828,0.0145 0.12418,0.0217 0.43076,-0.9103 0.0388,-0.0161 -2.17121,1.11621 -0.0516,0.0265 0.0668,-0.0959 0.0895,-0.14927 0.0277,-0.0651 0.0417,-0.13516 0.0604,-0.20336 0.0399,-0.14564 0.0962,-0.38521 0.13052,-0.52808 0.0819,-0.66869 0.25325,-1.29969 0.51137,-1.92041 0.23933,-0.57585 0.37609,-1.18923 0.5203,-1.79457 0.36082,-1.78836 -0.45778,-0.77823 2.54897,-2.05368 -0.1592,0.64827 -0.33248,1.29322 -0.48838,1.94236 -0.19321,0.6502 -0.1427,1.28897 -0.0161,1.94316 0.0936,0.31977 0.14928,0.68766 0.34268,0.96981 0.0317,0.0463 0.0735,0.10082 0.12915,0.10792 0.0384,0.005 0.11808,-0.0984 0.0835,-0.0808 -0.74401,0.37813 -1.47757,0.7765 -2.21635,1.16475 0.49713,-0.5741 0.75639,-1.28242 0.91505,-2.01349 0.0171,-0.41884 0.23365,-1.24964 0.1124,-1.64334 0.81904,-0.37399 1.60365,-0.83514 2.45713,-1.12196 0.0906,-0.0304 0.0247,0.18948 0.035,0.28446 0.0135,0.12423 0.0255,0.24862 0.0362,0.37312 0.0401,0.4665 0.062,0.93361 0.0826,1.40128 0.0173,0.87803 0.0798,1.75775 0.0307,2.63541 0.008,1.08569 0.37726,0.28103 -2.41919,1.32266 -0.0793,0.0295 0.0652,-0.1563 0.0921,-0.23648 0.11037,-0.32801 0.11923,-0.41962 0.19813,-0.77761 0.16916,-1.15692 0.4213,-2.29893 0.65517,-3.44382 0.0941,-0.23754 0.26357,-1.58826 0.46633,-1.72018 2.45204,-1.59531 1.9452,-2.20772 2.60207,-1.12095 0.18832,1.1645 0.14616,2.35865 0.15652,3.53585 0.0712,0.92469 -0.1105,1.89581 0.13851,2.80224 -0.10696,-0.94822 0.038,0.11117 -2.33551,1.08245 -0.0788,0.0322 0.0544,-0.16142 0.0787,-0.24303 0.0759,-0.25497 0.14757,-0.51116 0.22076,-0.76691 0.0425,-0.14855 0.0827,-0.29777 0.12408,-0.44665 0.30416,-0.94317 0.48755,-1.93209 0.87516,-2.84655 0.80736,-0.49522 1.56678,-1.07879 2.42208,-1.48566 0.38291,-0.18215 0.44679,1.95959 0.45095,2.04989 0.0381,1.08055 0.0406,2.16181 0.0465,3.24287 0.001,0.22463 -0.006,0.56631 0.0299,0.79457 0.0156,0.0992 0.0871,0.36177 0.13063,0.27131 0.0282,-0.0587 0.0673,-0.22277 0.008,-0.19521 -0.76047,0.35512 -1.46842,0.81328 -2.20263,1.21992 0.37772,-0.59301 0.48782,-1.28253 0.57072,-1.96703 0.13724,-0.7916 0.19375,-1.59355 0.30139,-2.38866 0.0686,-0.64864 0.24997,-1.27493 0.37768,-1.91228 0.0501,-0.28753 0.0674,-0.58778 0.18069,-0.8608 0.37832,-0.91203 1.68502,-1.06447 2.61986,-1.38229 0.10793,-0.0367 0.10483,0.20248 0.15725,0.30371 0.39974,1.066 0.41005,2.2228 0.52393,3.3427 0.1348,0.90181 0.1737,1.81662 0.30508,2.71821 0.0726,-0.0262 0.0402,0.31008 0.15592,0.31033 0.037,8e-5 0.082,-0.11611 0.0488,-0.0997 -0.75935,0.37531 -1.47425,0.83986 -2.24721,1.18628 -0.0868,0.0389 0.10311,-0.16012 0.14642,-0.24476 0.0585,-0.1144 0.10575,-0.23425 0.15862,-0.35137 0.33803,-0.96594 0.6578,-1.93781 1.01029,-2.89894 0.19282,-0.34374 0.4775,-1.30809 0.84632,-1.50141 2.61727,-1.37182 2.01993,-2.01613 2.76584,-0.95667 0.3275,0.93459 0.43934,1.92488 0.52968,2.90555 0.0342,0.44496 -0.0201,0.88887 -0.0301,1.33294 -0.001,0.0531 0.0612,0.16416 0.008,0.15909 -0.0596,-0.006 -0.0472,-0.11005 -0.0708,-0.16507 -0.77675,0.41448 -1.55349,0.82896 -2.33024,1.24344 0.10208,-0.86385 0.10377,-1.73724 0.11192,-2.60617 -0.0169,-0.86839 0.09,-1.73122 0.27101,-2.57896 0.14517,-1.00274 0.0291,-0.43768 2.51996,-1.19797 0.0861,-0.0263 0.21583,1.73457 0.22416,1.84909 0.0761,1.03943 0.08,2.08234 0.1329,3.12275 0.0809,1.04193 0.0696,0.22532 -2.41323,1.24234 -0.0643,0.0263 0.11139,-0.0871 0.14978,-0.14504 0.0701,-0.10571 0.11849,-0.22441 0.17147,-0.33964 0.0479,-0.10418 0.43487,-1.02657 0.45035,-1.06336 0.47805,-1.2296 1.13889,-2.37275 1.82427,-3.49552 0.75577,-1.24152 1.22389,-1.37573 3.00448,-2.2119 0.26143,-0.12276 0.43401,0.86725 0.45568,0.98204 0.15285,1.13034 0.10038,2.26225 -0.10335,3.38049 -0.039,0.18057 -0.0775,0.36127 -0.11708,0.54171 -0.003,0.0137 -0.22921,0.98607 -0.23883,0.99043 -2.60815,1.1798 -2.40009,1.84286 -2.54272,0.56708 -0.0488,-1.10984 -0.0635,-2.22395 -0.009,-3.33376 0.0131,-0.17711 0.0252,-0.35429 0.0391,-0.53134 0.003,-0.044 0.0614,-0.72964 0.0697,-0.83078 0.005,-0.0574 -0.0388,-0.14793 0.0134,-0.17232 2.57515,-1.203 2.42273,-1.83511 2.47084,-0.57284 0.016,0.99248 0.017,1.98514 0.0237,2.97772 0.19062,-0.008 -0.0983,0.3847 0.036,0.45882 0.0384,0.0212 0.0311,-0.15 -0.009,-0.1314 -0.77603,0.36301 -1.50036,0.82969 -2.27346,1.19889 -0.0713,0.034 0.10949,-0.11594 0.14905,-0.18435 0.0514,-0.089 0.081,-0.18898 0.12145,-0.28346 0.14418,-0.25555 0.42355,-1.37981 0.64325,-1.49507 0.82274,-0.4316 1.67273,-0.80914 2.5091,-1.21372 0.41649,0.85749 0.43075,1.85755 0.57411,2.78955 0.006,0.041 0.10454,0.71924 0.12947,0.8145 0.10272,0.39269 0.074,-0.11779 0.0177,-0.0935 -0.76899,0.3322 -1.42964,0.89019 -2.20767,1.20063 -0.12355,0.0493 0.0917,-0.24974 0.1375,-0.37462 0.28587,-0.99835 0.43243,-2.03233 0.59244,-3.05715 0.0189,-0.138 0.0351,-0.27641 0.0568,-0.41402 0.008,-0.0527 0.10087,-0.58982 0.12167,-0.6041 1.62575,-1.11652 2.37268,-2.34704 2.5756,-0.79893 0.0549,1.0545 0.0535,2.11108 0.066,3.16673 0.0635,0.57745 -0.12895,1.31997 0.21345,1.83645 0.098,-0.97244 0.0256,0.0257 -2.2907,1.13445 -0.0537,0.0257 0.0513,-0.10828 0.0667,-0.16581 0.0227,-0.0846 0.0355,-0.17164 0.0473,-0.25839 0.0334,-0.2445 0.0393,-0.43799 0.0533,-0.68522 0.0657,-0.63127 -0.0355,-1.2519 -0.12258,-1.87447 -0.0935,-0.53467 -0.0993,-1.05898 0.0188,-1.58816 0.41106,-1.09691 1.30407,-1.17879 2.74788,-1.60667 0.13638,-0.0404 0.12873,0.25568 0.16717,0.39263 0.0919,0.32753 0.14084,0.9312 0.17521,1.24969 0.0977,1.16006 0.15869,2.32321 0.18,3.48715 0.0226,0.33479 -0.0251,0.67417 0.0379,1.00628 0.007,0.0358 0.0499,0.13685 0.0379,0.10246 -0.0233,-0.0668 -0.008,-0.23004 -0.0719,-0.19985 -0.79306,0.37382 -1.52088,0.87273 -2.28132,1.30909 0.13115,-0.57506 0.11847,-1.17574 0.12661,-1.76308 -0.0229,-0.53592 0.0383,-1.06555 0.10909,-1.59532 0,0 2.42137,-1.19211 2.42137,-1.19211 l 0,0 c -0.0745,0.52088 -0.15721,1.0387 -0.1269,1.56722 -0.01,0.60686 -0.019,1.21404 -0.0606,1.81972 -2.53081,1.65251 -2.58645,2.3166 -2.57629,0.1637 -0.005,-1.16112 -0.0141,-2.32413 -0.13121,-3.48057 -0.0563,-0.43606 -0.0774,-0.74072 -0.19081,-1.15544 -0.0198,-0.0723 -0.14797,-0.164 -0.0868,-0.20731 0.71108,-0.50378 1.50692,-0.8759 2.25251,-1.32704 0.052,-0.0315 -0.1249,0.0256 -0.16962,0.0667 -0.0563,0.0518 -0.0782,0.13145 -0.11734,0.19718 -0.15587,0.49308 -0.15336,0.98532 -0.07,1.49437 0.083,0.6394 0.19869,1.27605 0.13352,1.92378 -0.0348,0.92686 -0.13729,4.66088 -2.63841,2.54662 -0.31617,-0.60696 -0.21942,-1.32678 -0.22823,-1.98726 0.003,-1.03996 0.008,-2.08265 -0.0823,-3.11951 -0.0117,-0.0861 -0.0234,-0.1721 -0.0351,-0.25814 0.02,0.0142 0.0389,0.0549 0.0601,0.0425 0.75979,-0.44603 1.47354,-0.96938 2.24466,-1.3955 0.0657,-0.0363 -0.0701,0.13388 -0.0917,0.2058 -0.0714,0.23772 -0.10741,0.54874 -0.14307,0.79017 -0.17224,1.0317 -0.33172,2.06764 -0.5636,3.08752 -0.34667,1.27117 -0.0849,0.63626 -2.49438,2.02791 -0.0704,0.0407 -0.14002,-0.0901 -0.18751,-0.15614 -0.20252,-0.28157 -0.0513,-0.72828 -0.17756,-1.03097 -0.12097,-0.84061 -0.15345,-1.74692 -0.49628,-2.52894 0.7618,-0.44004 1.52473,-0.87814 2.28541,-1.32013 0.0525,-0.0305 -0.1186,0.0419 -0.16067,0.0856 -0.32572,0.33846 -0.33863,0.90011 -0.55526,1.29983 -0.024,0.0765 -0.17951,0.57812 -0.18899,0.5842 -0.81904,0.52585 -2.21108,2.10116 -2.64766,1.23126 -0.0499,-0.0995 -0.0212,-0.46228 -0.0197,-0.5194 0.0107,-0.98723 0.0219,-1.97519 -0.0216,-2.96184 -0.0927,-1.29127 -0.14449,-0.45071 2.36147,-1.84843 0.0509,-0.0284 -0.0402,0.10997 -0.0511,0.16724 -0.085,0.44979 -0.0902,0.91226 -0.14698,1.36537 -0.0697,1.09077 -0.0456,2.1876 0.0162,3.27844 0.15447,1.26085 0.15744,0.38739 -2.30945,1.81105 -0.0511,0.0295 0.072,-0.0952 0.0947,-0.14974 0.17967,-0.43204 0.2159,-0.91117 0.35116,-1.35582 0.22205,-1.08382 0.28097,-2.17606 0.1189,-3.27548 -0.0229,-0.12152 -0.0396,-0.24435 -0.0686,-0.36457 -0.0168,-0.0697 -0.0258,-0.14617 -0.0683,-0.2039 -0.0136,-0.0185 -0.085,0.0342 -0.0654,0.0222 3.53342,-2.16415 2.1569,-1.59307 1.53858,-0.5594 -0.69157,1.11122 -1.38845,2.23006 -1.85245,3.46025 -0.18386,0.46601 -0.37891,0.93275 -0.54561,1.40538 -0.0295,0.0836 0.003,0.21284 -0.0755,0.25483 -2.61128,1.40569 -2.59024,2.0748 -2.53941,0.98182 0.0216,-1.04342 -0.0157,-2.08816 -0.0817,-3.12942 -0.0388,-0.44143 -0.0515,-0.67033 -0.11584,-1.09838 -0.0198,-0.13135 -0.0433,-0.26219 -0.0713,-0.39202 -0.0176,-0.0817 -0.1352,-0.19605 -0.0654,-0.24194 0.76183,-0.50089 1.61388,-0.84938 2.40759,-1.29802 0.0304,-0.0172 -0.0697,-0.002 -0.10454,-0.004 -0.28653,0.80558 -0.32037,1.6846 -0.33531,2.53152 -0.0127,0.87032 -0.0239,1.74065 -0.0457,2.6108 -0.78996,0.51027 -1.54615,1.07707 -2.36987,1.53082 -0.10918,0.0601 -0.10058,-0.23892 -0.0895,-0.36307 0.0388,-0.43371 0.0925,-0.86679 0.0727,-1.30385 -0.0745,-0.93013 -0.1765,-1.86849 -0.49349,-2.75243 -0.67047,-0.73902 -0.10972,-0.049 2.08185,-1.4133 0.0763,-0.0475 -0.18246,0.0417 -0.24975,0.10123 -0.15811,0.13983 -0.40435,0.63104 -0.48152,0.78733 -0.0771,0.15612 -0.14455,0.3168 -0.21682,0.4752 -0.36883,0.95332 -0.69821,1.92021 -0.98852,2.90038 -0.0467,0.11875 -0.0943,0.23713 -0.14001,0.35624 -0.0367,0.0956 -0.0228,0.22981 -0.10722,0.2877 -1.25134,0.85851 -2.36554,2.382 -2.83849,0.93669 -0.13548,-0.91146 -0.12151,-1.84254 -0.25989,-2.75506 -0.11257,-1.07876 -0.12198,-2.20163 -0.53683,-3.21926 -0.49332,-0.90319 -0.0992,-0.0754 2.1917,-1.45666 0.0481,-0.029 -0.11982,0.0138 -0.15965,0.0534 -0.19833,0.19689 -0.1555,0.57233 -0.21273,0.8161 -0.10644,0.64208 -0.32147,1.25944 -0.39246,1.90864 -0.12334,0.79068 -0.16379,1.59323 -0.30874,2.38156 -0.0689,0.70737 -0.16199,1.42066 -0.49114,2.06155 -2.12557,1.38239 -2.86665,2.56047 -2.82988,0.21948 0.008,-1.07893 0.0145,-2.15853 -0.0272,-3.23689 -0.0272,-0.46809 -0.043,-0.94104 -0.13924,-1.40174 -0.19237,-0.92052 -1.51162,0.95927 2.0859,-1.48778 -0.5268,0.82885 -0.59484,1.89041 -0.92133,2.80378 -0.16448,0.6176 -1.12738,5.46528 -2.89511,2.80854 -0.15945,-0.95538 -0.0725,-1.92666 -0.0887,-2.88994 -0.008,-1.12413 0.008,-2.26094 -0.17099,-3.37339 2.56907,2.10771 2.60532,-2.92327 1.93725,-0.8009 -0.0557,0.17712 -0.0854,0.36141 -0.12773,0.5422 -0.0458,0.19535 -0.0911,0.3908 -0.13661,0.5862 -0.23122,1.13888 -0.49431,2.27393 -0.63167,3.42933 -0.009,0.056 -0.16814,1.00275 -0.21628,1.0314 -2.72445,1.62175 -2.59573,2.17376 -2.46502,1.03051 0.0865,-0.8678 0.0101,-1.74504 0.003,-2.61536 -0.0218,-0.45947 -0.0436,-0.9185 -0.0931,-1.37605 -0.0129,-0.11926 -0.0277,-0.23835 -0.0453,-0.35701 -0.0128,-0.0863 -0.11734,-0.20754 -0.046,-0.25781 0.75609,-0.5326 1.59772,-0.932 2.39658,-1.398 -0.0594,0.15191 -0.0366,0.4374 -0.0442,0.58572 -0.0191,0.37326 -0.0506,0.74608 -0.10604,1.11586 -0.13429,0.76604 -0.38939,1.48564 -0.82482,2.13713 -2.41422,1.42142 -2.61226,2.3429 -3.21709,0.15509 -0.13894,-0.68572 -0.23746,-1.36006 -0.0337,-2.04716 0.15223,-0.64858 0.34954,-1.28812 0.44887,-1.94783 2.711,-1.44283 2.67188,-2.1454 2.34811,-0.27636 -0.14042,0.61943 -0.29013,1.24362 -0.50687,1.83989 -0.26275,0.60616 -0.48185,1.20411 -0.52581,1.87176 -0.24797,1.25301 -0.59141,3.07565 -2.8215,2.42553 -0.58908,-0.48234 -0.70159,-1.55811 -0.91652,-2.25481 -0.14369,-0.64582 -0.31614,-1.28564 -0.38889,-1.94497 -0.11838,-0.63231 -0.23338,-1.26241 -0.31647,-1.90038 0,0 2.40245,-1.27452 2.40245,-1.27452 z"
-       transform="translate(0,308.2677)" />
-    <path
-       style="fill:#999999;fill-opacity:1;stroke:#b62403;stroke-width:4.73199987;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:0.06329112;stroke-dasharray:none"
-       id="path3833"
-       d="m 155.25116,326.93946 c 0.36315,1.03177 0.52918,2.1191 0.87148,3.15517 0.13545,0.008 0.0881,0.42799 0.2625,0.46979 0.038,0.009 0.0974,-0.11667 0.0626,-0.0991 -0.76193,0.3847 -1.49407,0.82683 -2.258,1.20754 -0.0535,0.0267 0.0839,-0.0869 0.11345,-0.13879 0.0366,-0.0642 0.0552,-0.13717 0.0828,-0.20575 0.15259,-0.55201 0.15379,-1.13019 0.16311,-1.69864 2e-5,-1.47 0.21555,-1.25557 2.526,-1.93338 0.12209,-0.0358 0.0398,0.25163 0.0491,0.37852 0.0137,0.18678 0.0132,0.37433 0.0198,0.5615 0.0664,1.33559 -0.0864,2.6939 0.14391,4.01682 0.036,0.0634 0.0396,0.16488 0.10798,0.1902 0.0451,0.0167 0.12184,-0.14218 0.0786,-0.12113 -0.7375,0.35863 -1.42716,0.81465 -2.17887,1.14248 -0.12141,0.053 0.17915,-0.19603 0.25601,-0.3039 0.23666,-0.33211 0.37362,-0.62917 0.56345,-0.99326 0.58925,-0.92948 0.88367,-2.06351 1.59961,-2.90969 0.8387,-0.44489 1.63567,-0.97944 2.5161,-1.33468 0.33434,-0.1349 0.43865,1.70536 0.4457,1.83329 0.005,0.14804 0.0114,0.29604 0.0158,0.4441 0.007,0.23696 0.039,0.87849 0.0327,0.88142 -2.52915,1.17779 -2.43104,1.82863 -2.41862,0.63758 0.009,-0.85151 0.0893,-1.70454 0.20322,-2.54831 0.0611,-0.38866 0.11631,-0.78471 0.2308,-1.16255 0.30532,-1.00762 1.46436,-1.12919 2.5507,-1.54113 0.11365,-0.0431 0.11843,0.2123 0.17764,0.31845 0.29042,1.06018 0.45044,2.15583 0.63722,3.23901 0.0975,0.84949 0.32868,1.66565 0.64352,2.45742 0,0 -2.3315,1.30129 -2.3315,1.30129 l 0,0 c -0.32234,-0.81151 -0.56504,-1.6434 -0.64834,-2.51715 -0.18371,-1.04625 -0.34317,-2.10706 -0.6468,-3.1254 -0.54269,-0.83426 -0.14791,-0.15174 2.18187,-1.45875 0.0625,-0.035 -0.10343,0.10326 -0.13381,0.16811 -0.0603,0.12874 -0.16845,0.61753 -0.191,0.73267 -0.0263,0.13454 -0.0445,0.27056 -0.0667,0.40584 -0.12396,0.82722 -0.20856,1.66972 -0.20758,2.50599 0.0307,1.2622 0.10653,0.42618 -2.40877,1.82388 -0.0452,0.0251 0.0116,-0.10295 0.0136,-0.15467 0.0153,-0.39316 -0.001,-0.787 -0.0108,-1.18 -0.0222,-0.3934 -0.0355,-0.79125 -0.12354,-1.17723 -0.0179,-0.0784 -0.0348,-0.15863 -0.0708,-0.23051 -0.0107,-0.0213 -0.0823,-0.0224 -0.0622,-0.0352 0.713,-0.45298 1.44811,-0.8702 2.17216,-1.3053 -0.081,0.0565 -0.17633,0.0967 -0.24312,0.16951 -0.20373,0.22207 -0.40574,0.64594 -0.53508,0.89817 -0.30308,0.59106 -0.60172,1.18435 -0.91067,1.77244 -0.0797,0.16786 -0.57044,1.25994 -0.72402,1.36151 -0.81669,0.54014 -1.65886,1.0483 -2.53947,1.47639 -0.0775,0.0377 -0.16603,-0.068 -0.22089,-0.13449 -0.0634,-0.0769 -0.0781,-0.18352 -0.11713,-0.27528 -0.19215,-1.34013 -0.027,-2.70032 -0.14307,-4.04772 -0.0136,-0.17593 -0.0237,-0.35217 -0.0408,-0.52778 -0.01,-0.0992 -0.12007,-0.23733 -0.0398,-0.29638 3.27588,-2.40891 2.24012,-1.99238 2.25542,-0.62462 -0.009,0.58901 -0.007,1.18352 -0.11901,1.76407 -0.003,0.0113 -0.10146,0.44766 -0.12809,0.46478 -1.81011,1.16374 -2.35853,2.27289 -2.92354,0.74062 -0.31929,-1.04613 -0.47707,-2.14043 -0.91734,-3.1493 0,0 2.3827,-1.28851 2.3827,-1.28851 z"
-       transform="translate(0,308.2677)" />
-    <path
-       style="fill:#999999;fill-opacity:1;stroke:#b62403;stroke-width:4.73199987;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:0.06329112;stroke-dasharray:none"
-       id="path3837"
-       d="m 168.48043,327.9205 c 0.0718,0.96684 0.13811,1.93308 0.31136,2.88791 0.12945,0.70176 0.30184,1.39214 0.4755,2.08359 -0.0355,-0.16063 0.12644,0.63502 0.14215,0.49074 0.007,-0.0686 0.0443,-0.23463 -0.0185,-0.20611 -0.75601,0.34329 -1.4233,0.86344 -2.1803,1.20456 -0.0981,0.0442 0.0974,-0.19196 0.14611,-0.28794 0.35652,-0.9679 0.81305,-1.88959 1.27004,-2.81227 0.17414,-0.26334 0.53674,-1.41807 0.80531,-1.54576 0.83329,-0.39617 1.68672,-0.7485 2.53008,-1.12275 0.21294,0.85363 -0.0306,1.76421 -0.12346,2.62576 -0.0169,0.97318 -0.32194,1.94004 -0.21846,2.91339 -0.0173,0.36239 0.1398,0.002 0.10725,0.0175 -0.76007,0.37127 -1.47848,0.82547 -2.24524,1.18271 -0.0843,0.0393 0.12159,-0.14117 0.17424,-0.2178 0.17567,-0.25568 0.29128,-0.48659 0.4396,-0.75974 0.18296,-0.17744 0.47245,-1.44197 0.60478,-1.53245 2.46968,-1.68856 1.9321,-2.24194 2.67726,-1.08056 0.0468,0.18902 0.10392,0.37578 0.14033,0.56706 0.0974,0.51164 0.14414,1.0317 0.22627,1.54601 0.11644,0.72912 0.25683,1.45111 0.42207,2.17047 0.006,0.0205 0.17961,0.63102 0.25623,0.71921 0.023,0.0265 0.13492,-0.0327 0.10387,-0.0165 -0.74773,0.39136 -1.49456,0.78566 -2.25856,1.14421 -0.0747,0.0351 0.12856,-0.10529 0.18086,-0.16915 0.0716,-0.0874 0.1256,-0.18787 0.1884,-0.2818 0.38258,-0.84429 0.7298,-1.72072 0.91355,-2.63181 0.13429,-1.15365 -0.34737,-0.57637 2.46633,-1.33923 0.11265,-0.0305 -0.0113,0.23315 -0.0161,0.34976 -0.0178,0.43461 -0.0163,0.44605 -0.0274,0.88713 -0.0103,1.32217 0.22019,1.00352 -2.42751,1.70669 -0.15674,0.0416 0.0152,-0.32399 0.0201,-0.48609 0.0166,-0.55014 0.0238,-1.18215 0.0322,-1.72504 0.0868,-1.40366 -0.0884,-2.81658 -0.0143,-4.21895 3.75965,-1.96355 1.77201,-1.51271 2.95518,0.20311 0.30715,0.20874 0.57008,0.10482 0.89195,-0.0319 0.14023,-0.0596 0.54248,-0.27694 0.41119,-0.19963 -2.49363,1.46831 -2.2942,1.35152 -1.37056,0.71942 1.01404,-0.80858 3.13646,-3.09467 4.2181,-2.33761 0.11477,0.0803 0.192,0.20405 0.288,0.30607 0.55572,0.89587 0.61196,1.97093 0.68246,2.99552 0.0751,0.86399 0.0195,1.72896 -0.12354,2.58241 -0.33827,1.25067 -1.22928,1.23768 -2.78726,1.88255 -0.16339,0.0676 -0.61335,-0.66217 -0.6697,-0.7567 -0.46269,-0.85437 -0.67977,-1.82112 -0.84627,-2.77138 -0.0826,-0.43774 -0.0922,-0.88548 -0.17101,-1.32368 -0.0157,-0.0876 -0.0338,-0.17549 -0.0646,-0.25893 -0.006,-0.015 -0.0548,-0.0186 -0.0405,-0.0257 0.77868,-0.38698 1.56934,-0.74937 2.354,-1.12406 -0.30421,0.84973 -0.30603,1.79232 -0.34245,2.68743 0.0288,0.0322 -0.12502,0.84633 0.14494,0.81866 0.0628,-0.006 0.10254,-0.0739 0.15656,-0.10656 0.087,-0.0526 0.35468,-0.19899 0.2661,-0.14907 -0.64915,0.36585 -1.29855,0.73124 -1.94783,1.09686 0.79942,-0.45877 1.49129,-1.06843 2.20195,-1.64809 0.84979,-0.47004 1.66008,-1.01992 2.54936,-1.41014 0.17789,-0.0781 0.3994,0.50909 0.40332,0.52291 0.16459,0.58143 0.13968,1.25062 0.16477,1.84711 0.0119,0.62172 0.0159,1.24569 0.13531,1.85837 0.0229,0.11772 0.0462,0.23656 0.0888,0.34866 0.0121,0.0318 0.10161,0.057 0.0715,0.0728 -0.78099,0.40947 -1.59114,0.76075 -2.38671,1.14113 0.0328,-0.0319 0.0808,-0.0535 0.0983,-0.0958 0.17293,-0.41759 0.13183,-1.52608 0.14116,-1.99645 0.006,-0.49472 8e-5,-0.98839 0.033,-1.48235 0.0172,-0.25901 0.0819,-0.557 0.0495,-0.81912 0.83138,-0.32164 1.6219,-0.78098 2.49415,-0.96493 0.14233,-0.03 0.01,0.29078 0.013,0.4362 0.004,0.1807 0.006,0.36144 0.01,0.54215 0.01,0.52754 0.0171,1.05115 0.055,1.57744 0.0644,0.22692 0.036,0.70729 0.33859,0.80446 0.13056,0.0419 0.50832,-0.20335 0.38711,-0.13923 -0.69013,0.3651 -1.37381,0.74227 -2.06072,1.11341 0.66165,-0.67685 1.08626,-1.53664 1.5268,-2.36385 0.66837,-1.39555 0.85175,-1.41787 2.98072,-2.20131 0.10766,-0.0396 0.25526,0.41069 0.37443,0.725 0.29097,0.9529 0.32366,1.9768 0.66016,2.91469 0.0254,0.0387 0.0323,0.13045 0.0763,0.11607 0.0458,-0.0149 0.0532,-0.1646 0.01,-0.14415 -0.76091,0.35689 -1.45267,0.8551 -2.2262,1.18376 -0.10751,0.0457 0.11592,-0.20308 0.16621,-0.3085 0.074,-0.15507 0.32387,-0.76312 0.3816,-0.90211 0.26704,-0.71203 0.62715,-1.40977 0.80532,-2.15295 0.83666,-0.34358 1.64346,-0.77156 2.51,-1.03074 0.0868,-0.026 0.0282,0.17918 0.0351,0.26951 0.009,0.12233 0.011,0.24514 0.0134,0.3678 0.0108,0.53437 0.002,1.06956 7.9e-4,1.60398 0.0298,0.89117 -0.0825,1.8046 0.12186,2.68152 -0.0505,-0.94412 0.03,0.14037 -2.3334,1.07454 -0.0837,0.0331 0.0549,-0.17152 0.0788,-0.25832 0.13011,-0.47232 0.22206,-0.95458 0.34172,-1.4298 0.22677,-1.01774 0.5423,-2.00911 0.84054,-3.00688 0.41015,-1.29954 0.80074,-1.22965 2.72376,-2.0413 0.20678,-0.0873 0.57075,0.97762 0.60134,1.06874 0.18512,0.44228 0.21258,1.84444 0.5247,2.14275 0.0215,0.0206 0.0563,-0.019 0.0845,-0.0285 -3.7597,1.97638 -2.42928,1.7152 -1.99259,0.69443 0.16716,-0.39073 0.30918,-0.79417 0.46679,-1.18888 0.17971,-0.40061 0.35228,-0.80387 0.51887,-1.21004 0.0353,-0.0861 0.0699,-0.17259 0.10716,-0.25791 0.0197,-0.0451 0.0197,-0.11103 0.0636,-0.13338 0.81644,-0.41578 1.65923,-0.77765 2.48884,-1.16647 0.25656,0.9378 0.26247,1.93057 0.34043,2.89616 0.0294,0.17272 0.0514,0.34689 0.0883,0.51815 0.026,0.12028 0.0504,0.24279 0.10023,0.35529 0.02,0.045 0.0569,0.1199 0.10391,0.10514 0.0535,-0.0168 0.11153,-0.18115 0.0609,-0.15691 -2.16958,1.03913 -2.65011,1.90756 -2.02624,0.90909 0.33798,-0.85255 0.62255,-1.72309 1.03879,-2.54208 2.62565,-3.68368 3.01863,-0.54155 3.40265,1.00781 0.13899,0.41218 0.19367,0.93537 0.53576,1.25055 0.045,0.0415 0.10601,0.1013 0.16424,0.0823 0.0573,-0.0186 0.13441,-0.18826 0.0802,-0.16195 -0.74007,0.35927 -1.44645,0.78418 -2.16967,1.17628 0.37681,-0.79886 2.28264,-4.41001 3.05201,-1.81657 0.10791,0.85393 0.0189,1.72023 0.19304,2.56527 0.0523,0.0861 0.1106,0.28003 0.26428,0.26195 0.0437,-0.005 0.14438,-0.0998 0.10556,-0.0792 -2.15552,1.1489 -2.8925,1.70676 -2.05071,1.0827 0,0 2.50386,-1.04941 2.50386,-1.04941 l 0,0 c -0.69528,1.06213 -2.53867,2.43386 -3.19364,1.05274 -0.17095,-0.84047 -0.0875,-1.69691 -0.20718,-2.54469 -0.1508,-1.02742 -0.0638,-0.12455 2.31699,-1.45676 0.0418,-0.0234 -0.0923,0.0376 -0.12324,0.0742 -0.19796,0.23433 -0.24307,0.56978 -0.37311,0.83811 -0.82195,0.52326 -1.61696,1.09146 -2.46585,1.56977 -0.0663,0.0374 -0.1546,-0.0192 -0.2214,-0.0556 -0.51133,-0.27886 -0.56568,-1.0601 -0.7362,-1.53327 -0.14442,-0.58697 -0.25227,-1.20399 -0.49542,-1.76119 -0.0481,-0.11022 -0.27258,-0.23726 -0.17924,-0.31309 0.67601,-0.54924 1.49604,-0.89275 2.23362,-1.35604 0.0548,-0.0344 -0.12146,0.045 -0.18219,0.0675 -0.46933,0.78711 -0.7705,1.65947 -1.03566,2.53338 -0.49944,1.16674 -0.1644,0.54792 -2.60575,1.84162 -0.0727,0.0385 -0.16314,-0.0477 -0.22465,-0.10233 -0.28991,-0.25757 -0.18957,-0.82207 -0.30383,-1.13857 -0.0919,-0.90263 -0.0942,-1.82712 -0.33128,-2.70733 0.78741,-0.43698 1.57483,-0.87397 2.36224,-1.31096 -0.0382,0.0257 -0.0871,0.0402 -0.11467,0.0771 -0.31709,0.42505 -0.36205,1.0279 -0.66075,1.46645 -0.1549,0.39156 -0.30249,0.78412 -0.44295,1.18106 -0.0258,0.073 -0.19795,0.56698 -0.2127,0.57616 -0.81034,0.5043 -1.67855,0.90904 -2.51783,1.36356 -0.0554,-0.0489 -0.12581,-0.0848 -0.16633,-0.14659 -0.351,-0.53548 -0.27275,-1.57468 -0.50997,-2.17922 -0.0747,-0.21052 -0.13893,-0.47954 -0.29887,-0.65511 -0.0269,-0.0295 -0.14599,-0.0185 -0.11277,-0.0407 0.69956,-0.4681 1.43391,-0.882 2.15086,-1.32301 -0.0563,0.0625 -0.12849,0.11367 -0.16875,0.18748 -0.0622,0.11398 -0.0888,0.24402 -0.13312,0.36602 -0.30546,0.99801 -0.65084,1.9827 -0.86846,3.00583 -0.0456,0.18341 -0.0978,0.36531 -0.13677,0.55023 -0.13385,0.63444 -0.79862,5.39795 -2.7373,2.48586 -0.13536,-0.91339 -0.0924,-1.83275 -0.091,-2.75307 -0.003,-0.52519 -0.005,-1.05064 -0.0291,-1.57542 -0.005,-0.11408 -0.0121,-0.22811 -0.0213,-0.34195 -0.006,-0.0708 -0.0832,-0.17388 -0.0231,-0.21175 0.77408,-0.48808 1.61247,-0.86581 2.4187,-1.29871 -0.0362,-0.003 -0.0833,-0.0349 -0.10875,-0.009 -0.0478,0.0487 -0.23788,0.56691 -0.24571,0.58808 -0.1825,0.49342 -0.35947,0.98889 -0.57414,1.46981 -0.0386,0.0967 -0.42825,1.20425 -0.47798,1.24025 -0.44919,0.32518 -2.18121,2.4153 -2.71325,1.22916 -0.26532,-0.95628 -0.34722,-1.95411 -0.63763,-2.90563 -0.0462,-0.11171 -0.0801,-0.2293 -0.13857,-0.33511 -0.0236,-0.0428 -0.14407,-0.0761 -0.10367,-0.10355 0.71011,-0.48248 1.47193,-0.88409 2.20789,-1.32613 -0.0587,0.0442 -0.13176,0.0741 -0.17611,0.13272 -0.0461,0.0609 -0.33648,0.65523 -0.36195,0.7066 -0.45582,0.8361 -0.88212,1.69429 -1.46966,2.44896 -1.18772,0.71431 -2.74128,2.26682 -3.33571,1.22253 -0.12043,-0.21157 -0.15449,-0.53609 -0.19482,-0.76332 -0.0493,-0.70545 -0.0336,-1.41181 -0.0772,-2.11772 -0.008,-0.13262 -0.1402,-0.3186 -0.0331,-0.39724 0.74991,-0.55067 1.62274,-0.91057 2.43411,-1.36585 -0.1705,-0.0469 -0.0989,-0.0582 -0.14362,0.24965 -0.0918,0.63163 -0.0885,1.26887 -0.0854,1.90532 -0.008,0.76878 -0.0277,1.53674 -0.0706,2.30407 -0.83915,0.40925 -1.65241,0.87654 -2.51745,1.22776 -0.059,0.0239 -0.0655,-0.11074 -0.0831,-0.17187 -0.0359,-0.12423 -0.0563,-0.25262 -0.0766,-0.38033 -0.0996,-0.62626 -0.11421,-1.25957 -0.12346,-1.89243 -0.0235,-0.45248 -0.033,-0.82482 -0.0918,-1.27139 -0.02,-0.1517 -0.0424,-0.30378 -0.0812,-0.4518 -0.0172,-0.0657 -0.0376,-0.1368 -0.0856,-0.18488 -0.0247,-0.0248 -0.13442,0.0127 -0.10487,-0.006 0.68385,-0.43451 1.38919,-0.83423 2.08379,-1.25134 -0.73742,0.55295 -1.39768,1.21158 -2.1975,1.68128 -0.89069,0.51109 -1.76809,1.04611 -2.67209,1.53328 -0.19304,0.10402 -0.435,0.12765 -0.62506,-0.002 -0.31782,-0.21753 -0.20242,-0.72088 -0.20379,-1.02514 0.0415,-0.93082 0.0912,-1.86258 0.23044,-2.78495 0.8329,-0.45388 1.64378,-0.95075 2.49871,-1.36163 0.0335,-0.0161 0.0666,0.1032 0.1163,0.41803 0.0694,0.43961 0.0924,0.88236 0.15459,1.3229 0.15217,0.9186 0.35648,1.85178 0.81888,2.66973 0.11708,0.18449 0.17931,0.33407 0.36704,0.45415 0.0492,0.0315 0.21554,0.0182 0.16757,0.0516 -0.68625,0.47762 -1.42153,0.88067 -2.13451,1.31739 -0.0674,0.0413 0.1505,-0.0675 0.19756,-0.13095 0.0622,-0.0839 0.077,-0.19419 0.11549,-0.29129 0.1767,-0.83193 0.22839,-1.68585 0.17698,-2.53458 -0.0531,-0.95457 -0.0869,-1.97683 -0.61053,-2.80847 -0.0733,-0.0614 -0.1322,-0.1458 -0.21976,-0.18408 -0.0731,-0.032 -0.15929,-0.011 -0.23894,-0.0165 0.65387,-0.40166 1.30774,-0.80333 1.96162,-1.20499 0.133,-0.0811 -0.27372,0.15198 -0.39477,0.25 -0.30328,0.24558 -0.52772,0.57975 -0.85347,0.80138 -1.2286,0.92176 -0.67374,0.53452 -3.1942,1.91362 -0.50908,0.27855 -1.08493,0.34929 -1.52939,-0.0631 -0.0687,-0.10341 -0.14817,-0.20047 -0.20625,-0.31023 -0.0508,-0.0961 -0.37269,-1.04852 -0.32455,-1.07844 0.76982,-0.47864 1.58031,-0.88852 2.37047,-1.33278 -0.21013,0.2621 -0.14663,0.8693 -0.1513,1.14434 -0.0173,1.01803 -0.0123,2.03653 -8.6e-4,3.05457 0.01,0.50779 0.0189,1.16524 0.0413,1.68566 0.006,0.14994 0.14788,0.35915 0.0279,0.44937 -0.7382,0.55523 -1.58529,0.95449 -2.4201,1.34986 -0.17979,0.0851 0.39713,-0.90158 0.0346,-0.59582 0.005,-0.2788 -0.0366,-1.18047 0.009,-1.21308 3.20677,-2.29878 2.5356,-2.21748 2.36441,-1.06595 -0.16513,0.9385 -0.55301,1.8153 -0.86255,2.71282 -0.0161,0.0302 -0.28588,0.53944 -0.29907,0.54723 -0.85493,0.5051 -2.21717,2.02572 -2.73577,1.17892 -0.0639,-0.10426 -0.21397,-0.74651 -0.2229,-0.78175 -0.29327,-1.38354 -0.44501,-2.79708 -0.79782,-4.16533 -0.58125,-0.71223 -0.16601,-0.16455 2.11806,-1.40196 0.0846,-0.0458 -0.10536,0.16196 -0.14462,0.2498 -0.0815,0.18228 -0.23403,0.67243 -0.30118,0.85193 -0.0565,0.1511 -0.1214,0.29893 -0.1821,0.4484 -0.0347,0.0688 -0.49931,1.00887 -0.53869,1.0343 -0.93547,0.60414 -2.23149,2.30804 -2.76441,1.0888 -0.0986,-1.00014 0.20999,-1.97922 0.22949,-2.97885 0.0692,-0.78859 0.22141,-1.57642 0.1858,-2.36847 0.77504,-0.43421 1.55831,-0.85403 2.32511,-1.30262 0.0484,-0.0283 -0.11887,0.005 -0.16371,0.0382 -0.0756,0.0567 -0.12817,0.14009 -0.17978,0.21926 -0.23843,0.36574 -0.38265,0.78718 -0.57598,1.17572 -0.45379,0.9108 -0.93525,1.81059 -1.24745,2.78348 -0.0372,0.10814 -0.0203,0.25553 -0.11155,0.32441 -0.60319,0.45517 -2.40032,2.25693 -2.71589,1.34882 -0.0517,-0.1487 -0.0239,-0.31816 -0.0872,-0.46414 -0.16448,-0.70248 -0.33572,-1.40136 -0.45148,-2.11455 -0.1712,-0.95224 -0.23809,-1.91515 -0.35882,-2.87397 0,0 2.40105,-1.26662 2.40105,-1.26662 z"
-       transform="translate(0,308.2677)" />
-    <path
-       style="fill:#000000;fill-opacity:1;stroke:#b62403;stroke-width:4.73199987;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:0.06329112;stroke-dasharray:none"
-       id="path3839"
-       d="m 127.01673,326.06181 c 0.27561,0.65365 0.60317,1.2838 0.8694,1.94134 0.0351,0.063 0.13357,0.3035 0.25128,0.32864 0.035,0.007 0.12114,-0.0758 0.0895,-0.0592 -0.75844,0.3995 -1.50897,0.81404 -2.27035,1.20791 -0.0435,0.0225 0.0835,-0.0542 0.11402,-0.0925 0.0436,-0.0547 0.0698,-0.12136 0.10477,-0.18204 0.7905,-1.78444 -0.68303,-0.55106 2.7944,-2.11914 0.19785,0.51738 0.30372,1.06192 0.48719,1.58343 0.25306,0.59737 0.55772,1.09077 1.25855,1.11697 -0.0761,0.1733 0.65222,-0.31439 0.49302,-0.22811 -0.69487,0.3766 -1.36737,0.79466 -2.07148,1.15368 -0.093,0.0474 0.1541,-0.14086 0.22856,-0.21398 0.0627,-0.0616 0.10794,-0.14381 0.18272,-0.18991 0.8179,-0.50417 1.65839,-0.97074 2.48759,-1.45611 0.0648,0.0174 0.13821,0.0155 0.19432,0.0523 0.38278,0.2508 0.41486,1.10869 0.52596,1.51473 0.041,0.0715 0.0681,0.15296 0.12306,0.21436 0.10565,0.11804 0.14153,0.0743 0.25636,0.0373 -0.74853,0.39659 -1.48967,0.80747 -2.2456,1.18976 -0.0614,0.031 0.11161,-0.0822 0.15729,-0.13364 0.0526,-0.0593 0.0901,-0.13045 0.13511,-0.19567 0.25328,-0.46342 0.30981,-0.98839 0.34689,-1.50589 0.004,-0.0856 0.008,-0.17108 0.011,-0.25667 0.001,-0.0423 0.0251,-0.57464 0.0404,-0.58157 2.57786,-1.17028 2.30824,-1.89232 2.5696,-0.70338 0.1329,0.76112 0.20076,1.5299 0.40312,2.27727 0.065,0.12818 0.0967,0.2683 0.24481,0.32642 0.14058,0.0552 0.21102,-0.11174 0.2023,-0.10715 -0.74244,0.39079 -1.46867,0.81163 -2.20301,1.21745 0,0 2.51159,-1.0399 2.51159,-1.0399 l 0,0 c -1.06025,0.63704 -2.43944,2.40082 -3.12156,0.8892 -0.20619,-0.74941 -0.26412,-1.52106 -0.41068,-2.2824 -0.31247,-1.18326 -0.16654,-0.24842 2.29661,-1.70218 0.0236,-0.0139 -0.0556,0.022 -0.0678,0.0466 -0.10725,0.21543 -0.0177,0.47661 -0.0575,0.703 -0.0299,0.54901 -0.0791,1.10311 -0.29174,1.61671 -0.55842,1.17578 -2.61178,2.77544 -3.26088,1.27434 -0.0726,-0.26151 -0.16082,-0.97686 -0.30521,-1.17427 -0.0479,-0.0655 -0.13665,0.003 -0.17588,0.0203 0.71082,-0.42618 1.40939,-0.87349 2.13246,-1.27854 0.0787,-0.0441 -0.12998,0.12521 -0.19145,0.1912 -0.0737,0.0791 -0.12296,0.18521 -0.21378,0.2438 -0.76331,0.49247 -1.96937,1.63043 -3.13787,1.63597 -0.70788,-0.18335 -1.13782,-0.69754 -1.40439,-1.36545 -0.18736,-0.50171 -0.2997,-1.02424 -0.48547,-1.52674 3.05888,-1.8615 2.48297,-2.22175 2.23883,-1.10199 -0.0546,0.25041 -0.10162,0.5031 -0.20393,0.74016 -0.0295,0.0668 -0.0623,0.13215 -0.0885,0.20023 -0.0248,0.0643 -0.006,0.16073 -0.0646,0.19657 -1.38229,0.84057 -2.29739,2.1815 -2.96171,0.83029 -0.24948,-0.64749 -0.56103,-1.26909 -0.87119,-1.88924 0,0 2.35404,-1.36439 2.35404,-1.36439 z"
-       transform="translate(0,308.2677)" />
-    <path
-       style="fill:#000000;fill-opacity:1;stroke:#b62403;stroke-width:4.73199987;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:0.06329112;stroke-dasharray:none"
-       id="path3841"
-       d="m 136.26673,328.56181 c 0.30694,0.6397 0.65351,1.25689 0.90774,1.92039 0.10065,0.29333 0.16436,0.59804 0.27718,0.88737 0.0207,0.0532 0.0315,0.1152 0.0719,0.15554 0.014,0.014 0.0587,-0.0517 0.041,-0.0429 -0.76886,0.38422 -1.53169,0.78038 -2.29754,1.17056 0.45871,-0.48687 0.72139,-1.15142 0.9702,-1.7667 0.23781,-0.56538 0.40407,-1.1527 0.69545,-1.69402 0.5484,-0.96707 2.46547,-2.63287 3.17755,-1.69168 0.0532,0.0704 0.0837,0.1554 0.12551,0.23311 0.2071,0.69406 0.19806,1.43155 0.21483,2.14989 0.0272,0.27235 -0.09,1.18683 0.36711,1.20703 0.0844,0.004 0.16586,-0.0326 0.24879,-0.0489 1.05168,-0.27453 4.14302,-2.14431 0.18063,0.12354 0.44325,1.2626 1.94173,-1.74443 3.04545,-1.49686 0.57321,0.12857 0.68186,0.86028 0.77953,1.32134 0.077,0.43651 0.0988,0.87894 0.12591,1.32033 0.006,0.0939 0.0112,0.1878 0.019,0.28153 0.003,0.0414 0.052,0.1051 0.0149,0.1239 -0.79324,0.40185 -1.62027,0.73321 -2.43041,1.09981 0.006,-0.59584 0.001,-1.19176 -1.5e-4,-1.78763 -0.007,-0.7285 -0.0523,-1.45006 0.21593,-2.1385 0.62253,-0.93732 2.08605,-2.31963 3.0152,-1.42414 0.3544,0.34156 0.57103,0.82954 0.79071,1.25826 0.24402,0.44484 0.35803,0.94597 0.60158,1.39065 0.0571,0.10432 0.21403,0.42476 0.27253,0.15698 -3.42534,1.97473 -2.3083,1.9766 -2.18243,0.86108 0.0319,-0.28244 0.0582,-0.5613 0.10168,-0.84274 0.11237,-0.85488 0.3059,-1.69594 0.46221,-2.54325 0.38593,-1.2103 0.96113,-1.08378 2.7471,-1.72349 0.0882,-0.0316 0.43941,0.8302 0.47213,0.91116 0.29407,0.6501 0.48413,1.33642 0.64695,2.02882 0.18995,0.69999 0.35106,1.40538 0.44464,2.12481 0.0146,0.33369 0.15644,0.60976 0.30865,0.89719 0,0 -2.33551,1.33834 -2.33551,1.33834 l 0,0 c -0.16876,-0.31265 -0.3381,-0.61827 -0.36324,-0.98189 -0.0765,-0.71268 -0.21689,-1.41462 -0.42148,-2.10218 -0.16204,-0.67762 -0.33719,-1.35584 -0.62739,-1.99202 -0.0948,-0.22946 -0.14344,-0.3808 -0.27829,-0.58643 -0.0297,-0.0453 -0.15246,-0.0908 -0.10788,-0.12152 0.71452,-0.49328 1.48491,-0.90033 2.2311,-1.34425 0.0563,-0.0335 -0.11964,0.062 -0.16118,0.1128 -0.0651,0.0796 -0.10081,0.17924 -0.15122,0.26886 -0.15798,0.83916 -0.34678,1.67461 -0.44414,2.52353 -0.28859,2.01499 0.3986,1.01811 -2.53225,2.80989 -0.62828,-0.37289 -0.62804,-1.29344 -0.98985,-1.86668 -0.17467,-0.32217 -0.28817,-0.56839 -0.51296,-0.8536 -0.0696,-0.0883 -0.14122,-0.17934 -0.23389,-0.243 -0.0542,-0.0372 -0.24476,-0.0111 -0.19098,-0.0489 3.93954,-2.76682 2.54916,-1.6554 1.89181,-1.12282 -0.053,0.0893 -0.12076,0.17145 -0.15903,0.26804 -0.21924,0.55329 -0.071,1.18648 -0.11013,1.76098 0.002,0.58971 0.002,1.17981 0.0262,1.76911 -0.8082,0.46212 -1.59824,0.95756 -2.4246,1.38637 -0.0395,0.0205 0.008,-0.0887 0.01,-0.13322 0.0138,-0.52549 -0.0274,-1.05251 -0.0988,-1.57273 -0.0571,-0.27557 -0.089,-0.74237 -0.36679,-0.91751 -0.6346,-0.40013 -3.29919,1.81936 1.38902,-1.12963 -0.9019,0.52242 -1.8014,1.04903 -2.70572,1.56727 -0.66758,0.38258 -1.38423,0.74818 -2.15398,0.84976 -0.11207,-0.0219 -0.23198,-0.0191 -0.33623,-0.0657 -0.52098,-0.23305 -0.47242,-0.98626 -0.48328,-1.44901 -0.008,-0.67501 6.1e-4,-1.36657 -0.17664,-2.02263 -0.0388,-0.0697 -0.0565,-0.16467 -0.15875,-0.16216 -0.0383,9.4e-4 -0.14034,0.0596 -0.10778,0.0396 3.56785,-2.20306 2.38646,-1.73927 1.78541,-0.86903 -0.3237,0.52132 -0.48542,1.09691 -0.71993,1.66039 -0.24624,0.65065 -0.56171,1.27105 -0.87956,1.88918 -2.72808,1.45054 -2.43299,2.09666 -2.97964,0.14589 -0.23546,-0.65312 -0.56686,-1.25952 -0.9076,-1.86314 0,0 2.35404,-1.36439 2.35404,-1.36439 z"
-       transform="translate(0,308.2677)" />
-    <path
-       style="fill:#000000;fill-opacity:1;stroke:#b62403;stroke-width:4.73199987;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:0.06329112;stroke-dasharray:none"
-       id="path3843"
-       d="m 155.80417,329.89116 c 0.64328,0.2809 1.0517,0.82148 1.40464,1.40214 0.129,0.24868 0.28264,0.5461 0.55727,0.66797 0.057,0.0253 0.12535,0.0499 0.18449,0.0303 0.0685,-0.0228 0.22473,-0.17859 0.16082,-0.14503 -0.71009,0.37295 -1.40322,0.77736 -2.10483,1.16604 0.40816,-0.33645 0.75407,-0.73968 1.09061,-1.14543 0,0 2.46751,-1.05355 2.46751,-1.05355 l 0,0 c -0.32661,0.41914 -0.68196,0.81257 -1.0458,1.19988 -1.77069,1.04129 -2.63454,2.45604 -3.64306,0.63352 -0.32504,-0.5369 -0.69143,-1.03434 -1.32114,-1.22958 0,0 2.24949,-1.52626 2.24949,-1.52626 z"
-       transform="translate(0,308.2677)" />
-    <path
-       style="fill:#000000;fill-opacity:1;stroke:#b62403;stroke-width:4.73199987;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:0.06329112;stroke-dasharray:none"
-       id="path3845"
-       d="m 161.42597,329.67247 c -0.24615,0.67066 -0.34095,1.38517 -0.41372,2.09236 -0.0144,0.48344 -0.0812,0.95887 -0.16201,1.4348 0,0 -2.43106,1.18718 -2.43106,1.18718 l 0,0 c 0.0817,-0.47297 0.17759,-0.94123 0.18107,-1.42366 0.0728,-0.72297 0.18645,-1.44012 0.35416,-2.14762 0,0 2.47156,-1.14306 2.47156,-1.14306 z"
-       transform="translate(0,308.2677)" />
-    <path
-       style="fill:#000000;fill-opacity:1;stroke:#b62403;stroke-width:4.73199987;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:0.06329112;stroke-dasharray:none"
-       id="path3847"
-       d="m 167.93811,331.20482 c -0.20128,0.93793 -0.37556,1.88222 -0.53071,2.82892 -0.0114,0.0598 -0.21837,1.04975 0.10504,0.99969 0.0396,-0.006 0.28722,-0.18799 0.28804,-0.18857 -3.58161,2.20967 -2.21071,1.33698 -1.48853,0.59102 0.28776,-0.29723 0.56566,-0.60433 0.84675,-0.90783 1.05119,-0.97653 2.67926,-2.9007 3.38026,-1.02689 0.11182,0.26415 0.0848,1.14925 0.37048,1.25496 0.048,0.0178 0.10075,-0.018 0.15113,-0.027 1.00253,-0.57674 -1.22687,0.70777 -1.90442,1.02917 -0.11477,0.0544 0.18361,-0.17603 0.2676,-0.27132 0.31778,-0.36051 0.57354,-0.76343 0.8296,-1.16804 0.85458,-1.6091 0.83722,-1.3661 3.19209,-2.56946 0.0808,-0.0413 0.18568,0.009 0.26819,0.0462 0.0898,0.041 0.15545,0.12188 0.23318,0.18282 0.43754,0.60802 0.41493,1.38117 0.58019,2.08503 0.0227,0.068 0.098,0.3751 0.19953,0.44143 0.0953,0.0622 0.20616,-0.19821 0.19644,-0.19347 -2.01719,0.98428 -2.65264,1.77215 -1.79576,0.81003 0.636,-0.80294 1.23009,-1.63745 1.83685,-2.46235 0.57263,-0.86697 2.40658,-3.43922 3.2545,-2.14645 0.0537,0.0818 0.0736,0.18133 0.11046,0.27199 0.14002,0.76443 0.23334,1.53575 0.30313,2.30942 0.0562,0.58871 0.0579,1.18017 0.079,1.77054 0.003,0.0273 0.0244,0.1052 0.01,0.082 -0.61852,-0.96973 1.33245,-0.8506 -2.36298,1.04073 -0.0676,0.0346 0.0795,-0.12946 0.11868,-0.19454 0.26678,-0.44334 0.048,-0.0926 0.37148,-0.6002 0.40417,-0.55951 0.78349,-1.14075 1.21423,-1.68074 0.0828,-0.10382 0.14925,-0.23001 0.26206,-0.30007 0.8313,-0.51628 1.70232,-0.96568 2.55347,-1.44852 0.74223,0.29322 0.86161,1.07935 1.0127,1.77491 0.1937,0.72526 0.15995,1.49084 0.37668,2.20845 0.0444,0.0518 0.072,0.12549 0.13331,0.15535 0.1249,0.0608 0.35776,-0.0695 0.43711,-0.11641 0.10444,-0.0618 0.40486,-0.26619 0.29732,-0.21001 -1.90468,0.995 -2.52405,1.57403 -1.51949,0.71253 0.75315,-0.61464 1.25949,-1.47606 2.03266,-2.06312 0.86325,-0.43811 1.68911,-0.9594 2.58976,-1.31434 0.0978,-0.0385 0.17819,0.1167 0.24636,0.19666 0.29077,0.34112 0.40773,0.86935 0.52303,1.28891 0.27027,1.46033 0.93961,0.39432 -2.17886,1.79479 -0.0522,0.0235 0.0871,-0.0778 0.11439,-0.12809 0.042,-0.0775 0.0599,-0.16587 0.0899,-0.24881 0.16145,-0.63973 0.32584,-1.28598 0.61553,-1.8816 0.8141,-0.45748 1.56835,-1.04344 2.44231,-1.37245 0.13247,-0.0499 0.13475,0.25178 0.17147,0.38848 0.16479,0.61337 0.12789,1.62631 0.1484,2.27429 0.10973,0.89929 -0.1146,1.85945 0.13367,2.73897 0.024,0.0319 0.0587,0.13333 0.0719,0.0957 0.27322,-0.77359 -1.49747,0.67092 -2.24066,1.01843 -0.0813,0.038 0.0763,-0.16264 0.10823,-0.24648 0.0736,-0.19286 0.21172,-0.63952 0.26758,-0.81543 0.17205,-0.52743 0.33869,-1.05854 0.55711,-1.56931 0.0214,-0.05 0.21603,-0.4945 0.30015,-0.53746 0.82781,-0.42263 1.68489,-0.78529 2.52733,-1.17793 0.31499,0.71598 0.27743,1.53386 0.31596,2.30297 0.15298,0.97796 0.0884,0.30775 -2.37984,1.19448 -0.0851,0.0306 0.0766,-0.16407 0.10737,-0.24911 0.14986,-0.4147 0.27685,-0.84186 0.41382,-1.26112 0.25744,-0.75054 0.33748,-1.54041 0.48629,-2.31512 0.32503,-1.0165 0.12752,-0.53068 2.53864,-1.38778 0.10182,-0.0362 0.0865,0.19867 0.11688,0.30237 0.10281,0.35093 0.11678,0.73313 0.14989,1.09464 0.0171,0.12488 0.0197,0.25259 0.0512,0.37465 0.017,0.066 0.0903,0.32499 0.2416,0.2991 0.0583,-0.01 0.19225,-0.13641 0.13991,-0.10893 -2.12051,1.11348 -2.73281,1.70778 -1.9052,0.94913 0.7511,-1.02773 1.14784,-1.1156 2.85776,-1.82703 0.20737,-0.0863 0.33562,0.90774 0.34597,0.98079 0.10672,0.52967 -0.0592,1.54945 0.28432,1.9861 0.028,0.0356 0.0824,0.0376 0.12359,0.0563 0.55165,-0.82842 3.4e-4,0.0431 -2.09061,1.05077 -0.0802,0.0386 0.11697,-0.1351 0.16459,-0.21031 0.16134,-0.25487 0.24168,-0.55658 0.3378,-0.83916 0.47958,-1.06397 0.98103,-0.94614 2.70832,-1.5249 0.0745,-0.025 0.34456,0.90263 0.35929,0.94987 0.0447,0.10076 0.0765,0.20836 0.13421,0.3023 0.0264,0.043 0.17856,0.2379 0.28518,0.19977 0.0512,-0.0183 0.15423,-0.14886 0.10589,-0.124 -2.12083,1.09054 -2.71277,1.80868 -1.97946,0.9766 0.71374,-1.11288 2.09506,-2.89861 3.59491,-2.21171 0.0747,0.0596 0.14945,0.11913 0.22418,0.1787 0,0 -2.28554,1.45363 -2.28554,1.45363 l 0,0 c -0.0597,-0.0361 -0.11942,-0.0722 -0.17913,-0.10826 -1.01903,-0.1402 -0.18784,0.0163 1.91938,-1.30227 0.0794,-0.0497 -0.18422,0.0537 -0.25771,0.11169 -0.25041,0.19771 -0.35048,0.55622 -0.53619,0.80294 -0.48794,0.83589 -2.34621,2.31831 -3.06217,1.5771 -0.1896,-0.19628 -0.20747,-0.30656 -0.31856,-0.56155 -0.0196,-0.0577 -0.17868,-0.53225 -0.21682,-0.6205 -0.0218,-0.0505 -0.12759,-0.11393 -0.0813,-0.1437 0.74426,-0.47856 1.55566,-0.84444 2.31763,-1.29428 0.0432,-0.0255 -0.10822,-0.0134 -0.14993,0.0146 -0.0629,0.0422 -0.093,0.11958 -0.13942,0.17937 -0.43867,1.2685 -1.04949,3.28176 -3.15487,2.59097 -0.0594,-0.0603 -0.13314,-0.10917 -0.17811,-0.18083 -0.37283,-0.59418 -0.18108,-1.40282 -0.30468,-2.0557 -0.0178,-0.12031 -0.0304,-0.24151 -0.0535,-0.36092 -0.0145,-0.0751 -0.0309,-0.15061 -0.0591,-0.22172 -0.004,-0.0101 -0.0409,-0.002 -0.0316,-0.007 0.729,-0.44056 1.4655,-0.86857 2.19864,-1.30221 0.0679,-0.0402 -0.15011,0.0632 -0.203,0.1218 -0.0828,0.0917 -0.12864,0.21107 -0.19296,0.31661 -0.75217,1.01738 -0.32772,0.5165 -2.76115,1.71925 -0.14918,0.0737 -0.39307,-0.16396 -0.45017,-0.25216 -0.14847,-0.22934 -0.1457,-0.43064 -0.18442,-0.69422 -0.16958,-1.92523 -0.7437,-0.81035 2.13389,-2.48086 0.0398,-0.0231 -0.0828,0.0403 -0.12422,0.0605 -0.21159,0.7728 -0.22973,1.58771 -0.50397,2.34716 -0.12814,0.41436 -0.28603,0.82205 -0.38696,1.24425 -0.0232,0.0972 0.0282,0.24203 -0.057,0.29421 -2.58328,1.58217 -2.59092,2.21178 -2.51069,1.146 -0.004,-0.68174 0.005,-1.39582 -0.20547,-2.04972 0.75825,-0.44188 1.51857,-0.88024 2.27476,-1.32565 0.0628,-0.037 -0.14514,0.0463 -0.19419,0.10016 -0.45442,0.49879 -0.50591,1.29103 -0.76458,1.88487 -0.0168,0.0587 -0.27653,1.06399 -0.31272,1.09122 -0.59212,0.44553 -2.08562,2.45286 -2.68476,1.28603 -0.21809,-0.91982 -0.0396,-1.88178 -0.11157,-2.81733 -0.0183,-0.58722 -0.031,-1.17622 -0.1,-1.76038 -0.0162,-0.13737 -0.0472,-0.27272 -0.0639,-0.41004 -0.003,-0.0236 -0.0146,-0.0584 0.006,-0.0711 0.73428,-0.46598 1.48861,-0.89961 2.23291,-1.34941 -0.40895,0.49414 -0.49685,1.21152 -0.65328,1.81626 -0.0221,0.0904 -0.0469,0.18022 -0.0664,0.27123 -0.0171,0.08 0.0272,0.20031 -0.0434,0.24155 -2.22255,1.29724 -2.44656,2.06569 -2.72722,0.51117 -0.082,-0.31759 -0.16637,-0.62761 -0.31919,-0.92035 -0.0341,-0.0652 -0.0632,-0.13721 -0.11738,-0.18696 -0.0376,-0.0345 -0.18608,-0.024 -0.14383,-0.0527 0.6766,-0.45926 1.39803,-0.84872 2.09705,-1.27308 -0.86997,0.47031 -1.32561,1.41262 -2.07729,2.03544 -1.11369,1.03987 -0.40955,0.43095 -3.03593,1.98021 -0.43569,0.257 -0.88214,0.24248 -1.1444,-0.22181 -0.21885,-0.72774 -0.18574,-1.49636 -0.37141,-2.23353 -0.0855,-0.37149 -0.14583,-1.21653 -0.59449,-1.3755 -0.0577,-0.0204 -0.12236,2.7e-4 -0.18355,4e-4 3.91078,-2.38999 2.33503,-1.62572 1.75619,-0.97226 -0.4514,0.5096 -0.78225,1.116 -1.19983,1.65163 -0.89601,1.37437 -0.2287,0.9561 -2.84863,2.2954 -0.0825,0.0422 -0.12945,-0.13576 -0.17314,-0.21747 -0.0143,-0.0268 0.006,-0.0606 0.008,-0.0908 0.0104,-0.58907 -0.008,-1.17866 -0.0429,-1.7667 -0.0564,-0.74883 -0.14788,-1.49254 -0.29361,-2.22966 -0.21511,-0.69641 -1.0851,0.36573 2.10665,-1.38745 0.0867,-0.0476 -0.13065,0.14888 -0.19023,0.22787 -0.0448,0.0594 -0.4215,0.61002 -0.45364,0.65686 -0.61864,0.81782 -1.21701,1.65077 -1.8272,2.47487 -0.85283,1.08087 -0.3602,0.53393 -2.79465,1.93125 -0.36636,0.21027 -0.59411,-0.4623 -0.63317,-0.66794 -0.15472,-0.62938 -0.13237,-1.34106 -0.4978,-1.89216 -0.0489,-0.0192 -0.0942,-0.0556 -0.14673,-0.0575 -0.0646,-0.002 -0.12567,0.03 -0.1885,0.045 0.68197,-0.41554 1.36394,-0.83108 2.04591,-1.24663 0.10256,-0.0573 -0.18403,0.15018 -0.25321,0.24513 -0.0189,0.0259 -0.42425,0.79755 -0.42993,0.80831 -0.84051,1.39985 -1.9738,3.02197 -3.86774,3.03247 -0.08,-0.0404 -0.1716,-0.0632 -0.23989,-0.12121 -0.37456,-0.31799 -0.28417,-0.91307 -0.41576,-1.33764 -0.035,-0.0988 -0.077,-0.26825 -0.16415,-0.34794 -0.0239,-0.0218 -0.12024,-0.0104 -0.0929,-0.0277 3.99662,-2.52831 2.45209,-1.57099 1.7197,-0.94643 -0.28269,0.30363 -0.56303,0.60943 -0.84575,0.91303 -0.0126,0.0135 -0.51942,0.55696 -0.55029,0.57666 -0.84176,0.53752 -1.71443,1.02503 -2.57165,1.53754 -0.87773,0.14021 -0.74893,-0.72485 -0.65206,-1.31509 0.15637,-0.93521 0.32717,-1.86769 0.48905,-2.80185 0,0 2.43602,-1.19798 2.43602,-1.19798 z"
-       transform="translate(0,308.2677)" />
-    <path
-       style="fill:#999999;fill-opacity:1;stroke:#b62403;stroke-width:4.73199987;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:0.06329112;stroke-dasharray:none"
-       id="path3849"
-       d="m 128.51673,340.56181 c 0.35685,0.77924 0.45916,1.6393 0.60895,2.47459 0.0644,0.17071 0.11519,0.59587 0.35749,0.66443 0.0725,0.0205 0.22109,-0.19971 0.15423,-0.16506 -0.74675,0.38699 -1.4677,0.82186 -2.20154,1.23279 0.27949,-0.44944 0.42051,-0.96583 0.51794,-1.48128 0.12447,-0.51977 0.21945,-1.04574 0.35464,-1.56284 0.13884,-0.5362 0.29324,-1.0706 0.48624,-1.58999 0.47961,-1.10937 0.60395,-0.82098 2.67548,-1.55911 0.0888,-0.0316 0.17991,0.83348 0.18286,0.86374 0.064,0.64721 0.2106,1.27768 0.35882,1.90907 0.12592,0.53062 0.1682,1.07411 0.18414,1.61758 -0.0394,0.64483 0.17843,1.25398 0.32678,1.87125 0.0881,0.30917 0.13657,1.30421 0.62454,0.7276 -3.20016,1.76131 -2.45376,1.7208 -1.90318,0.89209 0.27441,-0.41304 0.4546,-0.86843 0.601,-1.33872 0.16997,-0.64843 0.40504,-1.27711 0.55186,-1.93135 0.0901,-0.43246 0.23269,-0.8581 0.25386,-1.30231 0.002,-0.0444 -0.0489,-0.11437 -0.009,-0.13306 0.78372,-0.36344 1.60049,-0.65085 2.40074,-0.97627 -0.0779,0.92195 -0.12282,1.85256 -0.0693,2.77702 0.0218,0.11235 0.0336,0.22708 0.0653,0.33705 0.0161,0.0558 0.11691,0.36077 0.2363,0.38263 0.0564,0.0103 0.20281,-0.10679 0.15213,-0.0801 -2.24227,1.18289 -2.7236,1.69267 -1.9041,0.89862 0.55258,-0.60902 0.76811,-1.41558 1.17649,-2.10769 0.82014,-0.48103 1.59341,-1.05284 2.46044,-1.44309 0.0975,-0.0439 0.15376,0.1508 0.21308,0.23975 0.25966,0.38937 0.3421,0.91376 0.42749,1.36234 0.12025,0.50366 -0.0172,1.56216 0.47036,1.86687 0.49852,-0.92951 -0.0189,0.11811 -2.03759,0.96054 -0.12123,0.0506 0.14358,-0.22086 0.20067,-0.33916 0.22476,-0.46586 0.35456,-0.98128 0.49106,-1.47705 0.2771,-1.13063 0.48178,-2.27517 0.88608,-3.37005 0.57522,-0.86448 0.61819,-1.01267 2.70541,-0.98306 0.28165,0.004 0.0825,0.55757 0.10845,0.83805 0.1193,1.28807 0.13177,2.58857 0.18009,3.88048 0.11456,1.52668 0.0161,3.07027 0.15995,4.59482 -0.31902,-0.99878 0.10151,0.13698 -2.35775,0.99374 -0.12158,0.0424 0.0568,-0.25119 0.0815,-0.37754 0.0319,-0.16309 0.0621,-0.32656 0.0883,-0.49067 0.18095,-1.13364 -0.0414,0.0573 0.19848,-1.1652 0.20242,-0.9044 0.39825,-1.81007 0.50835,-2.73086 0.056,-0.54167 0.0425,-1.0844 0.12606,-1.62298 0.34046,-1.45618 0.81801,-1.64252 2.7495,-2.3655 0.14325,-0.0536 0.1124,0.28451 0.16859,0.42677 0.14089,2.00782 0.0852,4.02635 0.1034,6.03853 0.0255,0.88909 -0.005,1.79047 0.11372,2.67517 0.0173,0.12868 0.0422,0.25758 0.0852,0.38008 0.0108,0.0308 0.10077,0.0517 0.0718,0.0667 -0.76279,0.39313 -1.55274,0.73114 -2.32911,1.09671 0.59508,-1.0978 0.72939,-2.39154 0.92211,-3.60847 0.19967,-1.24807 0.38908,-2.49998 0.74412,-3.71498 0.55523,-1.15893 1.3291,-1.27513 2.90154,-1.8158 0.18637,-0.0641 0.48488,1.08756 0.51253,1.19312 0.25805,0.93514 0.35266,1.90156 0.51688,2.8541 0.0227,0.0675 0.003,0.17331 0.068,0.2025 0.0492,0.0221 0.078,-0.17975 0.0281,-0.15931 -0.74156,0.30384 -1.38586,0.86761 -2.16924,1.03657 -0.21848,0.0471 0.17313,-0.41231 0.24923,-0.62246 0.19403,-0.5358 0.50543,-1.53742 0.66774,-2.04818 0.36861,-1.07091 0.70145,-2.15623 1.15148,-3.19723 0.0461,-0.10656 0.35001,-0.84125 0.56207,-0.96953 0.82836,-0.50109 1.70638,-0.91508 2.55957,-1.37262 0.63422,0.6782 0.7216,1.67644 0.8219,2.56185 0.1227,0.39474 -0.0258,1.64469 0.16036,1.93748 -0.79771,0.3827 -1.5697,0.82446 -2.39314,1.14811 -0.0803,0.0316 0.0616,-0.16125 0.0898,-0.24279 0.0479,-0.13853 0.0909,-0.27874 0.13854,-0.41735 0.20315,-0.59093 0.418,-1.17801 0.632,-1.76506 0.45092,-0.93303 0.56656,-2.07899 1.23764,-2.89609 0.85745,-0.35178 1.66141,-0.88457 2.57235,-1.05535 0.18493,-0.0347 0.108,0.36146 0.1394,0.54697 0.19704,1.16419 0.16251,2.3856 0.19992,3.56187 0.006,0.9642 0.0656,1.92945 0.0551,2.89384 -0.008,0.75624 -0.0433,0.23031 0.004,0.76147 0.32135,-0.87492 -0.0566,0.22291 -2.15917,0.977 -0.1454,0.0521 0.18431,-0.24854 0.26384,-0.38096 0.2876,-0.47888 0.49999,-1.00989 0.72844,-1.518 0.60358,-1.52852 0.88726,-1.79729 3.04561,-2.44729 0.16477,-0.0496 0.13527,0.31927 0.16755,0.4883 0.0449,0.23492 0.0415,0.47653 0.0622,0.7148 0.0959,2.10722 0.0172,4.21808 0.20952,6.32014 0.28274,1.83123 0.86557,0.96301 -2.11292,2.21455 -0.0772,0.0325 0.12481,-0.11384 0.17268,-0.18258 0.0874,-0.12549 0.15374,-0.26438 0.23061,-0.39657 0.57342,-1.17175 1.05503,-2.38441 1.48805,-3.61406 0.25687,-0.74101 0.59362,-1.47224 0.66483,-2.26098 -0.26641,-0.9471 -0.12612,-0.31176 2.36981,-1.21589 0.11077,-0.0401 -0.13468,0.1953 -0.18076,0.30373 -0.23005,0.54138 -0.32305,1.16313 -0.45534,1.73237 -0.0437,0.20265 -0.0893,0.40489 -0.13106,0.60795 -0.0153,0.0743 -0.15697,0.80156 -0.18019,0.94447 -0.009,0.0571 0.0337,0.14838 -0.0189,0.1725 -2.55377,1.17156 -2.60349,1.71017 -2.26457,0.55 0.12491,-0.44574 0.19579,-0.9033 0.30736,-1.35223 0.007,-0.0263 0.11373,-0.4345 0.13987,-0.44839 0.81677,-0.43419 1.66554,-0.80531 2.4983,-1.20796 0.36115,0.66 0.42191,1.46413 0.93952,2.03077 0.0556,-0.006 0.12134,0.0149 0.16692,-0.0175 0.0705,-0.0501 0.23075,-0.24681 0.15257,-0.20983 -0.70633,0.33404 -1.33709,0.82369 -2.0628,1.11323 -0.15342,0.0612 0.19573,-0.26631 0.28629,-0.40445 0.23874,-0.36417 0.34096,-0.56746 0.54936,-0.9468 0.37892,-0.79666 2.11764,-4.85683 3.29103,-2.32314 0.23628,0.54784 0.2185,1.57664 0.50987,2.04736 0.004,-1.05259 0.0598,0.0596 -2.17683,0.96169 -0.12589,0.0508 0.12925,-0.23902 0.18518,-0.36271 0.22433,-0.4961 0.3866,-1.01928 0.56778,-1.53188 0.54316,-1.18471 1.0852,-1.24418 2.81958,-1.8823 0.18571,-0.0683 0.41973,1.12922 0.4388,1.22202 0.19133,1.07301 0.33796,2.15631 0.66899,3.19742 0.01,0.0193 0.15878,0.45125 0.32997,0.41551 0.0616,-0.0129 0.16393,-0.18299 0.10736,-0.15537 -0.72928,0.35613 -1.39982,0.83077 -2.14568,1.15075 -0.11765,0.0505 0.14822,-0.20932 0.21116,-0.3208 0.0784,-0.13896 0.14145,-0.28608 0.21218,-0.42912 0.15669,-0.16725 0.36595,-1.05661 0.54817,-1.17685 1.7235,-1.13727 2.34965,-2.32824 2.70721,-0.78986 0.0546,0.41268 0.0746,0.82888 0.0898,1.24453 0.004,0.1076 -0.0162,0.49229 0.0421,0.63442 -0.79765,0.3437 -1.56388,0.77227 -2.39297,1.03109 -0.10973,0.0343 0.0794,-0.21578 0.12255,-0.32233 0.0615,-0.15181 0.12231,-0.30403 0.19122,-0.45261 0.25188,-0.5431 0.55334,-1.06411 0.83221,-1.5935 0.68984,-1.39988 0.92467,-1.46177 2.96764,-2.37738 0.23669,-0.10607 0.57542,1.03565 0.60865,1.1432 0.0895,0.2934 0.42644,2.19199 0.74151,2.15754 0.0834,-0.009 0.12561,-0.1114 0.18841,-0.16709 -0.67308,0.33796 -1.29085,0.8223 -2.01924,1.0139 -0.21971,0.0578 0.25169,-0.37889 0.3614,-0.57782 0.61002,-1.10609 1.0735,-2.30664 1.56084,-3.4699 0.69198,-1.78672 0.54542,-1.90244 3.06024,-2.81133 0.13968,-0.0505 0.13374,0.26922 0.16229,0.41498 0.0383,0.1956 0.0239,0.39791 0.0358,0.59686 0.0237,2.10253 -0.0443,4.20324 0.10905,6.3018 0.30539,0.10152 -0.041,0.84675 0.25981,1.03913 0.061,0.039 0.14487,-0.22925 0.0773,-0.20308 -0.73236,0.28384 -1.36346,0.84569 -2.13358,1.00001 -0.21226,0.0425 0.15139,-0.40614 0.20994,-0.61454 0.073,-0.25994 0.12286,-0.52585 0.1843,-0.78877 0.26243,-1.1026 0.27745,-2.27304 0.65616,-3.34778 0.83992,-0.3493 1.63935,-0.81913 2.51977,-1.04791 0.12323,-0.032 0.0499,0.25008 0.0633,0.3767 0.0894,0.84719 0.0616,1.7152 0.0727,2.56569 0.0211,0.59272 -0.029,1.20604 0.11673,1.78857 0.024,0.0959 0.0588,0.19131 0.11216,0.27447 0.0208,0.0325 0.13476,0.0388 0.10076,0.057 -0.74872,0.40239 -1.52725,0.74667 -2.29087,1.12 0.0644,-0.0607 0.14066,-0.11072 0.19307,-0.18195 0.14738,-0.20029 0.32674,-0.62383 0.41642,-0.83262 0.24997,-0.58196 0.47318,-1.17387 0.72447,-1.75546 0.29188,-0.60364 0.52262,-1.2336 0.78624,-1.84941 0.0152,-0.0354 0.26406,-0.62648 0.33226,-0.66346 0.81588,-0.44235 1.67349,-0.80296 2.51024,-1.20444 0.0428,0.15245 0.10154,0.3013 0.12847,0.45735 0.0516,0.29902 0.0756,1.0774 0.084,1.34343 0.0259,0.82165 0.03,1.64401 0.0412,2.46593 0.003,0.23279 -0.006,0.46603 0.009,0.69837 0.004,0.0688 0.0443,0.63132 0.17678,0.74959 0.0341,0.0304 0.1699,-0.0659 0.12943,-0.0448 -2.30896,1.20579 -2.68528,1.70151 -1.9046,0.81832 0.29012,-0.34493 0.72348,-1.73691 1.06269,-1.91874 0.83146,-0.44569 1.69484,-0.82907 2.54226,-1.2436 0.0629,0.11132 0.14213,0.21489 0.18868,0.33397 0.30819,0.78843 0.24953,1.97968 0.3132,2.82598 0.0429,0.4612 0.0243,0.60406 0.16397,1.01553 0.037,0.10893 0.15049,0.33931 0.23058,0.25674 0.0505,-0.0521 0.15235,-0.23059 0.0867,-0.1997 -0.73456,0.34555 -1.42574,0.77665 -2.13862,1.16498 0.43751,-0.69266 0.66791,-1.48424 0.93025,-2.25316 0.41406,-1.00514 0.20254,-0.60308 2.52688,-1.47383 0.10873,-0.0407 0.0885,0.21592 0.11353,0.32931 0.0863,0.39177 0.0616,0.83245 0.0754,1.23068 0.0365,0.27483 -0.0129,0.555 0.0178,0.83002 0.007,0.0631 0.003,0.15026 0.0579,0.18137 0.0388,0.0218 0.0766,-0.14623 0.0356,-0.12879 -0.73427,0.3125 -1.38279,0.8508 -2.15976,1.03279 -0.21458,0.0503 0.19274,-0.3964 0.2891,-0.5946 0.80417,-1.90946 1.29796,-3.92643 1.79416,-5.93191 0.38612,-1.48328 0.41986,-1.50528 2.75083,-2.16217 0.15026,-0.0423 0.17603,1.78748 0.17978,1.90447 0.0371,0.74944 0.0114,1.50035 0.0344,2.25002 0.0118,0.38387 -0.008,0.86127 0.15852,1.22179 -0.0321,-1.06069 0.0685,0.0197 -2.14698,0.90985 -0.13441,0.054 0.15835,-0.24287 0.22946,-0.36908 0.28279,-0.50185 0.51182,-1.03187 0.74007,-1.55974 0.0745,-0.18549 0.15246,-0.36962 0.2235,-0.55646 0.0208,-0.0547 0.38576,-1.16749 0.42473,-1.19052 2.56392,-1.51547 2.27047,-2.13822 2.55932,-0.79294 0.0631,1.53137 0.0172,3.06486 0.0919,4.59576 0.0354,0.11973 0.0984,0.56531 0.3111,0.63981 0.0608,0.0213 0.11897,-0.0496 0.17846,-0.0743 -0.70295,0.37259 -1.38989,0.7771 -2.10884,1.11778 -0.11509,0.0545 0.20111,-0.15852 0.28559,-0.25382 0.10651,-0.12015 0.18945,-0.25928 0.28417,-0.38892 0.45124,-1.0553 2.55204,-3.88639 3.25237,-1.93477 0.0249,0.0987 0.0497,0.19747 0.0746,0.29621 0,0 -2.37534,1.28647 -2.37534,1.28647 l 0,0 c -0.0234,-0.0893 -0.0468,-0.17851 -0.0702,-0.26776 -0.27035,-0.71651 0.0143,-0.25793 2.16374,-1.46275 0.075,-0.042 -0.1195,0.12472 -0.16725,0.19617 -0.13013,0.19474 -0.33695,0.62412 -0.4334,0.81562 -0.047,0.0788 -0.37366,0.66535 -0.49573,0.73979 -0.0655,0.04 -2.5427,2.3784 -3.11299,1.00449 -0.0669,-0.16111 -0.0864,-0.33801 -0.12958,-0.50701 -0.0589,-1.51387 0.0282,-3.03363 -0.12606,-4.54388 -0.0481,-1.1051 -0.0836,-0.34845 2.28341,-1.58339 0.0777,-0.0405 -0.0994,0.14536 -0.1354,0.22524 -0.22338,0.4961 -0.33415,1.0392 -0.56808,1.5316 -0.48921,1.15516 -1.79693,4.62351 -3.60777,3.44267 -0.10832,-0.36567 -0.0718,-0.17798 -0.0971,-0.68752 -0.048,-0.96552 -0.0169,-1.93233 -0.0557,-2.89833 -0.0428,-0.83274 -0.0179,-0.5672 -0.0958,-1.32631 -0.01,-0.0945 -0.10845,-0.22688 -0.0319,-0.28321 4.93436,-3.63266 2.40569,-1.8243 2.08557,-1.07659 -0.086,0.20086 -0.13951,0.41413 -0.20927,0.6212 -0.53815,1.99492 -1.02561,4.00756 -1.73885,5.95003 -0.0758,0.20298 -0.0594,0.47214 -0.22737,0.60895 -0.77844,0.63388 -1.64733,1.15521 -2.52889,1.63543 -0.17993,0.098 -0.25499,-0.41013 -0.25517,-0.41192 -0.0281,-0.27438 0.0275,-0.55317 -0.009,-0.82739 -0.0697,-1.96632 -0.5701,-1.06422 2.22408,-2.59607 0.0562,-0.0308 -0.0808,0.0994 -0.12114,0.14916 -0.29662,0.77136 -0.51274,1.57381 -0.88831,2.31423 -0.81971,0.5385 -1.61423,1.11744 -2.45912,1.61549 -0.072,0.0425 -0.17314,0.0141 -0.25022,-0.0184 -0.42309,-0.17816 -0.41631,-1.19927 -0.45855,-1.54048 -0.0751,-0.92896 -0.005,-1.97073 -0.3952,-2.83129 0.7334,-0.44206 1.46681,-0.88411 2.20021,-1.32616 -0.0746,0.0495 -0.16333,0.0825 -0.22378,0.14852 -0.43358,0.4737 -0.56091,1.17955 -0.88408,1.71901 -0.0642,0.12481 -0.0741,0.29919 -0.19259,0.37442 -0.10406,0.0661 -2.29154,2.03699 -2.84896,1.23665 -0.2937,-0.4217 -0.10626,-1.11357 -0.1595,-1.56807 -0.003,-1.32323 0.0206,-2.66406 -0.20842,-3.97134 0.75386,-0.44899 1.49518,-0.91974 2.26159,-1.34696 0.0797,-0.0444 -0.1424,0.11807 -0.19308,0.19391 -0.46338,0.69347 -0.60402,1.56343 -1.01326,2.28494 -0.42172,0.95395 -0.74759,1.94663 -1.19113,2.89128 -0.85629,0.42825 -1.68294,0.92174 -2.56886,1.28473 -0.052,0.0213 -0.19263,-0.23276 -0.25258,-0.51258 -0.1288,-0.60121 -0.0859,-1.22668 -0.1014,-1.83564 -0.01,-0.67084 -0.0156,-1.3425 -0.0632,-2.01207 -0.0116,-0.16333 -0.0265,-0.3265 -0.046,-0.48907 -0.0116,-0.0965 -0.12714,-0.23196 -0.0475,-0.28763 0.74309,-0.51945 1.57967,-0.89037 2.3695,-1.33555 -0.0476,0.0108 -0.11383,-0.007 -0.14281,0.0324 -0.10537,0.14279 -0.26069,0.80873 -0.27995,0.89861 -0.16378,0.76405 -0.26067,1.543 -0.40493,2.31065 -0.0505,0.26526 -0.0942,0.53189 -0.15133,0.79579 -0.046,0.21234 0.003,0.48662 -0.15805,0.63235 -0.75032,0.67854 -1.60621,1.23903 -2.47828,1.75176 -0.0847,0.0498 -0.20364,-0.061 -0.25791,-0.14302 -0.21375,-0.32283 0.003,-0.8439 -0.19701,-1.14473 -0.12933,-2.0866 -0.0555,-4.17668 -0.17484,-6.26377 -0.14578,-1.39831 -0.0653,-0.70732 2.18854,-1.95535 0.0836,-0.0463 -0.14126,0.13223 -0.19094,0.21388 -0.17729,0.29135 -0.42993,0.96106 -0.53934,1.2307 -0.38649,0.89873 -0.77069,1.79892 -1.16154,2.69569 -0.11442,0.26253 -0.23216,0.52365 -0.3532,0.78319 -0.0966,0.20708 -0.11991,0.47541 -0.29961,0.61655 -0.80921,0.63559 -1.73422,1.10799 -2.60133,1.66198 -0.11193,-0.0163 -0.23575,0.004 -0.3358,-0.049 -0.47846,-0.25237 -0.57242,-1.80146 -0.7817,-2.29497 -0.0476,-0.14517 -0.0849,-0.2941 -0.14275,-0.4355 -0.0402,-0.0982 -0.0835,-0.19819 -0.15017,-0.2808 -0.0181,-0.0224 -0.10984,0.004 -0.0857,-0.0115 3.26352,-2.11477 2.10782,-1.616 1.56002,-0.41011 -0.27406,0.51967 -0.57677,1.03065 -0.82449,1.56362 -0.0651,0.14011 -0.12205,0.28402 -0.17609,0.42878 -0.038,0.10175 -0.008,0.25133 -0.0998,0.31019 -0.8019,0.51705 -1.67426,0.91562 -2.5114,1.37343 0.12681,-0.51941 -0.053,-1.31376 -0.069,-1.85182 -0.21467,-1.0226 0.0277,-0.42057 2.142,-1.57629 0.0887,-0.0485 -0.1313,0.15517 -0.18133,0.24298 -0.0776,0.13629 -0.13584,0.28283 -0.19981,0.42605 -0.0721,0.16155 -0.139,0.32542 -0.2085,0.48813 -0.0226,0.052 -0.34421,0.79686 -0.35973,0.80801 -0.87277,0.62755 -2.36605,2.18029 -2.95855,1.28335 -0.0731,-0.11059 -0.11222,-0.24016 -0.16833,-0.36024 -0.32559,-1.0517 -0.46262,-2.14379 -0.6793,-3.22084 -0.0608,-0.27862 -0.0971,-0.53074 -0.21478,-0.79047 -0.0167,-0.0367 -0.11178,-0.0702 -0.0781,-0.0924 0.71575,-0.47329 1.47413,-0.87873 2.2112,-1.31809 -0.0674,0.046 -0.14865,0.0765 -0.20232,0.13799 -0.0873,0.10004 -0.14147,0.22471 -0.2122,0.33706 -0.42088,1.15803 -1.25923,4.66923 -3.34955,3.40516 -0.28133,-0.64455 -0.23589,-1.41058 -0.50752,-2.06657 -0.314,-0.92912 -0.0843,-0.14192 2.23486,-1.43757 0.0622,-0.0348 -0.10845,0.0948 -0.14891,0.15349 -0.25132,0.36457 -0.37702,0.80572 -0.58929,1.19071 -0.0802,0.1511 -0.69774,1.33035 -0.78185,1.3932 -0.80282,0.59985 -1.66168,1.12259 -2.52161,1.63725 -0.22651,0.13556 -0.34417,0.0119 -0.53014,-0.0861 -0.45412,-0.58452 -0.5796,-1.31153 -0.92749,-1.95509 4.51605,-2.63608 2.36796,-1.91154 2.07492,-0.96775 -0.13732,0.44223 -0.17966,0.90626 -0.29339,1.35399 -0.31156,1.27801 -0.0298,0.51081 -2.60368,1.79651 -0.0603,0.0301 0.0323,-0.13089 0.0483,-0.19635 0.128,-0.52192 0.22839,-1.04903 0.34684,-1.57322 0.13046,-0.58158 0.26827,-1.16113 0.40064,-1.74178 0.0314,-0.13762 -0.0421,-0.34141 0.0775,-0.41629 2.50629,-1.56863 2.29893,-2.09772 2.58174,-1.02008 -0.027,0.82677 -0.39605,1.58898 -0.68128,2.35275 -0.44069,1.22941 -0.92696,2.44017 -1.44652,3.63839 -0.0648,0.13368 -0.13299,0.26576 -0.19437,0.40105 -0.0396,0.0872 -0.0249,0.21902 -0.10834,0.26613 -2.78655,1.57422 -2.51729,1.90414 -2.73422,-0.007 -0.15165,-2.09687 -0.0525,-4.20188 -0.23755,-6.29746 -0.0289,-0.21581 -0.0549,-0.43204 -0.0868,-0.64744 -0.0105,-0.0712 -0.099,-0.17048 -0.0403,-0.21218 0.70452,-0.5006 1.48079,-0.89164 2.22119,-1.33747 -0.066,0.0657 -0.14543,0.12032 -0.19809,0.19716 -0.16685,0.24346 -0.31802,0.65805 -0.42501,0.91821 -0.42213,0.95666 -1.99813,5.06273 -3.64374,3.26612 -0.0216,-0.67176 -0.009,0.0905 0.0311,-0.79676 0.0443,-0.97024 -0.007,-1.94447 0.002,-2.91496 -0.0217,-0.92574 -0.0394,-1.85342 -0.13914,-2.77504 -0.0253,-0.23413 -0.0561,-0.46797 -0.0992,-0.69948 -0.0252,-0.13546 -0.2119,-0.31207 -0.10554,-0.39967 0.67875,-0.55908 1.50288,-0.9135 2.25431,-1.37024 -0.0762,0.0373 -0.16984,0.0508 -0.22864,0.11202 -0.17388,0.18101 -0.36771,0.66003 -0.45218,0.86506 -0.24592,0.59687 -0.4312,1.21587 -0.68091,1.8113 -0.25249,0.69718 -0.54293,1.40806 -0.72076,2.12951 -0.0224,0.0907 0.0364,0.22679 -0.0424,0.27693 -0.78978,0.50253 -1.65058,0.88362 -2.47587,1.32544 -0.22954,-0.6405 0.002,-1.38013 -0.14289,-2.04023 -0.0628,-0.59286 -0.13124,-1.77591 -0.62144,-2.1687 0.69242,-0.42918 1.37177,-0.88019 2.07725,-1.28754 0.12543,-0.0724 -0.24547,0.16404 -0.33228,0.27998 -0.14599,0.19498 -0.24859,0.41956 -0.35541,0.63846 -0.49896,1.02251 -0.8219,2.11386 -1.19056,3.18657 -0.19621,0.67361 -0.38785,1.34856 -0.5857,2.0217 -0.0618,0.21022 -0.0248,0.48579 -0.19048,0.62916 -0.75697,0.65485 -1.61545,1.18992 -2.48508,1.68549 -0.0738,0.0421 -0.15646,-0.0826 -0.20361,-0.1533 -0.046,-0.069 -0.0398,-0.16097 -0.0597,-0.24146 -0.15716,-0.94726 -0.20929,-1.91484 -0.49105,-2.83967 -0.0696,-0.25606 -0.12511,-0.54286 -0.26356,-0.77691 -0.0312,-0.0528 -0.18065,-0.0947 -0.13042,-0.12998 0.69715,-0.4894 1.4627,-0.87335 2.19037,-1.31611 0.0746,-0.0454 -0.16784,0.0635 -0.23095,0.12387 -0.0918,0.0879 -0.14808,0.20655 -0.22212,0.30983 -0.39595,1.20191 -0.59925,2.45584 -0.8053,3.70167 -0.19272,1.24446 -0.35618,2.49922 -0.76515,3.69565 -0.84423,0.44669 -1.65951,0.95299 -2.53269,1.34005 -0.0606,0.0268 -0.0692,-0.11552 -0.0842,-0.18004 -0.0748,-0.32075 -0.0756,-0.83746 -0.0839,-1.13128 -0.0297,-1.04879 -0.0202,-0.90993 -0.0121,-2.02756 -0.003,-1.96551 0.0129,-3.94361 -0.21485,-5.89814 0.28815,-0.90421 0.0465,-0.203 2.26487,-1.43847 0.0609,-0.0339 -0.0789,0.11528 -0.1113,0.17699 -0.11925,0.22729 -0.17829,0.47507 -0.26302,0.71558 -0.0974,0.53695 -0.0978,1.07479 -0.14422,1.61815 -0.11514,0.93535 -0.32829,1.85215 -0.5414,2.76934 -0.10933,0.54558 -0.17001,1.08705 -0.25164,1.63667 -0.0181,0.12165 0.0359,0.28711 -0.06,0.36406 -2.30786,1.85079 -1.88366,2.39188 -2.49685,1.4262 0.12724,-1.5519 -0.003,-3.11927 0.0121,-4.67302 -0.044,-1.27131 -0.0749,-2.54845 -0.24778,-3.81085 -0.0344,-0.25124 -0.31297,-0.56403 -0.13848,-0.74804 0.62827,-0.66257 1.53563,-0.98915 2.28307,-1.51361 0.0607,-0.0426 -0.14245,0.041 -0.21368,0.0616 -0.48706,1.06186 -0.65762,2.21731 -0.92356,3.34699 -0.37521,1.53585 -1.04488,3.87825 -3.35548,3.43413 -0.51046,-0.54468 -0.43046,-1.34278 -0.53483,-2.03674 -0.0626,-0.33796 -0.12432,-0.67451 -0.26204,-0.99218 -0.41226,-0.9509 -1.79487,0.88148 2.0143,-1.50017 -0.28884,0.30308 -0.3518,0.59628 -0.52558,0.97119 -0.13375,0.28857 -0.27117,0.53873 -0.43446,0.81142 -0.0701,0.11705 -0.14556,0.23081 -0.21834,0.34622 -0.75575,1.03429 -0.37305,0.59221 -2.7817,1.73319 -0.0869,0.0412 -0.19168,-0.0468 -0.26944,-0.10345 -0.26561,-0.19355 -0.2985,-0.60465 -0.35825,-0.88964 -0.0567,-0.933 0.0169,-1.86866 0.022,-2.80274 0.81753,-0.48906 1.6116,-1.01967 2.4526,-1.46718 0.0487,-0.0259 -0.003,0.11025 -0.006,0.16534 -0.0214,0.45582 -0.12594,0.89405 -0.23921,1.33557 -0.13241,0.66634 -0.36796,1.29807 -0.55065,1.95146 -0.13099,0.50359 -0.32141,0.94905 -0.56535,1.40823 -0.0566,0.10662 -0.0717,0.25028 -0.17054,0.31954 -0.80844,0.56622 -1.67708,1.04121 -2.51562,1.56182 -0.0817,0.006 -0.16482,0.0329 -0.24514,0.0168 -0.49109,-0.098 -0.55118,-0.76867 -0.63121,-1.15336 -0.14254,-0.63444 -0.37518,-1.25803 -0.35398,-1.91702 -0.018,-0.52702 -0.0432,-1.05577 -0.15784,-1.5725 -0.1432,-0.64404 -0.29364,-1.28407 -0.37103,-1.94081 -0.0285,-0.27856 -0.022,-0.28616 -0.072,-0.53857 -0.007,-0.0358 -0.0576,-0.0872 -0.0265,-0.10617 0.76086,-0.46439 1.56235,-0.8589 2.33524,-1.30297 0.04,-0.023 -0.10075,0.005 -0.13308,0.0377 -0.0597,0.0607 -0.0825,0.14903 -0.12374,0.22355 -0.20968,0.50249 -0.34494,1.03494 -0.49184,1.5579 -0.13709,0.51158 -0.23295,1.02976 -0.36677,1.54255 -0.0873,0.55037 -0.2421,1.07545 -0.45203,1.5915 -1.61682,1.02346 -2.62295,2.57611 -3.16657,0.60045 -0.14766,-0.79867 -0.21549,-1.63799 -0.60268,-2.3669 0,0 2.35404,-1.36439 2.35404,-1.36439 z"
-       transform="translate(0,308.2677)" />
-    <path
-       style="fill:#000000;fill-opacity:1;stroke:#b62403;stroke-width:4.73199987;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:0.06329112;stroke-dasharray:none"
-       id="path3851"
-       d="m 127.44171,341.42666 c -0.14316,0.70775 -0.29964,1.40989 -0.39121,2.12688 -0.038,0.33778 -0.0617,0.677 -0.0765,1.01654 -3.4e-4,0.008 -0.0864,0.57111 0.0575,0.46585 0.32447,-0.9778 0.0475,0.003 -2.05478,0.97715 -0.13222,0.0613 0.19756,-0.21432 0.29348,-0.32403 0.36081,-0.4127 0.71062,-0.8358 1.05885,-1.25909 0.89557,-0.97501 1.86766,-1.36611 3.25521,-1.88815 0.25875,-0.0974 0.58197,0.82395 0.62225,0.94242 0.19213,0.77495 0.31187,1.56372 0.45344,2.34836 0.038,0.0835 0.0663,0.17214 0.11403,0.25051 0.0568,0.0933 0.13519,0.19992 0.26295,0.17833 0.0436,-0.007 0.15247,-0.09 0.11348,-0.069 -2.24731,1.20964 -2.84162,1.73419 -2.01374,1.03402 0.31665,-0.19803 0.65928,-1.18968 0.90441,-1.34486 0.80897,-0.51209 1.65366,-0.96545 2.48049,-1.44817 0.49512,0.27688 0.63258,0.82906 0.87715,1.29937 -0.0931,0.20606 0.55196,-0.29175 0.43401,-0.22681 -2.90398,1.59888 -2.44644,1.47274 -1.61154,0.86586 0.12444,-0.0905 0.24482,-0.18637 0.36722,-0.27956 -0.28709,1.08706 1.99288,-1.89766 2.98998,-1.42394 0.55459,0.26349 0.73384,1.04652 0.9057,1.56454 0.13758,0.28526 0.30644,1.72956 0.60714,1.82588 0.0591,0.0189 0.11473,-0.0473 0.17209,-0.071 0.99096,-0.60428 -0.55524,0.34282 -1.75411,0.96507 -0.12841,0.0666 0.23602,-0.16763 0.34943,-0.25746 0.36199,-0.2867 0.67276,-0.61507 0.98481,-0.95358 0.88492,-1.06006 1.41747,-1.23506 3.03949,-2.07171 0.0647,-0.0334 0.14821,0.0302 0.20462,0.0762 0.15391,0.12546 0.19386,0.30144 0.25864,0.47486 0.0732,0.27264 0.0888,0.55415 0.1068,0.83423 0.0752,1.17108 0.32186,0.14836 -2.4082,1.43642 0.0334,-0.84195 0.0221,-1.68512 0.0151,-2.52752 -5.3e-4,-0.1435 -8.7e-4,-0.28699 -0.002,-0.43049 -0.002,-0.32572 9.1e-4,-0.38708 -0.012,-0.68218 -0.002,-0.0514 -0.0552,-0.13039 -0.009,-0.15402 2.52629,-1.30635 2.30073,-1.98356 2.51798,-0.81798 0.18884,0.96438 0.24624,1.94561 0.3542,2.92019 0.14986,0.70104 0.22899,1.53881 0.74052,2.09326 0.0748,0.0811 0.17238,0.13759 0.25857,0.20638 -0.34601,0.44085 1.28094,-0.41247 1.00218,-0.24983 -3.6695,2.14081 -1.50497,0.84485 -0.73759,0.33778 0.83765,-0.56929 1.64392,-1.1785 2.28844,-1.9639 0.73799,-0.9432 1.09539,-0.9751 2.77985,-1.67769 0.15373,-0.0641 0.32711,0.7281 0.3401,0.78526 0.1228,0.55705 0.0509,1.13764 0.14009,1.69687 -0.82879,0.37241 -1.62337,0.83295 -2.48637,1.11722 -0.0902,0.0297 -0.0804,-0.17216 -0.1188,-0.25908 -0.20478,-0.46393 -0.38896,-0.9341 -0.60792,-1.3919 -0.32932,-0.66953 -0.60437,-1.36402 -0.79491,-2.08546 -0.0317,-0.10788 -0.0772,-0.36026 -0.18726,-0.45417 -0.0196,-0.0167 -0.0995,0.0221 -0.0766,0.0102 0.7587,-0.39511 1.51673,-0.79224 2.28813,-1.16193 0.0692,-0.0331 -0.12713,0.0895 -0.17511,0.1493 -0.0648,0.0808 -0.10591,0.17813 -0.15887,0.2672 -0.34162,0.85965 -0.39177,1.79783 -0.43765,2.71195 -0.0143,0.17074 -0.10083,1.44496 0.40252,1.17561 0.0781,-0.0418 0.1164,-0.13347 0.17459,-0.2002 -3.42455,2.02897 -2.15201,1.45869 -1.58614,0.49344 0.18625,-0.31769 0.30696,-0.64971 0.41699,-0.99881 0.17693,-0.73591 0.5338,-1.3771 0.97653,-1.98204 0.33636,-0.39188 0.16224,-0.20969 0.51975,-0.54905 0,0 2.4924,-1.01225 2.4924,-1.01225 l 0,0 c -0.38025,0.30286 -0.19607,0.13679 -0.54974,0.50129 -0.44813,0.57338 -0.83061,1.1723 -1.00566,1.88946 -0.57768,2.0633 -1.16562,2.02842 -3.37556,3.34988 -0.0992,0.0137 -0.19855,0.0558 -0.29756,0.041 -0.68306,-0.10252 -0.57402,-1.02969 -0.55737,-1.5064 0.0499,-0.94055 0.10887,-1.89115 0.37118,-2.80084 0.002,-0.005 0.19898,-0.5202 0.24697,-0.54816 1.71272,-0.99797 2.45374,-2.18369 2.88969,-0.65831 0.16975,0.70989 0.43865,1.3881 0.7537,2.04594 0.22138,0.45466 0.40975,0.9235 0.62784,1.37928 0.0406,0.0848 0.20342,0.19197 0.12976,0.25037 -0.71553,0.56734 -1.5384,0.98427 -2.3076,1.4764 0.0425,-0.55475 -0.0233,-1.11755 -0.0872,-1.66764 -0.0189,-0.087 -0.0331,-0.1752 -0.0567,-0.26104 -0.0165,-0.06 -0.0335,-0.12097 -0.0635,-0.17542 -0.007,-0.0136 -0.0562,-0.01 -0.043,-0.0177 4.00631,-2.43971 2.54103,-1.7385 1.89525,-0.98911 -0.64015,0.82585 -1.43753,1.4733 -2.3027,2.0576 -0.3734,0.25609 -0.67059,0.47059 -1.06052,0.69759 -0.91619,0.53335 -1.82632,1.07801 -2.75889,1.58218 -0.23281,0.12586 -0.57489,0.20949 -0.84453,0.15873 -0.12154,-0.0229 -0.22821,-0.0954 -0.34232,-0.14313 -0.73133,-0.69297 -0.91481,-1.52073 -1.07254,-2.48482 -0.11367,-0.96235 -0.1496,-1.93734 -0.38171,-2.88257 -0.22648,-1.13589 -0.15168,-0.35298 2.29352,-1.69172 0.0479,-0.0262 -0.007,0.10896 -0.009,0.16351 -0.0147,0.37463 -0.009,0.74944 -0.01,1.12426 -0.002,0.83387 -0.009,1.66881 0.0359,2.50173 -3.29666,1.82012 -2.18263,1.99338 -2.50804,0.2844 -0.0245,-0.0746 -0.0273,-0.21035 -0.10583,-0.21053 -0.0359,-8e-5 -0.12887,0.0625 -0.0982,0.0438 3.58352,-2.18145 2.2419,-1.55334 1.53929,-0.66131 -1.1156,1.25675 -2.5601,2.55228 -4.25448,2.8506 -0.0977,-0.0406 -0.21078,-0.0553 -0.29305,-0.12174 -0.38924,-0.31455 -0.41109,-1.46189 -0.61174,-1.91546 -0.12618,-0.37098 -0.22984,-0.85554 -0.52691,-1.14039 -0.0633,-0.0607 -0.14336,-0.11226 -0.22952,-0.12877 -0.0878,-0.0168 -0.3399,0.0844 -0.26615,0.0338 0.626,-0.42925 1.29641,-0.78983 1.94461,-1.18475 -1.08133,0.86277 -1.98278,1.32681 -3.35076,2.09386 -0.25403,0.14245 -0.50384,0.11491 -0.67719,-0.11991 -0.10044,-0.21069 -0.36507,-1.03908 -0.65269,-0.95302 4.91527,-2.98413 2.42736,-1.73136 1.95739,-1.10617 -0.27471,0.36544 -0.42934,0.80905 -0.71051,1.17037 -0.58787,0.74701 -2.28821,2.22412 -3.06196,1.43628 -0.14873,-0.15143 -0.20449,-0.33308 -0.28872,-0.52327 -0.14923,-0.77118 -0.23119,-1.55548 -0.42802,-2.31823 -0.0649,-0.18953 -0.1072,-0.42025 -0.27068,-0.56249 -0.0499,-0.0434 -0.23645,-0.0382 -0.18279,-0.0768 0.6566,-0.47207 1.37981,-0.84392 2.0637,-1.27551 0.10611,-0.067 -0.22951,0.106 -0.32988,0.18131 -0.13437,0.10082 -0.24607,0.22876 -0.36911,0.34314 -0.92086,1.14979 -2.50415,3.36445 -4.04109,3.11138 -0.0492,-0.0579 -0.11839,-0.10357 -0.14769,-0.17369 -0.13647,-0.32665 0.0777,-1.21401 0.0631,-1.5843 0.0854,-0.71426 0.23034,-1.41531 0.35507,-2.12181 0,0 2.44323,-1.19449 2.44323,-1.19449 z"
-       transform="translate(0,308.2677)" />
-    <path
-       style="fill:#000000;fill-opacity:1;stroke:#b62403;stroke-width:4.73199987;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:0.06329112;stroke-dasharray:none"
-       id="path3853"
-       d="m 151.23113,344.38665 c 0.095,0.89014 0.26577,1.78349 0.59311,2.61838 0.0579,0.0871 0.10242,0.18482 0.17375,0.26134 0.10143,0.10881 0.20048,0.17125 0.32883,0.0719 0.0484,-0.0375 0.16234,-0.17671 0.10785,-0.14876 -2.19217,1.12446 -2.58038,1.95958 -2.04274,0.95614 0.32199,-0.662 0.52031,-1.42232 1.07676,-1.93168 2.44629,-1.31621 2.79977,-2.16866 3.27449,0.10717 0.11646,0.98798 0.29517,1.96476 0.48266,2.94105 0.0313,0.12805 0.0564,0.25779 0.0939,0.38417 0.0375,0.12626 0.0461,0.3069 0.16749,0.35786 0.023,0.01 0.0632,-0.0737 0.041,-0.0625 -2.23857,1.13004 -2.98584,1.77826 -2.18161,1.09829 0.31762,-0.49417 0.34543,-1.09097 0.43827,-1.65438 0.0728,-0.61445 0.25068,-1.17098 0.57069,-1.69877 0.65314,-0.87796 2.24934,-2.70379 3.13894,-1.69308 0.16345,0.1857 0.1961,0.37331 0.27004,0.60196 0.18604,0.48608 0.0281,1.31485 0.3784,1.72197 0.0298,0.0346 0.0847,0.0342 0.12709,0.0512 -0.032,0.0474 0.40959,-0.26811 0.30197,-0.20955 -0.70599,0.38419 -1.39218,0.80424 -2.10057,1.18398 -0.0892,0.0479 0.15273,-0.13479 0.23981,-0.18648 0.85202,-0.50578 1.69243,-1.03465 2.57522,-1.48456 0.0944,-0.0481 0.21187,0.007 0.3178,0.0102 0.72828,0.31194 1.05635,1.08995 1.67845,1.52892 0.52462,0.0962 0.56598,-0.34121 1.15792,-0.19056 0.1457,0.0862 0.33416,0.21857 0.51838,0.15401 0.0622,-0.0218 0.22315,-0.13987 0.16531,-0.10833 -2.14621,1.17061 -2.73614,1.70456 -1.88179,0.97105 0.72109,-0.56256 2.42323,-2.13071 3.13401,-1.44278 0.0888,0.0859 0.17451,0.25266 0.23471,0.35778 0.0398,0.0205 0.0746,0.0613 0.11932,0.0614 0.11961,2.8e-4 0.41819,-0.23243 0.31325,-0.17502 -0.70198,0.38404 -1.3876,0.79832 -2.09832,1.16595 -0.18148,0.0939 0.31041,-0.2659 0.46101,-0.40399 1.70751,-1.38882 2.46644,-2.31836 3.18175,-0.72783 0.23079,0.3588 0.11653,1.00388 0.50636,1.23676 0.79457,-0.28176 2.44678,-1.22251 -1.8882,1.08167 -0.0664,0.0353 0.12184,-0.0899 0.17232,-0.14571 0.0402,-0.0444 0.23638,-0.33248 0.28228,-0.3992 2.36969,-2.85375 2.71443,-1.64675 2.77366,-0.10812 0.0505,0.68235 -0.0914,1.41602 0.21209,2.05168 0.0421,0.0279 0.0765,0.093 0.12619,0.0838 0.0561,-0.0103 0.16435,-0.154 0.11359,-0.12798 -0.73414,0.37637 -1.43443,0.81724 -2.17343,1.18397 -0.085,0.0422 0.1401,-0.12933 0.19871,-0.204 0.15,-0.19109 0.20716,-0.34249 0.31074,-0.55995 0.24964,-0.72371 0.42196,-1.47159 0.69977,-2.18572 0.4863,-0.96822 0.27022,-0.61256 2.47829,-1.60919 0.23866,-0.10772 0.27561,1.12272 0.27996,1.21254 0.0259,0.76269 0.0201,1.52602 0.0222,2.28903 0.0406,0.29979 0.016,0.63171 0.12998,0.91919 0.0799,0.20146 0.17753,0.0818 0.16727,0.0871 -0.75591,0.3932 -1.51477,0.78073 -2.27215,1.1711 0.46367,-0.39779 0.62951,-1.08951 0.81101,-1.65576 0.20177,-0.64412 0.50446,-1.24973 0.80159,-1.85369 0.58139,-1.16671 0.8408,-1.03532 2.72253,-1.90766 0.14734,-0.0683 0.39777,0.60378 0.41824,0.6591 0.13791,0.61736 0.339,1.2169 0.4964,1.82893 0.0308,0.10268 0.0513,0.20907 0.0925,0.30803 0.0367,0.0882 0.13136,0.26147 0.20489,0.20045 0.034,-0.0282 0.0787,-0.14678 0.0394,-0.12659 -2.18499,1.12175 -2.75338,1.97831 -2.14526,1.11137 0.24886,-0.43022 0.28497,-0.92804 0.3688,-1.4066 0.15128,-0.59928 0.51257,-1.11794 0.86958,-1.613 0.85528,-1.00162 2.77027,-2.99516 3.2119,-1.11508 0.12526,0.61865 0.0293,1.23722 -0.0497,1.85369 -0.017,0.22302 -0.16787,1.0576 0.27692,0.60189 -4.20329,2.30559 -2.4429,1.70646 -1.92618,0.91741 0.14755,-0.22532 0.26924,-0.46511 0.42008,-0.68895 2.0413,-2.50639 2.4733,-1.83537 3.13938,-0.4427 0.17322,0.32804 0.30967,0.93028 0.72275,1.06491 0.0646,0.021 0.1358,-0.002 0.20371,-0.003 0.0782,-0.0244 0.15892,-0.0419 0.23467,-0.0731 0.23139,-0.0954 0.76659,-0.43408 0.51644,-0.29937 -0.68774,0.37034 -1.34891,0.79099 -2.05068,1.134 -0.10246,0.0501 0.16236,-0.16056 0.23646,-0.24725 0.0716,-0.0837 0.13322,-0.17546 0.19983,-0.26319 0.6892,-1.14401 1.58653,-3.38757 3.46879,-2.50799 0.5694,0.53483 0.87602,1.28935 1.14039,2.0104 0.26065,0.50262 0.0859,1.25536 0.50461,1.66204 0.0464,0.008 0.0927,0.0314 0.13919,0.024 0.11323,-0.0181 0.38201,-0.25275 0.28112,-0.19825 -0.72313,0.39059 -1.42019,0.82849 -2.14591,1.21426 -0.0676,0.036 0.11327,-0.10356 0.16414,-0.16081 0.0576,-0.0648 0.10704,-0.13641 0.16055,-0.20461 0.36298,-0.49807 0.60267,-1.07352 0.80932,-1.65072 0.51361,-1.557 1.56904,-1.71064 3.14573,-2.63189 0.30437,0.0747 0.35621,0.3511 0.45554,0.60551 0.0386,0.0988 0.21757,0.49304 0.25383,0.57366 0.30319,0.58594 0.58693,1.17928 0.85539,1.78157 0,0 -2.35239,1.32531 -2.35239,1.32531 l 0,0 c -0.26676,-0.6018 -0.53573,-1.20122 -0.84812,-1.78166 -0.0445,-0.0946 -0.33906,-0.79566 -0.38799,-0.85146 -0.0249,-0.0283 -0.11445,0.0679 -0.10151,0.0499 0.72518,-0.43074 1.44563,-0.86953 2.17552,-1.29223 0.0646,-0.0374 -0.12388,0.0844 -0.17818,0.13553 -0.27363,0.25791 -0.45304,0.58617 -0.57235,0.93907 -0.19334,0.59842 -0.44354,1.18626 -0.77076,1.72382 -0.76095,1.10968 -0.65886,0.70678 -2.78412,1.92422 -0.21095,0.12084 -0.45304,0.003 -0.62016,-0.12457 -0.0588,-0.0751 -0.13166,-0.14109 -0.1764,-0.22533 -0.24867,-0.46815 -0.14269,-1.05588 -0.35617,-1.53725 -0.21767,-0.62951 -0.47624,-1.36249 -1.02722,-1.77199 -0.96275,0.0734 -0.32982,0.049 1.93417,-1.2649 0.0819,-0.0475 -0.15788,0.11063 -0.21345,0.18725 -0.21085,0.29075 -0.25258,0.69153 -0.48345,0.97343 -0.76177,1.17219 -1.25534,1.11233 -2.95299,2.14555 -0.27056,0.16466 -0.56062,0.25322 -0.87781,0.22451 -0.6348,-0.23594 -0.79999,-0.6865 -1.05227,-1.27489 -0.0784,-0.15799 -0.14691,-0.32126 -0.2344,-0.47443 -0.0343,-0.0601 -0.0719,-0.1188 -0.11587,-0.17219 -0.0173,-0.021 -0.0891,-0.0342 -0.0659,-0.0484 2.09137,-1.27855 3.13039,-1.46295 2.11749,-1.26721 -0.18451,0.21133 -0.30184,0.41796 -0.42909,0.66705 -0.53881,1.05472 -1.36804,1.13997 -2.70666,1.84665 -0.5924,-0.0238 -0.62735,-0.59945 -0.54904,-1.0785 0.0774,-0.58734 0.20373,-1.1757 0.0882,-1.76751 -0.0151,-0.0728 -0.0249,-0.1468 -0.0453,-0.21826 -0.009,-0.0315 -0.0159,-0.0691 -0.0422,-0.0887 -0.0152,-0.0113 -0.0704,0.0267 -0.0541,0.017 4.02483,-2.41074 2.46299,-1.65474 1.78534,-0.94252 -0.35408,0.46059 -0.69724,0.95351 -0.90604,1.4977 -0.1092,0.49272 -0.11121,1.01121 -0.32149,1.48003 -0.37476,0.82961 -2.20459,2.30233 -2.81589,1.4589 -0.13418,-0.18513 -0.16064,-0.34387 -0.22756,-0.56176 -0.1502,-0.60347 -0.36099,-1.18943 -0.49355,-1.79778 -0.0293,-0.0795 -0.0748,-0.26197 -0.16226,-0.32532 -0.0152,-0.011 -0.0701,0.0247 -0.0542,0.0149 3.54731,-2.17742 2.41444,-1.87221 1.89571,-0.86736 -0.28933,0.59813 -0.60193,1.18832 -0.82092,1.81727 -0.18762,0.62412 -0.40555,1.24486 -0.7025,1.82557 -2.39679,1.25484 -2.77017,2.19532 -2.96376,0.0224 0.005,-0.75824 0.009,-1.51683 -0.0175,-2.27475 -0.005,-0.0901 -0.0931,-0.73194 -0.0768,-0.80353 0.007,-0.0285 0.0302,0.0821 0.0557,0.0678 0.75856,-0.42753 1.47894,-0.92002 2.23201,-1.35715 0.0517,-0.03 -0.0809,0.088 -0.12138,0.13201 -0.35375,0.68232 -0.49013,1.45238 -0.70685,2.18487 -0.57372,1.44307 -1.0253,1.36908 -2.96047,2.33542 -0.0767,0.0383 -0.1738,-0.0277 -0.2468,-0.0727 -0.0721,-0.0444 -0.11523,-0.12406 -0.17285,-0.18609 -0.29589,-0.6859 -0.23088,-1.41784 -0.24577,-2.14988 -0.0886,-1.76202 -0.58006,-0.67377 2.23489,-2.25227 0.0403,-0.0226 -0.0831,0.0404 -0.12472,0.0607 -0.20563,0.23181 -0.10511,0.097 -0.28426,0.40601 -0.0442,0.0763 -0.058,0.1821 -0.1329,0.22867 -0.57285,0.35638 -1.92161,1.80717 -2.9517,1.33866 -0.36463,-0.37078 -0.36407,-0.88142 -0.55876,-1.34375 -0.0566,-0.11955 -0.0987,-0.24772 -0.17316,-0.35705 -0.11253,-0.16526 -0.19272,-0.0756 -0.17228,-0.088 0.6677,-0.40617 3.08918,-1.81473 2.02532,-1.18119 -1.14056,0.99776 -0.39358,0.49501 -3.00285,1.92705 -0.23604,0.12955 -0.4902,-0.0318 -0.64599,-0.19396 -0.0593,-0.0963 -0.11198,-0.24891 -0.25302,-0.23341 -0.0483,0.005 -0.18171,0.0645 -0.14031,0.0392 1.00116,-0.61355 2.96235,-1.73414 1.87122,-1.10986 -0.7759,0.83468 -1.82861,1.80751 -2.99374,1.74054 -0.18721,-0.0108 -0.33981,-0.12229 -0.52139,-0.15227 -0.43418,0.0454 -0.8036,0.36459 -1.22833,0.0529 -0.51883,-0.45153 -0.861,-1.1706 -1.55945,-1.35914 -0.9876,0.25744 -0.62165,0.18746 1.7791,-1.14753 0.0892,-0.0496 -0.13797,0.15434 -0.22493,0.20777 -0.83712,0.51441 -1.68259,1.01598 -2.54189,1.49242 -0.0715,0.0396 -0.15837,0.0535 -0.24003,0.05 -0.0806,-0.003 -0.15436,-0.0466 -0.23153,-0.07 -0.061,-0.0584 -0.1357,-0.10522 -0.1829,-0.17522 -0.34113,-0.50596 -0.22816,-1.19462 -0.39155,-1.75532 -0.028,-0.0884 -0.0787,-0.3356 -0.18155,-0.41282 -0.0283,-0.0213 -0.13584,0.0114 -0.10599,-0.008 3.95327,-2.52456 2.30752,-1.62147 1.71382,-0.87122 -0.34397,0.49148 -0.55308,0.99954 -0.61667,1.60177 -0.11581,0.58421 -0.12045,1.19617 -0.37239,1.74726 -0.37228,0.9489 -2.0138,2.29341 -2.71046,1.41223 -0.18053,-0.22835 -0.1651,-0.5881 -0.26305,-0.84383 -0.16958,-0.97633 -0.35583,-1.94934 -0.48217,-2.93275 -0.0706,-0.32681 -0.13011,-0.67588 -0.30896,-0.96666 -0.0242,-0.0394 -0.0545,-0.0797 -0.096,-0.1001 -0.039,-0.0192 -0.16663,0.0126 -0.12998,-0.0108 0.70067,-0.44743 1.429,-0.85 2.1435,-1.275 -0.0836,0.0337 -0.17912,0.0464 -0.25089,0.10097 -0.50736,0.38569 -0.59937,1.16075 -0.89279,1.68604 -0.43165,1.18314 -0.0713,0.37652 -2.5319,1.87296 -0.11626,0.0707 -0.33794,-0.01 -0.42848,-0.0699 -0.22323,-0.14808 -0.26662,-0.28942 -0.40122,-0.51872 -0.31477,-0.85329 -0.50067,-1.75 -0.65652,-2.64474 0,0 2.40245,-1.27452 2.40245,-1.27452 z"
-       transform="translate(0,308.2677)" />
-    <path
-       style="fill:#000000;fill-opacity:1;stroke:#b62403;stroke-width:4.73199987;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:0.06329112;stroke-dasharray:none"
-       id="path3855"
-       d="m 185.46177,349.40648 c -0.0178,0.63561 -0.0118,1.27165 -0.01,1.90743 0.001,0.39703 0.001,0.19538 -2.6e-4,0.60494 0,0 -2.40392,1.22486 -2.40392,1.22486 l 0,0 c -0.002,-0.40858 -0.002,-0.20702 -2.6e-4,-0.60468 0.002,-0.63254 0.008,-1.26533 -0.01,-1.89769 0,0 2.42354,-1.23486 2.42354,-1.23486 z"
-       transform="translate(0,308.2677)" />
-    <path
-       style="fill:#ffffff;fill-opacity:1;stroke:#b62403;stroke-width:4.73199987;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:0.06329112;stroke-dasharray:none"
-       id="path3857"
-       d="m 188.02994,316.25305 c 0.39199,0.55695 0.57616,1.33233 1.3167,1.49782 0.74772,-0.37849 2.18336,-1.1078 -1.962,1.08746 -0.0791,0.0419 0.14713,-0.1024 0.2166,-0.1589 0.0511,-0.0415 0.36352,-0.3335 0.42353,-0.3677 0.85141,-0.48534 1.71913,-0.94147 2.5787,-1.4122 0.68097,0.0403 0.9638,0.65214 1.21612,1.20183 0.25637,0.66637 0.59742,0.69346 1.12709,0.29441 -3.42925,2.13721 -2.25146,1.53116 -1.64228,0.56304 0,0 2.47225,-1.09358 2.47225,-1.09358 l 0,0 c -0.73701,1.24669 -1.0038,1.30251 -2.93757,2.23029 -0.69269,0.26702 -1.09313,0.004 -1.3651,-0.66891 -0.20177,-0.43935 -0.43128,-0.99915 -1.00906,-0.87008 0.68999,-0.41663 1.37519,-0.8413 2.06997,-1.2499 0.0788,-0.0463 -0.15021,0.10439 -0.22079,0.16241 -0.14483,0.11905 -0.2395,0.29902 -0.40077,0.39463 -0.83864,0.49718 -1.68222,0.989 -2.5546,1.42425 -0.0761,0.038 -0.16947,-0.0153 -0.25421,-0.0229 -0.69703,-0.32961 -0.96209,-0.99595 -1.39523,-1.58987 0,0 2.32065,-1.4221 2.32065,-1.4221 z"
-       transform="translate(0,308.2677)" />
-    <path
-       style="fill:#ffffff;fill-opacity:1;stroke:#b62403;stroke-width:4.73199987;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:0.06329112;stroke-dasharray:none"
-       id="path3859"
-       d="m 156.99856,330.33017 c 0.2576,0.57801 0.4091,1.03647 1.118,1.01132 0.70802,-0.14512 1.32377,-0.54901 2.01823,-0.72813 0.64839,-0.072 1.09992,0.23174 1.38535,0.78991 0.0271,0.0816 0.0542,0.16329 0.0813,0.24494 0,0 -2.37643,1.30351 -2.37643,1.30351 l 0,0 c -0.0202,-0.0688 -0.0404,-0.13763 -0.0606,-0.20645 -0.23449,-0.47718 -0.64645,-0.61574 -1.16217,-0.48511 -0.68711,0.23877 -1.34395,0.62879 -2.08738,0.64917 -0.75699,-0.15556 -0.96521,-0.60394 -1.29374,-1.2515 0,0 2.3775,-1.32766 2.3775,-1.32766 z"
-       transform="translate(0,308.2677)" />
-    <path
-       style="fill:#ffffff;fill-opacity:1;stroke:#b62403;stroke-width:4.73199987;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:0.06329112;stroke-dasharray:none"
-       id="path3861"
-       d="m 200.24856,334.58017 c 0.19967,0.64879 0.33146,1.30868 0.58099,1.94205 0.19117,0.46443 0.0913,0.23761 0.29875,0.68084 0,0 -2.33989,1.32372 -2.33989,1.32372 l 0,0 c -0.2117,-0.45658 -0.11095,-0.22455 -0.30187,-0.69625 -0.25477,-0.6289 -0.39863,-1.28256 -0.61548,-1.9227 0,0 2.3775,-1.32766 2.3775,-1.32766 z"
-       transform="translate(0,308.2677)" />
-    <path
-       style="fill:#ffffff;fill-opacity:1;stroke:#b62403;stroke-width:4.73199987;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:0.06329112;stroke-dasharray:none"
-       id="path3863"
-       d="m 129.21177,312.15648 c -0.007,0.66746 -0.003,1.3304 -0.0769,1.99443 -0.0708,0.72915 -0.15262,1.45389 -0.27099,2.1769 0,0 -2.42188,1.18358 -2.42188,1.18358 l 0,0 c 0.12438,-0.71982 0.23337,-1.43701 0.28073,-2.16699 0.0817,-0.64964 0.099,-1.29846 0.0655,-1.95306 0,0 2.42354,-1.23486 2.42354,-1.23486 z"
-       transform="translate(0,308.2677)" />
-  </g>
-</svg>
diff --git a/mygtk.py b/mygtk.py
deleted file mode 100644
index d127abe..0000000
--- a/mygtk.py
+++ /dev/null
@@ -1,504 +0,0 @@
-#
-# encoding: UTF-8
-# api: python
-# type: functions
-# title: mygtk helper functions
-# description: simplify usage of some gtk widgets
-# version: 1.7
-# author: mario
-# license: public domain
-#
-#
-# Wrappers around gtk methods. The TreeView method .columns() allows
-# to fill a treeview. It adds columns and data rows with a mapping
-# dictionary (which specifies many options and data positions).
-#
-# The .tree() method is a trimmed-down variant of that, creates a
-# single column, but has threaded entries.
-#
-# With the methodes .app_state() and .app_restore() named gtk widgets
-# can be queried for attributes. The methods return a saveable dict,
-# which contain current layout options for a few Widget types. Saving
-# and restoring must be handled elsewhere.
-#
-#
-
-
-
-
-# debug
-from config import __print__, dbg
-
-# filesystem
-import os.path
-import copy
-import sys
-
-from compat2and3 import unicode, xrange, PY3
-
-
-# gtk version (2=gtk2, 3=gtk3)
-ver = 2
-# if running on Python3 or with commandline flag
-if PY3 or "--gtk3" in sys.argv:
-    ver = 3
-# load gtk modules
-if ver==3:
-    from gi import pygtkcompat as pygtk
-    pygtk.enable() 
-    pygtk.enable_gtk(version='3.0')
-    from gi.repository import Gtk as gtk
-    from gi.repository import GObject as gobject
-    from gi.repository import GdkPixbuf
-    ui_file = "gtk3.xml"
-    empty_pixbuf = GdkPixbuf.Pixbuf.new_from_data(b"\0\0\0\0", GdkPixbuf.Colorspace.RGB, True, 8, 1, 1, 4, None, None)
-    __print__(dbg.PROC, gtk)
-    __print__(dbg.PROC, gobject)
-else:
-    import pygtk
-    import gtk
-    import gobject
-    ui_file = "gtk2.xml"
-    empty_pixbuf = gtk.gdk.pixbuf_new_from_data(b"\0\0\0\0",gtk.gdk.COLORSPACE_RGB,True,8,1,1,4)
-
-
-
-
-# simplified gtk constructors               ---------------------------------------------
-class mygtk:
-
-
-             
-        #-- fill a treeview
-        #
-        # Adds treeviewcolumns/cellrenderers and liststore from a data dictionary.
-        # Its datamap and the table contents can be supplied in one or two steps.
-        # When new data gets applied, the columns aren't recreated.
-        #
-        # The columns are created according to the datamap, which describes cell
-        # mapping and layout. Columns can have multiple cellrenderers, but usually
-        # there is a direct mapping to a data source key from entries.
-        #
-        # datamap = [  #  title   width    dict-key    type,  renderer,  attrs  
-        #               ["Name",   150,  ["titlerow",   str,    "text",    {} ]  ],
-        #               [False,     0,   ["interndat",  int,     None,     {} ]  ],
-        #               ["Desc",   200,  ["descriptn",  str,    "text",    {} ],  ["icon",str,"pixbuf",{}]  ],
-        #
-        # An according entries list then would contain a dictionary for each row:
-        #   entries = [ {"titlerow":"first", "interndat":123}, {"titlerow":"..."}, ]
-        # Keys not mentioned in the datamap get ignored, and defaults are applied
-        # for missing cols. All values must already be in the correct type however.
-        #
-        @staticmethod
-        def columns(widget, datamap=[], entries=None, pix_entry=False, typecast=0):
-
-            # create treeviewcolumns?
-            if (not widget.get_column(0)):
-                # loop through titles
-                datapos = 0
-                for n_col,desc in enumerate(datamap):
-                                    
-                    # check for title
-                    if (type(desc[0]) != str):
-                        datapos += 1  # if there is none, this is just an undisplayed data column
-                        continue
-                    # new tvcolumn
-                    col = gtk.TreeViewColumn(desc[0])  # title
-                    col.set_resizable(True)
-                    # width
-                    if (desc[1] > 0):
-                        col.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
-                        col.set_fixed_width(desc[1])
-
-                    # loop through cells
-                    for var in xrange(2, len(desc)):
-                        cell = desc[var]
-                        # cell renderer
-                        if (cell[2] == "pixbuf"):
-                            rend = gtk.CellRendererPixbuf()  # img cell
-                            if (cell[1] == str):
-                                cell[3]["stock_id"] = datapos  # for stock icons
-                                expand = False
-                            else:
-                                pix_entry = datapos
-                                cell[3]["pixbuf"] = datapos
-                        else:
-                            rend = gtk.CellRendererText()    # text cell
-                            cell[3]["text"] = datapos
-                            #col.set_sort_column_id(datapos)  # only on textual cells
-   
-                        # attach cell to column
-                        col.pack_end(rend, expand=cell[3].get("expand",True))
-                        # apply attributes
-                        for attr,val in list(cell[3].items()):
-                            col.add_attribute(rend, attr, val)
-                        # next
-                        datapos += 1
-                        #__print__(dbg.INFO, cell, len(cell))
-
-                    # add column to treeview
-                    widget.append_column(col)
-                # finalize widget
-                widget.set_search_column(5)   #??
-                widget.set_search_column(4)   #??
-                widget.set_search_column(3)   #??
-                widget.set_search_column(2)   #??
-                widget.set_search_column(1)   #??
-                #widget.set_reorderable(True)
-               
-            # add data?
-            if (entries is not None):
-                #- expand datamap
-                vartypes = []  #(str, str, bool, str, int, int, gtk.gdk.Pixbuf, str, int)
-                rowmap = []    #["title", "desc", "bookmarked", "name", "count", "max", "img", ...]
-                if (not rowmap):
-                    for desc in datamap:
-                        for var in xrange(2, len(desc)):
-                            vartypes.append(desc[var][1])  # content types
-                            rowmap.append(desc[var][0])    # dict{} column keys in entries[] list
-                # create gtk array storage
-                ls = gtk.ListStore(*vartypes)   # could be a TreeStore, too
-                __print__(dbg.UI, vartypes, len(vartypes))
-                __print__(dbg.DATA, rowmap, len(rowmap))
-
-                # prepare for missing values, and special variable types
-                defaults = {
-                    str: "",
-                    unicode: "",
-                    bool: False,
-                    int: 0,
-                    gtk.gdk.Pixbuf: empty_pixbuf
-                }
-                if gtk.gdk.Pixbuf in vartypes:
-                    pix_entry = vartypes.index(gtk.gdk.Pixbuf) 
-                
-                # sort data into gtk liststore array
-                for row in entries:
-
-                    # preset some values if absent
-                    row.setdefault("deleted", False)
-                    row.setdefault("search_col", "#ffffff")
-                    row.setdefault("search_set", False)
-
-                    # generate ordered list from dictionary, using rowmap association
-                    row = [   row.get( skey , defaults[vartypes[i]] )   for i,skey   in enumerate(rowmap)   ]
-
-                    # map Python2 unicode to str
-                    row = [ str(value) if type(value) is unicode else value  for value in row ]
-
-                    # autotransform string -> gtk image object
-                    if (pix_entry and type(row[pix_entry]) == str):
-                        row[pix_entry] = (  gtk.gdk.pixbuf_new_from_file(row[pix_entry])  if  os.path.exists(row[pix_entry])  else  defaults[gtk.gdk.Pixbuf]  )
-
-                    try:
-                        # add
-                        ls.append(row)   # had to be adapted for real TreeStore (would require additional input for grouping/level/parents)
-
-                    except:
-                        # brute-force typecast
-                        ls.append( [va  if ty==gtk.gdk.Pixbuf  else ty(va)   for va,ty in zip(row,vartypes)]  )
-
-                if entries:
-                     __print__("→", row, len(row))
-                
-                # apply array to widget
-                widget.set_model(ls)
-                return ls
-                
-            pass
-
-
-
-
-        #-- treeview for categories
-        #
-        # simple two-level treeview display in one column
-        # with entries = [main,[sub,sub], title,[...],...]
-        #
-        @staticmethod     
-        def tree(widget, entries, title="category", icon=gtk.STOCK_DIRECTORY):
-
-            # list types
-            ls = gtk.TreeStore(str, str)
-            #__print__(dbg.DATA, ".tree", entries)
-
-            # add entries
-            for entry in entries:
-                if isinstance(entry, (str,unicode)):
-                    main = ls.append(None, [str(entry), icon])
-                else:
-                    for sub_title in entry:
-                        ls.append(main, [str(sub_title), icon])
-
-            # just one column
-            tvcolumn = gtk.TreeViewColumn(title);
-            widget.append_column(tvcolumn)
-
-            # inner display: icon & string
-            pix = gtk.CellRendererPixbuf()
-            txt = gtk.CellRendererText()
-
-            # position
-            tvcolumn.pack_start(pix, expand=False)
-            tvcolumn.pack_end(txt, expand=True)
-
-            # select array content source in treestore
-            tvcolumn.add_attribute(pix, "stock_id", 1)
-            tvcolumn.add_attribute(txt, "text", 0)
-
-            # finalize
-            widget.set_model(ls)
-            tvcolumn.set_sort_column_id(0)
-            widget.set_search_column(0)
-            #tvcolumn.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
-            #tvcolumn.set_fixed_width(125])
-            #widget.expand_all()
-            #widget.expand_row("3", False)
-            #print(widget.row_expanded("3"))
-
-            return ls
-
-
-
-
-        #-- save window size and widget properties
-        #
-        # needs a list of widgetnames
-        # e.g. pickle.dump(mygtk.app_state(...), open(os.environ["HOME"]+"/.config/app_winstate", "w"))
-        #
-        @staticmethod
-        def app_state(wTree, widgetnames=["window1", "treeview2", "vbox17"]):
-            r = {} # restore array
-            for wn in widgetnames:
-                r[wn] = {}
-                w = wTree.get_widget(wn)
-                t = type(w)
-#                print(wn, w, t)
-                # extract different information from individual widget types
-                if t == gtk.Window:
-                    r[wn]["size"] = list(w.get_size())
-                    #print("WINDOW SIZE", list(w.get_size()), r[wn])
-                if t == gtk.Widget:
-                    r[wn]["name"] = w.get_name()
-                # gtk.TreeView
-                if t == gtk.TreeView:
-                    r[wn]["columns:width"] = []
-                    for col in w.get_columns():
-                        r[wn]["columns:width"].append( col.get_width() )
-                    # - Rows
-                    r[wn]["rows:expanded"] = []
-                    for i in xrange(0,50):
-                        if w.row_expanded(str(i)):
-                            r[wn]["rows:expanded"].append(i)
-                    # - selected
-                    (model, paths) = w.get_selection().get_selected_rows()
-                    if paths:
-                        r[wn]["row:selected"] = paths[0]
-                # gtk.Toolbar
-                if t == gtk.Toolbar:
-                    r[wn]["icon_size"] = int(w.get_icon_size())
-                    r[wn]["style"] = int(w.get_style())
-                # gtk.Notebook
-                if t == gtk.Notebook:
-                    r[wn]["page"] = w.get_current_page()
-                    r[wn]["tab_pos"] = int(w.get_tab_pos())
-            #print(r)
-            return r
-
-        gtk_position_type_enum = [gtk.POS_LEFT, gtk.POS_RIGHT, gtk.POS_TOP, gtk.POS_BOTTOM]
-
-
-        #-- restore window and widget properties
-        #
-        # requires only the previously saved widget state dict
-        #
-        @staticmethod
-        def app_restore(wTree, r=None):
-            for wn in r.keys():  # widgetnames
-                w = wTree.get_widget(wn)
-                if (not w):
-                    continue
-                t = type(w)
-                for method,args in r[wn].items():
-                    # gtk.Window
-                    if method == "size":
-                        w.resize(args[0], args[1])
-                    # gtk.TreeView
-                    if method == "columns:width":
-                        for i,col in enumerate(w.get_columns()):
-                            if (i < len(args)):
-                                col.set_fixed_width(args[i])
-                    #  - Rows
-                    if method == "rows:expanded":
-                        w.collapse_all()
-                        for i in args:
-                            w.expand_row(str(i), False)                        
-                    #  - selected
-                    if method == "row:selected":
-                        w.get_selection().select_path(tuple(args))
-                    # gtk.Toolbar
-                    if method == "icon_size":
-                        w.set_icon_size(args)
-                    if method == "style":
-                        w.set_style(args)
-                    # gtk.Notebook
-                    if method == "page":
-                        w.set_current_page(args)
-                    if method == "tab_pos":
-                        w.set_tab_pos(r[wn]["tab_pos"])
-
-            pass
-
-
-
-        #-- Save-As dialog
-        #
-        @staticmethod
-        def save_file(title="Save As", parent=None, fn="", formats=[("*","*")]):
-            c = gtk.FileChooserDialog(title, parent, action=gtk.FILE_CHOOSER_ACTION_SAVE, buttons=(gtk.STOCK_CANCEL, 0, gtk.STOCK_SAVE, 1))
-            # params
-            if fn:
-                c.set_current_name(fn)
-                fn = ""
-            for fname,ftype in formats:
-                f = gtk.FileFilter()
-                f.set_name(fname)
-                f.add_pattern(ftype)
-                c.add_filter(f)
-            # display
-            if c.run():
-                fn = c.get_filename()  # return filaname
-            c.destroy()
-            return fn
-        
-        
-        
-        # pass updates from another thread, ensures that it is called just once
-        @staticmethod
-        def do(lambda_func):
-            gobject.idle_add(lambda: lambda_func() and False)
-
-
-        # adds background color to widget,
-        # eventually wraps it into a gtk.Window, if it needs a container
-        @staticmethod
-        def bg(w, color="", where=["bg"]):
-            """ this method should be called after widget creation, and before .add()ing it to container """
-            if color:
-                # wrap unstylable widgets into EventBox
-                if not isinstance(w, gtk.Window):
-                    wrap = gtk.EventBox()
-                    wrap.add(w)
-                    wrap.set_property("visible", True)
-                    w = wrap
-                # copy style object, modify settings
-                s = w.get_style().copy()
-                c = w.get_colormap().alloc_color(color)
-                for state in (gtk.STATE_NORMAL, gtk.STATE_SELECTED):
-                    s.bg[state] = c
-                w.set_style(s)
-                # probably redundant, but better safe than sorry:
-                w.modify_bg(gtk.STATE_NORMAL, c)
-            # return modified or wrapped widget
-            return w
-
-
-        # Create GtkLabel
-        @staticmethod
-        def label(text):
-            label = gtk.Label(text)
-            label.set_property("visible", True)
-            label.set_line_wrap(True) 
-            label.set_size_request(400, -1)
-            return label
-
-        # Wrap two widgets in horizontal box
-        @staticmethod
-        def hbox(w1, w2):
-            b = gtk.HBox(homogeneous=False, spacing=10)
-            b.set_property("visible", True)
-            b.pack_start(w1, expand=False, fill=False)
-            b.pack_start(w2, expand=True, fill=True)
-            return b
-
-
-        # Attach textual menu entry and callback
-        @staticmethod
-        def add_menu(menuwidget, label, action):
-            m = gtk.MenuItem(label)
-            m.connect("activate", action)
-            m.show()
-            menuwidget.add(m)
-            
-
-        # gtk.messagebox
-        @staticmethod
-        def msg(text, style=gtk.MESSAGE_INFO, buttons=gtk.BUTTONS_CLOSE):
-            m = gtk.MessageDialog(None, 0, style, buttons, message_format=text)
-            m.show()
-            m.connect("response", lambda *w: m.destroy())
-            
-
-
-# Text-only dropdown list.
-#
-# Necessary because gtk.ComboBoxText binding is absent in debian packages
-# https://bugzilla.gnome.org/show_bug.cgi?id=660659
-#
-# This one implements a convenience method `.set_default()` to define the active
-# selection by value, rather than by index.
-#
-# Can use a list[] of entries or a key->value dict{}, where the value becomes
-# display text, and the key the internal value.
-#
-class ComboBoxText(gtk.ComboBox):
-
-    ls = None
-
-    def __init__(self, entries, no_scroll=1):
-
-        # prepare widget
-        gtk.ComboBox.__init__(self)
-        self.set_property("visible", True)
-        cell = gtk.CellRendererText()
-        self.pack_start(cell, True)
-        self.add_attribute(cell, "text", 1)
-        if no_scroll:
-            self.connect("scroll_event", self.no_scroll)
-
-        # collect entries
-        self.ls = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING)
-        self.set_model(self.ls)
-        if type(entries[0]) is not tuple:
-            entries = zip(entries, entries)
-        for key,value in entries:
-            self.ls.append([key, value])
-        
-    # activate dropdown of given value
-    def set_default(self, value):
-        for index,row in enumerate(self.ls):
-            if value in row:
-                return self.set_active(index)
-        # add as custom entry
-        self.ls.append([value, value])
-        self.set_active(index + 1)
-
-    # fetch currently selected text entry
-    def get_active_text(self):
-        index = self.get_active()
-        if index >= 0:
-            return self.ls[index][0]
-
-    # Signal/Event callback to prevent hover scrolling of ComboBox widgets
-    def no_scroll(self, widget, event, data=None):
-        return True
-
-
-    # Expand A=a|B=b|C=c option list into (key,value) tuple list, or A|B|C just into a list.
-    @staticmethod
-    def parse_options(opts, sep="|", assoc="="):
-        if opts.find(assoc) >= 0:
-            return [ (k,v) for k,v in (x.split(assoc, 1) for x in opts.split(sep)) ]
-        else:
-            return opts.split(sep) #dict( (v,v) for v in opts.split(sep) )
-
diff --git a/pluginconf.py b/pluginconf.py
new file mode 100644
index 0000000..f456022
--- /dev/null
+++ b/pluginconf.py
@@ -0,0 +1,495 @@
+# encoding: UTF-8
+# api: python
+# type: handler
+# category: io
+# title: Plugin configuration
+# description: Read meta data, pyz/package contents, module locating
+# version: 0.6
+# priority: core
+# docs: http://fossil.include-once.org/streamtuner2/wiki/plugin+meta+data
+# config: -
+#
+# Provides plugin lookup and meta data extraction utility functions.
+# It's used to abstract module+option management in applications.
+# For consolidating internal use and external/tool accessibility.
+#
+# The key:value format is language-agnostic. It's basically YAML in
+# a topmost script comment. For Python only # hash comments though.
+# Uses common field names, a documentation block, and an obvious
+# `config: { .. }` spec for options and defaults.
+#
+# It neither imposes a specific module/plugin API, nor config storage,
+# and doesn't fixate module loading. It's really just meant to look
+# up meta infos.
+# This approach avoids in-code values/inspection, externalized meta
+# descriptors, and any hodgepodge or premature module loading just to
+# uncover module description fields.
+#
+# plugin_meta()
+# ‾‾‾‾‾‾‾‾‾‾‾‾‾
+#  Is the primary function to extract a meta dictionary from files.
+#  It either reads from a given module= name, a literal fn=, or just
+#  src= code, and as fallback inspects the last stack frame= else.
+#
+# module_list()
+# ‾‾‾‾‾‾‾‾‾‾‾‾‾
+#  Returns basenames of available/installed plugins. It uses the
+#  plugin_base=[] list for module relation. Which needs to be set up
+#  beforehand, or injected.
+#
+# add_plugin_defaults()
+# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+#  Populates a config_options{} and plugin_states{} list. Used for
+#  initial setup, or when adding new plugins, etc. Both dicts might
+#  also be ConfigParser stores, or implement magic __set__ handling
+#  to act on state changes.
+#
+# get_data()
+# ‾‾‾‾‾‾‾‾‾‾
+#  Is mostly an alias for pkgutil.get_data(). It abstracts the main
+#  base path, allows PYZ usage, and adds some convenience flags.‾
+#  It's somewhat off-scope for plugin management, but used internally.
+#
+# argparse_map()
+# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+#  Converts a list of config: options with arg: attribute for use as
+#  argparser parameters.
+#
+# dependency().valid/depends()
+# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+#  Probes a new plugins` depends: list against installed base modules.
+#  Very crude and tied to streamtuner2 base names.
+#
+#
+# Generally this scheme concerns itself more with plugin basenames.
+# That is: module scripts in a package like `ext.plg1` and `ext.plg2`.
+# It can be initialized by injecting the plugin-package basename into
+# plugin_base = []. The associated paths will be used for module
+# lookup via pkgutil.iter_modules().
+#
+# And a central module can be extended with new lookup locations best
+# by attaching new locations itself via module.__path__ + ["./local"]
+# for example.
+#
+# Plugin loading thus becomes as simple as __import__("ext.local").
+# The attachaed plugin_state config dictionary in most cases can just
+# list module basenames, if there's only one set to manage.
+
+
+import sys
+import os
+import re
+import pkgutil
+import inspect
+try:
+    from compat2and3 import gzip_decode
+except:
+    from gzip import decompress as gzip_decode  # Py3 only
+import zipfile
+import argparse
+
+__all__ = [
+    "get_data", "module_list", "plugin_meta",
+    "dependency", "add_plugin_defaults"
+]
+
+
+# Injectables
+# ‾‾‾‾‾‾‾‾‾‾‾
+log_ERR = lambda *x: None
+
+# File lookup relation for get_data(), should name a top-level package.
+module_base = "config"
+
+# Package/module names for module_list() and plugin_meta() lookups.
+# All associated paths will be scanned for module/plugin basenames.
+plugin_base = ["channels"]
+
+
+# Resource retrieval
+# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+# Fetches file content from install path or from within PYZ
+# archive. This is just an alias and convenience wrapper for
+# pkgutil.get_data().
+# Utilizes the module_base / file_base as top-level reference.
+#
+def get_data(fn, decode=False, gz=False, file_base=None):
+    try:
+        bin = pkgutil.get_data(file_base or module_base, fn)
+        if gz:
+            bin = gzip_decode(bin)
+        if decode:
+            return bin.decode("utf-8", errors='ignore')
+        else:
+            return str(bin)
+    except:
+        # log_ERR("get_data() didn't find:", fn, "in", file_base)
+        pass
+
+
+# Plugin name lookup
+# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+# Search through ./plugins/ (and other configured plugin_base
+# names → paths) and get module basenames.
+#
+def module_list(extra_paths=[]):
+
+    # Convert plugin_base package names into paths for iter_modules
+    paths = []
+    for mp in plugin_base:
+        if sys.modules.get(mp):
+            paths += sys.modules[mp].__path__
+        elif os.path.exists(mp):
+            paths.append(mp)
+
+    # Should list plugins within zips as well as local paths
+    ls = pkgutil.iter_modules(paths + extra_paths)
+    return [name for loader, name, ispkg in ls]
+
+
+# Plugin => meta dict
+# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+# This is a trivial wrapper to assemble a complete dictionary
+# of available/installed plugins. It associates each plugin name
+# with a its meta{} fields.
+#
+def all_plugin_meta():
+    return {
+        name: plugin_meta(module=name) for name in module_list()
+    }
+
+
+# Plugin meta data extraction
+# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+# Can fetch infos from different sources:
+#
+#   fn=      read literal files, or .pyz contents
+#
+#   src=     from already uncovered script code
+#
+#   module=  lookup per pkgutil, from plugin bases
+#            or top-level modules
+#
+#   frame=   extract comment header of caller
+#            (default)
+#
+def plugin_meta(fn=None, src=None, module=None, frame=1, extra_base=[]):
+
+    # Try via pkgutil first,
+    # find any plugins.* modules, or main packages
+    if module:
+        fn = module
+        for base in plugin_base + extra_base:
+            try:
+                src = get_data(fn=fn+".py", decode=True, file_base=base)
+                if src:
+                    break
+            except:
+                continue  # plugin_meta_extract() will print a notice later
+
+    # Real filename/path
+    elif fn and os.path.exists(fn):
+        src = open(fn).read(4096)
+
+    # Else get source directly from caller
+    elif not src and not fn:
+        module = inspect.getmodule(sys._getframe(frame))
+        fn = inspect.getsourcefile(module)
+        src = inspect.getcomments(module)
+
+    # Assume it's a filename within a zip
+    elif fn:
+        intfn = ""
+        while fn and len(fn) and not os.path.exists(fn):
+            fn, add = os.path.split(fn)
+            intfn = add + "/" + intfn
+        if len(fn) >= 3 and intfn and zipfile.is_zipfile(fn):
+            src = zipfile.ZipFile(fn, "r").read(intfn.strip("/"))
+
+    # Extract source comment into meta dict
+    if not src:
+        src = ""
+    if not isinstance(src, str):
+        src = src.decode("utf-8", errors='replace')
+    return plugin_meta_extract(src, fn)
+
+
+# Comment and field extraction logic
+# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+# Finds the first comment block. Splits key:value header
+# fields from comment. Turns everything into an dict, with
+# some stub fields if absent.
+#
+def plugin_meta_extract(src="", fn=None, literal=False):
+
+    # Defaults
+    meta = {
+        "id": os.path.splitext(os.path.basename(fn or "")),
+        "fn": fn,
+        "api": "python",
+        "type": "module",
+        "category": None,
+        "priority": None,
+        "version": "0",
+        "title": fn,
+        "description": "no description",
+        "config": [],
+        "doc": ""
+    }
+
+    # Extract coherent comment block
+    if not literal:
+        src = rx.comment.search(src)
+        if not src:
+            log_ERR("Couldn't read source meta information:", fn)
+            return meta
+        src = src.group(0)
+        src = rx.hash.sub("", src).strip()
+
+    # Split comment block
+    if src.find("\n\n") > 0:
+        src, meta["doc"] = src.split("\n\n", 1)
+
+    # Turn key:value lines into dictionary
+    for field in rx.keyval.findall(src):
+        meta[field[0]] = field[1].strip()
+    meta["config"] = plugin_meta_config(meta.get("config") or "")
+
+    return meta
+
+
+# Unpack config: structures
+# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+# Further breaks up the meta['config'] descriptor.
+# Creates an array from JSON/YAML option lists.
+#
+# config:
+#   { name: 'var1', type: text, value: "default, ..." }
+#   { name=option2, type=boolean, $value=1, etc. }
+#
+# Stubs out name, value, type, description if absent.
+#
+def plugin_meta_config(str):
+    config = []
+    for entry in rx.config.findall(str):
+        opt = {
+            "type": None,
+            "name": None,
+            "description": "",
+            "value": None
+        }
+        for field in rx.options.findall(entry):
+            opt[field[0]] = (field[1] or field[2] or field[3] or "").strip()
+        config.append(opt)
+    return config
+
+
+# Comment extraction regexps
+# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+# Pretty crude comment splitting approach. But works
+# well enough already. Technically a YAML parser would
+# do better; but is likely overkill.
+#
+class rx:
+    comment = re.compile(r"""(^ {0,4}#.*\n)+""", re.M)
+    hash = re.compile(r"""(^ {0,4}# *)""", re.M)
+    keyval = re.compile(r"""
+        ^([\w-]+):(.*$(?:\n(?![\w-]+:).+$)*)      # plain key:value lines
+    """, re.M | re.X)
+    config = re.compile(r"""
+        [\{\<] (.+?) [\}\>]                    # JSOL/YAML scheme {...} dicts
+    """, re.X)
+    options = re.compile(r"""
+        ["':$]?   (\w*)  ["']?                 # key or ":key" or '$key'
+        \s* [:=] \s*                           # "=" or ":"
+     (?:  "  ([^"]*)  "
+       |  '  ([^']*)  '                        #  "quoted" or 'singl' values
+       |     ([^,]*)                           #  or unquoted literals
+     )
+    """, re.X)
+
+
+# ArgumentParser options conversion
+# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+# As variation of in-application config: options, this method converts
+# cmdline argument specifiers.
+#
+#  config:
+#    { arg: -i, name: input[], type: str, description: input files }
+#
+# Which allows to collect argumentparser options from different plugins.
+# The only difference to normal config entries is the `arg:` attribute.
+#
+#  · It adds array arguments with a [] name suffix, or a `*` type suffix.
+#    Else even a `?` or `+` and numeric counts after the type flag.
+#
+#  · Understands the types `str`, `int` and `bool`.
+#
+#  · Entries may carry a `hidden: 1` or `required: 1` attribute.
+#
+#  · And `help:` is an alias to `description:`
+#    And `default:` an alias for `value:`
+#
+#  · While `type: select` utilizes the `select: a|b|c` format as usual.
+#
+# ArgParsers const=, metavar= flag, or type=file are not aliased here.
+#
+# Basically returns a dictionary that can be fed per **kwargs directly
+# to an ArgumentParsers add_argument(). Iterate over each plugins
+# meta['config'][] options to convert them.
+#
+def argparse_map(opt):
+    if not ("arg" in opt and opt["name"] and opt["type"]):
+        return {}
+
+    # Extract --flag names
+    args = opt["arg"].split() + re.findall("-+\w+", opt["name"])
+
+    # Prepare mapping options
+    typing = re.findall("bool|str|\[\]|const|false|true", opt["type"])
+    naming = re.findall("\[\]", opt["name"])
+    name = re.findall("(?<!-)\\b\\w+", opt["name"])
+    nargs = re.findall("\\b\d+\\b|[\?\*\+]", opt["type"]) or [None]
+    is_arr = "[]" in (naming + typing) and nargs == [None]
+    is_bool = "bool" in typing
+    false_b = "false" in typing or opt["value"] in ("0", "false")
+    # print("\nname=", name, "is_arr=", is_arr, "is_bool=", is_bool,
+    # "bool_d=", false_b, "naming=", naming, "typing=", typing)
+
+    # Populate combination as far as ArgumentParser permits
+    kwargs = dict(
+        args     = args,
+        dest     = name[0] if not name[0] in args else None,
+        action   = is_arr and "append"
+                   or  is_bool and false_b and "store_false"
+                   or  is_bool and "store_true"  or  "store",
+        nargs    = nargs[0],
+        default  = opt.get("default") or opt["value"],
+        type     = None if is_bool  else  ("int" in typing and int
+                   or  "bool" in typing and bool  or  str),
+        choices  = opt["select"].split("|") if "select" in opt else None,
+        required = "required" in opt or None,
+        help     = opt["description"] if not "hidden" in opt
+                   else argparse.SUPPRESS
+    )
+    return {k: w for k, w in kwargs.items() if w is not None}
+
+
+# Minimal depends: probing
+# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+# Now this definitely requires customization. Each plugin can carry
+# a list of (soft-) dependency names.
+#
+#   depends: config, appcore >= 2.0, bin:wkhtmltoimage, python < 3.5
+#
+# Here only in-application modules are honored, system references
+# ignored. Unknown plugin names are also skipped. A real install
+# helper might want to auto-tick them on, etc. This example is just
+# meant for probing downloadable plugins.
+#
+# The .valid() helper only asserts the api: string, or skips existing
+# modules, and if they're more recent.
+# While .depends() compares minimum versions against existing modules.
+#
+# In practice there's little need for full-blown dependency resolving
+# for application-level modules.
+#
+class dependency(object):
+
+    # prepare list of known plugins and versions
+    def __init__(self):
+        self.have = all_plugin_meta()
+        # dependencies on core modules are somewhat more interesting:
+        for name in ("st2", "uikit", "config", "action"):
+            self.have[name] = plugin_meta(module=name, extra_base=["config"])
+        self.have["streamtuner2"] = self.have["st2"]
+    have = {}
+
+    # depends:
+    def depends(self, plugin):
+        if plugin.get("depends"):
+            d = self.deps(plugin["depends"])
+            if not self.cmp(d, self.have):
+                return False
+        return True
+
+    # basic list pre-filtering (skip __init__, filter by api:,
+    # exclude installed & same-version plugins)
+    def valid(self, newpl):
+        id = newpl.get("$name", "__invalid")
+        have_ver = self.have.get(id, {}).get("version", "0")
+        if id.find("__") == 0:
+            pass
+        elif newpl.get("api") not in ("python", "streamtuner2"):
+            pass
+        elif have_ver >= newpl.get("version", "0.0"):
+            pass
+        else:
+            return True
+
+    # Split trivial "pkg, mod >= 1, uikit < 4.0" list
+    def deps(self, dep_str):
+        d = []
+        for dep in re.split(r"\s*[,;]+\s*", dep_str):
+            # skip deb:pkg-name, rpm:name, bin:name etc.
+            if not len(dep) or dep.find(":") >= 0:
+                continue
+            # find comparison and version num
+            dep += " >= 0"
+            m = re.search(r"([\w.-]+)\s*([>=<!~]+)\s*([\d.]+([-~.]\w+)*)", dep)
+            if m and m.group(2):
+                d.append([m.group(i) for i in (1, 2, 3)])
+        return d
+
+    # Do actual comparison
+    def cmp(self, d, have):
+        r = True
+        for name, op, ver in d:
+            # skip unknown plugins, might be python module references
+            if not have.get(name, {}).get("version"):
+                continue
+            curr = have[name]["version"]
+            tbl = {
+                ">=": curr >= ver,
+                "<=": curr <= ver,
+                "==": curr == ver,
+                ">":  curr > ver,
+                "<":  curr < ver,
+                "!=": curr != ver,
+            }
+            r &= tbl.get(op, True)
+        return r
+
+
+# Add plugin defaults to conf.* store
+# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+# Utility function which applies plugin meta data to a config
+# store. Which in the case of streamtuner2 is really just a
+# dictionary `conf{}` and a plugin list in `conf.plugins{}`.
+#
+# Adds each default option value: to conf_options{}. And sets
+# first plugin state (enabled/disabled) in conf_plugins{} list,
+# depending on priority: classifier.
+#
+def add_plugin_defaults(conf_options, conf_plugins, meta={}, module=""):
+
+    # Option defaults, if not yet defined
+    for opt in meta.get("config", []):
+        if "name" in opt and "value" in opt:
+            if opt["name"] not in conf_options:
+                # typemap "bool" and "int" here
+                if opt["type"] in ("bool", "boolean"):
+                    val = opt["value"].lower() in ("1", "true", "yes", "on")
+                elif opt["type"] in ("int", "integer", "numeric"):
+                    val = int(opt["value"])
+                else:
+                    val = str(opt["value"])
+                conf_options[opt["name"]] = val
+
+    # Initial plugin activation status
+    if module and module not in conf_plugins:
+        conf_plugins[module] = meta.get("priority") in (
+            "core", "builtin", "always", "default", "standard"
+        )
+
+
diff --git a/st2.py b/st2.py
index 5ec8fb8..172d784 100755
--- a/st2.py
+++ b/st2.py
@@ -3,1187 +3,534 @@
 # api: python
 # type: application
 # title: streamtuner2
-# description: Directory browser for internet radio / audio streams
-# depends: pygtk | pygi, threading, pyquery, kronos, requests
-# version: 2.1.3
-# author: mario salzer
-# license: public domain
+# description: Directory browser for internet radio, audio and video streams
+# version: 2.1.9
+# state: beta
+# author: Mario Salzer <mario at include-once.org>
+# license: Public Domain
 # url: http://freshcode.club/projects/streamtuner2
-# config: <env name="http_proxy" value="" description="proxy for HTTP access" />  <env name="XDG_CONFIG_HOME" description="relocates user .config subdirectory" />
-# category: multimedia
-# 
-#
-#
-# Streamtuner2 is a GUI browser for internet radio directories. Various
-# providers can be added, and streaming stations are usually grouped into
-# music genres or categories. It starts external audio players for stream
-# playing and streamripper for recording broadcasts.
-#
-# It's an independent rewrite of streamtuner1 in a scripting language. So
-# it can be more easily extended and fixed. The use of PyQuery for HTML
-# parsing makes this simpler and more robust.
-#
-# Stream lists are stored in JSON cache files.
+# config:  
+#   { type: env, name: HTTP_PROXY, description: proxy for HTTP access }
+#   { type: env, name: XDG_CONFIG_HOME, description: relocates user .config subdirectory }
+# category: sound
+# depends: pygtk | gi, threading, requests, pyquery, lxml
+# id: streamtuner2
+# pack: *.py, gtk3.xml.gz, bin, channels/__init__.py, bundle/*.py, CREDITS, help/index.page,
+#   streamtuner2.desktop, README, help/streamtuner2.1=/usr/share/man/man1/,
+#   NEWS=/usr/share/doc/streamtuner2/, icon.png=/usr/share/pixmaps/streamtuner2.png
+# architecture: all
 #
+# Streamtuner2 is a GUI for browsing internet radio directories, music
+# collections, and video services - grouped by genres or categories.
+# It runs your preferred audio player, and streamripper for recording.
 #
+# It's an independent rewrite of streamtuner1. Being written in Python,
+# can be more easily extended and fixed. The mix of JSON APIs, regex
+# or PyQuery extraction makes list generation simpler and more robust.
 #
-
-
-""" project status """
-#
-# The application runs mostly stable. The GUI interfaces are workable.
-# It's supposed to run on Gtk2 and Gtk3. Python3 support is still WIP.
-# There haven't been any optimizations regarding memory usage and
-# performance. The current internal API is vastly undocumented.
-#
-#  current bugs:
-#   - audio- and list-format support is not very robust / needs better API
-#   - not all keyboard shortcuts work
-#
-#  features:
-#   - treeview lists are created from datamap[] structure and stream{} dicts
-#   - channel categories are built-in defaults (can be freshened up however)
-#   - config vars and cache data get stored as JSON in ~/.config/streamtuner2/
-#
-#  missing:
-#   - localization
-#
-#  security notes:
-#   - directory scrapers use fragile regular expressions - which is probably
-#     not a security risk, but might lead to faulty data
-#   - MEDIUM: little integrity checking for .pls / .m3u references and files
-#   - minimal XML/SGML entity decoding (-> faulty data)
-#   - MEDIUM: if system json module is not available, pseudo-json uses eval()
-#     to read the config data -> limited risk, since it's only local files
-#   - HIGH RISK: no verification of downloaded favicon image files (ico/png),
-#     as they are passed to gtk.gdk.Pixbuf (OTOH data pre-filtered by Google)
-#   - MEDIUM: audio players / decoders are easily affected by buffer overflows
-#     from corrupt mp3/stream data, and streamtuner2 executes them
-#      - but since that's the purpose -> no workaround
-#
-
+# Primarily radio stations are displayed, some channels however are music
+# collections. Commercial and sign-up services are not an objective.
 
 
 # standard modules
 import sys
-import os, os.path
+import os
 import re
-from collections import namedtuple
 from copy import copy
+import inspect
+import traceback
+from threading import Thread
+import time
 
-# threading or processing module
-try:
-    from processing import Process as Thread
-except:
-    from threading import Thread
-    Thread.stop = lambda self: None
+# add library path (either global setup, or pyzip basename)
+if not os.path.dirname(__file__) in sys.path:
+    sys.path.insert(0, os.path.dirname(__file__))
 
-# add library path
-sys.path.insert(0, "/usr/share/streamtuner2")   # pre-defined directory for modules
-sys.path.append(   "/usr/share/streamtuner2/bundle")   # external libraries
-sys.path.insert(0, ".")   # development module path
+# initializes itself, so all conf.vars are available right away
+from config import *
 
 # gtk modules
-from mygtk import pygtk, gtk, gobject, ui_file, mygtk, ver as GTK_VER, ComboBoxText
+from uikit import pygtk, gtk, gobject, uikit, ui_xml, gui_startup, AboutStreamtuner2
 
 # custom modules
-from config import conf   # initializes itself, so all conf.vars are available right away
-from config import __print__, dbg
 import ahttp
-import action  # needs workaround... (action.main=main)
+import action
+import logo
 import channels
-from channels import *
-import favicon
-
+import channels.bookmarks
+import channels.configwin
+import channels.streamedit
+import channels.search
 
-__version__ = "2.1.3"
 
 
-# this represents the main window
-# and also contains most application behaviour
-main = None
+# This represents the main window, dispatches Gtk events,
+# and shares most application behaviour with the channel modules.
 class StreamTunerTwo(gtk.Builder):
 
-
-        # object containers
-        widgets = {}     # non-glade widgets (the manually instantiated ones)
-        channels = {}    # channel modules
-        features = {}    # non-channel plugins
-        working = []     # threads
-        add_signals = {} # channel gtk-handler signals
-        hooks = {
-            "play": [favicon.download_playing],  # observers queue here
-            "init": [],
-            "config_load": [],
-            "config_save": [],
-        }
-
-        # status variables
-        channel_names = ["bookmarks"]    # order of channel notebook tabs
-        current_channel = "bookmarks"    # currently selected channel name (as index in self.channels{})
-
-
-        # constructor
-        def __init__(self):
-
-            # gtkrc stylesheet
-            self.load_theme(), gui_startup(1/20.0)
-
-            # instantiate gtk/glade widgets in current object
-            gtk.Builder.__init__(self)
-            gtk.Builder.add_from_file(self, conf.find_in_dirs([".", conf.share], ui_file)), gui_startup(2/20.0)
-            # manual gtk operations
-            self.extensionsCTM.set_submenu(self.extensions)  # duplicates Station>Extension menu into stream context menu
-
-            # initialize channels
-            self.channels = {
-              "bookmarks": bookmarks(parent=self),   # this the remaining built-in channel
-              #"shoutcast": None,#shoutcast(parent=self),
-            }
-            gui_startup(3/20.0)
-            self.load_plugin_channels()   # append other channel modules / plugins
-
-
-            # load application state (widget sizes, selections, etc.)
-            try:
-                winlayout = conf.load("window")
-                if (winlayout):
-                    mygtk.app_restore(self, winlayout)
-                # selection values
-                winstate = conf.load("state")
-                if (winstate):
-                    for id in winstate.keys():
-                        self.channels[id].current = winstate[id]["current"]
-                        self.channels[id].shown = winlayout[id+"_list"].get("row:selected", 0)   # actually just used as boolean flag (for late loading of stream list), selection bar has been positioned before already
-            except:
-                pass # fails for disabled/reordered plugin channels
-
-            # late plugin initializations
-            gui_startup(17/20.0)
-            [callback(self) for callback in self.hooks["init"]]
-
-            # display current open channel/notebook tab
-            gui_startup(18/20.0)
-            self.current_channel = self.current_channel_gtk()
-            try: self.channel().first_show()
-            except: __print__(dbg.INIT, "main.__init__: current_channel.first_show() initialization error")
-
-      
-            # bind gtk/glade event names to functions
-            gui_startup(19/20.0)
-            self.connect_signals(dict( list({
-                "gtk_main_quit" : self.gtk_main_quit,                # close window
-                # treeviews / notebook
-                "on_stream_row_activated" : self.on_play_clicked,    # double click in a streams list
-                "on_category_clicked": self.on_category_clicked,     # new selection in category list
-                "on_notebook_channels_switch_page": self.channel_switch,   # channel notebook tab changed
-                "station_context_menu": lambda tv,ev: station_context_menu(tv,ev),
-                # toolbar
-                "on_play_clicked" : self.on_play_clicked,
-                "on_record_clicked": self.on_record_clicked,
-                "on_homepage_stream_clicked": self.on_homepage_stream_clicked,
-                "on_reload_clicked": self.on_reload_clicked,
-                "on_stop_clicked": self.on_stop_clicked,
-                "on_homepage_channel_clicked" : self.on_homepage_channel_clicked,
-                "double_click_channel_tab": self.on_homepage_channel_clicked,
-                # menu
-                "menu_toolbar_standard": lambda w: (self.toolbar.unset_style(), self.toolbar.unset_icon_size()),
-                "menu_toolbar_style_icons": lambda w: (self.toolbar.set_style(gtk.TOOLBAR_ICONS)),
-                "menu_toolbar_style_both": lambda w: (self.toolbar.set_style(gtk.TOOLBAR_BOTH)),
-                "menu_toolbar_size_small": lambda w: (self.toolbar.set_icon_size(gtk.ICON_SIZE_SMALL_TOOLBAR)),
-                "menu_toolbar_size_medium": lambda w: (self.toolbar.set_icon_size(gtk.ICON_SIZE_DND)),
-                "menu_toolbar_size_large": lambda w: (self.toolbar.set_icon_size(gtk.ICON_SIZE_DIALOG)),
-                "menu_notebook_pos_top": lambda w: self.notebook_channels.set_tab_pos(2),
-                "menu_notebook_pos_left": lambda w: self.notebook_channels.set_tab_pos(0),
-                "menu_notebook_pos_right": lambda w: self.notebook_channels.set_tab_pos(1),
-                "menu_notebook_pos_bottom": lambda w: self.notebook_channels.set_tab_pos(3),
-                # win_config
-                "menu_properties": config_dialog.open,
-                "config_cancel": config_dialog.hide,
-                "config_save": config_dialog.save,
-                "config_play_list_edit_col0": lambda w,path,txt: (config_dialog.list_edit(self.config_play, path, 0, txt)),
-                "config_play_list_edit_col1": lambda w,path,txt: (config_dialog.list_edit(self.config_play, path, 1, txt)),
-                "config_record_list_edit_col0": lambda w,path,txt: (config_dialog.list_edit(self.config_record, path, 0, txt)),
-                "config_record_list_edit_col1": lambda w,path,txt: (config_dialog.list_edit(self.config_record, path, 1, txt)),
-                # else
-                "update_categories": self.update_categories,
-                "update_favicons": self.update_favicons,
-                "app_state": self.app_state,
-                "bookmark": self.bookmark,
-                "save_as": self.save_as,
-                "menu_about": lambda w: AboutStreamtuner2(),
-                "menu_help": action.action.help,
-                "menu_onlineforum": lambda w: action.browser("http://sourceforge.net/projects/streamtuner2/forums/forum/1173108"),
-                "menu_fossilwiki": lambda w: action.browser("http://fossil.include-once.org/streamtuner2/"),
-                "menu_projhomepage": lambda w: action.browser("http://milki.include-once.org/streamtuner2/"),
-               # "menu_bugreport": lambda w: BugReport(),
-                "menu_copy": self.menu_copy,
-                "delete_entry": self.delete_entry,
-                # search dialog
-                "quicksearch_set": search.quicksearch_set,
-                "search_open": search.menu_search,
-                "search_go": search.cache_search,
-                "search_srv": search.server_search,
-                "search_cancel": search.cancel,
-                "true": lambda w,*args: True,
-                # win_streamedit
-                "streamedit_open": streamedit.open,
-                "streamedit_save": streamedit.save,
-                "streamedit_new": streamedit.new,
-                "streamedit_cancel": streamedit.cancel,
-            }.items() ) + list( self.add_signals.items() ) ))
-            
-            # actually display main window
-            gui_startup(98.9/100.0)
-            self.win_streamtuner2.show()
-            
-
-        #-- Shortcut for glade.get_widget()
-        # Allows access to widgets as direct attributes instead of using .get_widget()
-        # Also looks in self.channels[] for the named channel plugins
-        def __getattr__(self, name):
-            if (name in self.channels):
-                return self.channels[name]     # like self.shoutcast
-            else:
-                return self.get_object(name)   # or gives an error if neither exists
-
-        # Custom-named widgets are available from .widgets{} not via .get_widget()
-        def get_widget(self, name):
-            if name in self.widgets:
-                return self.widgets[name]
-            else:
-                return gtk.Builder.get_object(self, name)
-                
-        # returns the currently selected directory/channel object (remembered position)
-        def channel(self):
-            return self.channels[self.current_channel]
-
-        # returns the currently selected directory/channel object (from gtk)
-        def current_channel_gtk(self):
-            i = self.notebook_channels.get_current_page()
-            try: return self.channel_names[i]
-            except: return "bookmarks"
-
-        # Notebook tab clicked
-        def channel_switch(self, notebook, page, page_num=0, *args):
-
-            # can be called from channelmenu as well:
-            if type(page) == str:
-                self.current_channel = page
-                self.notebook_channels.set_current_page(self.channel_names.index(page))
-            # notebook invocation:
-            else: #if type(page_num) == int:
-                self.current_channel = self.channel_names[page_num]
-            
-            # if first selected, load current category
-            try:
-                __print__(dbg.PROC, "channel_switch: try .first_show", self.channel().module);
-                self.channel().first_show()
-            except:
-                __print__(dbg.INIT, "channel .first_show() initialization error")
-
-        # Convert ListStore iter to row number
-        def rowno(self):
-            (model, iter) = self.model_iter()
-            return model.get_path(iter)[0]
-
-        # Currently selected entry in stations list, return complete data dict
-        def row(self):
-            return self.channel().stations() [self.rowno()]
-
-            
-        # return ListStore object and Iterator for currently selected row in gtk.TreeView station list
-        def model_iter(self):
-            return self.channel().gtk_list.get_selection().get_selected()
-            
-        # Fetches a single varname from currently selected station entry
-        def selected(self, name="url"):
-            return self.row().get(name)
-
-
-                
-        # Play button
-        def on_play_clicked(self, widget, event=None, *args):
-            row = self.row()
-            if row:
-                self.channel().play(row)
-                [callback(row) for callback in self.hooks["play"]]
-
-        # Recording: invoke streamripper for current stream URL
-        def on_record_clicked(self, widget):
-            row = self.row()
-            action.record(row.get("url"), row.get("format", "audio/mpeg"), "url/direct", row=row)
-
-        # Open stream homepage in web browser
-        def on_homepage_stream_clicked(self, widget):
-            url = self.selected("homepage")             
-            action.browser(url)
-
-        # Browse to channel homepage (double click on notebook tab)
-        def on_homepage_channel_clicked(self, widget, event=2):
-            if event == 2 or event.type == gtk.gdk._2BUTTON_PRESS:
-                __print__(dbg.UI, "dblclick")
-                action.browser(self.channel().homepage)            
-
-        # Reload stream list in current channel-category
-        def on_reload_clicked(self, widget=None, reload=1):
-            __print__(dbg.UI, "reload", reload, self.current_channel, self.channels[self.current_channel], self.channel().current)
-            category = self.channel().current
-            self.thread(
-                lambda: (  self.channel().load(category,reload), reload and self.bookmarks.heuristic_update(self.current_channel,category)  )
-            )
-
-        # Thread a function, add to worker pool (for utilizing stop button)
-        def thread(self, target, *args):
-            thread = Thread(target=target, args=args)
-            thread.start()
-            self.working.append(thread)
-
-        # Stop reload/update threads
-        def on_stop_clicked(self, widget):
-            while self.working:
-                thread = self.working.pop()
-                thread.stop()
-
-        # Click in category list
-        def on_category_clicked(self, widget, event, *more):
-            category = self.channel().currentcat()
-            __print__(dbg.UI, "on_category_clicked", category, self.current_channel)
-            self.on_reload_clicked(None, reload=0)
-            pass
-
-        # Add current selection to bookmark store
-        def bookmark(self, widget):
-            self.bookmarks.add(self.row())
-            # code to update current list (set icon just in on-screen liststore, it would be updated with next display() anyhow - and there's no need to invalidate the ls cache, because that's referenced by model anyhow)
-            try:
-                (model,iter) = self.model_iter()
-                model.set_value(iter, 0, gtk.STOCK_ABOUT)
-            except:
-                pass
-            # refresh bookmarks tab
-            self.bookmarks.load(self.bookmarks.default)
-
-        # Reload category tree
-        def update_categories(self, widget):
-            Thread(target=self.channel().reload_categories).start()
-
-        # Menu invocation: refresh favicons for all stations in current streams category
-        def update_favicons(self, widget):
-            entries = self.channel().stations()
-            favicon.download_all(entries)
-
-        # Save stream to file (.m3u)
-        def save_as(self, widget):
-            row = self.row()
-            default_fn = row["title"] + ".m3u"
-            fn = mygtk.save_file("Save Stream", None, default_fn, [(".m3u","*m3u"),(".pls","*pls"),(".xspf","*xspf"),(".smil","*smil"),(".asx","*asx"),("all files","*")])
-            if fn:
-                action.save(row, fn)
-            pass
-
-        # Save current stream URL into clipboard
-        def menu_copy(self, w):
-            gtk.clipboard_get().set_text(self.selected("url"))
-
-        # Remove a stream entry
-        def delete_entry(self, w):
-            n = self.rowno()
-            del self.channel().stations()[ n ]
-            self.channel().switch()
-            self.channel().save()
-
-        # Richt clicking a stream opens an action content menu
-        def station_context_menu(self, treeview, event):
-            return station_context_menu(treeview, event) # wrapper to the static function
-
-        # Alternative Notebook channel tabs between TOP and LEFT position
-        def switch_notebook_tabs_position(self, w, pos):
-            self.notebook_channels.set_tab_pos(pos);
-            
-
-
-
-
-        # shortcut to statusbar
-        # (hacked to work from within threads, circumvents the statusbar msg pool actually)
-        def status(self, text="", sbar_msg=[]):
-            # init
-            sbar_cid = self.get_widget("statusbar").get_context_id("messages")
-            # remove text
-            while ((not text) and (type(text)==str) and len(sbar_msg)):
-                sbar_msg.pop()
-                mygtk.do(lambda:self.statusbar.pop(sbar_cid))
-            # progressbar
-            if (type(text)==float):
-                if (text >= 999.0/1000):  # completed
-                    mygtk.do(lambda:self.progress.hide())
-                else:  # show percentage
-                    mygtk.do(lambda:self.progress.show() or self.progress.set_fraction(text))
-                    if (text <= 0):  # unknown state
-                        mygtk.do(lambda:self.progress.pulse())
-            # add text
-            elif (type(text)==str):
-                sbar_msg.append(1)
-                mygtk.do(lambda:self.statusbar.push(sbar_cid, text))
-            pass
-
-
-        # load plugins from /usr/share/streamtuner2/channels/
-        def load_plugin_channels(self):
-
-            # find and order plugin files
-            ls = channels.module_list()
-
-            # step through
-            for module in ls:
-                gui_startup(2/10.0 + 7/10.0 * float(ls.index(module))/len(ls), "loading module "+module)
-                                
-                # skip module if disabled
-                if conf.plugins.get(module, 1) == False:
-                    __print__(dbg.STAT, "disabled plugin:", module)
-                    continue
-                
-                # load plugin
-                try:
-                    plugin = __import__("channels."+module, None, None, [""])
-                    plugin_class = plugin.__dict__[module]
-                
-                    # load .config settings from plugin
-                    conf.add_plugin_defaults(plugin_class.config, module)
-
-                    # add and initialize channel
-                    if issubclass(plugin_class, GenericChannel):
-                        self.channels[module] = plugin_class(parent=self)
-                        if module not in self.channel_names:  # skip (glade) built-in channels
-                            self.channel_names.append(module)
-                    # other plugin types
-                    else:
-                        self.features[module] = plugin_class(parent=self)
-                    
-                except Exception as e:
-                    __print__(dbg.INIT, "load_plugin_channels: error initializing:", module, ", exception:")
-                    import traceback
-                    traceback.print_exc()
-
-            # default plugins
-            conf.add_plugin_defaults(self.channels["bookmarks"].config, "bookmarks")
-
-
-        # store window/widget states (sizes, selections, etc.)
-        def app_state(self, widget):
-            # gtk widget states
-            widgetnames = ["win_streamtuner2", "toolbar", "notebook_channels", ] \
-                        + [id+"_list" for id in self.channel_names] + [id+"_cat" for id in self.channel_names]
-            conf.save("window", mygtk.app_state(wTree=self, widgetnames=widgetnames), nice=1)
-            # object vars
-            channelopts = {} #dict([(id, {"current":self.channels[id].current}) for id in self.channel_names])
-            for id in self.channels.keys():
-                if (self.channels[id]):
-                    channelopts[id] = {"current":self.channels[id].current}
-            conf.save("state", channelopts, nice=1)
-
-
-        # apply gtkrc stylesheet
-        def load_theme(self):
-            if conf.get("theme"):
-                for dir in (conf.dir, conf.share, "/usr/share"):
-                    f = dir + "/themes/" + conf.theme + "/gtk-2.0/gtkrc"
-                    if os.path.exists(f):
-                        gtk.rc_parse(f)
-                pass
-
-
-        # end application and gtk+ main loop
-        def gtk_main_quit(self, widget, *x):
-            if conf.auto_save_appstate:
-                try:  # doesn't work with gtk3 yet (probably just hooking at the wrong time)
-                    self.app_state(widget)
-                except:
-                    None
-            gtk.main_quit()
-
-
-
-
-
-
-                
-
-
-
-
-# auxiliary window: about dialog
-class AboutStreamtuner2:
-        # about us
-        def __init__(self):
-            a = gtk.AboutDialog()
-            a.set_version(__version__)
-            a.set_name("streamtuner2")
-            a.set_license("Public Domain\n\nNo Strings Attached.\nUnrestricted distribution,\nmodification, use.")
-            a.set_authors(["Mario Salzer <http://mario.include-once.org/>\n\nConcept based on streamtuner 0."+"99."+"99 from\nJean-Yves Lefort, of which some code remains\nin the Google stations plugin.\n<http://www.nongnu.org/streamtuner/>\n\nMyOggRadio plugin based on cooperation\nwith Christian Ehm. <http://ehm-edv.de/>"])
-            a.set_website("http://milki.include-once.org/streamtuner2/")
-            a.connect("response", lambda a, ok: ( a.hide(), a.destroy() ) )
-            a.show()
-            
-
-            
-# right click in streams/stations TreeView
-def station_context_menu(treeview, event):
-            # right-click ?
-            if event.button >= 3:
-                path = treeview.get_path_at_pos(int(event.x), int(event.y))[0]
-                treeview.grab_focus()
-                treeview.set_cursor(path, None, False)
-                main.streamactions.popup(
-                      parent_menu_shell=None, parent_menu_item=None, func=None,
-                      button=event.button, activate_time=event.time,
-                      data=None
-                )
-                return None
-            # we need to pass on to normal left-button signal handler
-            else:
-                return False
-# this works better as callback function than as class - because of False/Object result for event trigger
-
-
-
-
-# encapsulates references to gtk objects AND properties in main window
-class auxiliary_window(object):
-        def __getattr__(self, name):
-            if name in main.__dict__:
-                return main.__dict__[name]
-            elif name in StreamTunerTwo.__dict__:
-                return StreamTunerTwo.__dict__[name]
-            else:
-                return main.get_widget(name)
-""" allows to use self. and main. almost interchangably """
-
-
-
-# aux win: search dialog (keeps search text in self.q)
-# and also: quick search textbox (uses main.q instead)
-class search (auxiliary_window):
-
-        # either current channel, or last channel (avoid searching in bookmarks)
-        current = None
-
-        # show search dialog   
-        def menu_search(self, w):
-            self.search_dialog.show();
-            if not self.current or main.current_channel != "bookmarks":
-                self.current = main.current_channel
-                self.search_dialog_current.set_label("just %s" % main.channels[self.current].title)
-
-
-        # hide dialog box again
-        def cancel(self, *args):
-            self.search_dialog.hide()
-            return True  # stop any other gtk handlers
-            
-
-        # prepare variables
-        def prepare_search(self):
-            main.status("Searching... Stand back.")
-            self.cancel()
-            self.q = self.search_full.get_text().lower()
-            if self.search_dialog_all.get_active():
-                self.targets = main.channels.keys()
-            else:
-                self.targets = [self.current]
-            main.bookmarks.streams["search"] = []
-            
-        # perform search
-        def cache_search(self, *w):
-            self.prepare_search()
-            entries = []
-            # which fields?
-            fields = ["title", "playing", "homepage"]
-            for i,cn in enumerate([main.channels[c] for c in self.targets]):
-                if cn.streams:  # skip disabled plugins
-                    # categories
-                    for cat in cn.streams.keys():
-                        # stations
-                        for row in cn.streams[cat]:
-                            # assemble text fields to compare
-                            text = " ".join([row.get(f, " ") for f in fields])
-                            if text.lower().find(self.q) >= 0:
-                                row = copy(row)
-                                row["genre"] = c + " " + row.get("genre", "")
-                                entries.append(row)
-            self.show_results(entries)
-
-        # display "search" in "bookmarks"
-        def show_results(self, entries):
-            main.status(1.0)
-            main.channel_switch(None, "bookmarks", 0)
-            main.bookmarks.set_category("search")
-            # insert data and show
-            main.channels["bookmarks"].streams["search"] = entries   # we have to set it here, else .currentcat() might reset it 
-            main.bookmarks.load("search")
-            
-            
-        # live search on directory server homepages
-        def server_search(self, w):
-            self.prepare_search()
-            entries = []
-            for i,cn in enumerate([main.channels[c] for c in self.targets]):
-                if cn.has_search:  # "search" in cn.update_streams.func_code.co_varnames:
-                    __print__(dbg.PROC, "has_search:", cn.module)
-                    try:
-                        add = cn.update_streams(cat=None, search=self.q)
-                        for row in add:
-                            row["genre"] = cn.title + " " + row.get("genre", "")
-                        entries += add
-                    except:
-                        continue
-                #main.status(main, 1.0 * i / 15)
-            self.show_results(entries)
-
-
-        # search text edited in text entry box
-        def quicksearch_set(self, w, *eat, **up):
-            
-            # keep query string
-            main.q = self.search_quick.get_text().lower()
-
-            # get streams
-            c = main.channel()
-            rows = c.stations()
-            col = c.rowmap.index("search_col") # this is the gtk.ListStore index # which contains the highlighting color
-
-            # callback to compare (+highlight) rows
-            m = c.gtk_list.get_model()
-            m.foreach(self.quicksearch_treestore, (rows, main.q, col, col+1))
-        search_set = quicksearch_set
-            
-            
-            
-        # callback that iterates over whole gtk treelist,
-        # looks for search string and applies TreeList color and flag if found
-        def quicksearch_treestore(self, model, path, iter, extra_data):
-            i = path[0]
-            (rows, q, color, flag) = extra_data
-
-            # compare against interesting content fields:
-            text = rows[i].get("title", "") + " " + rows[i].get("homepage", "")
-            # config.quicksearch_fields
-            text = text.lower()
-
-            # simple string match (probably doesn't need full search expression support)
-            if len(q) and text.find(q) >= 0:
-               model.set_value(iter, color, "#fe9")  # highlighting color
-               model.set_value(iter, flag, True) # background-set flag
-            # color = 12 in liststore, flag = 13th position
-            else:
-               model.set_value(iter, color, "")   # for some reason the cellrenderer colors get applied to all rows, even if we specify an iter (=treelist position?, not?)
-               model.set_value(iter, flag, False)   # that's why we need the secondary -set option
-
-            #??
-            return False
-
-
-
-search = search()
-# instantiates itself
-
-
-
-
-# aux win: stream data editing dialog
-class streamedit (auxiliary_window):
-
-
-        # show stream data editing dialog
-        def open(self, mw):
-            config_dialog.load_config(main.row(), "streamedit_")
-            self.win_streamedit.show()
-
-
-        # copy widget contents to stream
-        def save(self, w):
-            config_dialog.save_config(main.row(), "streamedit_")
-            main.channel().save()
-            self.cancel(w)
-
-            
-        # add a new list entry, update window
-        def new(self, w):
-            s = main.channel().stations()
-            s.append({"title":"new", "url":"", "format":"audio/mpeg", "genre":"", "listeners":1});
-            main.channel().switch() # update display
-            main.channel().gtk_list.get_selection().select_path(str(len(s)-1)); # set cursor to last row
-            self.open(w)
-
-
-        # hide window
-        def cancel(self, *w):
-            self.win_streamedit.hide()
-            return True
-
-streamedit = streamedit()
-# instantiates itself
-
-
-
-
-
-# aux win: settings UI
-class config_dialog (auxiliary_window):
-
-
-        # Display win_config, pre-fill text fields from global conf. object
-        def open(self, widget):
-            if self.first_open:
-                self.add_plugins()
-                self.combobox_theme()
-                self.first_open = 0
-                self.win_config.resize(565, 625)
-            self.load_config(conf.__dict__, "config_")
-            self.load_config(conf.plugins, "config_plugins_")
-            [callback() for callback in self.hooks["config_load"]]
-            self.win_config.show()
-        first_open = 1
-
-        # Hide window
-        def hide(self, *args):
-            self.win_config.hide()
-            return True
-
+    # object containers
+    widgets = {}     # non-glade widgets (any manually instantiated ones)
+    channels = {}    # channel modules
+    features = {}    # non-channel plugins
+    #working = []     # threads
+    hooks = {
+        "play": [],  # observers queue here
+        "record": [],
+        "switch": [],
+        "init": [],
+        "quit": [action.cleanup_tmp_files],
+        "config_load": [],
+        "config_save": [],
+    }
+    meta = plugin_meta()
+
+
+    # status variables
+    current_channel = "bookmarks"    # currently selected channel name (as index in self.channels{})
+
+    # constructor
+    def __init__(self):
         
-        # Load values from conf. store into gtk widgets
-        def load_config(self, config, prefix="config_"):
-            for key,val in config.items():
-                w = main.get_widget(prefix + key)
-                if w:
-                    # input field
-                    if type(w) is gtk.Entry:
-                        w.set_text(str(val))
-                    # checkmark
-                    elif type(w) is gtk.CheckButton:
-                        w.set_active(bool(val))
-                    # dropdown
-                    elif type(w) is ComboBoxText:
-                        w.set_default(val)
-                    # list
-                    elif type(w) is gtk.ListStore:
-                        w.clear()
-                        for k,v in val.items():
-                            w.append([k, v, True])
-                        w.append(["", "", True])
-                __print__(dbg.CONF, "config load", prefix+key, val, type(w))
-
-        # Store gtk widget valus back into conf. dict
-        def save_config(self, config, prefix="config_", save=0):
-            for key,val in config.items():
-                w = main.get_widget(prefix + key)
-                if w:
-                    # text
-                    if type(w) is gtk.Entry:
-                        config[key] = w.get_text()
-                    # pre-defined text
-                    elif type(w) is ComboBoxText:
-                        config[key] = w.get_active_text()
-                    # boolean
-                    elif type(w) is gtk.CheckButton:
-                        config[key] = w.get_active()
-                    # dict
-                    elif type(w) is gtk.ListStore:
-                        config[key] = {}
-                        for row in w:
-                            if row[0] and row[1]:
-                                config[key][row[0]] = row[1]
-                __print__(dbg.CONF, "config save", prefix+key, val)
+        # Load stylesheet, instantiate GtkBuilder in self, menu and logo hooks
+        gui_startup(1/20.0), gtk.Builder.__init__(self)
+        gui_startup(1/20.0), gtk.Builder.add_from_string(self, ui_xml)
+        gui_startup(3/20.0), self.logo_scale(1.0)
+
+        # initialize built-in plugins
+        self.channels = {
+          "bookmarks": channels.bookmarks.bookmarks(parent=self),   # this the remaining built-in channel
+        }
+        # dialogs that are connected to main
+        self.features = {
+          "search": channels.search.search(self),
+          "configwin": channels.configwin.configwin(self),
+          "streamedit": channels.streamedit.streamedit(self),
+        }
+        gui_startup(4/20.0)
 
+        # early module coupling
+        action.main = self            # action (play/record) module needs a reference to main window for gtk interaction and some URL/URI callbacks
+        ahttp.feedback = self.status  # http module gives status feedbacks too
         
-        # Generic Gtk callback to update ListStore when entries get edited
-        def list_edit(self, liststore, path, column, new_text):
-            liststore[path][column] = new_text
-            # The signal_connect() dict actually prepares individual lambda functions
-            # to bind the correct ListStore and column id.
-            
-
-        # list of Gtk themes in dropdown
-        def combobox_theme(self):
-            # find themes
-            themedirs = (conf.share+"/themes", conf.dir+"/themes", "/usr/share/themes")
-            themes = ["no theme"]
-            [[themes.append(e) for e in os.listdir(dir)] for dir in themedirs if os.path.exists(dir)]
-            __print__(dbg.STAT, themes)
-            # add dropdown
-            main.widgets["theme"] = ComboBoxText(themes)
-            self.theme_cb_placeholder.pack_start(self.theme)
-            self.theme_cb_placeholder.pack_end(mygtk.label(""))
-
-
-        # retrieve currently selected value
-        def apply_theme(self):
-            conf.theme = self.theme.get_active_text()
-            main.load_theme()
-
-
-        # add configuration setting definitions from plugins
-        def add_plugins(self):
-
-            for name,meta in channels.module_meta().items():
-
-                # add plugin load entry
-                if name:
-                    cb = gtk.CheckButton(name)
-                    cb.get_children()[0].set_markup("<b>%s</b> <i>(%s)</i> %s\n<small>%s</small>" % (meta["title"], meta["type"], meta.get("version", ""), meta["description"]))
-                    self.add_( "config_plugins_"+name, cb )
-
-                # look up individual plugin options, if loaded
-                if self.channels.get(name) or self.features.get(name):
-                    c = self.channels.get(name) or self.features.get(name)
-                    for opt in c.config:
-
-                        # default values are already in conf[] dict (now done in conf.add_plugin_defaults)
-                        color = opt.get("color", None)
-                            
-                        # display checkbox
-                        if opt["type"] == "boolean":
-                            cb = gtk.CheckButton(opt["description"])
-                            self.add_( "config_"+opt["name"], cb, color=color )
-                        # drop down list
-                        elif opt["type"] == "select":
-                            cb = ComboBoxText(ComboBoxText.parse_options(opt["select"])) # custom mygtk widget
-                            self.add_( "config_"+opt["name"], cb, opt["description"], color )
-                        # text entry
-                        else:
-                            self.add_( "config_"+opt["name"], gtk.Entry(), opt["description"], color )
-
-                # spacer 
-                self.add_( "filler_pl_"+name, gtk.HSeparator() )
-
-
-        # Put config widgets into config dialog notebook
-        def add_(self, id, w, label=None, color=""):
-            w.set_property("visible", True)
-            main.widgets[id] = w
-            if label:
-                if type(w) is gtk.Entry:
-                    w.set_width_chars(11)
-                w = mygtk.hbox(w, mygtk.label(label))
-            if color:
-                w = mygtk.bg(w, color)
-            self.plugin_options.pack_start(w)
+        # load plugins
+        self.load_plugin_channels()
+        # restore app/widget states
+        self.init_app_state()
+        # and late plugin initializations
+        [callback(self) for callback in self.hooks["init"]]
+
+        # display current open channel/notebook tab
+        gui_startup(18/20.0)
+        self.current_channel = self.current_channel_gtk()
+        try:
+            self.channel().first_show()
+        except Exception as e:
+            log.INIT("main.__init__: current_channel.first_show() initialization error:", e)
+
+  
+        # bind gtk/glade event names to functions
+        gui_startup(19.75/20.0)
+        self.connect_signals({
+            "gtk_main_quit" : self.gtk_main_quit,                # close window
+            # treeviews / notebook
+            "on_stream_row_activated" : self.on_play_clicked,    # double click in a streams list
+            "on_category_clicked": self.on_category_clicked,     # new selection in category list
+            "on_notebook_channels_switch_page": self.channel_switch,   # channel notebook tab changed
+            "station_context_menu": lambda tv,ev: self.station_context_menu(tv,ev),
+            # toolbar
+            "on_play_clicked" : self.on_play_clicked,
+            "on_record_clicked": self.on_record_clicked,
+            "on_homepage_stream_clicked": self.on_homepage_stream_clicked,
+            "on_reload_clicked": self.on_reload_clicked,
+            "on_homepage_channel_clicked" : self.on_homepage_channel_clicked,
+            "double_click_channel_tab": self.on_homepage_channel_clicked,
+            # menu
+            "menu_toolbar_standard": lambda w: (self.toolbar.unset_style(), self.toolbar.unset_icon_size()),
+            "menu_toolbar_style_icons": lambda w: (self.toolbar.set_style(gtk.TOOLBAR_ICONS)),
+            "menu_toolbar_style_both": lambda w: (self.toolbar.set_style(gtk.TOOLBAR_BOTH)),
+            "menu_toolbar_size_small": lambda w: (self.toolbar.set_icon_size(gtk.ICON_SIZE_SMALL_TOOLBAR), self.logo_scale(0.40)),
+            "menu_toolbar_size_medium": lambda w: (self.toolbar.set_icon_size(gtk.ICON_SIZE_DND), self.logo_scale(0.75)),
+            "menu_toolbar_size_large": lambda w: (self.toolbar.set_icon_size(gtk.ICON_SIZE_DIALOG), self.logo_scale(1.0)),
+            "menu_notebook_pos_top": lambda w: self.notebook_channels.set_tab_pos(2),
+            "menu_notebook_pos_left": lambda w: self.notebook_channels.set_tab_pos(0),
+            "menu_notebook_pos_right": lambda w: self.notebook_channels.set_tab_pos(1),
+            "menu_notebook_pos_bottom": lambda w: self.notebook_channels.set_tab_pos(3),
+            # win_config
+            "menu_properties": self.configwin.open,
+            "config_cancel": self.configwin.hide,
+            "config_save": self.configwin.save,
+            "config_play_list_edit_col0": lambda w,path,txt: (self.configwin.list_edit(self.config_play, path, 0, txt)),
+            "config_play_list_edit_col1": lambda w,path,txt: (self.configwin.list_edit(self.config_play, path, 1, txt)),
+            "config_record_list_edit_col0": lambda w,path,txt: (self.configwin.list_edit(self.config_record, path, 0, txt)),
+            "config_record_list_edit_col1": lambda w,path,txt: (self.configwin.list_edit(self.config_record, path, 1, txt)),
+            # else
+            "update_categories": self.update_categories,
+            "update_favicons": self.update_favicons,
+            "app_state": self.save_app_state,
+            "bookmark": self.bookmark,
+            "save_as": self.save_as,
+            "menu_about": lambda w: AboutStreamtuner2(self),
+            "menu_help": action.help,
+            "menu_onlineforum": lambda w: action.browser("http://sourceforge.net/projects/streamtuner2/forums/forum/1173108"),
+            "menu_fossilwiki": lambda w: action.browser("http://fossil.include-once.org/streamtuner2/"),
+            "menu_projhomepage": lambda w: action.browser("http://milki.include-once.org/streamtuner2/"),
+           # "menu_bugreport": lambda w: BugReport(),
+            "menu_copy": self.menu_copy,
+            "delete_entry": self.delete_entry,
+            # search dialog
+            "quicksearch_set": self.search.quicksearch_set,
+            "search_open": self.search.menu_search,
+            "search_go": self.search.cache_search,
+            "search_srv": lambda *w: self.thread(lambda: self.search.server_search(None)),
+            "search_cancel": self.search.cancel,
+            "true": lambda w,*args: True,
+            # win_streamedit
+            "streamedit_open": self.streamedit.open,
+            "streamedit_save": self.streamedit.save,
+            "streamedit_new": self.streamedit.new,
+            "streamedit_cancel": self.streamedit.cancel,
+        })
         
-        # save config
-        def save(self, widget):
-            self.save_config(conf.__dict__, "config_")
-            self.save_config(conf.plugins, "config_plugins_")
-            [callback() for callback in main.hooks["config_save"]]
-            config_dialog.apply_theme()
-            conf.save(nice=1)
-            self.hide()
-                  
-config_dialog = config_dialog()
-# instantiates itself
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# class GenericChannel:
-#
-#   is in channels/__init__.py
-#
-
-
-
-
-
-#-- favourite lists                                            ------------------------------------------
-#
-# This module lists static content from ~/.config/streamtuner2/bookmarks.json;
-# its data list is queried by other plugins to add 'star' icons.
-#
-# Some feature extensions inject custom categories[] into streams{}
-# e.g. "search" adds its own category once activated, as does the "timer" plugin.
-#
-class bookmarks(GenericChannel):
-
-
-        # desc
-        module = "bookmarks"
-        title = "bookmarks"
-        version = 0.4
-        base_url = "file:.config/streamtuner2/bookmarks.json"
-        listformat = "*/*"
+        # actually display main window
+        if conf.window_title:
+            self.update_title()
+        self.win_streamtuner2.show_all()
+        gui_startup(100.0)
+
+
+    #-- Shortcut for glade.get_widget()
+    # Allows access to widgets as direct attributes instead of using .get_widget()
+    # Also looks in self.channels[] for the named channel plugins
+    def __getattr__(self, name):
+        if name in self.channels:
+            return self.channels[name]     # like self.shoutcast
+        elif name in self.features:
+            return self.features[name]     # like self.configwin
+        else:
+            return self.get_object(name)   # or gives an error if neither exists
+
+    # Custom-named widgets are available from .widgets{} not via .get_widget()
+    def get_widget(self, name):
+        if name in self.widgets:
+            return self.widgets[name]
+        else:
+            return gtk.Builder.get_object(self, name)
+
+
+    # Run function in separate thread.
+    # Often used in conjunction with uikit.do() for Gtk interactions.
+    def thread(self, target, *args, **kwargs):
+        if conf.nothreads:
+            return target(*args, **kwargs)
+        thread = Thread(target=target, args=args, kwargs=kwargs)
+        thread.start()
 
+            
+    # Returns the currently selected directory/channel object (remembered position)
+    def channel(self):
+        return self.channels[self.current_channel]
+
+    # List of module titles for channel tabs
+    @property
+    def channel_names(self):
+        n = self.notebook_channels
+        return [n.get_menu_label_text(n.get_nth_page(i)) for i in range(0, n.get_n_pages())]
+
+    # Returns the currently selected directory/channel object (from gtk)
+    def current_channel_gtk(self):
+        return self.channel_names[self.notebook_channels.get_current_page()]
+    
         
-        # i like this
-        config = [
-            {"name":"like_my_bookmarks", "type":"boolean", "value":0, "description":"I like my bookmarks"},
-        ]
-
-
-        # content
-        categories = ["favourite", ]  # timer, links, search, and links show up as needed
-        current = "favourite"
-        default = "favourite"
-        streams = {"favourite":[], "search":[], "scripts":[], "timer":[], "history":[], }
+    # Notebook tab has been clicked (receives numeric page_num), but *NOT* yet changed (visually).
+    def channel_switch(self, notebook, page, page_num=0, *args):
+        self.current_channel = notebook.get_menu_label_text(notebook.get_nth_page(page_num))
+        log.UI("main.channel_switch() :=", self.current_channel)
+        # update window title, call plugin (e.g. channel link in toolbar)
+        if conf.window_title:
+            uikit.do(self.update_title)
+        # if first selected, load current category
+        # (run in thread, to make it look speedy on first startup)
+        self.thread(self.channel().first_show)
+
+    # Invoked from the menu instead, uses module name instead of numeric tab id
+    def channel_switch_by_name(self, name):
+        self.notebook_channels.set_current_page(self.channel_names.index(name))
+
+    # Mirror selected channel tab into main window title
+    def update_title(self, *x, **y):
+        meta = self.channel().meta
+        self.win_streamtuner2.set_title("Streamtuner2 - %s" % meta.get("title"))
+        [cb(meta) for cb in self.hooks["switch"]]
+
+
+    # Channel: row{} dict for current station
+    def row(self):
+        return self.channel().row()
         
+    # Channel: fetch single varname from station row{} dict
+    def selected(self, name="url"):
+        return self.row().get(name)
 
-        # cache list, to determine if a PLS url is bookmarked
-        urls = []
-
-
-        # this channel does not actually retrieve/parse data from anywhere
-        def update_categories(self):
-            pass
-        def update_streams(self, cat):
-            return self.streams.get(cat, [])
 
             
-        # streams are already loaded at instantiation
-        def first_show(self):
-            pass
-
-
-        # all entries just come from "bookmarks.json"
-        def cache(self):
-            # stream list
-            cache = conf.load(self.module)
-            if (cache):
-                __print__(dbg.PROC, "load bookmarks.json")
-                self.streams = cache
-            
-
+    # Play button
+    def on_play_clicked(self, widget, event=None, *args):
+        self.status("Starting player...")
+        channel = self.channel()
+        row = channel.play()
+        self.status("")
+        [callback(row, channel=channel) for callback in self.hooks["play"]]
+
+    # Recording: invoke streamripper for current stream URL
+    def on_record_clicked(self, widget):
+        self.status("Recording station...")
+        row = self.channel().record()
+        [callback(row) for callback in self.hooks["record"]]
+
+    # Open stream homepage in web browser
+    def on_homepage_stream_clicked(self, widget):
+        url = self.selected("homepage")
+        if url and len(url): action.browser(url)
+        else: self.status("No homepage URL present.")
+
+    # Browse to channel homepage (@BROKEN: double click on notebook tab)
+    def on_homepage_channel_clicked(self, widget, event=2):
+        if event == 2 or event.type == gtk.gdk._2BUTTON_PRESS:
+            log.UI("dblclick")
+            url = self.channel().meta.get("url", "https://duckduckgo.com/?q=" + self.channel().module)
+            action.browser(url)
 
-        # save to cache file
-        def save(self):
-            conf.save(self.module, self.streams, nice=1)
+    # Reload stream list in current channel-category
+    def on_reload_clicked(self, widget=None, reload=1):
+        log.UI("on_reload_clicked()", "reload=", reload, "current_channel=", self.current_channel, "c=", self.channels[self.current_channel], "cat=", self.channel().current)
+        self.thread(self._on_reload, self.channel(), reload)
+    def _on_reload(self, channel, reload):
+        self.channel().load(channel.current, force=reload)
+        if reload:
+            try: self.bookmarks.heuristic_update(self.current_channel, channel.category)
+            except: pass
+
+    # Click in category list
+    def on_category_clicked(self, widget, event, *more):
+        category = self.channel().currentcat()
+        log.UI("on_category_clicked", category, self.current_channel)
+        self.on_reload_clicked(None, reload=0)
+        pass
+
+    # Add current selection to bookmark store
+    def bookmark(self, widget):
+        self.bookmarks.add(self.row())
+        self.channel().row_icon(gtk.STOCK_ABOUT)
+        # refresh bookmarks tab
+        self.bookmarks.load(self.bookmarks.default)
+
+    # Reload category tree
+    def update_categories(self, widget):
+        self.thread(self.channel().reload_categories)
+
+    # Menu invocation: refresh favicons for all stations in current streams category
+    def update_favicons(self, widget):
+        if "favicon" in self.features:
+            ch = self.channel()
+            self.features["favicon"].update_all(entries=ch.stations(), channel=ch)
+
+    # Save stream to file (.m3u)
+    def save_as(self, widget):
+        row = self.row()
+        default_fn = row["title"] + ".m3u"
+        fn = uikit.save_file("Save Stream", None, default_fn, [(".m3u","*m3u"),(".pls","*pls"),(".xspf","*xspf"),(".jspf","*jspf"),(".smil","*smil"),(".asx","*asx"),("all files","*")])
+        if fn:
+            source = row.get("listformat", self.channel().listformat)
+            dest = (re.findall("\.(m3u|pls|xspf|jspf|json|smil|asx|wpl)8?$", fn) or ["pls"])[0]
+            action.save_playlist(source=source, multiply=True).file(rows=[row], fn=fn, dest=dest)
+        pass
+
+    # Save current stream URL into clipboard
+    def menu_copy(self, w):
+        gtk.clipboard_get().set_text(self.selected("url"))
+
+    # Remove a stream entry
+    def delete_entry(self, w):
+        cn = self.channel()
+        n = cn.rowno()
+        del cn.stations()[ n ]
+        cn.switch()
+        cn.save()
+
+    # Alternative Notebook channel tabs between TOP and LEFT position
+    def switch_notebook_tabs_position(self, w, pos):
+        self.notebook_channels.set_tab_pos(pos);
+
+
+
+
+    # Shortcut to statusbar and progressbar (receives either a string, or a float).
+    def status(self, text=None, timeout=3):
+        self.status_last = time.time() + timeout
+        gobject.timeout_add(int(timeout*1000), self.status_clear)
+        # progressbar
+        if isinstance(text, (int, float)):
+            if (text <= 0):  # unknown state
+                uikit.do(self.progress.pulse, immediate=1)
+            elif text >= 0.999 or text < 0.0:  # completed
+                uikit.do(self.progress.hide)
+            else:  # show percentage
+                uikit.do(self.progress.show, immediate=1)
+                uikit.do(self.progress.set_fraction, text, immediate=1)
+        # add text
+        elif isinstance(text, (str)):
+            uikit.do(self.statusbar.set_text, text)
+        # clean up
+        else:
+            self.status_clear(anyway=True)
+
+    # Clean up after 3 seconds
+    def status_clear(self, anyway=False):
+        if anyway or time.time() >= self.status_last:
+            self.statusbar.set_text("")
+            self.progress.hide()
+            return False
+        else:
+            return True
 
 
-        # checks for existence of an URL in bookmarks store,
-        # this method is called by other channel modules' display() method
-        def is_in(self, url, once=1):
-            if (not self.urls):
-                self.urls = [row.get("url","urn:x-streamtuner2:no") for row in self.streams["favourite"]]
-            return url in self.urls
+    # load plugins from /usr/share/streamtuner2/channels/
+    def load_plugin_channels(self):
 
+        # initialize plugin modules (pre-ordered)
+        ls = module_list()
+        for name in ls:
+            gui_startup(4/20.0 + 13.5/20.0 * float(ls.index(name))/len(ls), "loading module "+name)
 
-        # called from main window / menu / context menu,
-        # when bookmark is to be added for a selected stream entry
-        def add(self, row):
-        
-            # normalize data (this row originated in a gtk+ widget)
-            row["favourite"] = 1
-            if row.get("favicon"):
-               row["favicon"] = favicon.file(row.get("homepage"))
-            if not row.get("listformat"):
-                row["listformat"] = main.channel().listformat
-               
-            # append to storage
-            self.streams["favourite"].append(row)
-            self.save()
-            self.load(self.default)
-            self.urls.append(row["url"])
-
-
-        # simplified gtk TreeStore display logic (just one category for the moment, always rebuilt)
-        def load(self, category, force=False):
-            #self.liststore[category] = \
-            __print__(dbg.UI, category, self.streams.keys())
-            mygtk.columns(self.gtk_list, self.datamap, self.prepare(self.streams.get(category,[])))
-
-
-        # select a category in treeview
-        def add_category(self, cat):
-            if cat not in self.categories: # add category if missing
-                self.categories.append(cat)
-                self.display_categories()
-
-
-        # change cursor
-        def set_category(self, cat):
-            self.add_category(cat)
-            self.gtk_cat.get_selection().select_path(str(self.categories.index(cat)))
-            return self.currentcat()
+            # load defaults - on first startup - or with -D in any case
+            if not name in conf.plugins or conf.debug:
+                conf.add_plugin_defaults(plugin_meta(module=name), name)
             
+            # skip module if disabled
+            if conf.plugins.get(name, 1) == False:
+                log.STAT("disabled plugin:", name)
+                continue
+            # or if it's a built-in (already imported)
+            elif name in self.features or name in self.channels:
+                continue
             
-        # update bookmarks from freshly loaded streams data
-        def heuristic_update(self, updated_channel, updated_category):
-
-            if not conf.heuristic_bookmark_update: return
-            __print__(dbg.ERR, "heuristic bookmark update")
-            save = 0
-            fav = self.streams["favourite"]
-        
-            # First we'll generate a list of current bookmark stream urls, and then
-            # remove all but those from the currently UPDATED_channel + category.
-            # This step is most likely redundant, but prevents accidently re-rewriting
-            # stations that are in two channels (=duplicates with different PLS urls).
-            check = {"http//": "[row]"}
-            check = dict((row.get("url", "http//"),row) for row in fav)
-            # walk through all channels/streams
-            for chname,channel in main.channels.items():
-                for cat,streams in channel.streams.items():
-
-                    # keep the potentially changed rows
-                    if (chname == updated_channel) and (cat == updated_category):
-                        freshened_streams = streams
-
-                    # remove unchanged urls/rows
-                    else:
-                        unchanged_urls = (row.get("url") for row in streams)
-                        for url in unchanged_urls:
-                            if url in check:
-                                del check[url]
-                                # directory duplicates could unset the check list here,
-                                # so we later end up doing a deep comparison
-
-
-            # now the real comparison,
-            # where we compare station titles and homepage url to detect if a bookmark is an old entry
-            for row in freshened_streams:
-                url = row.get("url")
-                
-                # empty entry (google stations), or stream still in current favourites
-                if not url or url in check:
-                    pass
-
-                # need to search
+            # load plugin
+            try:
+                plugin = __import__("channels."+name, globals(), None, [""])
+                #print [name for name,c in inspect.getmembers(plugin) if inspect.isclass(c)]
+                plugin_class = plugin.__dict__[name]
+                plugin_obj = plugin_class(parent=self)
+
+                # add to .channels{}
+                if issubclass(plugin_class, channels.GenericChannel):
+                    self.channels[name] = plugin_obj
+                # or .features{} for other plugin types
                 else:
-                    title = row.get("title")
-                    homepage = row.get("homepage")
-                    for i,old in enumerate(fav):
-
-                        # skip if new url already in streams
-                        if url == old.get("url"):
-                            pass   # This is caused by channel duplicates with identical PLS links.
-                        
-                        # on exact matches (but skip if url is identical anyway)
-                        elif title == old["title"] and homepage == old.get("homepage",homepage):
-                            # update stream url
-                            fav[i]["url"] = url
-                            save = 1
-                            
-                        # more text similarity heuristics might go here
-                        else:
-                            pass
-            
-            # if there were changes
-            if save: self.save()
-
-
-
-
-
-
-
-
-
-
-
-
-
-#-- startup progress bar
-progresswin, progressbar = 0, 0
-def gui_startup(p=0/100.0, msg="streamtuner2 is starting"):
+                    self.features[name] = plugin_obj
+                
+            except Exception as e:
+                log.INIT("load_plugin_channels: error initializing:", name, ", exception:")
+                traceback.print_exc()
 
-    global progresswin,progressbar
-    if not progresswin:
 
-        # GtkWindow "progresswin"
-        progresswin = gtk.Window()
-        progresswin.set_property("title", "streamtuner2")
-        progresswin.set_property("default_width", 300)
-        progresswin.set_property("width_request", 300)
-        progresswin.set_property("default_height", 30)
-        progresswin.set_property("height_request", 30)
-        #progresswin.set_property("window_position", "center")
-        progresswin.set_property("decorated", False)
-        progresswin.set_property("visible", True)
+    # Redraw logo        
+    def logo_scale(self, r=1.0, map=None):
+        pix = uikit.pixbuf(logo.png, decode=1, fmt="png")
+        if map and map in (2,5,0):  # gtk.ICON_SIZE_SMALL_TOOLBAR / _DND / _DIALOG
+            r = { 2: 0.45, 5: 0.75, 0: 1.0 }[map]
+        if r != 1.0:
+            pix = pix.scale_simple(int(321*r), int(115*r), gtk.gdk.INTERP_BILINEAR)
+        self.img_logo.set_from_pixbuf(pix)
 
-        # GtkProgressBar "progressbar"
-        progressbar = gtk.ProgressBar()
-        progressbar.set_property("visible", True)
-        progressbar.set_property("show_text", True)
-        progressbar.set_property("text", msg)
-        progresswin.add(progressbar)
-        progresswin.show_all()
 
-    try:
-      if p<1:
-        progressbar.set_fraction(p)
-        progressbar.set_property("text", msg)
-        while gtk.events_pending(): gtk.main_iteration(False)
-      else:
-        progresswin.hide()
-    except: return
+    # load application state (widget sizes, selections, etc.)
+    def init_app_state(self):
+        winlayout = conf.load("window")
+        if (winlayout):
+            try:
+                uikit.app_restore(self, winlayout)
+                self.logo_scale(map=winlayout["toolbar"]["icon_size"])
+            except Exception as e:
+                log.APPSTATE_RESTORE(e) # may fail for disabled/reordered plugin channels
+
+
+    # store window/widget states (sizes, selections, etc.)
+    def save_app_state(self, widget):
+        # gtk widget states
+        widgetnames = ["win_streamtuner2", "toolbar", "notebook_channels", ] \
+                    + [id+"_list" for id in self.channel_names] \
+                    + [id+"_cat" for id in self.channel_names]
+        conf.save("window", uikit.app_state(wTree=self, widgetnames=widgetnames), nice=1)
+        # object vars
+        channelopts = {} #dict([(id, {"current":self.channels[id].current}) for id in self.channel_names])
+        for id in self.channels.keys():
+            if (self.channels[id]):
+                channelopts[id] = {"current":self.channels[id].current}
+        conf.save("state", channelopts, nice=1)
+
+
+    # end application and gtk+ main loop
+    def gtk_main_quit(self, widget, *x):
+        if conf.auto_save_appstate:
+            try:  # doesn't work with gtk3 yet (probably just hooking at the wrong time)
+                self.save_app_state(widget)
+            except Exception as e:
+                log.ERR("st2.gtk_main_quit", e)
+        gtk.main_quit()
+
+
+    # Right clicking a stream/station in the treeview to make context menu pop out.
+    def station_context_menu(self, treeview, event):
+        if treeview and event and event.button >= 3:
+            path = treeview.get_path_at_pos(int(event.x), int(event.y))
+            if not path:
+                return False
+            else:
+                path = path[0]
+            treeview.grab_focus()
+            treeview.set_cursor(path, None, False)
+            self.streamactions.popup(
+                  parent_menu_shell=None, parent_menu_item=None, func=None,
+                  button=event.button, activate_time=event.time,
+                  data=None
+            )
+            return None
+        # else pass on to normal left-button signal handler
+        else:
+            return False
 
 
 
 
-#-- run main                                ---------------------------------------------
-if __name__ == "__main__":
 
+# startup procedure
+def main():
 
     # graphical
-    if len(sys.argv) < 2 or "--gtk3" in sys.argv:
-    
-        
+    if not len(conf.args.action):
+
         # prepare for threading in Gtk+ callbacks
         gobject.threads_init()
-        gui_startup(1/100.0)
-        
+
         # prepare main window
         main = StreamTunerTwo()
-        
-        # module coupling
-        action.main = main      # action (play/record) module needs a reference to main window for gtk interaction and some URL/URI callbacks
-        action = action.action  # shorter name
-        ahttp.feedback = main.status  # http module gives status feedbacks too
-        
+
         # first invocation
         if (conf.get("firstrun")):
-            config_dialog.open(None)
+            main.configwin.open(None)
             del conf.firstrun
 
-
         # run
-        gui_startup(100/100.0)
         gtk.main()
-        __print__(dbg.PROC, r" gtk_main_quit ")
-        
+        [callback() for callback in main.hooks["quit"]]
+        log.PROC(r" gtk_main_quit ")
         
     # invoke command-line interface
     else:
         import cli
-        cli.StreamTunerCLI()
-
-
+        cli.StreamTunerCLI(conf.args.action)
 
+# run
+if __name__ == "__main__":
+    main()
 
-#
-#
-#
-#
diff --git a/streamtuner2.desktop b/streamtuner2.desktop
index 9491ea4..961c60d 100644
--- a/streamtuner2.desktop
+++ b/streamtuner2.desktop
@@ -1,14 +1,11 @@
 [Desktop Entry]
 Encoding=UTF-8
-Value=1.0
 Type=Application
-
 Exec=streamtuner2
 Icon=streamtuner2.png
-
 Name=streamtuner2
 Name[en]=streamtuner2
 GenericName=Internet radio browser
 Comment=Listen to shoutcast/xiph/live365 music stations
-
-Categories=AudioVideo
\ No newline at end of file
+Categories=AudioVideo
+# pack: streamtuner2.desktop=/usr/share/applications/
diff --git a/streamtuner2.png b/streamtuner2.png
index b22c998..0900356 100644
Binary files a/streamtuner2.png and b/streamtuner2.png differ
diff --git a/t.py b/t.py
deleted file mode 100644
index d266183..0000000
--- a/t.py
+++ /dev/null
@@ -1,93 +0,0 @@
-from Tkinter import *
-from ttk import *
-
-
-# Customized Toplevel window
-class Window(Tk,Toplevel):
-    window_title = "Example PyTk window"
-
-    # Named widgets
-    w = {}
-
-    # Nested list of menu entries
-    menu_struct = [
-        # (widget_id, Tk.Widget, submenu_struct[])
-        ("file", Menu, dict(label="File", background="#654"), [
-            ("save", Menu, dict(label="Save", command=None, background="#543"), []),
-            ("quit", Menu, dict(label="Quit", command=lambda:main.destroy()), []),
-        ]),
-        ("edit", Menu, dict(label="Edit"), []),
-        ("options", Menu, dict(label="Options"), [])
-    ]
-
-    # Structuring default widgets
-    layout = [
-        # (widget_id, Tk.Widget, Tk.**args, coord_props, prop_calls(), subwidgets[])
-        ("frame", Frame, dict(padding=(5,5,1,1), borderwidth=1, relief="sunken", width=200, height=100),
-        (0,0,"NESW",1,1), {"columnconfigure":{"index":0,"weight":1}, "rowconfigure":{"index":1,"weight":1}},
-        [
-            ("label_1", Label, dict(text="Label 1"), (1,0,"NW"), {}, []),
-            ("label_2", Label, dict(text="Label 2"), (1,1,"ES"), {}, []),
-            ("label_3", Label, dict(text="Label 3"), (2,0), {}, []),
-            ("sizegrip", Sizegrip, dict(), (3,5,"SE"), {}, []),
-        ]),
-    ]
-    coord_props = ("row", "column", "sticky", "rowspan", "columnspan")
-
-    # Create window and widgets
-    def __init__(self, super=Tk):
-        super.__init__(self)
-        self.title(string=self.window_title)
-        self.option_add("*tearOff", FALSE)
-        self.geometry("300x200")
-        
-        #help(Style)
-        #help(Menu)
-        s=Style()
-        s.configure(".", background="#ccddff", font=("Ubuntu", 10))
-        
-        # add menu
-        self.menu = Menu(self, tearoff=FALSE, relief=FLAT, background="#665544", foreground="#ffffff")
-        self["menu"] = self.menu
-        self.menu_construct(self.menu, self.menu_struct)
-
-        # pack widgets
-        self.widget_construct(self, self.layout)
-        self.columnconfigure(0, weight=1)
-        self.rowconfigure(0, weight=1)
-
-    # Construct submenus
-    def menu_construct(self, parent, menu_struct):
-        for (id, tkwidget, args, sub_struct) in menu_struct:
-            self.w[id] = tkwidget(parent)
-            if "command" in args:
-                parent.add_command(**args)
-            else:
-                parent.add_cascade(menu=self.w[id], **args)
-            self.menu_construct(self.w[id], sub_struct)
-
-    # Instantiate widgets, add options
-    def widget_construct(self, parent, layout_struct):
-        for (id, tkwidget, args, coord, calls, sub_struct) in layout_struct:
-            self.w[id] = tkwidget(parent, **args)
-            self.widget_pack(self.w[id], coord)
-            self.widget_calls(self.w[id], calls)
-            self.widget_construct(self.w[id], sub_struct)
-
-    # Grid packing
-    def widget_pack(self, widget, coord):
-        if type(coord) is not dict:
-           coord = dict(zip(self.coord_props[0:len(coord)], coord))
-        if not "sticky" in coord:
-           coord["sticky"] = (N,S,E,W)
-        widget.grid(**coord)
-
-    # Call property methods
-    def widget_calls(self, widget, calls):
-        for func,args in calls.items():
-            getattr(widget, func)(**args)
-
-
-main = Window()
-main.mainloop()
-
diff --git a/uikit.py b/uikit.py
new file mode 100644
index 0000000..484270d
--- /dev/null
+++ b/uikit.py
@@ -0,0 +1,740 @@
+# encoding: UTF-8
+# api: python
+# type: functions
+# title: uikit helper functions
+# description: simplify usage of some gtk widgets
+# version: 1.9
+# author: mario
+# license: public domain
+#
+# Wrappers around gtk methods. The TreeView method .columns() allows
+# to fill a treeview. It adds columns and data rows with a mapping
+# dictionary (which specifies many options and data positions).
+#
+# The .tree() method is a trimmed-down variant of that, creates a
+# single column, but has threaded entries.
+#
+# With the methodes .app_state() and .app_restore() named gtk widgets
+# can be queried for attributes. The methods return a saveable dict,
+# which contain current layout options for a few Widget types. Saving
+# and restoring must be handled elsewhere.
+
+
+# debug
+from config import *
+
+# system
+import os.path
+import copy
+import sys
+import re
+import base64
+import inspect
+from compat2and3 import unicode, xrange, PY3, gzip_decode
+
+
+# gtk version (2=gtk2, 3=gtk3, 7=tk;)
+ver = 2
+# if running on Python3 or with commandline flag
+if PY3 or conf.args.gtk3:
+    ver = 3
+# load gtk modules
+if ver==3:
+    from gi import pygtkcompat as pygtk
+    pygtk.enable() 
+    pygtk.enable_gtk(version='3.0')
+    from gi.repository import Gtk as gtk
+    from gi.repository import GObject as gobject
+    from gi.repository import GdkPixbuf
+    log.STAT(gtk)
+    log.STAT(gobject)
+else:
+    import pygtk
+    import gtk
+    import gobject
+    GdkPixbuf = gtk.gdk
+
+# prepare gtkbuilder data
+ui_xml = get_data("gtk3.xml.gz", decode=True, gz=True) #or get_data("gtk3.xml", decode=True)
+if ver == 2:
+    ui_xml = ui_xml.replace('version="3.0"', 'version="2.16"')
+
+
+# simplified gtk constructors               ---------------------------------------------
+class uikit:
+
+
+         
+    #-- fill a treeview
+    #
+    # Adds treeviewcolumns/cellrenderers and liststore from a data dictionary.
+    # Its datamap and the table contents can be supplied in one or two steps.
+    # When new data gets applied, the columns aren't recreated.
+    #
+    # The columns are created according to the datamap, which describes cell
+    # mapping and layout. Columns can have multiple cellrenderers, but usually
+    # there is a direct mapping to a data source key from entries.
+    #
+    # datamap = [  #  title   width    dict-key    type,  renderer,  attrs  
+    #               ["Name",   150,  ["titlerow",   str,    "text",    {} ]  ],
+    #               [False,     0,   ["interndat",  int,     None,     {} ]  ],
+    #               ["Desc",   200,  ["descriptn",  str,    "text",    {} ],  ["icon",str,"pixbuf",{}]  ],
+    #
+    # An according entries list then would contain a dictionary for each row:
+    #   entries = [ {"titlerow":"first", "interndat":123}, {"titlerow":"..."}, ]
+    # Keys not mentioned in the datamap get ignored, and defaults are applied
+    # for missing cols. All values must already be in the correct type however.
+    #
+    @staticmethod
+    def columns(widget, datamap=[], entries=None, show_favicons=True, pix_entry=False, fixed_size=24):
+
+        # create treeviewcolumns?
+        if not widget.get_column(0):
+            # loop through titles
+            datapos = 0
+            for n_col, desc in enumerate(datamap):
+
+                # check for title
+                if not isinstance(desc[0], str):
+                    datapos += 1  # if there is none, this is just an undisplayed data column
+                    continue
+                # new tvcolumn
+                col = gtk.TreeViewColumn(desc[0])  # title
+                col.set_resizable(True)
+                # width
+                if (desc[1] > 0):
+                    col.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
+                    col.set_fixed_width(desc[1])
+
+                # loop through cells
+                for var in range(2, len(desc)):
+                    cell = desc[var]
+                    # cell renderer
+                    if (cell[2] == "pixbuf"):
+                        rend = gtk.CellRendererPixbuf()  # img cell
+                        # stock icons
+                        if cell[1] == str:  # only match for literal `str`
+                            cell[3]["stock_id"] = datapos
+                            expand = False
+                        # pixbufs
+                        else:
+                            pix_entry = datapos
+                            cell[3]["pixbuf"] = datapos
+                            if fixed_size:
+                                if not isinstance(fixed_size, list):
+                                    fixed_size = [fixed_size, fixed_size]
+                                rend.set_fixed_size(*fixed_size)
+                    else:
+                        rend = gtk.CellRendererText()    # text cell
+                        cell[3]["text"] = datapos
+                        #col.set_sort_column_id(datapos)  # only on textual cells
+
+                    # attach cell to column
+                    col.pack_end(rend, expand=cell[3].get("expand",True))
+                    # apply attributes
+                    for attr,val in list(cell[3].items()):
+                        col.add_attribute(rend, attr, val)
+                    # next
+                    datapos += 1
+                    #log.INFO(cell, len(cell))
+
+                # add column to treeview
+                widget.append_column(col)
+           
+        # add data?
+        if (entries is not None):
+            #- expand datamap
+            vartypes = []  #(str, str, bool, str, int, int, gtk.gdk.Pixbuf, str, int)
+            rowmap = []    #["title", "desc", "bookmarked", "name", "count", "max", "img", ...]
+            for desc in datamap:
+                for var in xrange(2, len(desc)):
+                    vartypes.append(desc[var][1])  # content types
+                    rowmap.append(desc[var][0])    # dict{} column keys in entries[] list
+            # create gtk array storage
+            ls = gtk.ListStore(*vartypes)   # could be a TreeStore, too
+            #log.UI(vartypes, len(vartypes))
+            #log.DATA(rowmap, len(rowmap))
+ 
+            # prepare for missing values, and special variable types
+            defaults = {
+                str: "",
+                unicode: "",
+                bool: False,
+                int: 0,
+                gtk.gdk.Pixbuf: empty_pixbuf
+            }
+            if gtk.gdk.Pixbuf in vartypes:
+                pix_entry = vartypes.index(gtk.gdk.Pixbuf) 
+            
+            # sort data into gtk liststore array
+            for row in entries:
+
+                # preset some values if absent
+                row.setdefault("deleted", False)
+                row.setdefault("search_col", "#ffffff")
+                row.setdefault("search_set", False)
+
+                # generate ordered list from dictionary, using rowmap association
+                row = [   row.get( skey , defaults[vartypes[i]] )   for i,skey   in enumerate(rowmap)   ]
+
+                # map Python2 unicode to str
+                row = [ str(value) if type(value) is unicode else value  for value in row ]
+
+                # autotransform string -> gtk image object
+                if (pix_entry and type(row[pix_entry]) == str):
+                    pix = None
+                    try:
+                        if show_favicons and os.path.exists(row[pix_entry]):
+                            pix = gtk.gdk.pixbuf_new_from_file(row[pix_entry])
+                    except Exception as e:
+                        log.ERR("uikik.columns: Pixbuf fail,", e)
+                    row[pix_entry] = pix or defaults[gtk.gdk.Pixbuf]
+
+                try:
+                    # add
+                    ls.append(row)   # had to be adapted for real TreeStore (would require additional input for grouping/level/parents)
+
+                except:
+                    # brute-force typecast
+                    ls.append( [va  if ty==gtk.gdk.Pixbuf  else ty(va)   for va,ty in zip(row,vartypes)]  )
+
+            #if entries:
+            #     log.ROWS(row, len(row))
+            
+            # apply array to widget
+            widget.set_model(ls)
+            return ls, rowmap, pix_entry
+            
+        pass
+
+
+
+
+    #-- treeview for categories
+    #
+    # simple two-level treeview display in one column
+    # with entries = [main,[sub,sub], title,[...],...]
+    #
+    @staticmethod     
+    def tree(widget, entries, title="category", icon=gtk.STOCK_DIRECTORY):
+
+        # list types
+        ls = gtk.TreeStore(str, str)
+        #log.DATA(".tree", entries)
+
+        # add entries
+        main = None
+        for entry in entries:
+            if isinstance(entry, (str,unicode)):
+                main = ls.append(None, [str(entry), icon])
+            else:
+                for sub_title in entry:
+                    ls.append(main, [str(sub_title), icon])
+
+        # finalize
+        widget.set_model(ls)
+        widget.set_search_column(0)
+        #tvcolumn.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
+        #tvcolumn.set_fixed_width(125])
+        #widget.expand_all()
+        #widget.expand_row("3", False)
+        #print(widget.row_expanded("3"))
+        return ls
+
+
+    @staticmethod
+    def tree_column(widget, title="Category"):
+        # just one column
+        tvcolumn = gtk.TreeViewColumn(title);
+        widget.append_column(tvcolumn)
+
+        # inner display: icon & string
+        pix = gtk.CellRendererPixbuf()
+        txt = gtk.CellRendererText()
+
+        # position
+        tvcolumn.pack_start(pix, expand=False)
+        tvcolumn.pack_end(txt, expand=True)
+
+        # select array content source in treestore
+        tvcolumn.add_attribute(pix, "stock_id", 1)
+        tvcolumn.add_attribute(txt, "text", 0)
+        tvcolumn.set_sort_column_id(0)
+
+
+
+    #-- save window size and widget properties
+    #
+    # needs a list of widgetnames
+    # e.g. pickle.dump(uikit.app_state(...), open(os.environ["HOME"]+"/.config/app_winstate", "w"))
+    #
+    @staticmethod
+    def app_state(wTree, widgetnames=["window1", "treeview2", "vbox17"]):
+        r = {} # restore array
+        for wn in widgetnames:
+            r[wn] = {}
+            w = wTree.get_widget(wn)
+            t = type(w)
+        #    print(wn, w, t)
+            # extract different information from individual widget types
+            if t == gtk.Window:
+                r[wn]["size"] = list(w.get_size())
+                #print("WINDOW SIZE", list(w.get_size()), r[wn])
+            if t == gtk.Widget:
+                r[wn]["name"] = w.get_name()
+            # gtk.TreeView
+            if t == gtk.TreeView:
+                r[wn]["columns:width"] = []
+                for col in w.get_columns():
+                    r[wn]["columns:width"].append( col.get_width() )
+                # - Rows
+                r[wn]["rows:expanded"] = []
+                for i in xrange(0,50):
+                    if w.row_expanded(treepath(i)):   # Gtk.TreePath for Gtk3
+                        r[wn]["rows:expanded"].append(i)
+                # - selected
+                (model, paths) = w.get_selection().get_selected_rows()
+                if paths:
+                    r[wn]["row:selected"] = treepath_to_str(paths[0])
+            # gtk.Toolbar
+            if t == gtk.Toolbar:
+                r[wn]["icon_size"] = int(w.get_icon_size())
+                r[wn]["style"] = int(w.get_style())
+            # gtk.Notebook
+            if t == gtk.Notebook:
+                r[wn]["tab_pos"] = int(w.get_tab_pos())
+                r[wn]["tab_order"] = [w.get_menu_label_text(w.get_nth_page(i)) for i in xrange(0, w.get_n_pages())]
+                r[wn]["tab_current"] = w.get_menu_label_text(w.get_nth_page(w.get_current_page()))
+        #print(r)
+        return r
+
+    gtk_position_type_enum = [gtk.POS_LEFT, gtk.POS_RIGHT, gtk.POS_TOP, gtk.POS_BOTTOM]
+
+
+    #-- restore window and widget properties
+    #
+    # requires only the previously saved widget state dict
+    #
+    @staticmethod
+    def app_restore(wTree, r=None):
+        for wn in r.keys():  # widgetnames
+            w = wTree.get_widget(wn)
+            if (not w):
+                continue
+            t = type(w)
+            for method,args in r[wn].items():
+                # gtk.Window
+                if method == "size":
+                    w.resize(args[0], args[1])
+                # gtk.TreeView
+                if method == "columns:width":
+                    for i,col in enumerate(w.get_columns()):
+                        if (i < len(args)):
+                            col.set_fixed_width(args[i])
+                #  - Rows
+                if method == "rows:expanded":
+                    w.collapse_all()
+                    for i in args:
+                        w.expand_row(treepath(i), False)
+                #  - selected
+              #  if method == "row:selected":
+              #      w.get_selection().select_path(treepath(args))
+                # gtk.Toolbar
+                if method == "icon_size":
+                    w.set_icon_size(args)
+                if method == "style":
+                    w.set_style(args)
+                # gtk.Notebook
+                if method == "tab_pos":
+                    w.set_tab_pos(r[wn]["tab_pos"])
+                if method == "tab_order":
+                    tab_current = r[wn].get("tab_current")
+                    for pos,ord_tabname in enumerate(args):
+                        # compare current label list on each reordering round
+                        for i in range(0, w.get_n_pages()):
+                            w_tab = w.get_nth_page(i)
+                            w_label = w.get_menu_label_text(w_tab)
+                            if w_label == ord_tabname:
+                                w.reorder_child(w_tab, pos)
+                            if tab_current == ord_tabname:
+                                w.set_current_page(pos)
+        pass
+
+
+
+    #-- Save-As dialog
+    #
+    @staticmethod
+    def save_file(title="Save As", parent=None, fn="", formats=[("*.pls", "*.pls"), ("*.xspf", "*.xpsf"), ("*.m3u", "*.m3u"), ("*.jspf", "*.jspf"), ("*.asx", "*.asx"), ("*.json", "*.json"), ("*.smil", "*.smil"), ("*.desktop", "*.desktop"), ("*","*")]):
+
+        # With overwrite confirmation
+        c = gtk.FileChooserDialog(title, parent, action=gtk.FILE_CHOOSER_ACTION_SAVE,
+                buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_SAVE, gtk.RESPONSE_OK))
+        c.set_do_overwrite_confirmation(True)
+
+        # Params
+        if fn:
+            c.set_current_name(fn)
+            fn = ""
+        for fname,ftype in formats:
+            f = gtk.FileFilter()
+            f.set_name(fname)
+            f.add_pattern(ftype)
+            c.add_filter(f)
+        # Yes, that's how to retrieve signals for changed filter selections
+        try:
+            filterbox = c.get_children()[0].get_children()[0]
+            filterbox.connect("notify::filter", lambda *w: uikit.save_file_filterchange(c))
+        except: pass
+        
+        # Filter handlers don't work either.
+
+        # Display and wait
+        if c.run():
+            fn = c.get_filename()  # return filaname
+        c.destroy()
+        return fn
+
+    # Callback for changed FileFilter, updates current filename extension
+    @staticmethod
+    def save_file_filterchange(c):
+        fn, ext = c.get_filename(), c.get_filter().get_name()
+        if fn and ext:
+            fn = os.path.basename(fn)
+            c.set_current_name(re.sub(r"\.(m3u|pls|xspf|jspf|asx|json|smil|desktop|url|wpl)8?$", ext.strip("*"), fn))
+        
+    
+
+    # Spool gtk update calls from non-main threads (optional immediate=1 flag to run task next, not last)
+    @staticmethod
+    def do(callback, *args, **kwargs):
+        name = inspect.getsource(callback).strip() if callback.__name__=='<lambda>' else str(callback)
+        if kwargs.get("immediate"):
+            del kwargs["immediate"]
+            pos = 0
+        else:
+            pos = len(uikit.idle_tasks)
+        # Run callback right away
+        if uikit.in_idle or conf.nothreads:
+            log.UIKIT_RUN_NOW(name)
+            callback(*args, **kwargs)
+        # Spool them for Gtk idle handling
+        else:
+            #log.UIKIT_SPOOL(name)
+            uikit.idle_tasks.insert(pos, [lambda: callback(*args, **kwargs), name])
+            gobject.idle_add(uikit.idle_do)
+    
+    # Collect tasks to perform in gtk.main loop
+    idle_tasks = []
+    in_idle = False
+    
+    # Execute UI updating tasks in order
+    @staticmethod
+    def idle_do():
+        uikit.in_idle = True
+        if uikit.idle_tasks:
+            task, name = uikit.idle_tasks.pop(0)
+            log.UIKIT_EXEC(name)
+            task()
+        uikit.in_idle = False
+        return len(uikit.idle_tasks) > 0
+        
+
+
+    # Adds background color to widget,
+    # eventually wraps it into a gtk.EventBox, if it needs a container
+    @staticmethod
+    def bg(w, color="", where=["bg"], wrap=1):
+        """ this method should be called after widget creation, and before .add()ing it to container """
+        if color:
+            # wrap unstylable widgets into EventBox
+            if wrap and not isinstance(w, (gtk.Window, gtk.EventBox)):
+                wrap = gtk.EventBox()
+                wrap.add(w)
+                w = wrap
+            # copy style object, modify settings
+            try: # Gtk2
+                c = w.get_colormap().alloc_color(color)
+            except: # Gtk3
+                p, c = gtk.gdk.Color.parse(color)
+            for state in (gtk.STATE_NORMAL, gtk.STATE_SELECTED, gtk.STATE_ACTIVE):
+                w.modify_bg(state, c)
+        # return modified or wrapped widget
+        return w
+
+
+    # Create GtkLabel
+    @staticmethod
+    def label(text, size=305, markup=0):
+        label = gtk.Label(text)
+        if markup:
+            label.set_markup(text)
+        #######label.set_property("visible", True)
+        label.set_line_wrap(True) 
+        label.set_size_request(size, -1)
+        return label
+
+    # Wrap two widgets in horizontal box
+    @staticmethod
+    def hbox(w1, w2, exr=True):
+        b = gtk.HBox(homogeneous=False, spacing=5)
+        ######b.set_property("visible", True)
+        b.pack_start(w1, expand=not exr, fill=not exr)
+        b.pack_start(w2, expand=exr, fill=exr)
+        return b
+
+
+    # Wrap entries/checkboxes with extra label, background, images, etc.
+    @staticmethod
+    def wrap(widgetstore=None, id=None, w=None, label=None, color=None, image=None, align=1, label_size=305, label_markup=0):
+        if id:
+            widgetstore[id] = w
+        if label:
+            if type(w) is gtk.Entry:
+                w.set_width_chars(11)
+            w = uikit.hbox(w, uikit.label(label, size=label_size, markup=label_markup))
+        if image:
+            pix = gtk.image_new_from_pixbuf(uikit.pixbuf(image))
+            if pix:
+                w = uikit.hbox(w, pix, exr=False)
+        if color:
+            w = uikit.bg(w, color)
+        if align:
+            a = gtk.Alignment()
+            a.set_padding(0, 0, align, 0)
+            a.add(w)
+            w = a
+        w.show_all()
+        return w
+
+
+    # Attach textual menu entry and callback
+    @staticmethod
+    def add_menu(menuwidget, label, action, insert=None):
+        for where in list(menuwidget):
+            m = gtk.MenuItem(label)
+            m.connect("activate", action)
+            m.show()
+            if insert:
+                where.insert(m, insert)
+            else:
+                where.add(m)
+        
+
+    # gtk.messagebox
+    @staticmethod
+    def msg(text, style=gtk.MESSAGE_INFO, buttons=gtk.BUTTONS_CLOSE, yes=None):
+        m = gtk.MessageDialog(None, 0, style, buttons, message_format=text)
+        m.show()
+        if yes:
+            response = m.run()
+            m.destroy()
+            return response in (gtk.RESPONSE_OK, gtk.RESPONSE_ACCEPT, gtk.RESPONSE_YES)
+        else:
+            m.connect("response", lambda *w: m.destroy())
+        pass
+        
+
+    # manual signal binding with a dict of { (widget, signal): callback }
+    @staticmethod
+    def add_signals(builder, map):
+        for (widget,signal),func in map.items():
+            builder.get_widget(widget).connect(signal, func)
+
+        
+    # Pixbug loader (from inline string, as in `logo.png`, automatic base64 decoding, and gunzipping of raw data)
+    @staticmethod
+    def pixbuf(buf, fmt="png", decode=True, gzip=False):
+        if not buf or len(buf) < 16:
+            return None
+        if fmt and ver==3:
+            p = GdkPixbuf.PixbufLoader.new_with_type(fmt)
+        elif fmt:
+            p = GdkPixbuf.PixbufLoader(fmt)
+        else:
+            p = GdkPixbuf.PixbufLoader()
+        if decode and re.match("^[\w+/=\s]+$", str(buf)):
+            buf = base64.b64decode(buf)  # inline encoding
+        if gzip:
+            buf = gzip_decode(buf)
+        if buf:
+            p.write(buf)
+        pix = p.get_pixbuf()
+        p.close()
+        return pix
+            
+
+# Transparent png            
+empty_pixbuf = uikit.pixbuf(
+    """iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAA
+    B6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUU
+    H3wQLEAE6zgxuGAAAABFJREFUOBFjGAWjYBSMAigAAAQQAAFWMn04AAAAAElFTkSuQmCC"""
+)
+
+
+
+#-- Gtk3 wrappers
+
+# Use a str of "1:2:3" as treepath,
+# literally in Gtk2, TreePath-wrapped for Gtk3
+def treepath(ls):
+    if isinstance(ls, (list,tuple)):
+        ls = ":".join(map(str, ls))
+    if ver==2:
+        return ls
+    else:
+        return gtk.TreePath.new_from_string(str(ls))
+#
+def treepath_to_str(tp):
+    if ver==2:
+        return tp
+    else:
+        return tp.to_string()
+        
+
+
+# Text-only dropdown list.
+#
+# Necessary because gtk.ComboBoxText binding is absent in debian packages
+# https://bugzilla.gnome.org/show_bug.cgi?id=660659
+#
+# This one implements a convenience method `.set_default()` to define the active
+# selection by value, rather than by index.
+#
+# Can use a list[] of entries or a key->value dict{}, where the value becomes
+# display text, and the key the internal value.
+#
+class ComboBoxText(gtk.ComboBox):
+
+    ls = None
+
+    def __init__(self, entries, no_scroll=1):
+
+        # prepare widget
+        gtk.ComboBox.__init__(self)
+        ########self.set_property("visible", True)
+        cell = gtk.CellRendererText()
+        self.pack_start(cell, True)
+        self.add_attribute(cell, "text", 1)
+        if no_scroll:
+            self.connect("scroll_event", self.no_scroll)
+
+        # collect entries
+        self.ls = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING)
+        self.set_model(self.ls)
+        if type(entries[0]) is not tuple:
+            entries = zip(entries, entries)
+        for key,value in entries:
+            self.ls.append([key, value])
+        
+    # activate dropdown of given value
+    def set_default(self, value):
+        for index,row in enumerate(self.ls):
+            if value in row:
+                return self.set_active(index)
+        # add as custom entry
+        self.ls.append([value, value])
+        self.set_active(index + 1)
+
+    # fetch currently selected text entry
+    def get_active_text(self):
+        index = self.get_active()
+        if index >= 0:
+            return self.ls[index][0]
+
+    # Signal/Event callback to prevent hover scrolling of ComboBox widgets
+    def no_scroll(self, widget, event, data=None):
+        return True
+
+
+    # Expand A=a|B=b|C=c option list into (key,value) tuple list, or A|B|C just into a list.
+    @staticmethod
+    def parse_options(opts, sep="|", assoc="="):
+        if opts.find(assoc) >= 0:
+            return [ (k,v) for k,v in (x.split(assoc, 1) for x in opts.split(sep)) ]
+        else:
+            return opts.split(sep) #dict( (v,v) for v in opts.split(sep) )
+
+
+
+
+
+#-- startup progress bar
+progresswin, progressbar = None, None
+def gui_startup(p=0/100.0, msg="streamtuner2 is starting"):
+    global progresswin, progressbar
+    
+    if not progresswin:
+
+        # GtkWindow "progresswin"
+        progresswin = gtk.Window()
+        progresswin.set_property("title", "streamtuner2")
+        progresswin.set_property("default_width", 300)
+        progresswin.set_property("width_request", 300)
+        progresswin.set_property("default_height", 30)
+        progresswin.set_property("height_request", 30)
+        #progresswin.set_property("window_position", "center")
+        progresswin.set_property("decorated", False)
+        #######progresswin.set_property("visible", True)
+
+        # GtkProgressBar "progressbar"
+        progressbar = gtk.ProgressBar()
+        #########progressbar.set_property("visible", True)
+        progressbar.set_property("show_text", True)
+        progressbar.set_property("text", msg)
+        progresswin.add(progressbar)
+        progresswin.show_all()
+
+    try:
+      if p <= 0.0:
+        pass
+      elif p < 1.0:
+        progressbar.set_fraction(p)
+        progressbar.set_property("text", msg)
+        while gtk.events_pending(): gtk.main_iteration()
+      else:
+        progresswin.hide()
+    except Exception as e:
+        log.ERR("gui_startup()", e)
+
+
+
+
+# Encapsulates references to gtk objects AND properties in main window,
+# which allows to use self. and main. almost interchangably.
+#
+# This is a kludge to keep gtkBuilder widgets accessible; so just one
+# instance has to be built. Also ties main.channels{} or .features{}
+# dicts together for feature windows. Used by search, config, streamedit.
+#
+class AuxiliaryWindow(object):
+
+    def __init__(self, parent):
+        self.main = parent
+        self.module = self.__class__.__name__
+        self.meta = plugin_meta(None, inspect.getcomments(inspect.getmodule(self)))
+        
+    def __getattr__(self, name):
+        if name in self.main.__dict__:
+            return self.main.__dict__[name]
+        elif name in self.main.__class__.__dict__:
+            return self.main.__class__.__dict__[name]
+        else:
+            return self.main.get_widget(name)
+
+
+
+
+# Auxiliary window: about dialog
+#
+class AboutStreamtuner2(AuxiliaryWindow):
+    def __init__(self, parent):
+        a = gtk.AboutDialog()
+        a.set_name(parent.meta["id"])
+        a.set_version(parent.meta["version"])
+        a.set_license(parent.meta["license"])
+        a.set_authors((get_data("CREDITS") or parent.meta["author"]).split("\n"))
+        a.set_website(parent.meta["url"])
+        a.connect("response", lambda a, ok: ( a.hide(), a.destroy() ) )
+        a.show_all()
+            

-- 
streamtuner2 packaging



More information about the pkg-multimedia-commits mailing list